From 464a72dd4154f314e08c9d0c4d07417e2bf255f0 Mon Sep 17 00:00:00 2001
From: Roland Scheidegger <sroland@vmware.com>
Date: Wed, 17 Feb 2010 16:44:38 +0100
Subject: gallium: remove redundant nr_components field from
 pipe_vertex_element

This is a property of the associated src_format pipe format.
Hence use util_format_get_nr_components to query this when necessary instead.
---
 src/mesa/state_tracker/st_draw.c          | 3 ---
 src/mesa/state_tracker/st_draw_feedback.c | 1 -
 2 files changed, 4 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c
index 4b48c168e9..397dddbb47 100644
--- a/src/mesa/state_tracker/st_draw.c
+++ b/src/mesa/state_tracker/st_draw.c
@@ -368,7 +368,6 @@ setup_interleaved_attribs(GLcontext *ctx,
          (unsigned) (arrays[mesaAttr]->Ptr - offset0);
       velements[attr].instance_divisor = 0;
       velements[attr].vertex_buffer_index = 0;
-      velements[attr].nr_components = arrays[mesaAttr]->Size;
       velements[attr].src_format =
          st_pipe_vertex_format(arrays[mesaAttr]->Type,
                                arrays[mesaAttr]->Size,
@@ -458,7 +457,6 @@ setup_non_interleaved_attribs(GLcontext *ctx,
       vbuffer[attr].max_index = max_index;
       velements[attr].instance_divisor = 0;
       velements[attr].vertex_buffer_index = attr;
-      velements[attr].nr_components = arrays[mesaAttr]->Size;
       velements[attr].src_format
          = st_pipe_vertex_format(arrays[mesaAttr]->Type,
                                  arrays[mesaAttr]->Size,
@@ -596,7 +594,6 @@ st_draw_vbo(GLcontext *ctx,
       for (i = 0; i < num_velements; i++) {
          printf("vlements[%d].vbuffer_index = %u\n", i, velements[i].vertex_buffer_index);
          printf("vlements[%d].src_offset = %u\n", i, velements[i].src_offset);
-         printf("vlements[%d].nr_comps = %u\n", i, velements[i].nr_components);
          printf("vlements[%d].format = %s\n", i, util_format_name(velements[i].src_format));
       }
    }
diff --git a/src/mesa/state_tracker/st_draw_feedback.c b/src/mesa/state_tracker/st_draw_feedback.c
index 087f2f22bb..26a5b3fcd6 100644
--- a/src/mesa/state_tracker/st_draw_feedback.c
+++ b/src/mesa/state_tracker/st_draw_feedback.c
@@ -178,7 +178,6 @@ st_feedback_draw_vbo(GLcontext *ctx,
       vbuffers[attr].max_index = max_index;
       velements[attr].instance_divisor = 0;
       velements[attr].vertex_buffer_index = attr;
-      velements[attr].nr_components = arrays[mesaAttr]->Size;
       velements[attr].src_format = 
          st_pipe_vertex_format(arrays[mesaAttr]->Type,
                                arrays[mesaAttr]->Size,
-- 
cgit v1.2.3


From 63cb6f59eac91ba34cf80ff3736568e40b094fe1 Mon Sep 17 00:00:00 2001
From: Michal Krol <michal@vmware.com>
Date: Mon, 22 Feb 2010 21:36:22 +0100
Subject: gallium: Remove bypass_vs_clip_and_viewport from rasteriser state.

Needs testing.
---
 src/gallium/auxiliary/draw/draw_context.c          |   8 +-
 src/gallium/auxiliary/draw/draw_pt.c               |   4 +-
 .../auxiliary/draw/draw_pt_fetch_shade_emit.c      |   3 +-
 .../auxiliary/draw/draw_pt_fetch_shade_pipeline.c  |  15 +-
 src/gallium/auxiliary/util/u_blit.c                |  15 +-
 src/gallium/auxiliary/util/u_blitter.c             |   1 -
 src/gallium/auxiliary/util/u_dump_state.c          |   1 -
 src/gallium/auxiliary/util/u_gen_mipmap.c          |  39 ++-
 src/gallium/docs/source/cso/rasterizer.rst         |  12 -
 src/gallium/drivers/nv30/nv30_context.h            |   1 -
 src/gallium/drivers/nv30/nv30_state_viewport.c     |  58 +----
 src/gallium/drivers/nv40/nv40_context.h            |   1 -
 src/gallium/drivers/nv40/nv40_state_viewport.c     |  57 +----
 src/gallium/drivers/nv50/nv50_context.h            |   1 -
 src/gallium/drivers/nv50/nv50_state_validate.c     |  62 ++---
 src/gallium/drivers/r300/r300_context.h            |   2 -
 src/gallium/drivers/r300/r300_emit.c               |  46 ++--
 src/gallium/drivers/r300/r300_state.c              |   5 +-
 src/gallium/drivers/r300/r300_state_derived.c      |   8 +-
 src/gallium/drivers/softpipe/sp_video_context.c    |   1 -
 src/gallium/drivers/svga/svga_state_framebuffer.c  | 285 ++++++++++-----------
 src/gallium/drivers/svga/svga_state_need_swtnl.c   |   3 +-
 src/gallium/drivers/trace/tr_dump_state.c          |   1 -
 src/gallium/include/pipe/p_state.h                 |  10 -
 src/mesa/state_tracker/st_cb_clear.c               |  44 ++--
 25 files changed, 271 insertions(+), 412 deletions(-)

(limited to 'src/mesa')

diff --git a/src/gallium/auxiliary/draw/draw_context.c b/src/gallium/auxiliary/draw/draw_context.c
index d5ddc4a6a9..bb0988543f 100644
--- a/src/gallium/auxiliary/draw/draw_context.c
+++ b/src/gallium/auxiliary/draw/draw_context.c
@@ -128,9 +128,7 @@ void draw_set_rasterizer_state( struct draw_context *draw,
    draw_do_flush( draw, DRAW_FLUSH_STATE_CHANGE );
 
    draw->rasterizer = raster;
-   draw->bypass_clipping =
-      ((draw->rasterizer && draw->rasterizer->bypass_vs_clip_and_viewport) ||
-       draw->driver.bypass_clipping);
+   draw->bypass_clipping = draw->driver.bypass_clipping;
 }
 
 
@@ -140,9 +138,7 @@ void draw_set_driver_clipping( struct draw_context *draw,
    draw_do_flush( draw, DRAW_FLUSH_STATE_CHANGE );
 
    draw->driver.bypass_clipping = bypass_clipping;
-   draw->bypass_clipping =
-      ((draw->rasterizer && draw->rasterizer->bypass_vs_clip_and_viewport) ||
-       draw->driver.bypass_clipping);
+   draw->bypass_clipping = draw->driver.bypass_clipping;
 }
 
 
diff --git a/src/gallium/auxiliary/draw/draw_pt.c b/src/gallium/auxiliary/draw/draw_pt.c
index 341353f628..6d90a6c42f 100644
--- a/src/gallium/auxiliary/draw/draw_pt.c
+++ b/src/gallium/auxiliary/draw/draw_pt.c
@@ -87,9 +87,7 @@ draw_pt_arrays(struct draw_context *draw,
          opt |= PT_CLIPTEST;
       }
       
-      if (!draw->rasterizer->bypass_vs_clip_and_viewport) {
-         opt |= PT_SHADE;
-      }
+      opt |= PT_SHADE;
    }
       
    if (opt == 0) 
diff --git a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_emit.c b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_emit.c
index c5dfbcfa3c..1aecb51077 100644
--- a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_emit.c
+++ b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_emit.c
@@ -100,8 +100,7 @@ static void fse_prepare( struct draw_pt_middle_end *middle,
    fse->key.nr_elements = MAX2(fse->key.nr_outputs,     /* outputs - translate to hw format */
                                fse->key.nr_inputs);     /* inputs - fetch from api format */
 
-   fse->key.viewport = (!draw->rasterizer->bypass_vs_clip_and_viewport &&
-                        !draw->identity_viewport);
+   fse->key.viewport = !draw->identity_viewport;
    fse->key.clip = !draw->bypass_clipping;
    fse->key.const_vbuffers = 0;
 
diff --git a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline.c b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline.c
index 56b69354b2..da5106463a 100644
--- a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline.c
+++ b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline.c
@@ -96,8 +96,7 @@ static void fetch_pipeline_prepare( struct draw_pt_middle_end *middle,
     */
    draw_pt_post_vs_prepare( fpme->post_vs,
 			    (boolean)draw->bypass_clipping,
-			    (boolean)(draw->identity_viewport ||
-			    draw->rasterizer->bypass_vs_clip_and_viewport),
+			    (boolean)draw->identity_viewport,
 			    (boolean)draw->rasterizer->gl_rasterization_rules,
 			    (draw->vs.edgeflag_output ? true : false) );    
 
@@ -154,9 +153,7 @@ static void fetch_pipeline_run( struct draw_pt_middle_end *middle,
 		      (char *)pipeline_verts );
 
    /* Run the shader, note that this overwrites the data[] parts of
-    * the pipeline verts.  If there is no shader, eg if
-    * bypass_vs_clip_and_viewport, then the inputs == outputs, and are
-    * already in the correct place.
+    * the pipeline verts.
     */
    if (opt & PT_SHADE)
    {
@@ -239,9 +236,7 @@ static void fetch_pipeline_linear_run( struct draw_pt_middle_end *middle,
                              (char *)pipeline_verts );
 
    /* Run the shader, note that this overwrites the data[] parts of
-    * the pipeline verts.  If there is no shader, ie if
-    * bypass_vs_clip_and_viewport, then the inputs == outputs, and are
-    * already in the correct place.
+    * the pipeline verts.
     */
    if (opt & PT_SHADE)
    {
@@ -319,9 +314,7 @@ static boolean fetch_pipeline_linear_run_elts( struct draw_pt_middle_end *middle
                              (char *)pipeline_verts );
 
    /* Run the shader, note that this overwrites the data[] parts of
-    * the pipeline verts.  If there is no shader, ie if
-    * bypass_vs_clip_and_viewport, then the inputs == outputs, and are
-    * already in the correct place.
+    * the pipeline verts.
     */
    if (opt & PT_SHADE)
    {
diff --git a/src/gallium/auxiliary/util/u_blit.c b/src/gallium/auxiliary/util/u_blit.c
index f0bc58a558..90a3230a0f 100644
--- a/src/gallium/auxiliary/util/u_blit.c
+++ b/src/gallium/auxiliary/util/u_blit.c
@@ -101,7 +101,6 @@ util_create_blit(struct pipe_context *pipe, struct cso_context *cso)
    memset(&ctx->rasterizer, 0, sizeof(ctx->rasterizer));
    ctx->rasterizer.front_winding = PIPE_WINDING_CW;
    ctx->rasterizer.cull_mode = PIPE_WINDING_NONE;
-   ctx->rasterizer.bypass_vs_clip_and_viewport = 1;
    ctx->rasterizer.gl_rasterization_rules = 1;
 
    /* samplers */
@@ -114,7 +113,6 @@ util_create_blit(struct pipe_context *pipe, struct cso_context *cso)
    ctx->sampler.mag_img_filter = 0; /* set later */
    ctx->sampler.normalized_coords = 1;
 
-
    /* vertex shader - still required to provide the linkage between
     * fragment shader input semantics and vertex_element/buffers.
     */
@@ -407,6 +405,7 @@ util_blit_pixels_writemask(struct blit_state *ctx,
    cso_save_rasterizer(ctx->cso);
    cso_save_samplers(ctx->cso);
    cso_save_sampler_textures(ctx->cso);
+   cso_save_viewport(ctx->cso);
    cso_save_framebuffer(ctx->cso);
    cso_save_fragment_shader(ctx->cso);
    cso_save_vertex_shader(ctx->cso);
@@ -422,6 +421,17 @@ util_blit_pixels_writemask(struct blit_state *ctx,
    cso_single_sampler(ctx->cso, 0, &ctx->sampler);
    cso_single_sampler_done(ctx->cso);
 
+   /* viewport */
+   ctx->viewport.scale[0] = 0.5f * dst->width;
+   ctx->viewport.scale[1] = 0.5f * dst->height;
+   ctx->viewport.scale[2] = 1.0f;
+   ctx->viewport.scale[3] = 1.0f;
+   ctx->viewport.translate[0] = 0.5f * dst->width;
+   ctx->viewport.translate[1] = 0.5f * dst->height;
+   ctx->viewport.translate[2] = 0.0f;
+   ctx->viewport.translate[3] = 0.0f;
+   cso_set_viewport(ctx->cso, &ctx->viewport);
+
    /* texture */
    cso_set_sampler_textures(ctx->cso, 1, &tex);
 
@@ -461,6 +471,7 @@ util_blit_pixels_writemask(struct blit_state *ctx,
    cso_restore_rasterizer(ctx->cso);
    cso_restore_samplers(ctx->cso);
    cso_restore_sampler_textures(ctx->cso);
+   cso_restore_viewport(ctx->cso);
    cso_restore_framebuffer(ctx->cso);
    cso_restore_fragment_shader(ctx->cso);
    cso_restore_vertex_shader(ctx->cso);
diff --git a/src/gallium/auxiliary/util/u_blitter.c b/src/gallium/auxiliary/util/u_blitter.c
index 18f8606818..50877f6b01 100644
--- a/src/gallium/auxiliary/util/u_blitter.c
+++ b/src/gallium/auxiliary/util/u_blitter.c
@@ -160,7 +160,6 @@ struct blitter_context *util_blitter_create(struct pipe_context *pipe)
    memset(&rs_state, 0, sizeof(rs_state));
    rs_state.front_winding = PIPE_WINDING_CW;
    rs_state.cull_mode = PIPE_WINDING_NONE;
-   rs_state.bypass_vs_clip_and_viewport = 1;
    rs_state.gl_rasterization_rules = 1;
    rs_state.flatshade = 1;
    ctx->rs_state = pipe->create_rasterizer_state(pipe, &rs_state);
diff --git a/src/gallium/auxiliary/util/u_dump_state.c b/src/gallium/auxiliary/util/u_dump_state.c
index eaf4ec90f2..ae7afd7311 100644
--- a/src/gallium/auxiliary/util/u_dump_state.c
+++ b/src/gallium/auxiliary/util/u_dump_state.c
@@ -318,7 +318,6 @@ util_dump_rasterizer_state(struct os_stream *stream, const struct pipe_rasterize
    util_dump_member(stream, uint, state, line_stipple_factor);
    util_dump_member(stream, uint, state, line_stipple_pattern);
    util_dump_member(stream, bool, state, line_last_pixel);
-   util_dump_member(stream, bool, state, bypass_vs_clip_and_viewport);
    util_dump_member(stream, bool, state, flatshade_first);
    util_dump_member(stream, bool, state, gl_rasterization_rules);
 
diff --git a/src/gallium/auxiliary/util/u_gen_mipmap.c b/src/gallium/auxiliary/util/u_gen_mipmap.c
index 1d7329d422..4f9ff1d961 100644
--- a/src/gallium/auxiliary/util/u_gen_mipmap.c
+++ b/src/gallium/auxiliary/util/u_gen_mipmap.c
@@ -1296,7 +1296,6 @@ util_create_gen_mipmap(struct pipe_context *pipe,
    memset(&ctx->rasterizer, 0, sizeof(ctx->rasterizer));
    ctx->rasterizer.front_winding = PIPE_WINDING_CW;
    ctx->rasterizer.cull_mode = PIPE_WINDING_NONE;
-   ctx->rasterizer.bypass_vs_clip_and_viewport = 1;
    ctx->rasterizer.gl_rasterization_rules = 1;
 
    /* sampler state */
@@ -1361,25 +1360,25 @@ get_next_slot(struct gen_mipmap_state *ctx)
 static unsigned
 set_vertex_data(struct gen_mipmap_state *ctx,
                 enum pipe_texture_target tex_target,
-                uint face, float width, float height)
+                uint face)
 {
    unsigned offset;
 
    /* vert[0].position */
-   ctx->vertices[0][0][0] = 0.0f; /*x*/
-   ctx->vertices[0][0][1] = 0.0f; /*y*/
+   ctx->vertices[0][0][0] = -1.0f; /*x*/
+   ctx->vertices[0][0][1] = -1.0f; /*y*/
 
    /* vert[1].position */
-   ctx->vertices[1][0][0] = width;
-   ctx->vertices[1][0][1] = 0.0f;
+   ctx->vertices[1][0][0] = 1.0f;
+   ctx->vertices[1][0][1] = -1.0f;
 
    /* vert[2].position */
-   ctx->vertices[2][0][0] = width;
-   ctx->vertices[2][0][1] = height;
+   ctx->vertices[2][0][0] = 1.0f;
+   ctx->vertices[2][0][1] = 1.0f;
 
    /* vert[3].position */
-   ctx->vertices[3][0][0] = 0.0f;
-   ctx->vertices[3][0][1] = height;
+   ctx->vertices[3][0][0] = -1.0f;
+   ctx->vertices[3][0][1] = 1.0f;
 
    /* Setup vertex texcoords.  This is a little tricky for cube maps. */
    if (tex_target == PIPE_TEXTURE_CUBE) {
@@ -1499,6 +1498,7 @@ util_gen_mipmap(struct gen_mipmap_state *ctx,
    cso_save_framebuffer(ctx->cso);
    cso_save_fragment_shader(ctx->cso);
    cso_save_vertex_shader(ctx->cso);
+   cso_save_viewport(ctx->cso);
 
    /* bind our state */
    cso_set_blend(ctx->cso, &ctx->blend);
@@ -1522,6 +1522,7 @@ util_gen_mipmap(struct gen_mipmap_state *ctx,
     */
    for (dstLevel = baseLevel + 1; dstLevel <= lastLevel; dstLevel++) {
       const uint srcLevel = dstLevel - 1;
+      struct pipe_viewport_state vp;
 
       struct pipe_surface *surf = 
          screen->get_tex_surface(screen, pt, face, dstLevel, zslice,
@@ -1535,6 +1536,17 @@ util_gen_mipmap(struct gen_mipmap_state *ctx,
       fb.height = u_minify(pt->height0, dstLevel);
       cso_set_framebuffer(ctx->cso, &fb);
 
+      /* viewport */
+      vp.scale[0] = 0.5f * fb.width;
+      vp.scale[1] = 0.5f * fb.height;
+      vp.scale[2] = 1.0f;
+      vp.scale[3] = 1.0f;
+      vp.translate[0] = 0.5f * fb.width;
+      vp.translate[1] = 0.5f * fb.height;
+      vp.translate[2] = 0.0f;
+      vp.translate[3] = 0.0f;
+      cso_set_viewport(ctx->cso, &vp);
+
       /*
        * Setup sampler state
        * Note: we should only have to set the min/max LOD clamps to ensure
@@ -1549,12 +1561,10 @@ util_gen_mipmap(struct gen_mipmap_state *ctx,
 
       cso_set_sampler_textures(ctx->cso, 1, &pt);
 
-      /* quad coords in window coords (bypassing vs, clip and viewport) */
+      /* quad coords in clip coords */
       offset = set_vertex_data(ctx,
                                pt->target,
-                               face,
-                               (float) u_minify(pt->width0, dstLevel),
-                               (float) u_minify(pt->height0, dstLevel));
+                               face);
 
       util_draw_vertex_buffer(ctx->pipe, 
                               ctx->vbuf,
@@ -1578,4 +1588,5 @@ util_gen_mipmap(struct gen_mipmap_state *ctx,
    cso_restore_framebuffer(ctx->cso);
    cso_restore_fragment_shader(ctx->cso);
    cso_restore_vertex_shader(ctx->cso);
+   cso_restore_viewport(ctx->cso);
 }
diff --git a/src/gallium/docs/source/cso/rasterizer.rst b/src/gallium/docs/source/cso/rasterizer.rst
index 24cc78c68d..ccd9136a2e 100644
--- a/src/gallium/docs/source/cso/rasterizer.rst
+++ b/src/gallium/docs/source/cso/rasterizer.rst
@@ -10,18 +10,6 @@ multisample state, scissoring and flat/smooth shading.
 Members
 -------
 
-bypass_vs_clip_and_viewport
-^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Whether the entire TCL pipeline should be bypassed. This implies that
-vertices are pre-transformed for the viewport, and will not be run
-through the vertex shader.
-
-.. note::
-   
-   Implementations may still clip away vertices that are not in the viewport
-   when this is set.
-
 flatshade
 ^^^^^^^^^
 
diff --git a/src/gallium/drivers/nv30/nv30_context.h b/src/gallium/drivers/nv30/nv30_context.h
index ca3d6aca7f..ea259aadf3 100644
--- a/src/gallium/drivers/nv30/nv30_context.h
+++ b/src/gallium/drivers/nv30/nv30_context.h
@@ -101,7 +101,6 @@ struct nv30_blend_state {
 struct nv30_state {
 	unsigned scissor_enabled;
 	unsigned stipple_enabled;
-	unsigned viewport_bypass;
 	unsigned fp_samplers;
 
 	uint64_t dirty;
diff --git a/src/gallium/drivers/nv30/nv30_state_viewport.c b/src/gallium/drivers/nv30/nv30_state_viewport.c
index 2d7781292b..6fccd6b60e 100644
--- a/src/gallium/drivers/nv30/nv30_state_viewport.c
+++ b/src/gallium/drivers/nv30/nv30_state_viewport.c
@@ -5,55 +5,25 @@ nv30_state_viewport_validate(struct nv30_context *nv30)
 {
 	struct pipe_viewport_state *vpt = &nv30->viewport;
 	struct nouveau_stateobj *so;
-	unsigned bypass;
-
-	if (/*nv30->render_mode == HW &&*/
-	    !nv30->rasterizer->pipe.bypass_vs_clip_and_viewport)
-		bypass = 0;
-	else
-		bypass = 1;
 
 	if (nv30->state.hw[NV30_STATE_VIEWPORT] &&
-	    (bypass || !(nv30->dirty & NV30_NEW_VIEWPORT)) &&
-	    nv30->state.viewport_bypass == bypass)
+	    !(nv30->dirty & NV30_NEW_VIEWPORT))
 		return FALSE;
-	nv30->state.viewport_bypass = bypass;
 
 	so = so_new(3, 10, 0);
-	if (!bypass) {
-		so_method(so, nv30->screen->rankine,
-			  NV34TCL_VIEWPORT_TRANSLATE_X, 8);
-		so_data  (so, fui(vpt->translate[0]));
-		so_data  (so, fui(vpt->translate[1]));
-		so_data  (so, fui(vpt->translate[2]));
-		so_data  (so, fui(vpt->translate[3]));
-		so_data  (so, fui(vpt->scale[0]));
-		so_data  (so, fui(vpt->scale[1]));
-		so_data  (so, fui(vpt->scale[2]));
-		so_data  (so, fui(vpt->scale[3]));
-/*		so_method(so, nv30->screen->rankine, 0x1d78, 1);
-		so_data  (so, 1);
-*/	} else {
-		so_method(so, nv30->screen->rankine,
-			  NV34TCL_VIEWPORT_TRANSLATE_X, 8);
-		so_data  (so, fui(0.0));
-		so_data  (so, fui(0.0));
-		so_data  (so, fui(0.0));
-		so_data  (so, fui(0.0));
-		so_data  (so, fui(1.0));
-		so_data  (so, fui(1.0));
-		so_data  (so, fui(1.0));
-		so_data  (so, fui(0.0));
-		/* Not entirely certain what this is yet.  The DDX uses this
-		 * value also as it fixes rendering when you pass
-		 * pre-transformed vertices to the GPU.  My best gusss is that
-		 * this bypasses some culling/clipping stage.  Might be worth
-		 * noting that points/lines are uneffected by whatever this
-		 * value fixes, only filled polygons are effected.
-		 */
-/*		so_method(so, nv30->screen->rankine, 0x1d78, 1);
-		so_data  (so, 0x110);
-*/	}
+	so_method(so, nv30->screen->rankine,
+		  NV34TCL_VIEWPORT_TRANSLATE_X, 8);
+	so_data  (so, fui(vpt->translate[0]));
+	so_data  (so, fui(vpt->translate[1]));
+	so_data  (so, fui(vpt->translate[2]));
+	so_data  (so, fui(vpt->translate[3]));
+	so_data  (so, fui(vpt->scale[0]));
+	so_data  (so, fui(vpt->scale[1]));
+	so_data  (so, fui(vpt->scale[2]));
+	so_data  (so, fui(vpt->scale[3]));
+/*	so_method(so, nv30->screen->rankine, 0x1d78, 1);
+	so_data  (so, 1);
+*/
 	/* TODO/FIXME: never saw value 0x0110 in renouveau dumps, only 0x0001 */
 	so_method(so, nv30->screen->rankine, 0x1d78, 1);
 	so_data  (so, 1);
diff --git a/src/gallium/drivers/nv40/nv40_context.h b/src/gallium/drivers/nv40/nv40_context.h
index 4861924dac..97fb6a2ef9 100644
--- a/src/gallium/drivers/nv40/nv40_context.h
+++ b/src/gallium/drivers/nv40/nv40_context.h
@@ -101,7 +101,6 @@ struct nv40_blend_state {
 struct nv40_state {
 	unsigned scissor_enabled;
 	unsigned stipple_enabled;
-	unsigned viewport_bypass;
 	unsigned fp_samplers;
 
 	uint64_t dirty;
diff --git a/src/gallium/drivers/nv40/nv40_state_viewport.c b/src/gallium/drivers/nv40/nv40_state_viewport.c
index 9919ba1d0b..3aacb00f99 100644
--- a/src/gallium/drivers/nv40/nv40_state_viewport.c
+++ b/src/gallium/drivers/nv40/nv40_state_viewport.c
@@ -5,55 +5,24 @@ nv40_state_viewport_validate(struct nv40_context *nv40)
 {
 	struct pipe_viewport_state *vpt = &nv40->viewport;
 	struct nouveau_stateobj *so;
-	unsigned bypass;
-
-	if (nv40->render_mode == HW &&
-	    !nv40->rasterizer->pipe.bypass_vs_clip_and_viewport)
-		bypass = 0;
-	else
-		bypass = 1;
 
 	if (nv40->state.hw[NV40_STATE_VIEWPORT] &&
-	    (bypass || !(nv40->dirty & NV40_NEW_VIEWPORT)) &&
-	    nv40->state.viewport_bypass == bypass)
+	    !(nv40->dirty & NV40_NEW_VIEWPORT))
 		return FALSE;
-	nv40->state.viewport_bypass = bypass;
 
 	so = so_new(2, 9, 0);
-	if (!bypass) {
-		so_method(so, nv40->screen->curie,
-			  NV40TCL_VIEWPORT_TRANSLATE_X, 8);
-		so_data  (so, fui(vpt->translate[0]));
-		so_data  (so, fui(vpt->translate[1]));
-		so_data  (so, fui(vpt->translate[2]));
-		so_data  (so, fui(vpt->translate[3]));
-		so_data  (so, fui(vpt->scale[0]));
-		so_data  (so, fui(vpt->scale[1]));
-		so_data  (so, fui(vpt->scale[2]));
-		so_data  (so, fui(vpt->scale[3]));
-		so_method(so, nv40->screen->curie, 0x1d78, 1);
-		so_data  (so, 1);
-	} else {
-		so_method(so, nv40->screen->curie,
-			  NV40TCL_VIEWPORT_TRANSLATE_X, 8);
-		so_data  (so, fui(0.0));
-		so_data  (so, fui(0.0));
-		so_data  (so, fui(0.0));
-		so_data  (so, fui(0.0));
-		so_data  (so, fui(1.0));
-		so_data  (so, fui(1.0));
-		so_data  (so, fui(1.0));
-		so_data  (so, fui(0.0));
-		/* Not entirely certain what this is yet.  The DDX uses this
-		 * value also as it fixes rendering when you pass
-		 * pre-transformed vertices to the GPU.  My best gusss is that
-		 * this bypasses some culling/clipping stage.  Might be worth
-		 * noting that points/lines are uneffected by whatever this
-		 * value fixes, only filled polygons are effected.
-		 */
-		so_method(so, nv40->screen->curie, 0x1d78, 1);
-		so_data  (so, 0x110);
-	}
+	so_method(so, nv40->screen->curie,
+		  NV40TCL_VIEWPORT_TRANSLATE_X, 8);
+	so_data  (so, fui(vpt->translate[0]));
+	so_data  (so, fui(vpt->translate[1]));
+	so_data  (so, fui(vpt->translate[2]));
+	so_data  (so, fui(vpt->translate[3]));
+	so_data  (so, fui(vpt->scale[0]));
+	so_data  (so, fui(vpt->scale[1]));
+	so_data  (so, fui(vpt->scale[2]));
+	so_data  (so, fui(vpt->scale[3]));
+	so_method(so, nv40->screen->curie, 0x1d78, 1);
+	so_data  (so, 1);
 
 	so_ref(so, &nv40->state.hw[NV40_STATE_VIEWPORT]);
 	so_ref(NULL, &so);
diff --git a/src/gallium/drivers/nv50/nv50_context.h b/src/gallium/drivers/nv50/nv50_context.h
index b4de3e2ba5..c540594b94 100644
--- a/src/gallium/drivers/nv50/nv50_context.h
+++ b/src/gallium/drivers/nv50/nv50_context.h
@@ -127,7 +127,6 @@ struct nv50_state {
 	struct nouveau_stateobj *scissor;
 	unsigned scissor_enabled;
 	struct nouveau_stateobj *viewport;
-	unsigned viewport_bypass;
 	struct nouveau_stateobj *tsc_upload;
 	struct nouveau_stateobj *tic_upload;
 	unsigned miptree_nr[PIPE_SHADER_TYPES];
diff --git a/src/gallium/drivers/nv50/nv50_state_validate.c b/src/gallium/drivers/nv50/nv50_state_validate.c
index efab94cab7..a91b31015e 100644
--- a/src/gallium/drivers/nv50/nv50_state_validate.c
+++ b/src/gallium/drivers/nv50/nv50_state_validate.c
@@ -375,50 +375,32 @@ nv50_state_validate(struct nv50_context *nv50)
 scissor_uptodate:
 
 	if (nv50->dirty & (NV50_NEW_VIEWPORT | NV50_NEW_RASTERIZER)) {
-		unsigned bypass;
-
-		if (!nv50->rasterizer->pipe.bypass_vs_clip_and_viewport)
-			bypass = 0;
-		else
-			bypass = 1;
-
 		if (nv50->state.viewport &&
-		    (bypass || !(nv50->dirty & NV50_NEW_VIEWPORT)) &&
-		    nv50->state.viewport_bypass == bypass)
+		    !(nv50->dirty & NV50_NEW_VIEWPORT))
 			goto viewport_uptodate;
-		nv50->state.viewport_bypass = bypass;
 
 		so = so_new(5, 9, 0);
-		if (!bypass) {
-			so_method(so, tesla, NV50TCL_VIEWPORT_TRANSLATE_X(0), 3);
-			so_data  (so, fui(nv50->viewport.translate[0]));
-			so_data  (so, fui(nv50->viewport.translate[1]));
-			so_data  (so, fui(nv50->viewport.translate[2]));
-			so_method(so, tesla, NV50TCL_VIEWPORT_SCALE_X(0), 3);
-			so_data  (so, fui(nv50->viewport.scale[0]));
-			so_data  (so, fui(nv50->viewport.scale[1]));
-			so_data  (so, fui(nv50->viewport.scale[2]));
-
-			so_method(so, tesla, NV50TCL_VIEWPORT_TRANSFORM_EN, 1);
-			so_data  (so, 1);
-			/* 0x0000 = remove whole primitive only (xyz)
-			 * 0x1018 = remove whole primitive only (xy), clamp z
-			 * 0x1080 = clip primitive (xyz)
-			 * 0x1098 = clip primitive (xy), clamp z
-			 */
-			so_method(so, tesla, NV50TCL_VIEW_VOLUME_CLIP_CTRL, 1);
-			so_data  (so, 0x1080);
-			/* no idea what 0f90 does */
-			so_method(so, tesla, 0x0f90, 1);
-			so_data  (so, 0);
-		} else {
-			so_method(so, tesla, NV50TCL_VIEWPORT_TRANSFORM_EN, 1);
-			so_data  (so, 0);
-			so_method(so, tesla, NV50TCL_VIEW_VOLUME_CLIP_CTRL, 1);
-			so_data  (so, 0x0000);
-			so_method(so, tesla, 0x0f90, 1);
-			so_data  (so, 1);
-		}
+		so_method(so, tesla, NV50TCL_VIEWPORT_TRANSLATE_X(0), 3);
+		so_data  (so, fui(nv50->viewport.translate[0]));
+		so_data  (so, fui(nv50->viewport.translate[1]));
+		so_data  (so, fui(nv50->viewport.translate[2]));
+		so_method(so, tesla, NV50TCL_VIEWPORT_SCALE_X(0), 3);
+		so_data  (so, fui(nv50->viewport.scale[0]));
+		so_data  (so, fui(nv50->viewport.scale[1]));
+		so_data  (so, fui(nv50->viewport.scale[2]));
+
+		so_method(so, tesla, NV50TCL_VIEWPORT_TRANSFORM_EN, 1);
+		so_data  (so, 1);
+		/* 0x0000 = remove whole primitive only (xyz)
+		 * 0x1018 = remove whole primitive only (xy), clamp z
+		 * 0x1080 = clip primitive (xyz)
+		 * 0x1098 = clip primitive (xy), clamp z
+		 */
+		so_method(so, tesla, NV50TCL_VIEW_VOLUME_CLIP_CTRL, 1);
+		so_data  (so, 0x1080);
+		/* no idea what 0f90 does */
+		so_method(so, tesla, 0x0f90, 1);
+		so_data  (so, 0);
 
 		so_ref(so, &nv50->state.viewport);
 		so_ref(NULL, &so);
diff --git a/src/gallium/drivers/r300/r300_context.h b/src/gallium/drivers/r300/r300_context.h
index 443af4ec2e..2f056aafcb 100644
--- a/src/gallium/drivers/r300/r300_context.h
+++ b/src/gallium/drivers/r300/r300_context.h
@@ -337,8 +337,6 @@ struct r300_context {
     uint32_t dirty_state;
     /* Flag indicating whether or not the HW is dirty. */
     uint32_t dirty_hw;
-    /* Whether the TCL engine should be in bypass mode. */
-    boolean tcl_bypass;
     /* Whether polygon offset is enabled. */
     boolean polygon_offset_enabled;
     /* Z buffer bit depth. */
diff --git a/src/gallium/drivers/r300/r300_emit.c b/src/gallium/drivers/r300/r300_emit.c
index f7dcd8dc52..37ebe6c49d 100644
--- a/src/gallium/drivers/r300/r300_emit.c
+++ b/src/gallium/drivers/r300/r300_emit.c
@@ -170,23 +170,15 @@ static const float * get_shader_constant(
                     break;
 
                 case RC_STATE_R300_VIEWPORT_SCALE:
-                    if (r300->tcl_bypass) {
-                        vec[0] = 1;
-                        vec[1] = 1;
-                        vec[2] = 1;
-                    } else {
-                        vec[0] = viewport->xscale;
-                        vec[1] = viewport->yscale;
-                        vec[2] = viewport->zscale;
-                    }
+                    vec[0] = viewport->xscale;
+                    vec[1] = viewport->yscale;
+                    vec[2] = viewport->zscale;
                     break;
 
                 case RC_STATE_R300_VIEWPORT_OFFSET:
-                    if (!r300->tcl_bypass) {
-                        vec[0] = viewport->xoffset;
-                        vec[1] = viewport->yoffset;
-                        vec[2] = viewport->zoffset;
-                    }
+                    vec[0] = viewport->xoffset;
+                    vec[1] = viewport->yoffset;
+                    vec[2] = viewport->zoffset;
                     break;
 
                 default:
@@ -936,22 +928,16 @@ void r300_emit_viewport_state(struct r300_context* r300, void* state)
     struct r300_viewport_state* viewport = (struct r300_viewport_state*)state;
     CS_LOCALS(r300);
 
-    if (r300->tcl_bypass) {
-        BEGIN_CS(2);
-        OUT_CS_REG(R300_VAP_VTE_CNTL, 0);
-        END_CS;
-    } else {
-        BEGIN_CS(9);
-        OUT_CS_REG_SEQ(R300_SE_VPORT_XSCALE, 6);
-        OUT_CS_32F(viewport->xscale);
-        OUT_CS_32F(viewport->xoffset);
-        OUT_CS_32F(viewport->yscale);
-        OUT_CS_32F(viewport->yoffset);
-        OUT_CS_32F(viewport->zscale);
-        OUT_CS_32F(viewport->zoffset);
-        OUT_CS_REG(R300_VAP_VTE_CNTL, viewport->vte_control);
-        END_CS;
-    }
+    BEGIN_CS(9);
+    OUT_CS_REG_SEQ(R300_SE_VPORT_XSCALE, 6);
+    OUT_CS_32F(viewport->xscale);
+    OUT_CS_32F(viewport->xoffset);
+    OUT_CS_32F(viewport->yscale);
+    OUT_CS_32F(viewport->yoffset);
+    OUT_CS_32F(viewport->zscale);
+    OUT_CS_32F(viewport->zoffset);
+    OUT_CS_REG(R300_VAP_VTE_CNTL, viewport->vte_control);
+    END_CS;
 }
 
 void r300_emit_texture_count(struct r300_context* r300)
diff --git a/src/gallium/drivers/r300/r300_state.c b/src/gallium/drivers/r300/r300_state.c
index 34bf81c193..3550c69c46 100644
--- a/src/gallium/drivers/r300/r300_state.c
+++ b/src/gallium/drivers/r300/r300_state.c
@@ -711,8 +711,7 @@ static void* r300_create_rs_state(struct pipe_context* pipe,
 
     /* If bypassing TCL, or if no TCL engine is present, turn off the HW TCL.
      * Else, enable HW TCL and force Draw's TCL off. */
-    if (state->bypass_vs_clip_and_viewport ||
-            !r300screen->caps->has_tcl) {
+    if (!r300screen->caps->has_tcl) {
         rs->vap_control_status |= R300_VAP_TCL_BYPASS;
     }
 
@@ -824,10 +823,8 @@ static void r300_bind_rs_state(struct pipe_context* pipe, void* state)
     }
 
     if (rs) {
-        r300->tcl_bypass = rs->rs.bypass_vs_clip_and_viewport;
         r300->polygon_offset_enabled = rs->rs.offset_cw || rs->rs.offset_ccw;
     } else {
-        r300->tcl_bypass = FALSE;
         r300->polygon_offset_enabled = FALSE;
     }
 
diff --git a/src/gallium/drivers/r300/r300_state_derived.c b/src/gallium/drivers/r300/r300_state_derived.c
index 2cbce9210a..778eaaacd9 100644
--- a/src/gallium/drivers/r300/r300_state_derived.c
+++ b/src/gallium/drivers/r300/r300_state_derived.c
@@ -114,13 +114,7 @@ static void r300_vertex_psc(struct r300_context* r300)
     int identity[16] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
     int* stream_tab;
 
-    /* If TCL is bypassed, map vertex streams to equivalent VS output
-     * locations. */
-    if (r300->tcl_bypass) {
-        stream_tab = r300->vs->stream_loc_notcl;
-    } else {
-        stream_tab = identity;
-    }
+    stream_tab = identity;
 
     /* Vertex shaders have no semantics on their inputs,
      * so PSC should just route stuff based on the vertex elements,
diff --git a/src/gallium/drivers/softpipe/sp_video_context.c b/src/gallium/drivers/softpipe/sp_video_context.c
index 7a3a636167..8e4867a904 100644
--- a/src/gallium/drivers/softpipe/sp_video_context.c
+++ b/src/gallium/drivers/softpipe/sp_video_context.c
@@ -174,7 +174,6 @@ init_pipe_state(struct sp_mpeg12_context *ctx)
    rast.line_stipple_factor = 0;
    rast.line_stipple_pattern = 0;
    rast.line_last_pixel = 0;
-   rast.bypass_vs_clip_and_viewport = 0;
    rast.line_width = 1;
    rast.point_smooth = 0;
    rast.point_quad_rasterization = 0;
diff --git a/src/gallium/drivers/svga/svga_state_framebuffer.c b/src/gallium/drivers/svga/svga_state_framebuffer.c
index b4cafb8f21..4d0c06bd77 100644
--- a/src/gallium/drivers/svga/svga_state_framebuffer.c
+++ b/src/gallium/drivers/svga/svga_state_framebuffer.c
@@ -120,174 +120,153 @@ static int emit_viewport( struct svga_context *svga,
    float fb_width = svga->curr.framebuffer.width;
    float fb_height = svga->curr.framebuffer.height;
 
-   memset( &prescale, 0, sizeof(prescale) );
-
-   if (svga->curr.rast->templ.bypass_vs_clip_and_viewport) {
-
-      /* Avoid POSITIONT as it has a non trivial implementation outside the D3D
-       * API. Always generate a vertex shader.
-       */
-      rect.x = 0;
-      rect.y = 0;
-      rect.w = svga->curr.framebuffer.width;
-      rect.h = svga->curr.framebuffer.height;
-
-      prescale.scale[0] = 2.0 / (float)rect.w;
-      prescale.scale[1] = - 2.0 / (float)rect.h;
-      prescale.scale[2] = 1.0;
-      prescale.scale[3] = 1.0;
-      prescale.translate[0] = -1.0f;
-      prescale.translate[1] = 1.0f;
-      prescale.translate[2] = 0;
-      prescale.translate[3] = 0;
-      prescale.enabled = TRUE;
-   } else {
-
-      /* Examine gallium viewport transformation and produce a screen
-       * rectangle and possibly vertex shader pre-transformation to
-       * get the same results.
-       */
-      float fx =        viewport->scale[0] * -1.0 + viewport->translate[0];
-      float fy = flip * viewport->scale[1] * -1.0 + viewport->translate[1];
-      float fw =        viewport->scale[0] * 2; 
-      float fh = flip * viewport->scale[1] * 2; 
-
-      SVGA_DBG(DEBUG_VIEWPORT,
-               "\ninitial %f,%f %fx%f\n",
-               fx,
-               fy,
-               fw,
-               fh);
-
-      prescale.scale[0] = 1.0;
-      prescale.scale[1] = 1.0;
-      prescale.scale[2] = 1.0;
-      prescale.scale[3] = 1.0;
-      prescale.translate[0] = 0;
-      prescale.translate[1] = 0;
-      prescale.translate[2] = 0;
-      prescale.translate[3] = 0;
-      prescale.enabled = TRUE;
-
-
-
-      if (fw < 0) {
-         prescale.scale[0] *= -1.0;
-         prescale.translate[0] += -fw;
-         fw = -fw;
-         fx =        viewport->scale[0] * 1.0 + viewport->translate[0];
-      }
+   float fx =        viewport->scale[0] * -1.0 + viewport->translate[0];
+   float fy = flip * viewport->scale[1] * -1.0 + viewport->translate[1];
+   float fw =        viewport->scale[0] * 2; 
+   float fh = flip * viewport->scale[1] * 2; 
 
-      if (fh < 0) {
-         prescale.scale[1] *= -1.0;
-         prescale.translate[1] += -fh;
-         fh = -fh;
-         fy = flip * viewport->scale[1] * 1.0 + viewport->translate[1];
-      }
+   memset( &prescale, 0, sizeof(prescale) );
 
-      if (fx < 0) {
-         prescale.translate[0] += fx;
-         prescale.scale[0] *= fw / (fw + fx); 
-         fw += fx;
-         fx = 0;
-      }
+   /* Examine gallium viewport transformation and produce a screen
+    * rectangle and possibly vertex shader pre-transformation to
+    * get the same results.
+    */
 
-      if (fy < 0) {
-         prescale.translate[1] += fy;
-         prescale.scale[1] *= fh / (fh + fy); 
-         fh += fy;
-         fy = 0;
-      }
+   SVGA_DBG(DEBUG_VIEWPORT,
+            "\ninitial %f,%f %fx%f\n",
+            fx,
+            fy,
+            fw,
+            fh);
+
+   prescale.scale[0] = 1.0;
+   prescale.scale[1] = 1.0;
+   prescale.scale[2] = 1.0;
+   prescale.scale[3] = 1.0;
+   prescale.translate[0] = 0;
+   prescale.translate[1] = 0;
+   prescale.translate[2] = 0;
+   prescale.translate[3] = 0;
+   prescale.enabled = TRUE;
+
+
+
+   if (fw < 0) {
+      prescale.scale[0] *= -1.0;
+      prescale.translate[0] += -fw;
+      fw = -fw;
+      fx =        viewport->scale[0] * 1.0 + viewport->translate[0];
+   }
 
-      if (fx + fw > fb_width) {
-         prescale.scale[0] *= fw / (fb_width - fx); 
-         prescale.translate[0] -= fx * (fw / (fb_width - fx));
-         prescale.translate[0] += fx;
-         fw = fb_width - fx;
-         
-      }
+   if (fh < 0) {
+      prescale.scale[1] *= -1.0;
+      prescale.translate[1] += -fh;
+      fh = -fh;
+      fy = flip * viewport->scale[1] * 1.0 + viewport->translate[1];
+   }
 
-      if (fy + fh > fb_height) {
-         prescale.scale[1] *= fh / (fb_height - fy);
-         prescale.translate[1] -= fy * (fh / (fb_height - fy));
-         prescale.translate[1] += fy;
-         fh = fb_height - fy;
-      }
+   if (fx < 0) {
+      prescale.translate[0] += fx;
+      prescale.scale[0] *= fw / (fw + fx); 
+      fw += fx;
+      fx = 0;
+   }
 
-      if (fw < 0 || fh < 0) {
-         fw = fh = fx = fy = 0;
-         degenerate = TRUE;
-         goto out;
-      }
+   if (fy < 0) {
+      prescale.translate[1] += fy;
+      prescale.scale[1] *= fh / (fh + fy); 
+      fh += fy;
+      fy = 0;
+   }
 
+   if (fx + fw > fb_width) {
+      prescale.scale[0] *= fw / (fb_width - fx); 
+      prescale.translate[0] -= fx * (fw / (fb_width - fx));
+      prescale.translate[0] += fx;
+      fw = fb_width - fx;
+      
+   }
 
-      /* D3D viewport is integer space.  Convert fx,fy,etc. to
-       * integers.
-       *
-       * TODO: adjust pretranslate correct for any subpixel error
-       * introduced converting to integers.
-       */
-      rect.x = fx;
-      rect.y = fy;
-      rect.w = fw;
-      rect.h = fh;
+   if (fy + fh > fb_height) {
+      prescale.scale[1] *= fh / (fb_height - fy);
+      prescale.translate[1] -= fy * (fh / (fb_height - fy));
+      prescale.translate[1] += fy;
+      fh = fb_height - fy;
+   }
 
-      SVGA_DBG(DEBUG_VIEWPORT,
-               "viewport error %f,%f %fx%f\n",
-               fabs((float)rect.x - fx),
-               fabs((float)rect.y - fy),
-               fabs((float)rect.w - fw),
-               fabs((float)rect.h - fh));
+   if (fw < 0 || fh < 0) {
+      fw = fh = fx = fy = 0;
+      degenerate = TRUE;
+      goto out;
+   }
 
-      SVGA_DBG(DEBUG_VIEWPORT,
-               "viewport %d,%d %dx%d\n",
-               rect.x,
-               rect.y,
-               rect.w,
-               rect.h);
-      
 
-      /* Finally, to get GL rasterization rules, need to tweak the
-       * screen-space coordinates slightly relative to D3D which is
-       * what hardware implements natively.
-       */
-      if (svga->curr.rast->templ.gl_rasterization_rules) {
-         float adjust_x = 0.0;
-         float adjust_y = 0.0;
-
-         switch (svga->curr.reduced_prim) {
-         case PIPE_PRIM_LINES:
-            adjust_x = -0.5;
-            adjust_y = 0;
-            break;
-         case PIPE_PRIM_POINTS:
-         case PIPE_PRIM_TRIANGLES:
-            adjust_x = -0.375;
-            adjust_y = -0.5;
-            break;
-         }
-
-         prescale.translate[0] += adjust_x;
-         prescale.translate[1] += adjust_y;
-         prescale.translate[2] = 0.5; /* D3D clip space */
-         prescale.scale[2]     = 0.5; /* D3D clip space */
+   /* D3D viewport is integer space.  Convert fx,fy,etc. to
+    * integers.
+    *
+    * TODO: adjust pretranslate correct for any subpixel error
+    * introduced converting to integers.
+    */
+   rect.x = fx;
+   rect.y = fy;
+   rect.w = fw;
+   rect.h = fh;
+
+   SVGA_DBG(DEBUG_VIEWPORT,
+            "viewport error %f,%f %fx%f\n",
+            fabs((float)rect.x - fx),
+            fabs((float)rect.y - fy),
+            fabs((float)rect.w - fw),
+            fabs((float)rect.h - fh));
+
+   SVGA_DBG(DEBUG_VIEWPORT,
+            "viewport %d,%d %dx%d\n",
+            rect.x,
+            rect.y,
+            rect.w,
+            rect.h);
+
+
+   /* Finally, to get GL rasterization rules, need to tweak the
+    * screen-space coordinates slightly relative to D3D which is
+    * what hardware implements natively.
+    */
+   if (svga->curr.rast->templ.gl_rasterization_rules) {
+      float adjust_x = 0.0;
+      float adjust_y = 0.0;
+
+      switch (svga->curr.reduced_prim) {
+      case PIPE_PRIM_LINES:
+         adjust_x = -0.5;
+         adjust_y = 0;
+         break;
+      case PIPE_PRIM_POINTS:
+      case PIPE_PRIM_TRIANGLES:
+         adjust_x = -0.375;
+         adjust_y = -0.5;
+         break;
       }
 
+      prescale.translate[0] += adjust_x;
+      prescale.translate[1] += adjust_y;
+      prescale.translate[2] = 0.5; /* D3D clip space */
+      prescale.scale[2]     = 0.5; /* D3D clip space */
+   }
 
-      range_min = viewport->scale[2] * -1.0 + viewport->translate[2];
-      range_max = viewport->scale[2] *  1.0 + viewport->translate[2];
 
-      /* D3D (and by implication SVGA) doesn't like dealing with zmax
-       * less than zmin.  Detect that case, flip the depth range and
-       * invert our z-scale factor to achieve the same effect.
-       */
-      if (range_min > range_max) {
-         float range_tmp;
-         range_tmp = range_min; 
-         range_min = range_max; 
-         range_max = range_tmp;
-         prescale.scale[2]     = -prescale.scale[2];
-      }
+   range_min = viewport->scale[2] * -1.0 + viewport->translate[2];
+   range_max = viewport->scale[2] *  1.0 + viewport->translate[2];
+
+   /* D3D (and by implication SVGA) doesn't like dealing with zmax
+    * less than zmin.  Detect that case, flip the depth range and
+    * invert our z-scale factor to achieve the same effect.
+    */
+   if (range_min > range_max) {
+      float range_tmp;
+      range_tmp = range_min; 
+      range_min = range_max; 
+      range_max = range_tmp;
+      prescale.scale[2]     = -prescale.scale[2];
    }
 
    if (prescale.enabled) {
diff --git a/src/gallium/drivers/svga/svga_state_need_swtnl.c b/src/gallium/drivers/svga/svga_state_need_swtnl.c
index dd13a89d24..a6ed18599c 100644
--- a/src/gallium/drivers/svga/svga_state_need_swtnl.c
+++ b/src/gallium/drivers/svga/svga_state_need_swtnl.c
@@ -129,8 +129,7 @@ static int update_need_pipeline( struct svga_context *svga,
 
    /* SVGA_NEW_CLIP 
     */
-   if (!svga->curr.rast->templ.bypass_vs_clip_and_viewport &&
-       svga->curr.clip.nr) {
+   if (svga->curr.clip.nr) {
       SVGA_DBG(DEBUG_SWTNL, "%s: userclip\n", __FUNCTION__);
       need_pipeline = TRUE;
    }
diff --git a/src/gallium/drivers/trace/tr_dump_state.c b/src/gallium/drivers/trace/tr_dump_state.c
index 6da186a655..f97d963dba 100644
--- a/src/gallium/drivers/trace/tr_dump_state.c
+++ b/src/gallium/drivers/trace/tr_dump_state.c
@@ -112,7 +112,6 @@ void trace_dump_rasterizer_state(const struct pipe_rasterizer_state *state)
    trace_dump_member(uint, state, line_stipple_factor);
    trace_dump_member(uint, state, line_stipple_pattern);
    trace_dump_member(bool, state, line_last_pixel);
-   trace_dump_member(bool, state, bypass_vs_clip_and_viewport);
    trace_dump_member(bool, state, flatshade_first);
    trace_dump_member(bool, state, gl_rasterization_rules);
 
diff --git a/src/gallium/include/pipe/p_state.h b/src/gallium/include/pipe/p_state.h
index 5ac5c87813..02558520bf 100644
--- a/src/gallium/include/pipe/p_state.h
+++ b/src/gallium/include/pipe/p_state.h
@@ -113,16 +113,6 @@ struct pipe_rasterizer_state
    unsigned line_stipple_pattern:16;
    unsigned line_last_pixel:1;
 
-   /** 
-    * Vertex coordinates are pre-transformed to screen space.  Skip
-    * the vertex shader, clipping and viewport processing.  Note that
-    * a vertex shader is still needed though, to indicate the mapping
-    * from vertex elements to fragment shader input semantics.
-    *
-    * XXX: considered for removal.
-    */
-   unsigned bypass_vs_clip_and_viewport:1;
-
    /** 
     * Use the first vertex of a primitive as the provoking vertex for
     * flat shading.
diff --git a/src/mesa/state_tracker/st_cb_clear.c b/src/mesa/state_tracker/st_cb_clear.c
index 898c32293d..5edab55cca 100644
--- a/src/mesa/state_tracker/st_cb_clear.c
+++ b/src/mesa/state_tracker/st_cb_clear.c
@@ -65,9 +65,6 @@ st_init_clear(struct st_context *st)
    memset(&st->clear.raster, 0, sizeof(st->clear.raster));
    st->clear.raster.gl_rasterization_rules = 1;
 
-   /* rasterizer state: bypass vertex shader, clipping and viewport */
-   st->clear.raster.bypass_vs_clip_and_viewport = 1;
-
    /* fragment shader state: color pass-through program */
    st->clear.fs =
       util_make_fragment_passthrough_shader(pipe);
@@ -104,9 +101,7 @@ st_destroy_clear(struct st_context *st)
 
 /**
  * Draw a screen-aligned quadrilateral.
- * Coords are window coords with y=0=bottom.  These will be passed
- * through unmodified to the rasterizer as we have set
- * rasterizer->bypass_vs_clip_and_viewport.
+ * Coords are clip coords with y=0=bottom.
  */
 static void
 draw_quad(GLcontext *ctx,
@@ -192,18 +187,13 @@ clear_with_quad(GLcontext *ctx,
                 GLboolean color, GLboolean depth, GLboolean stencil)
 {
    struct st_context *st = ctx->st;
-   const GLfloat x0 = (GLfloat) ctx->DrawBuffer->_Xmin;
-   const GLfloat x1 = (GLfloat) ctx->DrawBuffer->_Xmax;
-   GLfloat y0, y1;
-
-   if (st_fb_orientation(ctx->DrawBuffer) == Y_0_TOP) {
-      y0 = (GLfloat) (ctx->DrawBuffer->Height - ctx->DrawBuffer->_Ymax);
-      y1 = (GLfloat) (ctx->DrawBuffer->Height - ctx->DrawBuffer->_Ymin);
-   }
-   else {
-      y0 = (GLfloat) ctx->DrawBuffer->_Ymin;
-      y1 = (GLfloat) ctx->DrawBuffer->_Ymax;
-   }
+   const struct gl_framebuffer *fb = ctx->DrawBuffer;
+   const GLfloat fb_width = (GLfloat) fb->Width;
+   const GLfloat fb_height = (GLfloat) fb->Height;
+   const GLfloat x0 = (GLfloat) ctx->DrawBuffer->_Xmin / fb_width * 2.0f - 1.0f;
+   const GLfloat x1 = (GLfloat) ctx->DrawBuffer->_Xmax / fb_width * 2.0f - 1.0f;
+   const GLfloat y0 = (GLfloat) ctx->DrawBuffer->_Ymin / fb_height * 2.0f - 1.0f;
+   const GLfloat y1 = (GLfloat) ctx->DrawBuffer->_Ymax / fb_height * 2.0f - 1.0f;
 
    /*
    printf("%s %s%s%s %f,%f %f,%f\n", __FUNCTION__, 
@@ -218,6 +208,7 @@ clear_with_quad(GLcontext *ctx,
    cso_save_stencil_ref(st->cso_context);
    cso_save_depth_stencil_alpha(st->cso_context);
    cso_save_rasterizer(st->cso_context);
+   cso_save_viewport(st->cso_context);
    cso_save_fragment_shader(st->cso_context);
    cso_save_vertex_shader(st->cso_context);
 
@@ -273,6 +264,21 @@ clear_with_quad(GLcontext *ctx,
 
    cso_set_rasterizer(st->cso_context, &st->clear.raster);
 
+   /* viewport state: viewport matching window dims */
+   {
+      const GLboolean invert = (st_fb_orientation(fb) == Y_0_TOP);
+      struct pipe_viewport_state vp;
+      vp.scale[0] = 0.5f * fb_width;
+      vp.scale[1] = fb_height * (invert ? -0.5f : 0.5f);
+      vp.scale[2] = 1.0f;
+      vp.scale[3] = 1.0f;
+      vp.translate[0] = 0.5f * fb_width;
+      vp.translate[1] = 0.5f * fb_height;
+      vp.translate[2] = 0.0f;
+      vp.translate[3] = 0.0f;
+      cso_set_viewport(st->cso_context, &vp);
+   }
+
    cso_set_fragment_shader_handle(st->cso_context, st->clear.fs);
    cso_set_vertex_shader_handle(st->cso_context, st->clear.vs);
 
@@ -284,9 +290,9 @@ clear_with_quad(GLcontext *ctx,
    cso_restore_stencil_ref(st->cso_context);
    cso_restore_depth_stencil_alpha(st->cso_context);
    cso_restore_rasterizer(st->cso_context);
+   cso_restore_viewport(st->cso_context);
    cso_restore_fragment_shader(st->cso_context);
    cso_restore_vertex_shader(st->cso_context);
-
 }
 
 
-- 
cgit v1.2.3


From abcb6b6d01c253627363a05205291630b5247018 Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Tue, 23 Feb 2010 00:19:30 -0800
Subject: mesa: Assert that array index is not negative.

---
 src/mesa/main/texcompress_fxt1.c | 1 +
 1 file changed, 1 insertion(+)

(limited to 'src/mesa')

diff --git a/src/mesa/main/texcompress_fxt1.c b/src/mesa/main/texcompress_fxt1.c
index 71e40dd3e9..149853f7ac 100644
--- a/src/mesa/main/texcompress_fxt1.c
+++ b/src/mesa/main/texcompress_fxt1.c
@@ -528,6 +528,7 @@ fxt1_lloyd (GLfloat vec[][MAX_COMP], GLint nv,
 #else
          GLint best = fxt1_bestcol(vec, nv, input[k], nc, &err);
 #endif
+         assert(best >= 0);
          /* add in closest color */
          for (i = 0; i < nc; i++) {
             sum[best][i] += input[k][i];
-- 
cgit v1.2.3


From c41cf31da8e2b57ea9911ed1720650cfc2649a84 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Tue, 23 Feb 2010 13:48:19 -0500
Subject: i965: Enable GL_ARB_fragment_coord_conventions now that the GLSL is
 fixed.

Tested with piglit glsl-arb-fragment-coord-conventions.
---
 src/mesa/drivers/dri/intel/intel_extensions.c | 1 +
 1 file changed, 1 insertion(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/intel/intel_extensions.c b/src/mesa/drivers/dri/intel/intel_extensions.c
index 84c8d013e3..e16c33b33d 100644
--- a/src/mesa/drivers/dri/intel/intel_extensions.c
+++ b/src/mesa/drivers/dri/intel/intel_extensions.c
@@ -151,6 +151,7 @@ static const struct dri_extension i915_extensions[] = {
 static const struct dri_extension brw_extensions[] = {
    { "GL_ARB_depth_clamp",                NULL },
    { "GL_ARB_depth_texture",              NULL },
+   { "GL_ARB_fragment_coord_conventions", NULL },
    { "GL_ARB_fragment_program",           NULL },
    { "GL_ARB_fragment_program_shadow",    NULL },
    { "GL_ARB_fragment_shader",            NULL },
-- 
cgit v1.2.3


From f437a673777ca613ef4c1464fb9083e269f3928c Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Mon, 22 Feb 2010 22:27:48 +0200
Subject: glapi: mv code generation to subdir

This just moves files, code generation Makefile will be fixed in next commit for easier review.
---
 src/mesa/glapi/APPLE_vertex_array_object.xml       |    27 -
 src/mesa/glapi/ARB_copy_buffer.xml                 |    24 -
 src/mesa/glapi/ARB_depth_clamp.xml                 |    12 -
 src/mesa/glapi/ARB_draw_elements_base_vertex.xml   |    40 -
 src/mesa/glapi/ARB_framebuffer_object.xml          |   275 -
 src/mesa/glapi/ARB_map_buffer_range.xml            |    34 -
 src/mesa/glapi/ARB_seamless_cube_map.xml           |    12 -
 src/mesa/glapi/ARB_sync.xml                        |    84 -
 src/mesa/glapi/ARB_vertex_array_object.xml         |    34 -
 src/mesa/glapi/EXT_draw_buffers2.xml               |    49 -
 src/mesa/glapi/EXT_framebuffer_object.xml          |   235 -
 src/mesa/glapi/EXT_packed_depth_stencil.xml        |    18 -
 src/mesa/glapi/EXT_provoking_vertex.xml            |    35 -
 src/mesa/glapi/EXT_texture_array.xml               |    42 -
 src/mesa/glapi/Makefile                            |   158 -
 src/mesa/glapi/NV_conditional_render.xml           |    26 -
 src/mesa/glapi/extension_helper.py                 |   324 -
 src/mesa/glapi/gen/APPLE_vertex_array_object.xml   |    27 +
 src/mesa/glapi/gen/ARB_copy_buffer.xml             |    24 +
 src/mesa/glapi/gen/ARB_depth_clamp.xml             |    12 +
 .../glapi/gen/ARB_draw_elements_base_vertex.xml    |    40 +
 src/mesa/glapi/gen/ARB_framebuffer_object.xml      |   275 +
 src/mesa/glapi/gen/ARB_map_buffer_range.xml        |    34 +
 src/mesa/glapi/gen/ARB_seamless_cube_map.xml       |    12 +
 src/mesa/glapi/gen/ARB_sync.xml                    |    84 +
 src/mesa/glapi/gen/ARB_vertex_array_object.xml     |    34 +
 src/mesa/glapi/gen/EXT_draw_buffers2.xml           |    49 +
 src/mesa/glapi/gen/EXT_framebuffer_object.xml      |   235 +
 src/mesa/glapi/gen/EXT_packed_depth_stencil.xml    |    18 +
 src/mesa/glapi/gen/EXT_provoking_vertex.xml        |    35 +
 src/mesa/glapi/gen/EXT_texture_array.xml           |    42 +
 src/mesa/glapi/gen/Makefile                        |   158 +
 src/mesa/glapi/gen/NV_conditional_render.xml       |    26 +
 src/mesa/glapi/gen/extension_helper.py             |   324 +
 src/mesa/glapi/gen/glX_API.xml                     |   220 +
 src/mesa/glapi/gen/glX_XML.py                      |   570 +
 src/mesa/glapi/gen/glX_doc.py                      |   280 +
 src/mesa/glapi/gen/glX_proto_common.py             |    95 +
 src/mesa/glapi/gen/glX_proto_recv.py               |   554 +
 src/mesa/glapi/gen/glX_proto_send.py               |  1042 ++
 src/mesa/glapi/gen/glX_proto_size.py               |   704 ++
 src/mesa/glapi/gen/glX_server_table.py             |   411 +
 src/mesa/glapi/gen/gl_API.dtd                      |   140 +
 src/mesa/glapi/gen/gl_API.xml                      | 12505 +++++++++++++++++++
 src/mesa/glapi/gen/gl_SPARC_asm.py                 |   275 +
 src/mesa/glapi/gen/gl_XML.py                       |   967 ++
 src/mesa/glapi/gen/gl_and_glX_API.xml              |     7 +
 src/mesa/glapi/gen/gl_apitemp.py                   |   320 +
 src/mesa/glapi/gen/gl_enums.py                     |   243 +
 src/mesa/glapi/gen/gl_offsets.py                   |   120 +
 src/mesa/glapi/gen/gl_procs.py                     |   215 +
 src/mesa/glapi/gen/gl_table.py                     |   229 +
 src/mesa/glapi/gen/gl_x86-64_asm.py                |   334 +
 src/mesa/glapi/gen/gl_x86_asm.py                   |   270 +
 src/mesa/glapi/gen/license.py                      |    47 +
 src/mesa/glapi/gen/mesadef.py                      |   216 +
 src/mesa/glapi/gen/next_available_offset.sh        |    39 +
 src/mesa/glapi/gen/remap_helper.py                 |   226 +
 src/mesa/glapi/gen/typeexpr.py                     |   292 +
 src/mesa/glapi/glX_API.xml                         |   220 -
 src/mesa/glapi/glX_XML.py                          |   570 -
 src/mesa/glapi/glX_doc.py                          |   280 -
 src/mesa/glapi/glX_proto_common.py                 |    95 -
 src/mesa/glapi/glX_proto_recv.py                   |   554 -
 src/mesa/glapi/glX_proto_send.py                   |  1042 --
 src/mesa/glapi/glX_proto_size.py                   |   704 --
 src/mesa/glapi/glX_server_table.py                 |   411 -
 src/mesa/glapi/gl_API.dtd                          |   140 -
 src/mesa/glapi/gl_API.xml                          | 12505 -------------------
 src/mesa/glapi/gl_SPARC_asm.py                     |   275 -
 src/mesa/glapi/gl_XML.py                           |   967 --
 src/mesa/glapi/gl_and_glX_API.xml                  |     7 -
 src/mesa/glapi/gl_apitemp.py                       |   320 -
 src/mesa/glapi/gl_enums.py                         |   243 -
 src/mesa/glapi/gl_offsets.py                       |   120 -
 src/mesa/glapi/gl_procs.py                         |   215 -
 src/mesa/glapi/gl_table.py                         |   229 -
 src/mesa/glapi/gl_x86-64_asm.py                    |   334 -
 src/mesa/glapi/gl_x86_asm.py                       |   270 -
 src/mesa/glapi/license.py                          |    47 -
 src/mesa/glapi/mesadef.py                          |   216 -
 src/mesa/glapi/next_available_offset.sh            |    39 -
 src/mesa/glapi/remap_helper.py                     |   226 -
 src/mesa/glapi/typeexpr.py                         |   292 -
 84 files changed, 21750 insertions(+), 21750 deletions(-)
 delete mode 100644 src/mesa/glapi/APPLE_vertex_array_object.xml
 delete mode 100644 src/mesa/glapi/ARB_copy_buffer.xml
 delete mode 100644 src/mesa/glapi/ARB_depth_clamp.xml
 delete mode 100644 src/mesa/glapi/ARB_draw_elements_base_vertex.xml
 delete mode 100644 src/mesa/glapi/ARB_framebuffer_object.xml
 delete mode 100644 src/mesa/glapi/ARB_map_buffer_range.xml
 delete mode 100644 src/mesa/glapi/ARB_seamless_cube_map.xml
 delete mode 100644 src/mesa/glapi/ARB_sync.xml
 delete mode 100644 src/mesa/glapi/ARB_vertex_array_object.xml
 delete mode 100644 src/mesa/glapi/EXT_draw_buffers2.xml
 delete mode 100644 src/mesa/glapi/EXT_framebuffer_object.xml
 delete mode 100644 src/mesa/glapi/EXT_packed_depth_stencil.xml
 delete mode 100644 src/mesa/glapi/EXT_provoking_vertex.xml
 delete mode 100644 src/mesa/glapi/EXT_texture_array.xml
 delete mode 100644 src/mesa/glapi/Makefile
 delete mode 100644 src/mesa/glapi/NV_conditional_render.xml
 delete mode 100644 src/mesa/glapi/extension_helper.py
 create mode 100644 src/mesa/glapi/gen/APPLE_vertex_array_object.xml
 create mode 100644 src/mesa/glapi/gen/ARB_copy_buffer.xml
 create mode 100644 src/mesa/glapi/gen/ARB_depth_clamp.xml
 create mode 100644 src/mesa/glapi/gen/ARB_draw_elements_base_vertex.xml
 create mode 100644 src/mesa/glapi/gen/ARB_framebuffer_object.xml
 create mode 100644 src/mesa/glapi/gen/ARB_map_buffer_range.xml
 create mode 100644 src/mesa/glapi/gen/ARB_seamless_cube_map.xml
 create mode 100644 src/mesa/glapi/gen/ARB_sync.xml
 create mode 100644 src/mesa/glapi/gen/ARB_vertex_array_object.xml
 create mode 100644 src/mesa/glapi/gen/EXT_draw_buffers2.xml
 create mode 100644 src/mesa/glapi/gen/EXT_framebuffer_object.xml
 create mode 100644 src/mesa/glapi/gen/EXT_packed_depth_stencil.xml
 create mode 100644 src/mesa/glapi/gen/EXT_provoking_vertex.xml
 create mode 100644 src/mesa/glapi/gen/EXT_texture_array.xml
 create mode 100644 src/mesa/glapi/gen/Makefile
 create mode 100644 src/mesa/glapi/gen/NV_conditional_render.xml
 create mode 100644 src/mesa/glapi/gen/extension_helper.py
 create mode 100644 src/mesa/glapi/gen/glX_API.xml
 create mode 100644 src/mesa/glapi/gen/glX_XML.py
 create mode 100644 src/mesa/glapi/gen/glX_doc.py
 create mode 100644 src/mesa/glapi/gen/glX_proto_common.py
 create mode 100644 src/mesa/glapi/gen/glX_proto_recv.py
 create mode 100644 src/mesa/glapi/gen/glX_proto_send.py
 create mode 100644 src/mesa/glapi/gen/glX_proto_size.py
 create mode 100644 src/mesa/glapi/gen/glX_server_table.py
 create mode 100644 src/mesa/glapi/gen/gl_API.dtd
 create mode 100644 src/mesa/glapi/gen/gl_API.xml
 create mode 100644 src/mesa/glapi/gen/gl_SPARC_asm.py
 create mode 100644 src/mesa/glapi/gen/gl_XML.py
 create mode 100644 src/mesa/glapi/gen/gl_and_glX_API.xml
 create mode 100644 src/mesa/glapi/gen/gl_apitemp.py
 create mode 100644 src/mesa/glapi/gen/gl_enums.py
 create mode 100644 src/mesa/glapi/gen/gl_offsets.py
 create mode 100644 src/mesa/glapi/gen/gl_procs.py
 create mode 100644 src/mesa/glapi/gen/gl_table.py
 create mode 100644 src/mesa/glapi/gen/gl_x86-64_asm.py
 create mode 100644 src/mesa/glapi/gen/gl_x86_asm.py
 create mode 100644 src/mesa/glapi/gen/license.py
 create mode 100644 src/mesa/glapi/gen/mesadef.py
 create mode 100755 src/mesa/glapi/gen/next_available_offset.sh
 create mode 100644 src/mesa/glapi/gen/remap_helper.py
 create mode 100644 src/mesa/glapi/gen/typeexpr.py
 delete mode 100644 src/mesa/glapi/glX_API.xml
 delete mode 100644 src/mesa/glapi/glX_XML.py
 delete mode 100644 src/mesa/glapi/glX_doc.py
 delete mode 100644 src/mesa/glapi/glX_proto_common.py
 delete mode 100644 src/mesa/glapi/glX_proto_recv.py
 delete mode 100644 src/mesa/glapi/glX_proto_send.py
 delete mode 100644 src/mesa/glapi/glX_proto_size.py
 delete mode 100644 src/mesa/glapi/glX_server_table.py
 delete mode 100644 src/mesa/glapi/gl_API.dtd
 delete mode 100644 src/mesa/glapi/gl_API.xml
 delete mode 100644 src/mesa/glapi/gl_SPARC_asm.py
 delete mode 100644 src/mesa/glapi/gl_XML.py
 delete mode 100644 src/mesa/glapi/gl_and_glX_API.xml
 delete mode 100644 src/mesa/glapi/gl_apitemp.py
 delete mode 100644 src/mesa/glapi/gl_enums.py
 delete mode 100644 src/mesa/glapi/gl_offsets.py
 delete mode 100644 src/mesa/glapi/gl_procs.py
 delete mode 100644 src/mesa/glapi/gl_table.py
 delete mode 100644 src/mesa/glapi/gl_x86-64_asm.py
 delete mode 100644 src/mesa/glapi/gl_x86_asm.py
 delete mode 100644 src/mesa/glapi/license.py
 delete mode 100644 src/mesa/glapi/mesadef.py
 delete mode 100755 src/mesa/glapi/next_available_offset.sh
 delete mode 100644 src/mesa/glapi/remap_helper.py
 delete mode 100644 src/mesa/glapi/typeexpr.py

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/APPLE_vertex_array_object.xml b/src/mesa/glapi/APPLE_vertex_array_object.xml
deleted file mode 100644
index bd8427eaf6..0000000000
--- a/src/mesa/glapi/APPLE_vertex_array_object.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
-
-<OpenGLAPI>
-<category name="GL_APPLE_vertex_array_object" number="273">
-    <enum name="VERTEX_ARRAY_BINDING_APPLE"               value="0x85B5"/>
-
-    <function name="BindVertexArrayAPPLE" offset="assign" static_dispatch="false">
-        <param name="array" type="GLuint"/>
-    </function>
-
-    <function name="DeleteVertexArraysAPPLE" offset="assign" static_dispatch="false">
-        <param name="n" type="GLsizei"/>
-	<param name="arrays" type="const GLuint *" count="n"/>
-    </function>
-
-    <function name="GenVertexArraysAPPLE" offset="assign" static_dispatch="false">
-        <param name="n" type="GLsizei"/>
-	<param name="arrays" type="GLuint *" count="n" output="true"/>
-    </function>
-
-    <function name="IsVertexArrayAPPLE" offset="assign" static_dispatch="false">
-        <param name="array" type="GLuint"/>
-	<return type="GLboolean"/>
-    </function>
-</category>
-</OpenGLAPI>
diff --git a/src/mesa/glapi/ARB_copy_buffer.xml b/src/mesa/glapi/ARB_copy_buffer.xml
deleted file mode 100644
index 719816d817..0000000000
--- a/src/mesa/glapi/ARB_copy_buffer.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
-
-<!-- Note: no GLX protocol info yet. -->
-
-
-<OpenGLAPI>
-
-<category name="GL_ARB_copy_buffer" number="59">
-
-    <enum name="COPY_READ_BUFFER"   value="0x8F36"/>
-    <enum name="COPY_WRITE_BUFFER"  value="0x8F37"/>
-
-    <function name="CopyBufferSubData" offset="assign">
-        <param name="readTarget" type="GLenum"/>
-        <param name="writeTarget" type="GLenum"/>
-        <param name="readOffset" type="GLintptr"/>
-        <param name="writeOffset" type="GLintptr"/>
-        <param name="size" type="GLsizeiptr"/>
-    </function>
-
-</category>
-
-</OpenGLAPI>
diff --git a/src/mesa/glapi/ARB_depth_clamp.xml b/src/mesa/glapi/ARB_depth_clamp.xml
deleted file mode 100644
index 157c9a86b1..0000000000
--- a/src/mesa/glapi/ARB_depth_clamp.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
-
-<OpenGLAPI>
-
-<category name="GL_ARB_depth_clamp" number="61">
-    <enum name="DEPTH_CLAMP" count="1"  value="0x864F">
-        <size name="Get" mode="get"/>
-    </enum>
-</category>
-
-</OpenGLAPI>
diff --git a/src/mesa/glapi/ARB_draw_elements_base_vertex.xml b/src/mesa/glapi/ARB_draw_elements_base_vertex.xml
deleted file mode 100644
index f4067f4c8d..0000000000
--- a/src/mesa/glapi/ARB_draw_elements_base_vertex.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
-
-<!-- Note: no GLX protocol info yet. -->
-
-
-<OpenGLAPI>
-
-<category name="GL_ARB_draw_elements_base_vertex" number="62">
-
-    <function name="DrawElementsBaseVertex" offset="assign">
-        <param name="mode" type="GLenum"/>
-        <param name="count" type="GLsizei"/>
-        <param name="type" type="GLenum"/>
-        <param name="indices" type="const GLvoid *"/>
-        <param name="basevertex" type="GLint"/>
-    </function>
-
-    <function name="DrawRangeElementsBaseVertex" offset="assign">
-        <param name="mode" type="GLenum"/>
-        <param name="start" type="GLuint"/>
-        <param name="end" type="GLuint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="type" type="GLenum"/>
-        <param name="indices" type="const GLvoid *"/>
-        <param name="basevertex" type="GLint"/>
-    </function>
-
-    <function name="MultiDrawElementsBaseVertex" offset="assign">
-        <param name="mode" type="GLenum"/>
-        <param name="count" type="const GLsizei *"/>
-        <param name="type" type="GLenum"/>
-        <param name="indices" type="const GLvoid **"/>
-        <param name="primcount" type="GLsizei"/>
-        <param name="basevertex" type="const GLint *"/>
-    </function>
-
-</category>
-
-</OpenGLAPI>
diff --git a/src/mesa/glapi/ARB_framebuffer_object.xml b/src/mesa/glapi/ARB_framebuffer_object.xml
deleted file mode 100644
index e6bdcd6e50..0000000000
--- a/src/mesa/glapi/ARB_framebuffer_object.xml
+++ /dev/null
@@ -1,275 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
-
-<!-- Note: no GLX protocol info yet. -->
-
-
-<OpenGLAPI>
-<category name="GL_ARB_framebuffer_object" number="45">
-    <enum name="FRAMEBUFFER"                              value="0x8D40"/>
-    <enum name="READ_FRAMEBUFFER"                         value="0x8CA8"/>
-    <enum name="DRAW_FRAMEBUFFER"                         value="0x8CA9"/>
-
-    <enum name="RENDERBUFFER"                             value="0x8D41"/>
-
-    <enum name="STENCIL_INDEX1"                           value="0x8D46"/>
-    <enum name="STENCIL_INDEX4"                           value="0x8D47"/>
-    <enum name="STENCIL_INDEX8"                           value="0x8D48"/>
-    <enum name="STENCIL_INDEX16"                          value="0x8D49"/>
-
-    <enum name="RENDERBUFFER_WIDTH"              value="0x8D42"/>
-    <enum name="RENDERBUFFER_HEIGHT"             value="0x8D43"/>
-    <enum name="RENDERBUFFER_INTERNAL_FORMAT"    value="0x8D44"/>
-    <enum name="RENDERBUFFER_RED_SIZE"           value="0x8D50"/>
-    <enum name="RENDERBUFFER_GREEN_SIZE"         value="0x8D51"/>
-    <enum name="RENDERBUFFER_BLUE_SIZE"          value="0x8D52"/>
-    <enum name="RENDERBUFFER_ALPHA_SIZE"         value="0x8D53"/>
-    <enum name="RENDERBUFFER_DEPTH_SIZE"         value="0x8D54"/>
-    <enum name="RENDERBUFFER_STENCIL_SIZE"       value="0x8D55"/>
-    <enum name="RENDERBUFFER_SAMPLES"            value="0x8CAB"/>
-
-    <enum name="FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE" count="1" value="0x8CD0">
-        <size name="GetFramebufferAttachmentParameteriv" mode="get"/>
-    </enum>
-    <enum name="FRAMEBUFFER_ATTACHMENT_OBJECT_NAME" count="1" value="0x8CD1">
-        <size name="GetFramebufferAttachmentParameteriv" mode="get"/>
-    </enum>
-    <enum name="FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL" count="1" value="0x8CD2">
-        <size name="GetFramebufferAttachmentParameteriv" mode="get"/>
-    </enum>
-    <enum name="FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE" count="1" value="0x8CD3">
-        <size name="GetFramebufferAttachmentParameteriv" mode="get"/>
-    </enum>
-    <enum name="FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER" count="1" value="0x8CD4">
-        <size name="GetFramebufferAttachmentParameteriv" mode="get"/>
-    </enum>
-    <enum name="FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING" count="1" value="0x8210">
-        <size name="GetFramebufferAttachmentParameteriv" mode="get"/>
-    </enum>
-    <enum name="FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE" count="1" value="0x8211">
-        <size name="GetFramebufferAttachmentParameteriv" mode="get"/>
-    </enum>
-    <enum name="FRAMEBUFFER_ATTACHMENT_RED_SIZE" count="1" value="0x8212">
-        <size name="GetFramebufferAttachmentParameteriv" mode="get"/>
-    </enum>
-    <enum name="FRAMEBUFFER_ATTACHMENT_GREEN_SIZE" count="1" value="0x8213">
-        <size name="GetFramebufferAttachmentParameteriv" mode="get"/>
-    </enum>
-    <enum name="FRAMEBUFFER_ATTACHMENT_BLUE_SIZE" count="1" value="0x8214">
-        <size name="GetFramebufferAttachmentParameteriv" mode="get"/>
-    </enum>
-    <enum name="FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE" count="1" value="0x8215">
-        <size name="GetFramebufferAttachmentParameteriv" mode="get"/>
-    </enum>
-    <enum name="FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE" count="1" value="0x8216">
-        <size name="GetFramebufferAttachmentParameteriv" mode="get"/>
-    </enum>
-    <enum name="FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE" count="1" value="0x8217">
-        <size name="GetFramebufferAttachmentParameteriv" mode="get"/>
-    </enum>
-
-    <enum name="SRGB"                                      value="0x8C40"/>
-    <enum name="UNSIGNED_NORMALIZED"                       value="0x8C17"/>
-    <enum name="FRAMEBUFFER_DEFAULT"                       value="0x8218"/>
-    <enum name="INDEX"                                     value="0x8222"/>
-
-    <enum name="COLOR_ATTACHMENT0"                         value="0x8CE0"/>
-    <enum name="COLOR_ATTACHMENT1"                         value="0x8CE1"/>
-    <enum name="COLOR_ATTACHMENT2"                         value="0x8CE2"/>
-    <enum name="COLOR_ATTACHMENT3"                         value="0x8CE3"/>
-    <enum name="COLOR_ATTACHMENT4"                         value="0x8CE4"/>
-    <enum name="COLOR_ATTACHMENT5"                         value="0x8CE5"/>
-    <enum name="COLOR_ATTACHMENT6"                         value="0x8CE6"/>
-    <enum name="COLOR_ATTACHMENT7"                         value="0x8CE7"/>
-    <enum name="COLOR_ATTACHMENT8"                         value="0x8CE8"/>
-    <enum name="COLOR_ATTACHMENT9"                         value="0x8CE9"/>
-    <enum name="COLOR_ATTACHMENT10"                        value="0x8CEA"/>
-    <enum name="COLOR_ATTACHMENT11"                        value="0x8CEB"/>
-    <enum name="COLOR_ATTACHMENT12"                        value="0x8CEC"/>
-    <enum name="COLOR_ATTACHMENT13"                        value="0x8CED"/>
-    <enum name="COLOR_ATTACHMENT14"                        value="0x8CEE"/>
-    <enum name="COLOR_ATTACHMENT15"                        value="0x8CEF"/>
-    <enum name="DEPTH_ATTACHMENT"                          value="0x8D00"/>
-    <enum name="STENCIL_ATTACHMENT"                        value="0x8D20"/>
-    <enum name="DEPTH_STENCIL_ATTACHMENT"                  value="0x821A"/>
-
-    <enum name="MAX_SAMPLES"                     count="1" value="0x8D57">
-        <size name="Get" mode="get"/>
-    </enum>
-
-    <enum name="FRAMEBUFFER_COMPLETE"                      value="0x8CD5"/>
-    <enum name="FRAMEBUFFER_INCOMPLETE_ATTACHMENT"         value="0x8CD6"/>
-    <enum name="FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT" value="0x8CD7"/>
-    <enum name="FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER"        value="0x8CDB"/>
-    <enum name="FRAMEBUFFER_INCOMPLETE_READ_BUFFER"        value="0x8CDC"/>
-    <enum name="FRAMEBUFFER_UNSUPPORTED"                   value="0x8CDD"/>
-    <enum name="FRAMEBUFFER_INCOMPLETE_MULTISAMPLE"        value="0x8D56"/>
-    <enum name="FRAMEBUFFER_UNDEFINED"                     value="0x8219"/>
-
-    <enum name="FRAMEBUFFER_BINDING"             count="1" value="0x8CA6">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_FRAMEBUFFER_BINDING"        count="1" value="0x8CA6">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="READ_FRAMEBUFFER_BINDING"        count="1" value="0x8CAA">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="RENDERBUFFER_BINDING"            count="1" value="0x8CA7">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAX_COLOR_ATTACHMENTS"           count="1" value="0x8CDF">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAX_RENDERBUFFER_SIZE"           count="1" value="0x84E8">
-        <size name="Get" mode="get"/>
-    </enum>
-
-    <enum name="INVALID_FRAMEBUFFER_OPERATION"            value="0x0506"/>
-
-    <enum name="DEPTH_STENCIL"                            value="0x84F9"/>
-
-    <enum name="UNSIGNED_INT_24_8"                        value="0x84FA"/>
-
-    <enum name="DEPTH24_STENCIL8"                         value="0x88F0"/>
-
-    <enum name="TEXTURE_STENCIL_SIZE"          count="1"  value="0x88F1">
-        <size name="GetTexLevelParameterfv" mode="get"/>
-        <size name="GetTexLevelParameteriv" mode="get"/>
-    </enum>
-
-
-
-    <function name="IsRenderbuffer" alias="IsRenderbufferEXT">
-        <param name="renderbuffer" type="GLuint"/>
-	<return type="GLboolean"/>
-    </function>
-
-    <function name="BindRenderbuffer" alias="BindRenderbufferEXT">
-        <param name="target" type="GLenum"/>
-        <param name="renderbuffer" type="GLuint"/>
-    </function>
-
-    <function name="DeleteRenderbuffers" alias="DeleteRenderbuffersEXT">
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="renderbuffers" type="const GLuint *" count="n"/>
-    </function>
-
-    <function name="GenRenderbuffers" alias="GenRenderbuffersEXT">
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="renderbuffers" type="GLuint *" count="n" output="true"/>
-    </function>
-
-    <function name="RenderbufferStorage" alias="RenderbufferStorageEXT">
-        <param name="target" type="GLenum"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-    </function>
-
-    <function name="RenderbufferStorageMultisample" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="samples" type="GLsizei"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-        <glx rop="4331"/>
-    </function>
-
-    <function name="GetRenderbufferParameteriv" alias="GetRenderbufferParameterivEXT">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true"/>
-    </function>
-
-    <function name="IsFramebuffer" alias="IsFramebufferEXT">
-        <param name="framebuffer" type="GLuint"/>
-	<return type="GLboolean"/>
-    </function>
-
-    <function name="BindFramebuffer" alias="BindFramebufferEXT">
-        <param name="target" type="GLenum"/>
-        <param name="framebuffer" type="GLuint"/>
-    </function>
-
-    <function name="DeleteFramebuffers" alias="DeleteFramebuffersEXT">
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="framebuffers" type="const GLuint *" count="n"/>
-    </function>
-
-    <function name="GenFramebuffers" alias="GenFramebuffersEXT">
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="framebuffers" type="GLuint *" count="n" output="true"/>
-    </function>
-
-    <function name="CheckFramebufferStatus" alias="CheckFramebufferStatusEXT">
-        <param name="target" type="GLenum"/>
-	<return type="GLenum"/>
-    </function>
-
-    <function name="FramebufferTexture1D" alias="FramebufferTexture1DEXT">
-        <param name="target" type="GLenum"/>
-        <param name="attachment" type="GLenum"/>
-        <param name="textarget" type="GLenum"/>
-        <param name="texture" type="GLuint"/>
-        <param name="level" type="GLint"/>
-    </function>
-
-    <function name="FramebufferTexture2D" alias="FramebufferTexture2DEXT">
-        <param name="target" type="GLenum"/>
-        <param name="attachment" type="GLenum"/>
-        <param name="textarget" type="GLenum"/>
-        <param name="texture" type="GLuint"/>
-        <param name="level" type="GLint"/>
-    </function>
-
-    <function name="FramebufferTexture3D" alias="FramebufferTexture3DEXT">
-        <param name="target" type="GLenum"/>
-        <param name="attachment" type="GLenum"/>
-        <param name="textarget" type="GLenum"/>
-        <param name="texture" type="GLuint"/>
-        <param name="level" type="GLint"/>
-        <param name="zoffset" type="GLint"/>
-    </function>
-
-    <function name="FramebufferTextureLayer" alias="FramebufferTextureLayerEXT">
-        <param name="target" type="GLenum"/>
-        <param name="attachment" type="GLenum"/>
-        <param name="texture" type="GLuint"/>
-        <param name="level" type="GLint"/>
-        <param name="layer" type="GLint"/>
-    </function>
-
-    <function name="FramebufferRenderbuffer" alias="FramebufferRenderbufferEXT">
-        <param name="target" type="GLenum"/>
-        <param name="attachment" type="GLenum"/>
-        <param name="renderbuffertarget" type="GLenum"/>
-        <param name="renderbuffer" type="GLuint"/>
-    </function>
-
-    <function name="GetFramebufferAttachmentParameteriv" alias="GetFramebufferAttachmentParameterivEXT">
-        <param name="target" type="GLenum"/>
-        <param name="attachment" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true"/>
-    </function>
-
-    <function name="BlitFramebuffer" alias="BlitFramebufferEXT">
-        <param name="srcX0" type="GLint"/>
-        <param name="srcY0" type="GLint"/>
-        <param name="srcX1" type="GLint"/>
-        <param name="srcY1" type="GLint"/>
-        <param name="dstX0" type="GLint"/>
-        <param name="dstY0" type="GLint"/>
-        <param name="dstX1" type="GLint"/>
-        <param name="dstY1" type="GLint"/>
-        <param name="mask" type="GLbitfield"/>
-        <param name="filter" type="GLenum"/>
-    </function>
-
-    <function name="GenerateMipmap" alias="GenerateMipmapEXT">
-        <param name="target" type="GLenum"/>
-    </function>
-</category>
-
-</OpenGLAPI>
diff --git a/src/mesa/glapi/ARB_map_buffer_range.xml b/src/mesa/glapi/ARB_map_buffer_range.xml
deleted file mode 100644
index afcb9b6ba6..0000000000
--- a/src/mesa/glapi/ARB_map_buffer_range.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
-
-<!-- Note: no GLX protocol info yet. -->
-
-
-<OpenGLAPI>
-
-<category name="GL_ARB_map_buffer_range" number="50">
-
-    <enum name="MAP_READ_BIT"                value="0x0001"/>
-    <enum name="MAP_WRITE_BIT"               value="0x0002"/>
-    <enum name="MAP_INVALIDATE_RANGE_BIT"    value="0x0004"/>
-    <enum name="MAP_INVALIDATE_BUFFER_BIT"   value="0x0008"/>
-    <enum name="MAP_FLUSH_EXPLICIT_BIT"      value="0x0010"/>
-    <enum name="MAP_UNSYNCHRONIZED_BIT"      value="0x0020"/>
-
-    <function name="MapBufferRange" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="offset" type="GLintptr"/>
-        <param name="length" type="GLsizeiptr"/>
-        <param name="access" type="GLbitfield"/>
-        <return type="GLvoid *"/>
-    </function>
-
-    <function name="FlushMappedBufferRange" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="offset" type="GLintptr"/>
-        <param name="length" type="GLsizeiptr"/>
-    </function>
-
-</category>
-
-</OpenGLAPI>
diff --git a/src/mesa/glapi/ARB_seamless_cube_map.xml b/src/mesa/glapi/ARB_seamless_cube_map.xml
deleted file mode 100644
index 3cdc84d2b9..0000000000
--- a/src/mesa/glapi/ARB_seamless_cube_map.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
-
-<OpenGLAPI>
-
-<category name="GL_ARB_seamless_cubemap" number="65">
-    <enum name="TEXTURE_CUBE_MAP_SEAMLESS"     count="1"  value="0x88F4">
-        <size name="Get" mode="get"/>
-    </enum>
-</category>
-
-</OpenGLAPI>
diff --git a/src/mesa/glapi/ARB_sync.xml b/src/mesa/glapi/ARB_sync.xml
deleted file mode 100644
index 4e4eebac32..0000000000
--- a/src/mesa/glapi/ARB_sync.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
-
-<OpenGLAPI>
-<category name="GL_ARB_sync" number="61">
-    <type name="int64"   size="8"                  glx_name="CARD64"/>
-    <type name="uint64"  size="8"  unsigned="true" glx_name="CARD64"/>
-    <type name="sync"    size="8"  unsigned="true" glx_name="CARD64"/>
-
-    <enum name="MAX_SERVER_WAIT_TIMEOUT"       count="1"  value="0x9111">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="OBJECT_TYPE"                   count="1"  value="0x9112">
-        <size name="GetSynciv" mode="get"/>
-    </enum>
-    <enum name="SYNC_CONDITION"                count="1"  value="0x9113">
-        <size name="GetSynciv" mode="get"/>
-    </enum>
-    <enum name="SYNC_STATUS"                   count="1"  value="0x9114">
-        <size name="GetSynciv" mode="get"/>
-    </enum>
-    <enum name="SYNC_FLAGS"                    count="1"  value="0x9115">
-        <size name="GetSynciv" mode="get"/>
-    </enum>
-
-    <enum name="SYNC_FENCE"                               value="0x9116"/>
-    <enum name="SYNC_GPU_COMMANDS_COMPLETE"               value="0x9117"/>
-    <enum name="UNSIGNALED"                               value="0x9118"/>
-    <enum name="SIGNALED"                                 value="0x9119"/>
-    <enum name="ALREADY_SIGNALED"                         value="0x911A"/>
-    <enum name="TIMEOUT_EXPIRED"                          value="0x911B"/>
-    <enum name="CONDITION_SATISFIED"                      value="0x911C"/>
-    <enum name="WAIT_FAILED"                              value="0x911D"/>
-
-    <enum name="SYNC_FLUSH_COMMANDS_BIT"                  value="0x00000001"/>
-
-    <!-- Not really an enum:
-    <enum name="TIMEOUT_IGNORED"                  value="0xFFFFFFFFFFFFFFFF"/>
-    -->
-
-
-    <function name="FenceSync" offset="assign">
-        <param name="condition" type="GLenum"/>
-        <param name="flags" type="GLbitfield"/>
-        <return type="GLsync"/>
-    </function>
-
-    <function name="IsSync" offset="assign">
-        <param name="sync" type="GLsync"/>
-	<return type="GLboolean"/>
-    </function>
-
-    <function name="DeleteSync" offset="assign">
-        <param name="sync" type="GLsync"/>
-    </function>
-
-    <function name="ClientWaitSync" offset="assign">
-        <param name="sync" type="GLsync"/>
-        <param name="flags" type="GLbitfield"/>
-	<param name="timeout" type="GLuint64"/>
-        <return type="GLenum"/>
-    </function>
-
-    <function name="WaitSync" offset="assign">
-        <param name="sync" type="GLsync"/>
-        <param name="flags" type="GLbitfield"/>
-	<param name="timeout" type="GLuint64"/>
-    </function>
-
-    <function name="GetInteger64v" offset="assign">
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint64 *" output="true" variable_param="pname"/>
-    </function>
-
-    <function name="GetSynciv" offset="assign">
-        <param name="sync" type="GLsync"/>
-        <param name="pname" type="GLenum"/>
-        <param name="bufSize" type="GLsizei"/>
-        <param name="length" type="GLsizei *" output="true"/>
-        <param name="values" type="GLint *" output="true" variable_param="pname"/>
-    </function>
-</category>
-
-</OpenGLAPI>
diff --git a/src/mesa/glapi/ARB_vertex_array_object.xml b/src/mesa/glapi/ARB_vertex_array_object.xml
deleted file mode 100644
index 3b4ab64f55..0000000000
--- a/src/mesa/glapi/ARB_vertex_array_object.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
-
-<!-- Note: no GLX protocol info yet. -->
-
-
-<OpenGLAPI>
-
-<category name="GL_ARB_vertex_array_object" number="54">
-
-    <enum name="VERTEX_ARRAY_BINDING" value="0x85B5"/>
-
-    <function name="BindVertexArray" offset="assign">
-        <param name="array" type="GLuint"/>
-    </function>
-
-    <function name="DeleteVertexArrays" alias="DeleteVertexArraysAPPLE">
-        <param name="n" type="GLsizei"/>
-        <param name="arrays" type="const GLuint *"/>
-    </function>
-
-    <function name="GenVertexArrays" offset="assign">
-        <param name="n" type="GLsizei"/>
-        <param name="arrays" type="GLuint *"/>
-    </function>
-
-    <function name="IsVertexArray" alias="IsVertexArrayAPPLE">
-        <param name="array" type="GLuint"/>
-        <return type="GLboolean"/>
-    </function>
-
-</category>
-
-</OpenGLAPI>
diff --git a/src/mesa/glapi/EXT_draw_buffers2.xml b/src/mesa/glapi/EXT_draw_buffers2.xml
deleted file mode 100644
index efbe61f74e..0000000000
--- a/src/mesa/glapi/EXT_draw_buffers2.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
-
-<!-- Note: no GLX protocol info yet. -->
-
-
-<OpenGLAPI>
-
-<category name="GL_EXT_draw_buffers2" number="340">
-
-    <function name="ColorMaskIndexedEXT" offset="assign">
-	<param name="buf" type="GLuint"/>
-	<param name="r" type="GLboolean"/>
-	<param name="g" type="GLboolean"/>
-	<param name="b" type="GLboolean"/>
-	<param name="a" type="GLboolean"/>
-    </function>
-
-    <function name="GetBooleanIndexedvEXT" offset="assign">
-        <param name="value" type="GLenum"/>
-	<param name="index" type="GLuint"/>
-	<param name="data" type="GLboolean *"/>
-    </function>
-
-    <function name="GetIntegerIndexedvEXT" offset="assign">
-        <param name="value" type="GLenum"/>
-	<param name="index" type="GLuint"/>
-	<param name="data" type="GLint *"/>
-    </function>
-
-    <function name="EnableIndexedEXT" offset="assign">
-        <param name="target" type="GLenum"/>
-	<param name="index" type="GLuint"/>
-    </function>
-
-    <function name="DisableIndexedEXT" offset="assign">
-        <param name="target" type="GLenum"/>
-	<param name="index" type="GLuint"/>
-    </function>
-
-    <function name ="IsEnabledIndexedEXT" offset="assign">
-        <param name="target" type="GLenum"/>
-	<param name="index" type="GLuint"/>
-	<return type="GLboolean"/>
-    </function>
-
-</category>
-
-</OpenGLAPI>
diff --git a/src/mesa/glapi/EXT_framebuffer_object.xml b/src/mesa/glapi/EXT_framebuffer_object.xml
deleted file mode 100644
index 4f418f7b64..0000000000
--- a/src/mesa/glapi/EXT_framebuffer_object.xml
+++ /dev/null
@@ -1,235 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
-
-<OpenGLAPI>
-<category name="GL_EXT_framebuffer_object" number="310">
-    <enum name="FRAMEBUFFER_EXT"                          value="0x8D40"/>
-    <enum name="RENDERBUFFER_EXT"                         value="0x8D41"/>
-    <enum name="RENDERBUFFER_WIDTH_EXT"                   value="0x8D42"/>
-    <enum name="RENDERBUFFER_HEIGHT_EXT"                  value="0x8D43"/>
-    <enum name="RENDERBUFFER_INTERNAL_FORMAT_EXT"         value="0x8D44"/>
-    <enum name="STENCIL_INDEX_EXT"                        value="0x8D45"/>
-    <enum name="STENCIL_INDEX1_EXT"                       value="0x8D46"/>
-    <enum name="STENCIL_INDEX4_EXT"                       value="0x8D47"/>
-    <enum name="STENCIL_INDEX8_EXT"                       value="0x8D48"/>
-    <enum name="STENCIL_INDEX16_EXT"                      value="0x8D49"/>
-
-    <enum name="FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT"   count="1" value="0x8CD0">
-        <size name="GetFramebufferAttachmentParameterivEXT" mode="get"/>
-    </enum>
-    <enum name="FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT"   count="1" value="0x8CD1">
-        <size name="GetFramebufferAttachmentParameterivEXT" mode="get"/>
-    </enum>
-    <enum name="FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT" count="1" value="0x8CD2">
-        <size name="GetFramebufferAttachmentParameterivEXT" mode="get"/>
-    </enum>
-    <enum name="FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT" count="1" value="0x8CD3">
-        <size name="GetFramebufferAttachmentParameterivEXT" mode="get"/>
-    </enum>
-    <enum name="FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT"    count="1" value="0x8CD4">
-        <size name="GetFramebufferAttachmentParameterivEXT" mode="get"/>
-    </enum>
-
-    <enum name="COLOR_ATTACHMENT0_EXT"                    value="0x8CE0"/>
-    <enum name="COLOR_ATTACHMENT1_EXT"                    value="0x8CE1"/>
-    <enum name="COLOR_ATTACHMENT2_EXT"                    value="0x8CE2"/>
-    <enum name="COLOR_ATTACHMENT3_EXT"                    value="0x8CE3"/>
-    <enum name="COLOR_ATTACHMENT4_EXT"                    value="0x8CE4"/>
-    <enum name="COLOR_ATTACHMENT5_EXT"                    value="0x8CE5"/>
-    <enum name="COLOR_ATTACHMENT6_EXT"                    value="0x8CE6"/>
-    <enum name="COLOR_ATTACHMENT7_EXT"                    value="0x8CE7"/>
-    <enum name="COLOR_ATTACHMENT8_EXT"                    value="0x8CE8"/>
-    <enum name="COLOR_ATTACHMENT9_EXT"                    value="0x8CE9"/>
-    <enum name="COLOR_ATTACHMENT10_EXT"                   value="0x8CEA"/>
-    <enum name="COLOR_ATTACHMENT11_EXT"                   value="0x8CEB"/>
-    <enum name="COLOR_ATTACHMENT12_EXT"                   value="0x8CEC"/>
-    <enum name="COLOR_ATTACHMENT13_EXT"                   value="0x8CED"/>
-    <enum name="COLOR_ATTACHMENT14_EXT"                   value="0x8CEE"/>
-    <enum name="COLOR_ATTACHMENT15_EXT"                   value="0x8CEF"/>
-    <enum name="DEPTH_ATTACHMENT_EXT"                     value="0x8D00"/>
-    <enum name="STENCIL_ATTACHMENT_EXT"                   value="0x8D20"/>
-
-    <enum name="FRAMEBUFFER_COMPLETE_EXT"                 value="0x8CD5"/>
-    <enum name="FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT"    value="0x8CD6"/>
-    <enum name="FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT"   value="0x8CD7"/>
-    <enum name="FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT" value="0x8CD8"/>
-    <enum name="FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT"    value="0x8CD9"/>
-    <enum name="FRAMEBUFFER_INCOMPLETE_FORMATS_EXT"       value="0x8CDA"/>
-    <enum name="FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT"   value="0x8CDB"/>
-    <enum name="FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT"   value="0x8CDC"/>
-    <enum name="FRAMEBUFFER_UNSUPPORTED_EXT"              value="0x8CDD"/>
-    <enum name="FRAMEBUFFER_STATUS_ERROR_EXT"             value="0x8CDE"/>
-    <enum name="FRAMEBUFFER_BINDING_EXT"        count="1" value="0x8CA6">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="RENDERBUFFER_BINDING_EXT"       count="1" value="0x8CA7">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAX_COLOR_ATTACHMENTS_EXT"      count="1" value="0x8CDF">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAX_RENDERBUFFER_SIZE_EXT"      count="1" value="0x84E8">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="INVALID_FRAMEBUFFER_OPERATION_EXT"        value="0x0506"/>
-
-    <function name="IsRenderbufferEXT" offset="assign">
-        <param name="renderbuffer" type="GLuint"/>
-	<return type="GLboolean"/>
-	<glx vendorpriv="1422"/>
-    </function>
-
-    <function name="BindRenderbufferEXT" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="renderbuffer" type="GLuint"/>
-	<glx rop="4316"/>
-    </function>
-
-    <function name="DeleteRenderbuffersEXT" offset="assign">
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="renderbuffers" type="const GLuint *" count="n"/>
-	<glx rop="4317"/>
-    </function>
-
-    <function name="GenRenderbuffersEXT" offset="assign">
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="renderbuffers" type="GLuint *" count="n" output="true"/>
-	<glx vendorpriv="1423" always_array="true"/>
-    </function>
-
-    <function name="RenderbufferStorageEXT" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-	<glx rop="4318"/>
-    </function>
-
-    <function name="GetRenderbufferParameterivEXT" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true"/>
-	<glx vendorpriv="1424"/>
-    </function>
-
-    <function name="IsFramebufferEXT" offset="assign">
-        <param name="framebuffer" type="GLuint"/>
-	<return type="GLboolean"/>
-	<glx vendorpriv="1425"/>
-    </function>
-
-    <function name="BindFramebufferEXT" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="framebuffer" type="GLuint"/>
-	<glx rop="4319"/>
-    </function>
-
-    <function name="DeleteFramebuffersEXT" offset="assign">
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="framebuffers" type="const GLuint *" count="n"/>
-	<glx rop="4320"/>
-    </function>
-
-    <function name="GenFramebuffersEXT" offset="assign">
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="framebuffers" type="GLuint *" count="n" output="true"/>
-	<glx vendorpriv="1426" always_array="true"/>
-    </function>
-
-    <function name="CheckFramebufferStatusEXT" offset="assign">
-        <param name="target" type="GLenum"/>
-	<return type="GLenum"/>
-	<glx vendorpriv="1427"/>
-    </function>
-
-    <function name="FramebufferTexture1DEXT" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="attachment" type="GLenum"/>
-        <param name="textarget" type="GLenum"/>
-        <param name="texture" type="GLuint"/>
-        <param name="level" type="GLint"/>
-	<glx rop="4321"/>
-    </function>
-
-    <function name="FramebufferTexture2DEXT" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="attachment" type="GLenum"/>
-        <param name="textarget" type="GLenum"/>
-        <param name="texture" type="GLuint"/>
-        <param name="level" type="GLint"/>
-	<glx rop="4322"/>
-    </function>
-
-    <function name="FramebufferTexture3DEXT" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="attachment" type="GLenum"/>
-        <param name="textarget" type="GLenum"/>
-        <param name="texture" type="GLuint"/>
-        <param name="level" type="GLint"/>
-        <param name="zoffset" type="GLint"/>
-	<glx rop="4323"/>
-    </function>
-
-    <function name="FramebufferRenderbufferEXT" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="attachment" type="GLenum"/>
-        <param name="renderbuffertarget" type="GLenum"/>
-        <param name="renderbuffer" type="GLuint"/>
-	<glx rop="4324"/>
-    </function>
-
-    <function name="GetFramebufferAttachmentParameterivEXT" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="attachment" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true"/>
-	<glx vendorpriv="1428"/>
-    </function>
-
-    <function name="GenerateMipmapEXT" offset="assign">
-        <param name="target" type="GLenum"/>
-	<glx rop="4325"/>
-    </function>
-</category>
-
-<category name="GL_EXT_framebuffer_blit" number="316">
-    <enum name="READ_FRAMEBUFFER_EXT" value="0x8CA8"/>
-    <enum name="DRAW_FRAMEBUFFER_EXT" value="0x8CA9"/>
-    <enum name="DRAW_FRAMEBUFFER_BINDING_EXT" count="1" value="0x8CA6">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="READ_FRAMEBUFFER_BINDING_EXT" count="1" value="0x8CAA">
-        <size name="Get" mode="get"/>
-    </enum>
-    <function name="BlitFramebufferEXT" offset="assign" static_dispatch="false">
-        <param name="srcX0" type="GLint"/>
-        <param name="srcY0" type="GLint"/>
-        <param name="srcX1" type="GLint"/>
-        <param name="srcY1" type="GLint"/>
-        <param name="dstX0" type="GLint"/>
-        <param name="dstY0" type="GLint"/>
-        <param name="dstX1" type="GLint"/>
-        <param name="dstY1" type="GLint"/>
-        <param name="mask" type="GLbitfield"/>
-        <param name="filter" type="GLenum"/>
-        <glx rop="4330"/>
-    </function>
-</category>
-
-<category name="GL_EXT_framebuffer_multisample" number="317">
-    <enum name="RENDERBUFFER_SAMPLES_EXT"                  value="0x8CAB"/>
-    <enum name="FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT"    value="0x8D56"/>
-    <enum name="MAX_SAMPLES_EXT"                 count="1" value="0x8D57">
-        <size name="Get" mode="get"/>
-    </enum>
-
-    <function name="RenderbufferStorageMultisampleEXT" alias="RenderbufferStorageMultisample">
-        <param name="target" type="GLenum"/>
-        <param name="samples" type="GLsizei"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-    </function>
-</category>
-
-</OpenGLAPI>
diff --git a/src/mesa/glapi/EXT_packed_depth_stencil.xml b/src/mesa/glapi/EXT_packed_depth_stencil.xml
deleted file mode 100644
index 5be810302f..0000000000
--- a/src/mesa/glapi/EXT_packed_depth_stencil.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
-
-<OpenGLAPI>
-<category name="GL_EXT_packed_depth_stencil" number="312">
-    <!-- These enums are shared with GL_NV_packed_depth_stencil. -->
-    <enum name="DEPTH_STENCIL_EXT"                        value="0x84F9"/>
-    <enum name="UNSIGNED_INT_24_8_EXT"                    value="0x84FA"/>
-
-    <enum name="DEPTH24_STENCIL8_EXT"                     value="0x88F0"/>
-
-    <enum name="TEXTURE_STENCIL_SIZE_EXT"      count="1"  value="0x88F1">
-        <size name="GetTexLevelParameterfv" mode="get"/>
-        <size name="GetTexLevelParameteriv" mode="get"/>
-    </enum>
-</category>
-
-</OpenGLAPI>
diff --git a/src/mesa/glapi/EXT_provoking_vertex.xml b/src/mesa/glapi/EXT_provoking_vertex.xml
deleted file mode 100644
index 71d2c72909..0000000000
--- a/src/mesa/glapi/EXT_provoking_vertex.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
-
-<!-- Note: no GLX protocol info yet. -->
-
-
-<OpenGLAPI>
-
-<category name="GL_EXT_provoking_vertex" number="364">
-
-    <enum name="FIRST_VERTEX_CONVENTION_EXT"                  value="0x8E4D"/>
-    <enum name="LAST_VERTEX_CONVENTION_EXT"                   value="0x8E4E"/>
-    <enum name="PROVOKING_VERTEX_EXT"                         value="0x8E4F"/>
-    <enum name="QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT" value="0x8E4C"/>
-
-    <function name="ProvokingVertexEXT" offset="assign">
-        <param name="mode" type="GLenum"/>
-    </function>
-
-</category>
-
-<category name="GL_ARB_provoking_vertex" number="64">
-
-    <enum name="FIRST_VERTEX_CONVENTION"                  value="0x8E4D"/>
-    <enum name="LAST_VERTEX_CONVENTION"                   value="0x8E4E"/>
-    <enum name="PROVOKING_VERTEX"                         value="0x8E4F"/>
-    <enum name="QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION" value="0x8E4C"/>
-
-    <function name="ProvokingVertex" alias="ProvokingVertexEXT">
-        <param name="mode" type="GLenum"/>
-    </function>
-
-</category>
-
-</OpenGLAPI>
diff --git a/src/mesa/glapi/EXT_texture_array.xml b/src/mesa/glapi/EXT_texture_array.xml
deleted file mode 100644
index b5b8bd406f..0000000000
--- a/src/mesa/glapi/EXT_texture_array.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
-
-<OpenGLAPI>
-
-<category name="GL_EXT_texture_array" number="329">
-    <enum name="TEXTURE_1D_ARRAY_EXT"                      value="0x8C18"/>
-    <enum name="PROXY_TEXTURE_1D_ARRAY_EXT"                value="0x8C19"/>
-    <enum name="TEXTURE_2D_ARRAY_EXT"                      value="0x8C1A"/>
-    <enum name="PROXY_TEXTURE_2D_ARRAY_EXT"                value="0x8C1B"/>
-
-    <enum name="TEXTURE_BINDING_1D_ARRAY_EXT"   count="1"  value="0x8C1C">
-        <size name="Get" mode="get"/>
-    </enum>
-
-    <enum name="TEXTURE_BINDING_2D_ARRAY_EXT"   count="1"  value="0x8C1D">
-        <size name="Get" mode="get"/>
-    </enum>
-
-    <enum name="MAX_ARRAY_TEXTURE_LAYERS_EXT"   count="1"  value="0x88FF">
-        <size name="Get" mode="get"/>
-    </enum>
-
-    <enum name="COMPARE_REF_DEPTH_TO_TEXTURE_EXT" count="1" value="0x884E">
-        <size name="Get" mode="get"/>
-    </enum>
-
-    <enum name="FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT"   count="1" value="0x8CD4">
-        <size name="GetFramebufferAttachmentParameterivEXT" mode="get"/>
-    </enum>
-
-    <function name="FramebufferTextureLayerEXT" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="attachment" type="GLenum"/>
-        <param name="texture" type="GLuint"/>
-        <param name="level" type="GLint"/>
-        <param name="layer" type="GLint"/>
-	<glx rop="237"/>
-    </function>
-</category>
-
-</OpenGLAPI>
diff --git a/src/mesa/glapi/Makefile b/src/mesa/glapi/Makefile
deleted file mode 100644
index da679607d7..0000000000
--- a/src/mesa/glapi/Makefile
+++ /dev/null
@@ -1,158 +0,0 @@
-# This file isn't used during a normal compilation since we don't want to
-# require Python in order to compile Mesa.
-# Instead, when the Mesa developers update/change the API interface it's
-# up to him/her to re-run this makefile and check in the newly generated files.
-
-
-TOP = ../../..
-include $(TOP)/configs/current
-
-OUTPUTS = glprocs.h glapitemp.h glapioffsets.h glapitable.h glapidispatch.h \
-	../main/enums.c \
-	../main/remap_helper.h \
-	../x86/glapi_x86.S \
-	../x86-64/glapi_x86-64.S \
-	../sparc/glapi_sparc.S \
-	../../glx/indirect.c \
-	../../glx/indirect.h \
-	../../glx/indirect_init.c \
-	../../glx/indirect_size.h \
-	../../glx/indirect_size.c
-
-
-GLX_DIR = $(XORG_BASE)/glx
-
-SERVER_GLAPI_FILES = \
-	$(GLX_DIR)/glapi.h \
-	$(GLX_DIR)/glapi.c \
-	$(GLX_DIR)/glapi_nop.c \
-	$(GLX_DIR)/glthread.c \
-	$(GLX_DIR)/glthread.h
-
-SERVER_OUTPUTS = \
-	$(GLX_DIR)/indirect_dispatch.c \
-	$(GLX_DIR)/indirect_dispatch_swap.c \
-	$(GLX_DIR)/indirect_dispatch.h \
-	$(GLX_DIR)/indirect_reqsize.c \
-	$(GLX_DIR)/indirect_reqsize.h \
-	$(GLX_DIR)/indirect_size.h \
-	$(GLX_DIR)/indirect_size_get.c \
-	$(GLX_DIR)/indirect_size_get.h \
-	$(GLX_DIR)/indirect_table.c \
-	$(GLX_DIR)/glapitemp.h \
-	$(GLX_DIR)/glapitable.h \
-	$(GLX_DIR)/glapioffsets.h \
-	$(GLX_DIR)/glapidispatch.h \
-	$(GLX_DIR)/glprocs.h \
-	$(SERVER_GLAPI_FILES)
-
-API_XML = gl_API.xml \
-	ARB_copy_buffer.xml \
-	ARB_depth_clamp.xml \
-	ARB_draw_elements_base_vertex.xml \
-	ARB_framebuffer_object.xml \
-	ARB_map_buffer_range.xml \
-	ARB_seamless_cube_map.xml \
-	ARB_sync.xml \
-	ARB_vertex_array_object.xml \
-	APPLE_vertex_array_object.xml \
-	EXT_draw_buffers2.xml \
-	EXT_framebuffer_object.xml \
-	EXT_packed_depth_stencil.xml \
-	EXT_provoking_vertex.xml \
-	EXT_texture_array.xml \
-	NV_conditional_render.xml
-
-COMMON = gl_XML.py glX_XML.py license.py $(API_XML) typeexpr.py
-COMMON_GLX = $(COMMON) glX_API.xml glX_XML.py glX_proto_common.py
-
-all: check-xorg-source $(OUTPUTS) $(SERVER_OUTPUTS)
-
-check-xorg-source:
-	@if ! test -d $(GLX_DIR); then \
-		echo "ERROR: Must specify path to xserver checkout; set XORG_BASE."; \
-		exit 1; \
-	fi
-
-$(GLX_DIR)/%.c: %.c
-	cp $< $@
-
-$(GLX_DIR)/%.h: %.h
-	cp $< $@
-
-glprocs.h $(GLX_DIR)/glprocs.h: gl_procs.py $(COMMON)
-	$(PYTHON2) $(PYTHON_FLAGS) $< > $@
-
-glapitemp.h $(GLX_DIR)/glapitemp.h: gl_apitemp.py $(COMMON)
-	$(PYTHON2) $(PYTHON_FLAGS) $< > $@
-
-glapioffsets.h $(GLX_DIR)/glapioffsets.h: gl_offsets.py $(COMMON)
-	$(PYTHON2) $(PYTHON_FLAGS) $< > $@
-
-glapitable.h $(GLX_DIR)/glapitable.h: gl_table.py $(COMMON)
-	$(PYTHON2) $(PYTHON_FLAGS) $< > $@
-
-glapidispatch.h $(GLX_DIR)/glapidispatch.h: gl_table.py $(COMMON)
-	$(PYTHON2) $(PYTHON_FLAGS) $< -m remap_table > $@
-
-../main/enums.c: gl_enums.py $(COMMON)
-	$(PYTHON2) $(PYTHON_FLAGS) $< > $@
-
-../main/remap_helper.h: remap_helper.py $(COMMON)
-	$(PYTHON2) $(PYTHON_FLAGS) $< > $@
-
-../x86/glapi_x86.S: gl_x86_asm.py $(COMMON)
-	$(PYTHON2) $(PYTHON_FLAGS) $< > $@
-
-../x86-64/glapi_x86-64.S: gl_x86-64_asm.py $(COMMON)
-	$(PYTHON2) $(PYTHON_FLAGS) $< > $@
-
-../sparc/glapi_sparc.S: gl_SPARC_asm.py $(COMMON)
-	$(PYTHON2) $(PYTHON_FLAGS) $< > $@
-
-../../glx/indirect.c: glX_proto_send.py $(COMMON_GLX)
-	$(PYTHON2) $(PYTHON_FLAGS) $< -m proto | $(INDENT) $(INDENT_FLAGS) > $@
-
-../../glx/indirect.h: glX_proto_send.py $(COMMON_GLX)
-	$(PYTHON2) $(PYTHON_FLAGS) $< -m init_h > $@
-
-../../glx/indirect_init.c: glX_proto_send.py $(COMMON_GLX)
-	$(PYTHON2) $(PYTHON_FLAGS) $< -m init_c > $@
-
-../../glx/indirect_size.h $(GLX_DIR)/indirect_size.h: glX_proto_size.py $(COMMON_GLX)
-	$(PYTHON2) $(PYTHON_FLAGS) $< -m size_h --only-set -h _INDIRECT_SIZE_H_ \
-	  | $(INDENT) $(INDENT_FLAGS) > $@
-
-../../glx/indirect_size.c: glX_proto_size.py $(COMMON_GLX)
-	$(PYTHON2) $(PYTHON_FLAGS) $< -m size_c --only-set \
-	  | $(INDENT) $(INDENT_FLAGS) > $@
-
-$(GLX_DIR)/indirect_dispatch.c: glX_proto_recv.py $(COMMON_GLX)
-	$(PYTHON2) $(PYTHON_FLAGS) $< -m dispatch_c > $@
-
-$(GLX_DIR)/indirect_dispatch_swap.c: glX_proto_recv.py $(COMMON_GLX)
-	$(PYTHON2) $(PYTHON_FLAGS) $< -m dispatch_c -s > $@
-
-$(GLX_DIR)/indirect_dispatch.h: glX_proto_recv.py gl_and_glX_API.xml $(COMMON_GLX)
-	$(PYTHON2) $(PYTHON_FLAGS) $< -m dispatch_h -f gl_and_glX_API.xml -s > $@
-
-$(GLX_DIR)/indirect_size_get.h: glX_proto_size.py $(COMMON_GLX)
-	$(PYTHON2) $(PYTHON_FLAGS) $< -m size_h --only-get -h '_INDIRECT_SIZE_GET_H_' \
-	  | $(INDENT) $(INDENT_FLAGS) > $@
-
-$(GLX_DIR)/indirect_size_get.c: glX_proto_size.py $(COMMON_GLX)
-	$(PYTHON2) $(PYTHON_FLAGS) $< -m size_c | $(INDENT) $(INDENT_FLAGS) > $@
-
-$(GLX_DIR)/indirect_reqsize.h: glX_proto_size.py $(COMMON_GLX)
-	$(PYTHON2) $(PYTHON_FLAGS) $< -m reqsize_h --only-get -h '_INDIRECT_SIZE_GET_H_' \
-	  | $(INDENT) $(INDENT_FLAGS) -l200 > $@
-
-$(GLX_DIR)/indirect_reqsize.c: glX_proto_size.py $(COMMON_GLX)
-	$(PYTHON2) $(PYTHON_FLAGS) $< -m reqsize_c | $(INDENT) $(INDENT_FLAGS) > $@
-
-$(GLX_DIR)/indirect_table.c: glX_server_table.py gl_and_glX_API.xml $(COMMON_GLX)
-	$(PYTHON2) $(PYTHON_FLAGS) $< -f gl_and_glX_API.xml > $@
-
-clean:
-	-rm -f *~ *.pyo
-	-rm -f $(OUTPUTS)
diff --git a/src/mesa/glapi/NV_conditional_render.xml b/src/mesa/glapi/NV_conditional_render.xml
deleted file mode 100644
index 8bb31dd1fc..0000000000
--- a/src/mesa/glapi/NV_conditional_render.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
-
-<!-- Note: no GLX protocol info yet. -->
-
-
-<OpenGLAPI>
-
-<category name="GL_NV_condtitional_render" number="346">
-
-    <enum name="QUERY_WAIT_NV"               value="0x8E13"/>
-    <enum name="QUERY_NO_WAIT_NV"            value="0x8E14"/>
-    <enum name="QUERY_BY_REGION_WAIT_NV"     value="0x8E15"/>
-    <enum name="QUERY_BY_REGION_NO_WAIT_NV"  value="0x8E16"/>
-
-    <function name="BeginConditionalRenderNV" offset="assign">
-	<param name="query" type="GLuint"/>
-	<param name="mode" type="GLenum"/>
-    </function>
-
-    <function name="EndConditionalRenderNV" offset="assign">
-    </function>
-
-</category>
-
-</OpenGLAPI>
diff --git a/src/mesa/glapi/extension_helper.py b/src/mesa/glapi/extension_helper.py
deleted file mode 100644
index 83471d89f5..0000000000
--- a/src/mesa/glapi/extension_helper.py
+++ /dev/null
@@ -1,324 +0,0 @@
-#!/usr/bin/env python
-
-# (C) Copyright IBM Corporation 2005
-# All Rights Reserved.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# on the rights to use, copy, modify, merge, publish, distribute, sub
-# license, and/or sell copies of the Software, and to permit persons to whom
-# the Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
-# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-#
-# Authors:
-#    Ian Romanick <idr@us.ibm.com>
-
-import gl_XML
-import license
-import sys, getopt, string
-
-vtxfmt = [
-    "ArrayElement", \
-    "Color3f", \
-    "Color3fv", \
-    "Color4f", \
-    "Color4fv", \
-    "EdgeFlag", \
-    "EdgeFlagv", \
-    "EvalCoord1f", \
-    "EvalCoord1fv", \
-    "EvalCoord2f", \
-    "EvalCoord2fv", \
-    "EvalPoint1", \
-    "EvalPoint2", \
-    "FogCoordfEXT", \
-    "FogCoordfvEXT", \
-    "Indexf", \
-    "Indexfv", \
-    "Materialfv", \
-    "MultiTexCoord1fARB", \
-    "MultiTexCoord1fvARB", \
-    "MultiTexCoord2fARB", \
-    "MultiTexCoord2fvARB", \
-    "MultiTexCoord3fARB", \
-    "MultiTexCoord3fvARB", \
-    "MultiTexCoord4fARB", \
-    "MultiTexCoord4fvARB", \
-    "Normal3f", \
-    "Normal3fv", \
-    "SecondaryColor3fEXT", \
-    "SecondaryColor3fvEXT", \
-    "TexCoord1f", \
-    "TexCoord1fv", \
-    "TexCoord2f", \
-    "TexCoord2fv", \
-    "TexCoord3f", \
-    "TexCoord3fv", \
-    "TexCoord4f", \
-    "TexCoord4fv", \
-    "Vertex2f", \
-    "Vertex2fv", \
-    "Vertex3f", \
-    "Vertex3fv", \
-    "Vertex4f", \
-    "Vertex4fv", \
-    "CallList", \
-    "CallLists", \
-    "Begin", \
-    "End", \
-    "VertexAttrib1fNV", \
-    "VertexAttrib1fvNV", \
-    "VertexAttrib2fNV", \
-    "VertexAttrib2fvNV", \
-    "VertexAttrib3fNV", \
-    "VertexAttrib3fvNV", \
-    "VertexAttrib4fNV", \
-    "VertexAttrib4fvNV", \
-    "VertexAttrib1fARB", \
-    "VertexAttrib1fvARB", \
-    "VertexAttrib2fARB", \
-    "VertexAttrib2fvARB", \
-    "VertexAttrib3fARB", \
-    "VertexAttrib3fvARB", \
-    "VertexAttrib4fARB", \
-    "VertexAttrib4fvARB", \
-    "Rectf", \
-    "DrawArrays", \
-    "DrawElements", \
-    "DrawRangeElements", \
-    "EvalMesh1", \
-    "EvalMesh2", \
-]
-
-def all_entrypoints_in_abi(f, abi, api):
-	for n in f.entry_points:
-		[category, num] = api.get_category_for_name( n )
-		if category not in abi:
-			return 0
-
-	return 1
-
-
-def any_entrypoints_in_abi(f, abi, api):
-	for n in f.entry_points:
-		[category, num] = api.get_category_for_name( n )
-		if category in abi:
-			return 1
-
-	return 0
-
-
-def condition_for_function(f, abi, all_not_in_ABI):
-	"""Create a C-preprocessor condition for the function.
-	
-	There are two modes of operation.  If all_not_in_ABI is set, a
-	condition is only created is all of the entry-point names for f are
-	not in the selected ABI.  If all_not_in_ABI is not set, a condition
-	is created if any entryp-point name is not in the selected ABI.
-	"""
-
-	condition = []
-	for n in f.entry_points:
-		[category, num] = api.get_category_for_name( n )
-		if category not in abi:
-			condition.append( 'defined(need_%s)' % (gl_XML.real_category_name( category )) )
-		elif all_not_in_ABI:
-			return []
-
-	return condition
-
-
-class PrintGlExtensionGlue(gl_XML.gl_print_base):
-	def __init__(self):
-		gl_XML.gl_print_base.__init__(self)
-
-		self.name = "extension_helper.py (from Mesa)"
-		self.license = license.bsd_license_template % ("(C) Copyright IBM Corporation 2005", "IBM")
-		return
-
-
-	def printRealHeader(self):
-		print '#include "utils.h"'
-		print '#include "glapi/dispatch.h"'
-		print ''
-		return
-
-
-	def printBody(self, api):
-		abi = [ "1.0", "1.1", "1.2", "GL_ARB_multitexture" ]
-
-		category_list = {}
-
-		print '#ifndef NULL'
-		print '# define NULL 0'
-		print '#endif'
-		print ''
-
-		for f in api.functionIterateAll():
-			condition = condition_for_function(f, abi, 0)
-			if len(condition):
-				print '#if %s' % (string.join(condition, " || "))
-				print 'static const char %s_names[] =' % (f.name)
-
-				parameter_signature = ''
-				for p in f.parameterIterator():
-					if p.is_padding:
-						continue
-
-					# FIXME: This is a *really* ugly hack. :(
-
-					tn = p.type_expr.get_base_type_node()
-					if p.is_pointer():
-						parameter_signature += 'p'
-					elif tn.integer:
-						parameter_signature += 'i'
-					elif tn.size == 4:
-						parameter_signature += 'f'
-					else:
-						parameter_signature += 'd'
-
-				print '    "%s\\0" /* Parameter signature */' % (parameter_signature)
-
-				for n in f.entry_points:
-					print '    "gl%s\\0"' % (n)
-
-					[category, num] = api.get_category_for_name( n )
-					if category not in abi:
-						c = gl_XML.real_category_name(category)
-						if not category_list.has_key(c):
-							category_list[ c ] = []
-
-						category_list[ c ].append( f )
-
-				print '    "";'
-				print '#endif'
-				print ''
-
-		keys = category_list.keys()
-		keys.sort()
-
-		for category in keys:
-			print '#if defined(need_%s)' % (category)
-			print 'static const struct dri_extension_function %s_functions[] = {' % (category)
-			
-			for f in category_list[ category ]:
-				# A function either has an offset that is
-				# assigned by the ABI, or it has a remap
-				# index.
-				if any_entrypoints_in_abi(f, abi, api):
-					index_name = "-1"
-					offset = f.offset
-				else:
-					index_name = "%s_remap_index" % (f.name)
-					offset = -1
-
-				print '    { %s_names, %s, %d },' % (f.name, index_name, offset)
-
-
-			print '    { NULL, 0, 0 }'
-			print '};'
-			print '#endif'
-			print ''
-		
-		return
-
-
-class PrintInitDispatch(gl_XML.gl_print_base):
-	def __init__(self):
-		gl_XML.gl_print_base.__init__(self)
-
-		self.name = "extension_helper.py (from Mesa)"
-		self.license = license.bsd_license_template % ("(C) Copyright IBM Corporation 2005", "IBM")
-		return
-
-
-	def do_function_body(self, api, abi, vtxfmt_only):
-		last_condition_string = None
-		for f in api.functionIterateByOffset():
-			if (f.name in vtxfmt) and not vtxfmt_only:
-				continue
-
-			if (f.name not in vtxfmt) and vtxfmt_only:
-				continue
-
-			condition = condition_for_function(f, abi, 1)
-			condition_string = string.join(condition, " || ")
-
-			if condition_string != last_condition_string:
-				if last_condition_string:
-					print '#endif /* %s */' % (last_condition_string)
-
-				if condition_string:
-					print '#if %s' % (condition_string)
-				
-			if vtxfmt_only:
-				print '   disp->%s = vfmt->%s;' % (f.name, f.name)
-			else:
-				print '   disp->%s = _mesa_%s;' % (f.name, f.name)
-
-			last_condition_string = condition_string
-
-		if last_condition_string:
-			print '#endif /* %s */' % (last_condition_string)
-		
-
-
-	def printBody(self, api):
-		abi = [ "1.0", "1.1", "1.2", "GL_ARB_multitexture" ]
-		
-		print 'void driver_init_exec_table(struct _glapi_table *disp)'
-		print '{'
-		self.do_function_body(api, abi, 0)
-		print '}'
-		print ''
-		print 'void driver_install_vtxfmt(struct _glapi_table *disp, const GLvertexformat *vfmt)'
-		print '{'
-		self.do_function_body(api, abi, 1)
-		print '}'
-
-		return
-
-
-def show_usage():
-	print "Usage: %s [-f input_file_name] [-m output_mode]" % sys.argv[0]
-	print "    -m output_mode   Output mode can be one of 'extensions' or 'exec_init'."
-	sys.exit(1)
-
-if __name__ == '__main__':
-	file_name = "gl_API.xml"
-    
-	try:
-		(args, trail) = getopt.getopt(sys.argv[1:], "f:m:")
-	except Exception,e:
-		show_usage()
-
-	mode = "extensions"
-	for (arg,val) in args:
-		if arg == "-f":
-			file_name = val
-		if arg == '-m':
-			mode = val
-
-
-	api = gl_XML.parse_GL_API( file_name )
-
-	if mode == "extensions":
-		printer = PrintGlExtensionGlue()
-	elif mode == "exec_init":
-		printer = PrintInitDispatch()
-	else:
-		show_usage()
-
-	printer.Print( api )
diff --git a/src/mesa/glapi/gen/APPLE_vertex_array_object.xml b/src/mesa/glapi/gen/APPLE_vertex_array_object.xml
new file mode 100644
index 0000000000..bd8427eaf6
--- /dev/null
+++ b/src/mesa/glapi/gen/APPLE_vertex_array_object.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<OpenGLAPI>
+<category name="GL_APPLE_vertex_array_object" number="273">
+    <enum name="VERTEX_ARRAY_BINDING_APPLE"               value="0x85B5"/>
+
+    <function name="BindVertexArrayAPPLE" offset="assign" static_dispatch="false">
+        <param name="array" type="GLuint"/>
+    </function>
+
+    <function name="DeleteVertexArraysAPPLE" offset="assign" static_dispatch="false">
+        <param name="n" type="GLsizei"/>
+	<param name="arrays" type="const GLuint *" count="n"/>
+    </function>
+
+    <function name="GenVertexArraysAPPLE" offset="assign" static_dispatch="false">
+        <param name="n" type="GLsizei"/>
+	<param name="arrays" type="GLuint *" count="n" output="true"/>
+    </function>
+
+    <function name="IsVertexArrayAPPLE" offset="assign" static_dispatch="false">
+        <param name="array" type="GLuint"/>
+	<return type="GLboolean"/>
+    </function>
+</category>
+</OpenGLAPI>
diff --git a/src/mesa/glapi/gen/ARB_copy_buffer.xml b/src/mesa/glapi/gen/ARB_copy_buffer.xml
new file mode 100644
index 0000000000..719816d817
--- /dev/null
+++ b/src/mesa/glapi/gen/ARB_copy_buffer.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<!-- Note: no GLX protocol info yet. -->
+
+
+<OpenGLAPI>
+
+<category name="GL_ARB_copy_buffer" number="59">
+
+    <enum name="COPY_READ_BUFFER"   value="0x8F36"/>
+    <enum name="COPY_WRITE_BUFFER"  value="0x8F37"/>
+
+    <function name="CopyBufferSubData" offset="assign">
+        <param name="readTarget" type="GLenum"/>
+        <param name="writeTarget" type="GLenum"/>
+        <param name="readOffset" type="GLintptr"/>
+        <param name="writeOffset" type="GLintptr"/>
+        <param name="size" type="GLsizeiptr"/>
+    </function>
+
+</category>
+
+</OpenGLAPI>
diff --git a/src/mesa/glapi/gen/ARB_depth_clamp.xml b/src/mesa/glapi/gen/ARB_depth_clamp.xml
new file mode 100644
index 0000000000..157c9a86b1
--- /dev/null
+++ b/src/mesa/glapi/gen/ARB_depth_clamp.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<OpenGLAPI>
+
+<category name="GL_ARB_depth_clamp" number="61">
+    <enum name="DEPTH_CLAMP" count="1"  value="0x864F">
+        <size name="Get" mode="get"/>
+    </enum>
+</category>
+
+</OpenGLAPI>
diff --git a/src/mesa/glapi/gen/ARB_draw_elements_base_vertex.xml b/src/mesa/glapi/gen/ARB_draw_elements_base_vertex.xml
new file mode 100644
index 0000000000..f4067f4c8d
--- /dev/null
+++ b/src/mesa/glapi/gen/ARB_draw_elements_base_vertex.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<!-- Note: no GLX protocol info yet. -->
+
+
+<OpenGLAPI>
+
+<category name="GL_ARB_draw_elements_base_vertex" number="62">
+
+    <function name="DrawElementsBaseVertex" offset="assign">
+        <param name="mode" type="GLenum"/>
+        <param name="count" type="GLsizei"/>
+        <param name="type" type="GLenum"/>
+        <param name="indices" type="const GLvoid *"/>
+        <param name="basevertex" type="GLint"/>
+    </function>
+
+    <function name="DrawRangeElementsBaseVertex" offset="assign">
+        <param name="mode" type="GLenum"/>
+        <param name="start" type="GLuint"/>
+        <param name="end" type="GLuint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="type" type="GLenum"/>
+        <param name="indices" type="const GLvoid *"/>
+        <param name="basevertex" type="GLint"/>
+    </function>
+
+    <function name="MultiDrawElementsBaseVertex" offset="assign">
+        <param name="mode" type="GLenum"/>
+        <param name="count" type="const GLsizei *"/>
+        <param name="type" type="GLenum"/>
+        <param name="indices" type="const GLvoid **"/>
+        <param name="primcount" type="GLsizei"/>
+        <param name="basevertex" type="const GLint *"/>
+    </function>
+
+</category>
+
+</OpenGLAPI>
diff --git a/src/mesa/glapi/gen/ARB_framebuffer_object.xml b/src/mesa/glapi/gen/ARB_framebuffer_object.xml
new file mode 100644
index 0000000000..e6bdcd6e50
--- /dev/null
+++ b/src/mesa/glapi/gen/ARB_framebuffer_object.xml
@@ -0,0 +1,275 @@
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<!-- Note: no GLX protocol info yet. -->
+
+
+<OpenGLAPI>
+<category name="GL_ARB_framebuffer_object" number="45">
+    <enum name="FRAMEBUFFER"                              value="0x8D40"/>
+    <enum name="READ_FRAMEBUFFER"                         value="0x8CA8"/>
+    <enum name="DRAW_FRAMEBUFFER"                         value="0x8CA9"/>
+
+    <enum name="RENDERBUFFER"                             value="0x8D41"/>
+
+    <enum name="STENCIL_INDEX1"                           value="0x8D46"/>
+    <enum name="STENCIL_INDEX4"                           value="0x8D47"/>
+    <enum name="STENCIL_INDEX8"                           value="0x8D48"/>
+    <enum name="STENCIL_INDEX16"                          value="0x8D49"/>
+
+    <enum name="RENDERBUFFER_WIDTH"              value="0x8D42"/>
+    <enum name="RENDERBUFFER_HEIGHT"             value="0x8D43"/>
+    <enum name="RENDERBUFFER_INTERNAL_FORMAT"    value="0x8D44"/>
+    <enum name="RENDERBUFFER_RED_SIZE"           value="0x8D50"/>
+    <enum name="RENDERBUFFER_GREEN_SIZE"         value="0x8D51"/>
+    <enum name="RENDERBUFFER_BLUE_SIZE"          value="0x8D52"/>
+    <enum name="RENDERBUFFER_ALPHA_SIZE"         value="0x8D53"/>
+    <enum name="RENDERBUFFER_DEPTH_SIZE"         value="0x8D54"/>
+    <enum name="RENDERBUFFER_STENCIL_SIZE"       value="0x8D55"/>
+    <enum name="RENDERBUFFER_SAMPLES"            value="0x8CAB"/>
+
+    <enum name="FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE" count="1" value="0x8CD0">
+        <size name="GetFramebufferAttachmentParameteriv" mode="get"/>
+    </enum>
+    <enum name="FRAMEBUFFER_ATTACHMENT_OBJECT_NAME" count="1" value="0x8CD1">
+        <size name="GetFramebufferAttachmentParameteriv" mode="get"/>
+    </enum>
+    <enum name="FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL" count="1" value="0x8CD2">
+        <size name="GetFramebufferAttachmentParameteriv" mode="get"/>
+    </enum>
+    <enum name="FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE" count="1" value="0x8CD3">
+        <size name="GetFramebufferAttachmentParameteriv" mode="get"/>
+    </enum>
+    <enum name="FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER" count="1" value="0x8CD4">
+        <size name="GetFramebufferAttachmentParameteriv" mode="get"/>
+    </enum>
+    <enum name="FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING" count="1" value="0x8210">
+        <size name="GetFramebufferAttachmentParameteriv" mode="get"/>
+    </enum>
+    <enum name="FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE" count="1" value="0x8211">
+        <size name="GetFramebufferAttachmentParameteriv" mode="get"/>
+    </enum>
+    <enum name="FRAMEBUFFER_ATTACHMENT_RED_SIZE" count="1" value="0x8212">
+        <size name="GetFramebufferAttachmentParameteriv" mode="get"/>
+    </enum>
+    <enum name="FRAMEBUFFER_ATTACHMENT_GREEN_SIZE" count="1" value="0x8213">
+        <size name="GetFramebufferAttachmentParameteriv" mode="get"/>
+    </enum>
+    <enum name="FRAMEBUFFER_ATTACHMENT_BLUE_SIZE" count="1" value="0x8214">
+        <size name="GetFramebufferAttachmentParameteriv" mode="get"/>
+    </enum>
+    <enum name="FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE" count="1" value="0x8215">
+        <size name="GetFramebufferAttachmentParameteriv" mode="get"/>
+    </enum>
+    <enum name="FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE" count="1" value="0x8216">
+        <size name="GetFramebufferAttachmentParameteriv" mode="get"/>
+    </enum>
+    <enum name="FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE" count="1" value="0x8217">
+        <size name="GetFramebufferAttachmentParameteriv" mode="get"/>
+    </enum>
+
+    <enum name="SRGB"                                      value="0x8C40"/>
+    <enum name="UNSIGNED_NORMALIZED"                       value="0x8C17"/>
+    <enum name="FRAMEBUFFER_DEFAULT"                       value="0x8218"/>
+    <enum name="INDEX"                                     value="0x8222"/>
+
+    <enum name="COLOR_ATTACHMENT0"                         value="0x8CE0"/>
+    <enum name="COLOR_ATTACHMENT1"                         value="0x8CE1"/>
+    <enum name="COLOR_ATTACHMENT2"                         value="0x8CE2"/>
+    <enum name="COLOR_ATTACHMENT3"                         value="0x8CE3"/>
+    <enum name="COLOR_ATTACHMENT4"                         value="0x8CE4"/>
+    <enum name="COLOR_ATTACHMENT5"                         value="0x8CE5"/>
+    <enum name="COLOR_ATTACHMENT6"                         value="0x8CE6"/>
+    <enum name="COLOR_ATTACHMENT7"                         value="0x8CE7"/>
+    <enum name="COLOR_ATTACHMENT8"                         value="0x8CE8"/>
+    <enum name="COLOR_ATTACHMENT9"                         value="0x8CE9"/>
+    <enum name="COLOR_ATTACHMENT10"                        value="0x8CEA"/>
+    <enum name="COLOR_ATTACHMENT11"                        value="0x8CEB"/>
+    <enum name="COLOR_ATTACHMENT12"                        value="0x8CEC"/>
+    <enum name="COLOR_ATTACHMENT13"                        value="0x8CED"/>
+    <enum name="COLOR_ATTACHMENT14"                        value="0x8CEE"/>
+    <enum name="COLOR_ATTACHMENT15"                        value="0x8CEF"/>
+    <enum name="DEPTH_ATTACHMENT"                          value="0x8D00"/>
+    <enum name="STENCIL_ATTACHMENT"                        value="0x8D20"/>
+    <enum name="DEPTH_STENCIL_ATTACHMENT"                  value="0x821A"/>
+
+    <enum name="MAX_SAMPLES"                     count="1" value="0x8D57">
+        <size name="Get" mode="get"/>
+    </enum>
+
+    <enum name="FRAMEBUFFER_COMPLETE"                      value="0x8CD5"/>
+    <enum name="FRAMEBUFFER_INCOMPLETE_ATTACHMENT"         value="0x8CD6"/>
+    <enum name="FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT" value="0x8CD7"/>
+    <enum name="FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER"        value="0x8CDB"/>
+    <enum name="FRAMEBUFFER_INCOMPLETE_READ_BUFFER"        value="0x8CDC"/>
+    <enum name="FRAMEBUFFER_UNSUPPORTED"                   value="0x8CDD"/>
+    <enum name="FRAMEBUFFER_INCOMPLETE_MULTISAMPLE"        value="0x8D56"/>
+    <enum name="FRAMEBUFFER_UNDEFINED"                     value="0x8219"/>
+
+    <enum name="FRAMEBUFFER_BINDING"             count="1" value="0x8CA6">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_FRAMEBUFFER_BINDING"        count="1" value="0x8CA6">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="READ_FRAMEBUFFER_BINDING"        count="1" value="0x8CAA">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="RENDERBUFFER_BINDING"            count="1" value="0x8CA7">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAX_COLOR_ATTACHMENTS"           count="1" value="0x8CDF">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAX_RENDERBUFFER_SIZE"           count="1" value="0x84E8">
+        <size name="Get" mode="get"/>
+    </enum>
+
+    <enum name="INVALID_FRAMEBUFFER_OPERATION"            value="0x0506"/>
+
+    <enum name="DEPTH_STENCIL"                            value="0x84F9"/>
+
+    <enum name="UNSIGNED_INT_24_8"                        value="0x84FA"/>
+
+    <enum name="DEPTH24_STENCIL8"                         value="0x88F0"/>
+
+    <enum name="TEXTURE_STENCIL_SIZE"          count="1"  value="0x88F1">
+        <size name="GetTexLevelParameterfv" mode="get"/>
+        <size name="GetTexLevelParameteriv" mode="get"/>
+    </enum>
+
+
+
+    <function name="IsRenderbuffer" alias="IsRenderbufferEXT">
+        <param name="renderbuffer" type="GLuint"/>
+	<return type="GLboolean"/>
+    </function>
+
+    <function name="BindRenderbuffer" alias="BindRenderbufferEXT">
+        <param name="target" type="GLenum"/>
+        <param name="renderbuffer" type="GLuint"/>
+    </function>
+
+    <function name="DeleteRenderbuffers" alias="DeleteRenderbuffersEXT">
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="renderbuffers" type="const GLuint *" count="n"/>
+    </function>
+
+    <function name="GenRenderbuffers" alias="GenRenderbuffersEXT">
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="renderbuffers" type="GLuint *" count="n" output="true"/>
+    </function>
+
+    <function name="RenderbufferStorage" alias="RenderbufferStorageEXT">
+        <param name="target" type="GLenum"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+    </function>
+
+    <function name="RenderbufferStorageMultisample" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="samples" type="GLsizei"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <glx rop="4331"/>
+    </function>
+
+    <function name="GetRenderbufferParameteriv" alias="GetRenderbufferParameterivEXT">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true"/>
+    </function>
+
+    <function name="IsFramebuffer" alias="IsFramebufferEXT">
+        <param name="framebuffer" type="GLuint"/>
+	<return type="GLboolean"/>
+    </function>
+
+    <function name="BindFramebuffer" alias="BindFramebufferEXT">
+        <param name="target" type="GLenum"/>
+        <param name="framebuffer" type="GLuint"/>
+    </function>
+
+    <function name="DeleteFramebuffers" alias="DeleteFramebuffersEXT">
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="framebuffers" type="const GLuint *" count="n"/>
+    </function>
+
+    <function name="GenFramebuffers" alias="GenFramebuffersEXT">
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="framebuffers" type="GLuint *" count="n" output="true"/>
+    </function>
+
+    <function name="CheckFramebufferStatus" alias="CheckFramebufferStatusEXT">
+        <param name="target" type="GLenum"/>
+	<return type="GLenum"/>
+    </function>
+
+    <function name="FramebufferTexture1D" alias="FramebufferTexture1DEXT">
+        <param name="target" type="GLenum"/>
+        <param name="attachment" type="GLenum"/>
+        <param name="textarget" type="GLenum"/>
+        <param name="texture" type="GLuint"/>
+        <param name="level" type="GLint"/>
+    </function>
+
+    <function name="FramebufferTexture2D" alias="FramebufferTexture2DEXT">
+        <param name="target" type="GLenum"/>
+        <param name="attachment" type="GLenum"/>
+        <param name="textarget" type="GLenum"/>
+        <param name="texture" type="GLuint"/>
+        <param name="level" type="GLint"/>
+    </function>
+
+    <function name="FramebufferTexture3D" alias="FramebufferTexture3DEXT">
+        <param name="target" type="GLenum"/>
+        <param name="attachment" type="GLenum"/>
+        <param name="textarget" type="GLenum"/>
+        <param name="texture" type="GLuint"/>
+        <param name="level" type="GLint"/>
+        <param name="zoffset" type="GLint"/>
+    </function>
+
+    <function name="FramebufferTextureLayer" alias="FramebufferTextureLayerEXT">
+        <param name="target" type="GLenum"/>
+        <param name="attachment" type="GLenum"/>
+        <param name="texture" type="GLuint"/>
+        <param name="level" type="GLint"/>
+        <param name="layer" type="GLint"/>
+    </function>
+
+    <function name="FramebufferRenderbuffer" alias="FramebufferRenderbufferEXT">
+        <param name="target" type="GLenum"/>
+        <param name="attachment" type="GLenum"/>
+        <param name="renderbuffertarget" type="GLenum"/>
+        <param name="renderbuffer" type="GLuint"/>
+    </function>
+
+    <function name="GetFramebufferAttachmentParameteriv" alias="GetFramebufferAttachmentParameterivEXT">
+        <param name="target" type="GLenum"/>
+        <param name="attachment" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true"/>
+    </function>
+
+    <function name="BlitFramebuffer" alias="BlitFramebufferEXT">
+        <param name="srcX0" type="GLint"/>
+        <param name="srcY0" type="GLint"/>
+        <param name="srcX1" type="GLint"/>
+        <param name="srcY1" type="GLint"/>
+        <param name="dstX0" type="GLint"/>
+        <param name="dstY0" type="GLint"/>
+        <param name="dstX1" type="GLint"/>
+        <param name="dstY1" type="GLint"/>
+        <param name="mask" type="GLbitfield"/>
+        <param name="filter" type="GLenum"/>
+    </function>
+
+    <function name="GenerateMipmap" alias="GenerateMipmapEXT">
+        <param name="target" type="GLenum"/>
+    </function>
+</category>
+
+</OpenGLAPI>
diff --git a/src/mesa/glapi/gen/ARB_map_buffer_range.xml b/src/mesa/glapi/gen/ARB_map_buffer_range.xml
new file mode 100644
index 0000000000..afcb9b6ba6
--- /dev/null
+++ b/src/mesa/glapi/gen/ARB_map_buffer_range.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<!-- Note: no GLX protocol info yet. -->
+
+
+<OpenGLAPI>
+
+<category name="GL_ARB_map_buffer_range" number="50">
+
+    <enum name="MAP_READ_BIT"                value="0x0001"/>
+    <enum name="MAP_WRITE_BIT"               value="0x0002"/>
+    <enum name="MAP_INVALIDATE_RANGE_BIT"    value="0x0004"/>
+    <enum name="MAP_INVALIDATE_BUFFER_BIT"   value="0x0008"/>
+    <enum name="MAP_FLUSH_EXPLICIT_BIT"      value="0x0010"/>
+    <enum name="MAP_UNSYNCHRONIZED_BIT"      value="0x0020"/>
+
+    <function name="MapBufferRange" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="offset" type="GLintptr"/>
+        <param name="length" type="GLsizeiptr"/>
+        <param name="access" type="GLbitfield"/>
+        <return type="GLvoid *"/>
+    </function>
+
+    <function name="FlushMappedBufferRange" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="offset" type="GLintptr"/>
+        <param name="length" type="GLsizeiptr"/>
+    </function>
+
+</category>
+
+</OpenGLAPI>
diff --git a/src/mesa/glapi/gen/ARB_seamless_cube_map.xml b/src/mesa/glapi/gen/ARB_seamless_cube_map.xml
new file mode 100644
index 0000000000..3cdc84d2b9
--- /dev/null
+++ b/src/mesa/glapi/gen/ARB_seamless_cube_map.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<OpenGLAPI>
+
+<category name="GL_ARB_seamless_cubemap" number="65">
+    <enum name="TEXTURE_CUBE_MAP_SEAMLESS"     count="1"  value="0x88F4">
+        <size name="Get" mode="get"/>
+    </enum>
+</category>
+
+</OpenGLAPI>
diff --git a/src/mesa/glapi/gen/ARB_sync.xml b/src/mesa/glapi/gen/ARB_sync.xml
new file mode 100644
index 0000000000..4e4eebac32
--- /dev/null
+++ b/src/mesa/glapi/gen/ARB_sync.xml
@@ -0,0 +1,84 @@
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<OpenGLAPI>
+<category name="GL_ARB_sync" number="61">
+    <type name="int64"   size="8"                  glx_name="CARD64"/>
+    <type name="uint64"  size="8"  unsigned="true" glx_name="CARD64"/>
+    <type name="sync"    size="8"  unsigned="true" glx_name="CARD64"/>
+
+    <enum name="MAX_SERVER_WAIT_TIMEOUT"       count="1"  value="0x9111">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="OBJECT_TYPE"                   count="1"  value="0x9112">
+        <size name="GetSynciv" mode="get"/>
+    </enum>
+    <enum name="SYNC_CONDITION"                count="1"  value="0x9113">
+        <size name="GetSynciv" mode="get"/>
+    </enum>
+    <enum name="SYNC_STATUS"                   count="1"  value="0x9114">
+        <size name="GetSynciv" mode="get"/>
+    </enum>
+    <enum name="SYNC_FLAGS"                    count="1"  value="0x9115">
+        <size name="GetSynciv" mode="get"/>
+    </enum>
+
+    <enum name="SYNC_FENCE"                               value="0x9116"/>
+    <enum name="SYNC_GPU_COMMANDS_COMPLETE"               value="0x9117"/>
+    <enum name="UNSIGNALED"                               value="0x9118"/>
+    <enum name="SIGNALED"                                 value="0x9119"/>
+    <enum name="ALREADY_SIGNALED"                         value="0x911A"/>
+    <enum name="TIMEOUT_EXPIRED"                          value="0x911B"/>
+    <enum name="CONDITION_SATISFIED"                      value="0x911C"/>
+    <enum name="WAIT_FAILED"                              value="0x911D"/>
+
+    <enum name="SYNC_FLUSH_COMMANDS_BIT"                  value="0x00000001"/>
+
+    <!-- Not really an enum:
+    <enum name="TIMEOUT_IGNORED"                  value="0xFFFFFFFFFFFFFFFF"/>
+    -->
+
+
+    <function name="FenceSync" offset="assign">
+        <param name="condition" type="GLenum"/>
+        <param name="flags" type="GLbitfield"/>
+        <return type="GLsync"/>
+    </function>
+
+    <function name="IsSync" offset="assign">
+        <param name="sync" type="GLsync"/>
+	<return type="GLboolean"/>
+    </function>
+
+    <function name="DeleteSync" offset="assign">
+        <param name="sync" type="GLsync"/>
+    </function>
+
+    <function name="ClientWaitSync" offset="assign">
+        <param name="sync" type="GLsync"/>
+        <param name="flags" type="GLbitfield"/>
+	<param name="timeout" type="GLuint64"/>
+        <return type="GLenum"/>
+    </function>
+
+    <function name="WaitSync" offset="assign">
+        <param name="sync" type="GLsync"/>
+        <param name="flags" type="GLbitfield"/>
+	<param name="timeout" type="GLuint64"/>
+    </function>
+
+    <function name="GetInteger64v" offset="assign">
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint64 *" output="true" variable_param="pname"/>
+    </function>
+
+    <function name="GetSynciv" offset="assign">
+        <param name="sync" type="GLsync"/>
+        <param name="pname" type="GLenum"/>
+        <param name="bufSize" type="GLsizei"/>
+        <param name="length" type="GLsizei *" output="true"/>
+        <param name="values" type="GLint *" output="true" variable_param="pname"/>
+    </function>
+</category>
+
+</OpenGLAPI>
diff --git a/src/mesa/glapi/gen/ARB_vertex_array_object.xml b/src/mesa/glapi/gen/ARB_vertex_array_object.xml
new file mode 100644
index 0000000000..3b4ab64f55
--- /dev/null
+++ b/src/mesa/glapi/gen/ARB_vertex_array_object.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<!-- Note: no GLX protocol info yet. -->
+
+
+<OpenGLAPI>
+
+<category name="GL_ARB_vertex_array_object" number="54">
+
+    <enum name="VERTEX_ARRAY_BINDING" value="0x85B5"/>
+
+    <function name="BindVertexArray" offset="assign">
+        <param name="array" type="GLuint"/>
+    </function>
+
+    <function name="DeleteVertexArrays" alias="DeleteVertexArraysAPPLE">
+        <param name="n" type="GLsizei"/>
+        <param name="arrays" type="const GLuint *"/>
+    </function>
+
+    <function name="GenVertexArrays" offset="assign">
+        <param name="n" type="GLsizei"/>
+        <param name="arrays" type="GLuint *"/>
+    </function>
+
+    <function name="IsVertexArray" alias="IsVertexArrayAPPLE">
+        <param name="array" type="GLuint"/>
+        <return type="GLboolean"/>
+    </function>
+
+</category>
+
+</OpenGLAPI>
diff --git a/src/mesa/glapi/gen/EXT_draw_buffers2.xml b/src/mesa/glapi/gen/EXT_draw_buffers2.xml
new file mode 100644
index 0000000000..efbe61f74e
--- /dev/null
+++ b/src/mesa/glapi/gen/EXT_draw_buffers2.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<!-- Note: no GLX protocol info yet. -->
+
+
+<OpenGLAPI>
+
+<category name="GL_EXT_draw_buffers2" number="340">
+
+    <function name="ColorMaskIndexedEXT" offset="assign">
+	<param name="buf" type="GLuint"/>
+	<param name="r" type="GLboolean"/>
+	<param name="g" type="GLboolean"/>
+	<param name="b" type="GLboolean"/>
+	<param name="a" type="GLboolean"/>
+    </function>
+
+    <function name="GetBooleanIndexedvEXT" offset="assign">
+        <param name="value" type="GLenum"/>
+	<param name="index" type="GLuint"/>
+	<param name="data" type="GLboolean *"/>
+    </function>
+
+    <function name="GetIntegerIndexedvEXT" offset="assign">
+        <param name="value" type="GLenum"/>
+	<param name="index" type="GLuint"/>
+	<param name="data" type="GLint *"/>
+    </function>
+
+    <function name="EnableIndexedEXT" offset="assign">
+        <param name="target" type="GLenum"/>
+	<param name="index" type="GLuint"/>
+    </function>
+
+    <function name="DisableIndexedEXT" offset="assign">
+        <param name="target" type="GLenum"/>
+	<param name="index" type="GLuint"/>
+    </function>
+
+    <function name ="IsEnabledIndexedEXT" offset="assign">
+        <param name="target" type="GLenum"/>
+	<param name="index" type="GLuint"/>
+	<return type="GLboolean"/>
+    </function>
+
+</category>
+
+</OpenGLAPI>
diff --git a/src/mesa/glapi/gen/EXT_framebuffer_object.xml b/src/mesa/glapi/gen/EXT_framebuffer_object.xml
new file mode 100644
index 0000000000..4f418f7b64
--- /dev/null
+++ b/src/mesa/glapi/gen/EXT_framebuffer_object.xml
@@ -0,0 +1,235 @@
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<OpenGLAPI>
+<category name="GL_EXT_framebuffer_object" number="310">
+    <enum name="FRAMEBUFFER_EXT"                          value="0x8D40"/>
+    <enum name="RENDERBUFFER_EXT"                         value="0x8D41"/>
+    <enum name="RENDERBUFFER_WIDTH_EXT"                   value="0x8D42"/>
+    <enum name="RENDERBUFFER_HEIGHT_EXT"                  value="0x8D43"/>
+    <enum name="RENDERBUFFER_INTERNAL_FORMAT_EXT"         value="0x8D44"/>
+    <enum name="STENCIL_INDEX_EXT"                        value="0x8D45"/>
+    <enum name="STENCIL_INDEX1_EXT"                       value="0x8D46"/>
+    <enum name="STENCIL_INDEX4_EXT"                       value="0x8D47"/>
+    <enum name="STENCIL_INDEX8_EXT"                       value="0x8D48"/>
+    <enum name="STENCIL_INDEX16_EXT"                      value="0x8D49"/>
+
+    <enum name="FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT"   count="1" value="0x8CD0">
+        <size name="GetFramebufferAttachmentParameterivEXT" mode="get"/>
+    </enum>
+    <enum name="FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT"   count="1" value="0x8CD1">
+        <size name="GetFramebufferAttachmentParameterivEXT" mode="get"/>
+    </enum>
+    <enum name="FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT" count="1" value="0x8CD2">
+        <size name="GetFramebufferAttachmentParameterivEXT" mode="get"/>
+    </enum>
+    <enum name="FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT" count="1" value="0x8CD3">
+        <size name="GetFramebufferAttachmentParameterivEXT" mode="get"/>
+    </enum>
+    <enum name="FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT"    count="1" value="0x8CD4">
+        <size name="GetFramebufferAttachmentParameterivEXT" mode="get"/>
+    </enum>
+
+    <enum name="COLOR_ATTACHMENT0_EXT"                    value="0x8CE0"/>
+    <enum name="COLOR_ATTACHMENT1_EXT"                    value="0x8CE1"/>
+    <enum name="COLOR_ATTACHMENT2_EXT"                    value="0x8CE2"/>
+    <enum name="COLOR_ATTACHMENT3_EXT"                    value="0x8CE3"/>
+    <enum name="COLOR_ATTACHMENT4_EXT"                    value="0x8CE4"/>
+    <enum name="COLOR_ATTACHMENT5_EXT"                    value="0x8CE5"/>
+    <enum name="COLOR_ATTACHMENT6_EXT"                    value="0x8CE6"/>
+    <enum name="COLOR_ATTACHMENT7_EXT"                    value="0x8CE7"/>
+    <enum name="COLOR_ATTACHMENT8_EXT"                    value="0x8CE8"/>
+    <enum name="COLOR_ATTACHMENT9_EXT"                    value="0x8CE9"/>
+    <enum name="COLOR_ATTACHMENT10_EXT"                   value="0x8CEA"/>
+    <enum name="COLOR_ATTACHMENT11_EXT"                   value="0x8CEB"/>
+    <enum name="COLOR_ATTACHMENT12_EXT"                   value="0x8CEC"/>
+    <enum name="COLOR_ATTACHMENT13_EXT"                   value="0x8CED"/>
+    <enum name="COLOR_ATTACHMENT14_EXT"                   value="0x8CEE"/>
+    <enum name="COLOR_ATTACHMENT15_EXT"                   value="0x8CEF"/>
+    <enum name="DEPTH_ATTACHMENT_EXT"                     value="0x8D00"/>
+    <enum name="STENCIL_ATTACHMENT_EXT"                   value="0x8D20"/>
+
+    <enum name="FRAMEBUFFER_COMPLETE_EXT"                 value="0x8CD5"/>
+    <enum name="FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT"    value="0x8CD6"/>
+    <enum name="FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT"   value="0x8CD7"/>
+    <enum name="FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT" value="0x8CD8"/>
+    <enum name="FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT"    value="0x8CD9"/>
+    <enum name="FRAMEBUFFER_INCOMPLETE_FORMATS_EXT"       value="0x8CDA"/>
+    <enum name="FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT"   value="0x8CDB"/>
+    <enum name="FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT"   value="0x8CDC"/>
+    <enum name="FRAMEBUFFER_UNSUPPORTED_EXT"              value="0x8CDD"/>
+    <enum name="FRAMEBUFFER_STATUS_ERROR_EXT"             value="0x8CDE"/>
+    <enum name="FRAMEBUFFER_BINDING_EXT"        count="1" value="0x8CA6">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="RENDERBUFFER_BINDING_EXT"       count="1" value="0x8CA7">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAX_COLOR_ATTACHMENTS_EXT"      count="1" value="0x8CDF">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAX_RENDERBUFFER_SIZE_EXT"      count="1" value="0x84E8">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="INVALID_FRAMEBUFFER_OPERATION_EXT"        value="0x0506"/>
+
+    <function name="IsRenderbufferEXT" offset="assign">
+        <param name="renderbuffer" type="GLuint"/>
+	<return type="GLboolean"/>
+	<glx vendorpriv="1422"/>
+    </function>
+
+    <function name="BindRenderbufferEXT" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="renderbuffer" type="GLuint"/>
+	<glx rop="4316"/>
+    </function>
+
+    <function name="DeleteRenderbuffersEXT" offset="assign">
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="renderbuffers" type="const GLuint *" count="n"/>
+	<glx rop="4317"/>
+    </function>
+
+    <function name="GenRenderbuffersEXT" offset="assign">
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="renderbuffers" type="GLuint *" count="n" output="true"/>
+	<glx vendorpriv="1423" always_array="true"/>
+    </function>
+
+    <function name="RenderbufferStorageEXT" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+	<glx rop="4318"/>
+    </function>
+
+    <function name="GetRenderbufferParameterivEXT" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true"/>
+	<glx vendorpriv="1424"/>
+    </function>
+
+    <function name="IsFramebufferEXT" offset="assign">
+        <param name="framebuffer" type="GLuint"/>
+	<return type="GLboolean"/>
+	<glx vendorpriv="1425"/>
+    </function>
+
+    <function name="BindFramebufferEXT" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="framebuffer" type="GLuint"/>
+	<glx rop="4319"/>
+    </function>
+
+    <function name="DeleteFramebuffersEXT" offset="assign">
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="framebuffers" type="const GLuint *" count="n"/>
+	<glx rop="4320"/>
+    </function>
+
+    <function name="GenFramebuffersEXT" offset="assign">
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="framebuffers" type="GLuint *" count="n" output="true"/>
+	<glx vendorpriv="1426" always_array="true"/>
+    </function>
+
+    <function name="CheckFramebufferStatusEXT" offset="assign">
+        <param name="target" type="GLenum"/>
+	<return type="GLenum"/>
+	<glx vendorpriv="1427"/>
+    </function>
+
+    <function name="FramebufferTexture1DEXT" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="attachment" type="GLenum"/>
+        <param name="textarget" type="GLenum"/>
+        <param name="texture" type="GLuint"/>
+        <param name="level" type="GLint"/>
+	<glx rop="4321"/>
+    </function>
+
+    <function name="FramebufferTexture2DEXT" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="attachment" type="GLenum"/>
+        <param name="textarget" type="GLenum"/>
+        <param name="texture" type="GLuint"/>
+        <param name="level" type="GLint"/>
+	<glx rop="4322"/>
+    </function>
+
+    <function name="FramebufferTexture3DEXT" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="attachment" type="GLenum"/>
+        <param name="textarget" type="GLenum"/>
+        <param name="texture" type="GLuint"/>
+        <param name="level" type="GLint"/>
+        <param name="zoffset" type="GLint"/>
+	<glx rop="4323"/>
+    </function>
+
+    <function name="FramebufferRenderbufferEXT" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="attachment" type="GLenum"/>
+        <param name="renderbuffertarget" type="GLenum"/>
+        <param name="renderbuffer" type="GLuint"/>
+	<glx rop="4324"/>
+    </function>
+
+    <function name="GetFramebufferAttachmentParameterivEXT" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="attachment" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true"/>
+	<glx vendorpriv="1428"/>
+    </function>
+
+    <function name="GenerateMipmapEXT" offset="assign">
+        <param name="target" type="GLenum"/>
+	<glx rop="4325"/>
+    </function>
+</category>
+
+<category name="GL_EXT_framebuffer_blit" number="316">
+    <enum name="READ_FRAMEBUFFER_EXT" value="0x8CA8"/>
+    <enum name="DRAW_FRAMEBUFFER_EXT" value="0x8CA9"/>
+    <enum name="DRAW_FRAMEBUFFER_BINDING_EXT" count="1" value="0x8CA6">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="READ_FRAMEBUFFER_BINDING_EXT" count="1" value="0x8CAA">
+        <size name="Get" mode="get"/>
+    </enum>
+    <function name="BlitFramebufferEXT" offset="assign" static_dispatch="false">
+        <param name="srcX0" type="GLint"/>
+        <param name="srcY0" type="GLint"/>
+        <param name="srcX1" type="GLint"/>
+        <param name="srcY1" type="GLint"/>
+        <param name="dstX0" type="GLint"/>
+        <param name="dstY0" type="GLint"/>
+        <param name="dstX1" type="GLint"/>
+        <param name="dstY1" type="GLint"/>
+        <param name="mask" type="GLbitfield"/>
+        <param name="filter" type="GLenum"/>
+        <glx rop="4330"/>
+    </function>
+</category>
+
+<category name="GL_EXT_framebuffer_multisample" number="317">
+    <enum name="RENDERBUFFER_SAMPLES_EXT"                  value="0x8CAB"/>
+    <enum name="FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT"    value="0x8D56"/>
+    <enum name="MAX_SAMPLES_EXT"                 count="1" value="0x8D57">
+        <size name="Get" mode="get"/>
+    </enum>
+
+    <function name="RenderbufferStorageMultisampleEXT" alias="RenderbufferStorageMultisample">
+        <param name="target" type="GLenum"/>
+        <param name="samples" type="GLsizei"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+    </function>
+</category>
+
+</OpenGLAPI>
diff --git a/src/mesa/glapi/gen/EXT_packed_depth_stencil.xml b/src/mesa/glapi/gen/EXT_packed_depth_stencil.xml
new file mode 100644
index 0000000000..5be810302f
--- /dev/null
+++ b/src/mesa/glapi/gen/EXT_packed_depth_stencil.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<OpenGLAPI>
+<category name="GL_EXT_packed_depth_stencil" number="312">
+    <!-- These enums are shared with GL_NV_packed_depth_stencil. -->
+    <enum name="DEPTH_STENCIL_EXT"                        value="0x84F9"/>
+    <enum name="UNSIGNED_INT_24_8_EXT"                    value="0x84FA"/>
+
+    <enum name="DEPTH24_STENCIL8_EXT"                     value="0x88F0"/>
+
+    <enum name="TEXTURE_STENCIL_SIZE_EXT"      count="1"  value="0x88F1">
+        <size name="GetTexLevelParameterfv" mode="get"/>
+        <size name="GetTexLevelParameteriv" mode="get"/>
+    </enum>
+</category>
+
+</OpenGLAPI>
diff --git a/src/mesa/glapi/gen/EXT_provoking_vertex.xml b/src/mesa/glapi/gen/EXT_provoking_vertex.xml
new file mode 100644
index 0000000000..71d2c72909
--- /dev/null
+++ b/src/mesa/glapi/gen/EXT_provoking_vertex.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<!-- Note: no GLX protocol info yet. -->
+
+
+<OpenGLAPI>
+
+<category name="GL_EXT_provoking_vertex" number="364">
+
+    <enum name="FIRST_VERTEX_CONVENTION_EXT"                  value="0x8E4D"/>
+    <enum name="LAST_VERTEX_CONVENTION_EXT"                   value="0x8E4E"/>
+    <enum name="PROVOKING_VERTEX_EXT"                         value="0x8E4F"/>
+    <enum name="QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT" value="0x8E4C"/>
+
+    <function name="ProvokingVertexEXT" offset="assign">
+        <param name="mode" type="GLenum"/>
+    </function>
+
+</category>
+
+<category name="GL_ARB_provoking_vertex" number="64">
+
+    <enum name="FIRST_VERTEX_CONVENTION"                  value="0x8E4D"/>
+    <enum name="LAST_VERTEX_CONVENTION"                   value="0x8E4E"/>
+    <enum name="PROVOKING_VERTEX"                         value="0x8E4F"/>
+    <enum name="QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION" value="0x8E4C"/>
+
+    <function name="ProvokingVertex" alias="ProvokingVertexEXT">
+        <param name="mode" type="GLenum"/>
+    </function>
+
+</category>
+
+</OpenGLAPI>
diff --git a/src/mesa/glapi/gen/EXT_texture_array.xml b/src/mesa/glapi/gen/EXT_texture_array.xml
new file mode 100644
index 0000000000..b5b8bd406f
--- /dev/null
+++ b/src/mesa/glapi/gen/EXT_texture_array.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<OpenGLAPI>
+
+<category name="GL_EXT_texture_array" number="329">
+    <enum name="TEXTURE_1D_ARRAY_EXT"                      value="0x8C18"/>
+    <enum name="PROXY_TEXTURE_1D_ARRAY_EXT"                value="0x8C19"/>
+    <enum name="TEXTURE_2D_ARRAY_EXT"                      value="0x8C1A"/>
+    <enum name="PROXY_TEXTURE_2D_ARRAY_EXT"                value="0x8C1B"/>
+
+    <enum name="TEXTURE_BINDING_1D_ARRAY_EXT"   count="1"  value="0x8C1C">
+        <size name="Get" mode="get"/>
+    </enum>
+
+    <enum name="TEXTURE_BINDING_2D_ARRAY_EXT"   count="1"  value="0x8C1D">
+        <size name="Get" mode="get"/>
+    </enum>
+
+    <enum name="MAX_ARRAY_TEXTURE_LAYERS_EXT"   count="1"  value="0x88FF">
+        <size name="Get" mode="get"/>
+    </enum>
+
+    <enum name="COMPARE_REF_DEPTH_TO_TEXTURE_EXT" count="1" value="0x884E">
+        <size name="Get" mode="get"/>
+    </enum>
+
+    <enum name="FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT"   count="1" value="0x8CD4">
+        <size name="GetFramebufferAttachmentParameterivEXT" mode="get"/>
+    </enum>
+
+    <function name="FramebufferTextureLayerEXT" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="attachment" type="GLenum"/>
+        <param name="texture" type="GLuint"/>
+        <param name="level" type="GLint"/>
+        <param name="layer" type="GLint"/>
+	<glx rop="237"/>
+    </function>
+</category>
+
+</OpenGLAPI>
diff --git a/src/mesa/glapi/gen/Makefile b/src/mesa/glapi/gen/Makefile
new file mode 100644
index 0000000000..da679607d7
--- /dev/null
+++ b/src/mesa/glapi/gen/Makefile
@@ -0,0 +1,158 @@
+# This file isn't used during a normal compilation since we don't want to
+# require Python in order to compile Mesa.
+# Instead, when the Mesa developers update/change the API interface it's
+# up to him/her to re-run this makefile and check in the newly generated files.
+
+
+TOP = ../../..
+include $(TOP)/configs/current
+
+OUTPUTS = glprocs.h glapitemp.h glapioffsets.h glapitable.h glapidispatch.h \
+	../main/enums.c \
+	../main/remap_helper.h \
+	../x86/glapi_x86.S \
+	../x86-64/glapi_x86-64.S \
+	../sparc/glapi_sparc.S \
+	../../glx/indirect.c \
+	../../glx/indirect.h \
+	../../glx/indirect_init.c \
+	../../glx/indirect_size.h \
+	../../glx/indirect_size.c
+
+
+GLX_DIR = $(XORG_BASE)/glx
+
+SERVER_GLAPI_FILES = \
+	$(GLX_DIR)/glapi.h \
+	$(GLX_DIR)/glapi.c \
+	$(GLX_DIR)/glapi_nop.c \
+	$(GLX_DIR)/glthread.c \
+	$(GLX_DIR)/glthread.h
+
+SERVER_OUTPUTS = \
+	$(GLX_DIR)/indirect_dispatch.c \
+	$(GLX_DIR)/indirect_dispatch_swap.c \
+	$(GLX_DIR)/indirect_dispatch.h \
+	$(GLX_DIR)/indirect_reqsize.c \
+	$(GLX_DIR)/indirect_reqsize.h \
+	$(GLX_DIR)/indirect_size.h \
+	$(GLX_DIR)/indirect_size_get.c \
+	$(GLX_DIR)/indirect_size_get.h \
+	$(GLX_DIR)/indirect_table.c \
+	$(GLX_DIR)/glapitemp.h \
+	$(GLX_DIR)/glapitable.h \
+	$(GLX_DIR)/glapioffsets.h \
+	$(GLX_DIR)/glapidispatch.h \
+	$(GLX_DIR)/glprocs.h \
+	$(SERVER_GLAPI_FILES)
+
+API_XML = gl_API.xml \
+	ARB_copy_buffer.xml \
+	ARB_depth_clamp.xml \
+	ARB_draw_elements_base_vertex.xml \
+	ARB_framebuffer_object.xml \
+	ARB_map_buffer_range.xml \
+	ARB_seamless_cube_map.xml \
+	ARB_sync.xml \
+	ARB_vertex_array_object.xml \
+	APPLE_vertex_array_object.xml \
+	EXT_draw_buffers2.xml \
+	EXT_framebuffer_object.xml \
+	EXT_packed_depth_stencil.xml \
+	EXT_provoking_vertex.xml \
+	EXT_texture_array.xml \
+	NV_conditional_render.xml
+
+COMMON = gl_XML.py glX_XML.py license.py $(API_XML) typeexpr.py
+COMMON_GLX = $(COMMON) glX_API.xml glX_XML.py glX_proto_common.py
+
+all: check-xorg-source $(OUTPUTS) $(SERVER_OUTPUTS)
+
+check-xorg-source:
+	@if ! test -d $(GLX_DIR); then \
+		echo "ERROR: Must specify path to xserver checkout; set XORG_BASE."; \
+		exit 1; \
+	fi
+
+$(GLX_DIR)/%.c: %.c
+	cp $< $@
+
+$(GLX_DIR)/%.h: %.h
+	cp $< $@
+
+glprocs.h $(GLX_DIR)/glprocs.h: gl_procs.py $(COMMON)
+	$(PYTHON2) $(PYTHON_FLAGS) $< > $@
+
+glapitemp.h $(GLX_DIR)/glapitemp.h: gl_apitemp.py $(COMMON)
+	$(PYTHON2) $(PYTHON_FLAGS) $< > $@
+
+glapioffsets.h $(GLX_DIR)/glapioffsets.h: gl_offsets.py $(COMMON)
+	$(PYTHON2) $(PYTHON_FLAGS) $< > $@
+
+glapitable.h $(GLX_DIR)/glapitable.h: gl_table.py $(COMMON)
+	$(PYTHON2) $(PYTHON_FLAGS) $< > $@
+
+glapidispatch.h $(GLX_DIR)/glapidispatch.h: gl_table.py $(COMMON)
+	$(PYTHON2) $(PYTHON_FLAGS) $< -m remap_table > $@
+
+../main/enums.c: gl_enums.py $(COMMON)
+	$(PYTHON2) $(PYTHON_FLAGS) $< > $@
+
+../main/remap_helper.h: remap_helper.py $(COMMON)
+	$(PYTHON2) $(PYTHON_FLAGS) $< > $@
+
+../x86/glapi_x86.S: gl_x86_asm.py $(COMMON)
+	$(PYTHON2) $(PYTHON_FLAGS) $< > $@
+
+../x86-64/glapi_x86-64.S: gl_x86-64_asm.py $(COMMON)
+	$(PYTHON2) $(PYTHON_FLAGS) $< > $@
+
+../sparc/glapi_sparc.S: gl_SPARC_asm.py $(COMMON)
+	$(PYTHON2) $(PYTHON_FLAGS) $< > $@
+
+../../glx/indirect.c: glX_proto_send.py $(COMMON_GLX)
+	$(PYTHON2) $(PYTHON_FLAGS) $< -m proto | $(INDENT) $(INDENT_FLAGS) > $@
+
+../../glx/indirect.h: glX_proto_send.py $(COMMON_GLX)
+	$(PYTHON2) $(PYTHON_FLAGS) $< -m init_h > $@
+
+../../glx/indirect_init.c: glX_proto_send.py $(COMMON_GLX)
+	$(PYTHON2) $(PYTHON_FLAGS) $< -m init_c > $@
+
+../../glx/indirect_size.h $(GLX_DIR)/indirect_size.h: glX_proto_size.py $(COMMON_GLX)
+	$(PYTHON2) $(PYTHON_FLAGS) $< -m size_h --only-set -h _INDIRECT_SIZE_H_ \
+	  | $(INDENT) $(INDENT_FLAGS) > $@
+
+../../glx/indirect_size.c: glX_proto_size.py $(COMMON_GLX)
+	$(PYTHON2) $(PYTHON_FLAGS) $< -m size_c --only-set \
+	  | $(INDENT) $(INDENT_FLAGS) > $@
+
+$(GLX_DIR)/indirect_dispatch.c: glX_proto_recv.py $(COMMON_GLX)
+	$(PYTHON2) $(PYTHON_FLAGS) $< -m dispatch_c > $@
+
+$(GLX_DIR)/indirect_dispatch_swap.c: glX_proto_recv.py $(COMMON_GLX)
+	$(PYTHON2) $(PYTHON_FLAGS) $< -m dispatch_c -s > $@
+
+$(GLX_DIR)/indirect_dispatch.h: glX_proto_recv.py gl_and_glX_API.xml $(COMMON_GLX)
+	$(PYTHON2) $(PYTHON_FLAGS) $< -m dispatch_h -f gl_and_glX_API.xml -s > $@
+
+$(GLX_DIR)/indirect_size_get.h: glX_proto_size.py $(COMMON_GLX)
+	$(PYTHON2) $(PYTHON_FLAGS) $< -m size_h --only-get -h '_INDIRECT_SIZE_GET_H_' \
+	  | $(INDENT) $(INDENT_FLAGS) > $@
+
+$(GLX_DIR)/indirect_size_get.c: glX_proto_size.py $(COMMON_GLX)
+	$(PYTHON2) $(PYTHON_FLAGS) $< -m size_c | $(INDENT) $(INDENT_FLAGS) > $@
+
+$(GLX_DIR)/indirect_reqsize.h: glX_proto_size.py $(COMMON_GLX)
+	$(PYTHON2) $(PYTHON_FLAGS) $< -m reqsize_h --only-get -h '_INDIRECT_SIZE_GET_H_' \
+	  | $(INDENT) $(INDENT_FLAGS) -l200 > $@
+
+$(GLX_DIR)/indirect_reqsize.c: glX_proto_size.py $(COMMON_GLX)
+	$(PYTHON2) $(PYTHON_FLAGS) $< -m reqsize_c | $(INDENT) $(INDENT_FLAGS) > $@
+
+$(GLX_DIR)/indirect_table.c: glX_server_table.py gl_and_glX_API.xml $(COMMON_GLX)
+	$(PYTHON2) $(PYTHON_FLAGS) $< -f gl_and_glX_API.xml > $@
+
+clean:
+	-rm -f *~ *.pyo
+	-rm -f $(OUTPUTS)
diff --git a/src/mesa/glapi/gen/NV_conditional_render.xml b/src/mesa/glapi/gen/NV_conditional_render.xml
new file mode 100644
index 0000000000..8bb31dd1fc
--- /dev/null
+++ b/src/mesa/glapi/gen/NV_conditional_render.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<!-- Note: no GLX protocol info yet. -->
+
+
+<OpenGLAPI>
+
+<category name="GL_NV_condtitional_render" number="346">
+
+    <enum name="QUERY_WAIT_NV"               value="0x8E13"/>
+    <enum name="QUERY_NO_WAIT_NV"            value="0x8E14"/>
+    <enum name="QUERY_BY_REGION_WAIT_NV"     value="0x8E15"/>
+    <enum name="QUERY_BY_REGION_NO_WAIT_NV"  value="0x8E16"/>
+
+    <function name="BeginConditionalRenderNV" offset="assign">
+	<param name="query" type="GLuint"/>
+	<param name="mode" type="GLenum"/>
+    </function>
+
+    <function name="EndConditionalRenderNV" offset="assign">
+    </function>
+
+</category>
+
+</OpenGLAPI>
diff --git a/src/mesa/glapi/gen/extension_helper.py b/src/mesa/glapi/gen/extension_helper.py
new file mode 100644
index 0000000000..83471d89f5
--- /dev/null
+++ b/src/mesa/glapi/gen/extension_helper.py
@@ -0,0 +1,324 @@
+#!/usr/bin/env python
+
+# (C) Copyright IBM Corporation 2005
+# All Rights Reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# on the rights to use, copy, modify, merge, publish, distribute, sub
+# license, and/or sell copies of the Software, and to permit persons to whom
+# the Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
+# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+#
+# Authors:
+#    Ian Romanick <idr@us.ibm.com>
+
+import gl_XML
+import license
+import sys, getopt, string
+
+vtxfmt = [
+    "ArrayElement", \
+    "Color3f", \
+    "Color3fv", \
+    "Color4f", \
+    "Color4fv", \
+    "EdgeFlag", \
+    "EdgeFlagv", \
+    "EvalCoord1f", \
+    "EvalCoord1fv", \
+    "EvalCoord2f", \
+    "EvalCoord2fv", \
+    "EvalPoint1", \
+    "EvalPoint2", \
+    "FogCoordfEXT", \
+    "FogCoordfvEXT", \
+    "Indexf", \
+    "Indexfv", \
+    "Materialfv", \
+    "MultiTexCoord1fARB", \
+    "MultiTexCoord1fvARB", \
+    "MultiTexCoord2fARB", \
+    "MultiTexCoord2fvARB", \
+    "MultiTexCoord3fARB", \
+    "MultiTexCoord3fvARB", \
+    "MultiTexCoord4fARB", \
+    "MultiTexCoord4fvARB", \
+    "Normal3f", \
+    "Normal3fv", \
+    "SecondaryColor3fEXT", \
+    "SecondaryColor3fvEXT", \
+    "TexCoord1f", \
+    "TexCoord1fv", \
+    "TexCoord2f", \
+    "TexCoord2fv", \
+    "TexCoord3f", \
+    "TexCoord3fv", \
+    "TexCoord4f", \
+    "TexCoord4fv", \
+    "Vertex2f", \
+    "Vertex2fv", \
+    "Vertex3f", \
+    "Vertex3fv", \
+    "Vertex4f", \
+    "Vertex4fv", \
+    "CallList", \
+    "CallLists", \
+    "Begin", \
+    "End", \
+    "VertexAttrib1fNV", \
+    "VertexAttrib1fvNV", \
+    "VertexAttrib2fNV", \
+    "VertexAttrib2fvNV", \
+    "VertexAttrib3fNV", \
+    "VertexAttrib3fvNV", \
+    "VertexAttrib4fNV", \
+    "VertexAttrib4fvNV", \
+    "VertexAttrib1fARB", \
+    "VertexAttrib1fvARB", \
+    "VertexAttrib2fARB", \
+    "VertexAttrib2fvARB", \
+    "VertexAttrib3fARB", \
+    "VertexAttrib3fvARB", \
+    "VertexAttrib4fARB", \
+    "VertexAttrib4fvARB", \
+    "Rectf", \
+    "DrawArrays", \
+    "DrawElements", \
+    "DrawRangeElements", \
+    "EvalMesh1", \
+    "EvalMesh2", \
+]
+
+def all_entrypoints_in_abi(f, abi, api):
+	for n in f.entry_points:
+		[category, num] = api.get_category_for_name( n )
+		if category not in abi:
+			return 0
+
+	return 1
+
+
+def any_entrypoints_in_abi(f, abi, api):
+	for n in f.entry_points:
+		[category, num] = api.get_category_for_name( n )
+		if category in abi:
+			return 1
+
+	return 0
+
+
+def condition_for_function(f, abi, all_not_in_ABI):
+	"""Create a C-preprocessor condition for the function.
+	
+	There are two modes of operation.  If all_not_in_ABI is set, a
+	condition is only created is all of the entry-point names for f are
+	not in the selected ABI.  If all_not_in_ABI is not set, a condition
+	is created if any entryp-point name is not in the selected ABI.
+	"""
+
+	condition = []
+	for n in f.entry_points:
+		[category, num] = api.get_category_for_name( n )
+		if category not in abi:
+			condition.append( 'defined(need_%s)' % (gl_XML.real_category_name( category )) )
+		elif all_not_in_ABI:
+			return []
+
+	return condition
+
+
+class PrintGlExtensionGlue(gl_XML.gl_print_base):
+	def __init__(self):
+		gl_XML.gl_print_base.__init__(self)
+
+		self.name = "extension_helper.py (from Mesa)"
+		self.license = license.bsd_license_template % ("(C) Copyright IBM Corporation 2005", "IBM")
+		return
+
+
+	def printRealHeader(self):
+		print '#include "utils.h"'
+		print '#include "glapi/dispatch.h"'
+		print ''
+		return
+
+
+	def printBody(self, api):
+		abi = [ "1.0", "1.1", "1.2", "GL_ARB_multitexture" ]
+
+		category_list = {}
+
+		print '#ifndef NULL'
+		print '# define NULL 0'
+		print '#endif'
+		print ''
+
+		for f in api.functionIterateAll():
+			condition = condition_for_function(f, abi, 0)
+			if len(condition):
+				print '#if %s' % (string.join(condition, " || "))
+				print 'static const char %s_names[] =' % (f.name)
+
+				parameter_signature = ''
+				for p in f.parameterIterator():
+					if p.is_padding:
+						continue
+
+					# FIXME: This is a *really* ugly hack. :(
+
+					tn = p.type_expr.get_base_type_node()
+					if p.is_pointer():
+						parameter_signature += 'p'
+					elif tn.integer:
+						parameter_signature += 'i'
+					elif tn.size == 4:
+						parameter_signature += 'f'
+					else:
+						parameter_signature += 'd'
+
+				print '    "%s\\0" /* Parameter signature */' % (parameter_signature)
+
+				for n in f.entry_points:
+					print '    "gl%s\\0"' % (n)
+
+					[category, num] = api.get_category_for_name( n )
+					if category not in abi:
+						c = gl_XML.real_category_name(category)
+						if not category_list.has_key(c):
+							category_list[ c ] = []
+
+						category_list[ c ].append( f )
+
+				print '    "";'
+				print '#endif'
+				print ''
+
+		keys = category_list.keys()
+		keys.sort()
+
+		for category in keys:
+			print '#if defined(need_%s)' % (category)
+			print 'static const struct dri_extension_function %s_functions[] = {' % (category)
+			
+			for f in category_list[ category ]:
+				# A function either has an offset that is
+				# assigned by the ABI, or it has a remap
+				# index.
+				if any_entrypoints_in_abi(f, abi, api):
+					index_name = "-1"
+					offset = f.offset
+				else:
+					index_name = "%s_remap_index" % (f.name)
+					offset = -1
+
+				print '    { %s_names, %s, %d },' % (f.name, index_name, offset)
+
+
+			print '    { NULL, 0, 0 }'
+			print '};'
+			print '#endif'
+			print ''
+		
+		return
+
+
+class PrintInitDispatch(gl_XML.gl_print_base):
+	def __init__(self):
+		gl_XML.gl_print_base.__init__(self)
+
+		self.name = "extension_helper.py (from Mesa)"
+		self.license = license.bsd_license_template % ("(C) Copyright IBM Corporation 2005", "IBM")
+		return
+
+
+	def do_function_body(self, api, abi, vtxfmt_only):
+		last_condition_string = None
+		for f in api.functionIterateByOffset():
+			if (f.name in vtxfmt) and not vtxfmt_only:
+				continue
+
+			if (f.name not in vtxfmt) and vtxfmt_only:
+				continue
+
+			condition = condition_for_function(f, abi, 1)
+			condition_string = string.join(condition, " || ")
+
+			if condition_string != last_condition_string:
+				if last_condition_string:
+					print '#endif /* %s */' % (last_condition_string)
+
+				if condition_string:
+					print '#if %s' % (condition_string)
+				
+			if vtxfmt_only:
+				print '   disp->%s = vfmt->%s;' % (f.name, f.name)
+			else:
+				print '   disp->%s = _mesa_%s;' % (f.name, f.name)
+
+			last_condition_string = condition_string
+
+		if last_condition_string:
+			print '#endif /* %s */' % (last_condition_string)
+		
+
+
+	def printBody(self, api):
+		abi = [ "1.0", "1.1", "1.2", "GL_ARB_multitexture" ]
+		
+		print 'void driver_init_exec_table(struct _glapi_table *disp)'
+		print '{'
+		self.do_function_body(api, abi, 0)
+		print '}'
+		print ''
+		print 'void driver_install_vtxfmt(struct _glapi_table *disp, const GLvertexformat *vfmt)'
+		print '{'
+		self.do_function_body(api, abi, 1)
+		print '}'
+
+		return
+
+
+def show_usage():
+	print "Usage: %s [-f input_file_name] [-m output_mode]" % sys.argv[0]
+	print "    -m output_mode   Output mode can be one of 'extensions' or 'exec_init'."
+	sys.exit(1)
+
+if __name__ == '__main__':
+	file_name = "gl_API.xml"
+    
+	try:
+		(args, trail) = getopt.getopt(sys.argv[1:], "f:m:")
+	except Exception,e:
+		show_usage()
+
+	mode = "extensions"
+	for (arg,val) in args:
+		if arg == "-f":
+			file_name = val
+		if arg == '-m':
+			mode = val
+
+
+	api = gl_XML.parse_GL_API( file_name )
+
+	if mode == "extensions":
+		printer = PrintGlExtensionGlue()
+	elif mode == "exec_init":
+		printer = PrintInitDispatch()
+	else:
+		show_usage()
+
+	printer.Print( api )
diff --git a/src/mesa/glapi/gen/glX_API.xml b/src/mesa/glapi/gen/glX_API.xml
new file mode 100644
index 0000000000..9e02aa498e
--- /dev/null
+++ b/src/mesa/glapi/gen/glX_API.xml
@@ -0,0 +1,220 @@
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<OpenGLAPI>
+
+<!-- Right now this file is just used to generate the GLX protocol
+     decode tables on the server.  The only information that is needed
+     for that purpose is the name of the function (or pseudo-function
+     in the case of Render of VendorPrivate) and its opcode.  Once
+     this file is used for other purposes, additional information will
+     need to be added.
+  -->
+
+<category name="1.0" window_system="glX">
+    <function name="Render">
+        <glx sop="1"/>
+    </function>
+
+    <function name="RenderLarge">
+        <glx sop="2"/>
+    </function>
+
+    <function name="CreateContext">
+        <glx sop="3"/>
+    </function>
+
+    <function name="DestroyContext">
+        <glx sop="4"/>
+    </function>
+
+    <function name="MakeCurrent">
+        <glx sop="5"/>
+    </function>
+
+    <function name="IsDirect">
+        <glx sop="6"/>
+    </function>
+
+    <function name="QueryVersion">
+        <glx sop="7"/>
+    </function>
+
+    <function name="WaitGL">
+        <glx sop="8"/>
+    </function>
+
+    <function name="WaitX">
+        <glx sop="9"/>
+    </function>
+
+    <function name="CopyContext">
+        <glx sop="10"/>
+    </function>
+
+    <function name="SwapBuffers">
+        <glx sop="11"/>
+    </function>
+
+    <function name="UseXFont">
+        <glx sop="12"/>
+    </function>
+
+    <function name="CreateGLXPixmap">
+        <glx sop="13"/>
+    </function>
+
+    <function name="GetVisualConfigs">
+        <glx sop="14"/>
+    </function>
+
+    <function name="DestroyGLXPixmap">
+        <glx sop="15"/>
+    </function>
+
+    <function name="VendorPrivate">
+        <glx sop="16"/>
+    </function>
+
+    <function name="VendorPrivateWithReply">
+        <glx sop="17"/>
+    </function>
+
+    <function name="QueryExtensionsString">
+        <glx sop="18"/>
+    </function>
+</category>
+
+<category name="1.1" window_system="glX">
+    <function name="QueryServerString">
+        <glx sop="19"/>
+    </function>
+
+    <function name="ClientInfo">
+        <glx sop="20"/>
+    </function>
+</category>
+
+<category name="1.3" window_system="glX">
+    <function name="GetFBConfigs">
+        <glx sop="21"/>
+    </function>
+
+    <function name="CreatePixmap">
+        <glx sop="22"/>
+    </function>
+
+    <function name="DestroyPixmap">
+        <glx sop="23"/>
+    </function>
+
+    <function name="CreateNewContext">
+        <glx sop="24"/>
+    </function>
+
+    <function name="QueryContext">
+        <glx sop="25"/>
+    </function>
+
+    <function name="MakeContextCurrent">
+        <glx sop="26"/>
+    </function>
+
+    <function name="CreatePbuffer">
+        <glx sop="27"/>
+    </function>
+
+    <function name="DestroyPbuffer">
+        <glx sop="28"/>
+    </function>
+
+    <function name="GetDrawableAttributes">
+        <glx sop="29"/>
+    </function>
+
+    <function name="ChangeDrawableAttributes">
+        <glx sop="30"/>
+    </function>
+
+    <function name="CreateWindow">
+        <glx sop="31"/>
+    </function>
+
+    <function name="DestroyWindow">
+        <glx sop="32"/>
+    </function>
+</category>
+
+<category name="GLX_SGI_swap_control" number="40" window_system="glX">
+    <function name="SwapIntervalSGI">
+        <return type="int"/>
+        <glx vendorpriv="65536"/>
+    </function>
+</category>
+
+<category name="GLX_SGI_make_current_read" number="42" window_system="glX">
+    <function name="MakeCurrentReadSGI">
+<!--        <param name="dpy" type="Display *"/>
+	<param name="draw" type="GLXDrawable"/>
+	<param name="read" type="GLXDrawable"/>
+	<param name="ctx" type="GLXContext"/> -->
+        <return type="Bool"/>
+        <glx vendorpriv="65537"/>
+    </function>
+</category>
+
+<category name="GLX_EXT_import_context" number="47" window_system="glX">
+    <function name="QueryContextInfoEXT">
+        <glx vendorpriv="1024"/>
+    </function>
+</category>
+
+<category name="GLX_SGIX_fbconfig" number="49" window_system="glX">
+    <function name="GetFBConfigsSGIX">
+        <glx vendorpriv="65540"/>
+    </function>
+
+    <function name="CreateContextWithConfigSGIX">
+        <glx vendorpriv="65541"/>
+    </function>
+
+    <function name="CreateGLXPixmapWithConfigSGIX">
+        <glx vendorpriv="65542"/>
+    </function>
+</category>
+
+<category name="GLX_SGIX_pbuffer" number="50" window_system="glX">
+    <function name="CreateGLXPbufferSGIX">
+        <glx vendorpriv="65543"/>
+    </function>
+
+    <function name="DestroyGLXPbufferSGIX">
+        <glx vendorpriv="65544"/>
+    </function>
+
+    <function name="ChangeDrawableAttributesSGIX">
+        <glx vendorpriv="65545"/>
+    </function>
+
+    <function name="GetDrawableAttributesSGIX">
+        <glx vendorpriv="65546"/>
+    </function>
+</category>
+
+<category name="GLX_MESA_copy_sub_buffer" number="215">
+    <function name="CopySubBufferMESA">
+        <glx vendorpriv="5154"/>
+    </function>
+</category>
+
+<category name="GLX_EXT_texture_from_pixmap">
+    <function name="BindTexImageEXT">
+        <glx vendorpriv="1330"/>
+    </function>
+
+    <function name="ReleaseTexImageEXT">
+        <glx vendorpriv="1331"/>
+    </function>
+</category>
+
+</OpenGLAPI>
diff --git a/src/mesa/glapi/gen/glX_XML.py b/src/mesa/glapi/gen/glX_XML.py
new file mode 100644
index 0000000000..4c2e0f95bf
--- /dev/null
+++ b/src/mesa/glapi/gen/glX_XML.py
@@ -0,0 +1,570 @@
+#!/usr/bin/env python
+
+# (C) Copyright IBM Corporation 2004, 2005
+# All Rights Reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# on the rights to use, copy, modify, merge, publish, distribute, sub
+# license, and/or sell copies of the Software, and to permit persons to whom
+# the Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
+# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+#
+# Authors:
+#    Ian Romanick <idr@us.ibm.com>
+
+import gl_XML
+import license
+import sys, getopt, string
+
+
+class glx_item_factory(gl_XML.gl_item_factory):
+	"""Factory to create GLX protocol oriented objects derived from gl_item."""
+    
+	def create_item(self, name, element, context):
+		if name == "function":
+			return glx_function(element, context)
+		elif name == "enum":
+			return glx_enum(element, context)
+		elif name == "api":
+			return glx_api(self)
+		else:
+			return gl_XML.gl_item_factory.create_item(self, name, element, context)
+
+
+class glx_enum(gl_XML.gl_enum):
+	def __init__(self, element, context):
+		gl_XML.gl_enum.__init__(self, element, context)
+		
+		self.functions = {}
+
+		child = element.children
+		while child:
+			if child.type == "element" and child.name == "size":
+				n = child.nsProp( "name", None )
+				c = child.nsProp( "count", None )
+				m = child.nsProp( "mode", None )
+				
+				if not c:
+					c = self.default_count
+				else:
+					c = int(c)
+
+				if m == "get":
+					mode = 0
+				else:
+					mode = 1
+
+				if not self.functions.has_key(n):
+					self.functions[ n ] = [c, mode]
+
+			child = child.next
+
+		return
+
+
+class glx_function(gl_XML.gl_function):
+	def __init__(self, element, context):
+		self.glx_rop = 0
+		self.glx_sop = 0
+		self.glx_vendorpriv = 0
+
+		self.glx_vendorpriv_names = []
+
+		# If this is set to true, it means that GLdouble parameters should be
+		# written to the GLX protocol packet in the order they appear in the
+		# prototype.  This is different from the "classic" ordering.  In the
+		# classic ordering GLdoubles are written to the protocol packet first,
+		# followed by non-doubles.  NV_vertex_program was the first extension
+		# to break with this tradition.
+
+		self.glx_doubles_in_order = 0
+
+		self.vectorequiv = None
+		self.output = None
+		self.can_be_large = 0
+		self.reply_always_array = 0
+		self.dimensions_in_reply = 0
+		self.img_reset = None
+
+		self.server_handcode = 0
+		self.client_handcode = 0
+		self.ignore = 0
+
+		self.count_parameter_list = []
+		self.counter_list = []
+		self.parameters_by_name = {}
+		self.offsets_calculated = 0
+
+		gl_XML.gl_function.__init__(self, element, context)
+		return
+
+
+	def process_element(self, element):
+		gl_XML.gl_function.process_element(self, element)
+
+		# If the function already has a vector equivalent set, don't
+		# set it again.  This can happen if an alias to a function
+		# appears after the function that it aliases.
+
+		if not self.vectorequiv:
+			self.vectorequiv = element.nsProp("vectorequiv", None)
+
+
+		name = element.nsProp("name", None)
+		if name == self.name:
+			for param in self.parameters:
+				self.parameters_by_name[ param.name ] = param
+				
+				if len(param.count_parameter_list):
+					self.count_parameter_list.extend( param.count_parameter_list )
+				
+				if param.counter and param.counter not in self.counter_list:
+					self.counter_list.append(param.counter)
+
+
+		child = element.children
+		while child:
+			if child.type == "element" and child.name == "glx":
+				rop = child.nsProp( 'rop', None )
+				sop = child.nsProp( 'sop', None )
+				vop = child.nsProp( 'vendorpriv', None )
+
+				if rop:
+					self.glx_rop = int(rop)
+
+				if sop:
+					self.glx_sop = int(sop)
+
+				if vop:
+					self.glx_vendorpriv = int(vop)
+					self.glx_vendorpriv_names.append(name)
+
+				self.img_reset = child.nsProp( 'img_reset', None )
+
+				# The 'handcode' attribute can be one of 'true',
+				# 'false', 'client', or 'server'.
+
+				handcode = child.nsProp( 'handcode', None )
+				if handcode == "false":
+					self.server_handcode = 0
+					self.client_handcode = 0
+				elif handcode == "true":
+					self.server_handcode = 1
+					self.client_handcode = 1
+				elif handcode == "client":
+					self.server_handcode = 0
+					self.client_handcode = 1
+				elif handcode == "server":
+					self.server_handcode = 1
+					self.client_handcode = 0
+				else:
+					raise RuntimeError('Invalid handcode mode "%s" in function "%s".' % (handcode, self.name))
+
+				self.ignore               = gl_XML.is_attr_true( child, 'ignore' )
+				self.can_be_large         = gl_XML.is_attr_true( child, 'large' )
+				self.glx_doubles_in_order = gl_XML.is_attr_true( child, 'doubles_in_order' )
+				self.reply_always_array   = gl_XML.is_attr_true( child, 'always_array' )
+				self.dimensions_in_reply  = gl_XML.is_attr_true( child, 'dimensions_in_reply' )
+
+			child = child.next
+
+
+		# Do some validation of the GLX protocol information.  As
+		# new tests are discovered, they should be added here.
+
+		for param in self.parameters:
+			if param.is_output and self.glx_rop != 0:
+				raise RuntimeError("Render / RenderLarge commands cannot have outputs (%s)." % (self.name))
+
+		return
+
+
+	def has_variable_size_request(self):
+		"""Determine if the GLX request packet is variable sized.
+
+		The GLX request packet is variable sized in several common
+		situations.
+		
+		1. The function has a non-output parameter that is counted
+		   by another parameter (e.g., the 'textures' parameter of
+		   glDeleteTextures).
+		   
+		2. The function has a non-output parameter whose count is
+		   determined by another parameter that is an enum (e.g., the
+		   'params' parameter of glLightfv).
+		   
+		3. The function has a non-output parameter that is an
+		   image.
+
+		4. The function must be hand-coded on the server.
+		"""
+
+		if self.glx_rop == 0:
+			return 0
+
+		if self.server_handcode or self.images:
+			return 1
+
+		for param in self.parameters:
+			if not param.is_output:
+				if param.counter or len(param.count_parameter_list):
+					return 1
+
+		return 0
+
+
+	def variable_length_parameter(self):
+		for param in self.parameters:
+			if not param.is_output:
+				if param.counter or len(param.count_parameter_list):
+					return param
+				
+		return None
+
+
+	def calculate_offsets(self):
+		if not self.offsets_calculated:
+			# Calculate the offset of the first function parameter
+			# in the GLX command packet.  This byte offset is
+			# measured from the end of the Render / RenderLarge
+			# header.  The offset for all non-pixel commends is
+			# zero.  The offset for pixel commands depends on the
+			# number of dimensions of the pixel data.
+
+			if len(self.images) and not self.images[0].is_output:
+				[dim, junk, junk, junk, junk] = self.images[0].get_dimensions()
+
+				# The base size is the size of the pixel pack info
+				# header used by images with the specified number
+				# of dimensions.
+
+				if dim <=  2:
+					offset = 20
+				elif dim <= 4:
+					offset = 36
+				else:
+					raise RuntimeError('Invalid number of dimensions %u for parameter "%s" in function "%s".' % (dim, self.image.name, self.name))
+			else:
+				offset = 0
+
+			for param in self.parameterIterateGlxSend():
+				if param.img_null_flag:
+					offset += 4
+
+				if param.name != self.img_reset:
+					param.offset = offset
+					if not param.is_variable_length() and not param.is_client_only:
+						offset += param.size()
+					
+				if self.pad_after( param ):
+					offset += 4
+
+
+			self.offsets_calculated = 1
+		return
+
+
+	def offset_of(self, param_name):
+		self.calculate_offsets()
+		return self.parameters_by_name[ param_name ].offset
+
+
+	def parameterIterateGlxSend(self, include_variable_parameters = 1):
+		"""Create an iterator for parameters in GLX request order."""
+
+		# The parameter lists are usually quite short, so it's easier
+		# (i.e., less code) to just generate a new list with the
+		# required elements than it is to create a new iterator class.
+		
+		temp = [ [],  [], [] ]
+		for param in self.parameters:
+			if param.is_output: continue
+
+			if param.is_variable_length():
+				temp[2].append( param )
+			elif not self.glx_doubles_in_order and param.is_64_bit():
+				temp[0].append( param )
+			else:
+				temp[1].append( param )
+
+		parameters = temp[0]
+		parameters.extend( temp[1] )
+		if include_variable_parameters:
+			parameters.extend( temp[2] )
+		return parameters.__iter__()
+
+
+	def parameterIterateCounters(self):
+		temp = []
+		for name in self.counter_list:
+			temp.append( self.parameters_by_name[ name ] )
+
+		return temp.__iter__()
+
+
+	def parameterIterateOutputs(self):
+		temp = []
+		for p in self.parameters:
+			if p.is_output:
+				temp.append( p )
+
+		return temp
+
+
+	def command_fixed_length(self):
+		"""Return the length, in bytes as an integer, of the
+		fixed-size portion of the command."""
+
+		if len(self.parameters) == 0:
+			return 0
+		
+		self.calculate_offsets()
+
+		size = 0
+		for param in self.parameterIterateGlxSend(0):
+			if param.name != self.img_reset and not param.is_client_only:
+				if size == 0:
+					size = param.offset + param.size()
+				else:
+					size += param.size()
+
+				if self.pad_after( param ):
+					size += 4
+
+		for param in self.images:
+			if param.img_null_flag or param.is_output:
+				size += 4
+
+		return size
+
+
+	def command_variable_length(self):
+		"""Return the length, as a string, of the variable-sized
+		portion of the command."""
+
+		size_string = ""
+		for p in self.parameterIterateGlxSend():
+			if (not p.is_output) and (p.is_variable_length() or p.is_image()):
+				# FIXME Replace the 1 in the size_string call
+				# FIXME w/0 to eliminate some un-needed parnes
+				# FIXME This would already be done, but it
+				# FIXME adds some extra diffs to the generated
+				# FIXME code.
+
+				size_string = size_string + " + __GLX_PAD(%s)" % (p.size_string(1))
+
+		return size_string
+
+
+	def command_length(self):
+		size = self.command_fixed_length()
+
+		if self.glx_rop != 0:
+			size += 4
+
+		size = ((size + 3) & ~3)
+		return "%u%s" % (size, self.command_variable_length())
+
+
+	def opcode_real_value(self):
+		"""Get the true numeric value of the GLX opcode
+		
+		Behaves similarly to opcode_value, except for
+		X_GLXVendorPrivate and X_GLXVendorPrivateWithReply commands.
+		In these cases the value for the GLX opcode field (i.e.,
+		16 for X_GLXVendorPrivate or 17 for
+		X_GLXVendorPrivateWithReply) is returned.  For other 'single'
+		commands, the opcode for the command (e.g., 101 for
+		X_GLsop_NewList) is returned."""
+
+		if self.glx_vendorpriv != 0:
+			if self.needs_reply():
+				return 17
+			else:
+				return 16
+		else:
+			return self.opcode_value()
+
+
+	def opcode_value(self):
+		"""Get the unique protocol opcode for the glXFunction"""
+
+		if (self.glx_rop == 0) and self.vectorequiv:
+			equiv = self.context.functions_by_name[ self.vectorequiv ]
+			self.glx_rop = equiv.glx_rop
+
+
+		if self.glx_rop != 0:
+			return self.glx_rop
+		elif self.glx_sop != 0:
+			return self.glx_sop
+		elif self.glx_vendorpriv != 0:
+			return self.glx_vendorpriv
+		else:
+			return -1
+	
+
+	def opcode_rop_basename(self):
+		"""Return either the name to be used for GLX protocol enum.
+		
+		Returns either the name of the function or the name of the
+		name of the equivalent vector (e.g., glVertex3fv for
+		glVertex3f) function."""
+
+		if self.vectorequiv == None:
+			return self.name
+		else:
+			return self.vectorequiv
+
+
+	def opcode_name(self):
+		"""Get the unique protocol enum name for the glXFunction"""
+
+		if (self.glx_rop == 0) and self.vectorequiv:
+			equiv = self.context.functions_by_name[ self.vectorequiv ]
+			self.glx_rop = equiv.glx_rop
+			self.glx_doubles_in_order = equiv.glx_doubles_in_order
+
+
+		if self.glx_rop != 0:
+			return "X_GLrop_%s" % (self.opcode_rop_basename())
+		elif self.glx_sop != 0:
+			return "X_GLsop_%s" % (self.name)
+		elif self.glx_vendorpriv != 0:
+			return "X_GLvop_%s" % (self.name)
+		else:
+			raise RuntimeError('Function "%s" has no opcode.' % (self.name))
+
+
+	def opcode_vendor_name(self, name):
+		if name in self.glx_vendorpriv_names:
+			return "X_GLvop_%s" % (name)
+		else:
+			raise RuntimeError('Function "%s" has no VendorPrivate opcode.' % (name))
+
+
+	def opcode_real_name(self):
+		"""Get the true protocol enum name for the GLX opcode
+		
+		Behaves similarly to opcode_name, except for
+		X_GLXVendorPrivate and X_GLXVendorPrivateWithReply commands.
+		In these cases the string 'X_GLXVendorPrivate' or
+		'X_GLXVendorPrivateWithReply' is returned.  For other
+		single or render commands 'X_GLsop' or 'X_GLrop' plus the
+		name of the function returned."""
+
+		if self.glx_vendorpriv != 0:
+			if self.needs_reply():
+				return "X_GLXVendorPrivateWithReply"
+			else:
+				return "X_GLXVendorPrivate"
+		else:
+			return self.opcode_name()
+
+
+	def needs_reply(self):
+		try:
+			x = self._needs_reply
+		except Exception, e:
+			x = 0
+			if self.return_type != 'void':
+				x = 1
+
+			for param in self.parameters:
+				if param.is_output:
+					x = 1
+					break
+
+			self._needs_reply = x
+
+		return x
+
+
+	def pad_after(self, p):
+		"""Returns the name of the field inserted after the
+		specified field to pad out the command header."""
+
+		for image in self.images:
+			if image.img_pad_dimensions:
+				if not image.height:
+					if p.name == image.width:
+						return "height"
+					elif p.name == image.img_xoff:
+						return "yoffset"
+				elif not image.extent:
+					if p.name == image.depth:
+						# Should this be "size4d"?
+						return "extent"
+					elif p.name == image.img_zoff:
+						return "woffset"
+
+		return None
+
+
+	def has_different_protocol(self, name):
+		"""Returns true if the named version of the function uses different protocol from the other versions.
+		
+		Some functions, such as glDeleteTextures and
+		glDeleteTexturesEXT are functionally identical, but have
+		different protocol.  This function returns true if the
+		named function is an alias name and that named version uses
+		different protocol from the function that is aliased.
+		"""
+
+		return (name in self.glx_vendorpriv_names) and self.glx_sop
+
+
+	def static_glx_name(self, name):
+		if self.has_different_protocol(name):
+			for n in self.glx_vendorpriv_names:
+				if n in self.static_entry_points:
+					return n
+				
+		return self.static_name(name)
+
+
+	def client_supported_for_indirect(self):
+		"""Returns true if the function is supported on the client
+		side for indirect rendering."""
+
+		return not self.ignore and (self.offset != -1) and (self.glx_rop or self.glx_sop or self.glx_vendorpriv or self.vectorequiv or self.client_handcode)
+
+
+class glx_function_iterator:
+	"""Class to iterate over a list of glXFunctions"""
+
+	def __init__(self, context):
+		self.iterator = context.functionIterateByOffset()
+		return
+
+
+	def __iter__(self):
+		return self
+
+
+	def next(self):
+		f = self.iterator.next()
+
+		if f.client_supported_for_indirect():
+			return f
+		else:
+			return self.next()
+
+
+class glx_api(gl_XML.gl_api):
+	def functionIterateGlx(self):
+		return glx_function_iterator(self)
+
diff --git a/src/mesa/glapi/gen/glX_doc.py b/src/mesa/glapi/gen/glX_doc.py
new file mode 100644
index 0000000000..e9fbbe6f16
--- /dev/null
+++ b/src/mesa/glapi/gen/glX_doc.py
@@ -0,0 +1,280 @@
+#!/usr/bin/env python
+
+# (C) Copyright IBM Corporation 2004, 2005
+# All Rights Reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# on the rights to use, copy, modify, merge, publish, distribute, sub
+# license, and/or sell copies of the Software, and to permit persons to whom
+# the Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
+# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+#
+# Authors:
+#    Ian Romanick <idr@us.ibm.com>
+
+import gl_XML, glX_XML, glX_proto_common, license
+import sys, getopt
+
+
+class glx_doc_item_factory(glX_proto_common.glx_proto_item_factory):
+	"""Factory to create GLX protocol documentation oriented objects derived from glItem."""
+    
+	def create_item(self, name, element, context):
+		if name == "parameter":
+			return glx_doc_parameter(element, context)
+		else:
+			return glX_proto_common.glx_proto_item_factory.create_item(self, name, element, context)
+
+
+class glx_doc_parameter(gl_XML.gl_parameter):
+	def packet_type(self, type_dict):
+		"""Get the type string for the packet header
+		
+		GLX protocol documentation uses type names like CARD32,
+		FLOAT64, LISTofCARD8, and ENUM.  This function converts the
+		type of the parameter to one of these names."""
+
+		list_of = ""
+		if self.is_array():
+			list_of = "LISTof"
+
+		t_name = self.get_base_type_string()
+		if not type_dict.has_key( t_name ):
+			type_name = "CARD8"
+		else:
+			type_name = type_dict[ t_name ]
+
+		return "%s%s" % (list_of, type_name)
+
+
+	def packet_size(self):
+		p = None
+		s = self.size()
+		if s == 0:
+			a_prod = "n"
+			b_prod = self.p_type.size
+
+			if not self.count_parameter_list and self.counter:
+				a_prod = self.counter
+			elif self.count_parameter_list and not self.counter or self.is_output:
+				pass
+			elif self.count_parameter_list and self.counter:
+				b_prod = self.counter
+			else:
+				raise RuntimeError("Parameter '%s' to function '%s' has size 0." % (self.name, self.context.name))
+
+			ss = "%s*%s" % (a_prod, b_prod)
+
+			return [ss, p]
+		else:
+			if s % 4 != 0:
+				p = "p"
+
+			return [str(s), p]
+
+class PrintGlxProtoText(gl_XML.gl_print_base):
+	def __init__(self):
+		gl_XML.gl_print_base.__init__(self)
+		self.license = ""
+
+
+	def printHeader(self):
+		return
+
+
+	def body_size(self, f):
+		# At some point, refactor this function and
+		# glXFunction::command_payload_length.
+
+		size = 0;
+		size_str = ""
+		pad_str = ""
+		plus = ""
+		for p in f.parameterIterateGlxSend():
+			[s, pad] = p.packet_size()
+			try: 
+				size += int(s)
+			except Exception,e:
+				size_str += "%s%s" % (plus, s)
+				plus = "+"
+
+			if pad != None:
+				pad_str = pad
+
+		return [size, size_str, pad_str]
+
+
+	def print_render_header(self, f):
+		[size, size_str, pad_str] = self.body_size(f)
+		size += 4;
+
+		if size_str == "":
+			s = "%u" % ((size + 3) & ~3)
+		elif pad_str != "":
+			s = "%u+%s+%s" % (size, size_str, pad_str)
+		else:
+			s = "%u+%s" % (size, size_str)
+
+		print '            2        %-15s rendering command length' % (s)
+		print '            2        %-4u            rendering command opcode' % (f.glx_rop)
+		return
+
+
+	def print_single_header(self, f):
+		[size, size_str, pad_str] = self.body_size(f)
+		size = ((size + 3) / 4) + 2;
+
+		if f.glx_vendorpriv != 0:
+			size += 1
+
+		print '            1        CARD8           opcode (X assigned)'
+		print '            1        %-4u            GLX opcode (%s)' % (f.opcode_real_value(), f.opcode_real_name())
+
+		if size_str == "":
+			s = "%u" % (size)
+		elif pad_str != "":
+			s = "%u+((%s+%s)/4)" % (size, size_str, pad_str)
+		else:
+			s = "%u+((%s)/4)" % (size, size_str)
+
+		print '            2        %-15s request length' % (s)
+
+		if f.glx_vendorpriv != 0:
+			print '            4        %-4u            vendor specific opcode' % (f.opcode_value())
+			
+		print '            4        GLX_CONTEXT_TAG context tag'
+
+		return
+		
+
+	def print_reply(self, f):
+		print '          =>'
+		print '            1        1               reply'
+		print '            1                        unused'
+		print '            2        CARD16          sequence number'
+
+		if f.output == None:
+			print '            4        0               reply length'
+		elif f.reply_always_array:
+			print '            4        m               reply length'
+		else:
+			print '            4        m               reply length, m = (n == 1 ? 0 : n)'
+
+
+		output = None
+		for x in f.parameterIterateOutputs():
+			output = x
+			break
+
+
+		unused = 24
+		if f.return_type != 'void':
+			print '            4        %-15s return value' % (f.return_type)
+			unused -= 4
+		elif output != None:
+			print '            4                        unused'
+			unused -= 4
+
+		if output != None:
+			print '            4        CARD32          n'
+			unused -= 4
+
+		if output != None:
+			if not f.reply_always_array:
+				print ''
+				print '            if (n = 1) this follows:'
+				print ''
+				print '            4        CARD32          %s' % (output.name)
+				print '            %-2u                       unused' % (unused - 4)
+				print ''
+				print '            otherwise this follows:'
+				print ''
+
+			print '            %-2u                       unused' % (unused)
+
+			[s, pad] = output.packet_size()
+			print '            %-8s %-15s %s' % (s, output.packet_type( self.type_map ), output.name)
+			if pad != None:
+				try:
+					bytes = int(s)
+					bytes = 4 - (bytes & 3)
+					print '            %-8u %-15s unused' % (bytes, "")
+				except Exception,e:
+					print '            %-8s %-15s unused, %s=pad(%s)' % (pad, "", pad, s)
+		else:
+			print '            %-2u                       unused' % (unused)
+
+
+	def print_body(self, f):
+		for p in f.parameterIterateGlxSend():
+			[s, pad] = p.packet_size()
+			print '            %-8s %-15s %s' % (s, p.packet_type( self.type_map ), p.name)
+			if pad != None:
+				try:
+					bytes = int(s)
+					bytes = 4 - (bytes & 3)
+					print '            %-8u %-15s unused' % (bytes, "")
+				except Exception,e:
+					print '            %-8s %-15s unused, %s=pad(%s)' % (pad, "", pad, s)
+
+	def printBody(self, api):
+		self.type_map = {}
+		for t in api.typeIterate():
+			self.type_map[ "GL" + t.name ] = t.glx_name
+
+
+		# At some point this should be expanded to support pixel
+		# functions, but I'm not going to lose any sleep over it now.
+
+		for f in api.functionIterateByOffset():
+			if f.client_handcode or f.server_handcode or f.vectorequiv or len(f.get_images()):
+				continue
+
+
+			if f.glx_rop:
+				print '        %s' % (f.name)
+				self.print_render_header(f)
+			elif f.glx_sop or f.glx_vendorpriv:
+				print '        %s' % (f.name)
+				self.print_single_header(f)
+			else:
+				continue
+
+			self.print_body(f)
+
+			if f.needs_reply():
+				self.print_reply(f)
+
+			print ''
+		return
+
+
+if __name__ == '__main__':
+	file_name = "gl_API.xml"
+
+	try:
+		(args, trail) = getopt.getopt(sys.argv[1:], "f:")
+	except Exception,e:
+		show_usage()
+
+	for (arg,val) in args:
+		if arg == "-f":
+			file_name = val
+
+	api = gl_XML.parse_GL_API( file_name, glx_doc_item_factory() )
+
+	printer = PrintGlxProtoText()
+	printer.Print( api )
diff --git a/src/mesa/glapi/gen/glX_proto_common.py b/src/mesa/glapi/gen/glX_proto_common.py
new file mode 100644
index 0000000000..6f094e22b3
--- /dev/null
+++ b/src/mesa/glapi/gen/glX_proto_common.py
@@ -0,0 +1,95 @@
+#!/usr/bin/env python
+
+# (C) Copyright IBM Corporation 2004, 2005
+# All Rights Reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# on the rights to use, copy, modify, merge, publish, distribute, sub
+# license, and/or sell copies of the Software, and to permit persons to whom
+# the Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
+# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+#
+# Authors:
+#    Ian Romanick <idr@us.ibm.com>
+
+import gl_XML, glX_XML
+import string
+
+
+class glx_proto_item_factory(glX_XML.glx_item_factory):
+	"""Factory to create GLX protocol oriented objects derived from gl_item."""
+    
+	def create_item(self, name, element, context):
+		if name == "type":
+			return glx_proto_type(element, context)
+		else:
+			return glX_XML.glx_item_factory.create_item(self, name, element, context)
+
+
+class glx_proto_type(gl_XML.gl_type):
+	def __init__(self, element, context):
+		gl_XML.gl_type.__init__(self, element, context)
+
+		self.glx_name = element.nsProp( "glx_name", None )
+		return
+
+
+class glx_print_proto(gl_XML.gl_print_base):
+	def size_call(self, func, outputs_also = 0):
+		"""Create C code to calculate 'compsize'.
+
+		Creates code to calculate 'compsize'.  If the function does
+		not need 'compsize' to be calculated, None will be
+		returned."""
+	
+		compsize = None
+
+		for param in func.parameterIterator():
+			if outputs_also or not param.is_output:
+				if param.is_image():
+					[dim, w, h, d, junk] = param.get_dimensions()
+
+					compsize = '__glImageSize(%s, %s, %s, %s, %s, %s)' % (w, h, d, param.img_format, param.img_type, param.img_target)
+					if not param.img_send_null:
+						compsize = '(%s != NULL) ? %s : 0' % (param.name, compsize)
+
+					return compsize
+
+				elif len(param.count_parameter_list):
+					parameters = string.join( param.count_parameter_list, "," )
+					compsize = "__gl%s_size(%s)" % (func.name, parameters)
+
+					return compsize
+
+		return None
+
+
+	def emit_packet_size_calculation(self, f, bias):
+		# compsize is only used in the command size calculation if
+		# the function has a non-output parameter that has a non-empty
+		# counter_parameter_list.
+
+		compsize = self.size_call(f)
+		if compsize:
+			print '    const GLuint compsize = %s;' % (compsize)
+
+		if bias:
+			print '    const GLuint cmdlen = %s - %u;' % (f.command_length(), bias)
+		else:
+			print '    const GLuint cmdlen = %s;' % (f.command_length())
+
+		#print ''
+		return compsize
diff --git a/src/mesa/glapi/gen/glX_proto_recv.py b/src/mesa/glapi/gen/glX_proto_recv.py
new file mode 100644
index 0000000000..f423c6db08
--- /dev/null
+++ b/src/mesa/glapi/gen/glX_proto_recv.py
@@ -0,0 +1,554 @@
+#!/usr/bin/env python
+
+# (C) Copyright IBM Corporation 2005
+# All Rights Reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# on the rights to use, copy, modify, merge, publish, distribute, sub
+# license, and/or sell copies of the Software, and to permit persons to whom
+# the Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
+# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+#
+# Authors:
+#    Ian Romanick <idr@us.ibm.com>
+
+import gl_XML, glX_XML, glX_proto_common, license
+import sys, getopt, string
+
+
+class PrintGlxDispatch_h(gl_XML.gl_print_base):
+	def __init__(self):
+		gl_XML.gl_print_base.__init__(self)
+
+		self.name = "glX_proto_recv.py (from Mesa)"
+		self.license = license.bsd_license_template % ( "(C) Copyright IBM Corporation 2005", "IBM")
+
+		self.header_tag = "_INDIRECT_DISPATCH_H_"
+		return
+
+
+	def printRealHeader(self):
+		self.printVisibility( "HIDDEN", "hidden" )
+		print 'struct __GLXclientStateRec;'
+		print ''
+		return
+
+
+	def printBody(self, api):
+		for func in api.functionIterateAll():
+			if not func.ignore and not func.vectorequiv:
+				if func.glx_rop:
+					print 'extern HIDDEN void __glXDisp_%s(GLbyte * pc);' % (func.name)
+					print 'extern HIDDEN void __glXDispSwap_%s(GLbyte * pc);' % (func.name)
+				elif func.glx_sop or func.glx_vendorpriv:
+					print 'extern HIDDEN int __glXDisp_%s(struct __GLXclientStateRec *, GLbyte *);' % (func.name)
+					print 'extern HIDDEN int __glXDispSwap_%s(struct __GLXclientStateRec *, GLbyte *);' % (func.name)
+
+					if func.glx_sop and func.glx_vendorpriv:
+						n = func.glx_vendorpriv_names[0]
+						print 'extern HIDDEN int __glXDisp_%s(struct __GLXclientStateRec *, GLbyte *);' % (n)
+						print 'extern HIDDEN int __glXDispSwap_%s(struct __GLXclientStateRec *, GLbyte *);' % (n)
+
+		return
+
+
+class PrintGlxDispatchFunctions(glX_proto_common.glx_print_proto):
+	def __init__(self, do_swap):
+		gl_XML.gl_print_base.__init__(self)
+		self.name = "glX_proto_recv.py (from Mesa)"
+		self.license = license.bsd_license_template % ( "(C) Copyright IBM Corporation 2005", "IBM")
+
+		self.real_types = [ '', '', 'uint16_t', '', 'uint32_t', '', '', '', 'uint64_t' ]
+		self.do_swap = do_swap
+		return
+
+
+	def printRealHeader(self):
+		print '#include <X11/Xmd.h>'
+		print '#include <GL/gl.h>'
+		print '#include <GL/glxproto.h>'
+
+		print '#include <inttypes.h>'
+		print '#include "indirect_size.h"'
+		print '#include "indirect_size_get.h"'
+		print '#include "indirect_dispatch.h"'
+		print '#include "glxserver.h"'
+		print '#include "glxbyteorder.h"'
+		print '#include "indirect_util.h"'
+		print '#include "singlesize.h"'
+		print '#include "glapi.h"'
+		print '#include "glapitable.h"'
+		print '#include "glthread.h"'
+		print '#include "dispatch.h"'
+		print ''
+		print '#define __GLX_PAD(x)  (((x) + 3) & ~3)'
+		print ''
+		print 'typedef struct {'
+		print '    __GLX_PIXEL_3D_HDR;'
+		print '} __GLXpixel3DHeader;'
+		print ''
+		print 'extern GLboolean __glXErrorOccured( void );'
+		print 'extern void __glXClearErrorOccured( void );'
+		print ''
+		print 'static const unsigned dummy_answer[2] = {0, 0};'
+		print ''
+		return
+
+
+	def printBody(self, api):
+		if self.do_swap:
+			self.emit_swap_wrappers(api)
+
+
+		for func in api.functionIterateByOffset():
+			if not func.ignore and not func.server_handcode and not func.vectorequiv and (func.glx_rop or func.glx_sop or func.glx_vendorpriv):
+				self.printFunction(func, func.name)
+				if func.glx_sop and func.glx_vendorpriv:
+					self.printFunction(func, func.glx_vendorpriv_names[0])
+					
+
+		return
+
+
+	def printFunction(self, f, name):
+		if (f.glx_sop or f.glx_vendorpriv) and (len(f.get_images()) != 0):
+			return
+
+		if not self.do_swap:
+			base = '__glXDisp'
+		else:
+			base = '__glXDispSwap'
+
+		if f.glx_rop:
+			print 'void %s_%s(GLbyte * pc)' % (base, name)
+		else:
+			print 'int %s_%s(__GLXclientState *cl, GLbyte *pc)' % (base, name)
+
+		print '{'
+
+		if f.glx_rop or f.vectorequiv:
+			self.printRenderFunction(f)
+		elif f.glx_sop or f.glx_vendorpriv:
+			if len(f.get_images()) == 0: 
+				self.printSingleFunction(f, name)
+		else:
+			print "/* Missing GLX protocol for %s. */" % (name)
+
+		print '}'
+		print ''
+		return
+
+
+	def swap_name(self, bytes):
+		return 'bswap_%u_array' % (8 * bytes)
+
+
+	def emit_swap_wrappers(self, api):
+		self.type_map = {}
+		already_done = [ ]
+
+		for t in api.typeIterate():
+			te = t.get_type_expression()
+			t_size = te.get_element_size()
+
+			if t_size > 1 and t.glx_name:
+				
+				t_name = "GL" + t.name
+				self.type_map[ t_name ] = t.glx_name
+
+				if t.glx_name not in already_done:
+					real_name = self.real_types[t_size]
+
+					print 'static %s' % (t_name)
+					print 'bswap_%s( const void * src )' % (t.glx_name)
+					print '{'
+					print '    union { %s dst; %s ret; } x;' % (real_name, t_name)
+					print '    x.dst = bswap_%u( *(%s *) src );' % (t_size * 8, real_name)
+					print '    return x.ret;'
+					print '}'
+					print ''
+					already_done.append( t.glx_name )
+
+		for bits in [16, 32, 64]:
+			print 'static void *'
+			print 'bswap_%u_array( uint%u_t * src, unsigned count )' % (bits, bits)
+			print '{'
+			print '    unsigned  i;'
+			print ''
+			print '    for ( i = 0 ; i < count ; i++ ) {'
+			print '        uint%u_t temp = bswap_%u( src[i] );' % (bits, bits)
+			print '        src[i] = temp;'
+			print '    }'
+			print ''
+			print '    return src;'
+			print '}'
+			print ''
+			
+
+	def fetch_param(self, param):
+		t = param.type_string()
+		o = param.offset
+		element_size = param.size() / param.get_element_count()
+
+		if self.do_swap and (element_size != 1):
+			if param.is_array():
+				real_name = self.real_types[ element_size ]
+
+				swap_func = self.swap_name( element_size )
+				return ' (%-8s)%s( (%s *) (pc + %2s), %s )' % (t, swap_func, real_name, o, param.count)
+			else:
+				t_name = param.get_base_type_string()
+				return ' (%-8s)bswap_%-7s( pc + %2s )' % (t, self.type_map[ t_name ], o)
+		else:
+			if param.is_array():
+				return ' (%-8s)(pc + %2u)' % (t, o)
+			else:
+				return '*(%-8s *)(pc + %2u)' % (t, o)
+				
+		return None
+
+
+	def emit_function_call(self, f, retval_assign, indent):
+		list = []
+
+		for param in f.parameterIterator():
+			if param.is_padding:
+				continue
+
+			if param.is_counter or param.is_image() or param.is_output or param.name in f.count_parameter_list or len(param.count_parameter_list):
+				location = param.name
+			else:
+				location = self.fetch_param(param)
+
+			list.append( '%s        %s' % (indent, location) )
+			
+
+		if len( list ):
+			print '%s    %sCALL_%s( GET_DISPATCH(), (' % (indent, retval_assign, f.name)
+			print string.join( list, ",\n" )
+			print '%s    ) );' % (indent)
+		else:
+			print '%s    %sCALL_%s( GET_DISPATCH(), () );' % (indent, retval_assign, f.name)
+		return
+
+
+	def common_func_print_just_start(self, f, indent):
+		align64 = 0
+		need_blank = 0
+
+
+		f.calculate_offsets()
+		for param in f.parameterIterateGlxSend():
+			# If any parameter has a 64-bit base type, then we
+			# have to do alignment magic for the while thing.
+
+			if param.is_64_bit():
+				align64 = 1
+
+
+			# FIXME img_null_flag is over-loaded.  In addition to
+			# FIXME being used for images, it is used to signify
+			# FIXME NULL data pointers for vertex buffer object
+			# FIXME related functions.  Re-name it to null_data
+			# FIXME or something similar.
+
+			if param.img_null_flag:
+				print '%s    const CARD32 ptr_is_null = *(CARD32 *)(pc + %s);' % (indent, param.offset - 4)
+				cond = '(ptr_is_null != 0) ? NULL : '
+			else:
+				cond = ""
+
+
+			type_string = param.type_string()
+
+			if param.is_image():
+				offset = f.offset_of( param.name )
+
+				print '%s    %s const %s = (%s) (%s(pc + %s));' % (indent, type_string, param.name, type_string, cond, offset)
+				
+				if param.depth:
+					print '%s    __GLXpixel3DHeader * const hdr = (__GLXpixel3DHeader *)(pc);' % (indent)
+				else:
+					print '%s    __GLXpixelHeader * const hdr = (__GLXpixelHeader *)(pc);' % (indent)
+
+				need_blank = 1
+			elif param.is_counter or param.name in f.count_parameter_list:
+				location = self.fetch_param(param)
+				print '%s    const %s %s = %s;' % (indent, type_string, param.name, location)
+				need_blank = 1
+			elif len(param.count_parameter_list):
+				if param.size() == 1 and not self.do_swap:
+					location = self.fetch_param(param)
+					print '%s    %s %s = %s%s;' % (indent, type_string, param.name, cond, location)
+				else:
+					print '%s    %s %s;' % (indent, type_string, param.name)
+				need_blank = 1
+
+
+
+		if need_blank:
+			print ''
+
+		if align64:
+			print '#ifdef __GLX_ALIGN64'
+
+			if f.has_variable_size_request():
+				self.emit_packet_size_calculation(f, 4)
+				s = "cmdlen"
+			else:
+				s = str((f.command_fixed_length() + 3) & ~3)
+
+			print '    if ((unsigned long)(pc) & 7) {'
+			print '        (void) memmove(pc-4, pc, %s);' % (s)
+			print '        pc -= 4;'
+			print '    }'
+			print '#endif'
+			print ''
+
+
+		need_blank = 0
+		if self.do_swap:
+			for param in f.parameterIterateGlxSend():
+				if param.count_parameter_list:
+					o = param.offset
+					count = param.get_element_count()
+					type_size = param.size() / count
+					
+					if param.counter:
+						count_name = param.counter
+					else:
+						count_name = str(count)
+
+					# This is basically an ugly special-
+					# case for glCallLists.
+
+					if type_size == 1:
+						x = [] 
+						x.append( [1, ['BYTE', 'UNSIGNED_BYTE', '2_BYTES', '3_BYTES', '4_BYTES']] )
+						x.append( [2, ['SHORT', 'UNSIGNED_SHORT']] )
+						x.append( [4, ['INT', 'UNSIGNED_INT', 'FLOAT']] )
+
+						print '    switch(%s) {' % (param.count_parameter_list[0])
+						for sub in x:
+							for t_name in sub[1]:
+								print '    case GL_%s:' % (t_name)
+
+							if sub[0] == 1:
+								print '        %s = (%s) (pc + %s); break;' % (param.name, param.type_string(), o)
+							else:
+								swap_func = self.swap_name(sub[0])
+								print '        %s = (%s) %s( (%s *) (pc + %s), %s ); break;' % (param.name, param.type_string(), swap_func, self.real_types[sub[0]], o, count_name)
+						print '    default:'
+						print '        return;'
+						print '    }'
+					else:
+						swap_func = self.swap_name(type_size)
+						compsize = self.size_call(f, 1)
+						print '    %s = (%s) %s( (%s *) (pc + %s), %s );' % (param.name, param.type_string(), swap_func, self.real_types[type_size], o, compsize)
+
+					need_blank = 1
+
+		else:
+			for param in f.parameterIterateGlxSend():
+				if param.count_parameter_list:
+					print '%s    %s = (%s) (pc + %s);' % (indent, param.name, param.type_string(), param.offset)
+					need_blank = 1
+
+
+		if need_blank:
+			print ''
+
+
+		return
+
+
+	def printSingleFunction(self, f, name):
+		if name not in f.glx_vendorpriv_names:
+			print '    xGLXSingleReq * const req = (xGLXSingleReq *) pc;'
+		else:
+			print '    xGLXVendorPrivateReq * const req = (xGLXVendorPrivateReq *) pc;'
+
+		print '    int error;'
+
+		if self.do_swap:
+		    print '    __GLXcontext * const cx = __glXForceCurrent(cl, bswap_CARD32( &req->contextTag ), &error);'
+		else:
+		    print '    __GLXcontext * const cx = __glXForceCurrent(cl, req->contextTag, &error);'
+
+		print ''
+		if name not in f.glx_vendorpriv_names:
+			print '    pc += __GLX_SINGLE_HDR_SIZE;'
+		else:
+			print '    pc += __GLX_VENDPRIV_HDR_SIZE;'
+
+		print '    if ( cx != NULL ) {'
+		self.common_func_print_just_start(f, "    ")
+		
+
+		if f.return_type != 'void':
+			print '        %s retval;' % (f.return_type)
+			retval_string = "retval"
+			retval_assign = "retval = "
+		else:
+			retval_string = "0"
+			retval_assign = ""
+
+
+		type_size = 0
+		answer_string = "dummy_answer"
+		answer_count = "0"
+		is_array_string = "GL_FALSE"
+
+		for param in f.parameterIterateOutputs():
+			answer_type = param.get_base_type_string()
+			if answer_type == "GLvoid":
+				answer_type = "GLubyte"
+
+
+			c = param.get_element_count()
+			type_size = (param.size() / c)
+			if type_size == 1:
+				size_scale = ""
+			else:
+				size_scale = " * %u" % (type_size)
+
+
+			if param.count_parameter_list:
+				print '        const GLuint compsize = %s;' % (self.size_call(f, 1))
+				print '        %s answerBuffer[200];' %  (answer_type)
+				print '        %s %s = __glXGetAnswerBuffer(cl, compsize%s, answerBuffer, sizeof(answerBuffer), %u);' % (param.type_string(), param.name, size_scale, type_size )
+				answer_string = param.name
+				answer_count = "compsize"
+
+				print ''
+				print '        if (%s == NULL) return BadAlloc;' % (param.name)
+				print '        __glXClearErrorOccured();'
+				print ''
+			elif param.counter:
+				print '        %s answerBuffer[200];' %  (answer_type)
+				print '        %s %s = __glXGetAnswerBuffer(cl, %s%s, answerBuffer, sizeof(answerBuffer), %u);' % (param.type_string(), param.name, param.counter, size_scale, type_size)
+				answer_string = param.name
+				answer_count = param.counter
+			elif c >= 1:
+				print '        %s %s[%u];' % (answer_type, param.name, c)
+				answer_string = param.name
+				answer_count = "%u" % (c)
+
+			if f.reply_always_array:
+				is_array_string = "GL_TRUE"
+
+
+		self.emit_function_call(f, retval_assign, "    ")
+
+
+		if f.needs_reply():
+			if self.do_swap:
+				for param in f.parameterIterateOutputs():
+					c = param.get_element_count()
+					type_size = (param.size() / c)
+
+					if type_size > 1:
+						swap_name = self.swap_name( type_size )
+						print '        (void) %s( (uint%u_t *) %s, %s );' % (swap_name, 8 * type_size, param.name, answer_count)
+
+
+				reply_func = '__glXSendReplySwap'
+			else:
+				reply_func = '__glXSendReply'
+
+			print '        %s(cl->client, %s, %s, %u, %s, %s);' % (reply_func, answer_string, answer_count, type_size, is_array_string, retval_string)
+		#elif f.note_unflushed:
+		#	print '        cx->hasUnflushedCommands = GL_TRUE;'
+
+		print '        error = Success;'
+		print '    }'
+		print ''
+		print '    return error;'
+		return
+
+
+	def printRenderFunction(self, f):
+		# There are 4 distinct phases in a rendering dispatch function.
+		# In the first phase we compute the sizes and offsets of each
+		# element in the command.  In the second phase we (optionally)
+		# re-align 64-bit data elements.  In the third phase we
+		# (optionally) byte-swap array data.  Finally, in the fourth
+		# phase we actually dispatch the function.
+
+		self.common_func_print_just_start(f, "")
+
+		images = f.get_images()
+		if len(images):
+			if self.do_swap:
+				pre = "bswap_CARD32( & "
+				post = " )"
+			else:
+				pre = ""
+				post = ""
+
+			img = images[0]
+
+			# swapBytes and lsbFirst are single byte fields, so
+			# the must NEVER be byte-swapped.
+
+			if not (img.img_type == "GL_BITMAP" and img.img_format == "GL_COLOR_INDEX"):
+				print '    CALL_PixelStorei( GET_DISPATCH(), (GL_UNPACK_SWAP_BYTES,   hdr->swapBytes) );'
+
+			print '    CALL_PixelStorei( GET_DISPATCH(), (GL_UNPACK_LSB_FIRST,    hdr->lsbFirst) );'
+
+			print '    CALL_PixelStorei( GET_DISPATCH(), (GL_UNPACK_ROW_LENGTH,   (GLint) %shdr->rowLength%s) );' % (pre, post)
+			if img.depth:
+				print '    CALL_PixelStorei( GET_DISPATCH(), (GL_UNPACK_IMAGE_HEIGHT, (GLint) %shdr->imageHeight%s) );' % (pre, post)
+			print '    CALL_PixelStorei( GET_DISPATCH(), (GL_UNPACK_SKIP_ROWS,    (GLint) %shdr->skipRows%s) );' % (pre, post)
+			if img.depth:
+				print '    CALL_PixelStorei( GET_DISPATCH(), (GL_UNPACK_SKIP_IMAGES,  (GLint) %shdr->skipImages%s) );' % (pre, post)
+			print '    CALL_PixelStorei( GET_DISPATCH(), (GL_UNPACK_SKIP_PIXELS,  (GLint) %shdr->skipPixels%s) );' % (pre, post)
+			print '    CALL_PixelStorei( GET_DISPATCH(), (GL_UNPACK_ALIGNMENT,    (GLint) %shdr->alignment%s) );' % (pre, post)
+			print ''
+
+
+		self.emit_function_call(f, "", "")
+		return
+
+
+if __name__ == '__main__':
+	file_name = "gl_API.xml"
+
+	try:
+		(args, trail) = getopt.getopt(sys.argv[1:], "f:m:s")
+	except Exception,e:
+		show_usage()
+
+	mode = "dispatch_c"
+	do_swap = 0
+	for (arg,val) in args:
+		if arg == "-f":
+			file_name = val
+		elif arg == "-m":
+			mode = val
+		elif arg == "-s":
+			do_swap = 1
+
+	if mode == "dispatch_c":
+		printer = PrintGlxDispatchFunctions(do_swap)
+	elif mode == "dispatch_h":
+		printer = PrintGlxDispatch_h()
+	else:
+		show_usage()
+
+	api = gl_XML.parse_GL_API( file_name, glX_proto_common.glx_proto_item_factory() )
+
+	printer.Print( api )
diff --git a/src/mesa/glapi/gen/glX_proto_send.py b/src/mesa/glapi/gen/glX_proto_send.py
new file mode 100644
index 0000000000..daca1b767a
--- /dev/null
+++ b/src/mesa/glapi/gen/glX_proto_send.py
@@ -0,0 +1,1042 @@
+#!/usr/bin/env python
+
+# (C) Copyright IBM Corporation 2004, 2005
+# All Rights Reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# on the rights to use, copy, modify, merge, publish, distribute, sub
+# license, and/or sell copies of the Software, and to permit persons to whom
+# the Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
+# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+#
+# Authors:
+#    Ian Romanick <idr@us.ibm.com>
+#    Jeremy Kolb <jkolb@brandeis.edu>
+
+import gl_XML, glX_XML, glX_proto_common, license
+import sys, getopt, copy, string
+
+def convertStringForXCB(str):
+    tmp = ""
+    special = [ "ARB" ]
+    i = 0
+    while i < len(str):
+        if str[i:i+3] in special:
+            tmp = '%s_%s' % (tmp, string.lower(str[i:i+3]))
+            i = i + 2;
+        elif str[i].isupper():
+            tmp = '%s_%s' % (tmp, string.lower(str[i]))
+        else:
+            tmp = '%s%s' % (tmp, str[i])
+        i += 1
+    return tmp
+
+def hash_pixel_function(func):
+	"""Generate a 'unique' key for a pixel function.  The key is based on
+	the parameters written in the command packet.  This includes any
+	padding that might be added for the original function and the 'NULL
+	image' flag."""
+
+
+	h = ""
+	hash_pre = ""
+	hash_suf = ""
+	for param in func.parameterIterateGlxSend():
+		if param.is_image():
+			[dim, junk, junk, junk, junk] = param.get_dimensions()
+
+			d = (dim + 1) & ~1
+			hash_pre = "%uD%uD_" % (d - 1, d)
+
+			if param.img_null_flag:
+				hash_suf = "_NF"
+
+		h += "%u" % (param.size())
+
+		if func.pad_after(param):
+			h += "4"
+
+
+	n = func.name.replace("%uD" % (dim), "")
+	n = "__glx_%s_%uD%uD" % (n, d - 1, d)
+
+	h = hash_pre + h + hash_suf
+	return [h, n]
+
+
+class glx_pixel_function_stub(glX_XML.glx_function):
+	"""Dummy class used to generate pixel "utility" functions that are
+	shared by multiple dimension image functions.  For example, these
+	objects are used to generate shared functions used to send GLX
+	protocol for TexImage1D and TexImage2D, TexSubImage1D and
+	TexSubImage2D, etc."""
+
+	def __init__(self, func, name):
+		# The parameters to the utility function are the same as the
+		# parameters to the real function except for the added "pad"
+		# parameters.
+
+		self.name = name
+		self.images = []
+		self.parameters = []
+		self.parameters_by_name = {}
+		for _p in func.parameterIterator():
+			p = copy.copy(_p)
+			self.parameters.append(p)
+			self.parameters_by_name[ p.name ] = p
+
+
+			if p.is_image():
+				self.images.append(p)
+				p.height = "height"
+
+				if p.img_yoff == None:
+					p.img_yoff = "yoffset"
+
+				if p.depth:
+					if p.extent == None:
+						p.extent = "extent"
+
+					if p.img_woff == None:
+						p.img_woff = "woffset"
+
+
+			pad_name = func.pad_after(p)
+			if pad_name:
+				pad = copy.copy(p)
+				pad.name = pad_name
+				self.parameters.append(pad)
+				self.parameters_by_name[ pad.name ] = pad
+				
+
+		self.return_type = func.return_type
+
+		self.glx_rop = ~0
+		self.glx_sop = 0
+		self.glx_vendorpriv = 0
+
+		self.glx_doubles_in_order = func.glx_doubles_in_order
+
+		self.vectorequiv = None
+		self.output = None
+		self.can_be_large = func.can_be_large
+		self.reply_always_array = func.reply_always_array
+		self.dimensions_in_reply = func.dimensions_in_reply
+		self.img_reset = None
+
+		self.server_handcode = 0
+		self.client_handcode = 0
+		self.ignore = 0
+
+		self.count_parameter_list = func.count_parameter_list
+		self.counter_list = func.counter_list
+		self.offsets_calculated = 0
+		return
+
+
+class PrintGlxProtoStubs(glX_proto_common.glx_print_proto):
+	def __init__(self):
+		glX_proto_common.glx_print_proto.__init__(self)
+		self.name = "glX_proto_send.py (from Mesa)"
+		self.license = license.bsd_license_template % ( "(C) Copyright IBM Corporation 2004, 2005", "IBM")
+
+
+		self.last_category = ""
+		self.generic_sizes = [3, 4, 6, 8, 12, 16, 24, 32]
+		self.pixel_stubs = {}
+		self.debug = 0
+		return
+
+	def printRealHeader(self):
+		print ''
+		print '#include <GL/gl.h>'
+		print '#include "indirect.h"'
+		print '#include "glxclient.h"'
+		print '#include "indirect_size.h"'
+		print '#include "dispatch.h"'
+		print '#include "glapi.h"'
+		print '#include "glthread.h"'
+		print '#include <GL/glxproto.h>'
+		print '#ifdef USE_XCB'
+		print '#include <X11/Xlib-xcb.h>'
+		print '#include <xcb/xcb.h>'
+		print '#include <xcb/glx.h>'
+		print '#endif /* USE_XCB */'
+
+		print ''
+		print '#define __GLX_PAD(n) (((n) + 3) & ~3)'
+		print ''
+		self.printFastcall()
+		self.printNoinline()
+		print ''
+		print '#if !defined __GNUC__ || __GNUC__ < 3'
+		print '#  define __builtin_expect(x, y) x'
+		print '#endif'
+		print ''
+		print '/* If the size and opcode values are known at compile-time, this will, on'
+		print ' * x86 at least, emit them with a single instruction.'
+		print ' */'
+		print '#define emit_header(dest, op, size)            \\'
+		print '    do { union { short s[2]; int i; } temp;    \\'
+		print '         temp.s[0] = (size); temp.s[1] = (op); \\'
+		print '         *((int *)(dest)) = temp.i; } while(0)'
+		print ''
+		print """NOINLINE CARD32
+__glXReadReply( Display *dpy, size_t size, void * dest, GLboolean reply_is_always_array )
+{
+    xGLXSingleReply reply;
+    
+    (void) _XReply(dpy, (xReply *) & reply, 0, False);
+    if (size != 0) {
+        if ((reply.length > 0) || reply_is_always_array) {
+            const GLint bytes = (reply_is_always_array) 
+              ? (4 * reply.length) : (reply.size * size);
+            const GLint extra = 4 - (bytes & 3);
+
+            _XRead(dpy, dest, bytes);
+            if ( extra < 4 ) {
+                _XEatData(dpy, extra);
+            }
+        }
+        else {
+            (void) memcpy( dest, &(reply.pad3), size);
+        }
+    }
+
+    return reply.retval;
+}
+
+NOINLINE void
+__glXReadPixelReply( Display *dpy, __GLXcontext * gc, unsigned max_dim,
+    GLint width, GLint height, GLint depth, GLenum format, GLenum type,
+    void * dest, GLboolean dimensions_in_reply )
+{
+    xGLXSingleReply reply;
+    GLint size;
+    
+    (void) _XReply(dpy, (xReply *) & reply, 0, False);
+
+    if ( dimensions_in_reply ) {
+        width  = reply.pad3;
+        height = reply.pad4;
+        depth  = reply.pad5;
+	
+	if ((height == 0) || (max_dim < 2)) { height = 1; }
+	if ((depth  == 0) || (max_dim < 3)) { depth  = 1; }
+    }
+
+    size = reply.length * 4;
+    if (size != 0) {
+        void * buf = Xmalloc( size );
+
+        if ( buf == NULL ) {
+            _XEatData(dpy, size);
+            __glXSetError(gc, GL_OUT_OF_MEMORY);
+        }
+        else {
+            const GLint extra = 4 - (size & 3);
+
+            _XRead(dpy, buf, size);
+            if ( extra < 4 ) {
+                _XEatData(dpy, extra);
+            }
+
+            __glEmptyImage(gc, 3, width, height, depth, format, type,
+                           buf, dest);
+            Xfree(buf);
+        }
+    }
+}
+
+#define X_GLXSingle 0
+
+NOINLINE FASTCALL GLubyte *
+__glXSetupSingleRequest( __GLXcontext * gc, GLint sop, GLint cmdlen )
+{
+    xGLXSingleReq * req;
+    Display * const dpy = gc->currentDpy;
+
+    (void) __glXFlushRenderBuffer(gc, gc->pc);
+    LockDisplay(dpy);
+    GetReqExtra(GLXSingle, cmdlen, req);
+    req->reqType = gc->majorOpcode;
+    req->contextTag = gc->currentContextTag;
+    req->glxCode = sop;
+    return (GLubyte *)(req) + sz_xGLXSingleReq;
+}
+
+NOINLINE FASTCALL GLubyte *
+__glXSetupVendorRequest( __GLXcontext * gc, GLint code, GLint vop, GLint cmdlen )
+{
+    xGLXVendorPrivateReq * req;
+    Display * const dpy = gc->currentDpy;
+
+    (void) __glXFlushRenderBuffer(gc, gc->pc);
+    LockDisplay(dpy);
+    GetReqExtra(GLXVendorPrivate, cmdlen, req);
+    req->reqType = gc->majorOpcode;
+    req->glxCode = code;
+    req->vendorCode = vop;
+    req->contextTag = gc->currentContextTag;
+    return (GLubyte *)(req) + sz_xGLXVendorPrivateReq;
+}
+
+const GLuint __glXDefaultPixelStore[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 1 };
+
+#define zero                        (__glXDefaultPixelStore+0)
+#define one                         (__glXDefaultPixelStore+8)
+#define default_pixel_store_1D      (__glXDefaultPixelStore+4)
+#define default_pixel_store_1D_size 20
+#define default_pixel_store_2D      (__glXDefaultPixelStore+4)
+#define default_pixel_store_2D_size 20
+#define default_pixel_store_3D      (__glXDefaultPixelStore+0)
+#define default_pixel_store_3D_size 36
+#define default_pixel_store_4D      (__glXDefaultPixelStore+0)
+#define default_pixel_store_4D_size 36
+"""
+
+		for size in self.generic_sizes:
+			self.print_generic_function(size)
+		return
+
+
+	def printBody(self, api):
+
+		self.pixel_stubs = {}
+		generated_stubs = []
+
+		for func in api.functionIterateGlx():
+			if func.client_handcode: continue
+
+			# If the function is a pixel function with a certain
+			# GLX protocol signature, create a fake stub function
+			# for it.  For example, create a single stub function
+			# that is used to implement both glTexImage1D and
+			# glTexImage2D.
+
+			if func.glx_rop != 0:
+				do_it = 0
+				for image in func.get_images():
+					if image.img_pad_dimensions:
+						do_it = 1
+						break
+
+
+				if do_it:
+					[h, n] = hash_pixel_function(func)
+
+
+					self.pixel_stubs[ func.name ] = n
+					if h not in generated_stubs:
+						generated_stubs.append(h)
+
+						fake_func = glx_pixel_function_stub( func, n )
+						self.printFunction(fake_func, fake_func.name)
+
+
+			self.printFunction(func, func.name)
+			if func.glx_sop and func.glx_vendorpriv:
+				self.printFunction(func, func.glx_vendorpriv_names[0])
+
+		return
+
+
+	def printFunction(self, func, name):
+		footer = '}\n'
+		if func.glx_rop == ~0:
+			print 'static %s' % (func.return_type)
+			print '%s( unsigned opcode, unsigned dim, %s )' % (func.name, func.get_parameter_string())
+			print '{'
+		else:
+			if func.has_different_protocol(name):
+				if func.return_type == "void":
+					ret_string = ''
+				else:
+					ret_string = "return "
+
+				func_name = func.static_glx_name(name)
+				print '#define %s %d' % (func.opcode_vendor_name(name), func.glx_vendorpriv)
+				print '%s gl%s(%s)' % (func.return_type, func_name, func.get_parameter_string())
+				print '{'
+				print '    __GLXcontext * const gc = __glXGetCurrentContext();'
+				print ''
+				print '#ifdef GLX_DIRECT_RENDERING'
+				print '    if (gc->driContext) {'
+				print '    %sCALL_%s(GET_DISPATCH(), (%s));' % (ret_string, func.name, func.get_called_parameter_string())
+				print '    } else'
+				print '#endif'
+				print '    {'
+
+				footer = '}\n}\n'
+			else:
+				print '#define %s %d' % (func.opcode_name(), func.opcode_value())
+
+				print '%s __indirect_gl%s(%s)' % (func.return_type, name, func.get_parameter_string())
+				print '{'
+
+
+		if func.glx_rop != 0 or func.vectorequiv != None:
+			if len(func.images):
+				self.printPixelFunction(func)
+			else:
+				self.printRenderFunction(func)
+		elif func.glx_sop != 0 or func.glx_vendorpriv != 0:
+			self.printSingleFunction(func, name)
+			pass
+		else:
+			print "/* Missing GLX protocol for %s. */" % (name)
+
+		print footer
+		return
+
+
+	def print_generic_function(self, n):
+		size = (n + 3) & ~3
+		print """static FASTCALL NOINLINE void
+generic_%u_byte( GLint rop, const void * ptr )
+{
+    __GLXcontext * const gc = __glXGetCurrentContext();
+    const GLuint cmdlen = %u;
+
+    emit_header(gc->pc, rop, cmdlen);
+    (void) memcpy((void *)(gc->pc + 4), ptr, %u);
+    gc->pc += cmdlen;
+    if (__builtin_expect(gc->pc > gc->limit, 0)) { (void) __glXFlushRenderBuffer(gc, gc->pc); }
+}
+""" % (n, size + 4, size)
+		return
+
+
+	def common_emit_one_arg(self, p, pc, adjust, extra_offset):
+		if p.is_array():
+			src_ptr = p.name
+		else:
+			src_ptr = "&" + p.name
+
+		if p.is_padding:
+			print '(void) memset((void *)(%s + %u), 0, %s);' \
+			    % (pc, p.offset + adjust, p.size_string() )
+		elif not extra_offset:
+			print '(void) memcpy((void *)(%s + %u), (void *)(%s), %s);' \
+			    % (pc, p.offset + adjust, src_ptr, p.size_string() )
+		else:
+			print '(void) memcpy((void *)(%s + %u + %s), (void *)(%s), %s);' \
+			    % (pc, p.offset + adjust, extra_offset, src_ptr, p.size_string() )
+
+	def common_emit_args(self, f, pc, adjust, skip_vla):
+		extra_offset = None
+
+		for p in f.parameterIterateGlxSend( not skip_vla ):
+			if p.name != f.img_reset:
+				self.common_emit_one_arg(p, pc, adjust, extra_offset)
+				
+				if p.is_variable_length():
+					temp = p.size_string()
+					if extra_offset:
+						extra_offset += " + %s" % (temp)
+					else:
+						extra_offset = temp
+
+		return
+
+
+	def pixel_emit_args(self, f, pc, large):
+		"""Emit the arguments for a pixel function.  This differs from
+		common_emit_args in that pixel functions may require padding
+		be inserted (i.e., for the missing width field for
+		TexImage1D), and they may also require a 'NULL image' flag
+		be inserted before the image data."""
+
+		if large:
+			adjust = 8
+		else:
+			adjust = 4
+
+		for param in f.parameterIterateGlxSend():
+			if not param.is_image():
+				self.common_emit_one_arg(param, pc, adjust, None)
+
+				if f.pad_after(param):
+					print '(void) memcpy((void *)(%s + %u), zero, 4);' % (pc, (param.offset + param.size()) + adjust)
+
+			else:
+				[dim, width, height, depth, extent] = param.get_dimensions()
+				if f.glx_rop == ~0:
+					dim_str = "dim"
+				else:
+					dim_str = str(dim)
+
+				if param.is_padding:
+					print '(void) memset((void *)(%s + %u), 0, %s);' \
+					% (pc, (param.offset - 4) + adjust, param.size_string() )
+
+				if param.img_null_flag:
+					if large:
+						print '(void) memcpy((void *)(%s + %u), zero, 4);' % (pc, (param.offset - 4) + adjust)
+					else:
+						print '(void) memcpy((void *)(%s + %u), (void *)((%s == NULL) ? one : zero), 4);' % (pc, (param.offset - 4) + adjust, param.name)
+
+
+				pixHeaderPtr = "%s + %u" % (pc, adjust)
+				pcPtr = "%s + %u" % (pc, param.offset + adjust)
+
+				if not large:
+					if param.img_send_null:
+						condition = '(compsize > 0) && (%s != NULL)' % (param.name)
+					else:
+						condition = 'compsize > 0'
+
+					print 'if (%s) {' % (condition)
+					print '    (*gc->fillImage)(gc, %s, %s, %s, %s, %s, %s, %s, %s, %s);' % (dim_str, width, height, depth, param.img_format, param.img_type, param.name, pcPtr, pixHeaderPtr)
+					print '} else {'
+					print '    (void) memcpy( %s, default_pixel_store_%uD, default_pixel_store_%uD_size );' % (pixHeaderPtr, dim, dim)
+					print '}'
+				else:
+					print '__glXSendLargeImage(gc, compsize, %s, %s, %s, %s, %s, %s, %s, %s, %s);' % (dim_str, width, height, depth, param.img_format, param.img_type, param.name, pcPtr, pixHeaderPtr)
+
+		return
+
+
+	def large_emit_begin(self, f, op_name = None):
+		if not op_name:
+			op_name = f.opcode_real_name()
+
+		print 'const GLint op = %s;' % (op_name)
+		print 'const GLuint cmdlenLarge = cmdlen + 4;'
+		print 'GLubyte * const pc = __glXFlushRenderBuffer(gc, gc->pc);'
+		print '(void) memcpy((void *)(pc + 0), (void *)(&cmdlenLarge), 4);'
+		print '(void) memcpy((void *)(pc + 4), (void *)(&op), 4);'
+		return
+
+
+	def common_func_print_just_start(self, f, name):
+		print '    __GLXcontext * const gc = __glXGetCurrentContext();'
+
+		# The only reason that single and vendor private commands need
+		# a variable called 'dpy' is becuase they use the SyncHandle
+		# macro.  For whatever brain-dead reason, that macro is hard-
+		# coded to use a variable called 'dpy' instead of taking a
+		# parameter.
+
+		# FIXME Simplify the logic related to skip_condition and
+		# FIXME condition_list in this function.  Basically, remove
+		# FIXME skip_condition, and just append the "dpy != NULL" type
+		# FIXME condition to condition_list from the start.  The only
+		# FIXME reason it's done in this confusing way now is to
+		# FIXME minimize the diffs in the generated code.
+
+		if not f.glx_rop:
+			for p in f.parameterIterateOutputs():
+				if p.is_image() and (p.img_format != "GL_COLOR_INDEX" or p.img_type != "GL_BITMAP"):
+					print '    const __GLXattribute * const state = gc->client_state_private;'
+					break
+
+			print '    Display * const dpy = gc->currentDpy;'
+			skip_condition = "dpy != NULL"
+		elif f.can_be_large:
+			skip_condition = "gc->currentDpy != NULL"
+		else:
+			skip_condition = None
+
+
+		if f.return_type != 'void':
+			print '    %s retval = (%s) 0;' % (f.return_type, f.return_type)
+
+
+		if name != None and name not in f.glx_vendorpriv_names:
+			print '#ifndef USE_XCB'
+		self.emit_packet_size_calculation(f, 0)
+		if name != None and name not in f.glx_vendorpriv_names:
+			print '#endif'
+
+		condition_list = []
+		for p in f.parameterIterateCounters():
+			condition_list.append( "%s >= 0" % (p.name) )
+			# 'counter' parameters cannot be negative
+			print "    if (%s < 0) {" % p.name
+			print "        __glXSetError(gc, GL_INVALID_VALUE);"
+			if f.return_type != 'void':
+				print "        return 0;"
+			else:
+				print "        return;"
+			print "    }"
+
+		if skip_condition:
+			condition_list.append( skip_condition )
+
+		if len( condition_list ) > 0:
+			if len( condition_list ) > 1:
+				skip_condition = "(%s)" % (string.join( condition_list, ") && (" ))
+			else:
+				skip_condition = "%s" % (condition_list.pop(0))
+
+			print '    if (__builtin_expect(%s, 1)) {' % (skip_condition)
+			return 1
+		else:
+			return 0
+
+
+	def printSingleFunction(self, f, name):
+		self.common_func_print_just_start(f, name)
+
+		if self.debug:
+			print '        printf( "Enter %%s...\\n", "gl%s" );' % (f.name)
+
+		if name not in f.glx_vendorpriv_names:
+
+			# XCB specific:
+			print '#ifdef USE_XCB'
+			if self.debug:
+				print '        printf("\\tUsing XCB.\\n");'
+			print '        xcb_connection_t *c = XGetXCBConnection(dpy);'
+			print '        (void) __glXFlushRenderBuffer(gc, gc->pc);'
+			xcb_name = 'xcb_glx%s' % convertStringForXCB(name)
+
+			iparams=[]
+			extra_iparams = []
+			output = None
+			for p in f.parameterIterator():
+				if p.is_output:
+					output = p
+
+					if p.is_image():
+						if p.img_format != "GL_COLOR_INDEX" or p.img_type != "GL_BITMAP":
+							extra_iparams.append("state->storePack.swapEndian")
+						else:
+							extra_iparams.append("0")
+					
+						# Hardcode this in.  lsb_first param (apparently always GL_FALSE)
+						# also present in GetPolygonStipple, but taken care of above.
+						if xcb_name == "xcb_glx_read_pixels": 
+							extra_iparams.append("0")
+				else:
+					iparams.append(p.name)
+
+
+			xcb_request = '%s(%s)' % (xcb_name, ", ".join(["c", "gc->currentContextTag"] + iparams + extra_iparams))
+
+			if f.needs_reply():
+				print '        %s_reply_t *reply = %s_reply(c, %s, NULL);' % (xcb_name, xcb_name, xcb_request)
+				if output and f.reply_always_array:
+					print '        (void)memcpy(%s, %s_data(reply), %s_data_length(reply) * sizeof(%s));' % (output.name, xcb_name, xcb_name, output.get_base_type_string())
+
+				elif output and not f.reply_always_array:
+					if not output.is_image():
+						print '        if (%s_data_length(reply) == 0)' % (xcb_name)
+						print '            (void)memcpy(%s, &reply->datum, sizeof(reply->datum));' % (output.name)
+						print '        else'
+					print '        (void)memcpy(%s, %s_data(reply), %s_data_length(reply) * sizeof(%s));' % (output.name, xcb_name, xcb_name, output.get_base_type_string())
+
+
+				if f.return_type != 'void':
+					print '        retval = reply->ret_val;'
+				print '        free(reply);'
+			else:
+				print '        ' + xcb_request + ';'
+			print '#else'
+			# End of XCB specific.
+
+
+		if f.parameters != []:
+			pc_decl = "GLubyte const * pc ="
+		else:
+			pc_decl = "(void)"
+
+		if name in f.glx_vendorpriv_names:
+			print '        %s __glXSetupVendorRequest(gc, %s, %s, cmdlen);' % (pc_decl, f.opcode_real_name(), f.opcode_vendor_name(name))
+		else:
+			print '        %s __glXSetupSingleRequest(gc, %s, cmdlen);' % (pc_decl, f.opcode_name())
+
+		self.common_emit_args(f, "pc", 0, 0)
+
+		images = f.get_images()
+
+		for img in images:
+			if img.is_output:
+				o = f.command_fixed_length() - 4
+				print '        *(int32_t *)(pc + %u) = 0;' % (o)
+				if img.img_format != "GL_COLOR_INDEX" or img.img_type != "GL_BITMAP":
+					print '        * (int8_t *)(pc + %u) = state->storePack.swapEndian;' % (o)
+		
+				if f.img_reset:
+					print '        * (int8_t *)(pc + %u) = %s;' % (o + 1, f.img_reset)
+
+
+		return_name = ''
+		if f.needs_reply():
+			if f.return_type != 'void':
+				return_name = " retval"
+				return_str = " retval = (%s)" % (f.return_type)
+			else:
+				return_str = " (void)"
+
+			got_reply = 0
+
+			for p in f.parameterIterateOutputs():
+				if p.is_image():
+					[dim, w, h, d, junk] = p.get_dimensions()
+					if f.dimensions_in_reply:
+						print "        __glXReadPixelReply(dpy, gc, %u, 0, 0, 0, %s, %s, %s, GL_TRUE);" % (dim, p.img_format, p.img_type, p.name)
+					else:
+						print "        __glXReadPixelReply(dpy, gc, %u, %s, %s, %s, %s, %s, %s, GL_FALSE);" % (dim, w, h, d, p.img_format, p.img_type, p.name)
+
+					got_reply = 1
+				else:
+					if f.reply_always_array:
+						aa = "GL_TRUE"
+					else:
+						aa = "GL_FALSE"
+
+					# gl_parameter.size() returns the size
+					# of the entire data item.  If the
+					# item is a fixed-size array, this is
+					# the size of the whole array.  This
+					# is not what __glXReadReply wants. It
+					# wants the size of a single data
+					# element in the reply packet.
+					# Dividing by the array size (1 for
+					# non-arrays) gives us this.
+
+					s = p.size() / p.get_element_count()
+					print "       %s __glXReadReply(dpy, %s, %s, %s);" % (return_str, s, p.name, aa)
+					got_reply = 1
+
+
+			# If a reply wasn't read to fill an output parameter,
+			# read a NULL reply to get the return value.
+
+			if not got_reply:
+				print "       %s __glXReadReply(dpy, 0, NULL, GL_FALSE);" % (return_str)
+
+
+		elif self.debug:
+			# Only emit the extra glFinish call for functions
+			# that don't already require a reply from the server.
+			print '        __indirect_glFinish();'
+
+		if self.debug:
+			print '        printf( "Exit %%s.\\n", "gl%s" );' % (name)
+
+
+		print '        UnlockDisplay(dpy); SyncHandle();'
+
+		if name not in f.glx_vendorpriv_names:
+			print '#endif /* USE_XCB */'
+
+		print '    }'
+		print '    return%s;' % (return_name)
+		return
+
+
+	def printPixelFunction(self, f):
+		if self.pixel_stubs.has_key( f.name ):
+			# Normally gl_function::get_parameter_string could be
+			# used.  However, this call needs to have the missing
+			# dimensions (e.g., a fake height value for
+			# glTexImage1D) added in.
+
+			p_string = ""
+			for param in f.parameterIterateGlxSend():
+				if param.is_padding:
+					continue
+
+				p_string += ", " + param.name
+
+				if param.is_image():
+					[dim, junk, junk, junk, junk] = param.get_dimensions()
+
+				if f.pad_after(param):
+					p_string += ", 1"
+
+			print '    %s(%s, %u%s );' % (self.pixel_stubs[f.name] , f.opcode_name(), dim, p_string)
+			return
+
+
+		if self.common_func_print_just_start(f, None):
+			trailer = "    }"
+		else:
+			trailer = None
+
+
+		if f.can_be_large:
+			print 'if (cmdlen <= gc->maxSmallRenderCommandSize) {'
+			print '    if ( (gc->pc + cmdlen) > gc->bufEnd ) {'
+			print '        (void) __glXFlushRenderBuffer(gc, gc->pc);'
+			print '    }'
+
+		if f.glx_rop == ~0:
+			opcode = "opcode"
+		else:
+			opcode = f.opcode_real_name()
+
+		print 'emit_header(gc->pc, %s, cmdlen);' % (opcode)
+
+		self.pixel_emit_args( f, "gc->pc", 0 )
+		print 'gc->pc += cmdlen;'
+		print 'if (gc->pc > gc->limit) { (void) __glXFlushRenderBuffer(gc, gc->pc); }'
+
+		if f.can_be_large:
+			print '}'
+			print 'else {'
+
+			self.large_emit_begin(f, opcode)
+			self.pixel_emit_args(f, "pc", 1)
+
+			print '}'
+
+		if trailer: print trailer
+		return
+
+
+	def printRenderFunction(self, f):
+		# There is a class of GL functions that take a single pointer
+		# as a parameter.  This pointer points to a fixed-size chunk
+		# of data, and the protocol for this functions is very
+		# regular.  Since they are so regular and there are so many
+		# of them, special case them with generic functions.  On
+		# x86, this saves about 26KB in the libGL.so binary.
+
+		if f.variable_length_parameter() == None and len(f.parameters) == 1:
+			p = f.parameters[0]
+			if p.is_pointer():
+				cmdlen = f.command_fixed_length()
+				if cmdlen in self.generic_sizes:
+					print '    generic_%u_byte( %s, %s );' % (cmdlen, f.opcode_real_name(), p.name)
+					return
+
+		if self.common_func_print_just_start(f, None):
+			trailer = "    }"
+		else:
+			trailer = None
+
+		if self.debug:
+			print 'printf( "Enter %%s...\\n", "gl%s" );' % (f.name)
+
+		if f.can_be_large:
+			print 'if (cmdlen <= gc->maxSmallRenderCommandSize) {'
+			print '    if ( (gc->pc + cmdlen) > gc->bufEnd ) {'
+			print '        (void) __glXFlushRenderBuffer(gc, gc->pc);'
+			print '    }'
+
+		print 'emit_header(gc->pc, %s, cmdlen);' % (f.opcode_real_name())
+
+		self.common_emit_args(f, "gc->pc", 4, 0)
+		print 'gc->pc += cmdlen;'
+		print 'if (__builtin_expect(gc->pc > gc->limit, 0)) { (void) __glXFlushRenderBuffer(gc, gc->pc); }'
+
+		if f.can_be_large:
+			print '}'
+			print 'else {'
+
+			self.large_emit_begin(f)
+			self.common_emit_args(f, "pc", 8, 1)
+
+			p = f.variable_length_parameter()
+			print '    __glXSendLargeCommand(gc, pc, %u, %s, %s);' % (p.offset + 8, p.name, p.size_string())
+			print '}'
+
+		if self.debug:
+			print '__indirect_glFinish();'
+			print 'printf( "Exit %%s.\\n", "gl%s" );' % (f.name)
+
+		if trailer: print trailer
+		return
+
+
+class PrintGlxProtoInit_c(gl_XML.gl_print_base):
+	def __init__(self):
+		gl_XML.gl_print_base.__init__(self)
+
+		self.name = "glX_proto_send.py (from Mesa)"
+		self.license = license.bsd_license_template % ( \
+"""Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
+(C) Copyright IBM Corporation 2004""", "PRECISION INSIGHT, IBM")
+		return
+
+
+	def printRealHeader(self):
+		print """/**
+ * \\file indirect_init.c
+ * Initialize indirect rendering dispatch table.
+ *
+ * \\author Kevin E. Martin <kevin@precisioninsight.com>
+ * \\author Brian Paul <brian@precisioninsight.com>
+ * \\author Ian Romanick <idr@us.ibm.com>
+ */
+
+#include "indirect_init.h"
+#include "indirect.h"
+#include "glapi.h"
+
+
+/**
+ * No-op function used to initialize functions that have no GLX protocol
+ * support.
+ */
+static int NoOp(void)
+{
+    return 0;
+}
+
+/**
+ * Create and initialize a new GL dispatch table.  The table is initialized
+ * with GLX indirect rendering protocol functions.
+ */
+__GLapi * __glXNewIndirectAPI( void )
+{
+    __GLapi *glAPI;
+    GLuint entries;
+
+    entries = _glapi_get_dispatch_table_size();
+    glAPI = (__GLapi *) Xmalloc(entries * sizeof(void *));
+
+    /* first, set all entries to point to no-op functions */
+    {
+       int i;
+       void **dispatch = (void **) glAPI;
+       for (i = 0; i < entries; i++) {
+          dispatch[i] = (void *) NoOp;
+       }
+    }
+
+    /* now, initialize the entries we understand */"""
+
+	def printRealFooter(self):
+		print """
+    return glAPI;
+}
+"""
+		return
+
+
+	def printBody(self, api):
+		for [name, number] in api.categoryIterate():
+			if number != None:
+				preamble = '\n    /* %3u. %s */\n\n' % (int(number), name)
+			else:
+				preamble = '\n    /* %s */\n\n' % (name)
+
+			for func in api.functionIterateByCategory(name):
+				if func.client_supported_for_indirect():
+					print '%s    glAPI->%s = __indirect_gl%s;' % (preamble, func.name, func.name)
+					preamble = ''
+
+		return
+
+
+class PrintGlxProtoInit_h(gl_XML.gl_print_base):
+	def __init__(self):
+		gl_XML.gl_print_base.__init__(self)
+
+		self.name = "glX_proto_send.py (from Mesa)"
+		self.license = license.bsd_license_template % ( \
+"""Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
+(C) Copyright IBM Corporation 2004""", "PRECISION INSIGHT, IBM")
+		self.header_tag = "_INDIRECT_H_"
+
+		self.last_category = ""
+		return
+
+
+	def printRealHeader(self):
+		print """/**
+ * \\file
+ * Prototypes for indirect rendering functions.
+ *
+ * \\author Kevin E. Martin <kevin@precisioninsight.com>
+ * \\author Ian Romanick <idr@us.ibm.com>
+ */
+"""
+		self.printVisibility( "HIDDEN", "hidden" )
+		self.printFastcall()
+		self.printNoinline()
+
+		print """
+#include "glxclient.h"
+
+extern HIDDEN NOINLINE CARD32 __glXReadReply( Display *dpy, size_t size,
+    void * dest, GLboolean reply_is_always_array );
+
+extern HIDDEN NOINLINE void __glXReadPixelReply( Display *dpy,
+    __GLXcontext * gc, unsigned max_dim, GLint width, GLint height,
+    GLint depth, GLenum format, GLenum type, void * dest,
+    GLboolean dimensions_in_reply );
+
+extern HIDDEN NOINLINE FASTCALL GLubyte * __glXSetupSingleRequest(
+    __GLXcontext * gc, GLint sop, GLint cmdlen );
+
+extern HIDDEN NOINLINE FASTCALL GLubyte * __glXSetupVendorRequest(
+    __GLXcontext * gc, GLint code, GLint vop, GLint cmdlen );
+"""
+
+
+	def printBody(self, api):
+		for func in api.functionIterateGlx():
+			params = func.get_parameter_string()
+
+			print 'extern HIDDEN %s __indirect_gl%s(%s);' % (func.return_type, func.name, params)
+
+			for n in func.entry_points:
+				if func.has_different_protocol(n):
+					asdf = func.static_glx_name(n)
+					if asdf not in func.static_entry_points:
+						print 'extern HIDDEN %s gl%s(%s);' % (func.return_type, asdf, params)
+					else:
+						print 'GLAPI %s GLAPIENTRY gl%s(%s);' % (func.return_type, asdf, params)
+						
+					break
+
+
+
+def show_usage():
+	print "Usage: %s [-f input_file_name] [-m output_mode] [-d]" % sys.argv[0]
+	print "    -m output_mode   Output mode can be one of 'proto', 'init_c' or 'init_h'."
+	print "    -d               Enable extra debug information in the generated code."
+	sys.exit(1)
+
+
+if __name__ == '__main__':
+	file_name = "gl_API.xml"
+
+	try:
+		(args, trail) = getopt.getopt(sys.argv[1:], "f:m:d")
+	except Exception,e:
+		show_usage()
+
+	debug = 0
+	mode = "proto"
+	for (arg,val) in args:
+		if arg == "-f":
+			file_name = val
+		elif arg == "-m":
+			mode = val
+		elif arg == "-d":
+			debug = 1
+
+	if mode == "proto":
+		printer = PrintGlxProtoStubs()
+	elif mode == "init_c":
+		printer = PrintGlxProtoInit_c()
+	elif mode == "init_h":
+		printer = PrintGlxProtoInit_h()
+	else:
+		show_usage()
+
+
+	printer.debug = debug
+	api = gl_XML.parse_GL_API( file_name, glX_XML.glx_item_factory() )
+
+	printer.Print( api )
diff --git a/src/mesa/glapi/gen/glX_proto_size.py b/src/mesa/glapi/gen/glX_proto_size.py
new file mode 100644
index 0000000000..95cb5110cc
--- /dev/null
+++ b/src/mesa/glapi/gen/glX_proto_size.py
@@ -0,0 +1,704 @@
+#!/usr/bin/env python
+
+# (C) Copyright IBM Corporation 2004, 2005
+# All Rights Reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# on the rights to use, copy, modify, merge, publish, distribute, sub
+# license, and/or sell copies of the Software, and to permit persons to whom
+# the Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
+# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+#
+# Authors:
+#    Ian Romanick <idr@us.ibm.com>
+
+import gl_XML, glX_XML
+import license
+import sys, getopt, copy, string
+
+
+class glx_enum_function:
+	def __init__(self, func_name, enum_dict):
+		self.name = func_name
+		self.mode = 1
+		self.sig = None
+
+		# "enums" is a set of lists.  The element in the set is the
+		# value of the enum.  The list is the list of names for that
+		# value.  For example, [0x8126] = {"POINT_SIZE_MIN",
+		# "POINT_SIZE_MIN_ARB", "POINT_SIZE_MIN_EXT",
+		# "POINT_SIZE_MIN_SGIS"}.
+
+		self.enums = {}
+
+		# "count" is indexed by count values.  Each element of count
+		# is a list of index to "enums" that have that number of
+		# associated data elements.  For example, [4] = 
+		# {GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR, GL_EMISSION,
+		# GL_AMBIENT_AND_DIFFUSE} (the enum names are used here,
+		# but the actual hexadecimal values would be in the array).
+
+		self.count = {}
+
+
+		# Fill self.count and self.enums using the dictionary of enums
+		# that was passed in.  The generic Get functions (e.g.,
+		# GetBooleanv and friends) are handled specially here.  In
+		# the data the generic Get functions are refered to as "Get".
+
+		if func_name in ["GetIntegerv", "GetBooleanv", "GetFloatv", "GetDoublev"]:
+			match_name = "Get"
+		else:
+			match_name = func_name
+
+		mode_set = 0
+		for enum_name in enum_dict:
+			e = enum_dict[ enum_name ]
+
+			if e.functions.has_key( match_name ):
+				[count, mode] = e.functions[ match_name ]
+
+				if mode_set and mode != self.mode:
+					raise RuntimeError("Not all enums for %s have the same mode." % (func_name))
+
+				self.mode = mode
+
+				if self.enums.has_key( e.value ):
+					if e.name not in self.enums[ e.value ]:
+						self.enums[ e.value ].append( e )
+				else:
+					if not self.count.has_key( count ):
+						self.count[ count ] = []
+
+					self.enums[ e.value ] = [ e ]
+					self.count[ count ].append( e.value )
+
+
+		return
+
+
+	def signature( self ):
+		if self.sig == None:
+			self.sig = ""
+			for i in self.count:
+				if i == None:
+					raise RuntimeError("i is None.  WTF?")
+
+				self.count[i].sort()
+				for e in self.count[i]:
+					self.sig += "%04x,%d," % (e, i)
+
+		return self.sig
+
+
+	def is_set( self ):
+		return self.mode
+
+
+	def PrintUsingTable(self):
+		"""Emit the body of the __gl*_size function using a pair
+		of look-up tables and a mask.  The mask is calculated such
+		that (e & mask) is unique for all the valid values of e for
+		this function.  The result of (e & mask) is used as an index
+		into the first look-up table.  If it matches e, then the
+		same entry of the second table is returned.  Otherwise zero
+		is returned.
+		
+		It seems like this should cause better code to be generated.
+		However, on x86 at least, the resulting .o file is about 20%
+		larger then the switch-statment version.  I am leaving this
+		code in because the results may be different on other
+		platforms (e.g., PowerPC or x86-64)."""
+
+		return 0
+		count = 0
+		for a in self.enums:
+			count += 1
+
+		if self.count.has_key(-1):
+			return 0
+
+		# Determine if there is some mask M, such that M = (2^N) - 1,
+		# that will generate unique values for all of the enums.
+
+		mask = 0
+		for i in [1, 2, 3, 4, 5, 6, 7, 8]:
+			mask = (1 << i) - 1
+
+			fail = 0;
+			for a in self.enums:
+				for b in self.enums:
+					if a != b:
+						if (a & mask) == (b & mask):
+							fail = 1;
+
+			if not fail:
+				break;
+			else:
+				mask = 0
+
+		if (mask != 0) and (mask < (2 * count)):
+			masked_enums = {}
+			masked_count = {}
+
+			for i in range(0, mask + 1):
+				masked_enums[i] = "0";
+				masked_count[i] = 0;
+
+			for c in self.count:
+				for e in self.count[c]:
+					i = e & mask
+					enum_obj = self.enums[e][0]
+					masked_enums[i] = '0x%04x /* %s */' % (e, enum_obj.name )
+					masked_count[i] = c
+
+
+			print '    static const GLushort a[%u] = {' % (mask + 1)
+			for e in masked_enums:
+				print '        %s, ' % (masked_enums[e])
+			print '    };'
+
+			print '    static const GLubyte b[%u] = {' % (mask + 1)
+			for c in masked_count:
+				print '        %u, ' % (masked_count[c])
+			print '    };'
+
+			print '    const unsigned idx = (e & 0x%02xU);' % (mask)
+			print ''
+			print '    return (e == a[idx]) ? (GLint) b[idx] : 0;'
+			return 1;
+		else:
+			return 0;
+
+
+	def PrintUsingSwitch(self, name):
+		"""Emit the body of the __gl*_size function using a 
+		switch-statement."""
+
+		print '    switch( e ) {'
+
+		for c in self.count:
+			for e in self.count[c]:
+				first = 1
+
+				# There may be multiple enums with the same
+				# value.  This happens has extensions are
+				# promoted from vendor-specific or EXT to
+				# ARB and to the core.  Emit the first one as
+				# a case label, and emit the others as
+				# commented-out case labels.
+
+				list = {}
+				for enum_obj in self.enums[e]:
+					list[ enum_obj.priority() ] = enum_obj.name
+
+				keys = list.keys()
+				keys.sort()
+				for k in keys:
+					j = list[k]
+					if first:
+						print '        case GL_%s:' % (j)
+						first = 0
+					else:
+						print '/*      case GL_%s:*/' % (j)
+					
+			if c == -1:
+				print '            return __gl%s_variable_size( e );' % (name)
+			else:
+				print '            return %u;' % (c)
+					
+		print '        default: return 0;'
+		print '    }'
+
+
+	def Print(self, name):
+		print 'INTERNAL PURE FASTCALL GLint'
+		print '__gl%s_size( GLenum e )' % (name)
+		print '{'
+
+		if not self.PrintUsingTable():
+			self.PrintUsingSwitch(name)
+
+		print '}'
+		print ''
+
+
+class glx_server_enum_function(glx_enum_function):
+	def __init__(self, func, enum_dict):
+		glx_enum_function.__init__(self, func.name, enum_dict)
+		
+		self.function = func
+		return
+
+
+	def signature( self ):
+		if self.sig == None:
+			sig = glx_enum_function.signature(self)
+
+			p = self.function.variable_length_parameter()
+			if p:
+				sig += "%u" % (p.size())
+
+			self.sig = sig
+
+		return self.sig;
+
+
+	def Print(self, name, printer):
+		f = self.function
+		printer.common_func_print_just_header( f )
+
+		fixup = []
+		
+		foo = {}
+		for param_name in f.count_parameter_list:
+			o = f.offset_of( param_name )
+			foo[o] = param_name
+
+		for param_name in f.counter_list:
+			o = f.offset_of( param_name )
+			foo[o] = param_name
+
+		keys = foo.keys()
+		keys.sort()
+		for o in keys:
+			p = f.parameters_by_name[ foo[o] ]
+
+			printer.common_emit_one_arg(p, "pc", 0)
+			fixup.append( p.name )
+
+
+		print '    GLsizei compsize;'
+		print ''
+
+		printer.common_emit_fixups(fixup)
+
+		print ''
+		print '    compsize = __gl%s_size(%s);' % (f.name, string.join(f.count_parameter_list, ","))
+		p = f.variable_length_parameter()
+		print '    return __GLX_PAD(%s);' % (p.size_string())
+
+		print '}'
+		print ''
+
+
+class PrintGlxSizeStubs_common(gl_XML.gl_print_base):
+	do_get = (1 << 0)
+	do_set = (1 << 1)
+
+	def __init__(self, which_functions):
+		gl_XML.gl_print_base.__init__(self)
+
+		self.name = "glX_proto_size.py (from Mesa)"
+		self.license = license.bsd_license_template % ( "(C) Copyright IBM Corporation 2004", "IBM")
+
+		self.emit_set = ((which_functions & PrintGlxSizeStubs_common.do_set) != 0)
+		self.emit_get = ((which_functions & PrintGlxSizeStubs_common.do_get) != 0)
+		return
+
+
+class PrintGlxSizeStubs_c(PrintGlxSizeStubs_common):
+	def printRealHeader(self):
+		print ''
+		print '#include <GL/gl.h>'
+		if self.emit_get:
+			print '#include "indirect_size_get.h"'
+			print '#include "glxserver.h"'
+			print '#include "indirect_util.h"'
+		
+		print '#include "indirect_size.h"'
+
+		print ''
+		self.printPure()
+		print ''
+		self.printFastcall()
+		print ''
+		self.printVisibility( "INTERNAL", "internal" )
+		print ''
+		print ''
+		print '#if defined(__CYGWIN__) || defined(__MINGW32__) || defined(__APPLE__)'
+		print '#  undef HAVE_ALIAS'
+		print '#endif'
+		print '#ifdef HAVE_ALIAS'
+		print '#  define ALIAS2(from,to) \\'
+		print '    INTERNAL PURE FASTCALL GLint __gl ## from ## _size( GLenum e ) \\'
+		print '        __attribute__ ((alias( # to )));'
+		print '#  define ALIAS(from,to) ALIAS2( from, __gl ## to ## _size )'
+		print '#else'
+		print '#  define ALIAS(from,to) \\'
+		print '    INTERNAL PURE FASTCALL GLint __gl ## from ## _size( GLenum e ) \\'
+		print '    { return __gl ## to ## _size( e ); }'
+		print '#endif'
+		print ''
+		print ''
+
+
+	def printBody(self, api):
+		enum_sigs = {}
+		aliases = []
+
+		for func in api.functionIterateGlx():
+			ef = glx_enum_function( func.name, api.enums_by_name )
+			if len(ef.enums) == 0:
+				continue
+
+			if (ef.is_set() and self.emit_set) or (not ef.is_set() and self.emit_get):
+				sig = ef.signature()
+				if enum_sigs.has_key( sig ):
+					aliases.append( [func.name, enum_sigs[ sig ]] )
+				else:
+					enum_sigs[ sig ] = func.name
+					ef.Print( func.name )
+
+
+		for [alias_name, real_name] in aliases:
+			print 'ALIAS( %s, %s )' % (alias_name, real_name)
+
+
+				
+class PrintGlxSizeStubs_h(PrintGlxSizeStubs_common):
+	def printRealHeader(self):
+		print """/**
+ * \\file
+ * Prototypes for functions used to determine the number of data elements in
+ * various GLX protocol messages.
+ *
+ * \\author Ian Romanick <idr@us.ibm.com>
+ */
+"""
+		self.printPure();
+		print ''
+		self.printFastcall();
+		print ''
+		self.printVisibility( "INTERNAL", "internal" );
+		print ''
+
+
+	def printBody(self, api):
+		for func in api.functionIterateGlx():
+			ef = glx_enum_function( func.name, api.enums_by_name )
+			if len(ef.enums) == 0:
+				continue
+
+			if (ef.is_set() and self.emit_set) or (not ef.is_set() and self.emit_get):
+				print 'extern INTERNAL PURE FASTCALL GLint __gl%s_size(GLenum);' % (func.name)
+
+
+class PrintGlxReqSize_common(gl_XML.gl_print_base):
+	"""Common base class for PrintGlxSizeReq_h and PrintGlxSizeReq_h.
+
+	The main purpose of this common base class is to provide the infrastructure
+	for the derrived classes to iterate over the same set of functions.
+	"""
+
+	def __init__(self):
+		gl_XML.gl_print_base.__init__(self)
+
+		self.name = "glX_proto_size.py (from Mesa)"
+		self.license = license.bsd_license_template % ( "(C) Copyright IBM Corporation 2005", "IBM")
+
+
+class PrintGlxReqSize_h(PrintGlxReqSize_common):
+	def __init__(self):
+		PrintGlxReqSize_common.__init__(self)
+		self.header_tag = "_INDIRECT_REQSIZE_H_"
+
+
+	def printRealHeader(self):
+		self.printVisibility("HIDDEN", "hidden")
+		print ''
+		self.printPure()
+		print ''
+
+
+	def printBody(self, api):
+		for func in api.functionIterateGlx():
+			if not func.ignore and func.has_variable_size_request():
+				print 'extern PURE HIDDEN int __glX%sReqSize(const GLbyte *pc, Bool swap);' % (func.name)
+
+
+class PrintGlxReqSize_c(PrintGlxReqSize_common):
+	"""Create the server-side 'request size' functions.
+
+	Create the server-side functions that are used to determine what the
+	size of a varible length command should be.  The server then uses
+	this value to determine if the incoming command packed it malformed.
+	"""
+
+	def __init__(self):
+		PrintGlxReqSize_common.__init__(self)
+		self.counter_sigs = {}
+
+
+	def printRealHeader(self):
+		print ''
+		print '#include <GL/gl.h>'
+		print '#include "glxserver.h"'
+		print '#include "glxbyteorder.h"'
+		print '#include "indirect_size.h"'
+		print '#include "indirect_reqsize.h"'
+		print ''
+		print '#define __GLX_PAD(x)  (((x) + 3) & ~3)'
+		print ''
+		print '#if defined(__CYGWIN__) || defined(__MINGW32__)'
+		print '#  undef HAVE_ALIAS'
+		print '#endif'
+		print '#ifdef HAVE_ALIAS'
+		print '#  define ALIAS2(from,to) \\'
+		print '    GLint __glX ## from ## ReqSize( const GLbyte * pc, Bool swap ) \\'
+		print '        __attribute__ ((alias( # to )));'
+		print '#  define ALIAS(from,to) ALIAS2( from, __glX ## to ## ReqSize )'
+		print '#else'
+		print '#  define ALIAS(from,to) \\'
+		print '    GLint __glX ## from ## ReqSize( const GLbyte * pc, Bool swap ) \\'
+		print '    { return __glX ## to ## ReqSize( pc, swap ); }'
+		print '#endif'
+		print ''
+		print ''
+
+
+	def printBody(self, api):
+		aliases = []
+		enum_functions = {}
+		enum_sigs = {}
+
+		for func in api.functionIterateGlx():
+			if not func.has_variable_size_request(): continue
+
+			ef = glx_server_enum_function( func, api.enums_by_name )
+			if len(ef.enums) == 0: continue
+
+			sig = ef.signature()
+
+			if not enum_functions.has_key(func.name):
+				enum_functions[ func.name ] = sig
+
+			if not enum_sigs.has_key( sig ):
+				enum_sigs[ sig ] = ef
+			
+
+
+		for func in api.functionIterateGlx():
+			# Even though server-handcode fuctions are on "the
+			# list", and prototypes are generated for them, there
+			# isn't enough information to generate a size
+			# function.  If there was enough information, they
+			# probably wouldn't need to be handcoded in the first
+			# place!
+
+			if func.server_handcode: continue
+			if not func.has_variable_size_request(): continue
+
+			if enum_functions.has_key(func.name):
+				sig = enum_functions[func.name]
+				ef = enum_sigs[ sig ]
+
+				if ef.name != func.name:
+					aliases.append( [func.name, ef.name] )
+				else:
+					ef.Print( func.name, self )
+
+			elif func.images:
+				self.printPixelFunction(func)
+			elif func.has_variable_size_request():
+				a = self.printCountedFunction(func)
+				if a: aliases.append(a)
+
+
+		for [alias_name, real_name] in aliases:
+			print 'ALIAS( %s, %s )' % (alias_name, real_name)
+
+		return
+
+
+	def common_emit_fixups(self, fixup):
+		"""Utility function to emit conditional byte-swaps."""
+
+		if fixup:
+			print '    if (swap) {'
+			for name in fixup:
+				print '        %s = bswap_32(%s);' % (name, name)
+			print '    }'
+
+		return
+
+
+	def common_emit_one_arg(self, p, pc, adjust):
+		offset = p.offset
+		dst = p.string()
+		src = '(%s *)' % (p.type_string())
+		print '%-18s = *%11s(%s + %u);' % (dst, src, pc, offset + adjust);
+		return
+
+
+	def common_func_print_just_header(self, f):
+		print 'int'
+		print '__glX%sReqSize( const GLbyte * pc, Bool swap )' % (f.name)
+		print '{'
+
+
+	def printPixelFunction(self, f):
+		self.common_func_print_just_header(f)
+		
+		f.offset_of( f.parameters[0].name )
+		[dim, w, h, d, junk] = f.get_images()[0].get_dimensions()
+
+		print '    GLint row_length   = *  (GLint *)(pc +  4);'
+
+		if dim < 3:
+			fixup = ['row_length', 'skip_rows', 'alignment']
+			print '    GLint image_height = 0;'
+			print '    GLint skip_images  = 0;'
+			print '    GLint skip_rows    = *  (GLint *)(pc +  8);'
+			print '    GLint alignment    = *  (GLint *)(pc + 16);'
+		else:
+			fixup = ['row_length', 'image_height', 'skip_rows', 'skip_images', 'alignment']
+			print '    GLint image_height = *  (GLint *)(pc +  8);'
+			print '    GLint skip_rows    = *  (GLint *)(pc + 16);'
+			print '    GLint skip_images  = *  (GLint *)(pc + 20);'
+			print '    GLint alignment    = *  (GLint *)(pc + 32);'
+
+		img = f.images[0]
+		for p in f.parameterIterateGlxSend():
+			if p.name in [w, h, d, img.img_format, img.img_type, img.img_target]:
+				self.common_emit_one_arg(p, "pc", 0)
+				fixup.append( p.name )
+
+		print ''
+
+		self.common_emit_fixups(fixup)
+
+		if img.img_null_flag:
+			print ''
+			print '	   if (*(CARD32 *) (pc + %s))' % (img.offset - 4)
+			print '	       return 0;'
+
+		print ''
+		print '    return __glXImageSize(%s, %s, %s, %s, %s, %s,' % (img.img_format, img.img_type, img.img_target, w, h, d )
+		print '                          image_height, row_length, skip_images,'
+		print '                          skip_rows, alignment);'
+		print '}'
+		print ''
+		return
+
+
+	def printCountedFunction(self, f):
+
+		sig = ""
+		offset = 0
+		fixup = []
+		params = []
+		plus = ''
+		size = ''
+		param_offsets = {}
+
+		# Calculate the offset of each counter parameter and the
+		# size string for the variable length parameter(s).  While
+		# that is being done, calculate a unique signature for this
+		# function.
+
+		for p in f.parameterIterateGlxSend():
+			if p.is_counter:
+				fixup.append( p.name )
+				params.append( p )
+			elif p.counter:
+				s = p.size()
+				if s == 0: s = 1
+
+				sig += "(%u,%u)" % (f.offset_of(p.counter), s)
+				size += '%s%s' % (plus, p.size_string())
+				plus = ' + '
+
+
+		# If the calculated signature matches a function that has
+		# already be emitted, don't emit this function.  Instead, add
+		# it to the list of function aliases.
+
+		if self.counter_sigs.has_key(sig):
+			n = self.counter_sigs[sig];
+			alias = [f.name, n]
+		else:
+			alias = None
+			self.counter_sigs[sig] = f.name
+
+			self.common_func_print_just_header(f)
+
+			for p in params:
+				self.common_emit_one_arg(p, "pc", 0)
+
+
+			print ''
+			self.common_emit_fixups(fixup)
+			print ''
+
+			print '    return __GLX_PAD(%s);' % (size)
+			print '}'
+			print ''
+
+		return alias
+
+
+def show_usage():
+	print "Usage: %s [-f input_file_name] -m output_mode [--only-get | --only-set] [--get-alias-set]" % sys.argv[0]
+	print "    -m output_mode   Output mode can be one of 'size_c' or 'size_h'."
+	print "    --only-get       Only emit 'get'-type functions."
+	print "    --only-set       Only emit 'set'-type functions."
+	print ""
+	print "By default, both 'get' and 'set'-type functions are emitted."
+	sys.exit(1)
+
+
+if __name__ == '__main__':
+	file_name = "gl_API.xml"
+
+	try:
+		(args, trail) = getopt.getopt(sys.argv[1:], "f:m:h:", ["only-get", "only-set", "header-tag"])
+	except Exception,e:
+		show_usage()
+
+	mode = None
+	header_tag = None
+	which_functions = PrintGlxSizeStubs_common.do_get | PrintGlxSizeStubs_common.do_set
+
+	for (arg,val) in args:
+		if arg == "-f":
+			file_name = val
+		elif arg == "-m":
+			mode = val
+		elif arg == "--only-get":
+			which_functions = PrintGlxSizeStubs_common.do_get
+		elif arg == "--only-set":
+			which_functions = PrintGlxSizeStubs_common.do_set
+		elif (arg == '-h') or (arg == "--header-tag"):
+			header_tag = val
+
+	if mode == "size_c":
+		printer = PrintGlxSizeStubs_c( which_functions )
+	elif mode == "size_h":
+		printer = PrintGlxSizeStubs_h( which_functions )
+		if header_tag:
+			printer.header_tag = header_tag
+	elif mode == "reqsize_c":
+		printer = PrintGlxReqSize_c()
+	elif mode == "reqsize_h":
+		printer = PrintGlxReqSize_h()
+	else:
+		show_usage()
+
+	api = gl_XML.parse_GL_API( file_name, glX_XML.glx_item_factory() )
+
+
+	printer.Print( api )
diff --git a/src/mesa/glapi/gen/glX_server_table.py b/src/mesa/glapi/gen/glX_server_table.py
new file mode 100644
index 0000000000..f3962f875b
--- /dev/null
+++ b/src/mesa/glapi/gen/glX_server_table.py
@@ -0,0 +1,411 @@
+#!/bin/env python
+
+# (C) Copyright IBM Corporation 2005, 2006
+# All Rights Reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# on the rights to use, copy, modify, merge, publish, distribute, sub
+# license, and/or sell copies of the Software, and to permit persons to whom
+# the Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
+# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+#
+# Authors:
+#    Ian Romanick <idr@us.ibm.com>
+
+import gl_XML, glX_XML, glX_proto_common, license
+import sys, getopt
+
+
+def log2(value):
+	for i in range(0, 30):
+		p = 1 << i
+		if p >= value:
+			return i
+
+	return -1
+
+
+def round_down_to_power_of_two(n):
+	"""Returns the nearest power-of-two less than or equal to n."""
+
+	for i in range(30, 0, -1):
+		p = 1 << i
+		if p <= n:
+			return p
+
+	return -1
+
+
+class function_table:
+	def __init__(self, name, do_size_check):
+		self.name_base = name
+		self.do_size_check = do_size_check
+
+
+		self.max_bits = 1
+		self.next_opcode_threshold = (1 << self.max_bits)
+		self.max_opcode = 0
+
+		self.functions = {}
+		self.lookup_table = []
+		
+		# Minimum number of opcodes in a leaf node.
+		self.min_op_bits = 3
+		self.min_op_count = (1 << self.min_op_bits)
+		return
+
+
+	def append(self, opcode, func):
+		self.functions[opcode] = func
+
+		if opcode > self.max_opcode:
+			self.max_opcode = opcode
+
+			if opcode > self.next_opcode_threshold:
+				bits = log2(opcode)
+				if (1 << bits) <= opcode:
+					bits += 1
+
+				self.max_bits = bits
+				self.next_opcode_threshold = 1 << bits
+		return
+
+
+	def divide_group(self, min_opcode, total):
+		"""Divide the group starting min_opcode into subgroups.
+		Returns a tuple containing the number of bits consumed by
+		the node, the list of the children's tuple, and the number
+		of entries in the final array used by this node and its
+		children, and the depth of the subtree rooted at the node."""
+
+		remaining_bits = self.max_bits - total
+		next_opcode = min_opcode + (1 << remaining_bits)
+		empty_children = 0
+		
+		for M in range(0, remaining_bits):
+			op_count = 1 << (remaining_bits - M);
+			child_count = 1 << M;
+
+			empty_children = 0
+			full_children = 0
+			for i in range(min_opcode, next_opcode, op_count):
+				used = 0
+				empty = 0
+
+				for j in range(i, i + op_count):
+					if self.functions.has_key(j):
+						used += 1;
+					else:
+						empty += 1;
+						
+
+				if empty == op_count:
+					empty_children += 1
+
+				if used == op_count:
+					full_children += 1
+
+			if (empty_children > 0) or (full_children == child_count) or (op_count <= self.min_op_count):
+				break
+
+
+		# If all the remaining bits are used by this node, as is the
+		# case when M is 0 or remaining_bits, the node is a leaf.
+
+		if (M == 0) or (M == remaining_bits):
+			return [remaining_bits, [], 0, 0]
+		else:
+			children = []
+			count = 1
+			depth = 1
+			all_children_are_nonempty_leaf_nodes = 1
+			for i in range(min_opcode, next_opcode, op_count):
+				n = self.divide_group(i, total + M)
+
+				if not (n[1] == [] and not self.is_empty_leaf(i, n[0])):
+					all_children_are_nonempty_leaf_nodes = 0
+
+				children.append(n)
+				count += n[2] + 1
+				
+				if n[3] >= depth:
+					depth = n[3] + 1
+
+			# If all of the child nodes are non-empty leaf nodes, pull
+			# them up and make this node a leaf.
+
+			if all_children_are_nonempty_leaf_nodes:
+				return [remaining_bits, [], 0, 0]
+			else:
+				return [M, children, count, depth]
+
+
+	def is_empty_leaf(self, base_opcode, M):
+		for op in range(base_opcode, base_opcode + (1 << M)):
+			if self.functions.has_key(op):
+				return 0
+				break
+
+		return 1
+
+
+	def dump_tree(self, node, base_opcode, remaining_bits, base_entry, depth):
+		M = node[0]
+		children = node[1]
+		child_M = remaining_bits - M
+
+
+		# This actually an error condition.
+		if children == []:
+			return
+
+		print '    /* [%u] -> opcode range [%u, %u], node depth %u */' % (base_entry, base_opcode, base_opcode + (1 << remaining_bits), depth)
+		print '    %u,' % (M)
+
+		base_entry += (1 << M) + 1
+
+		child_index = base_entry
+		child_base_opcode = base_opcode
+		for child in children:
+			if child[1] == []:
+				if self.is_empty_leaf(child_base_opcode, child_M):
+					print '    EMPTY_LEAF,'
+				else:
+					# Emit the index of the next dispatch
+					# function.  Then add all the
+					# dispatch functions for this leaf
+					# node to the dispatch function
+					# lookup table.
+
+					print '    LEAF(%u),' % (len(self.lookup_table))
+
+					for op in range(child_base_opcode, child_base_opcode + (1 << child_M)):
+						if self.functions.has_key(op):
+							func = self.functions[op]
+							size = func.command_fixed_length()
+
+							if func.glx_rop != 0:
+								size += 4
+
+							size = ((size + 3) & ~3)
+
+							if func.has_variable_size_request():
+								size_name = "__glX%sReqSize" % (func.name)
+							else:
+								size_name = ""
+
+							if func.glx_vendorpriv == op:
+								func_name = func.glx_vendorpriv_names[0]
+							else:
+								func_name = func.name
+
+							temp = [op, "__glXDisp_%s" % (func_name), "__glXDispSwap_%s" % (func_name), size, size_name]
+						else:
+							temp = [op, "NULL", "NULL", 0, ""]
+
+						self.lookup_table.append(temp)
+			else:
+				print '    %u,' % (child_index)
+				child_index += child[2]
+
+			child_base_opcode += 1 << child_M
+
+		print ''
+
+		child_index = base_entry
+		for child in children:
+			if child[1] != []:
+				self.dump_tree(child, base_opcode, remaining_bits - M, child_index, depth + 1)
+				child_index += child[2]
+
+			base_opcode += 1 << (remaining_bits - M)
+
+
+	def Print(self):
+		# Each dispatch table consists of two data structures.
+		#
+		# The first structure is an N-way tree where the opcode for
+		# the function is the key.  Each node switches on a range of
+		# bits from the opcode.  M bits are extracted from the opcde
+		# and are used as an index to select one of the N, where
+		# N = 2^M, children.
+		#
+		# The tree is stored as a flat array.  The first value is the
+		# number of bits, M, used by the node.  For inner nodes, the
+		# following 2^M values are indexes into the array for the
+		# child nodes.  For leaf nodes, the followign 2^M values are
+		# indexes into the second data structure.
+		#
+		# If an inner node's child index is 0, the child is an empty
+		# leaf node.  That is, none of the opcodes selectable from
+		# that child exist.  Since most of the possible opcode space
+		# is unused, this allows compact data storage.
+		#
+		# The second data structure is an array of pairs of function
+		# pointers.  Each function contains a pointer to a protocol
+		# decode function and a pointer to a byte-swapped protocol
+		# decode function.  Elements in this array are selected by the
+		# leaf nodes of the first data structure.
+		#
+		# As the tree is traversed, an accumulator is kept.  This
+		# accumulator counts the bits of the opcode consumed by the
+		# traversal.  When accumulator + M = B, where B is the
+		# maximum number of bits in an opcode, the traversal has
+		# reached a leaf node.  The traversal starts with the most
+		# significant bits and works down to the least significant
+		# bits.
+		#
+		# Creation of the tree is the most complicated part.  At
+		# each node the elements are divided into groups of 2^M
+		# elements.  The value of M selected is the smallest possible
+		# value where all of the groups are either empty or full, or
+		# the groups are a preset minimum size.  If all the children
+		# of a node are non-empty leaf nodes, the children are merged
+		# to create a single leaf node that replaces the parent.
+
+		tree = self.divide_group(0, 0)
+
+		print '/*****************************************************************/'
+		print '/* tree depth = %u */' % (tree[3])
+		print 'static const int_fast16_t %s_dispatch_tree[%u] = {' % (self.name_base, tree[2])
+		self.dump_tree(tree, 0, self.max_bits, 0, 1)
+		print '};\n'
+		
+		# After dumping the tree, dump the function lookup table.
+		
+		print 'static const void *%s_function_table[%u][2] = {' % (self.name_base, len(self.lookup_table))
+		index = 0
+		for func in self.lookup_table:
+			opcode = func[0]
+			name = func[1]
+			name_swap = func[2]
+			
+			print '    /* [% 3u] = %5u */ {%s, %s},' % (index, opcode, name, name_swap)
+			
+			index += 1
+
+		print '};\n'
+		
+		if self.do_size_check:
+			var_table = []
+
+			print 'static const int_fast16_t %s_size_table[%u][2] = {' % (self.name_base, len(self.lookup_table))
+			index = 0
+			var_table = []
+			for func in self.lookup_table:
+				opcode = func[0]
+				fixed = func[3]
+				var = func[4]
+				
+				if var != "":
+					var_offset = "%2u" % (len(var_table))
+					var_table.append(var)
+				else:
+					var_offset = "~0"
+
+				print '    /* [%3u] = %5u */ {%3u, %s},' % (index, opcode, fixed, var_offset)
+				index += 1
+
+				
+			print '};\n'
+
+
+			print 'static const gl_proto_size_func %s_size_func_table[%u] = {' % (self.name_base, len(var_table))
+			for func in var_table:
+				print '   %s,' % (func)
+ 
+			print '};\n'
+
+
+		print 'const struct __glXDispatchInfo %s_dispatch_info = {' % (self.name_base)
+		print '    %u,' % (self.max_bits)
+		print '    %s_dispatch_tree,' % (self.name_base)
+		print '    %s_function_table,' % (self.name_base)
+		if self.do_size_check:
+			print '    %s_size_table,' % (self.name_base)
+			print '    %s_size_func_table' % (self.name_base)
+		else:
+			print '    NULL,'
+			print '    NULL'
+		print '};\n'
+		return
+
+
+class PrintGlxDispatchTables(glX_proto_common.glx_print_proto):
+	def __init__(self):
+		gl_XML.gl_print_base.__init__(self)
+		self.name = "glX_server_table.py (from Mesa)"
+		self.license = license.bsd_license_template % ( "(C) Copyright IBM Corporation 2005, 2006", "IBM")
+
+		self.rop_functions = function_table("Render", 1)
+		self.sop_functions = function_table("Single", 0)
+		self.vop_functions = function_table("VendorPriv", 0)
+		return
+
+
+	def printRealHeader(self):
+		print '#include <inttypes.h>'
+		print '#include "glxserver.h"'
+		print '#include "glxext.h"'
+		print '#include "indirect_dispatch.h"'
+		print '#include "indirect_reqsize.h"'
+		print '#include "g_disptab.h"'
+		print '#include "indirect_table.h"'
+		print ''
+		return
+
+
+	def printBody(self, api):
+		for f in api.functionIterateAll():
+			if not f.ignore and f.vectorequiv == None:
+				if f.glx_rop != 0:
+					self.rop_functions.append(f.glx_rop, f)
+				if f.glx_sop != 0:
+					self.sop_functions.append(f.glx_sop, f)
+				if f.glx_vendorpriv != 0:
+					self.vop_functions.append(f.glx_vendorpriv, f)
+
+		self.sop_functions.Print()
+		self.rop_functions.Print()
+		self.vop_functions.Print()
+		return
+
+
+if __name__ == '__main__':
+	file_name = "gl_API.xml"
+
+	try:
+		(args, trail) = getopt.getopt(sys.argv[1:], "f:m")
+	except Exception,e:
+		show_usage()
+
+	mode = "table_c"
+	for (arg,val) in args:
+		if arg == "-f":
+			file_name = val
+		elif arg == "-m":
+			mode = val
+
+	if mode == "table_c":
+		printer = PrintGlxDispatchTables()
+	else:
+		show_usage()
+
+
+	api = gl_XML.parse_GL_API( file_name, glX_XML.glx_item_factory() )
+
+
+	printer.Print( api )
diff --git a/src/mesa/glapi/gen/gl_API.dtd b/src/mesa/glapi/gen/gl_API.dtd
new file mode 100644
index 0000000000..30c646c924
--- /dev/null
+++ b/src/mesa/glapi/gen/gl_API.dtd
@@ -0,0 +1,140 @@
+<!ELEMENT OpenGLAPI (category?, xi:include?, OpenGLAPI?)+>
+<!ELEMENT category (type*, enum*, function*)*>
+<!ELEMENT type EMPTY>
+<!ELEMENT enum (size*)>
+<!ELEMENT size EMPTY>
+<!ELEMENT function (param*, return?, glx?)*>
+<!ELEMENT param EMPTY>
+<!ELEMENT return EMPTY>
+<!ELEMENT glx EMPTY>
+
+<!ELEMENT xi:include (xi:fallback)?>
+<!ATTLIST xi:include
+          xmlns:xi  CDATA #FIXED "http://www.w3.org/2001/XInclude"
+          href       CDATA #REQUIRED
+          parse      (xml|text) "xml"
+          encoding   CDATA #IMPLIED>
+<!ELEMENT xi:fallback ANY>
+<!ATTLIST xi:fallback
+          xmlns:xi   CDATA #FIXED "http://www.w3.org/2001/XInclude">
+
+
+<!ATTLIST category name                NMTOKEN #REQUIRED
+                   number              NMTOKEN #IMPLIED
+		   window_system       NMTOKEN #IMPLIED>
+<!ATTLIST type     name                NMTOKEN #REQUIRED
+                   size                NMTOKEN #REQUIRED
+		   float               (true | false) "false"
+		   unsigned            (true | false) "false"
+                   glx_name            NMTOKEN #IMPLIED>
+<!ATTLIST enum     name                NMTOKEN #REQUIRED
+                   count               CDATA   #IMPLIED
+                   value               NMTOKEN #REQUIRED>
+<!ATTLIST function name                NMTOKEN #REQUIRED
+                   alias               NMTOKEN #IMPLIED
+                   offset              CDATA   #IMPLIED
+                   static_dispatch     (true | false) "true"
+                   vectorequiv         NMTOKEN #IMPLIED>
+<!ATTLIST size     name                NMTOKEN #REQUIRED
+                   count               NMTOKEN #IMPLIED
+                   mode                (get | set) "set">
+<!ATTLIST param    name                NMTOKEN #REQUIRED
+                   type                CDATA   #REQUIRED
+		   client_only	       (true | false) "false"
+                   count               NMTOKEN #IMPLIED
+                   counter             (true | false) "false"
+                   count_scale         NMTOKEN "1"
+                   output              (true | false) "false"
+                   padding             (true | false) "false"
+                   img_width           NMTOKEN #IMPLIED
+                   img_height          NMTOKEN #IMPLIED
+                   img_depth           NMTOKEN #IMPLIED
+                   img_extent          NMTOKEN #IMPLIED
+                   img_xoff            NMTOKEN #IMPLIED
+                   img_yoff            NMTOKEN #IMPLIED
+                   img_zoff            NMTOKEN #IMPLIED
+                   img_woff            NMTOKEN #IMPLIED
+                   img_format          NMTOKEN #IMPLIED
+                   img_type            NMTOKEN #IMPLIED
+                   img_target          NMTOKEN #IMPLIED
+                   img_send_null       (true | false) "false"
+                   img_null_flag       (true | false) "false"
+                   img_pad_dimensions  (true | false) "false"
+                   variable_param      NMTOKENS #IMPLIED>
+<!ATTLIST return   type                CDATA   "void">
+<!ATTLIST glx      rop                 NMTOKEN #IMPLIED
+                   sop                 NMTOKEN #IMPLIED
+                   vendorpriv          NMTOKEN #IMPLIED
+                   large               (true | false) "false"
+                   doubles_in_order    (true | false) "false"
+                   always_array        (true | false) "false"
+                   handcode            (true | false | client | server) "false"
+                   img_reset           NMTOKEN #IMPLIED
+                   dimensions_in_reply (true | false) "false"
+                   ignore              (true | false) "false">
+
+<!--
+The various attributes for param and glx have the meanings listed below.
+When adding new functions, please annote them correctly.  In most cases this
+will just mean adding a '<glx ignore="true"/>' tag.
+
+param:
+     name - name of the parameter
+     type - fully qualified type (e.g., with "const", etc.)
+     client_only - boolean flag set on parameters which are interpreted only
+         by the client and are not present in the protocol encoding (e.g.,
+	 the stride parameters to Map1f, etc.)
+     count - for counted arrays (e.g., the 'lists' parameter to glCallLists),
+         the parameter or literal that represents the count.  For functions
+         like glVertex3fv it will be a litteral, for others it will be one of
+         the parameters.
+     counter - this parameter is a counter that will be referenced by the
+         'count' attribute in another parameter.
+     count_scale - literal value scale factor for the 'count' attribute.
+         See ProgramParameters4dvNV for an example.
+     output - this parameter is used to store the output of the function.
+     variable_param - name of parameter used to determine the number of
+         elements referenced by this parameter.  This should be the name of a
+         single enum parameter.  Most of the gl*Parameter[if]v functions use
+         this.  Additionally, the enums that can be passed should be properly
+         annotated.
+     img_width / img_height / img_depth / img_extent - name of parameters
+         (or hardcoded integer) used for the dimensions of pixel data.
+     img_xoff / img_yoff / img_zoff / img_woff - name of parameters used
+         for x, y, z, and w offsets of pixel data.
+     img_format - name of parameter used as the pixel data format.
+     img_type - name of parameter used as the pixel data type.
+     img_target - name of parameter used as a texture target.  Non-texture
+        pixel data should hardcode 0.
+     img_send_null - boolean flag to determine if blank pixel data should
+        be sent when a NULL pointer is passed.  This is only used by
+        TexImage1D and TexImage2D.
+     img_null_flag - boolean flag to determine if an extra flag is used to
+        determine if a NULL pixel pointer was passed.  This is used by
+        TexSubImage1D, TexSubImage2D, TexImage3D and others.
+     img_pad_dimensions - boolean flag to determine if dimension data and
+        offset data should be padded to the next even number of dimensions.
+        For example, this will insert an empty "height" field after the
+        "width" field in the protocol for TexImage1D.
+
+glx:
+     rop - Opcode value for "render" commands
+     sop - Opcode value for "single" commands
+     vendorpriv - Opcode value for vendor private (or vendor private with
+         reply) commands
+     large - set to "true" of the render command can use RenderLarge protocol.
+     doubles_in_order - older commands always put GLdouble data at the
+         start of the render packet.  Newer commands (e.g., 
+         ProgramEnvParameter4dvARB) put the in the order that they appear
+         in the parameter list.
+     always_array - some single commands take reply data as an array or as
+         return value data (e.g., glGetLightfv).  Other single commands take
+         reply data only as an array (e.g., glGetClipPlane).
+     handcode - some functions are just too complicated to generate 
+         (e.g., glSeperableFilter2D) or operate only on client-side data
+         (e.g., glVertexPointer) and must be handcoded.
+     ignore - some functions have an entry in the dispatch table, but aren't
+         suitable for protocol implementation (e.g., glLockArraysEXT).  This
+         also applies to functions that don't have any GLX protocol specified
+         (e.g., glGetFogFuncSGIS).
+-->
diff --git a/src/mesa/glapi/gen/gl_API.xml b/src/mesa/glapi/gen/gl_API.xml
new file mode 100644
index 0000000000..fbf8b0c3e4
--- /dev/null
+++ b/src/mesa/glapi/gen/gl_API.xml
@@ -0,0 +1,12505 @@
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<OpenGLAPI>
+
+<!-- Core versions sorted by version number. -->
+
+<category name="1.0">
+    <enum name="FALSE"                                    value="0x0"/>
+    <enum name="TRUE"                                     value="0x1"/>
+    <enum name="ZERO"                                     value="0x0"/>
+    <enum name="ONE"                                      value="0x1"/>
+    <enum name="NONE"                                     value="0x0"/>
+    <enum name="NO_ERROR"                                 value="0x0"/>
+    <enum name="POINTS"                                   value="0x0000"/>
+    <enum name="LINES"                                    value="0x0001"/>
+    <enum name="LINE_LOOP"                                value="0x0002"/>
+    <enum name="LINE_STRIP"                               value="0x0003"/>
+    <enum name="TRIANGLES"                                value="0x0004"/>
+    <enum name="TRIANGLE_STRIP"                           value="0x0005"/>
+    <enum name="TRIANGLE_FAN"                             value="0x0006"/>
+    <enum name="QUADS"                                    value="0x0007"/>
+    <enum name="QUAD_STRIP"                               value="0x0008"/>
+    <enum name="POLYGON"                                  value="0x0009"/>
+    <enum name="ACCUM"                                    value="0x0100"/>
+    <enum name="LOAD"                                     value="0x0101"/>
+    <enum name="RETURN"                                   value="0x0102"/>
+    <enum name="MULT"                                     value="0x0103"/>
+    <enum name="ADD"                                      value="0x0104"/>
+    <enum name="NEVER"                                    value="0x0200"/>
+    <enum name="LESS"                                     value="0x0201"/>
+    <enum name="EQUAL"                                    value="0x0202"/>
+    <enum name="LEQUAL"                                   value="0x0203"/>
+    <enum name="GREATER"                                  value="0x0204"/>
+    <enum name="NOTEQUAL"                                 value="0x0205"/>
+    <enum name="GEQUAL"                                   value="0x0206"/>
+    <enum name="ALWAYS"                                   value="0x0207"/>
+    <enum name="SRC_COLOR"                                value="0x0300"/>
+    <enum name="ONE_MINUS_SRC_COLOR"                      value="0x0301"/>
+    <enum name="SRC_ALPHA"                                value="0x0302"/>
+    <enum name="ONE_MINUS_SRC_ALPHA"                      value="0x0303"/>
+    <enum name="DST_ALPHA"                                value="0x0304"/>
+    <enum name="ONE_MINUS_DST_ALPHA"                      value="0x0305"/>
+    <enum name="DST_COLOR"                                value="0x0306"/>
+    <enum name="ONE_MINUS_DST_COLOR"                      value="0x0307"/>
+    <enum name="SRC_ALPHA_SATURATE"                       value="0x0308"/>
+    <enum name="FRONT_LEFT"                               value="0x0400"/>
+    <enum name="FRONT_RIGHT"                              value="0x0401"/>
+    <enum name="BACK_LEFT"                                value="0x0402"/>
+    <enum name="BACK_RIGHT"                               value="0x0403"/>
+    <enum name="FRONT"                                    value="0x0404"/>
+    <enum name="BACK"                                     value="0x0405"/>
+    <enum name="LEFT"                                     value="0x0406"/>
+    <enum name="RIGHT"                                    value="0x0407"/>
+    <enum name="FRONT_AND_BACK"                           value="0x0408"/>
+    <enum name="AUX0"                                     value="0x0409"/>
+    <enum name="AUX1"                                     value="0x040A"/>
+    <enum name="AUX2"                                     value="0x040B"/>
+    <enum name="AUX3"                                     value="0x040C"/>
+    <enum name="INVALID_VALUE"                            value="0x0501"/>
+    <enum name="INVALID_ENUM"                             value="0x0500"/>
+    <enum name="INVALID_OPERATION"                        value="0x0502"/>
+    <enum name="STACK_OVERFLOW"                           value="0x0503"/>
+    <enum name="STACK_UNDERFLOW"                          value="0x0504"/>
+    <enum name="OUT_OF_MEMORY"                            value="0x0505"/>
+    <enum name="2D"                                       value="0x0600"/>
+    <enum name="3D"                                       value="0x0601"/>
+    <enum name="3D_COLOR"                                 value="0x0602"/>
+    <enum name="3D_COLOR_TEXTURE"                         value="0x0603"/>
+    <enum name="4D_COLOR_TEXTURE"                         value="0x0604"/>
+    <enum name="PASS_THROUGH_TOKEN"                       value="0x0700"/>
+    <enum name="POINT_TOKEN"                              value="0x0701"/>
+    <enum name="LINE_TOKEN"                               value="0x0702"/>
+    <enum name="POLYGON_TOKEN"                            value="0x0703"/>
+    <enum name="BITMAP_TOKEN"                             value="0x0704"/>
+    <enum name="DRAW_PIXEL_TOKEN"                         value="0x0705"/>
+    <enum name="COPY_PIXEL_TOKEN"                         value="0x0706"/>
+    <enum name="LINE_RESET_TOKEN"                         value="0x0707"/>
+    <enum name="EXP"                                      value="0x0800"/>
+    <enum name="EXP2"                                     value="0x0801"/>
+    <enum name="CW"                                       value="0x0900"/>
+    <enum name="CCW"                                      value="0x0901"/>
+    <enum name="COEFF"                                    value="0x0A00"/>
+    <enum name="ORDER"                                    value="0x0A01"/>
+    <enum name="DOMAIN"                                   value="0x0A02"/>
+    <enum name="CURRENT_COLOR"                 count="4"  value="0x0B00">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="CURRENT_INDEX"                 count="1"  value="0x0B01">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="CURRENT_NORMAL"                count="3"  value="0x0B02">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="CURRENT_TEXTURE_COORDS"        count="4"  value="0x0B03">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="CURRENT_RASTER_COLOR"          count="4"  value="0x0B04">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="CURRENT_RASTER_INDEX"          count="1"  value="0x0B05">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="CURRENT_RASTER_TEXTURE_COORDS" count="4"  value="0x0B06">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="CURRENT_RASTER_POSITION"       count="4"  value="0x0B07">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="CURRENT_RASTER_POSITION_VALID" count="1"  value="0x0B08">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="CURRENT_RASTER_DISTANCE"       count="1"  value="0x0B09">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POINT_SMOOTH"                  count="1"  value="0x0B10">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POINT_SIZE"                    count="1"  value="0x0B11">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POINT_SIZE_RANGE"              count="2"  value="0x0B12">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POINT_SIZE_GRANULARITY"        count="1"  value="0x0B13">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="LINE_SMOOTH"                   count="1"  value="0x0B20">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="LINE_WIDTH"                    count="1"  value="0x0B21">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="LINE_WIDTH_RANGE"              count="2"  value="0x0B22">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="LINE_WIDTH_GRANULARITY"        count="1"  value="0x0B23">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="LINE_STIPPLE"                  count="1"  value="0x0B24">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="LINE_STIPPLE_PATTERN"          count="1"  value="0x0B25">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="LINE_STIPPLE_REPEAT"           count="1"  value="0x0B26">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="LIST_MODE"                     count="1"  value="0x0B30">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAX_LIST_NESTING"              count="1"  value="0x0B31">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="LIST_BASE"                     count="1"  value="0x0B32">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="LIST_INDEX"                    count="1"  value="0x0B33">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POLYGON_MODE"                  count="2"  value="0x0B40">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POLYGON_SMOOTH"                count="1"  value="0x0B41">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POLYGON_STIPPLE"               count="1"  value="0x0B42">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="EDGE_FLAG"                     count="1"  value="0x0B43">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="CULL_FACE"                     count="1"  value="0x0B44">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="CULL_FACE_MODE"                count="1"  value="0x0B45">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="FRONT_FACE"                    count="1"  value="0x0B46">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="LIGHTING"                      count="1"  value="0x0B50">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="LIGHT_MODEL_LOCAL_VIEWER"      count="1"  value="0x0B51">
+        <size name="LightModelfv"/>
+        <size name="LightModeliv"/>
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="LIGHT_MODEL_TWO_SIDE"          count="1"  value="0x0B52">
+        <size name="LightModelfv"/>
+        <size name="LightModeliv"/>
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="LIGHT_MODEL_AMBIENT"           count="4"  value="0x0B53">
+        <size name="LightModelfv"/>
+        <size name="LightModeliv"/>
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="SHADE_MODEL"                   count="1"  value="0x0B54">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="COLOR_MATERIAL_FACE"           count="1"  value="0x0B55">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="COLOR_MATERIAL_PARAMETER"      count="1"  value="0x0B56">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="COLOR_MATERIAL"                count="1"  value="0x0B57">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="FOG"                           count="1"  value="0x0B60">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="FOG_INDEX"                     count="1"  value="0x0B61">
+        <size name="Fogfv"/>
+        <size name="Fogiv"/>
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="FOG_DENSITY"                   count="1"  value="0x0B62">
+        <size name="Fogfv"/>
+        <size name="Fogiv"/>
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="FOG_START"                     count="1"  value="0x0B63">
+        <size name="Fogfv"/>
+        <size name="Fogiv"/>
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="FOG_END"                       count="1"  value="0x0B64">
+        <size name="Fogfv"/>
+        <size name="Fogiv"/>
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="FOG_MODE"                      count="1"  value="0x0B65">
+        <size name="Fogfv"/>
+        <size name="Fogiv"/>
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="FOG_COLOR"                     count="4"  value="0x0B66">
+        <size name="Fogfv"/>
+        <size name="Fogiv"/>
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DEPTH_RANGE"                   count="2"  value="0x0B70">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DEPTH_TEST"                    count="1"  value="0x0B71">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DEPTH_WRITEMASK"               count="1"  value="0x0B72">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DEPTH_CLEAR_VALUE"             count="1"  value="0x0B73">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DEPTH_FUNC"                    count="1"  value="0x0B74">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="ACCUM_CLEAR_VALUE"             count="4"  value="0x0B80">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="STENCIL_TEST"                  count="1"  value="0x0B90">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="STENCIL_CLEAR_VALUE"           count="1"  value="0x0B91">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="STENCIL_FUNC"                  count="1"  value="0x0B92">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="STENCIL_VALUE_MASK"            count="1"  value="0x0B93">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="STENCIL_FAIL"                  count="1"  value="0x0B94">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="STENCIL_PASS_DEPTH_FAIL"       count="1"  value="0x0B95">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="STENCIL_PASS_DEPTH_PASS"       count="1"  value="0x0B96">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="STENCIL_REF"                   count="1"  value="0x0B97">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="STENCIL_WRITEMASK"             count="1"  value="0x0B98">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MATRIX_MODE"                   count="1"  value="0x0BA0">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="NORMALIZE"                     count="1"  value="0x0BA1">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="VIEWPORT"                      count="4"  value="0x0BA2">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW_STACK_DEPTH"         count="1"  value="0x0BA3">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="PROJECTION_STACK_DEPTH"        count="1"  value="0x0BA4">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_STACK_DEPTH"           count="1"  value="0x0BA5">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW_MATRIX"              count="16" value="0x0BA6">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="PROJECTION_MATRIX"             count="16" value="0x0BA7">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_MATRIX"                count="16" value="0x0BA8">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="ATTRIB_STACK_DEPTH"            count="1"  value="0x0BB0">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="CLIENT_ATTRIB_STACK_DEPTH"     count="1"  value="0x0BB1">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="ALPHA_TEST"                    count="1"  value="0x0BC0">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="ALPHA_TEST_FUNC"               count="1"  value="0x0BC1">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="ALPHA_TEST_REF"                count="1"  value="0x0BC2">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DITHER"                        count="1"  value="0x0BD0">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="BLEND_DST"                     count="1"  value="0x0BE0">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="BLEND_SRC"                     count="1"  value="0x0BE1">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="BLEND"                         count="1"  value="0x0BE2">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="LOGIC_OP_MODE"                 count="1"  value="0x0BF0">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="LOGIC_OP"                      count="1"  value="0x0BF1">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="AUX_BUFFERS"                   count="1"  value="0x0C00">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_BUFFER"                   count="1"  value="0x0C01">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="READ_BUFFER"                   count="1"  value="0x0C02">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="SCISSOR_BOX"                   count="4"  value="0x0C10">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="SCISSOR_TEST"                  count="1"  value="0x0C11">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="INDEX_CLEAR_VALUE"             count="1"  value="0x0C20">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="INDEX_WRITEMASK"               count="1"  value="0x0C21">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="COLOR_CLEAR_VALUE"             count="4"  value="0x0C22">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="COLOR_WRITEMASK"               count="4"  value="0x0C23">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="INDEX_MODE"                    count="1"  value="0x0C30">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="RGBA_MODE"                     count="1"  value="0x0C31">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DOUBLEBUFFER"                  count="1"  value="0x0C32">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="STEREO"                        count="1"  value="0x0C33">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="RENDER_MODE"                   count="1"  value="0x0C40">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="PERSPECTIVE_CORRECTION_HINT"   count="1"  value="0x0C50">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POINT_SMOOTH_HINT"             count="1"  value="0x0C51">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="LINE_SMOOTH_HINT"              count="1"  value="0x0C52">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POLYGON_SMOOTH_HINT"           count="1"  value="0x0C53">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="FOG_HINT"                      count="1"  value="0x0C54">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_GEN_S"                 count="1"  value="0x0C60">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_GEN_T"                 count="1"  value="0x0C61">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_GEN_R"                 count="1"  value="0x0C62">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_GEN_Q"                 count="1"  value="0x0C63">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="PIXEL_MAP_I_TO_I"              count="1"  value="0x0C70">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="PIXEL_MAP_S_TO_S"                         value="0x0C71"/>
+    <enum name="PIXEL_MAP_I_TO_R"                         value="0x0C72"/>
+    <enum name="PIXEL_MAP_I_TO_G"                         value="0x0C73"/>
+    <enum name="PIXEL_MAP_I_TO_B"                         value="0x0C74"/>
+    <enum name="PIXEL_MAP_I_TO_A"                         value="0x0C75"/>
+    <enum name="PIXEL_MAP_R_TO_R"                         value="0x0C76"/>
+    <enum name="PIXEL_MAP_G_TO_G"                         value="0x0C77"/>
+    <enum name="PIXEL_MAP_B_TO_B"                         value="0x0C78"/>
+    <enum name="PIXEL_MAP_A_TO_A"                         value="0x0C79"/>
+    <enum name="PIXEL_MAP_I_TO_I_SIZE"         count="1"  value="0x0CB0">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="PIXEL_MAP_S_TO_S_SIZE"         count="1"  value="0x0CB1">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="PIXEL_MAP_I_TO_R_SIZE"         count="1"  value="0x0CB2">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="PIXEL_MAP_I_TO_G_SIZE"         count="1"  value="0x0CB3">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="PIXEL_MAP_I_TO_B_SIZE"         count="1"  value="0x0CB4">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="PIXEL_MAP_I_TO_A_SIZE"         count="1"  value="0x0CB5">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="PIXEL_MAP_R_TO_R_SIZE"         count="1"  value="0x0CB6">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="PIXEL_MAP_G_TO_G_SIZE"         count="1"  value="0x0CB7">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="PIXEL_MAP_B_TO_B_SIZE"         count="1"  value="0x0CB8">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="PIXEL_MAP_A_TO_A_SIZE"         count="1"  value="0x0CB9">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="UNPACK_SWAP_BYTES"             count="1"  value="0x0CF0">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="UNPACK_LSB_FIRST"              count="1"  value="0x0CF1">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="UNPACK_ROW_LENGTH"             count="1"  value="0x0CF2">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="UNPACK_SKIP_PIXELS"            count="1"  value="0x0CF4">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="UNPACK_SKIP_ROWS"              count="1"  value="0x0CF3">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="UNPACK_ALIGNMENT"              count="1"  value="0x0CF5">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="PACK_SWAP_BYTES"               count="1"  value="0x0D00">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="PACK_LSB_FIRST"                count="1"  value="0x0D01">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="PACK_ROW_LENGTH"               count="1"  value="0x0D02">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="PACK_SKIP_ROWS"                count="1"  value="0x0D03">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="PACK_SKIP_PIXELS"              count="1"  value="0x0D04">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="PACK_ALIGNMENT"                count="1"  value="0x0D05">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAP_COLOR"                     count="1"  value="0x0D10">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAP_STENCIL"                   count="1"  value="0x0D11">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="INDEX_SHIFT"                   count="1"  value="0x0D12">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="INDEX_OFFSET"                  count="1"  value="0x0D13">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="RED_SCALE"                     count="1"  value="0x0D14">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="RED_BIAS"                      count="1"  value="0x0D15">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="ZOOM_X"                        count="1"  value="0x0D16">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="ZOOM_Y"                        count="1"  value="0x0D17">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="GREEN_SCALE"                   count="1"  value="0x0D18">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="GREEN_BIAS"                    count="1"  value="0x0D19">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="BLUE_SCALE"                    count="1"  value="0x0D1A">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="BLUE_BIAS"                     count="1"  value="0x0D1B">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="ALPHA_SCALE"                   count="1"  value="0x0D1C">
+        <size name="TexEnvfv"/>
+        <size name="TexEnviv"/>
+        <size name="GetTexEnvfv" mode="get"/>
+        <size name="GetTexEnviv" mode="get"/>
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="ALPHA_BIAS"                    count="1"  value="0x0D1D">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DEPTH_SCALE"                   count="1"  value="0x0D1E">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DEPTH_BIAS"                    count="1"  value="0x0D1F">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAX_EVAL_ORDER"                count="1"  value="0x0D30">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAX_LIGHTS"                    count="1"  value="0x0D31">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAX_CLIP_PLANES"               count="1"  value="0x0D32">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAX_TEXTURE_SIZE"              count="1"  value="0x0D33">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAX_PIXEL_MAP_TABLE"           count="1"  value="0x0D34">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAX_ATTRIB_STACK_DEPTH"        count="1"  value="0x0D35">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAX_MODELVIEW_STACK_DEPTH"     count="1"  value="0x0D36">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAX_NAME_STACK_DEPTH"          count="1"  value="0x0D37">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAX_PROJECTION_STACK_DEPTH"    count="1"  value="0x0D38">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAX_TEXTURE_STACK_DEPTH"       count="1"  value="0x0D39">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAX_VIEWPORT_DIMS"             count="2"  value="0x0D3A">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAX_CLIENT_ATTRIB_STACK_DEPTH" count="1"  value="0x0D3B">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="SUBPIXEL_BITS"                 count="1"  value="0x0D50">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="INDEX_BITS"                    count="1"  value="0x0D51">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="RED_BITS"                      count="1"  value="0x0D52">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="GREEN_BITS"                    count="1"  value="0x0D53">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="BLUE_BITS"                     count="1"  value="0x0D54">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="ALPHA_BITS"                    count="1"  value="0x0D55">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DEPTH_BITS"                    count="1"  value="0x0D56">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="STENCIL_BITS"                  count="1"  value="0x0D57">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="ACCUM_RED_BITS"                count="1"  value="0x0D58">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="ACCUM_GREEN_BITS"              count="1"  value="0x0D59">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="ACCUM_BLUE_BITS"               count="1"  value="0x0D5A">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="ACCUM_ALPHA_BITS"              count="1"  value="0x0D5B">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="NAME_STACK_DEPTH"              count="1"  value="0x0D70">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="AUTO_NORMAL"                   count="1"  value="0x0D80">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAP1_COLOR_4"                  count="4"  value="0x0D90">
+        <size name="Map1d"/>
+        <size name="Map1f"/>
+        <size name="Get" count="1" mode="get"/>
+    </enum>
+    <enum name="MAP1_INDEX"                    count="1"  value="0x0D91">
+        <size name="Map1d"/>
+        <size name="Map1f"/>
+        <size name="Get" count="1" mode="get"/>
+    </enum>
+    <enum name="MAP1_NORMAL"                   count="3"  value="0x0D92">
+        <size name="Map1d"/>
+        <size name="Map1f"/>
+        <size name="Get" count="1" mode="get"/>
+    </enum>
+    <enum name="MAP1_TEXTURE_COORD_1"          count="1"  value="0x0D93">
+        <size name="Map1d"/>
+        <size name="Map1f"/>
+        <size name="Get" count="1" mode="get"/>
+    </enum>
+    <enum name="MAP1_TEXTURE_COORD_2"          count="2"  value="0x0D94">
+        <size name="Map1d"/>
+        <size name="Map1f"/>
+        <size name="Get" count="1" mode="get"/>
+    </enum>
+    <enum name="MAP1_TEXTURE_COORD_3"          count="3"  value="0x0D95">
+        <size name="Map1d"/>
+        <size name="Map1f"/>
+        <size name="Get" count="1" mode="get"/>
+    </enum>
+    <enum name="MAP1_TEXTURE_COORD_4"          count="4"  value="0x0D96">
+        <size name="Map1d"/>
+        <size name="Map1f"/>
+        <size name="Get" count="1" mode="get"/>
+    </enum>
+    <enum name="MAP1_VERTEX_3"                 count="3"  value="0x0D97">
+        <size name="Map1d"/>
+        <size name="Map1f"/>
+        <size name="Get" count="1" mode="get"/>
+    </enum>
+    <enum name="MAP1_VERTEX_4"                 count="4"  value="0x0D98">
+        <size name="Map1d"/>
+        <size name="Map1f"/>
+        <size name="Get" count="1" mode="get"/>
+    </enum>
+    <enum name="MAP2_COLOR_4"                  count="4"  value="0x0DB0">
+        <size name="Map2d"/>
+        <size name="Map2f"/>
+        <size name="Get" count="1" mode="get"/>
+    </enum>
+    <enum name="MAP2_INDEX"                    count="1"  value="0x0DB1">
+        <size name="Map2d"/>
+        <size name="Map2f"/>
+        <size name="Get" count="1" mode="get"/>
+    </enum>
+    <enum name="MAP2_NORMAL"                   count="3"  value="0x0DB2">
+        <size name="Map2d"/>
+        <size name="Map2f"/>
+        <size name="Get" count="1" mode="get"/>
+    </enum>
+    <enum name="MAP2_TEXTURE_COORD_1"          count="1"  value="0x0DB3">
+        <size name="Map2d"/>
+        <size name="Map2f"/>
+        <size name="Get" count="1" mode="get"/>
+    </enum>
+    <enum name="MAP2_TEXTURE_COORD_2"          count="2"  value="0x0DB4">
+        <size name="Map2d"/>
+        <size name="Map2f"/>
+        <size name="Get" count="1" mode="get"/>
+    </enum>
+    <enum name="MAP2_TEXTURE_COORD_3"          count="3"  value="0x0DB5">
+        <size name="Map2d"/>
+        <size name="Map2f"/>
+        <size name="Get" count="1" mode="get"/>
+    </enum>
+    <enum name="MAP2_TEXTURE_COORD_4"          count="4"  value="0x0DB6">
+        <size name="Map2d"/>
+        <size name="Map2f"/>
+        <size name="Get" count="1" mode="get"/>
+    </enum>
+    <enum name="MAP2_VERTEX_3"                 count="3"  value="0x0DB7">
+        <size name="Map2d"/>
+        <size name="Map2f"/>
+        <size name="Get" count="1" mode="get"/>
+    </enum>
+    <enum name="MAP2_VERTEX_4"                 count="4"  value="0x0DB8">
+        <size name="Map2d"/>
+        <size name="Map2f"/>
+        <size name="Get" count="1" mode="get"/>
+    </enum>
+    <enum name="MAP1_GRID_DOMAIN"              count="2"  value="0x0DD0">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAP1_GRID_SEGMENTS"            count="1"  value="0x0DD1">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAP2_GRID_DOMAIN"              count="4"  value="0x0DD2">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAP2_GRID_SEGMENTS"            count="2"  value="0x0DD3">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_1D"                    count="1"  value="0x0DE0">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_2D"                    count="1"  value="0x0DE1">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="FEEDBACK_BUFFER_POINTER"                  value="0x0DF0"/>
+    <enum name="FEEDBACK_BUFFER_SIZE"                     value="0x0DF1"/>
+    <enum name="FEEDBACK_BUFFER_TYPE"                     value="0x0DF2"/>
+    <enum name="SELECTION_BUFFER_POINTER"                 value="0x0DF3"/>
+    <enum name="SELECTION_BUFFER_SIZE"                    value="0x0DF4"/>
+    <enum name="TEXTURE_WIDTH"                 count="1"  value="0x1000">
+        <size name="GetTexLevelParameterfv" mode="get"/>
+        <size name="GetTexLevelParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_HEIGHT"                count="1"  value="0x1001">
+        <size name="GetTexLevelParameterfv" mode="get"/>
+        <size name="GetTexLevelParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_BORDER"                count="1"  value="0x1005">
+        <size name="GetTexLevelParameterfv" mode="get"/>
+        <size name="GetTexLevelParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_COMPONENTS"            count="1"  value="0x1003">
+        <size name="GetTexLevelParameterfv" mode="get"/>
+        <size name="GetTexLevelParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_BORDER_COLOR"          count="4"  value="0x1004">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+    <enum name="DONT_CARE"                                value="0x1100"/>
+    <enum name="FASTEST"                                  value="0x1101"/>
+    <enum name="NICEST"                                   value="0x1102"/>
+    <enum name="AMBIENT"                       count="4"  value="0x1200">
+        <size name="Materialfv"/>
+        <size name="Materialiv"/>
+        <size name="Lightfv"/>
+        <size name="Lightiv"/>
+        <size name="GetMaterialfv" mode="get"/>
+        <size name="GetMaterialiv" mode="get"/>
+        <size name="GetLightfv" mode="get"/>
+        <size name="GetLightiv" mode="get"/>
+    </enum>
+    <enum name="DIFFUSE"                       count="4"  value="0x1201">
+        <size name="Materialfv"/>
+        <size name="Materialiv"/>
+        <size name="Lightfv"/>
+        <size name="Lightiv"/>
+        <size name="GetMaterialfv" mode="get"/>
+        <size name="GetMaterialiv" mode="get"/>
+        <size name="GetLightfv" mode="get"/>
+        <size name="GetLightiv" mode="get"/>
+    </enum>
+    <enum name="SPECULAR"                      count="4"  value="0x1202">
+        <size name="Materialfv"/>
+        <size name="Materialiv"/>
+        <size name="Lightfv"/>
+        <size name="Lightiv"/>
+        <size name="GetMaterialfv" mode="get"/>
+        <size name="GetMaterialiv" mode="get"/>
+        <size name="GetLightfv" mode="get"/>
+        <size name="GetLightiv" mode="get"/>
+    </enum>
+    <enum name="POSITION"                      count="4"  value="0x1203">
+        <size name="Lightfv"/>
+        <size name="Lightiv"/>
+        <size name="GetLightfv" mode="get"/>
+        <size name="GetLightiv" mode="get"/>
+    </enum>
+    <enum name="SPOT_DIRECTION"                count="3"  value="0x1204">
+        <size name="Lightfv"/>
+        <size name="Lightiv"/>
+        <size name="GetLightfv" mode="get"/>
+        <size name="GetLightiv" mode="get"/>
+    </enum>
+    <enum name="SPOT_EXPONENT"                 count="1"  value="0x1205">
+        <size name="Lightfv"/>
+        <size name="Lightiv"/>
+        <size name="GetLightfv" mode="get"/>
+        <size name="GetLightiv" mode="get"/>
+    </enum>
+    <enum name="SPOT_CUTOFF"                   count="1"  value="0x1206">
+        <size name="Lightfv"/>
+        <size name="Lightiv"/>
+        <size name="GetLightfv" mode="get"/>
+        <size name="GetLightiv" mode="get"/>
+    </enum>
+    <enum name="CONSTANT_ATTENUATION"          count="1"  value="0x1207">
+        <size name="Lightfv"/>
+        <size name="Lightiv"/>
+        <size name="GetLightfv" mode="get"/>
+        <size name="GetLightiv" mode="get"/>
+    </enum>
+    <enum name="LINEAR_ATTENUATION"            count="1"  value="0x1208">
+        <size name="Lightfv"/>
+        <size name="Lightiv"/>
+        <size name="GetLightfv" mode="get"/>
+        <size name="GetLightiv" mode="get"/>
+    </enum>
+    <enum name="QUADRATIC_ATTENUATION"         count="1"  value="0x1209">
+        <size name="Lightfv"/>
+        <size name="Lightiv"/>
+        <size name="GetLightfv" mode="get"/>
+        <size name="GetLightiv" mode="get"/>
+    </enum>
+    <enum name="COMPILE"                                  value="0x1300"/>
+    <enum name="COMPILE_AND_EXECUTE"                      value="0x1301"/>
+    <enum name="BYTE"                          count="1"  value="0x1400">
+        <size name="CallLists"/>
+    </enum>
+    <enum name="UNSIGNED_BYTE"                 count="1"  value="0x1401">
+        <size name="CallLists"/>
+    </enum>
+    <enum name="SHORT"                         count="2"  value="0x1402">
+        <size name="CallLists"/>
+    </enum>
+    <enum name="UNSIGNED_SHORT"                count="2"  value="0x1403">
+        <size name="CallLists"/>
+    </enum>
+    <enum name="INT"                           count="4"  value="0x1404">
+        <size name="CallLists"/>
+    </enum>
+    <enum name="UNSIGNED_INT"                  count="4"  value="0x1405">
+        <size name="CallLists"/>
+    </enum>
+    <enum name="FLOAT"                         count="4"  value="0x1406">
+        <size name="CallLists"/>
+    </enum>
+    <enum name="2_BYTES"                       count="2"  value="0x1407">
+        <size name="CallLists"/>
+    </enum>
+    <enum name="3_BYTES"                       count="3"  value="0x1408">
+        <size name="CallLists"/>
+    </enum>
+    <enum name="4_BYTES"                       count="4"  value="0x1409">
+        <size name="CallLists"/>
+    </enum>
+    <enum name="HALF_FLOAT"                    count="2"  value="0x140B">
+        <size name="CallLists"/>
+    </enum>
+    <enum name="CLEAR"                                    value="0x1500"/>
+    <enum name="AND"                                      value="0x1501"/>
+    <enum name="AND_REVERSE"                              value="0x1502"/>
+    <enum name="COPY"                                     value="0x1503"/>
+    <enum name="AND_INVERTED"                             value="0x1504"/>
+    <enum name="NOOP"                                     value="0x1505"/>
+    <enum name="XOR"                                      value="0x1506"/>
+    <enum name="OR"                                       value="0x1507"/>
+    <enum name="NOR"                                      value="0x1508"/>
+    <enum name="EQUIV"                                    value="0x1509"/>
+    <enum name="INVERT"                                   value="0x150A"/>
+    <enum name="OR_REVERSE"                               value="0x150B"/>
+    <enum name="COPY_INVERTED"                            value="0x150C"/>
+    <enum name="OR_INVERTED"                              value="0x150D"/>
+    <enum name="NAND"                                     value="0x150E"/>
+    <enum name="SET"                                      value="0x150F"/>
+    <enum name="EMISSION"                      count="4"  value="0x1600">
+        <size name="Materialfv"/>
+        <size name="Materialiv"/>
+        <size name="GetMaterialfv" mode="get"/>
+        <size name="GetMaterialiv" mode="get"/>
+    </enum>
+    <enum name="SHININESS"                     count="1"  value="0x1601">
+        <size name="Materialfv"/>
+        <size name="Materialiv"/>
+        <size name="GetMaterialfv" mode="get"/>
+        <size name="GetMaterialiv" mode="get"/>
+    </enum>
+    <enum name="AMBIENT_AND_DIFFUSE"           count="4"  value="0x1602">
+        <size name="Materialfv"/>
+        <size name="Materialiv"/>
+        <size name="GetMaterialfv" mode="get"/>
+        <size name="GetMaterialiv" mode="get"/>
+    </enum>
+    <enum name="COLOR_INDEXES"                 count="3"  value="0x1603">
+        <size name="Materialfv"/>
+        <size name="Materialiv"/>
+        <size name="GetMaterialfv" mode="get"/>
+        <size name="GetMaterialiv" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW"                                value="0x1700"/>
+    <enum name="PROJECTION"                               value="0x1701"/>
+    <enum name="TEXTURE"                                  value="0x1702"/>
+    <enum name="COLOR"                                    value="0x1800"/>
+    <enum name="DEPTH"                                    value="0x1801"/>
+    <enum name="STENCIL"                                  value="0x1802"/>
+    <enum name="COLOR_INDEX"                              value="0x1900"/>
+    <enum name="STENCIL_INDEX"                            value="0x1901"/>
+    <enum name="DEPTH_COMPONENT"                          value="0x1902"/>
+    <enum name="RED"                                      value="0x1903"/>
+    <enum name="GREEN"                                    value="0x1904"/>
+    <enum name="BLUE"                                     value="0x1905"/>
+    <enum name="ALPHA"                                    value="0x1906"/>
+    <enum name="RGBA"                                     value="0x1908"/>
+    <enum name="RGB"                                      value="0x1907"/>
+    <enum name="LUMINANCE"                                value="0x1909"/>
+    <enum name="LUMINANCE_ALPHA"                          value="0x190A"/>
+    <enum name="BITMAP"                                   value="0x1A00"/>
+    <enum name="POINT"                                    value="0x1B00"/>
+    <enum name="LINE"                                     value="0x1B01"/>
+    <enum name="FILL"                                     value="0x1B02"/>
+    <enum name="FEEDBACK"                                 value="0x1C01"/>
+    <enum name="RENDER"                                   value="0x1C00"/>
+    <enum name="SELECT"                                   value="0x1C02"/>
+    <enum name="FLAT"                                     value="0x1D00"/>
+    <enum name="SMOOTH"                                   value="0x1D01"/>
+    <enum name="KEEP"                                     value="0x1E00"/>
+    <enum name="REPLACE"                                  value="0x1E01"/>
+    <enum name="INCR"                                     value="0x1E02"/>
+    <enum name="DECR"                                     value="0x1E03"/>
+    <enum name="VENDOR"                                   value="0x1F00"/>
+    <enum name="RENDERER"                                 value="0x1F01"/>
+    <enum name="VERSION"                                  value="0x1F02"/>
+    <enum name="EXTENSIONS"                               value="0x1F03"/>
+    <enum name="S"                                        value="0x2000"/>
+    <enum name="T"                                        value="0x2001"/>
+    <enum name="R"                                        value="0x2002"/>
+    <enum name="Q"                                        value="0x2003"/>
+    <enum name="MODULATE"                                 value="0x2100"/>
+    <enum name="DECAL"                                    value="0x2101"/>
+    <enum name="TEXTURE_ENV_MODE"              count="1"  value="0x2200">
+        <size name="TexEnvfv"/>
+        <size name="TexEnviv"/>
+        <size name="GetTexEnvfv" mode="get"/>
+        <size name="GetTexEnviv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_ENV_COLOR"             count="4"  value="0x2201">
+        <size name="TexEnvfv"/>
+        <size name="TexEnviv"/>
+        <size name="GetTexEnvfv" mode="get"/>
+        <size name="GetTexEnviv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_ENV"                              value="0x2300"/>
+    <enum name="EYE_LINEAR"                               value="0x2400"/>
+    <enum name="OBJECT_LINEAR"                            value="0x2401"/>
+    <enum name="SPHERE_MAP"                               value="0x2402"/>
+    <enum name="TEXTURE_GEN_MODE"              count="1"  value="0x2500">
+        <size name="TexGendv"/>
+        <size name="TexGenfv"/>
+        <size name="TexGeniv"/>
+        <size name="GetTexGendv" mode="get"/>
+        <size name="GetTexGenfv" mode="get"/>
+        <size name="GetTexGeniv" mode="get"/>
+    </enum>
+    <enum name="OBJECT_PLANE"                  count="4"  value="0x2501">
+        <size name="TexGendv"/>
+        <size name="TexGenfv"/>
+        <size name="TexGeniv"/>
+        <size name="GetTexGendv" mode="get"/>
+        <size name="GetTexGenfv" mode="get"/>
+        <size name="GetTexGeniv" mode="get"/>
+    </enum>
+    <enum name="EYE_PLANE"                     count="4"  value="0x2502">
+        <size name="TexGendv"/>
+        <size name="TexGenfv"/>
+        <size name="TexGeniv"/>
+        <size name="GetTexGendv" mode="get"/>
+        <size name="GetTexGenfv" mode="get"/>
+        <size name="GetTexGeniv" mode="get"/>
+    </enum>
+    <enum name="NEAREST"                                  value="0x2600"/>
+    <enum name="LINEAR"                                   value="0x2601"/>
+    <enum name="NEAREST_MIPMAP_NEAREST"                   value="0x2700"/>
+    <enum name="LINEAR_MIPMAP_NEAREST"                    value="0x2701"/>
+    <enum name="NEAREST_MIPMAP_LINEAR"                    value="0x2702"/>
+    <enum name="LINEAR_MIPMAP_LINEAR"                     value="0x2703"/>
+    <enum name="TEXTURE_MAG_FILTER"            count="1"  value="0x2800">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_MIN_FILTER"            count="1"  value="0x2801">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_WRAP_S"                count="1"  value="0x2802">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_WRAP_T"                count="1"  value="0x2803">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+    <enum name="CLAMP"                                    value="0x2900"/>
+    <enum name="REPEAT"                                   value="0x2901"/>
+    <enum name="CLIP_PLANE0"                   count="1"  value="0x3000">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="CLIP_PLANE1"                   count="1"  value="0x3001">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="CLIP_PLANE2"                   count="1"  value="0x3002">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="CLIP_PLANE3"                   count="1"  value="0x3003">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="CLIP_PLANE4"                   count="1"  value="0x3004">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="CLIP_PLANE5"                   count="1"  value="0x3005">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="LIGHT0"                        count="1"  value="0x4000">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="LIGHT1"                        count="1"  value="0x4001">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="LIGHT2"                        count="1"  value="0x4002">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="LIGHT3"                        count="1"  value="0x4003">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="LIGHT4"                        count="1"  value="0x4004">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="LIGHT5"                        count="1"  value="0x4005">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="LIGHT6"                        count="1"  value="0x4006">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="LIGHT7"                        count="1"  value="0x4007">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="CURRENT_BIT"                              value="0x00000001"/>
+    <enum name="POINT_BIT"                                value="0x00000002"/>
+    <enum name="LINE_BIT"                                 value="0x00000004"/>
+    <enum name="POLYGON_BIT"                              value="0x00000008"/>
+    <enum name="POLYGON_STIPPLE_BIT"                      value="0x00000010"/>
+    <enum name="PIXEL_MODE_BIT"                           value="0x00000020"/>
+    <enum name="LIGHTING_BIT"                             value="0x00000040"/>
+    <enum name="FOG_BIT"                                  value="0x00000080"/>
+    <enum name="DEPTH_BUFFER_BIT"                         value="0x00000100"/>
+    <enum name="ACCUM_BUFFER_BIT"                         value="0x00000200"/>
+    <enum name="STENCIL_BUFFER_BIT"                       value="0x00000400"/>
+    <enum name="VIEWPORT_BIT"                             value="0x00000800"/>
+    <enum name="TRANSFORM_BIT"                            value="0x00001000"/>
+    <enum name="ENABLE_BIT"                               value="0x00002000"/>
+    <enum name="COLOR_BUFFER_BIT"                         value="0x00004000"/>
+    <enum name="HINT_BIT"                                 value="0x00008000"/>
+    <enum name="EVAL_BIT"                                 value="0x00010000"/>
+    <enum name="LIST_BIT"                                 value="0x00020000"/>
+    <enum name="TEXTURE_BIT"                              value="0x00040000"/>
+    <enum name="SCISSOR_BIT"                              value="0x00080000"/>
+    <enum name="ALL_ATTRIB_BITS"                          value="0x000FFFFF"/>
+
+    <type name="double"  size="8"  float="true"    glx_name="FLOAT64"/>
+    <type name="clampd"  size="8"  float="true"    glx_name="FLOAT64"/>
+
+    <type name="float"   size="4"  float="true"    glx_name="FLOAT32"/>
+    <type name="clampf"  size="4"  float="true"    glx_name="FLOAT32"/>
+
+    <type name="int"     size="4"                  glx_name="CARD32"/>
+    <type name="uint"    size="4"  unsigned="true" glx_name="CARD32"/>
+    <type name="sizei"   size="4"  unsigned="true" glx_name="CARD32"/>
+    <type name="enum"    size="4"  unsigned="true" glx_name="ENUM"/>
+    <type name="bitfield" size="4" unsigned="true" glx_name="CARD32"/>
+
+    <type name="short"   size="2"                  glx_name="CARD16"/>
+    <type name="ushort"  size="2"  unsigned="true" glx_name="CARD16"/>
+
+    <type name="byte"    size="1"                  glx_name="CARD8"/>
+    <type name="ubyte"   size="1"  unsigned="true" glx_name="CARD8"/>
+    <type name="boolean" size="1"  unsigned="true" glx_name="CARD8"/>
+    
+    <type name="void"    size="1"/>
+
+    <function name="NewList" offset="0">
+        <param name="list" type="GLuint"/>
+        <param name="mode" type="GLenum"/>
+        <glx sop="101"/>
+    </function>
+
+    <function name="EndList" offset="1">
+        <glx sop="102"/>
+    </function>
+
+    <function name="CallList" offset="2">
+        <param name="list" type="GLuint"/>
+        <glx rop="1"/>
+    </function>
+
+    <function name="CallLists" offset="3">
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="type" type="GLenum"/>
+        <param name="lists" type="const GLvoid *" variable_param="type" count="n"/>
+        <glx rop="2" large="true"/>
+    </function>
+
+    <function name="DeleteLists" offset="4">
+        <param name="list" type="GLuint"/>
+        <param name="range" type="GLsizei"/>
+        <glx sop="103"/>
+    </function>
+
+    <function name="GenLists" offset="5">
+        <param name="range" type="GLsizei"/>
+        <return type="GLuint"/>
+        <glx sop="104"/>
+    </function>
+
+    <function name="ListBase" offset="6">
+        <param name="base" type="GLuint"/>
+        <glx rop="3"/>
+    </function>
+
+    <function name="Begin" offset="7">
+        <param name="mode" type="GLenum"/>
+        <glx rop="4"/>
+    </function>
+
+    <function name="Bitmap" offset="8">
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="xorig" type="GLfloat"/>
+        <param name="yorig" type="GLfloat"/>
+        <param name="xmove" type="GLfloat"/>
+        <param name="ymove" type="GLfloat"/>
+        <param name="bitmap" type="const GLubyte *" img_width="width" img_height="height" img_format="GL_COLOR_INDEX" img_type="GL_BITMAP" img_target="0" img_pad_dimensions="false"/>
+        <glx rop="5" large="true"/>
+    </function>
+
+    <function name="Color3b" offset="9" vectorequiv="Color3bv">
+        <param name="red" type="GLbyte"/>
+        <param name="green" type="GLbyte"/>
+        <param name="blue" type="GLbyte"/>
+    </function>
+
+    <function name="Color3bv" offset="10">
+        <param name="v" type="const GLbyte *" count="3"/>
+        <glx rop="6"/>
+    </function>
+
+    <function name="Color3d" offset="11" vectorequiv="Color3dv">
+        <param name="red" type="GLdouble"/>
+        <param name="green" type="GLdouble"/>
+        <param name="blue" type="GLdouble"/>
+    </function>
+
+    <function name="Color3dv" offset="12">
+        <param name="v" type="const GLdouble *" count="3"/>
+        <glx rop="7"/>
+    </function>
+
+    <function name="Color3f" offset="13" vectorequiv="Color3fv">
+        <param name="red" type="GLfloat"/>
+        <param name="green" type="GLfloat"/>
+        <param name="blue" type="GLfloat"/>
+    </function>
+
+    <function name="Color3fv" offset="14">
+        <param name="v" type="const GLfloat *" count="3"/>
+        <glx rop="8"/>
+    </function>
+
+    <function name="Color3i" offset="15" vectorequiv="Color3iv">
+        <param name="red" type="GLint"/>
+        <param name="green" type="GLint"/>
+        <param name="blue" type="GLint"/>
+    </function>
+
+    <function name="Color3iv" offset="16">
+        <param name="v" type="const GLint *" count="3"/>
+        <glx rop="9"/>
+    </function>
+
+    <function name="Color3s" offset="17" vectorequiv="Color3sv">
+        <param name="red" type="GLshort"/>
+        <param name="green" type="GLshort"/>
+        <param name="blue" type="GLshort"/>
+    </function>
+
+    <function name="Color3sv" offset="18">
+        <param name="v" type="const GLshort *" count="3"/>
+        <glx rop="10"/>
+    </function>
+
+    <function name="Color3ub" offset="19" vectorequiv="Color3ubv">
+        <param name="red" type="GLubyte"/>
+        <param name="green" type="GLubyte"/>
+        <param name="blue" type="GLubyte"/>
+    </function>
+
+    <function name="Color3ubv" offset="20">
+        <param name="v" type="const GLubyte *" count="3"/>
+        <glx rop="11"/>
+    </function>
+
+    <function name="Color3ui" offset="21" vectorequiv="Color3uiv">
+        <param name="red" type="GLuint"/>
+        <param name="green" type="GLuint"/>
+        <param name="blue" type="GLuint"/>
+    </function>
+
+    <function name="Color3uiv" offset="22">
+        <param name="v" type="const GLuint *" count="3"/>
+        <glx rop="12"/>
+    </function>
+
+    <function name="Color3us" offset="23" vectorequiv="Color3usv">
+        <param name="red" type="GLushort"/>
+        <param name="green" type="GLushort"/>
+        <param name="blue" type="GLushort"/>
+    </function>
+
+    <function name="Color3usv" offset="24">
+        <param name="v" type="const GLushort *" count="3"/>
+        <glx rop="13"/>
+    </function>
+
+    <function name="Color4b" offset="25" vectorequiv="Color4bv">
+        <param name="red" type="GLbyte"/>
+        <param name="green" type="GLbyte"/>
+        <param name="blue" type="GLbyte"/>
+        <param name="alpha" type="GLbyte"/>
+    </function>
+
+    <function name="Color4bv" offset="26">
+        <param name="v" type="const GLbyte *" count="4"/>
+        <glx rop="14"/>
+    </function>
+
+    <function name="Color4d" offset="27" vectorequiv="Color4dv">
+        <param name="red" type="GLdouble"/>
+        <param name="green" type="GLdouble"/>
+        <param name="blue" type="GLdouble"/>
+        <param name="alpha" type="GLdouble"/>
+    </function>
+
+    <function name="Color4dv" offset="28">
+        <param name="v" type="const GLdouble *" count="4"/>
+        <glx rop="15"/>
+    </function>
+
+    <function name="Color4f" offset="29" vectorequiv="Color4fv">
+        <param name="red" type="GLfloat"/>
+        <param name="green" type="GLfloat"/>
+        <param name="blue" type="GLfloat"/>
+        <param name="alpha" type="GLfloat"/>
+    </function>
+
+    <function name="Color4fv" offset="30">
+        <param name="v" type="const GLfloat *" count="4"/>
+        <glx rop="16"/>
+    </function>
+
+    <function name="Color4i" offset="31" vectorequiv="Color4iv">
+        <param name="red" type="GLint"/>
+        <param name="green" type="GLint"/>
+        <param name="blue" type="GLint"/>
+        <param name="alpha" type="GLint"/>
+    </function>
+
+    <function name="Color4iv" offset="32">
+        <param name="v" type="const GLint *" count="4"/>
+        <glx rop="17"/>
+    </function>
+
+    <function name="Color4s" offset="33" vectorequiv="Color4sv">
+        <param name="red" type="GLshort"/>
+        <param name="green" type="GLshort"/>
+        <param name="blue" type="GLshort"/>
+        <param name="alpha" type="GLshort"/>
+    </function>
+
+    <function name="Color4sv" offset="34">
+        <param name="v" type="const GLshort *" count="4"/>
+        <glx rop="18"/>
+    </function>
+
+    <function name="Color4ub" offset="35" vectorequiv="Color4ubv">
+        <param name="red" type="GLubyte"/>
+        <param name="green" type="GLubyte"/>
+        <param name="blue" type="GLubyte"/>
+        <param name="alpha" type="GLubyte"/>
+    </function>
+
+    <function name="Color4ubv" offset="36">
+        <param name="v" type="const GLubyte *" count="4"/>
+        <glx rop="19"/>
+    </function>
+
+    <function name="Color4ui" offset="37" vectorequiv="Color4uiv">
+        <param name="red" type="GLuint"/>
+        <param name="green" type="GLuint"/>
+        <param name="blue" type="GLuint"/>
+        <param name="alpha" type="GLuint"/>
+    </function>
+
+    <function name="Color4uiv" offset="38">
+        <param name="v" type="const GLuint *" count="4"/>
+        <glx rop="20"/>
+    </function>
+
+    <function name="Color4us" offset="39" vectorequiv="Color4usv">
+        <param name="red" type="GLushort"/>
+        <param name="green" type="GLushort"/>
+        <param name="blue" type="GLushort"/>
+        <param name="alpha" type="GLushort"/>
+    </function>
+
+    <function name="Color4usv" offset="40">
+        <param name="v" type="const GLushort *" count="4"/>
+        <glx rop="21"/>
+    </function>
+
+    <function name="EdgeFlag" offset="41" vectorequiv="EdgeFlagv">
+        <param name="flag" type="GLboolean"/>
+    </function>
+
+    <function name="EdgeFlagv" offset="42">
+        <param name="flag" type="const GLboolean *" count="1"/>
+        <glx rop="22"/>
+    </function>
+
+    <function name="End" offset="43">
+        <glx rop="23"/>
+    </function>
+
+    <function name="Indexd" offset="44" vectorequiv="Indexdv">
+        <param name="c" type="GLdouble"/>
+    </function>
+
+    <function name="Indexdv" offset="45">
+        <param name="c" type="const GLdouble *" count="1"/>
+        <glx rop="24"/>
+    </function>
+
+    <function name="Indexf" offset="46" vectorequiv="Indexfv">
+        <param name="c" type="GLfloat"/>
+    </function>
+
+    <function name="Indexfv" offset="47">
+        <param name="c" type="const GLfloat *" count="1"/>
+        <glx rop="25"/>
+    </function>
+
+    <function name="Indexi" offset="48" vectorequiv="Indexiv">
+        <param name="c" type="GLint"/>
+    </function>
+
+    <function name="Indexiv" offset="49">
+        <param name="c" type="const GLint *" count="1"/>
+        <glx rop="26"/>
+    </function>
+
+    <function name="Indexs" offset="50" vectorequiv="Indexsv">
+        <param name="c" type="GLshort"/>
+    </function>
+
+    <function name="Indexsv" offset="51">
+        <param name="c" type="const GLshort *" count="1"/>
+        <glx rop="27"/>
+    </function>
+
+    <function name="Normal3b" offset="52" vectorequiv="Normal3bv">
+        <param name="nx" type="GLbyte"/>
+        <param name="ny" type="GLbyte"/>
+        <param name="nz" type="GLbyte"/>
+    </function>
+
+    <function name="Normal3bv" offset="53">
+        <param name="v" type="const GLbyte *" count="3"/>
+        <glx rop="28"/>
+    </function>
+
+    <function name="Normal3d" offset="54" vectorequiv="Normal3dv">
+        <param name="nx" type="GLdouble"/>
+        <param name="ny" type="GLdouble"/>
+        <param name="nz" type="GLdouble"/>
+    </function>
+
+    <function name="Normal3dv" offset="55">
+        <param name="v" type="const GLdouble *" count="3"/>
+        <glx rop="29"/>
+    </function>
+
+    <function name="Normal3f" offset="56" vectorequiv="Normal3fv">
+        <param name="nx" type="GLfloat"/>
+        <param name="ny" type="GLfloat"/>
+        <param name="nz" type="GLfloat"/>
+    </function>
+
+    <function name="Normal3fv" offset="57">
+        <param name="v" type="const GLfloat *" count="3"/>
+        <glx rop="30"/>
+    </function>
+
+    <function name="Normal3i" offset="58" vectorequiv="Normal3iv">
+        <param name="nx" type="GLint"/>
+        <param name="ny" type="GLint"/>
+        <param name="nz" type="GLint"/>
+    </function>
+
+    <function name="Normal3iv" offset="59">
+        <param name="v" type="const GLint *" count="3"/>
+        <glx rop="31"/>
+    </function>
+
+    <function name="Normal3s" offset="60" vectorequiv="Normal3sv">
+        <param name="nx" type="GLshort"/>
+        <param name="ny" type="GLshort"/>
+        <param name="nz" type="GLshort"/>
+    </function>
+
+    <function name="Normal3sv" offset="61">
+        <param name="v" type="const GLshort *" count="3"/>
+        <glx rop="32"/>
+    </function>
+
+    <function name="RasterPos2d" offset="62" vectorequiv="RasterPos2dv">
+        <param name="x" type="GLdouble"/>
+        <param name="y" type="GLdouble"/>
+    </function>
+
+    <function name="RasterPos2dv" offset="63">
+        <param name="v" type="const GLdouble *" count="2"/>
+        <glx rop="33"/>
+    </function>
+
+    <function name="RasterPos2f" offset="64" vectorequiv="RasterPos2fv">
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+    </function>
+
+    <function name="RasterPos2fv" offset="65">
+        <param name="v" type="const GLfloat *" count="2"/>
+        <glx rop="34"/>
+    </function>
+
+    <function name="RasterPos2i" offset="66" vectorequiv="RasterPos2iv">
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+    </function>
+
+    <function name="RasterPos2iv" offset="67">
+        <param name="v" type="const GLint *" count="2"/>
+        <glx rop="35"/>
+    </function>
+
+    <function name="RasterPos2s" offset="68" vectorequiv="RasterPos2sv">
+        <param name="x" type="GLshort"/>
+        <param name="y" type="GLshort"/>
+    </function>
+
+    <function name="RasterPos2sv" offset="69">
+        <param name="v" type="const GLshort *" count="2"/>
+        <glx rop="36"/>
+    </function>
+
+    <function name="RasterPos3d" offset="70" vectorequiv="RasterPos3dv">
+        <param name="x" type="GLdouble"/>
+        <param name="y" type="GLdouble"/>
+        <param name="z" type="GLdouble"/>
+    </function>
+
+    <function name="RasterPos3dv" offset="71">
+        <param name="v" type="const GLdouble *" count="3"/>
+        <glx rop="37"/>
+    </function>
+
+    <function name="RasterPos3f" offset="72" vectorequiv="RasterPos3fv">
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+    </function>
+
+    <function name="RasterPos3fv" offset="73">
+        <param name="v" type="const GLfloat *" count="3"/>
+        <glx rop="38"/>
+    </function>
+
+    <function name="RasterPos3i" offset="74" vectorequiv="RasterPos3iv">
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+        <param name="z" type="GLint"/>
+    </function>
+
+    <function name="RasterPos3iv" offset="75">
+        <param name="v" type="const GLint *" count="3"/>
+        <glx rop="39"/>
+    </function>
+
+    <function name="RasterPos3s" offset="76" vectorequiv="RasterPos3sv">
+        <param name="x" type="GLshort"/>
+        <param name="y" type="GLshort"/>
+        <param name="z" type="GLshort"/>
+    </function>
+
+    <function name="RasterPos3sv" offset="77">
+        <param name="v" type="const GLshort *" count="3"/>
+        <glx rop="40"/>
+    </function>
+
+    <function name="RasterPos4d" offset="78" vectorequiv="RasterPos4dv">
+        <param name="x" type="GLdouble"/>
+        <param name="y" type="GLdouble"/>
+        <param name="z" type="GLdouble"/>
+        <param name="w" type="GLdouble"/>
+    </function>
+
+    <function name="RasterPos4dv" offset="79">
+        <param name="v" type="const GLdouble *" count="4"/>
+        <glx rop="41"/>
+    </function>
+
+    <function name="RasterPos4f" offset="80" vectorequiv="RasterPos4fv">
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+        <param name="w" type="GLfloat"/>
+    </function>
+
+    <function name="RasterPos4fv" offset="81">
+        <param name="v" type="const GLfloat *" count="4"/>
+        <glx rop="42"/>
+    </function>
+
+    <function name="RasterPos4i" offset="82" vectorequiv="RasterPos4iv">
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+        <param name="z" type="GLint"/>
+        <param name="w" type="GLint"/>
+    </function>
+
+    <function name="RasterPos4iv" offset="83">
+        <param name="v" type="const GLint *" count="4"/>
+        <glx rop="43"/>
+    </function>
+
+    <function name="RasterPos4s" offset="84" vectorequiv="RasterPos4sv">
+        <param name="x" type="GLshort"/>
+        <param name="y" type="GLshort"/>
+        <param name="z" type="GLshort"/>
+        <param name="w" type="GLshort"/>
+    </function>
+
+    <function name="RasterPos4sv" offset="85">
+        <param name="v" type="const GLshort *" count="4"/>
+        <glx rop="44"/>
+    </function>
+
+    <function name="Rectd" offset="86" vectorequiv="Rectdv">
+        <param name="x1" type="GLdouble"/>
+        <param name="y1" type="GLdouble"/>
+        <param name="x2" type="GLdouble"/>
+        <param name="y2" type="GLdouble"/>
+    </function>
+
+    <function name="Rectdv" offset="87">
+        <param name="v1" type="const GLdouble *" count="2"/>
+        <param name="v2" type="const GLdouble *" count="2"/>
+        <glx rop="45"/>
+    </function>
+
+    <function name="Rectf" offset="88" vectorequiv="Rectfv">
+        <param name="x1" type="GLfloat"/>
+        <param name="y1" type="GLfloat"/>
+        <param name="x2" type="GLfloat"/>
+        <param name="y2" type="GLfloat"/>
+    </function>
+
+    <function name="Rectfv" offset="89">
+        <param name="v1" type="const GLfloat *" count="2"/>
+        <param name="v2" type="const GLfloat *" count="2"/>
+        <glx rop="46"/>
+    </function>
+
+    <function name="Recti" offset="90" vectorequiv="Rectiv">
+        <param name="x1" type="GLint"/>
+        <param name="y1" type="GLint"/>
+        <param name="x2" type="GLint"/>
+        <param name="y2" type="GLint"/>
+    </function>
+
+    <function name="Rectiv" offset="91">
+        <param name="v1" type="const GLint *" count="2"/>
+        <param name="v2" type="const GLint *" count="2"/>
+        <glx rop="47"/>
+    </function>
+
+    <function name="Rects" offset="92" vectorequiv="Rectsv">
+        <param name="x1" type="GLshort"/>
+        <param name="y1" type="GLshort"/>
+        <param name="x2" type="GLshort"/>
+        <param name="y2" type="GLshort"/>
+    </function>
+
+    <function name="Rectsv" offset="93">
+        <param name="v1" type="const GLshort *" count="2"/>
+        <param name="v2" type="const GLshort *" count="2"/>
+        <glx rop="48"/>
+    </function>
+
+    <function name="TexCoord1d" offset="94" vectorequiv="TexCoord1dv">
+        <param name="s" type="GLdouble"/>
+    </function>
+
+    <function name="TexCoord1dv" offset="95">
+        <param name="v" type="const GLdouble *" count="1"/>
+        <glx rop="49"/>
+    </function>
+
+    <function name="TexCoord1f" offset="96" vectorequiv="TexCoord1fv">
+        <param name="s" type="GLfloat"/>
+    </function>
+
+    <function name="TexCoord1fv" offset="97">
+        <param name="v" type="const GLfloat *" count="1"/>
+        <glx rop="50"/>
+    </function>
+
+    <function name="TexCoord1i" offset="98" vectorequiv="TexCoord1iv">
+        <param name="s" type="GLint"/>
+    </function>
+
+    <function name="TexCoord1iv" offset="99">
+        <param name="v" type="const GLint *" count="1"/>
+        <glx rop="51"/>
+    </function>
+
+    <function name="TexCoord1s" offset="100" vectorequiv="TexCoord1sv">
+        <param name="s" type="GLshort"/>
+    </function>
+
+    <function name="TexCoord1sv" offset="101">
+        <param name="v" type="const GLshort *" count="1"/>
+        <glx rop="52"/>
+    </function>
+
+    <function name="TexCoord2d" offset="102" vectorequiv="TexCoord2dv">
+        <param name="s" type="GLdouble"/>
+        <param name="t" type="GLdouble"/>
+    </function>
+
+    <function name="TexCoord2dv" offset="103">
+        <param name="v" type="const GLdouble *" count="2"/>
+        <glx rop="53"/>
+    </function>
+
+    <function name="TexCoord2f" offset="104" vectorequiv="TexCoord2fv">
+        <param name="s" type="GLfloat"/>
+        <param name="t" type="GLfloat"/>
+    </function>
+
+    <function name="TexCoord2fv" offset="105">
+        <param name="v" type="const GLfloat *" count="2"/>
+        <glx rop="54"/>
+    </function>
+
+    <function name="TexCoord2i" offset="106" vectorequiv="TexCoord2iv">
+        <param name="s" type="GLint"/>
+        <param name="t" type="GLint"/>
+    </function>
+
+    <function name="TexCoord2iv" offset="107">
+        <param name="v" type="const GLint *" count="2"/>
+        <glx rop="55"/>
+    </function>
+
+    <function name="TexCoord2s" offset="108" vectorequiv="TexCoord2sv">
+        <param name="s" type="GLshort"/>
+        <param name="t" type="GLshort"/>
+    </function>
+
+    <function name="TexCoord2sv" offset="109">
+        <param name="v" type="const GLshort *" count="2"/>
+        <glx rop="56"/>
+    </function>
+
+    <function name="TexCoord3d" offset="110" vectorequiv="TexCoord3dv">
+        <param name="s" type="GLdouble"/>
+        <param name="t" type="GLdouble"/>
+        <param name="r" type="GLdouble"/>
+    </function>
+
+    <function name="TexCoord3dv" offset="111">
+        <param name="v" type="const GLdouble *" count="3"/>
+        <glx rop="57"/>
+    </function>
+
+    <function name="TexCoord3f" offset="112" vectorequiv="TexCoord3fv">
+        <param name="s" type="GLfloat"/>
+        <param name="t" type="GLfloat"/>
+        <param name="r" type="GLfloat"/>
+    </function>
+
+    <function name="TexCoord3fv" offset="113">
+        <param name="v" type="const GLfloat *" count="3"/>
+        <glx rop="58"/>
+    </function>
+
+    <function name="TexCoord3i" offset="114" vectorequiv="TexCoord3iv">
+        <param name="s" type="GLint"/>
+        <param name="t" type="GLint"/>
+        <param name="r" type="GLint"/>
+    </function>
+
+    <function name="TexCoord3iv" offset="115">
+        <param name="v" type="const GLint *" count="3"/>
+        <glx rop="59"/>
+    </function>
+
+    <function name="TexCoord3s" offset="116" vectorequiv="TexCoord3sv">
+        <param name="s" type="GLshort"/>
+        <param name="t" type="GLshort"/>
+        <param name="r" type="GLshort"/>
+    </function>
+
+    <function name="TexCoord3sv" offset="117">
+        <param name="v" type="const GLshort *" count="3"/>
+        <glx rop="60"/>
+    </function>
+
+    <function name="TexCoord4d" offset="118" vectorequiv="TexCoord4dv">
+        <param name="s" type="GLdouble"/>
+        <param name="t" type="GLdouble"/>
+        <param name="r" type="GLdouble"/>
+        <param name="q" type="GLdouble"/>
+    </function>
+
+    <function name="TexCoord4dv" offset="119">
+        <param name="v" type="const GLdouble *" count="4"/>
+        <glx rop="61"/>
+    </function>
+
+    <function name="TexCoord4f" offset="120" vectorequiv="TexCoord4fv">
+        <param name="s" type="GLfloat"/>
+        <param name="t" type="GLfloat"/>
+        <param name="r" type="GLfloat"/>
+        <param name="q" type="GLfloat"/>
+    </function>
+
+    <function name="TexCoord4fv" offset="121">
+        <param name="v" type="const GLfloat *" count="4"/>
+        <glx rop="62"/>
+    </function>
+
+    <function name="TexCoord4i" offset="122" vectorequiv="TexCoord4iv">
+        <param name="s" type="GLint"/>
+        <param name="t" type="GLint"/>
+        <param name="r" type="GLint"/>
+        <param name="q" type="GLint"/>
+    </function>
+
+    <function name="TexCoord4iv" offset="123">
+        <param name="v" type="const GLint *" count="4"/>
+        <glx rop="63"/>
+    </function>
+
+    <function name="TexCoord4s" offset="124" vectorequiv="TexCoord4sv">
+        <param name="s" type="GLshort"/>
+        <param name="t" type="GLshort"/>
+        <param name="r" type="GLshort"/>
+        <param name="q" type="GLshort"/>
+    </function>
+
+    <function name="TexCoord4sv" offset="125">
+        <param name="v" type="const GLshort *" count="4"/>
+        <glx rop="64"/>
+    </function>
+
+    <function name="Vertex2d" offset="126" vectorequiv="Vertex2dv">
+        <param name="x" type="GLdouble"/>
+        <param name="y" type="GLdouble"/>
+    </function>
+
+    <function name="Vertex2dv" offset="127">
+        <param name="v" type="const GLdouble *" count="2"/>
+        <glx rop="65"/>
+    </function>
+
+    <function name="Vertex2f" offset="128" vectorequiv="Vertex2fv">
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+    </function>
+
+    <function name="Vertex2fv" offset="129">
+        <param name="v" type="const GLfloat *" count="2"/>
+        <glx rop="66"/>
+    </function>
+
+    <function name="Vertex2i" offset="130" vectorequiv="Vertex2iv">
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+    </function>
+
+    <function name="Vertex2iv" offset="131">
+        <param name="v" type="const GLint *" count="2"/>
+        <glx rop="67"/>
+    </function>
+
+    <function name="Vertex2s" offset="132" vectorequiv="Vertex2sv">
+        <param name="x" type="GLshort"/>
+        <param name="y" type="GLshort"/>
+    </function>
+
+    <function name="Vertex2sv" offset="133">
+        <param name="v" type="const GLshort *" count="2"/>
+        <glx rop="68"/>
+    </function>
+
+    <function name="Vertex3d" offset="134" vectorequiv="Vertex3dv">
+        <param name="x" type="GLdouble"/>
+        <param name="y" type="GLdouble"/>
+        <param name="z" type="GLdouble"/>
+    </function>
+
+    <function name="Vertex3dv" offset="135">
+        <param name="v" type="const GLdouble *" count="3"/>
+        <glx rop="69"/>
+    </function>
+
+    <function name="Vertex3f" offset="136" vectorequiv="Vertex3fv">
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+    </function>
+
+    <function name="Vertex3fv" offset="137">
+        <param name="v" type="const GLfloat *" count="3"/>
+        <glx rop="70"/>
+    </function>
+
+    <function name="Vertex3i" offset="138" vectorequiv="Vertex3iv">
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+        <param name="z" type="GLint"/>
+    </function>
+
+    <function name="Vertex3iv" offset="139">
+        <param name="v" type="const GLint *" count="3"/>
+        <glx rop="71"/>
+    </function>
+
+    <function name="Vertex3s" offset="140" vectorequiv="Vertex3sv">
+        <param name="x" type="GLshort"/>
+        <param name="y" type="GLshort"/>
+        <param name="z" type="GLshort"/>
+    </function>
+
+    <function name="Vertex3sv" offset="141">
+        <param name="v" type="const GLshort *" count="3"/>
+        <glx rop="72"/>
+    </function>
+
+    <function name="Vertex4d" offset="142" vectorequiv="Vertex4dv">
+        <param name="x" type="GLdouble"/>
+        <param name="y" type="GLdouble"/>
+        <param name="z" type="GLdouble"/>
+        <param name="w" type="GLdouble"/>
+    </function>
+
+    <function name="Vertex4dv" offset="143">
+        <param name="v" type="const GLdouble *" count="4"/>
+        <glx rop="73"/>
+    </function>
+
+    <function name="Vertex4f" offset="144" vectorequiv="Vertex4fv">
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+        <param name="w" type="GLfloat"/>
+    </function>
+
+    <function name="Vertex4fv" offset="145">
+        <param name="v" type="const GLfloat *" count="4"/>
+        <glx rop="74"/>
+    </function>
+
+    <function name="Vertex4i" offset="146" vectorequiv="Vertex4iv">
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+        <param name="z" type="GLint"/>
+        <param name="w" type="GLint"/>
+    </function>
+
+    <function name="Vertex4iv" offset="147">
+        <param name="v" type="const GLint *" count="4"/>
+        <glx rop="75"/>
+    </function>
+
+    <function name="Vertex4s" offset="148" vectorequiv="Vertex4sv">
+        <param name="x" type="GLshort"/>
+        <param name="y" type="GLshort"/>
+        <param name="z" type="GLshort"/>
+        <param name="w" type="GLshort"/>
+    </function>
+
+    <function name="Vertex4sv" offset="149">
+        <param name="v" type="const GLshort *" count="4"/>
+        <glx rop="76"/>
+    </function>
+
+    <function name="ClipPlane" offset="150">
+        <param name="plane" type="GLenum"/>
+        <param name="equation" type="const GLdouble *" count="4"/>
+        <glx rop="77"/>
+    </function>
+
+    <function name="ColorMaterial" offset="151">
+        <param name="face" type="GLenum"/>
+        <param name="mode" type="GLenum"/>
+        <glx rop="78"/>
+    </function>
+
+    <function name="CullFace" offset="152">
+        <param name="mode" type="GLenum"/>
+        <glx rop="79"/>
+    </function>
+
+    <function name="Fogf" offset="153">
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLfloat"/>
+        <glx rop="80"/>
+    </function>
+
+    <function name="Fogfv" offset="154">
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLfloat *" variable_param="pname"/>
+        <glx rop="81"/>
+    </function>
+
+    <function name="Fogi" offset="155">
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLint"/>
+        <glx rop="82"/>
+    </function>
+
+    <function name="Fogiv" offset="156">
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLint *" variable_param="pname"/>
+        <glx rop="83"/>
+    </function>
+
+    <function name="FrontFace" offset="157">
+        <param name="mode" type="GLenum"/>
+        <glx rop="84"/>
+    </function>
+
+    <function name="Hint" offset="158">
+        <param name="target" type="GLenum"/>
+        <param name="mode" type="GLenum"/>
+        <glx rop="85"/>
+    </function>
+
+    <function name="Lightf" offset="159">
+        <param name="light" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLfloat"/>
+        <glx rop="86"/>
+    </function>
+
+    <function name="Lightfv" offset="160">
+        <param name="light" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLfloat *" variable_param="pname"/>
+        <glx rop="87"/>
+    </function>
+
+    <function name="Lighti" offset="161">
+        <param name="light" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLint"/>
+        <glx rop="88"/>
+    </function>
+
+    <function name="Lightiv" offset="162">
+        <param name="light" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLint *" variable_param="pname"/>
+        <glx rop="89"/>
+    </function>
+
+    <function name="LightModelf" offset="163">
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLfloat"/>
+        <glx rop="90"/>
+    </function>
+
+    <function name="LightModelfv" offset="164">
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLfloat *" variable_param="pname"/>
+        <glx rop="91"/>
+    </function>
+
+    <function name="LightModeli" offset="165">
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLint"/>
+        <glx rop="92"/>
+    </function>
+
+    <function name="LightModeliv" offset="166">
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLint *" variable_param="pname"/>
+        <glx rop="93"/>
+    </function>
+
+    <function name="LineStipple" offset="167">
+        <param name="factor" type="GLint"/>
+        <param name="pattern" type="GLushort"/>
+        <glx rop="94"/>
+    </function>
+
+    <function name="LineWidth" offset="168">
+        <param name="width" type="GLfloat"/>
+        <glx rop="95"/>
+    </function>
+
+    <function name="Materialf" offset="169">
+        <param name="face" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLfloat"/>
+        <glx rop="96"/>
+    </function>
+
+    <function name="Materialfv" offset="170">
+        <param name="face" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLfloat *" variable_param="pname"/>
+        <glx rop="97"/>
+    </function>
+
+    <function name="Materiali" offset="171">
+        <param name="face" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLint"/>
+        <glx rop="98"/>
+    </function>
+
+    <function name="Materialiv" offset="172">
+        <param name="face" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLint *" variable_param="pname"/>
+        <glx rop="99"/>
+    </function>
+
+    <function name="PointSize" offset="173">
+        <param name="size" type="GLfloat"/>
+        <glx rop="100"/>
+    </function>
+
+    <function name="PolygonMode" offset="174">
+        <param name="face" type="GLenum"/>
+        <param name="mode" type="GLenum"/>
+        <glx rop="101"/>
+    </function>
+
+    <function name="PolygonStipple" offset="175">
+        <param name="mask" type="const GLubyte *" img_width="32" img_height="32" img_format="GL_COLOR_INDEX" img_type="GL_BITMAP" img_target="0" img_pad_dimensions="false"/>
+        <glx rop="102"/>
+    </function>
+
+    <function name="Scissor" offset="176">
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <glx rop="103"/>
+    </function>
+
+    <function name="ShadeModel" offset="177">
+        <param name="mode" type="GLenum"/>
+        <glx rop="104"/>
+    </function>
+
+    <function name="TexParameterf" offset="178">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLfloat"/>
+        <glx rop="105"/>
+    </function>
+
+    <function name="TexParameterfv" offset="179">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLfloat *" variable_param="pname"/>
+        <glx rop="106"/>
+    </function>
+
+    <function name="TexParameteri" offset="180">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLint"/>
+        <glx rop="107"/>
+    </function>
+
+    <function name="TexParameteriv" offset="181">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLint *" variable_param="pname"/>
+        <glx rop="108"/>
+    </function>
+
+    <function name="TexImage1D" offset="182">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="internalformat" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <param name="border" type="GLint"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="pixels" type="const GLvoid *" img_width="width" img_format="format" img_type="type" img_target="target" img_send_null="true" img_pad_dimensions="true"/>
+        <glx rop="109" large="true"/>
+    </function>
+
+    <function name="TexImage2D" offset="183">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="internalformat" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="border" type="GLint"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="pixels" type="const GLvoid *" img_width="width" img_height="height" img_format="format" img_type="type" img_target="target" img_send_null="true" img_pad_dimensions="true"/>
+        <glx rop="110" large="true"/>
+    </function>
+
+    <function name="TexEnvf" offset="184">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLfloat"/>
+        <glx rop="111"/>
+    </function>
+
+    <function name="TexEnvfv" offset="185">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLfloat *" variable_param="pname"/>
+        <glx rop="112"/>
+    </function>
+
+    <function name="TexEnvi" offset="186">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLint"/>
+        <glx rop="113"/>
+    </function>
+
+    <function name="TexEnviv" offset="187">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLint *" variable_param="pname"/>
+        <glx rop="114"/>
+    </function>
+
+    <function name="TexGend" offset="188">
+        <param name="coord" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLdouble"/>
+        <glx rop="115"/>
+    </function>
+
+    <function name="TexGendv" offset="189">
+        <param name="coord" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLdouble *" variable_param="pname"/>
+        <glx rop="116"/>
+    </function>
+
+    <function name="TexGenf" offset="190">
+        <param name="coord" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLfloat"/>
+        <glx rop="117"/>
+    </function>
+
+    <function name="TexGenfv" offset="191">
+        <param name="coord" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLfloat *" variable_param="pname"/>
+        <glx rop="118"/>
+    </function>
+
+    <function name="TexGeni" offset="192">
+        <param name="coord" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLint"/>
+        <glx rop="119"/>
+    </function>
+
+    <function name="TexGeniv" offset="193">
+        <param name="coord" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLint *" variable_param="pname"/>
+        <glx rop="120"/>
+    </function>
+
+    <function name="FeedbackBuffer" offset="194">
+        <param name="size" type="GLsizei"/>
+        <param name="type" type="GLenum"/>
+        <param name="buffer" type="GLfloat *" output="true"/>
+        <glx sop="105" handcode="true"/>
+    </function>
+
+    <function name="SelectBuffer" offset="195">
+        <param name="size" type="GLsizei"/>
+        <param name="buffer" type="GLuint *" output="true"/>
+        <glx sop="106" handcode="true"/>
+    </function>
+
+    <function name="RenderMode" offset="196">
+        <param name="mode" type="GLenum"/>
+        <return type="GLint"/>
+        <glx sop="107" handcode="true"/>
+    </function>
+
+    <function name="InitNames" offset="197">
+        <glx rop="121"/>
+    </function>
+
+    <function name="LoadName" offset="198">
+        <param name="name" type="GLuint"/>
+        <glx rop="122"/>
+    </function>
+
+    <function name="PassThrough" offset="199">
+        <param name="token" type="GLfloat"/>
+        <glx rop="123"/>
+    </function>
+
+    <function name="PopName" offset="200">
+        <glx rop="124"/>
+    </function>
+
+    <function name="PushName" offset="201">
+        <param name="name" type="GLuint"/>
+        <glx rop="125"/>
+    </function>
+
+    <function name="DrawBuffer" offset="202">
+        <param name="mode" type="GLenum"/>
+        <glx rop="126"/>
+    </function>
+
+    <function name="Clear" offset="203">
+        <param name="mask" type="GLbitfield"/>
+        <glx rop="127"/>
+    </function>
+
+    <function name="ClearAccum" offset="204">
+        <param name="red" type="GLfloat"/>
+        <param name="green" type="GLfloat"/>
+        <param name="blue" type="GLfloat"/>
+        <param name="alpha" type="GLfloat"/>
+        <glx rop="128"/>
+    </function>
+
+    <function name="ClearIndex" offset="205">
+        <param name="c" type="GLfloat"/>
+        <glx rop="129"/>
+    </function>
+
+    <function name="ClearColor" offset="206">
+        <param name="red" type="GLclampf"/>
+        <param name="green" type="GLclampf"/>
+        <param name="blue" type="GLclampf"/>
+        <param name="alpha" type="GLclampf"/>
+        <glx rop="130"/>
+    </function>
+
+    <function name="ClearStencil" offset="207">
+        <param name="s" type="GLint"/>
+        <glx rop="131"/>
+    </function>
+
+    <function name="ClearDepth" offset="208">
+        <param name="depth" type="GLclampd"/>
+        <glx rop="132"/>
+    </function>
+
+    <function name="StencilMask" offset="209">
+        <param name="mask" type="GLuint"/>
+        <glx rop="133"/>
+    </function>
+
+    <function name="ColorMask" offset="210">
+        <param name="red" type="GLboolean"/>
+        <param name="green" type="GLboolean"/>
+        <param name="blue" type="GLboolean"/>
+        <param name="alpha" type="GLboolean"/>
+        <glx rop="134"/>
+    </function>
+
+    <function name="DepthMask" offset="211">
+        <param name="flag" type="GLboolean"/>
+        <glx rop="135"/>
+    </function>
+
+    <function name="IndexMask" offset="212">
+        <param name="mask" type="GLuint"/>
+        <glx rop="136"/>
+    </function>
+
+    <function name="Accum" offset="213">
+        <param name="op" type="GLenum"/>
+        <param name="value" type="GLfloat"/>
+        <glx rop="137"/>
+    </function>
+
+    <function name="Disable" offset="214">
+        <param name="cap" type="GLenum"/>
+        <glx rop="138" handcode="client"/>
+    </function>
+
+    <function name="Enable" offset="215">
+        <param name="cap" type="GLenum"/>
+        <glx rop="139" handcode="client"/>
+    </function>
+
+    <function name="Finish" offset="216">
+        <glx sop="108" handcode="true"/>
+    </function>
+
+    <function name="Flush" offset="217">
+        <glx sop="142" handcode="true"/>
+    </function>
+
+    <function name="PopAttrib" offset="218">
+        <glx rop="141"/>
+    </function>
+
+    <function name="PushAttrib" offset="219">
+        <param name="mask" type="GLbitfield"/>
+        <glx rop="142"/>
+    </function>
+
+    <function name="Map1d" offset="220">
+        <param name="target" type="GLenum"/>
+        <param name="u1" type="GLdouble"/>
+        <param name="u2" type="GLdouble"/>
+        <param name="stride" type="GLint" client_only="true"/>
+        <param name="order" type="GLint"/>
+        <param name="points" type="const GLdouble *" variable_param="order"/>
+        <glx rop="143" handcode="true"/>
+    </function>
+
+    <function name="Map1f" offset="221">
+        <param name="target" type="GLenum"/>
+        <param name="u1" type="GLfloat"/>
+        <param name="u2" type="GLfloat"/>
+        <param name="stride" type="GLint" client_only="true"/>
+        <param name="order" type="GLint"/>
+        <param name="points" type="const GLfloat *" variable_param="order"/>
+        <glx rop="144" handcode="true"/>
+    </function>
+
+    <function name="Map2d" offset="222">
+        <param name="target" type="GLenum"/>
+        <param name="u1" type="GLdouble"/>
+        <param name="u2" type="GLdouble"/>
+        <param name="ustride" type="GLint" client_only="true"/>
+        <param name="uorder" type="GLint"/>
+        <param name="v1" type="GLdouble"/>
+        <param name="v2" type="GLdouble"/>
+        <param name="vstride" type="GLint" client_only="true"/>
+        <param name="vorder" type="GLint"/>
+        <param name="points" type="const GLdouble *" variable_param="uorder"/>
+        <glx rop="145" handcode="true"/>
+    </function>
+
+    <function name="Map2f" offset="223">
+        <param name="target" type="GLenum"/>
+        <param name="u1" type="GLfloat"/>
+        <param name="u2" type="GLfloat"/>
+        <param name="ustride" type="GLint" client_only="true"/>
+        <param name="uorder" type="GLint"/>
+        <param name="v1" type="GLfloat"/>
+        <param name="v2" type="GLfloat"/>
+        <param name="vstride" type="GLint" client_only="true"/>
+        <param name="vorder" type="GLint"/>
+        <param name="points" type="const GLfloat *" variable_param="uorder"/>
+        <glx rop="146" handcode="true"/>
+    </function>
+
+    <function name="MapGrid1d" offset="224">
+        <param name="un" type="GLint"/>
+        <param name="u1" type="GLdouble"/>
+        <param name="u2" type="GLdouble"/>
+        <glx rop="147"/>
+    </function>
+
+    <function name="MapGrid1f" offset="225">
+        <param name="un" type="GLint"/>
+        <param name="u1" type="GLfloat"/>
+        <param name="u2" type="GLfloat"/>
+        <glx rop="148"/>
+    </function>
+
+    <function name="MapGrid2d" offset="226">
+        <param name="un" type="GLint"/>
+        <param name="u1" type="GLdouble"/>
+        <param name="u2" type="GLdouble"/>
+        <param name="vn" type="GLint"/>
+        <param name="v1" type="GLdouble"/>
+        <param name="v2" type="GLdouble"/>
+        <glx rop="149"/>
+    </function>
+
+    <function name="MapGrid2f" offset="227">
+        <param name="un" type="GLint"/>
+        <param name="u1" type="GLfloat"/>
+        <param name="u2" type="GLfloat"/>
+        <param name="vn" type="GLint"/>
+        <param name="v1" type="GLfloat"/>
+        <param name="v2" type="GLfloat"/>
+        <glx rop="150"/>
+    </function>
+
+    <function name="EvalCoord1d" offset="228" vectorequiv="EvalCoord1dv">
+        <param name="u" type="GLdouble"/>
+    </function>
+
+    <function name="EvalCoord1dv" offset="229">
+        <param name="u" type="const GLdouble *" count="1"/>
+        <glx rop="151"/>
+    </function>
+
+    <function name="EvalCoord1f" offset="230" vectorequiv="EvalCoord1fv">
+        <param name="u" type="GLfloat"/>
+    </function>
+
+    <function name="EvalCoord1fv" offset="231">
+        <param name="u" type="const GLfloat *" count="1"/>
+        <glx rop="152"/>
+    </function>
+
+    <function name="EvalCoord2d" offset="232" vectorequiv="EvalCoord2dv">
+        <param name="u" type="GLdouble"/>
+        <param name="v" type="GLdouble"/>
+    </function>
+
+    <function name="EvalCoord2dv" offset="233">
+        <param name="u" type="const GLdouble *" count="2"/>
+        <glx rop="153"/>
+    </function>
+
+    <function name="EvalCoord2f" offset="234" vectorequiv="EvalCoord2fv">
+        <param name="u" type="GLfloat"/>
+        <param name="v" type="GLfloat"/>
+    </function>
+
+    <function name="EvalCoord2fv" offset="235">
+        <param name="u" type="const GLfloat *" count="2"/>
+        <glx rop="154"/>
+    </function>
+
+    <function name="EvalMesh1" offset="236">
+        <param name="mode" type="GLenum"/>
+        <param name="i1" type="GLint"/>
+        <param name="i2" type="GLint"/>
+        <glx rop="155"/>
+    </function>
+
+    <function name="EvalPoint1" offset="237">
+        <param name="i" type="GLint"/>
+        <glx rop="156"/>
+    </function>
+
+    <function name="EvalMesh2" offset="238">
+        <param name="mode" type="GLenum"/>
+        <param name="i1" type="GLint"/>
+        <param name="i2" type="GLint"/>
+        <param name="j1" type="GLint"/>
+        <param name="j2" type="GLint"/>
+        <glx rop="157"/>
+    </function>
+
+    <function name="EvalPoint2" offset="239">
+        <param name="i" type="GLint"/>
+        <param name="j" type="GLint"/>
+        <glx rop="158"/>
+    </function>
+
+    <function name="AlphaFunc" offset="240">
+        <param name="func" type="GLenum"/>
+        <param name="ref" type="GLclampf"/>
+        <glx rop="159"/>
+    </function>
+
+    <function name="BlendFunc" offset="241">
+        <param name="sfactor" type="GLenum"/>
+        <param name="dfactor" type="GLenum"/>
+        <glx rop="160"/>
+    </function>
+
+    <function name="LogicOp" offset="242">
+        <param name="opcode" type="GLenum"/>
+        <glx rop="161"/>
+    </function>
+
+    <function name="StencilFunc" offset="243">
+        <param name="func" type="GLenum"/>
+        <param name="ref" type="GLint"/>
+        <param name="mask" type="GLuint"/>
+        <glx rop="162"/>
+    </function>
+
+    <function name="StencilOp" offset="244">
+        <param name="fail" type="GLenum"/>
+        <param name="zfail" type="GLenum"/>
+        <param name="zpass" type="GLenum"/>
+        <glx rop="163"/>
+    </function>
+
+    <function name="DepthFunc" offset="245">
+        <param name="func" type="GLenum"/>
+        <glx rop="164"/>
+    </function>
+
+    <function name="PixelZoom" offset="246">
+        <param name="xfactor" type="GLfloat"/>
+        <param name="yfactor" type="GLfloat"/>
+        <glx rop="165"/>
+    </function>
+
+    <function name="PixelTransferf" offset="247">
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLfloat"/>
+        <glx rop="166"/>
+    </function>
+
+    <function name="PixelTransferi" offset="248">
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLint"/>
+        <glx rop="167"/>
+    </function>
+
+    <function name="PixelStoref" offset="249">
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLfloat"/>
+        <glx sop="109" handcode="client"/>
+    </function>
+
+    <function name="PixelStorei" offset="250">
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLint"/>
+        <glx sop="110" handcode="client"/>
+    </function>
+
+    <function name="PixelMapfv" offset="251">
+        <param name="map" type="GLenum"/>
+        <param name="mapsize" type="GLsizei" counter="true"/>
+        <param name="values" type="const GLfloat *" count="mapsize"/>
+        <glx rop="168" large="true"/>
+    </function>
+
+    <function name="PixelMapuiv" offset="252">
+        <param name="map" type="GLenum"/>
+        <param name="mapsize" type="GLsizei" counter="true"/>
+        <param name="values" type="const GLuint *" count="mapsize"/>
+        <glx rop="169" large="true"/>
+    </function>
+
+    <function name="PixelMapusv" offset="253">
+        <param name="map" type="GLenum"/>
+        <param name="mapsize" type="GLsizei" counter="true"/>
+        <param name="values" type="const GLushort *" count="mapsize"/>
+        <glx rop="170" large="true"/>
+    </function>
+
+    <function name="ReadBuffer" offset="254">
+        <param name="mode" type="GLenum"/>
+        <glx rop="171"/>
+    </function>
+
+    <function name="CopyPixels" offset="255">
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="type" type="GLenum"/>
+        <glx rop="172"/>
+    </function>
+
+    <function name="ReadPixels" offset="256">
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="pixels" type="GLvoid *" output="true"  img_width="width" img_height="height" img_format="format" img_type="type" img_target="0"/>
+        <glx sop="111"/>
+    </function>
+
+    <function name="DrawPixels" offset="257">
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="pixels" type="const GLvoid *" img_width="width" img_height="height" img_format="format" img_type="type" img_target="0" img_pad_dimensions="false"/>
+        <glx rop="173" large="true"/>
+    </function>
+
+    <function name="GetBooleanv" offset="258">
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLboolean *" output="true" variable_param="pname"/>
+        <glx sop="112" handcode="client"/>
+    </function>
+
+    <function name="GetClipPlane" offset="259">
+        <param name="plane" type="GLenum"/>
+        <param name="equation" type="GLdouble *" output="true" count="4"/>
+        <glx sop="113" always_array="true"/>
+    </function>
+
+    <function name="GetDoublev" offset="260">
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLdouble *" output="true" variable_param="pname"/>
+        <glx sop="114" handcode="client"/>
+    </function>
+
+    <function name="GetError" offset="261">
+        <return type="GLenum"/>
+        <glx sop="115" handcode="client"/>
+    </function>
+
+    <function name="GetFloatv" offset="262">
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
+        <glx sop="116" handcode="client"/>
+    </function>
+
+    <function name="GetIntegerv" offset="263">
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true" variable_param="pname"/>
+        <glx sop="117" handcode="client"/>
+    </function>
+
+    <function name="GetLightfv" offset="264">
+        <param name="light" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
+        <glx sop="118"/>
+    </function>
+
+    <function name="GetLightiv" offset="265">
+        <param name="light" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true" variable_param="pname"/>
+        <glx sop="119"/>
+    </function>
+
+    <function name="GetMapdv" offset="266">
+        <param name="target" type="GLenum"/>
+        <param name="query" type="GLenum"/>
+        <param name="v" type="GLdouble *" output="true" variable_param="target query"/>
+        <glx sop="120"/>
+    </function>
+
+    <function name="GetMapfv" offset="267">
+        <param name="target" type="GLenum"/>
+        <param name="query" type="GLenum"/>
+        <param name="v" type="GLfloat *" output="true" variable_param="target query"/>
+        <glx sop="121"/>
+    </function>
+
+    <function name="GetMapiv" offset="268">
+        <param name="target" type="GLenum"/>
+        <param name="query" type="GLenum"/>
+        <param name="v" type="GLint *" output="true" variable_param="target query"/>
+        <glx sop="122"/>
+    </function>
+
+    <function name="GetMaterialfv" offset="269">
+        <param name="face" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
+        <glx sop="123"/>
+    </function>
+
+    <function name="GetMaterialiv" offset="270">
+        <param name="face" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true" variable_param="pname"/>
+        <glx sop="124"/>
+    </function>
+
+    <function name="GetPixelMapfv" offset="271">
+        <param name="map" type="GLenum"/>
+        <param name="values" type="GLfloat *" output="true" variable_param="map"/>
+        <glx sop="125"/>
+    </function>
+
+    <function name="GetPixelMapuiv" offset="272">
+        <param name="map" type="GLenum"/>
+        <param name="values" type="GLuint *" output="true" variable_param="map"/>
+        <glx sop="126"/>
+    </function>
+
+    <function name="GetPixelMapusv" offset="273">
+        <param name="map" type="GLenum"/>
+        <param name="values" type="GLushort *" output="true" variable_param="map"/>
+        <glx sop="127"/>
+    </function>
+
+    <function name="GetPolygonStipple" offset="274">
+        <param name="mask" type="GLubyte *" output="true" img_width="32" img_height="32" img_format="GL_COLOR_INDEX" img_type="GL_BITMAP"/>
+        <glx sop="128"/>
+    </function>
+
+    <function name="GetString" offset="275">
+        <param name="name" type="GLenum"/>
+        <return type="const GLubyte *"/>
+        <glx sop="129" handcode="true"/>
+    </function>
+
+    <function name="GetTexEnvfv" offset="276">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
+        <glx sop="130"/>
+    </function>
+
+    <function name="GetTexEnviv" offset="277">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true" variable_param="pname"/>
+        <glx sop="131"/>
+    </function>
+
+    <function name="GetTexGendv" offset="278">
+        <param name="coord" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLdouble *" output="true" variable_param="pname"/>
+        <glx sop="132"/>
+    </function>
+
+    <function name="GetTexGenfv" offset="279">
+        <param name="coord" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
+        <glx sop="133"/>
+    </function>
+
+    <function name="GetTexGeniv" offset="280">
+        <param name="coord" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true" variable_param="pname"/>
+        <glx sop="134"/>
+    </function>
+
+    <function name="GetTexImage" offset="281">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="pixels" type="GLvoid *" output="true" img_width="width" img_height="height" img_depth="depth" img_format="format" img_type="type"/>
+        <glx sop="135" dimensions_in_reply="true"/>
+    </function>
+
+    <function name="GetTexParameterfv" offset="282">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
+        <glx sop="136"/>
+    </function>
+
+    <function name="GetTexParameteriv" offset="283">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true" variable_param="pname"/>
+        <glx sop="137"/>
+    </function>
+
+    <function name="GetTexLevelParameterfv" offset="284">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
+        <glx sop="138"/>
+    </function>
+
+    <function name="GetTexLevelParameteriv" offset="285">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true" variable_param="pname"/>
+        <glx sop="139"/>
+    </function>
+
+    <function name="IsEnabled" offset="286">
+        <param name="cap" type="GLenum"/>
+        <return type="GLboolean"/>
+        <glx sop="140" handcode="client"/>
+    </function>
+
+    <function name="IsList" offset="287">
+        <param name="list" type="GLuint"/>
+        <return type="GLboolean"/>
+        <glx sop="141"/>
+    </function>
+
+    <function name="DepthRange" offset="288">
+        <param name="zNear" type="GLclampd"/>
+        <param name="zFar" type="GLclampd"/>
+        <glx rop="174"/>
+    </function>
+
+    <function name="Frustum" offset="289">
+        <param name="left" type="GLdouble"/>
+        <param name="right" type="GLdouble"/>
+        <param name="bottom" type="GLdouble"/>
+        <param name="top" type="GLdouble"/>
+        <param name="zNear" type="GLdouble"/>
+        <param name="zFar" type="GLdouble"/>
+        <glx rop="175"/>
+    </function>
+
+    <function name="LoadIdentity" offset="290">
+        <glx rop="176"/>
+    </function>
+
+    <function name="LoadMatrixf" offset="291">
+        <param name="m" type="const GLfloat *" count="16"/>
+        <glx rop="177"/>
+    </function>
+
+    <function name="LoadMatrixd" offset="292">
+        <param name="m" type="const GLdouble *" count="16"/>
+        <glx rop="178"/>
+    </function>
+
+    <function name="MatrixMode" offset="293">
+        <param name="mode" type="GLenum"/>
+        <glx rop="179"/>
+    </function>
+
+    <function name="MultMatrixf" offset="294">
+        <param name="m" type="const GLfloat *" count="16"/>
+        <glx rop="180"/>
+    </function>
+
+    <function name="MultMatrixd" offset="295">
+        <param name="m" type="const GLdouble *" count="16"/>
+        <glx rop="181"/>
+    </function>
+
+    <function name="Ortho" offset="296">
+        <param name="left" type="GLdouble"/>
+        <param name="right" type="GLdouble"/>
+        <param name="bottom" type="GLdouble"/>
+        <param name="top" type="GLdouble"/>
+        <param name="zNear" type="GLdouble"/>
+        <param name="zFar" type="GLdouble"/>
+        <glx rop="182"/>
+    </function>
+
+    <function name="PopMatrix" offset="297">
+        <glx rop="183"/>
+    </function>
+
+    <function name="PushMatrix" offset="298">
+        <glx rop="184"/>
+    </function>
+
+    <function name="Rotated" offset="299">
+        <param name="angle" type="GLdouble"/>
+        <param name="x" type="GLdouble"/>
+        <param name="y" type="GLdouble"/>
+        <param name="z" type="GLdouble"/>
+        <glx rop="185"/>
+    </function>
+
+    <function name="Rotatef" offset="300">
+        <param name="angle" type="GLfloat"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+        <glx rop="186"/>
+    </function>
+
+    <function name="Scaled" offset="301">
+        <param name="x" type="GLdouble"/>
+        <param name="y" type="GLdouble"/>
+        <param name="z" type="GLdouble"/>
+        <glx rop="187"/>
+    </function>
+
+    <function name="Scalef" offset="302">
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+        <glx rop="188"/>
+    </function>
+
+    <function name="Translated" offset="303">
+        <param name="x" type="GLdouble"/>
+        <param name="y" type="GLdouble"/>
+        <param name="z" type="GLdouble"/>
+        <glx rop="189"/>
+    </function>
+
+    <function name="Translatef" offset="304">
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+        <glx rop="190"/>
+    </function>
+
+    <function name="Viewport" offset="305">
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <glx rop="191"/>
+    </function>
+</category>
+
+<category name="1.1">
+    <enum name="INDEX_LOGIC_OP"                           value="0x0BF1"/>
+    <enum name="COLOR_LOGIC_OP"                           value="0x0BF2"/>
+    <enum name="TEXTURE_INTERNAL_FORMAT"                  value="0x1003"/>
+    <enum name="DOUBLE"                                   value="0x140A"/>
+    <enum name="POLYGON_OFFSET_UNITS"          count="1"  value="0x2A00">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POLYGON_OFFSET_POINT"                     value="0x2A01"/>
+    <enum name="POLYGON_OFFSET_LINE"                      value="0x2A02"/>
+    <enum name="R3_G3_B2"                                 value="0x2A10"/>
+    <enum name="V2F"                                      value="0x2A20"/>
+    <enum name="V3F"                                      value="0x2A21"/>
+    <enum name="C4UB_V2F"                                 value="0x2A22"/>
+    <enum name="C4UB_V3F"                                 value="0x2A23"/>
+    <enum name="C3F_V3F"                                  value="0x2A24"/>
+    <enum name="N3F_V3F"                                  value="0x2A25"/>
+    <enum name="C4F_N3F_V3F"                              value="0x2A26"/>
+    <enum name="T2F_V3F"                                  value="0x2A27"/>
+    <enum name="T4F_V4F"                                  value="0x2A28"/>
+    <enum name="T2F_C4UB_V3F"                             value="0x2A29"/>
+    <enum name="T2F_C3F_V3F"                              value="0x2A2A"/>
+    <enum name="T2F_N3F_V3F"                              value="0x2A2B"/>
+    <enum name="T2F_C4F_N3F_V3F"                          value="0x2A2C"/>
+    <enum name="T4F_C4F_N3F_V4F"                          value="0x2A2D"/>
+    <enum name="POLYGON_OFFSET_FILL"                      value="0x8037"/>
+    <enum name="POLYGON_OFFSET_FACTOR"         count="1"  value="0x8038">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POLYGON_OFFSET_BIAS"                      value="0x8039"/>
+    <enum name="ALPHA4"                                   value="0x803B"/>
+    <enum name="ALPHA8"                                   value="0x803C"/>
+    <enum name="ALPHA12"                                  value="0x803D"/>
+    <enum name="ALPHA16"                                  value="0x803E"/>
+    <enum name="LUMINANCE4"                               value="0x803F"/>
+    <enum name="LUMINANCE8"                               value="0x8040"/>
+    <enum name="LUMINANCE12"                              value="0x8041"/>
+    <enum name="LUMINANCE16"                              value="0x8042"/>
+    <enum name="LUMINANCE4_ALPHA4"                        value="0x8043"/>
+    <enum name="LUMINANCE6_ALPHA2"                        value="0x8044"/>
+    <enum name="LUMINANCE8_ALPHA8"                        value="0x8045"/>
+    <enum name="LUMINANCE12_ALPHA4"                       value="0x8046"/>
+    <enum name="LUMINANCE12_ALPHA12"                      value="0x8047"/>
+    <enum name="LUMINANCE16_ALPHA16"                      value="0x8048"/>
+    <enum name="INTENSITY"                                value="0x8049"/>
+    <enum name="INTENSITY4"                               value="0x804A"/>
+    <enum name="INTENSITY8"                               value="0x804B"/>
+    <enum name="INTENSITY12"                              value="0x804C"/>
+    <enum name="INTENSITY16"                              value="0x804D"/>
+    <enum name="RGB4"                                     value="0x804F"/>
+    <enum name="RGB5"                                     value="0x8050"/>
+    <enum name="RGB8"                                     value="0x8051"/>
+    <enum name="RGB10"                                    value="0x8052"/>
+    <enum name="RGB12"                                    value="0x8053"/>
+    <enum name="RGB16"                                    value="0x8054"/>
+    <enum name="RGBA2"                                    value="0x8055"/>
+    <enum name="RGBA4"                                    value="0x8056"/>
+    <enum name="RGB5_A1"                                  value="0x8057"/>
+    <enum name="RGBA8"                                    value="0x8058"/>
+    <enum name="RGB10_A2"                                 value="0x8059"/>
+    <enum name="RGBA12"                                   value="0x805A"/>
+    <enum name="RGBA16"                                   value="0x805B"/>
+    <enum name="TEXTURE_RED_SIZE"              count="1"  value="0x805C">
+        <size name="GetTexLevelParameterfv" mode="get"/>
+        <size name="GetTexLevelParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_GREEN_SIZE"            count="1"  value="0x805D">
+        <size name="GetTexLevelParameterfv" mode="get"/>
+        <size name="GetTexLevelParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_BLUE_SIZE"             count="1"  value="0x805E">
+        <size name="GetTexLevelParameterfv" mode="get"/>
+        <size name="GetTexLevelParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_ALPHA_SIZE"            count="1"  value="0x805F">
+        <size name="GetTexLevelParameterfv" mode="get"/>
+        <size name="GetTexLevelParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_LUMINANCE_SIZE"        count="1"  value="0x8060">
+        <size name="GetTexLevelParameterfv" mode="get"/>
+        <size name="GetTexLevelParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_INTENSITY_SIZE"        count="1"  value="0x8061">
+        <size name="GetTexLevelParameterfv" mode="get"/>
+        <size name="GetTexLevelParameteriv" mode="get"/>
+    </enum>
+    <enum name="PROXY_TEXTURE_1D"                         value="0x8063"/>
+    <enum name="PROXY_TEXTURE_2D"                         value="0x8064"/>
+    <enum name="TEXTURE_PRIORITY"              count="1"  value="0x8066">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_RESIDENT"              count="1"  value="0x8067">
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_BINDING_1D"            count="1"  value="0x8068">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_BINDING_2D"            count="1"  value="0x8069">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="VERTEX_ARRAY"                  count="1"  value="0x8074">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="NORMAL_ARRAY"                  count="1"  value="0x8075">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="COLOR_ARRAY"                   count="1"  value="0x8076">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="INDEX_ARRAY"                   count="1"  value="0x8077">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_COORD_ARRAY"           count="1"  value="0x8078">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="EDGE_FLAG_ARRAY"               count="1"  value="0x8079">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="VERTEX_ARRAY_SIZE"             count="1"  value="0x807A">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="VERTEX_ARRAY_TYPE"             count="1"  value="0x807B">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="VERTEX_ARRAY_STRIDE"           count="1"  value="0x807C">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="NORMAL_ARRAY_TYPE"             count="1"  value="0x807E">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="NORMAL_ARRAY_STRIDE"           count="1"  value="0x807F">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="COLOR_ARRAY_SIZE"              count="1"  value="0x8081">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="COLOR_ARRAY_TYPE"              count="1"  value="0x8082">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="COLOR_ARRAY_STRIDE"            count="1"  value="0x8083">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="INDEX_ARRAY_TYPE"              count="1"  value="0x8085">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="INDEX_ARRAY_STRIDE"            count="1"  value="0x8086">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_COORD_ARRAY_SIZE"      count="1"  value="0x8088">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_COORD_ARRAY_TYPE"      count="1"  value="0x8089">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_COORD_ARRAY_STRIDE"    count="1"  value="0x808A">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="EDGE_FLAG_ARRAY_STRIDE"        count="1"  value="0x808C">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="VERTEX_ARRAY_POINTER"                     value="0x808E"/>
+    <enum name="NORMAL_ARRAY_POINTER"                     value="0x808F"/>
+    <enum name="COLOR_ARRAY_POINTER"                      value="0x8090"/>
+    <enum name="INDEX_ARRAY_POINTER"                      value="0x8091"/>
+    <enum name="TEXTURE_COORD_ARRAY_POINTER"              value="0x8092"/>
+    <enum name="EDGE_FLAG_ARRAY_POINTER"                  value="0x8093"/>
+    <enum name="CLIENT_PIXEL_STORE_BIT"                   value="0x00000001"/>
+    <enum name="CLIENT_VERTEX_ARRAY_BIT"                  value="0x00000002"/>
+    <enum name="ALL_CLIENT_ATTRIB_BITS"                   value="0xFFFFFFFF"/>
+    <enum name="CLIENT_ALL_ATTRIB_BITS"                   value="0xFFFFFFFF"/>
+
+    <function name="ArrayElement" offset="306">
+        <param name="i" type="GLint"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="ColorPointer" offset="308">
+        <param name="size" type="GLint"/>
+        <param name="type" type="GLenum"/>
+        <param name="stride" type="GLsizei"/>
+        <param name="pointer" type="const GLvoid *"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="DisableClientState" offset="309">
+        <param name="array" type="GLenum"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="DrawArrays" offset="310">
+        <param name="mode" type="GLenum"/>
+        <param name="first" type="GLint"/>
+        <param name="count" type="GLsizei"/>
+        <glx rop="193" handcode="true"/>
+    </function>
+
+    <function name="DrawElements" offset="311">
+        <param name="mode" type="GLenum"/>
+        <param name="count" type="GLsizei"/>
+        <param name="type" type="GLenum"/>
+        <param name="indices" type="const GLvoid *"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="EdgeFlagPointer" offset="312">
+        <param name="stride" type="GLsizei"/>
+        <param name="pointer" type="const GLvoid *"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="EnableClientState" offset="313">
+        <param name="array" type="GLenum"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="GetPointerv" offset="329">
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLvoid **" output="true"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="IndexPointer" offset="314">
+        <param name="type" type="GLenum"/>
+        <param name="stride" type="GLsizei"/>
+        <param name="pointer" type="const GLvoid *"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="InterleavedArrays" offset="317">
+        <param name="format" type="GLenum"/>
+        <param name="stride" type="GLsizei"/>
+        <param name="pointer" type="const GLvoid *"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="NormalPointer" offset="318">
+        <param name="type" type="GLenum"/>
+        <param name="stride" type="GLsizei"/>
+        <param name="pointer" type="const GLvoid *"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="TexCoordPointer" offset="320">
+        <param name="size" type="GLint"/>
+        <param name="type" type="GLenum"/>
+        <param name="stride" type="GLsizei"/>
+        <param name="pointer" type="const GLvoid *"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="VertexPointer" offset="321">
+        <param name="size" type="GLint"/>
+        <param name="type" type="GLenum"/>
+        <param name="stride" type="GLsizei"/>
+        <param name="pointer" type="const GLvoid *"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="PolygonOffset" offset="319">
+        <param name="factor" type="GLfloat"/>
+        <param name="units" type="GLfloat"/>
+        <glx rop="192"/>
+    </function>
+
+    <function name="CopyTexImage1D" offset="323">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <param name="border" type="GLint"/>
+        <glx rop="4119"/>
+    </function>
+
+    <function name="CopyTexImage2D" offset="324">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="border" type="GLint"/>
+        <glx rop="4120"/>
+    </function>
+
+    <function name="CopyTexSubImage1D" offset="325">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="xoffset" type="GLint"/>
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <glx rop="4121"/>
+    </function>
+
+    <function name="CopyTexSubImage2D" offset="326">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="xoffset" type="GLint"/>
+        <param name="yoffset" type="GLint"/>
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <glx rop="4122"/>
+    </function>
+
+    <function name="TexSubImage1D" offset="332">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="xoffset" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="UNUSED" type="GLuint" padding="true"/>
+        <param name="pixels" type="const GLvoid *" img_width="width" img_xoff="xoffset" img_format="format" img_type="type" img_target="target" img_pad_dimensions="true"/>
+        <glx rop="4099" large="true"/>
+    </function>
+
+    <function name="TexSubImage2D" offset="333">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="xoffset" type="GLint"/>
+        <param name="yoffset" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="UNUSED" type="GLuint" padding="true"/>
+        <param name="pixels" type="const GLvoid *" img_width="width" img_height="height" img_xoff="xoffset" img_yoff="yoffset" img_format="format" img_type="type" img_target="target" img_pad_dimensions="true"/>
+        <glx rop="4100" large="true"/>
+    </function>
+
+    <function name="AreTexturesResident" offset="322">
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="textures" type="const GLuint *" count="n"/>
+        <param name="residences" type="GLboolean *" output="true" count="n"/>
+        <return type="GLboolean"/>
+        <glx sop="143" handcode="client" always_array="true"/>
+    </function>
+
+    <function name="BindTexture" offset="307">
+        <param name="target" type="GLenum"/>
+        <param name="texture" type="GLuint"/>
+        <glx rop="4117"/>
+    </function>
+
+    <function name="DeleteTextures" offset="327">
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="textures" type="const GLuint *" count="n"/>
+        <glx sop="144"/>
+    </function>
+
+    <function name="GenTextures" offset="328">
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="textures" type="GLuint *" output="true" count="n"/>
+        <glx sop="145" always_array="true"/>
+    </function>
+
+    <function name="IsTexture" offset="330">
+        <param name="texture" type="GLuint"/>
+        <return type="GLboolean"/>
+        <glx sop="146"/>
+    </function>
+
+    <function name="PrioritizeTextures" offset="331">
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="textures" type="const GLuint *" count="n"/>
+        <param name="priorities" type="const GLclampf *" count="n"/>
+        <glx rop="4118"/>
+    </function>
+
+    <function name="Indexub" offset="315" vectorequiv="Indexubv">
+        <param name="c" type="GLubyte"/>
+    </function>
+
+    <function name="Indexubv" offset="316">
+        <param name="c" type="const GLubyte *" count="1"/>
+        <glx rop="194"/>
+    </function>
+
+    <function name="PopClientAttrib" offset="334">
+        <glx handcode="true"/>
+    </function>
+
+    <function name="PushClientAttrib" offset="335">
+        <param name="mask" type="GLbitfield"/>
+        <glx handcode="true"/>
+    </function>
+</category>
+
+<category name="1.2">
+    <enum name="UNSIGNED_BYTE_3_3_2"                      value="0x8032"/>
+    <enum name="UNSIGNED_SHORT_4_4_4_4"                   value="0x8033"/>
+    <enum name="UNSIGNED_SHORT_5_5_5_1"                   value="0x8034"/>
+    <enum name="UNSIGNED_INT_8_8_8_8"                     value="0x8035"/>
+    <enum name="UNSIGNED_INT_10_10_10_2"                  value="0x8036"/>
+    <enum name="RESCALE_NORMAL"                count="1"  value="0x803A">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_BINDING_3D"            count="1"  value="0x806A">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="PACK_SKIP_IMAGES"              count="1"  value="0x806B">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="PACK_IMAGE_HEIGHT"             count="1"  value="0x806C">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="UNPACK_SKIP_IMAGES"            count="1"  value="0x806D">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="UNPACK_IMAGE_HEIGHT"           count="1"  value="0x806E">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_3D"                    count="1"  value="0x806F">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="PROXY_TEXTURE_3D"                         value="0x8070"/>
+    <enum name="TEXTURE_DEPTH"                 count="1"  value="0x8071">
+        <size name="GetTexLevelParameterfv" mode="get"/>
+        <size name="GetTexLevelParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_WRAP_R"                count="1"  value="0x8072">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+    <enum name="MAX_3D_TEXTURE_SIZE"           count="1"  value="0x8073">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="UNSIGNED_BYTE_2_3_3_REV"                  value="0x8362"/>
+    <enum name="UNSIGNED_SHORT_5_6_5"                     value="0x8363"/>
+    <enum name="UNSIGNED_SHORT_5_6_5_REV"                 value="0x8364"/>
+    <enum name="UNSIGNED_SHORT_4_4_4_4_REV"               value="0x8365"/>
+    <enum name="UNSIGNED_SHORT_1_5_5_5_REV"               value="0x8366"/>
+    <enum name="UNSIGNED_INT_8_8_8_8_REV"                 value="0x8367"/>
+    <enum name="UNSIGNED_INT_2_10_10_10_REV"              value="0x8368"/>
+    <enum name="BGR"                                      value="0x80E0"/>
+    <enum name="BGRA"                                     value="0x80E1"/>
+    <enum name="MAX_ELEMENTS_VERTICES"         count="1"  value="0x80E8">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAX_ELEMENTS_INDICES"          count="1"  value="0x80E9">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="CLAMP_TO_EDGE"                            value="0x812F"/>
+    <enum name="TEXTURE_MIN_LOD"               count="1"  value="0x813A">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_MAX_LOD"               count="1"  value="0x813B">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_BASE_LEVEL"            count="1"  value="0x813C">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_MAX_LEVEL"             count="1"  value="0x813D">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+    <enum name="LIGHT_MODEL_COLOR_CONTROL"     count="1"  value="0x81F8">
+        <size name="LightModelfv"/>
+        <size name="LightModeliv"/>
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="SINGLE_COLOR"                             value="0x81F9"/>
+    <enum name="SEPARATE_SPECULAR_COLOR"                  value="0x81FA"/>
+    <enum name="SMOOTH_POINT_SIZE_RANGE"       count="2"  value="0x0B12">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="SMOOTH_POINT_SIZE_GRANULARITY" count="1"  value="0x0B13">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="SMOOTH_LINE_WIDTH_RANGE"       count="2"  value="0x0B22">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="SMOOTH_LINE_WIDTH_GRANULARITY" count="1"  value="0x0B23">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="ALIASED_POINT_SIZE_RANGE"      count="2"  value="0x846D">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="ALIASED_LINE_WIDTH_RANGE"      count="2"  value="0x846E">
+        <size name="Get" mode="get"/>
+    </enum>
+
+    <!-- These enums are actually part of the ARB_imaging subset. -->
+
+    <enum name="CONSTANT_COLOR"                           value="0x8001"/>
+    <enum name="ONE_MINUS_CONSTANT_COLOR"                 value="0x8002"/>
+    <enum name="CONSTANT_ALPHA"                           value="0x8003"/>
+    <enum name="ONE_MINUS_CONSTANT_ALPHA"                 value="0x8004"/>
+    <enum name="BLEND_COLOR"                   count="4"  value="0x8005">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="FUNC_ADD"                                 value="0x8006"/>
+    <enum name="MIN"                                      value="0x8007"/>
+    <enum name="MAX"                                      value="0x8008"/>
+    <enum name="BLEND_EQUATION"                count="1"  value="0x8009">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="FUNC_SUBTRACT"                            value="0x800A"/>
+    <enum name="FUNC_REVERSE_SUBTRACT"                    value="0x800B"/>
+    <enum name="CONVOLUTION_1D"                count="1"  value="0x8010">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="CONVOLUTION_2D"                count="1"  value="0x8011">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="SEPARABLE_2D"                  count="1"  value="0x8012">
+        <size name="Get" mode="get"/>
+    </enum>
+
+    <enum name="CONVOLUTION_BORDER_MODE"       count="1"  value="0x8013">
+        <size name="ConvolutionParameterfv"/>
+        <size name="ConvolutionParameteriv"/>
+        <size name="GetConvolutionParameterfv" mode="get"/>
+        <size name="GetConvolutionParameteriv" mode="get"/>
+    </enum>
+    <enum name="CONVOLUTION_BORDER_COLOR"      count="4"  value="0x8154">
+        <size name="ConvolutionParameterfv"/>
+        <size name="ConvolutionParameteriv"/>
+        <size name="GetConvolutionParameterfv" mode="get"/>
+        <size name="GetConvolutionParameteriv" mode="get"/>
+    </enum>
+    <enum name="CONVOLUTION_FILTER_SCALE"      count="4"  value="0x8014">
+        <size name="ConvolutionParameterfv"/>
+        <size name="ConvolutionParameteriv"/>
+        <size name="GetConvolutionParameterfv" mode="get"/>
+        <size name="GetConvolutionParameteriv" mode="get"/>
+    </enum>
+    <enum name="CONVOLUTION_FILTER_BIAS"       count="4"  value="0x8015">
+        <size name="ConvolutionParameterfv"/>
+        <size name="ConvolutionParameteriv"/>
+        <size name="GetConvolutionParameterfv" mode="get"/>
+        <size name="GetConvolutionParameteriv" mode="get"/>
+    </enum>
+    <enum name="REDUCE"                                   value="0x8016"/>
+    <enum name="CONVOLUTION_FORMAT"            count="1"  value="0x8017">
+        <size name="GetConvolutionParameterfv" mode="get"/>
+        <size name="GetConvolutionParameteriv" mode="get"/>
+    </enum>
+    <enum name="CONVOLUTION_WIDTH"             count="1"  value="0x8018">
+        <size name="GetConvolutionParameterfv" mode="get"/>
+        <size name="GetConvolutionParameteriv" mode="get"/>
+    </enum>
+    <enum name="CONVOLUTION_HEIGHT"            count="1"  value="0x8019">
+        <size name="GetConvolutionParameterfv" mode="get"/>
+        <size name="GetConvolutionParameteriv" mode="get"/>
+    </enum>
+    <enum name="MAX_CONVOLUTION_WIDTH"         count="1"  value="0x801A">
+        <size name="GetConvolutionParameterfv" mode="get"/>
+        <size name="GetConvolutionParameteriv" mode="get"/>
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAX_CONVOLUTION_HEIGHT"        count="1"  value="0x801B">
+        <size name="GetConvolutionParameterfv" mode="get"/>
+        <size name="GetConvolutionParameteriv" mode="get"/>
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POST_CONVOLUTION_RED_SCALE"    count="1"  value="0x801C">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POST_CONVOLUTION_GREEN_SCALE"  count="1"  value="0x801D">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POST_CONVOLUTION_BLUE_SCALE"   count="1"  value="0x801E">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POST_CONVOLUTION_ALPHA_SCALE"  count="1"  value="0x801F">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POST_CONVOLUTION_RED_BIAS"     count="1"  value="0x8020">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POST_CONVOLUTION_GREEN_BIAS"   count="1"  value="0x8021">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POST_CONVOLUTION_BLUE_BIAS"    count="1"  value="0x8022">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POST_CONVOLUTION_ALPHA_BIAS"   count="1"  value="0x8023">
+        <size name="Get" mode="get"/>
+    </enum>
+
+    <enum name="HISTOGRAM"                     count="1"  value="0x8024">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="PROXY_HISTOGRAM"                          value="0x8025"/>
+    <enum name="HISTOGRAM_WIDTH"               count="1"  value="0x8026">
+        <size name="GetHistogramParameterfv" mode="get"/>
+        <size name="GetHistogramParameteriv" mode="get"/>
+    </enum>
+    <enum name="HISTOGRAM_FORMAT"              count="1"  value="0x8027">
+        <size name="GetHistogramParameterfv" mode="get"/>
+        <size name="GetHistogramParameteriv" mode="get"/>
+    </enum>
+    <enum name="HISTOGRAM_RED_SIZE"            count="1"  value="0x8028">
+        <size name="GetHistogramParameterfv" mode="get"/>
+        <size name="GetHistogramParameteriv" mode="get"/>
+    </enum>
+    <enum name="HISTOGRAM_GREEN_SIZE"          count="1"  value="0x8029">
+        <size name="GetHistogramParameterfv" mode="get"/>
+        <size name="GetHistogramParameteriv" mode="get"/>
+    </enum>
+    <enum name="HISTOGRAM_BLUE_SIZE"           count="1"  value="0x802A">
+        <size name="GetHistogramParameterfv" mode="get"/>
+        <size name="GetHistogramParameteriv" mode="get"/>
+    </enum>
+    <enum name="HISTOGRAM_ALPHA_SIZE"          count="1"  value="0x802B">
+        <size name="GetHistogramParameterfv" mode="get"/>
+        <size name="GetHistogramParameteriv" mode="get"/>
+    </enum>
+    <enum name="HISTOGRAM_LUMINANCE_SIZE"      count="1"  value="0x802C">
+        <size name="GetHistogramParameterfv" mode="get"/>
+        <size name="GetHistogramParameteriv" mode="get"/>
+    </enum>
+    <enum name="HISTOGRAM_SINK"                count="1"  value="0x802D">
+        <size name="GetHistogramParameterfv" mode="get"/>
+        <size name="GetHistogramParameteriv" mode="get"/>
+    </enum>
+    <enum name="MINMAX"                        count="1"  value="0x802E">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MINMAX_FORMAT"                 count="1"  value="0x802F">
+        <size name="GetMinmaxParameterfv" mode="get"/>
+        <size name="GetMinmaxParameteriv" mode="get"/>
+    </enum>
+    <enum name="MINMAX_SINK"                   count="1"  value="0x8030">
+        <size name="GetMinmaxParameterfv" mode="get"/>
+        <size name="GetMinmaxParameteriv" mode="get"/>
+    </enum>
+
+    <enum name="COLOR_MATRIX"                  count="16" value="0x80B1">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="COLOR_MATRIX_STACK_DEPTH"      count="1"  value="0x80B2">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAX_COLOR_MATRIX_STACK_DEPTH"  count="1"  value="0x80B3">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POST_COLOR_MATRIX_RED_SCALE"   count="1"  value="0x80B4">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POST_COLOR_MATRIX_GREEN_SCALE" count="1"  value="0x80B5">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POST_COLOR_MATRIX_BLUE_SCALE"  count="1"  value="0x80B6">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POST_COLOR_MATRIX_ALPHA_SCALE" count="1"  value="0x80B7">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POST_COLOR_MATRIX_RED_BIAS"    count="1"  value="0x80B8">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POST_COLOR_MATRIX_GREEN_BIAS"  count="1"  value="0x80B9">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POST_COLOR_MATRIX_BLUE_BIAS"   count="1"  value="0x80BA">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POST_COLOR_MATRIX_ALPHA_BIAS"  count="1"  value="0x80BB">
+        <size name="Get" mode="get"/>
+    </enum>
+
+    <enum name="COLOR_TABLE"                   count="1"  value="0x80D0">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POST_CONVOLUTION_COLOR_TABLE"  count="1"  value="0x80D1">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POST_COLOR_MATRIX_COLOR_TABLE" count="1"  value="0x80D2">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="PROXY_COLOR_TABLE"                              value="0x80D3"/>
+    <enum name="PROXY_POST_CONVOLUTION_COLOR_TABLE"             value="0x80D4"/>
+    <enum name="PROXY_POST_COLOR_MATRIX_COLOR_TABLE"            value="0x80D5"/>
+
+    <enum name="COLOR_TABLE_SCALE"             count="4"  value="0x80D6">
+        <size name="ColorTableParameterfv"/>
+        <size name="ColorTableParameteriv"/>
+        <size name="GetColorTableParameterfv" mode="get"/>
+        <size name="GetColorTableParameteriv" mode="get"/>
+    </enum>
+    <enum name="COLOR_TABLE_BIAS"              count="4"  value="0x80D7">
+        <size name="ColorTableParameterfv"/>
+        <size name="ColorTableParameteriv"/>
+        <size name="GetColorTableParameterfv" mode="get"/>
+        <size name="GetColorTableParameteriv" mode="get"/>
+    </enum>
+    <enum name="COLOR_TABLE_FORMAT"            count="1"  value="0x80D8">
+        <size name="GetColorTableParameterfv" mode="get"/>
+        <size name="GetColorTableParameteriv" mode="get"/>
+    </enum>
+    <enum name="COLOR_TABLE_WIDTH"             count="1"  value="0x80D9">
+        <size name="GetColorTableParameterfv" mode="get"/>
+        <size name="GetColorTableParameteriv" mode="get"/>
+    </enum>
+    <enum name="COLOR_TABLE_RED_SIZE"          count="1"  value="0x80DA">
+        <size name="GetColorTableParameterfv" mode="get"/>
+        <size name="GetColorTableParameteriv" mode="get"/>
+    </enum>
+    <enum name="COLOR_TABLE_GREEN_SIZE"        count="1"  value="0x80DB">
+        <size name="GetColorTableParameterfv" mode="get"/>
+        <size name="GetColorTableParameteriv" mode="get"/>
+    </enum>
+    <enum name="COLOR_TABLE_BLUE_SIZE"         count="1"  value="0x80DC">
+        <size name="GetColorTableParameterfv" mode="get"/>
+        <size name="GetColorTableParameteriv" mode="get"/>
+    </enum>
+    <enum name="COLOR_TABLE_ALPHA_SIZE"        count="1"  value="0x80DD">
+        <size name="GetColorTableParameterfv" mode="get"/>
+        <size name="GetColorTableParameteriv" mode="get"/>
+    </enum>
+    <enum name="COLOR_TABLE_LUMINANCE_SIZE"    count="1"  value="0x80DE">
+        <size name="GetColorTableParameterfv" mode="get"/>
+        <size name="GetColorTableParameteriv" mode="get"/>
+    </enum>
+    <enum name="COLOR_TABLE_INTENSITY_SIZE"    count="1"  value="0x80DF">
+        <size name="GetColorTableParameterfv" mode="get"/>
+        <size name="GetColorTableParameteriv" mode="get"/>
+    </enum>
+
+
+    <function name="BlendColor" offset="336">
+        <param name="red" type="GLclampf"/>
+        <param name="green" type="GLclampf"/>
+        <param name="blue" type="GLclampf"/>
+        <param name="alpha" type="GLclampf"/>
+        <glx rop="4096"/>
+    </function>
+
+    <function name="BlendEquation" offset="337">
+        <param name="mode" type="GLenum"/>
+        <glx rop="4097"/>
+    </function>
+
+    <function name="DrawRangeElements" offset="338">
+        <param name="mode" type="GLenum"/>
+        <param name="start" type="GLuint"/>
+        <param name="end" type="GLuint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="type" type="GLenum"/>
+        <param name="indices" type="const GLvoid *"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="ColorTable" offset="339">
+        <param name="target" type="GLenum"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="width" type="GLsizei"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="table" type="const GLvoid *" img_width="width" img_pad_dimensions="false" img_format="format" img_type="type" img_target="target"/>
+        <glx rop="2053" large="true"/>
+    </function>
+
+    <function name="ColorTableParameterfv" offset="340">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLfloat *" variable_param="pname"/>
+        <glx rop="2054"/>
+    </function>
+
+    <function name="ColorTableParameteriv" offset="341">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLint *" variable_param="pname"/>
+        <glx rop="2055"/>
+    </function>
+
+    <function name="CopyColorTable" offset="342">
+        <param name="target" type="GLenum"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <glx rop="2056"/>
+    </function>
+
+    <function name="GetColorTable" offset="343">
+        <param name="target" type="GLenum"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="table" type="GLvoid *" output="true" img_width="width" img_format="format" img_type="type"/>
+        <glx sop="147" dimensions_in_reply="true"/>
+    </function>
+
+    <function name="GetColorTableParameterfv" offset="344">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
+        <glx sop="148"/>
+    </function>
+
+    <function name="GetColorTableParameteriv" offset="345">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true" variable_param="pname"/>
+        <glx sop="149"/>
+    </function>
+
+    <function name="ColorSubTable" offset="346">
+        <param name="target" type="GLenum"/>
+        <param name="start" type="GLsizei"/>
+        <param name="count" type="GLsizei"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="data" type="const GLvoid *" img_width="count" img_pad_dimensions="false" img_format="format" img_type="type" img_target="target"/>
+        <glx rop="195" large="true"/>
+    </function>
+
+    <function name="CopyColorSubTable" offset="347">
+        <param name="target" type="GLenum"/>
+        <param name="start" type="GLsizei"/>
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <glx rop="196"/>
+    </function>
+
+    <function name="ConvolutionFilter1D" offset="348">
+        <param name="target" type="GLenum"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="width" type="GLsizei"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="image" type="const GLvoid *" img_width="width" img_format="format" img_type="type" img_target="target" img_pad_dimensions="true"/>
+        <glx rop="4101" large="true"/>
+    </function>
+
+    <function name="ConvolutionFilter2D" offset="349">
+        <param name="target" type="GLenum"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="image" type="const GLvoid *" img_width="width" img_height="height" img_format="format" img_type="type" img_target="target" img_pad_dimensions="true"/>
+        <glx rop="4102" large="true"/>
+    </function>
+
+    <function name="ConvolutionParameterf" offset="350">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat"/>
+        <glx rop="4103"/>
+    </function>
+
+    <function name="ConvolutionParameterfv" offset="351">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLfloat *" variable_param="pname"/>
+        <glx rop="4104"/>
+    </function>
+
+    <function name="ConvolutionParameteri" offset="352">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint"/>
+        <glx rop="4105"/>
+    </function>
+
+    <function name="ConvolutionParameteriv" offset="353">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLint *" variable_param="pname"/>
+        <glx rop="4106"/>
+    </function>
+
+    <function name="CopyConvolutionFilter1D" offset="354">
+        <param name="target" type="GLenum"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <glx rop="4107"/>
+    </function>
+
+    <function name="CopyConvolutionFilter2D" offset="355">
+        <param name="target" type="GLenum"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <glx rop="4108"/>
+    </function>
+
+    <function name="GetConvolutionFilter" offset="356">
+        <param name="target" type="GLenum"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="image" type="GLvoid *" output="true" img_width="width" img_height="height" img_format="format" img_type="type"/>
+        <glx sop="150" dimensions_in_reply="true"/>
+    </function>
+
+    <function name="GetConvolutionParameterfv" offset="357">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
+        <glx sop="151"/>
+    </function>
+
+    <function name="GetConvolutionParameteriv" offset="358">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true" variable_param="pname"/>
+        <glx sop="152"/>
+    </function>
+
+    <function name="GetSeparableFilter" offset="359">
+        <param name="target" type="GLenum"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="row" type="GLvoid *" output="true"/>
+        <param name="column" type="GLvoid *" output="true"/>
+        <param name="span" type="GLvoid *" output="true"/>
+        <glx sop="153" handcode="true"/>
+    </function>
+
+    <function name="SeparableFilter2D" offset="360">
+        <param name="target" type="GLenum"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="row" type="const GLvoid *"/>
+        <param name="column" type="const GLvoid *"/>
+        <glx rop="4109" handcode="true"/>
+    </function>
+
+    <function name="GetHistogram" offset="361">
+        <param name="target" type="GLenum"/>
+        <param name="reset" type="GLboolean"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="values" type="GLvoid *" output="true" img_width="width" img_format="format" img_type="type"/>
+        <glx sop="154" dimensions_in_reply="true" img_reset="reset"/>
+    </function>
+
+    <function name="GetHistogramParameterfv" offset="362">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
+        <glx sop="155"/>
+    </function>
+
+    <function name="GetHistogramParameteriv" offset="363">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true" variable_param="pname"/>
+        <glx sop="156"/>
+    </function>
+
+    <function name="GetMinmax" offset="364">
+        <param name="target" type="GLenum"/>
+        <param name="reset" type="GLboolean"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="values" type="GLvoid *" output="true" img_width="2" img_format="format" img_type="type"/>
+        <glx sop="157" img_reset="reset"/>
+    </function>
+
+    <function name="GetMinmaxParameterfv" offset="365">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
+        <glx sop="158"/>
+    </function>
+
+    <function name="GetMinmaxParameteriv" offset="366">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true" variable_param="pname"/>
+        <glx sop="159"/>
+    </function>
+
+    <function name="Histogram" offset="367">
+        <param name="target" type="GLenum"/>
+        <param name="width" type="GLsizei"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="sink" type="GLboolean"/>
+        <glx rop="4110"/>
+    </function>
+
+    <function name="Minmax" offset="368">
+        <param name="target" type="GLenum"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="sink" type="GLboolean"/>
+        <glx rop="4111"/>
+    </function>
+
+    <function name="ResetHistogram" offset="369">
+        <param name="target" type="GLenum"/>
+        <glx rop="4112"/>
+    </function>
+
+    <function name="ResetMinmax" offset="370">
+        <param name="target" type="GLenum"/>
+        <glx rop="4113"/>
+    </function>
+
+    <function name="TexImage3D" offset="371">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="internalformat" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="depth" type="GLsizei"/>
+        <param name="border" type="GLint"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="pixels" type="const GLvoid *" img_width="width" img_height="height" img_depth="depth" img_format="format" img_type="type" img_target="target" img_null_flag="true" img_pad_dimensions="true"/>
+        <glx rop="4114" large="true"/>
+    </function>
+
+    <function name="TexSubImage3D" offset="372">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="xoffset" type="GLint"/>
+        <param name="yoffset" type="GLint"/>
+        <param name="zoffset" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="depth" type="GLsizei"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="UNUSED" type="GLuint" padding="true"/>
+        <param name="pixels" type="const GLvoid *" img_width="width" img_height="height" img_depth="depth" img_xoff="xoffset" img_yoff="yoffset" img_zoff="zoffset" img_format="format" img_type="type" img_target="target" img_pad_dimensions="true"/>
+        <glx rop="4115" large="true"/>
+    </function>
+
+    <function name="CopyTexSubImage3D" offset="373">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="xoffset" type="GLint"/>
+        <param name="yoffset" type="GLint"/>
+        <param name="zoffset" type="GLint"/>
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <glx rop="4123"/>
+    </function>
+</category>
+
+<category name="1.3">
+    <enum name="TEXTURE0"                                 value="0x84C0"/>
+    <enum name="TEXTURE1"                                 value="0x84C1"/>
+    <enum name="TEXTURE2"                                 value="0x84C2"/>
+    <enum name="TEXTURE3"                                 value="0x84C3"/>
+    <enum name="TEXTURE4"                                 value="0x84C4"/>
+    <enum name="TEXTURE5"                                 value="0x84C5"/>
+    <enum name="TEXTURE6"                                 value="0x84C6"/>
+    <enum name="TEXTURE7"                                 value="0x84C7"/>
+    <enum name="TEXTURE8"                                 value="0x84C8"/>
+    <enum name="TEXTURE9"                                 value="0x84C9"/>
+    <enum name="TEXTURE10"                                value="0x84CA"/>
+    <enum name="TEXTURE11"                                value="0x84CB"/>
+    <enum name="TEXTURE12"                                value="0x84CC"/>
+    <enum name="TEXTURE13"                                value="0x84CD"/>
+    <enum name="TEXTURE14"                                value="0x84CE"/>
+    <enum name="TEXTURE15"                                value="0x84CF"/>
+    <enum name="TEXTURE16"                                value="0x84D0"/>
+    <enum name="TEXTURE17"                                value="0x84D1"/>
+    <enum name="TEXTURE18"                                value="0x84D2"/>
+    <enum name="TEXTURE19"                                value="0x84D3"/>
+    <enum name="TEXTURE20"                                value="0x84D4"/>
+    <enum name="TEXTURE21"                                value="0x84D5"/>
+    <enum name="TEXTURE22"                                value="0x84D6"/>
+    <enum name="TEXTURE23"                                value="0x84D7"/>
+    <enum name="TEXTURE24"                                value="0x84D8"/>
+    <enum name="TEXTURE25"                                value="0x84D9"/>
+    <enum name="TEXTURE26"                                value="0x84DA"/>
+    <enum name="TEXTURE27"                                value="0x84DB"/>
+    <enum name="TEXTURE28"                                value="0x84DC"/>
+    <enum name="TEXTURE29"                                value="0x84DD"/>
+    <enum name="TEXTURE30"                                value="0x84DE"/>
+    <enum name="TEXTURE31"                                value="0x84DF"/>
+    <enum name="ACTIVE_TEXTURE"                count="1"  value="0x84E0">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="CLIENT_ACTIVE_TEXTURE"         count="1"  value="0x84E1">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAX_TEXTURE_UNITS"             count="1"  value="0x84E2">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="TRANSPOSE_MODELVIEW_MATRIX"               value="0x84E3"/>
+    <enum name="TRANSPOSE_PROJECTION_MATRIX"              value="0x84E4"/>
+    <enum name="TRANSPOSE_TEXTURE_MATRIX"                 value="0x84E5"/>
+    <enum name="TRANSPOSE_COLOR_MATRIX"                   value="0x84E6"/>
+    <enum name="MULTISAMPLE"                   count="1"  value="0x809D">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="SAMPLE_ALPHA_TO_COVERAGE"      count="1"  value="0x809E">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="SAMPLE_ALPHA_TO_ONE"           count="1"  value="0x809F">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="SAMPLE_COVERAGE"               count="1"  value="0x80A0">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="SAMPLE_BUFFERS"                count="1"  value="0x80A8">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="SAMPLES"                       count="1"  value="0x80A9">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="SAMPLE_COVERAGE_VALUE"         count="1"  value="0x80AA">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="SAMPLE_COVERAGE_INVERT"        count="1"  value="0x80AB">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MULTISAMPLE_BIT"                          value="0x20000000"/>
+    <enum name="NORMAL_MAP"                               value="0x8511"/>
+    <enum name="REFLECTION_MAP"                           value="0x8512"/>
+    <enum name="TEXTURE_CUBE_MAP"              count="1"  value="0x8513">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_BINDING_CUBE_MAP"      count="1"  value="0x8514">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_CUBE_MAP_POSITIVE_X"              value="0x8515"/>
+    <enum name="TEXTURE_CUBE_MAP_NEGATIVE_X"              value="0x8516"/>
+    <enum name="TEXTURE_CUBE_MAP_POSITIVE_Y"              value="0x8517"/>
+    <enum name="TEXTURE_CUBE_MAP_NEGATIVE_Y"              value="0x8518"/>
+    <enum name="TEXTURE_CUBE_MAP_POSITIVE_Z"              value="0x8519"/>
+    <enum name="TEXTURE_CUBE_MAP_NEGATIVE_Z"              value="0x851A"/>
+    <enum name="PROXY_TEXTURE_CUBE_MAP"                   value="0x851B"/>
+    <enum name="MAX_CUBE_MAP_TEXTURE_SIZE"     count="1"  value="0x851C">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="COMPRESSED_ALPHA"                         value="0x84E9"/>
+    <enum name="COMPRESSED_LUMINANCE"                     value="0x84EA"/>
+    <enum name="COMPRESSED_LUMINANCE_ALPHA"               value="0x84EB"/>
+    <enum name="COMPRESSED_INTENSITY"                     value="0x84EC"/>
+    <enum name="COMPRESSED_RGB"                           value="0x84ED"/>
+    <enum name="COMPRESSED_RGBA"                          value="0x84EE"/>
+    <enum name="TEXTURE_COMPRESSION_HINT"      count="1"  value="0x84EF">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_COMPRESSED_IMAGE_SIZE" count="1"  value="0x86A0">
+        <size name="GetTexLevelParameterfv" mode="get"/>
+        <size name="GetTexLevelParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_COMPRESSED"            count="1"  value="0x86A1">
+        <size name="GetTexLevelParameterfv" mode="get"/>
+        <size name="GetTexLevelParameteriv" mode="get"/>
+    </enum>
+    <enum name="NUM_COMPRESSED_TEXTURE_FORMATS" count="1" value="0x86A2">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="COMPRESSED_TEXTURE_FORMATS"    count="-1"  value="0x86A3">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="CLAMP_TO_BORDER"                          value="0x812D"/>
+    <enum name="COMBINE"                                  value="0x8570"/>
+    <enum name="COMBINE_RGB"                   count="1"  value="0x8571">
+        <size name="TexEnvfv"/>
+        <size name="TexEnviv"/>
+        <size name="GetTexEnvfv" mode="get"/>
+        <size name="GetTexEnviv" mode="get"/>
+    </enum>
+    <enum name="COMBINE_ALPHA"                 count="1"  value="0x8572">
+        <size name="TexEnvfv"/>
+        <size name="TexEnviv"/>
+        <size name="GetTexEnvfv" mode="get"/>
+        <size name="GetTexEnviv" mode="get"/>
+    </enum>
+    <enum name="SOURCE0_RGB"                   count="1"  value="0x8580">
+        <size name="TexEnvfv"/>
+        <size name="TexEnviv"/>
+        <size name="GetTexEnvfv" mode="get"/>
+        <size name="GetTexEnviv" mode="get"/>
+    </enum>
+    <enum name="SOURCE1_RGB"                   count="1"  value="0x8581">
+        <size name="TexEnvfv"/>
+        <size name="TexEnviv"/>
+        <size name="GetTexEnvfv" mode="get"/>
+        <size name="GetTexEnviv" mode="get"/>
+    </enum>
+    <enum name="SOURCE2_RGB"                   count="1"  value="0x8582">
+        <size name="TexEnvfv"/>
+        <size name="TexEnviv"/>
+        <size name="GetTexEnvfv" mode="get"/>
+        <size name="GetTexEnviv" mode="get"/>
+    </enum>
+    <enum name="SOURCE0_ALPHA"                 count="1"  value="0x8588">
+        <size name="TexEnvfv"/>
+        <size name="TexEnviv"/>
+        <size name="GetTexEnvfv" mode="get"/>
+        <size name="GetTexEnviv" mode="get"/>
+    </enum>
+    <enum name="SOURCE1_ALPHA"                 count="1"  value="0x8589">
+        <size name="TexEnvfv"/>
+        <size name="TexEnviv"/>
+        <size name="GetTexEnvfv" mode="get"/>
+        <size name="GetTexEnviv" mode="get"/>
+    </enum>
+    <enum name="SOURCE2_ALPHA"                 count="1"  value="0x858A">
+        <size name="TexEnvfv"/>
+        <size name="TexEnviv"/>
+        <size name="GetTexEnvfv" mode="get"/>
+        <size name="GetTexEnviv" mode="get"/>
+    </enum>
+    <enum name="OPERAND0_RGB"                  count="1"  value="0x8590">
+        <size name="TexEnvfv"/>
+        <size name="TexEnviv"/>
+        <size name="GetTexEnvfv" mode="get"/>
+        <size name="GetTexEnviv" mode="get"/>
+    </enum>
+    <enum name="OPERAND1_RGB"                  count="1"  value="0x8591">
+        <size name="TexEnvfv"/>
+        <size name="TexEnviv"/>
+        <size name="GetTexEnvfv" mode="get"/>
+        <size name="GetTexEnviv" mode="get"/>
+    </enum>
+    <enum name="OPERAND2_RGB"                  count="1"  value="0x8592">
+        <size name="TexEnvfv"/>
+        <size name="TexEnviv"/>
+        <size name="GetTexEnvfv" mode="get"/>
+        <size name="GetTexEnviv" mode="get"/>
+    </enum>
+    <enum name="OPERAND0_ALPHA"                count="1"  value="0x8598">
+        <size name="TexEnvfv"/>
+        <size name="TexEnviv"/>
+        <size name="GetTexEnvfv" mode="get"/>
+        <size name="GetTexEnviv" mode="get"/>
+    </enum>
+    <enum name="OPERAND1_ALPHA"                count="1"  value="0x8599">
+        <size name="TexEnvfv"/>
+        <size name="TexEnviv"/>
+        <size name="GetTexEnvfv" mode="get"/>
+        <size name="GetTexEnviv" mode="get"/>
+    </enum>
+    <enum name="OPERAND2_ALPHA"                count="1"  value="0x859A">
+        <size name="TexEnvfv"/>
+        <size name="TexEnviv"/>
+        <size name="GetTexEnvfv" mode="get"/>
+        <size name="GetTexEnviv" mode="get"/>
+    </enum>
+    <enum name="RGB_SCALE"                     count="1"  value="0x8573">
+        <size name="TexEnvfv"/>
+        <size name="TexEnviv"/>
+        <size name="GetTexEnvfv" mode="get"/>
+        <size name="GetTexEnviv" mode="get"/>
+    </enum>
+    <enum name="ADD_SIGNED"                               value="0x8574"/>
+    <enum name="INTERPOLATE"                              value="0x8575"/>
+    <enum name="SUBTRACT"                                 value="0x84E7"/>
+    <enum name="CONSTANT"                                 value="0x8576"/>
+    <enum name="PRIMARY_COLOR"                            value="0x8577"/>
+    <enum name="PREVIOUS"                                 value="0x8578"/>
+    <enum name="DOT3_RGB"                                 value="0x86AE"/>
+    <enum name="DOT3_RGBA"                                value="0x86AF"/>
+
+    <function name="ActiveTexture" alias="ActiveTextureARB">
+        <param name="texture" type="GLenum"/>
+    </function>
+
+    <function name="ClientActiveTexture" alias="ClientActiveTextureARB">
+        <param name="texture" type="GLenum"/>
+    </function>
+
+    <function name="MultiTexCoord1d" alias="MultiTexCoord1dARB">
+        <param name="target" type="GLenum"/>
+        <param name="s" type="GLdouble"/>
+    </function>
+
+    <function name="MultiTexCoord1dv" alias="MultiTexCoord1dvARB">
+        <param name="target" type="GLenum"/>
+        <param name="v" type="const GLdouble *"/>
+    </function>
+
+    <function name="MultiTexCoord1f" alias="MultiTexCoord1fARB">
+        <param name="target" type="GLenum"/>
+        <param name="s" type="GLfloat"/>
+    </function>
+
+    <function name="MultiTexCoord1fv" alias="MultiTexCoord1fvARB">
+        <param name="target" type="GLenum"/>
+        <param name="v" type="const GLfloat *"/>
+    </function>
+
+    <function name="MultiTexCoord1i" alias="MultiTexCoord1iARB">
+        <param name="target" type="GLenum"/>
+        <param name="s" type="GLint"/>
+    </function>
+
+    <function name="MultiTexCoord1iv" alias="MultiTexCoord1ivARB">
+        <param name="target" type="GLenum"/>
+        <param name="v" type="const GLint *"/>
+    </function>
+
+    <function name="MultiTexCoord1s" alias="MultiTexCoord1sARB">
+        <param name="target" type="GLenum"/>
+        <param name="s" type="GLshort"/>
+    </function>
+
+    <function name="MultiTexCoord1sv" alias="MultiTexCoord1svARB">
+        <param name="target" type="GLenum"/>
+        <param name="v" type="const GLshort *"/>
+    </function>
+
+    <function name="MultiTexCoord2d" alias="MultiTexCoord2dARB">
+        <param name="target" type="GLenum"/>
+        <param name="s" type="GLdouble"/>
+        <param name="t" type="GLdouble"/>
+    </function>
+
+    <function name="MultiTexCoord2dv" alias="MultiTexCoord2dvARB">
+        <param name="target" type="GLenum"/>
+        <param name="v" type="const GLdouble *"/>
+    </function>
+
+    <function name="MultiTexCoord2f" alias="MultiTexCoord2fARB">
+        <param name="target" type="GLenum"/>
+        <param name="s" type="GLfloat"/>
+        <param name="t" type="GLfloat"/>
+    </function>
+
+    <function name="MultiTexCoord2fv" alias="MultiTexCoord2fvARB">
+        <param name="target" type="GLenum"/>
+        <param name="v" type="const GLfloat *"/>
+    </function>
+
+    <function name="MultiTexCoord2i" alias="MultiTexCoord2iARB">
+        <param name="target" type="GLenum"/>
+        <param name="s" type="GLint"/>
+        <param name="t" type="GLint"/>
+    </function>
+
+    <function name="MultiTexCoord2iv" alias="MultiTexCoord2ivARB">
+        <param name="target" type="GLenum"/>
+        <param name="v" type="const GLint *"/>
+    </function>
+
+    <function name="MultiTexCoord2s" alias="MultiTexCoord2sARB">
+        <param name="target" type="GLenum"/>
+        <param name="s" type="GLshort"/>
+        <param name="t" type="GLshort"/>
+    </function>
+
+    <function name="MultiTexCoord2sv" alias="MultiTexCoord2svARB">
+        <param name="target" type="GLenum"/>
+        <param name="v" type="const GLshort *"/>
+    </function>
+
+    <function name="MultiTexCoord3d" alias="MultiTexCoord3dARB">
+        <param name="target" type="GLenum"/>
+        <param name="s" type="GLdouble"/>
+        <param name="t" type="GLdouble"/>
+        <param name="r" type="GLdouble"/>
+    </function>
+
+    <function name="MultiTexCoord3dv" alias="MultiTexCoord3dvARB">
+        <param name="target" type="GLenum"/>
+        <param name="v" type="const GLdouble *"/>
+    </function>
+
+    <function name="MultiTexCoord3f" alias="MultiTexCoord3fARB">
+        <param name="target" type="GLenum"/>
+        <param name="s" type="GLfloat"/>
+        <param name="t" type="GLfloat"/>
+        <param name="r" type="GLfloat"/>
+    </function>
+
+    <function name="MultiTexCoord3fv" alias="MultiTexCoord3fvARB">
+        <param name="target" type="GLenum"/>
+        <param name="v" type="const GLfloat *"/>
+    </function>
+
+    <function name="MultiTexCoord3i" alias="MultiTexCoord3iARB">
+        <param name="target" type="GLenum"/>
+        <param name="s" type="GLint"/>
+        <param name="t" type="GLint"/>
+        <param name="r" type="GLint"/>
+    </function>
+
+    <function name="MultiTexCoord3iv" alias="MultiTexCoord3ivARB">
+        <param name="target" type="GLenum"/>
+        <param name="v" type="const GLint *"/>
+    </function>
+
+    <function name="MultiTexCoord3s" alias="MultiTexCoord3sARB">
+        <param name="target" type="GLenum"/>
+        <param name="s" type="GLshort"/>
+        <param name="t" type="GLshort"/>
+        <param name="r" type="GLshort"/>
+    </function>
+
+    <function name="MultiTexCoord3sv" alias="MultiTexCoord3svARB">
+        <param name="target" type="GLenum"/>
+        <param name="v" type="const GLshort *"/>
+    </function>
+
+    <function name="MultiTexCoord4d" alias="MultiTexCoord4dARB">
+        <param name="target" type="GLenum"/>
+        <param name="s" type="GLdouble"/>
+        <param name="t" type="GLdouble"/>
+        <param name="r" type="GLdouble"/>
+        <param name="q" type="GLdouble"/>
+    </function>
+
+    <function name="MultiTexCoord4dv" alias="MultiTexCoord4dvARB">
+        <param name="target" type="GLenum"/>
+        <param name="v" type="const GLdouble *"/>
+    </function>
+
+    <function name="MultiTexCoord4f" alias="MultiTexCoord4fARB">
+        <param name="target" type="GLenum"/>
+        <param name="s" type="GLfloat"/>
+        <param name="t" type="GLfloat"/>
+        <param name="r" type="GLfloat"/>
+        <param name="q" type="GLfloat"/>
+    </function>
+
+    <function name="MultiTexCoord4fv" alias="MultiTexCoord4fvARB">
+        <param name="target" type="GLenum"/>
+        <param name="v" type="const GLfloat *"/>
+    </function>
+
+    <function name="MultiTexCoord4i" alias="MultiTexCoord4iARB">
+        <param name="target" type="GLenum"/>
+        <param name="s" type="GLint"/>
+        <param name="t" type="GLint"/>
+        <param name="r" type="GLint"/>
+        <param name="q" type="GLint"/>
+    </function>
+
+    <function name="MultiTexCoord4iv" alias="MultiTexCoord4ivARB">
+        <param name="target" type="GLenum"/>
+        <param name="v" type="const GLint *"/>
+    </function>
+
+    <function name="MultiTexCoord4s" alias="MultiTexCoord4sARB">
+        <param name="target" type="GLenum"/>
+        <param name="s" type="GLshort"/>
+        <param name="t" type="GLshort"/>
+        <param name="r" type="GLshort"/>
+        <param name="q" type="GLshort"/>
+    </function>
+
+    <function name="MultiTexCoord4sv" alias="MultiTexCoord4svARB">
+        <param name="target" type="GLenum"/>
+        <param name="v" type="const GLshort *"/>
+    </function>
+
+    <function name="LoadTransposeMatrixf" alias="LoadTransposeMatrixfARB">
+        <param name="m" type="const GLfloat *"/>
+    </function>
+
+    <function name="LoadTransposeMatrixd" alias="LoadTransposeMatrixdARB">
+        <param name="m" type="const GLdouble *"/>
+    </function>
+
+    <function name="MultTransposeMatrixf" alias="MultTransposeMatrixfARB">
+        <param name="m" type="const GLfloat *"/>
+    </function>
+
+    <function name="MultTransposeMatrixd" alias="MultTransposeMatrixdARB">
+        <param name="m" type="const GLdouble *"/>
+    </function>
+
+    <function name="SampleCoverage" alias="SampleCoverageARB">
+        <param name="value" type="GLclampf"/>
+        <param name="invert" type="GLboolean"/>
+    </function>
+
+    <function name="CompressedTexImage3D" alias="CompressedTexImage3DARB">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="depth" type="GLsizei"/>
+        <param name="border" type="GLint"/>
+        <param name="imageSize" type="GLsizei"/>
+        <param name="data" type="const GLvoid *"/>
+    </function>
+
+    <function name="CompressedTexImage2D" alias="CompressedTexImage2DARB">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="border" type="GLint"/>
+        <param name="imageSize" type="GLsizei"/>
+        <param name="data" type="const GLvoid *"/>
+    </function>
+
+    <function name="CompressedTexImage1D" alias="CompressedTexImage1DARB">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="width" type="GLsizei"/>
+        <param name="border" type="GLint"/>
+        <param name="imageSize" type="GLsizei"/>
+        <param name="data" type="const GLvoid *"/>
+    </function>
+
+    <function name="CompressedTexSubImage3D" alias="CompressedTexSubImage3DARB">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="xoffset" type="GLint"/>
+        <param name="yoffset" type="GLint"/>
+        <param name="zoffset" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="depth" type="GLsizei"/>
+        <param name="format" type="GLenum"/>
+        <param name="imageSize" type="GLsizei"/>
+        <param name="data" type="const GLvoid *"/>
+    </function>
+
+    <function name="CompressedTexSubImage2D" alias="CompressedTexSubImage2DARB">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="xoffset" type="GLint"/>
+        <param name="yoffset" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="format" type="GLenum"/>
+        <param name="imageSize" type="GLsizei"/>
+        <param name="data" type="const GLvoid *"/>
+    </function>
+
+    <function name="CompressedTexSubImage1D" alias="CompressedTexSubImage1DARB">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="xoffset" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <param name="format" type="GLenum"/>
+        <param name="imageSize" type="GLsizei"/>
+        <param name="data" type="const GLvoid *"/>
+    </function>
+
+    <function name="GetCompressedTexImage" alias="GetCompressedTexImageARB">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="img" type="GLvoid *" output="true"/>
+    </function>
+</category>
+
+<category name="1.4">
+    <enum name="BLEND_DST_RGB"                 count="1"  value="0x80C8">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="BLEND_SRC_RGB"                 count="1"  value="0x80C9">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="BLEND_DST_ALPHA"               count="1"  value="0x80CA">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="BLEND_SRC_ALPHA"               count="1"  value="0x80CB">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POINT_SIZE_MIN"                count="1"  value="0x8126">
+        <size name="PointParameterfvEXT"/>
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POINT_SIZE_MAX"                count="1"  value="0x8127">
+        <size name="PointParameterfvEXT"/>
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POINT_FADE_THRESHOLD_SIZE"     count="1"  value="0x8128">
+        <size name="PointParameterfvEXT"/>
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POINT_DISTANCE_ATTENUATION"    count="3"  value="0x8129">
+        <size name="PointParameterfvEXT"/>
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="GENERATE_MIPMAP"               count="1"  value="0x8191">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+    <enum name="GENERATE_MIPMAP_HINT"                     value="0x8192"/>
+    <enum name="DEPTH_COMPONENT16"                        value="0x81A5"/>
+    <enum name="DEPTH_COMPONENT24"                        value="0x81A6"/>
+    <enum name="DEPTH_COMPONENT32"                        value="0x81A7"/>
+    <enum name="MIRRORED_REPEAT"                          value="0x8370"/>
+    <enum name="FOG_COORDINATE_SOURCE"         count="1"  value="0x8450">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="FOG_COORDINATE"                           value="0x8451"/>
+    <enum name="FRAGMENT_DEPTH"                           value="0x8452"/>
+    <enum name="CURRENT_FOG_COORDINATE"        count="1"  value="0x8453">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="FOG_COORDINATE_ARRAY_TYPE"     count="1"  value="0x8454">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="FOG_COORDINATE_ARRAY_STRIDE"   count="1"  value="0x8455">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="FOG_COORDINATE_ARRAY_POINTER"             value="0x8456"/>
+    <enum name="FOG_COORDINATE_ARRAY"          count="1"  value="0x8457">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="COLOR_SUM"                                value="0x8458"/>
+    <enum name="CURRENT_SECONDARY_COLOR"       count="4"  value="0x8459">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="SECONDARY_COLOR_ARRAY_SIZE"    count="1"  value="0x845A">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="SECONDARY_COLOR_ARRAY_TYPE"    count="1"  value="0x845B">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="SECONDARY_COLOR_ARRAY_STRIDE"  count="1"  value="0x845C">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="SECONDARY_COLOR_ARRAY_POINTER"            value="0x845D"/>
+    <enum name="SECONDARY_COLOR_ARRAY"         count="1"  value="0x845E">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAX_TEXTURE_LOD_BIAS"          count="1"  value="0x84FD">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_FILTER_CONTROL"                   value="0x8500"/>
+    <enum name="TEXTURE_LOD_BIAS"              count="1"  value="0x8501">
+        <size name="TexEnvfv"/>
+        <size name="TexEnviv"/>
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexEnvfv" mode="get"/>
+        <size name="GetTexEnviv" mode="get"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+    <enum name="INCR_WRAP"                                value="0x8507"/>
+    <enum name="DECR_WRAP"                                value="0x8508"/>
+    <enum name="TEXTURE_DEPTH_SIZE"            count="1"  value="0x884A">
+        <size name="GetTexLevelParameterfv" mode="get"/>
+        <size name="GetTexLevelParameteriv" mode="get"/>
+    </enum>
+    <enum name="DEPTH_TEXTURE_MODE"            count="1"  value="0x884B">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_COMPARE_MODE"          count="1"  value="0x884C">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_COMPARE_FUNC"          count="1"  value="0x884D">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+    <enum name="COMPARE_R_TO_TEXTURE"                     value="0x884E"/>
+
+    <function name="BlendFuncSeparate" alias="BlendFuncSeparateEXT">
+        <param name="sfactorRGB" type="GLenum"/>
+        <param name="dfactorRGB" type="GLenum"/>
+        <param name="sfactorAlpha" type="GLenum"/>
+        <param name="dfactorAlpha" type="GLenum"/>
+    </function>
+
+    <function name="FogCoordf" alias="FogCoordfEXT">
+        <param name="coord" type="GLfloat"/>
+    </function>
+
+    <function name="FogCoordfv" alias="FogCoordfvEXT">
+        <param name="coord" type="const GLfloat *"/>
+    </function>
+
+    <function name="FogCoordd" alias="FogCoorddEXT">
+        <param name="coord" type="GLdouble"/>
+    </function>
+
+    <function name="FogCoorddv" alias="FogCoorddvEXT">
+        <param name="coord" type="const GLdouble *"/>
+    </function>
+
+    <function name="FogCoordPointer" alias="FogCoordPointerEXT">
+        <param name="type" type="GLenum"/>
+        <param name="stride" type="GLsizei"/>
+        <param name="pointer" type="const GLvoid *"/>
+    </function>
+
+    <function name="MultiDrawArrays" alias="MultiDrawArraysEXT">
+        <param name="mode" type="GLenum"/>
+        <param name="first" type="GLint *"/> <!-- Spec bug. Should be const. -->
+        <param name="count" type="GLsizei *"/> <!-- Spec bug. Should be const. -->
+        <param name="primcount" type="GLsizei"/>
+    </function>
+
+    <function name="MultiDrawElements" alias="MultiDrawElementsEXT">
+        <param name="mode" type="GLenum"/>
+        <param name="count" type="const GLsizei *"/>
+        <param name="type" type="GLenum"/>
+        <param name="indices" type="const GLvoid **"/>
+        <param name="primcount" type="GLsizei"/>
+    </function>
+
+    <function name="PointParameterf" alias="PointParameterfEXT">
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLfloat"/>
+    </function>
+
+    <function name="PointParameterfv" alias="PointParameterfvEXT">
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLfloat *"/>
+    </function>
+
+    <function name="PointParameteri" alias="PointParameteriNV">
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLint"/>
+    </function>
+
+    <function name="PointParameteriv" alias="PointParameterivNV">
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLint *"/>
+    </function>
+
+    <function name="SecondaryColor3b" alias="SecondaryColor3bEXT">
+        <param name="red" type="GLbyte"/>
+        <param name="green" type="GLbyte"/>
+        <param name="blue" type="GLbyte"/>
+    </function>
+
+    <function name="SecondaryColor3bv" alias="SecondaryColor3bvEXT">
+        <param name="v" type="const GLbyte *"/>
+    </function>
+
+    <function name="SecondaryColor3d" alias="SecondaryColor3dEXT">
+        <param name="red" type="GLdouble"/>
+        <param name="green" type="GLdouble"/>
+        <param name="blue" type="GLdouble"/>
+    </function>
+
+    <function name="SecondaryColor3dv" alias="SecondaryColor3dvEXT">
+        <param name="v" type="const GLdouble *"/>
+    </function>
+
+    <function name="SecondaryColor3f" alias="SecondaryColor3fEXT">
+        <param name="red" type="GLfloat"/>
+        <param name="green" type="GLfloat"/>
+        <param name="blue" type="GLfloat"/>
+    </function>
+
+    <function name="SecondaryColor3fv" alias="SecondaryColor3fvEXT">
+        <param name="v" type="const GLfloat *"/>
+    </function>
+
+    <function name="SecondaryColor3i" alias="SecondaryColor3iEXT">
+        <param name="red" type="GLint"/>
+        <param name="green" type="GLint"/>
+        <param name="blue" type="GLint"/>
+    </function>
+
+    <function name="SecondaryColor3iv" alias="SecondaryColor3ivEXT">
+        <param name="v" type="const GLint *"/>
+    </function>
+
+    <function name="SecondaryColor3s" alias="SecondaryColor3sEXT">
+        <param name="red" type="GLshort"/>
+        <param name="green" type="GLshort"/>
+        <param name="blue" type="GLshort"/>
+    </function>
+
+    <function name="SecondaryColor3sv" alias="SecondaryColor3svEXT">
+        <param name="v" type="const GLshort *"/>
+    </function>
+
+    <function name="SecondaryColor3ub" alias="SecondaryColor3ubEXT">
+        <param name="red" type="GLubyte"/>
+        <param name="green" type="GLubyte"/>
+        <param name="blue" type="GLubyte"/>
+    </function>
+
+    <function name="SecondaryColor3ubv" alias="SecondaryColor3ubvEXT">
+        <param name="v" type="const GLubyte *"/>
+    </function>
+
+    <function name="SecondaryColor3ui" alias="SecondaryColor3uiEXT">
+        <param name="red" type="GLuint"/>
+        <param name="green" type="GLuint"/>
+        <param name="blue" type="GLuint"/>
+    </function>
+
+    <function name="SecondaryColor3uiv" alias="SecondaryColor3uivEXT">
+        <param name="v" type="const GLuint *"/>
+    </function>
+
+    <function name="SecondaryColor3us" alias="SecondaryColor3usEXT">
+        <param name="red" type="GLushort"/>
+        <param name="green" type="GLushort"/>
+        <param name="blue" type="GLushort"/>
+    </function>
+
+    <function name="SecondaryColor3usv" alias="SecondaryColor3usvEXT">
+        <param name="v" type="const GLushort *"/>
+    </function>
+
+    <function name="SecondaryColorPointer" alias="SecondaryColorPointerEXT">
+        <param name="size" type="GLint"/>
+        <param name="type" type="GLenum"/>
+        <param name="stride" type="GLsizei"/>
+        <param name="pointer" type="const GLvoid *"/>
+    </function>
+
+    <function name="WindowPos2d" alias="WindowPos2dMESA">
+        <param name="x" type="GLdouble"/>
+        <param name="y" type="GLdouble"/>
+    </function>
+
+    <function name="WindowPos2dv" alias="WindowPos2dvMESA">
+        <param name="v" type="const GLdouble *"/>
+    </function>
+
+    <function name="WindowPos2f" alias="WindowPos2fMESA">
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+    </function>
+
+    <function name="WindowPos2fv" alias="WindowPos2fvMESA">
+        <param name="v" type="const GLfloat *"/>
+    </function>
+
+    <function name="WindowPos2i" alias="WindowPos2iMESA">
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+    </function>
+
+    <function name="WindowPos2iv" alias="WindowPos2ivMESA">
+        <param name="v" type="const GLint *"/>
+    </function>
+
+    <function name="WindowPos2s" alias="WindowPos2sMESA">
+        <param name="x" type="GLshort"/>
+        <param name="y" type="GLshort"/>
+    </function>
+
+    <function name="WindowPos2sv" alias="WindowPos2svMESA">
+        <param name="v" type="const GLshort *"/>
+    </function>
+
+    <function name="WindowPos3d" alias="WindowPos3dMESA">
+        <param name="x" type="GLdouble"/>
+        <param name="y" type="GLdouble"/>
+        <param name="z" type="GLdouble"/>
+    </function>
+
+    <function name="WindowPos3dv" alias="WindowPos3dvMESA">
+        <param name="v" type="const GLdouble *"/>
+    </function>
+
+    <function name="WindowPos3f" alias="WindowPos3fMESA">
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+    </function>
+
+    <function name="WindowPos3fv" alias="WindowPos3fvMESA">
+        <param name="v" type="const GLfloat *"/>
+    </function>
+
+    <function name="WindowPos3i" alias="WindowPos3iMESA">
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+        <param name="z" type="GLint"/>
+    </function>
+
+    <function name="WindowPos3iv" alias="WindowPos3ivMESA">
+        <param name="v" type="const GLint *"/>
+    </function>
+
+    <function name="WindowPos3s" alias="WindowPos3sMESA">
+        <param name="x" type="GLshort"/>
+        <param name="y" type="GLshort"/>
+        <param name="z" type="GLshort"/>
+    </function>
+
+    <function name="WindowPos3sv" alias="WindowPos3svMESA">
+        <param name="v" type="const GLshort *"/>
+    </function>
+</category>
+
+<category name="1.5">
+    <enum name="BUFFER_SIZE"                              value="0x8764"/>
+    <enum name="BUFFER_USAGE"                             value="0x8765"/>
+    <enum name="QUERY_COUNTER_BITS"                       value="0x8864"/>
+    <enum name="CURRENT_QUERY"                            value="0x8865"/>
+    <enum name="QUERY_RESULT"                             value="0x8866"/>
+    <enum name="QUERY_RESULT_AVAILABLE"                   value="0x8867"/>
+    <enum name="ARRAY_BUFFER"                             value="0x8892"/>
+    <enum name="ELEMENT_ARRAY_BUFFER"                     value="0x8893"/>
+    <enum name="ARRAY_BUFFER_BINDING"                     value="0x8894"/>
+    <enum name="ELEMENT_ARRAY_BUFFER_BINDING"             value="0x8895"/>
+    <enum name="VERTEX_ARRAY_BUFFER_BINDING"              value="0x8896"/>
+    <enum name="NORMAL_ARRAY_BUFFER_BINDING"              value="0x8897"/>
+    <enum name="COLOR_ARRAY_BUFFER_BINDING"               value="0x8898"/>
+    <enum name="INDEX_ARRAY_BUFFER_BINDING"               value="0x8899"/>
+    <enum name="TEXTURE_COORD_ARRAY_BUFFER_BINDING"       value="0x889A"/>
+    <enum name="EDGE_FLAG_ARRAY_BUFFER_BINDING"           value="0x889B"/>
+    <enum name="SECONDARY_COLOR_ARRAY_BUFFER_BINDING"     value="0x889C"/>
+    <enum name="FOG_COORDINATE_ARRAY_BUFFER_BINDING"      value="0x889D"/>
+    <enum name="WEIGHT_ARRAY_BUFFER_BINDING"              value="0x889E"/>
+    <enum name="VERTEX_ATTRIB_ARRAY_BUFFER_BINDING"       value="0x889F"/>
+    <enum name="READ_ONLY"                                value="0x88B8"/>
+    <enum name="WRITE_ONLY"                               value="0x88B9"/>
+    <enum name="READ_WRITE"                               value="0x88BA"/>
+    <enum name="BUFFER_ACCESS"                            value="0x88BB"/>
+    <enum name="BUFFER_MAPPED"                            value="0x88BC"/>
+    <enum name="BUFFER_MAP_POINTER"                       value="0x88BD"/>
+    <enum name="STREAM_DRAW"                              value="0x88E0"/>
+    <enum name="STREAM_READ"                              value="0x88E1"/>
+    <enum name="STREAM_COPY"                              value="0x88E2"/>
+    <enum name="STATIC_DRAW"                              value="0x88E4"/>
+    <enum name="STATIC_READ"                              value="0x88E5"/>
+    <enum name="STATIC_COPY"                              value="0x88E6"/>
+    <enum name="DYNAMIC_DRAW"                             value="0x88E8"/>
+    <enum name="DYNAMIC_READ"                             value="0x88E9"/>
+    <enum name="DYNAMIC_COPY"                             value="0x88EA"/>
+    <enum name="SAMPLES_PASSED"                count="1"  value="0x8914"/>
+    <enum name="FOG_COORD_SRC"                            value="0x8450">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="FOG_COORD"                                value="0x8451"/>
+    <enum name="CURRENT_FOG_COORD"             count="1"  value="0x8453">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="FOG_COORD_ARRAY_TYPE"          count="1"  value="0x8454">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="FOG_COORD_ARRAY_STRIDE"        count="1"  value="0x8455">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="FOG_COORD_ARRAY_POINTER"                  value="0x8456"/>
+    <enum name="FOG_COORD_ARRAY"               count="1"  value="0x8457">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="FOG_COORD_ARRAY_BUFFER_BINDING"           value="0x889D"/>
+    <enum name="SRC0_RGB"                                 value="0x8580"/>
+    <enum name="SRC1_RGB"                                 value="0x8581"/>
+    <enum name="SRC2_RGB"                                 value="0x8582"/>
+    <enum name="SRC0_ALPHA"                               value="0x8588"/>
+    <enum name="SRC1_ALPHA"                               value="0x8589"/>
+    <enum name="SRC2_ALPHA"                               value="0x858A"/>
+
+    <type name="intptr"   size="4"                  glx_name="CARD32"/>
+    <type name="sizeiptr" size="4"  unsigned="true" glx_name="CARD32"/>
+
+    <function name="BindBuffer" alias="BindBufferARB">
+        <param name="target" type="GLenum"/>
+        <param name="buffer" type="GLuint"/>
+    </function>
+
+    <function name="BufferData" alias="BufferDataARB">
+        <param name="target" type="GLenum"/>
+        <param name="size" type="GLsizeiptr"/>
+        <param name="data" type="const GLvoid *"/>
+        <param name="usage" type="GLenum"/>
+    </function>
+
+    <function name="BufferSubData" alias="BufferSubDataARB">
+        <param name="target" type="GLenum"/>
+        <param name="offset" type="GLintptr"/>
+        <param name="size" type="GLsizeiptr"/>
+        <param name="data" type="const GLvoid *"/>
+    </function>
+
+    <function name="DeleteBuffers" alias="DeleteBuffersARB">
+        <param name="n" type="GLsizei"/>
+        <param name="buffer" type="const GLuint *"/>
+    </function>
+
+    <function name="GenBuffers" alias="GenBuffersARB">
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="buffer" type="GLuint *" output="true" count="n"/>
+    </function>
+
+    <function name="GetBufferParameteriv" alias="GetBufferParameterivARB">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true" variable_param="pname"/>
+    </function>
+
+    <function name="GetBufferPointerv" alias="GetBufferPointervARB">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLvoid **" output="true"/>
+    </function>
+
+    <function name="GetBufferSubData" alias="GetBufferSubDataARB">
+        <param name="target" type="GLenum"/>
+        <param name="offset" type="GLintptr"/>
+        <param name="size" type="GLsizeiptr"/>
+        <param name="data" type="GLvoid *" output="true"/>
+    </function>
+
+    <function name="IsBuffer" alias="IsBufferARB">
+        <param name="buffer" type="GLuint"/>
+        <return type="GLboolean"/>
+    </function>
+
+    <function name="MapBuffer" alias="MapBufferARB">
+        <param name="target" type="GLenum"/>
+        <param name="access" type="GLenum"/>
+        <return type="GLvoid *"/>
+    </function>
+
+    <function name="UnmapBuffer" alias="UnmapBufferARB">
+        <param name="target" type="GLenum"/>
+        <return type="GLboolean"/>
+    </function>
+
+    <function name="GenQueries" alias="GenQueriesARB">
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="ids" type="GLuint *" output="true" count="n"/>
+    </function>
+
+    <function name="DeleteQueries" alias="DeleteQueriesARB">
+        <param name="n" type="GLsizei"/>
+        <param name="ids" type="const GLuint *"/>
+    </function>
+
+    <function name="IsQuery" alias="IsQueryARB">
+        <param name="id" type="GLuint"/>
+        <return type="GLboolean"/>
+    </function>
+
+    <function name="BeginQuery" alias="BeginQueryARB">
+        <param name="target" type="GLenum"/>
+        <param name="id" type="GLuint"/>
+    </function>
+
+    <function name="EndQuery" alias="EndQueryARB">
+        <param name="target" type="GLenum"/>
+    </function>
+
+    <function name="GetQueryiv" alias="GetQueryivARB">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true" variable_param="pname"/>
+    </function>
+
+    <function name="GetQueryObjectiv" alias="GetQueryObjectivARB">
+        <param name="id" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true" variable_param="pname"/>
+    </function>
+
+    <function name="GetQueryObjectuiv" alias="GetQueryObjectuivARB">
+        <param name="id" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLuint *" output="true" variable_param="pname"/>
+    </function>
+</category>
+
+
+<category name="2.0">
+    <!-- XXX some of the enums and functions probably need additional -->
+    <!-- flags/attributes. -->
+
+    <type name="char"   size="1" glx_name="CARD8"/>
+
+    <enum name="BLEND_EQUATION_RGB"            value="0x8009"/>
+    <enum name="VERTEX_ATTRIB_ARRAY_ENABLED"      value="0x8622"/>
+    <enum name="VERTEX_ATTRIB_ARRAY_SIZE"         value="0x8623"/>
+    <enum name="VERTEX_ATTRIB_ARRAY_STRIDE"       value="0x8624"/>
+    <enum name="VERTEX_ATTRIB_ARRAY_TYPE"         value="0x8625"/>
+    <enum name="CURRENT_VERTEX_ATTRIB"            value="0x8626"/>
+    <enum name="VERTEX_PROGRAM_POINT_SIZE"        value="0x8642"/>
+    <enum name="VERTEX_PROGRAM_TWO_SIDE"          value="0x8643"/>
+    <enum name="VERTEX_ATTRIB_ARRAY_POINTER"      value="0x8645"/>
+    <enum name="STENCIL_BACK_FUNC"                value="0x8800"/>
+    <enum name="STENCIL_BACK_FAIL"                value="0x8801"/>
+    <enum name="STENCIL_BACK_PASS_DEPTH_FAIL"     value="0x8802"/>
+    <enum name="STENCIL_BACK_PASS_DEPTH_PASS"     value="0x8803"/>
+    <enum name="MAX_DRAW_BUFFERS"                 value="0x8824"/>
+    <enum name="DRAW_BUFFER0"                     value="0x8825"/>
+    <enum name="DRAW_BUFFER1"                     value="0x8826"/>
+    <enum name="DRAW_BUFFER2"                     value="0x8827"/>
+    <enum name="DRAW_BUFFER3"                     value="0x8828"/>
+    <enum name="DRAW_BUFFER4"                     value="0x8829"/>
+    <enum name="DRAW_BUFFER5"                     value="0x882A"/>
+    <enum name="DRAW_BUFFER6"                     value="0x882B"/>
+    <enum name="DRAW_BUFFER7"                     value="0x882C"/>
+    <enum name="DRAW_BUFFER8"                     value="0x882D"/>
+    <enum name="DRAW_BUFFER9"                     value="0x882E"/>
+    <enum name="DRAW_BUFFER10"                    value="0x882F"/>
+    <enum name="DRAW_BUFFER11"                    value="0x8830"/>
+    <enum name="DRAW_BUFFER12"                    value="0x8831"/>
+    <enum name="DRAW_BUFFER13"                    value="0x8832"/>
+    <enum name="DRAW_BUFFER14"                    value="0x8833"/>
+    <enum name="DRAW_BUFFER15"                    value="0x8834"/>
+    <enum name="BLEND_EQUATION_ALPHA"             value="0x883D"/>
+    <enum name="POINT_SPRITE"                     value="0x8861"/>
+    <enum name="COORD_REPLACE"                    value="0x8862"/>
+    <enum name="MAX_VERTEX_ATTRIBS"               value="0x8869"/>
+    <enum name="VERTEX_ATTRIB_ARRAY_NORMALIZED"   value="0x886A"/>
+    <enum name="MAX_TEXTURE_COORDS"               value="0x8871"/>
+    <enum name="MAX_TEXTURE_IMAGE_UNITS"          value="0x8872"/>
+    <enum name="FRAGMENT_SHADER"                  value="0x8B30"/>
+    <enum name="VERTEX_SHADER"                    value="0x8B31"/>
+    <enum name="MAX_FRAGMENT_UNIFORM_COMPONENTS"  value="0x8B49"/>
+    <enum name="MAX_VERTEX_UNIFORM_COMPONENTS"    value="0x8B4A"/>
+    <enum name="MAX_VARYING_FLOATS"               value="0x8B4B"/>
+    <enum name="MAX_VERTEX_TEXTURE_IMAGE_UNITS"   value="0x8B4C"/>
+    <enum name="MAX_COMBINED_TEXTURE_IMAGE_UNITS" value="0x8B4D"/>
+    <enum name="SHADER_TYPE"                      value="0x8B4F"/>
+    <enum name="FLOAT_VEC2"                       value="0x8B50"/>
+    <enum name="FLOAT_VEC3"                       value="0x8B51"/>
+    <enum name="FLOAT_VEC4"                       value="0x8B52"/>
+    <enum name="INT_VEC2"                         value="0x8B53"/>
+    <enum name="INT_VEC3"                         value="0x8B54"/>
+    <enum name="INT_VEC4"                         value="0x8B55"/>
+    <enum name="BOOL"                             value="0x8B56"/>
+    <enum name="BOOL_VEC2"                        value="0x8B57"/>
+    <enum name="BOOL_VEC3"                        value="0x8B58"/>
+    <enum name="BOOL_VEC4"                        value="0x8B59"/>
+    <enum name="FLOAT_MAT2"                       value="0x8B5A"/>
+    <enum name="FLOAT_MAT3"                       value="0x8B5B"/>
+    <enum name="FLOAT_MAT4"                       value="0x8B5C"/>
+    <enum name="SAMPLER_1D"                       value="0x8B5D"/>
+    <enum name="SAMPLER_2D"                       value="0x8B5E"/>
+    <enum name="SAMPLER_3D"                       value="0x8B5F"/>
+    <enum name="SAMPLER_CUBE"                     value="0x8B60"/>
+    <enum name="SAMPLER_1D_SHADOW"                value="0x8B61"/>
+    <enum name="SAMPLER_2D_SHADOW"                value="0x8B62"/>
+    <enum name="DELETE_STATUS"                    value="0x8B80"/>
+    <enum name="COMPILE_STATUS"                   value="0x8B81"/>
+    <enum name="LINK_STATUS"                      value="0x8B82"/>
+    <enum name="VALIDATE_STATUS"                  value="0x8B83"/>
+    <enum name="INFO_LOG_LENGTH"                  value="0x8B84"/>
+    <enum name="ATTACHED_SHADERS"                 value="0x8B85"/>
+    <enum name="ACTIVE_UNIFORMS"                  value="0x8B86"/>
+    <enum name="ACTIVE_UNIFORM_MAX_LENGTH"        value="0x8B87"/>
+    <enum name="SHADER_SOURCE_LENGTH"             value="0x8B88"/>
+    <enum name="ACTIVE_ATTRIBUTES"                value="0x8B89"/>
+    <enum name="ACTIVE_ATTRIBUTE_MAX_LENGTH"      value="0x8B8A"/>
+    <enum name="FRAGMENT_SHADER_DERIVATIVE_HINT"  value="0x8B8B"/>
+    <enum name="SHADING_LANGUAGE_VERSION"         value="0x8B8C"/>
+    <enum name="CURRENT_PROGRAM"                  value="0x8B8D"/>
+    <enum name="POINT_SPRITE_COORD_ORIGIN" count="1"  value="0x8CA0">
+        <size name="PointParameterfvEXT"/>
+        <size name="PointParameterivNV"/>
+    </enum>
+    <enum name="LOWER_LEFT"                       value="0x8CA1"/>
+    <enum name="UPPER_LEFT"                       value="0x8CA2"/>
+    <enum name="STENCIL_BACK_REF"                 value="0x8CA3"/>
+    <enum name="STENCIL_BACK_VALUE_MASK"          value="0x8CA4"/>
+    <enum name="STENCIL_BACK_WRITEMASK"           value="0x8CA5"/>
+
+    <function name="BlendEquationSeparate" alias="BlendEquationSeparateEXT">
+        <param name="modeRGB" type="GLenum"/>
+        <param name="modeA" type="GLenum"/>
+    </function>
+
+    <function name="DrawBuffers" alias="DrawBuffersARB">
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="bufs" type="const GLenum *" count="n"/>
+    </function>
+
+    <function name="StencilFuncSeparate" offset="assign">
+        <param name="face" type="GLenum"/>
+        <param name="func" type="GLenum"/>
+        <param name="ref" type="GLint"/>
+        <param name="mask" type="GLuint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="StencilOpSeparate" offset="assign">
+        <param name="face" type="GLenum"/>
+        <param name="sfail" type="GLenum"/>
+        <param name="zfail" type="GLenum"/>
+        <param name="zpass" type="GLenum"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="StencilMaskSeparate" offset="assign">
+        <param name="face" type="GLenum"/>
+        <param name="mask" type="GLuint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="AttachShader" offset="assign">
+        <param name="program" type="GLuint"/>
+        <param name="shader" type="GLuint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="BindAttribLocation" alias="BindAttribLocationARB">
+        <param name="program" type="GLuint"/>
+        <param name="index" type="GLuint"/>
+        <param name="name" type="const GLchar *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="CompileShader" alias="CompileShaderARB">
+        <param name="shader" type="GLuint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="CreateProgram" offset="assign">
+        <return type="GLuint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="CreateShader" offset="assign">
+        <param name="type" type="GLenum"/>
+        <return type="GLuint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="DeleteProgram" offset="assign">
+        <param name="program" type="GLuint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="DeleteShader" offset="assign">
+        <param name="program" type="GLuint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="DetachShader" offset="assign">
+        <param name="program" type="GLuint"/>
+        <param name="shader" type="GLuint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="DisableVertexAttribArray" alias="DisableVertexAttribArrayARB">
+        <param name="index" type="GLuint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="EnableVertexAttribArray" alias="EnableVertexAttribArrayARB">
+        <param name="index" type="GLuint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetActiveAttrib" alias="GetActiveAttribARB">
+        <param name="program" type="GLuint"/>
+        <param name="index" type="GLuint"/>
+        <param name="bufSize" type="GLsizei "/>
+        <param name="length" type="GLsizei *" output="true"/>
+        <param name="size" type="GLint *" output="true"/>
+        <param name="type" type="GLenum *" output="true"/>
+        <param name="name" type="GLchar *" output="true"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetActiveUniform" alias="GetActiveUniformARB">
+        <param name="program" type="GLuint"/>
+        <param name="index" type="GLuint"/>
+        <param name="bufSize" type="GLsizei"/>
+        <param name="length" type="GLsizei *" output="true"/>
+        <param name="size" type="GLint *" output="true"/>
+        <param name="type" type="GLenum *" output="true"/>
+        <param name="name" type="GLchar *" output="true"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetAttachedShaders" offset="assign">
+        <param name="program" type="GLuint"/>
+        <param name="maxCount" type="GLsizei"/>
+        <param name="count" type="GLsizei *" output="true"/>
+        <param name="obj" type="GLuint *" output="true"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetAttribLocation" alias="GetAttribLocationARB">
+        <param name="program" type="GLuint"/>
+        <param name="name" type="const GLchar *"/>
+        <return type="GLint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetProgramiv" offset="assign">
+        <param name="program" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetProgramInfoLog" offset="assign">
+        <param name="program" type="GLuint"/>
+        <param name="bufSize" type="GLsizei"/>
+        <param name="length" type="GLsizei *"/>
+        <param name="infoLog" type="GLchar *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetShaderiv" offset="assign">
+        <param name="shader" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetShaderInfoLog" offset="assign">
+        <param name="shader" type="GLuint"/>
+        <param name="bufSize" type="GLsizei"/>
+        <param name="length" type="GLsizei *"/>
+        <param name="infoLog" type="GLchar *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetShaderSource" alias="GetShaderSourceARB">
+        <param name="shader" type="GLuint"/>
+        <param name="bufSize" type="GLsizei"/>
+        <param name="length" type="GLsizei *" output="true"/>
+        <param name="source" type="GLchar *" output="true"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetUniformLocation" alias="GetUniformLocationARB">
+        <param name="program" type="GLuint"/>
+        <param name="name" type="const GLchar *"/>
+        <return type="GLint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetUniformfv" alias="GetUniformfvARB">
+        <param name="program" type="GLuint"/>
+        <param name="location" type="GLint"/>
+        <param name="params" type="GLfloat *" output="true"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetUniformiv" alias="GetUniformivARB">
+        <param name="program" type="GLuint"/>
+        <param name="location" type="GLint"/>
+        <param name="params" type="GLint *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetVertexAttribdv" alias="GetVertexAttribdvARB">
+        <param name="index" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLdouble *" output="true" variable_param="pname"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetVertexAttribfv" alias="GetVertexAttribfvARB">
+        <param name="index" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetVertexAttribiv" alias="GetVertexAttribivARB">
+        <param name="index" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true" variable_param="pname"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetVertexAttribPointerv" alias="GetVertexAttribPointervNV">
+        <param name="index" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="pointer" type="GLvoid **" output="true"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="IsProgram" offset="assign">
+        <param name="program" type="GLuint"/>
+        <return type="GLboolean"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="IsShader" offset="assign">
+        <param name="shader" type="GLuint"/>
+        <return type="GLboolean"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="LinkProgram" alias="LinkProgramARB">
+        <param name="program" type="GLuint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="ShaderSource" alias="ShaderSourceARB">
+        <param name="shader" type="GLuint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="string" type="const GLchar **"/>
+        <param name="length" type="const GLint *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="UseProgram" alias="UseProgramObjectARB">
+        <param name="program" type="GLuint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="Uniform1f" alias="Uniform1fARB">
+        <param name="location" type="GLint"/>
+        <param name="v0" type="GLfloat"/>
+        <glx ignore="true"/>
+    </function>
+    <function name="Uniform2f" alias="Uniform2fARB">
+        <param name="location" type="GLint"/>
+        <param name="v0" type="GLfloat"/>
+        <param name="v1" type="GLfloat"/>
+        <glx ignore="true"/>
+    </function>
+    <function name="Uniform3f" alias="Uniform3fARB">
+        <param name="location" type="GLint"/>
+        <param name="v0" type="GLfloat"/>
+        <param name="v1" type="GLfloat"/>
+        <param name="v2" type="GLfloat"/>
+        <glx ignore="true"/>
+    </function>
+    <function name="Uniform4f" alias="Uniform4fARB">
+        <param name="location" type="GLint"/>
+        <param name="v0" type="GLfloat"/>
+        <param name="v1" type="GLfloat"/>
+        <param name="v2" type="GLfloat"/>
+        <param name="v3" type="GLfloat"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="Uniform1i" alias="Uniform1iARB">
+        <param name="location" type="GLint"/>
+        <param name="v0" type="GLint"/>
+        <glx ignore="true"/>
+    </function>
+    <function name="Uniform2i" alias="Uniform2iARB">
+        <param name="location" type="GLint"/>
+        <param name="v0" type="GLint"/>
+        <param name="v1" type="GLint"/>
+        <glx ignore="true"/>
+    </function>
+    <function name="Uniform3i" alias="Uniform3iARB">
+        <param name="location" type="GLint"/>
+        <param name="v0" type="GLint"/>
+        <param name="v1" type="GLint"/>
+        <param name="v2" type="GLint"/>
+        <glx ignore="true"/>
+    </function>
+    <function name="Uniform4i" alias="Uniform4iARB">
+        <param name="location" type="GLint"/>
+        <param name="v0" type="GLint"/>
+        <param name="v1" type="GLint"/>
+        <param name="v2" type="GLint"/>
+        <param name="v3" type="GLint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="Uniform1fv" alias="Uniform1fvARB">
+        <param name="location" type="GLint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="value" type="const GLfloat *"/>
+        <glx ignore="true"/>
+    </function>
+    <function name="Uniform2fv" alias="Uniform2fvARB">
+        <param name="location" type="GLint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="value" type="const GLfloat *"/>
+        <glx ignore="true"/>
+    </function>
+    <function name="Uniform3fv" alias="Uniform3fvARB">
+        <param name="location" type="GLint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="value" type="const GLfloat *"/>
+        <glx ignore="true"/>
+    </function>
+    <function name="Uniform4fv" alias="Uniform4fvARB">
+        <param name="location" type="GLint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="value" type="const GLfloat *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="Uniform1iv" alias="Uniform1ivARB">
+        <param name="location" type="GLint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="value" type="const GLint *"/>
+        <glx ignore="true"/>
+    </function>
+    <function name="Uniform2iv" alias="Uniform2ivARB">
+        <param name="location" type="GLint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="value" type="const GLint *"/>
+        <glx ignore="true"/>
+    </function>
+    <function name="Uniform3iv" alias="Uniform3ivARB">
+        <param name="location" type="GLint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="value" type="const GLint *"/>
+        <glx ignore="true"/>
+    </function>
+    <function name="Uniform4iv" alias="Uniform4ivARB">
+        <param name="location" type="GLint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="value" type="const GLint *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="UniformMatrix2fv" alias="UniformMatrix2fvARB">
+        <param name="location" type="GLint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="transpose" type="GLboolean"/>
+        <param name="value" type="const GLfloat *"/>
+        <glx ignore="true"/>
+    </function>
+    <function name="UniformMatrix3fv" alias="UniformMatrix3fvARB">
+        <param name="location" type="GLint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="transpose" type="GLboolean"/>
+        <param name="value" type="const GLfloat *"/>
+        <glx ignore="true"/>
+    </function>
+    <function name="UniformMatrix4fv" alias="UniformMatrix4fvARB">
+        <param name="location" type="GLint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="transpose" type="GLboolean"/>
+        <param name="value" type="const GLfloat *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="ValidateProgram" alias="ValidateProgramARB">
+        <param name="program" type="GLuint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="VertexAttrib1d" alias="VertexAttrib1dARB">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLdouble"/>
+    </function>
+    <function name="VertexAttrib1dv" alias="VertexAttrib1dvARB">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLdouble *"/>
+    </function>
+    <function name="VertexAttrib1f" alias="VertexAttrib1fARB">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLfloat"/>
+    </function>
+    <function name="VertexAttrib1fv" alias="VertexAttrib1fvARB">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLfloat *"/>
+    </function>
+    <function name="VertexAttrib1s" alias="VertexAttrib1sARB">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLshort"/>
+    </function>
+    <function name="VertexAttrib1sv" alias="VertexAttrib1svARB">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLshort *"/>
+    </function>
+
+    <function name="VertexAttrib2d" alias="VertexAttrib2dARB">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLdouble"/>
+        <param name="y" type="GLdouble"/>
+    </function>
+    <function name="VertexAttrib2dv" alias="VertexAttrib2dvARB">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLdouble *"/>
+    </function>
+    <function name="VertexAttrib2f" alias="VertexAttrib2fARB">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+    </function>
+    <function name="VertexAttrib2fv" alias="VertexAttrib2fvARB">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLfloat *"/>
+    </function>
+    <function name="VertexAttrib2s" alias="VertexAttrib2sARB">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLshort"/>
+        <param name="y" type="GLshort"/>
+    </function>
+    <function name="VertexAttrib2sv" alias="VertexAttrib2svARB">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLshort *"/>
+    </function>
+
+    <function name="VertexAttrib3d" alias="VertexAttrib3dARB">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLdouble"/>
+        <param name="y" type="GLdouble"/>
+        <param name="z" type="GLdouble"/>
+    </function>
+    <function name="VertexAttrib3dv" alias="VertexAttrib3dvARB">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLdouble *"/>
+    </function>
+    <function name="VertexAttrib3f" alias="VertexAttrib3fARB">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+    </function>
+    <function name="VertexAttrib3fv" alias="VertexAttrib3fvARB">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLfloat *"/>
+    </function>
+    <function name="VertexAttrib3s" alias="VertexAttrib3sARB">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLshort"/>
+        <param name="y" type="GLshort"/>
+        <param name="z" type="GLshort"/>
+    </function>
+    <function name="VertexAttrib3sv" alias="VertexAttrib3svARB">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLshort *"/>
+    </function>
+
+    <function name="VertexAttrib4Nbv" alias="VertexAttrib4NbvARB">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLbyte *"/>
+    </function>
+    <function name="VertexAttrib4Niv" alias="VertexAttrib4NivARB">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLint *"/>
+    </function>
+    <function name="VertexAttrib4Nsv" alias="VertexAttrib4NsvARB">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLshort *"/>
+    </function>
+    <function name="VertexAttrib4Nub" alias="VertexAttrib4NubARB">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLubyte"/>
+        <param name="y" type="GLubyte"/>
+        <param name="z" type="GLubyte"/>
+        <param name="w" type="GLubyte"/>
+    </function>
+    <function name="VertexAttrib4Nubv" alias="VertexAttrib4NubvARB">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLubyte *"/>
+    </function>
+    <function name="VertexAttrib4Nuiv" alias="VertexAttrib4NuivARB">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLuint *"/>
+    </function>
+    <function name="VertexAttrib4Nusv" alias="VertexAttrib4NusvARB">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLushort *"/>
+    </function>
+    <function name="VertexAttrib4bv" alias="VertexAttrib4bvARB">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLbyte *" count="4"/>
+    </function>
+    <function name="VertexAttrib4d" alias="VertexAttrib4dARB">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLdouble"/>
+        <param name="y" type="GLdouble"/>
+        <param name="z" type="GLdouble"/>
+        <param name="w" type="GLdouble"/>
+    </function>
+    <function name="VertexAttrib4dv" alias="VertexAttrib4dvARB">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLdouble *"/>
+    </function>
+    <function name="VertexAttrib4f" alias="VertexAttrib4fARB">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+        <param name="w" type="GLfloat"/>
+    </function>
+    <function name="VertexAttrib4fv" alias="VertexAttrib4fvARB">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLfloat *"/>
+    </function>
+    <function name="VertexAttrib4iv" alias="VertexAttrib4ivARB">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLint *" count="4"/>
+    </function>
+    <function name="VertexAttrib4s" alias="VertexAttrib4sARB">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLshort"/>
+        <param name="y" type="GLshort"/>
+        <param name="z" type="GLshort"/>
+        <param name="w" type="GLshort"/>
+    </function>
+    <function name="VertexAttrib4sv" alias="VertexAttrib4svARB">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLshort *"/>
+    </function>
+    <function name="VertexAttrib4ubv" alias="VertexAttrib4ubvARB">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLubyte *" count="4"/>
+    </function>
+    <function name="VertexAttrib4uiv" alias="VertexAttrib4uivARB">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLuint *" count="4"/>
+    </function>
+    <function name="VertexAttrib4usv" alias="VertexAttrib4usvARB">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLushort *" count="4"/>
+    </function>
+
+    <function name="VertexAttribPointer" alias="VertexAttribPointerARB">
+        <param name="index" type="GLuint"/>
+        <param name="size" type="GLint"/>
+        <param name="type" type="GLenum"/>
+        <param name="normalized" type="GLboolean"/>
+        <param name="stride" type="GLsizei"/>
+        <param name="pointer" type="const GLvoid *"/>
+    </function>
+
+</category>
+
+
+<category name="2.1">
+    <!-- XXX some of the enums and functions probably need additional -->
+    <!-- flags/attributes. -->
+
+    <enum name="CURRENT_RASTER_SECONDARY_COLOR" value="0x845F"/>
+    <enum name="PIXEL_PACK_BUFFER"              value="0x88EB"/>
+    <enum name="PIXEL_UNPACK_BUFFER"            value="0x88EC"/>
+    <enum name="PIXEL_PACK_BUFFER_BINDING"      value="0x88ED"/>
+    <enum name="PIXEL_UNPACK_BUFFER_BINDING"    value="0x88EF"/>
+    <enum name="FLOAT_MAT2x3"                   value="0x8B65"/>
+    <enum name="FLOAT_MAT2x4"                   value="0x8B66"/>
+    <enum name="FLOAT_MAT3x2"                   value="0x8B67"/>
+    <enum name="FLOAT_MAT3x4"                   value="0x8B68"/>
+    <enum name="FLOAT_MAT4x2"                   value="0x8B69"/>
+    <enum name="FLOAT_MAT4x3"                   value="0x8B6A"/>
+    <enum name="SRGB"                           value="0x8C40"/>
+    <enum name="SRGB8"                          value="0x8C41"/>
+    <enum name="SRGB_ALPHA"                     value="0x8C42"/>
+    <enum name="SRGB8_ALPHA8"                   value="0x8C43"/>
+    <enum name="SLUMINANCE_ALPHA"               value="0x8C44"/>
+    <enum name="SLUMINANCE8_ALPHA8"             value="0x8C45"/>
+    <enum name="SLUMINANCE"                     value="0x8C46"/>
+    <enum name="SLUMINANCE8"                    value="0x8C47"/>
+    <enum name="COMPRESSED_SRGB"                value="0x8C48"/>
+    <enum name="COMPRESSED_SRGB_ALPHA"          value="0x8C49"/>
+    <enum name="COMPRESSED_SLUMINANCE"          value="0x8C4A"/>
+    <enum name="COMPRESSED_SLUMINANCE_ALPHA"    value="0x8C4B"/>
+
+    <function name="UniformMatrix2x3fv" offset="assign">
+        <param name="location" type="GLint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="transpose" type="GLboolean"/>
+        <param name="value" type="const GLfloat *"/>
+        <glx ignore="true"/>
+    </function>
+    <function name="UniformMatrix3x2fv" offset="assign">
+        <param name="location" type="GLint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="transpose" type="GLboolean"/>
+        <param name="value" type="const GLfloat *"/>
+        <glx ignore="true"/>
+    </function>
+    <function name="UniformMatrix2x4fv" offset="assign">
+        <param name="location" type="GLint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="transpose" type="GLboolean"/>
+        <param name="value" type="const GLfloat *"/>
+        <glx ignore="true"/>
+    </function>
+    <function name="UniformMatrix4x2fv" offset="assign">
+        <param name="location" type="GLint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="transpose" type="GLboolean"/>
+        <param name="value" type="const GLfloat *"/>
+        <glx ignore="true"/>
+    </function>
+    <function name="UniformMatrix3x4fv" offset="assign">
+        <param name="location" type="GLint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="transpose" type="GLboolean"/>
+        <param name="value" type="const GLfloat *"/>
+        <glx ignore="true"/>
+    </function>
+    <function name="UniformMatrix4x3fv" offset="assign">
+        <param name="location" type="GLint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="transpose" type="GLboolean"/>
+        <param name="value" type="const GLfloat *"/>
+        <glx ignore="true"/>
+    </function>
+
+</category>
+
+
+<!-- ARB extensions sorted by extension number. -->
+
+<category name="GL_ARB_multitexture" number="1">
+    <enum name="TEXTURE0_ARB"                             value="0x84C0"/>
+    <enum name="TEXTURE1_ARB"                             value="0x84C1"/>
+    <enum name="TEXTURE2_ARB"                             value="0x84C2"/>
+    <enum name="TEXTURE3_ARB"                             value="0x84C3"/>
+    <enum name="TEXTURE4_ARB"                             value="0x84C4"/>
+    <enum name="TEXTURE5_ARB"                             value="0x84C5"/>
+    <enum name="TEXTURE6_ARB"                             value="0x84C6"/>
+    <enum name="TEXTURE7_ARB"                             value="0x84C7"/>
+    <enum name="TEXTURE8_ARB"                             value="0x84C8"/>
+    <enum name="TEXTURE9_ARB"                             value="0x84C9"/>
+    <enum name="TEXTURE10_ARB"                            value="0x84CA"/>
+    <enum name="TEXTURE11_ARB"                            value="0x84CB"/>
+    <enum name="TEXTURE12_ARB"                            value="0x84CC"/>
+    <enum name="TEXTURE13_ARB"                            value="0x84CD"/>
+    <enum name="TEXTURE14_ARB"                            value="0x84CE"/>
+    <enum name="TEXTURE15_ARB"                            value="0x84CF"/>
+    <enum name="TEXTURE16_ARB"                            value="0x84D0"/>
+    <enum name="TEXTURE17_ARB"                            value="0x84D1"/>
+    <enum name="TEXTURE18_ARB"                            value="0x84D2"/>
+    <enum name="TEXTURE19_ARB"                            value="0x84D3"/>
+    <enum name="TEXTURE20_ARB"                            value="0x84D4"/>
+    <enum name="TEXTURE21_ARB"                            value="0x84D5"/>
+    <enum name="TEXTURE22_ARB"                            value="0x84D6"/>
+    <enum name="TEXTURE23_ARB"                            value="0x84D7"/>
+    <enum name="TEXTURE24_ARB"                            value="0x84D8"/>
+    <enum name="TEXTURE25_ARB"                            value="0x84D9"/>
+    <enum name="TEXTURE26_ARB"                            value="0x84DA"/>
+    <enum name="TEXTURE27_ARB"                            value="0x84DB"/>
+    <enum name="TEXTURE28_ARB"                            value="0x84DC"/>
+    <enum name="TEXTURE29_ARB"                            value="0x84DD"/>
+    <enum name="TEXTURE30_ARB"                            value="0x84DE"/>
+    <enum name="TEXTURE31_ARB"                            value="0x84DF"/>
+    <enum name="ACTIVE_TEXTURE_ARB"            count="1"  value="0x84E0">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="CLIENT_ACTIVE_TEXTURE_ARB"     count="1"  value="0x84E1">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAX_TEXTURE_UNITS_ARB"         count="1"  value="0x84E2">
+        <size name="Get" mode="get"/>
+    </enum>
+
+    <function name="ActiveTextureARB" offset="374">
+        <param name="texture" type="GLenum"/>
+        <glx rop="197"/>
+    </function>
+
+    <function name="ClientActiveTextureARB" offset="375">
+        <param name="texture" type="GLenum"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="MultiTexCoord1dARB" offset="376" vectorequiv="MultiTexCoord1dvARB">
+        <param name="target" type="GLenum"/>
+        <param name="s" type="GLdouble"/>
+    </function>
+
+    <function name="MultiTexCoord1dvARB" offset="377">
+        <param name="target" type="GLenum"/>
+        <param name="v" type="const GLdouble *" count="1"/>
+        <glx rop="198"/>
+    </function>
+
+    <function name="MultiTexCoord1fARB" offset="378" vectorequiv="MultiTexCoord1fvARB">
+        <param name="target" type="GLenum"/>
+        <param name="s" type="GLfloat"/>
+    </function>
+
+    <function name="MultiTexCoord1fvARB" offset="379">
+        <param name="target" type="GLenum"/>
+        <param name="v" type="const GLfloat *" count="1"/>
+        <glx rop="199"/>
+    </function>
+
+    <function name="MultiTexCoord1iARB" offset="380" vectorequiv="MultiTexCoord1ivARB">
+        <param name="target" type="GLenum"/>
+        <param name="s" type="GLint"/>
+    </function>
+
+    <function name="MultiTexCoord1ivARB" offset="381">
+        <param name="target" type="GLenum"/>
+        <param name="v" type="const GLint *" count="1"/>
+        <glx rop="200"/>
+    </function>
+
+    <function name="MultiTexCoord1sARB" offset="382" vectorequiv="MultiTexCoord1svARB">
+        <param name="target" type="GLenum"/>
+        <param name="s" type="GLshort"/>
+    </function>
+
+    <function name="MultiTexCoord1svARB" offset="383">
+        <param name="target" type="GLenum"/>
+        <param name="v" type="const GLshort *" count="1"/>
+        <glx rop="201"/>
+    </function>
+
+    <function name="MultiTexCoord2dARB" offset="384" vectorequiv="MultiTexCoord2dvARB">
+        <param name="target" type="GLenum"/>
+        <param name="s" type="GLdouble"/>
+        <param name="t" type="GLdouble"/>
+    </function>
+
+    <function name="MultiTexCoord2dvARB" offset="385">
+        <param name="target" type="GLenum"/>
+        <param name="v" type="const GLdouble *" count="2"/>
+        <glx rop="202"/>
+    </function>
+
+    <function name="MultiTexCoord2fARB" offset="386" vectorequiv="MultiTexCoord2fvARB">
+        <param name="target" type="GLenum"/>
+        <param name="s" type="GLfloat"/>
+        <param name="t" type="GLfloat"/>
+    </function>
+
+    <function name="MultiTexCoord2fvARB" offset="387">
+        <param name="target" type="GLenum"/>
+        <param name="v" type="const GLfloat *" count="2"/>
+        <glx rop="203"/>
+    </function>
+
+    <function name="MultiTexCoord2iARB" offset="388" vectorequiv="MultiTexCoord2ivARB">
+        <param name="target" type="GLenum"/>
+        <param name="s" type="GLint"/>
+        <param name="t" type="GLint"/>
+    </function>
+
+    <function name="MultiTexCoord2ivARB" offset="389">
+        <param name="target" type="GLenum"/>
+        <param name="v" type="const GLint *" count="2"/>
+        <glx rop="204"/>
+    </function>
+
+    <function name="MultiTexCoord2sARB" offset="390" vectorequiv="MultiTexCoord2svARB">
+        <param name="target" type="GLenum"/>
+        <param name="s" type="GLshort"/>
+        <param name="t" type="GLshort"/>
+    </function>
+
+    <function name="MultiTexCoord2svARB" offset="391">
+        <param name="target" type="GLenum"/>
+        <param name="v" type="const GLshort *" count="2"/>
+        <glx rop="205"/>
+    </function>
+
+    <function name="MultiTexCoord3dARB" offset="392" vectorequiv="MultiTexCoord3dvARB">
+        <param name="target" type="GLenum"/>
+        <param name="s" type="GLdouble"/>
+        <param name="t" type="GLdouble"/>
+        <param name="r" type="GLdouble"/>
+    </function>
+
+    <function name="MultiTexCoord3dvARB" offset="393">
+        <param name="target" type="GLenum"/>
+        <param name="v" type="const GLdouble *" count="3"/>
+        <glx rop="206"/>
+    </function>
+
+    <function name="MultiTexCoord3fARB" offset="394" vectorequiv="MultiTexCoord3fvARB">
+        <param name="target" type="GLenum"/>
+        <param name="s" type="GLfloat"/>
+        <param name="t" type="GLfloat"/>
+        <param name="r" type="GLfloat"/>
+    </function>
+
+    <function name="MultiTexCoord3fvARB" offset="395">
+        <param name="target" type="GLenum"/>
+        <param name="v" type="const GLfloat *" count="3"/>
+        <glx rop="207"/>
+    </function>
+
+    <function name="MultiTexCoord3iARB" offset="396" vectorequiv="MultiTexCoord3ivARB">
+        <param name="target" type="GLenum"/>
+        <param name="s" type="GLint"/>
+        <param name="t" type="GLint"/>
+        <param name="r" type="GLint"/>
+    </function>
+
+    <function name="MultiTexCoord3ivARB" offset="397">
+        <param name="target" type="GLenum"/>
+        <param name="v" type="const GLint *" count="3"/>
+        <glx rop="208"/>
+    </function>
+
+    <function name="MultiTexCoord3sARB" offset="398" vectorequiv="MultiTexCoord3svARB">
+        <param name="target" type="GLenum"/>
+        <param name="s" type="GLshort"/>
+        <param name="t" type="GLshort"/>
+        <param name="r" type="GLshort"/>
+    </function>
+
+    <function name="MultiTexCoord3svARB" offset="399">
+        <param name="target" type="GLenum"/>
+        <param name="v" type="const GLshort *" count="3"/>
+        <glx rop="209"/>
+    </function>
+
+    <function name="MultiTexCoord4dARB" offset="400" vectorequiv="MultiTexCoord4dvARB">
+        <param name="target" type="GLenum"/>
+        <param name="s" type="GLdouble"/>
+        <param name="t" type="GLdouble"/>
+        <param name="r" type="GLdouble"/>
+        <param name="q" type="GLdouble"/>
+    </function>
+
+    <function name="MultiTexCoord4dvARB" offset="401">
+        <param name="target" type="GLenum"/>
+        <param name="v" type="const GLdouble *" count="4"/>
+        <glx rop="210"/>
+    </function>
+
+    <function name="MultiTexCoord4fARB" offset="402" vectorequiv="MultiTexCoord4fvARB">
+        <param name="target" type="GLenum"/>
+        <param name="s" type="GLfloat"/>
+        <param name="t" type="GLfloat"/>
+        <param name="r" type="GLfloat"/>
+        <param name="q" type="GLfloat"/>
+    </function>
+
+    <function name="MultiTexCoord4fvARB" offset="403">
+        <param name="target" type="GLenum"/>
+        <param name="v" type="const GLfloat *" count="4"/>
+        <glx rop="211"/>
+    </function>
+
+    <function name="MultiTexCoord4iARB" offset="404" vectorequiv="MultiTexCoord4ivARB">
+        <param name="target" type="GLenum"/>
+        <param name="s" type="GLint"/>
+        <param name="t" type="GLint"/>
+        <param name="r" type="GLint"/>
+        <param name="q" type="GLint"/>
+    </function>
+
+    <function name="MultiTexCoord4ivARB" offset="405">
+        <param name="target" type="GLenum"/>
+        <param name="v" type="const GLint *" count="4"/>
+        <glx rop="212"/>
+    </function>
+
+    <function name="MultiTexCoord4sARB" offset="406" vectorequiv="MultiTexCoord4svARB">
+        <param name="target" type="GLenum"/>
+        <param name="s" type="GLshort"/>
+        <param name="t" type="GLshort"/>
+        <param name="r" type="GLshort"/>
+        <param name="q" type="GLshort"/>
+    </function>
+
+    <function name="MultiTexCoord4svARB" offset="407">
+        <param name="target" type="GLenum"/>
+        <param name="v" type="const GLshort *" count="4"/>
+        <glx rop="213"/>
+    </function>
+</category>
+
+<!-- ARB extension number 2 is a GLX extension. -->
+
+<category name="GL_ARB_transpose_matrix" number="3">
+    <enum name="TRANSPOSE_MODELVIEW_MATRIX_ARB"           value="0x84E3"/>
+    <enum name="TRANSPOSE_PROJECTION_MATRIX_ARB"          value="0x84E4"/>
+    <enum name="TRANSPOSE_TEXTURE_MATRIX_ARB"             value="0x84E5"/>
+    <enum name="TRANSPOSE_COLOR_MATRIX_ARB"               value="0x84E6"/>
+
+    <function name="LoadTransposeMatrixfARB" offset="assign">
+        <param name="m" type="const GLfloat *"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="LoadTransposeMatrixdARB" offset="assign">
+        <param name="m" type="const GLdouble *"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="MultTransposeMatrixfARB" offset="assign">
+        <param name="m" type="const GLfloat *"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="MultTransposeMatrixdARB" offset="assign">
+        <param name="m" type="const GLdouble *"/>
+        <glx handcode="true"/>
+    </function>
+</category>
+
+<!-- ARB extension number 4 is a WGL extension. -->
+
+<category name="GL_ARB_multisample" number="5">
+    <enum name="MULTISAMPLE_ARB"               count="1"  value="0x809D">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="SAMPLE_ALPHA_TO_COVERAGE_ARB"  count="1"  value="0x809E">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="SAMPLE_ALPHA_TO_ONE_ARB"       count="1"  value="0x809F">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="SAMPLE_COVERAGE_ARB"           count="1"  value="0x80A0">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="SAMPLE_BUFFERS_ARB"            count="1"  value="0x80A8">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="SAMPLES_ARB"                   count="1"  value="0x80A9">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="SAMPLE_COVERAGE_VALUE_ARB"     count="1"  value="0x80AA">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="SAMPLE_COVERAGE_INVERT_ARB"    count="1"  value="0x80AB">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MULTISAMPLE_BIT_ARB"                      value="0x20000000"/>
+
+    <function name="SampleCoverageARB" offset="assign">
+        <param name="value" type="GLclampf"/>
+        <param name="invert" type="GLboolean"/>
+        <glx rop="229"/>
+    </function>
+</category>
+
+<category name="GL_ARB_texture_env_add" number="6">
+    <!-- No new functions, types, enums. -->
+</category>
+
+<category name="GL_ARB_texture_cube_map" number="7">
+    <enum name="NORMAL_MAP_ARB"                           value="0x8511"/>
+    <enum name="REFLECTION_MAP_ARB"                       value="0x8512"/>
+    <enum name="TEXTURE_CUBE_MAP_ARB"          count="1"  value="0x8513">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_BINDING_CUBE_MAP_ARB"  count="1"  value="0x8514">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_CUBE_MAP_POSITIVE_X_ARB"          value="0x8515"/>
+    <enum name="TEXTURE_CUBE_MAP_NEGATIVE_X_ARB"          value="0x8516"/>
+    <enum name="TEXTURE_CUBE_MAP_POSITIVE_Y_ARB"          value="0x8517"/>
+    <enum name="TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB"          value="0x8518"/>
+    <enum name="TEXTURE_CUBE_MAP_POSITIVE_Z_ARB"          value="0x8519"/>
+    <enum name="TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB"          value="0x851A"/>
+    <enum name="PROXY_TEXTURE_CUBE_MAP_ARB"               value="0x851B"/>
+    <enum name="MAX_CUBE_MAP_TEXTURE_SIZE_ARB" count="1"  value="0x851C">
+        <size name="Get" mode="get"/>
+    </enum>
+</category>
+
+<!-- ARB extension number 8 is a WGL extension. -->
+<!-- ARB extension number 9 is a WGL extension. -->
+<!-- ARB extension number 10 is a WGL extension. -->
+<!-- ARB extension number 11 is a WGL extension. -->
+
+<category name="GL_ARB_texture_compression" number="12">
+    <enum name="COMPRESSED_ALPHA_ARB"                     value="0x84E9"/>
+    <enum name="COMPRESSED_LUMINANCE_ARB"                 value="0x84EA"/>
+    <enum name="COMPRESSED_LUMINANCE_ALPHA_ARB"           value="0x84EB"/>
+    <enum name="COMPRESSED_INTENSITY_ARB"                 value="0x84EC"/>
+    <enum name="COMPRESSED_RGB_ARB"                       value="0x84ED"/>
+    <enum name="COMPRESSED_RGBA_ARB"                      value="0x84EE"/>
+    <enum name="TEXTURE_COMPRESSION_HINT_ARB"  count="1"  value="0x84EF">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_COMPRESSED_IMAGE_SIZE_ARB" count="1" value="0x86A0">
+        <size name="GetTexLevelParameterfv" mode="get"/>
+        <size name="GetTexLevelParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_COMPRESSED_ARB"        count="1"  value="0x86A1">
+        <size name="GetTexLevelParameterfv" mode="get"/>
+        <size name="GetTexLevelParameteriv" mode="get"/>
+    </enum>
+    <enum name="NUM_COMPRESSED_TEXTURE_FORMATS_ARB" count="1" value="0x86A2">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_COMPRESSED_FORMATS_ARB"           value="0x86A3"/>
+
+    <function name="CompressedTexImage3DARB" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="depth" type="GLsizei"/>
+        <param name="border" type="GLint"/>
+        <param name="imageSize" type="GLsizei" counter="true"/>
+        <param name="data" type="const GLvoid *" count="imageSize"/>
+        <glx rop="216" handcode="client"/>
+    </function>
+
+    <function name="CompressedTexImage2DARB" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="border" type="GLint"/>
+        <param name="imageSize" type="GLsizei" counter="true"/>
+        <param name="data" type="const GLvoid *" count="imageSize"/>
+        <glx rop="215" handcode="client"/>
+    </function>
+
+    <function name="CompressedTexImage1DARB" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="width" type="GLsizei"/>
+        <param name="border" type="GLint"/>
+        <param name="imageSize" type="GLsizei" counter="true"/>
+        <param name="data" type="const GLvoid *" count="imageSize"/>
+        <glx rop="214" handcode="client"/>
+    </function>
+
+    <function name="CompressedTexSubImage3DARB" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="xoffset" type="GLint"/>
+        <param name="yoffset" type="GLint"/>
+        <param name="zoffset" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="depth" type="GLsizei"/>
+        <param name="format" type="GLenum"/>
+        <param name="imageSize" type="GLsizei" counter="true"/>
+        <param name="data" type="const GLvoid *" count="imageSize"/>
+        <glx rop="219" handcode="client"/>
+    </function>
+
+    <function name="CompressedTexSubImage2DARB" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="xoffset" type="GLint"/>
+        <param name="yoffset" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="format" type="GLenum"/>
+        <param name="imageSize" type="GLsizei" counter="true"/>
+        <param name="data" type="const GLvoid *" count="imageSize"/>
+        <glx rop="218" handcode="client"/>
+    </function>
+
+    <function name="CompressedTexSubImage1DARB" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="xoffset" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <param name="format" type="GLenum"/>
+        <param name="imageSize" type="GLsizei" counter="true"/>
+        <param name="data" type="const GLvoid *" count="imageSize"/>
+        <glx rop="217" handcode="client"/>
+    </function>
+
+    <function name="GetCompressedTexImageARB" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="img" type="GLvoid *" output="true"/>
+
+        <!-- This has to be hand coded because the image size is in the
+             "wrong" place.  Technically, this should be a
+             'always_array="true"' case.  The size field in the reply would
+             be at offset 12.  However, the size is actually at offset 16.
+             This is where the 'width' is in a GetTexImage reply. -->
+        <glx sop="160" handcode="true"/>
+    </function>
+</category>
+
+<category name="GL_ARB_texture_border_clamp" number="13">
+    <enum name="CLAMP_TO_BORDER_ARB"                      value="0x812D"/>
+</category>
+
+<category name="GL_ARB_point_parameters" number="14">
+    <enum name="POINT_SIZE_MIN_ARB"            count="1"  value="0x8126">
+        <size name="PointParameterfvEXT"/>
+    </enum>
+    <enum name="POINT_SIZE_MAX_ARB"            count="1"  value="0x8127">
+        <size name="PointParameterfvEXT"/>
+    </enum>
+    <enum name="POINT_FADE_THRESHOLD_SIZE_ARB" count="1"  value="0x8128">
+        <size name="PointParameterfvEXT"/>
+    </enum>
+    <enum name="POINT_DISTANCE_ATTENUATION_ARB" count="3" value="0x8129">
+        <size name="PointParameterfvEXT"/>
+    </enum>
+
+    <function name="PointParameterfARB" alias="PointParameterfEXT">
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLfloat"/>
+        <glx rop="2065"/>
+    </function>
+
+    <function name="PointParameterfvARB" alias="PointParameterfvEXT">
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLfloat *" variable_param="pname"/>
+        <glx rop="2066"/>
+    </function>
+</category>
+
+<category name="GL_ARB_vertex_blend" number="15">
+    <enum name="MAX_VERTEX_UNITS_ARB"          count="1"  value="0x86A4">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="ACTIVE_VERTEX_UNITS_ARB"       count="1"  value="0x86A5">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="WEIGHT_SUM_UNITY_ARB"          count="1"  value="0x86A6">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="VERTEX_BLEND_ARB"              count="1"  value="0x86A7">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="CURRENT_WEIGHT_ARB"            count="1"  value="0x86A8">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="WEIGHT_ARRAY_TYPE_ARB"         count="1"  value="0x86A9">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="WEIGHT_ARRAY_STRIDE_ARB"       count="1"  value="0x86AA">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="WEIGHT_ARRAY_SIZE_ARB"         count="1"  value="0x86AB">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="WEIGHT_ARRAY_POINTER_ARB"                 value="0x86AC"/>
+    <enum name="WEIGHT_ARRAY_ARB"              count="1"  value="0x86AD">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW0_ARB"                count="16" value="0x1700">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW1_ARB"                count="16" value="0x850A">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW2_ARB"                count="16" value="0x8722">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW3_ARB"                count="16" value="0x8723">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW4_ARB"                count="16" value="0x8724">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW5_ARB"                count="16" value="0x8725">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW6_ARB"                count="16" value="0x8726">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW7_ARB"                count="16" value="0x8727">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW8_ARB"                count="16" value="0x8728">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW9_ARB"                count="16" value="0x8729">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW10_ARB"               count="16" value="0x872A">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW11_ARB"               count="16" value="0x872B">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW12_ARB"               count="16" value="0x872C">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW13_ARB"               count="16" value="0x872D">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW14_ARB"               count="16" value="0x872E">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW15_ARB"               count="16" value="0x872F">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW16_ARB"               count="16" value="0x8730">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW17_ARB"               count="16" value="0x8731">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW18_ARB"               count="16" value="0x8732">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW19_ARB"               count="16" value="0x8733">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW20_ARB"               count="16" value="0x8734">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW21_ARB"               count="16" value="0x8735">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW22_ARB"               count="16" value="0x8736">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW23_ARB"               count="16" value="0x8737">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW24_ARB"               count="16" value="0x8738">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW25_ARB"               count="16" value="0x8739">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW26_ARB"               count="16" value="0x873A">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW27_ARB"               count="16" value="0x873B">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW28_ARB"               count="16" value="0x873C">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW29_ARB"               count="16" value="0x873D">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW30_ARB"               count="16" value="0x873E">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MODELVIEW31_ARB"               count="16" value="0x873F">
+        <size name="Get" mode="get"/>
+    </enum>
+
+    <function name="WeightbvARB">
+        <param name="size" type="GLint"/>
+        <param name="weights" type="const GLbyte *"/>
+    </function>
+
+    <function name="WeightsvARB">
+        <param name="size" type="GLint"/>
+        <param name="weights" type="const GLshort *"/>
+    </function>
+
+    <function name="WeightivARB">
+        <param name="size" type="GLint"/>
+        <param name="weights" type="const GLint *"/>
+    </function>
+
+    <function name="WeightfvARB">
+        <param name="size" type="GLint"/>
+        <param name="weights" type="const GLfloat *"/>
+    </function>
+
+    <function name="WeightdvARB">
+        <param name="size" type="GLint"/>
+        <param name="weights" type="const GLdouble *"/>
+    </function>
+
+    <function name="WeightubvARB">
+        <param name="size" type="GLint"/>
+        <param name="weights" type="const GLubyte *"/>
+    </function>
+
+    <function name="WeightusvARB">
+        <param name="size" type="GLint"/>
+        <param name="weights" type="const GLushort *"/>
+    </function>
+
+    <function name="WeightuivARB">
+        <param name="size" type="GLint"/>
+        <param name="weights" type="const GLuint *"/>
+    </function>
+
+    <function name="WeightPointerARB">
+        <param name="size" type="GLint"/>
+        <param name="type" type="GLenum"/>
+        <param name="stride" type="GLsizei"/>
+        <param name="pointer" type="const GLvoid *"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="VertexBlendARB">
+        <param name="count" type="GLint"/>
+    </function>
+</category>
+
+<category name="GL_ARB_matrix_palette" number="16">
+    <enum name="MATRIX_PALETTE_ARB"            count="1"  value="0x8840">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAX_MATRIX_PALETTE_STACK_DEPTH_ARB" count="1" value="0x8841">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAX_PALETTE_MATRICES_ARB"      count="1"  value="0x8842">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="CURRENT_PALETTE_MATRIX_ARB"    count="1"  value="0x8843">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MATRIX_INDEX_ARRAY_ARB"        count="1"  value="0x8844">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="CURRENT_MATRIX_INDEX_ARB"      count="1"  value="0x8845">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MATRIX_INDEX_ARRAY_SIZE_ARB"   count="1"  value="0x8846">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MATRIX_INDEX_ARRAY_TYPE_ARB"   count="1"  value="0x8847">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MATRIX_INDEX_ARRAY_STRIDE_ARB" count="1"  value="0x8848">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MATRIX_INDEX_ARRAY_POINTER_ARB"           value="0x8849"/>
+
+    <function name="CurrentPaletteMatrixARB">
+        <param name="index" type="GLint"/>
+        <glx ignore="true" rop="4329"/>
+    </function>
+
+    <function name="MatrixIndexubvARB">
+        <param name="size" type="GLint" counter="true"/>
+        <param name="indices" type="const GLubyte *" count="size"/>
+        <glx ignore="true" rop="4326"/>
+    </function>
+
+    <function name="MatrixIndexusvARB">
+        <param name="size" type="GLint" counter="true"/>
+        <param name="indices" type="const GLushort *" count="size"/>
+        <glx ignore="true" rop="4327"/>
+    </function>
+
+    <function name="MatrixIndexuivARB">
+        <param name="size" type="GLint" counter="true"/>
+        <param name="indices" type="const GLuint *" count="size"/>
+        <glx ignore="true" rop="4328"/>
+    </function>
+
+    <function name="MatrixIndexPointerARB">
+        <param name="size" type="GLint"/>
+        <param name="type" type="GLenum"/>
+        <param name="stride" type="GLsizei"/>
+        <param name="pointer" type="const GLvoid *"/>
+        <glx handcode="true"/>
+    </function>
+</category>
+
+<category name="GL_ARB_texture_env_combine" number="17">
+    <enum name="COMBINE_ARB"                              value="0x8570"/>
+    <enum name="COMBINE_RGB_ARB"                          value="0x8571"/>
+    <enum name="COMBINE_ALPHA_ARB"                        value="0x8572"/>
+    <enum name="SOURCE0_RGB_ARB"                          value="0x8580"/>
+    <enum name="SOURCE1_RGB_ARB"                          value="0x8581"/>
+    <enum name="SOURCE2_RGB_ARB"                          value="0x8582"/>
+    <enum name="SOURCE0_ALPHA_ARB"                        value="0x8588"/>
+    <enum name="SOURCE1_ALPHA_ARB"                        value="0x8589"/>
+    <enum name="SOURCE2_ALPHA_ARB"                        value="0x858A"/>
+    <enum name="OPERAND0_RGB_ARB"                         value="0x8590"/>
+    <enum name="OPERAND1_RGB_ARB"                         value="0x8591"/>
+    <enum name="OPERAND2_RGB_ARB"                         value="0x8592"/>
+    <enum name="OPERAND0_ALPHA_ARB"                       value="0x8598"/>
+    <enum name="OPERAND1_ALPHA_ARB"                       value="0x8599"/>
+    <enum name="OPERAND2_ALPHA_ARB"                       value="0x859A"/>
+    <enum name="RGB_SCALE_ARB"                            value="0x8573"/>
+    <enum name="ADD_SIGNED_ARB"                           value="0x8574"/>
+    <enum name="INTERPOLATE_ARB"                          value="0x8575"/>
+    <enum name="SUBTRACT_ARB"                             value="0x84E7"/>
+    <enum name="CONSTANT_ARB"                             value="0x8576"/>
+    <enum name="PRIMARY_COLOR_ARB"                        value="0x8577"/>
+    <enum name="PREVIOUS_ARB"                             value="0x8578"/>
+</category>
+
+<category name="GL_ARB_texture_env_crossbar" number="18">
+    <!-- No new functions, types, enums. -->
+</category>
+
+<category name="GL_ARB_texture_env_dot3" number="19">
+    <enum name="DOT3_RGB_ARB"                             value="0x86AE"/>
+    <enum name="DOT3_RGBA_ARB"                            value="0x86AF"/>
+</category>
+
+<!-- ARB extension number 20 is a WGL extension. -->
+
+<category name="GL_ARB_texture_mirrored_repeat" number="21">
+    <enum name="MIRRORED_REPEAT_ARB"                      value="0x8370"/>
+</category>
+
+<category name="GL_ARB_depth_texture" number="22">
+    <enum name="DEPTH_COMPONENT16_ARB"                    value="0x81A5"/>
+    <enum name="DEPTH_COMPONENT24_ARB"                    value="0x81A6"/>
+    <enum name="DEPTH_COMPONENT32_ARB"                    value="0x81A7"/>
+    <enum name="TEXTURE_DEPTH_SIZE_ARB"        count="1"  value="0x884A">
+        <size name="GetTexLevelParameterfv" mode="get"/>
+        <size name="GetTexLevelParameteriv" mode="get"/>
+    </enum>
+    <enum name="DEPTH_TEXTURE_MODE_ARB"        count="1"  value="0x884B">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+</category>
+
+<category name="GL_ARB_shadow" number="23">
+    <enum name="TEXTURE_COMPARE_MODE_ARB"      count="1"  value="0x884C">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_COMPARE_FUNC_ARB"      count="1"  value="0x884D">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+    <enum name="COMPARE_R_TO_TEXTURE_ARB"                 value="0x884E"/>
+</category>
+
+<category name="GL_ARB_shadow_ambient" number="24">
+    <enum name="TEXTURE_COMPARE_FAIL_VALUE_ARB" count="1" value="0x80BF">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+</category>
+
+<category name="GL_ARB_window_pos" number="25">
+    <function name="WindowPos2dARB" alias="WindowPos2dMESA">
+        <param name="x" type="GLdouble"/>
+        <param name="y" type="GLdouble"/>
+    </function>
+
+    <function name="WindowPos2fARB" alias="WindowPos2fMESA">
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+    </function>
+
+    <function name="WindowPos2iARB" alias="WindowPos2iMESA">
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+    </function>
+
+    <function name="WindowPos2sARB" alias="WindowPos2sMESA">
+        <param name="x" type="GLshort"/>
+        <param name="y" type="GLshort"/>
+    </function>
+
+    <function name="WindowPos2dvARB" alias="WindowPos2dvMESA">
+        <param name="v" type="const GLdouble *"/>
+    </function>
+
+    <function name="WindowPos2fvARB" alias="WindowPos2fvMESA">
+        <param name="v" type="const GLfloat *"/>
+    </function>
+
+    <function name="WindowPos2ivARB" alias="WindowPos2ivMESA">
+        <param name="v" type="const GLint *"/>
+    </function>
+
+    <function name="WindowPos2svARB" alias="WindowPos2svMESA">
+        <param name="v" type="const GLshort *"/>
+    </function>
+
+    <function name="WindowPos3dARB" alias="WindowPos3dMESA">
+        <param name="x" type="GLdouble"/>
+        <param name="y" type="GLdouble"/>
+        <param name="z" type="GLdouble"/>
+    </function>
+
+    <function name="WindowPos3fARB" alias="WindowPos3fMESA">
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+    </function>
+
+    <function name="WindowPos3iARB" alias="WindowPos3iMESA">
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+        <param name="z" type="GLint"/>
+    </function>
+
+    <function name="WindowPos3sARB" alias="WindowPos3sMESA">
+        <param name="x" type="GLshort"/>
+        <param name="y" type="GLshort"/>
+        <param name="z" type="GLshort"/>
+    </function>
+
+    <function name="WindowPos3dvARB" alias="WindowPos3dvMESA">
+        <param name="v" type="const GLdouble *"/>
+    </function>
+
+    <function name="WindowPos3fvARB" alias="WindowPos3fvMESA">
+        <param name="v" type="const GLfloat *"/>
+    </function>
+
+    <function name="WindowPos3ivARB" alias="WindowPos3ivMESA">
+        <param name="v" type="const GLint *"/>
+    </function>
+
+    <function name="WindowPos3svARB" alias="WindowPos3svMESA">
+        <param name="v" type="const GLshort *"/>
+    </function>
+</category>
+
+<category name="GL_ARB_vertex_program" number="26">
+    <enum name="COLOR_SUM_ARB"                 count="1"  value="0x8458">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="VERTEX_PROGRAM_ARB"            count="1"  value="0x8620">
+        <size name="GetVertexAttribdvARB" mode="get"/>
+        <size name="GetVertexAttribfvARB" mode="get"/>
+        <size name="GetVertexAttribivARB" mode="get"/>
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="VERTEX_ATTRIB_ARRAY_ENABLED_ARB" count="1" value="0x8622">
+        <size name="GetVertexAttribdvARB" mode="get"/>
+        <size name="GetVertexAttribfvARB" mode="get"/>
+        <size name="GetVertexAttribivARB" mode="get"/>
+    </enum>
+    <enum name="VERTEX_ATTRIB_ARRAY_SIZE_ARB"  count="1"  value="0x8623">
+        <size name="GetVertexAttribdvARB" mode="get"/>
+        <size name="GetVertexAttribfvARB" mode="get"/>
+        <size name="GetVertexAttribivARB" mode="get"/>
+    </enum>
+    <enum name="VERTEX_ATTRIB_ARRAY_STRIDE_ARB" count="1" value="0x8624">
+        <size name="GetVertexAttribdvARB" mode="get"/>
+        <size name="GetVertexAttribfvARB" mode="get"/>
+        <size name="GetVertexAttribivARB" mode="get"/>
+    </enum>
+    <enum name="VERTEX_ATTRIB_ARRAY_TYPE_ARB"  count="1"  value="0x8625">
+        <size name="GetVertexAttribdvARB" mode="get"/>
+        <size name="GetVertexAttribfvARB" mode="get"/>
+        <size name="GetVertexAttribivARB" mode="get"/>
+    </enum>
+    <enum name="CURRENT_VERTEX_ATTRIB_ARB"     count="1"  value="0x8626">
+        <size name="GetVertexAttribdvARB" mode="get"/>
+        <size name="GetVertexAttribfvARB" mode="get"/>
+        <size name="GetVertexAttribivARB" mode="get"/>
+    </enum>
+    <enum name="PROGRAM_LENGTH_ARB"            count="1"  value="0x8627">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="PROGRAM_STRING_ARB"                       value="0x8628"/>
+    <enum name="MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB" count="1" value="0x862E">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAX_PROGRAM_MATRICES_ARB"      count="1"  value="0x862F">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="CURRENT_MATRIX_STACK_DEPTH_ARB" count="1" value="0x8640">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="CURRENT_MATRIX_ARB"            count="16" value="0x8641">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="VERTEX_PROGRAM_POINT_SIZE_ARB" count="1"  value="0x8642">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="VERTEX_PROGRAM_TWO_SIDE_ARB"   count="1"  value="0x8643">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="VERTEX_ATTRIB_ARRAY_POINTER_ARB"          value="0x8645"/>
+    <enum name="PROGRAM_ERROR_POSITION_ARB"    count="1"  value="0x864B">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="PROGRAM_BINDING_ARB"           count="1"  value="0x8677">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="MAX_VERTEX_ATTRIBS_ARB"        count="1"  value="0x8869">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB"       value="0x886A"/>
+    <enum name="PROGRAM_ERROR_STRING_ARB"                 value="0x8874"/>
+    <enum name="PROGRAM_FORMAT_ASCII_ARB"                 value="0x8875"/>
+    <enum name="PROGRAM_FORMAT_ARB"            count="1"  value="0x8876">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="PROGRAM_INSTRUCTIONS_ARB"      count="1"  value="0x88A0">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="MAX_PROGRAM_INSTRUCTIONS_ARB"  count="1"  value="0x88A1">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="PROGRAM_NATIVE_INSTRUCTIONS_ARB" count="1" value="0x88A2">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB" count="1" value="0x88A3">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="PROGRAM_TEMPORARIES_ARB"       count="1"  value="0x88A4">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="MAX_PROGRAM_TEMPORARIES_ARB"   count="1"  value="0x88A5">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="PROGRAM_NATIVE_TEMPORARIES_ARB" count="1" value="0x88A6">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="MAX_PROGRAM_NATIVE_TEMPORARIES_ARB" count="1" value="0x88A7">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="PROGRAM_PARAMETERS_ARB"        count="1"  value="0x88A8">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="MAX_PROGRAM_PARAMETERS_ARB"    count="1"  value="0x88A9">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="PROGRAM_NATIVE_PARAMETERS_ARB" count="1"  value="0x88AA">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="MAX_PROGRAM_NATIVE_PARAMETERS_ARB" count="1" value="0x88AB">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="PROGRAM_ATTRIBS_ARB"           count="1"  value="0x88AC">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="MAX_PROGRAM_ATTRIBS_ARB"       count="1"  value="0x88AD">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="PROGRAM_NATIVE_ATTRIBS_ARB"    count="1"  value="0x88AE">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="MAX_PROGRAM_NATIVE_ATTRIBS_ARB" count="1" value="0x88AF">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="PROGRAM_ADDRESS_REGISTERS_ARB" count="1"  value="0x88B0">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="MAX_PROGRAM_ADDRESS_REGISTERS_ARB" count="1" value="0x88B1">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB" count="1" value="0x88B2">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB" count="1" value="0x88B3">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="MAX_PROGRAM_LOCAL_PARAMETERS_ARB" count="1" value="0x88B4">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="MAX_PROGRAM_ENV_PARAMETERS_ARB" count="1" value="0x88B5">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="PROGRAM_UNDER_NATIVE_LIMITS_ARB" count="1" value="0x88B6">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="TRANSPOSE_CURRENT_MATRIX_ARB"  count="16" value="0x88B7">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MATRIX0_ARB"                              value="0x88C0"/>
+    <enum name="MATRIX1_ARB"                              value="0x88C1"/>
+    <enum name="MATRIX2_ARB"                              value="0x88C2"/>
+    <enum name="MATRIX3_ARB"                              value="0x88C3"/>
+    <enum name="MATRIX4_ARB"                              value="0x88C4"/>
+    <enum name="MATRIX5_ARB"                              value="0x88C5"/>
+    <enum name="MATRIX6_ARB"                              value="0x88C6"/>
+    <enum name="MATRIX7_ARB"                              value="0x88C7"/>
+    <enum name="MATRIX8_ARB"                              value="0x88C8"/>
+    <enum name="MATRIX9_ARB"                              value="0x88C9"/>
+    <enum name="MATRIX10_ARB"                             value="0x88CA"/>
+    <enum name="MATRIX11_ARB"                             value="0x88CB"/>
+    <enum name="MATRIX12_ARB"                             value="0x88CC"/>
+    <enum name="MATRIX13_ARB"                             value="0x88CD"/>
+    <enum name="MATRIX14_ARB"                             value="0x88CE"/>
+    <enum name="MATRIX15_ARB"                             value="0x88CF"/>
+    <enum name="MATRIX16_ARB"                             value="0x88D0"/>
+    <enum name="MATRIX17_ARB"                             value="0x88D1"/>
+    <enum name="MATRIX18_ARB"                             value="0x88D2"/>
+    <enum name="MATRIX19_ARB"                             value="0x88D3"/>
+    <enum name="MATRIX20_ARB"                             value="0x88D4"/>
+    <enum name="MATRIX21_ARB"                             value="0x88D5"/>
+    <enum name="MATRIX22_ARB"                             value="0x88D6"/>
+    <enum name="MATRIX23_ARB"                             value="0x88D7"/>
+    <enum name="MATRIX24_ARB"                             value="0x88D8"/>
+    <enum name="MATRIX25_ARB"                             value="0x88D9"/>
+    <enum name="MATRIX26_ARB"                             value="0x88DA"/>
+    <enum name="MATRIX27_ARB"                             value="0x88DB"/>
+    <enum name="MATRIX28_ARB"                             value="0x88DC"/>
+    <enum name="MATRIX29_ARB"                             value="0x88DD"/>
+    <enum name="MATRIX30_ARB"                             value="0x88DE"/>
+    <enum name="MATRIX31_ARB"                             value="0x88DF"/>
+
+    <function name="GetVertexAttribdvARB" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLdouble *" output="true" variable_param="pname"/>
+        <glx handcode="client" vendorpriv="1301"/>
+    </function>
+
+    <function name="GetVertexAttribfvARB" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
+        <glx handcode="client" vendorpriv="1302"/>
+    </function>
+
+    <function name="GetVertexAttribivARB" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true" variable_param="pname"/>
+        <glx handcode="client" vendorpriv="1303"/>
+    </function>
+
+    <function name="VertexAttrib1dARB" offset="assign" vectorequiv="VertexAttrib1dvARB">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLdouble"/>
+    </function>
+
+    <function name="VertexAttrib1dvARB" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLdouble *" count="1"/>
+        <glx rop="4197" doubles_in_order="true"/>
+    </function>
+
+    <function name="VertexAttrib1fARB" offset="assign" vectorequiv="VertexAttrib1fvARB">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLfloat"/>
+    </function>
+
+    <function name="VertexAttrib1fvARB" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLfloat *" count="1"/>
+        <glx rop="4193"/>
+    </function>
+
+    <function name="VertexAttrib1sARB" offset="assign" vectorequiv="VertexAttrib1svARB">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLshort"/>
+    </function>
+
+    <function name="VertexAttrib1svARB" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLshort *" count="1"/>
+        <glx rop="4189"/>
+    </function>
+
+    <function name="VertexAttrib2dARB" offset="assign" vectorequiv="VertexAttrib2dvARB">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLdouble"/>
+        <param name="y" type="GLdouble"/>
+    </function>
+
+    <function name="VertexAttrib2dvARB" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLdouble *" count="2"/>
+        <glx rop="4198" doubles_in_order="true"/>
+    </function>
+
+    <function name="VertexAttrib2fARB" offset="assign" vectorequiv="VertexAttrib2fvARB">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+    </function>
+
+    <function name="VertexAttrib2fvARB" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLfloat *" count="2"/>
+        <glx rop="4194"/>
+    </function>
+
+    <function name="VertexAttrib2sARB" offset="assign" vectorequiv="VertexAttrib2svARB">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLshort"/>
+        <param name="y" type="GLshort"/>
+    </function>
+
+    <function name="VertexAttrib2svARB" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLshort *" count="2"/>
+        <glx rop="4190"/>
+    </function>
+
+    <function name="VertexAttrib3dARB" offset="assign" vectorequiv="VertexAttrib3dvARB">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLdouble"/>
+        <param name="y" type="GLdouble"/>
+        <param name="z" type="GLdouble"/>
+    </function>
+
+    <function name="VertexAttrib3dvARB" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLdouble *" count="3"/>
+        <glx rop="4199" doubles_in_order="true"/>
+    </function>
+
+    <function name="VertexAttrib3fARB" offset="assign" vectorequiv="VertexAttrib3fvARB">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+    </function>
+
+    <function name="VertexAttrib3fvARB" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLfloat *" count="3"/>
+        <glx rop="4195"/>
+    </function>
+
+    <function name="VertexAttrib3sARB" offset="assign" vectorequiv="VertexAttrib3svARB">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLshort"/>
+        <param name="y" type="GLshort"/>
+        <param name="z" type="GLshort"/>
+    </function>
+
+    <function name="VertexAttrib3svARB" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLshort *" count="3"/>
+        <glx rop="4191"/>
+    </function>
+
+    <function name="VertexAttrib4dARB" offset="assign" vectorequiv="VertexAttrib4dvARB">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLdouble"/>
+        <param name="y" type="GLdouble"/>
+        <param name="z" type="GLdouble"/>
+        <param name="w" type="GLdouble"/>
+    </function>
+
+    <function name="VertexAttrib4dvARB" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLdouble *" count="4"/>
+        <glx rop="4200" doubles_in_order="true"/>
+    </function>
+
+    <function name="VertexAttrib4fARB" offset="assign" vectorequiv="VertexAttrib4fvARB">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+        <param name="w" type="GLfloat"/>
+    </function>
+
+    <function name="VertexAttrib4fvARB" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLfloat *" count="4"/>
+        <glx rop="4196"/>
+    </function>
+
+    <function name="VertexAttrib4sARB" offset="assign" vectorequiv="VertexAttrib4svARB">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLshort"/>
+        <param name="y" type="GLshort"/>
+        <param name="z" type="GLshort"/>
+        <param name="w" type="GLshort"/>
+    </function>
+
+    <function name="VertexAttrib4svARB" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLshort *" count="4"/>
+        <glx rop="4192"/>
+    </function>
+
+    <function name="VertexAttrib4NubARB" offset="assign" vectorequiv="VertexAttrib4NubvARB">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLubyte"/>
+        <param name="y" type="GLubyte"/>
+        <param name="z" type="GLubyte"/>
+        <param name="w" type="GLubyte"/>
+    </function>
+
+    <function name="VertexAttrib4NubvARB" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLubyte *" count="4"/>
+        <glx rop="4201"/>
+    </function>
+
+    <function name="VertexAttrib4bvARB" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLbyte *" count="4"/>
+        <glx rop="4230"/>
+    </function>
+
+    <function name="VertexAttrib4ivARB" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLint *" count="4"/>
+        <glx rop="4231"/>
+    </function>
+
+    <function name="VertexAttrib4ubvARB" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLubyte *" count="4"/>
+        <glx rop="4232"/>
+    </function>
+
+    <function name="VertexAttrib4usvARB" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLushort *" count="4"/>
+        <glx rop="4233"/>
+    </function>
+
+    <function name="VertexAttrib4uivARB" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLuint *" count="4"/>
+        <glx rop="4234"/>
+    </function>
+
+    <function name="VertexAttrib4NbvARB" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLbyte *" count="4"/>
+        <glx rop="4235"/>
+    </function>
+
+    <function name="VertexAttrib4NsvARB" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLshort *" count="4"/>
+        <glx rop="4236"/>
+    </function>
+
+    <function name="VertexAttrib4NivARB" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLint *" count="4"/>
+        <glx rop="4237"/>
+    </function>
+
+    <function name="VertexAttrib4NusvARB" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLushort *" count="4"/>
+        <glx rop="4238"/>
+    </function>
+
+    <function name="VertexAttrib4NuivARB" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLuint *" count="4"/>
+        <glx rop="4239"/>
+    </function>
+
+    <function name="VertexAttribPointerARB" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="size" type="GLint"/>
+        <param name="type" type="GLenum"/>
+        <param name="normalized" type="GLboolean"/>
+        <param name="stride" type="GLsizei"/>
+        <param name="pointer" type="const GLvoid *"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="EnableVertexAttribArrayARB" offset="assign">
+        <param name="index" type="GLuint"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="DisableVertexAttribArrayARB" offset="assign">
+        <param name="index" type="GLuint"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="ProgramStringARB" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="format" type="GLenum"/>
+        <param name="len" type="GLsizei" counter="true"/>
+        <param name="string" type="const GLvoid *" count="len"/>
+        <glx rop="4217" large="true"/>
+    </function>
+
+    <function name="BindProgramARB" alias="BindProgramNV">
+        <param name="target" type="GLenum"/>
+        <param name="program" type="GLuint"/>
+    </function>
+
+    <function name="DeleteProgramsARB" alias="DeleteProgramsNV">
+        <param name="n" type="GLsizei"/>
+        <param name="programs" type="const GLuint *"/>
+    </function>
+
+    <function name="GenProgramsARB" alias="GenProgramsNV">
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="programs" type="GLuint *" output="true" count="n"/>
+    </function>
+
+    <function name="IsProgramARB" alias="IsProgramNV">
+        <param name="program" type="GLuint"/>
+        <return type="GLboolean"/>
+    </function>
+
+    <function name="ProgramEnvParameter4dARB" offset="assign" vectorequiv="ProgramEnvParameter4dvARB">
+        <param name="target" type="GLenum"/>
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLdouble"/>
+        <param name="y" type="GLdouble"/>
+        <param name="z" type="GLdouble"/>
+        <param name="w" type="GLdouble"/>
+    </function>
+
+    <function name="ProgramEnvParameter4dvARB" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="index" type="GLuint"/>
+        <param name="params" type="const GLdouble *" count="4"/>
+        <glx rop="4185" doubles_in_order="true"/>
+    </function>
+
+    <function name="ProgramEnvParameter4fARB" offset="assign" vectorequiv="ProgramEnvParameter4fvARB">
+        <param name="target" type="GLenum"/>
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+        <param name="w" type="GLfloat"/>
+    </function>
+
+    <function name="ProgramEnvParameter4fvARB" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="index" type="GLuint"/>
+        <param name="params" type="const GLfloat *" count="4"/>
+        <glx rop="4184"/>
+    </function>
+
+    <function name="ProgramLocalParameter4dARB" offset="assign" vectorequiv="ProgramLocalParameter4dvARB">
+        <param name="target" type="GLenum"/>
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLdouble"/>
+        <param name="y" type="GLdouble"/>
+        <param name="z" type="GLdouble"/>
+        <param name="w" type="GLdouble"/>
+    </function>
+
+    <function name="ProgramLocalParameter4dvARB" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="index" type="GLuint"/>
+        <param name="params" type="const GLdouble *" count="4"/>
+        <glx rop="4216" doubles_in_order="true"/>
+    </function>
+
+    <function name="ProgramLocalParameter4fARB" offset="assign" vectorequiv="ProgramLocalParameter4fvARB">
+        <param name="target" type="GLenum"/>
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+        <param name="w" type="GLfloat"/>
+    </function>
+
+    <function name="ProgramLocalParameter4fvARB" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="index" type="GLuint"/>
+        <param name="params" type="const GLfloat *" count="4"/>
+        <glx rop="4215"/>
+    </function>
+
+    <!-- The GetProgramEnvParameter[df]vARB are handcoded because there
+         is an extra CARD32 of padding after the "index" field.  Originally,
+         GetProgranEnvParameter[df]vARB and GetProgramParameter[df]vNV
+         shared the same GLX protocol.  The pad field was where the pname
+         parameter was in the NV functions.  When this error was discovered
+         and fixed, there was already at least one implementation of
+         GLX protocol for ARB_vertex_program, but there were no
+         implementations of NV_vertex_program.  The sollution was to renumber
+         the opcodes for NV_vertex_program and convert the unused field in
+         the ARB_vertex_program protocol to unused padding.
+      -->
+
+    <function name="GetProgramEnvParameterdvARB" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="index" type="GLuint"/>
+        <param name="params" type="GLdouble *" output="true" count="4"/>
+        <glx vendorpriv="1297" handcode="client" doubles_in_order="true"/>
+    </function>
+
+    <function name="GetProgramEnvParameterfvARB" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="index" type="GLuint"/>
+        <param name="params" type="GLfloat *" output="true" count="4"/>
+        <glx vendorpriv="1296" handcode="client"/>
+    </function>
+
+    <function name="GetProgramLocalParameterdvARB" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="index" type="GLuint"/>
+        <param name="params" type="GLdouble *" output="true" count="4"/>
+        <glx vendorpriv="1306" handcode="client" doubles_in_order="true"/>
+    </function>
+
+    <function name="GetProgramLocalParameterfvARB" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="index" type="GLuint"/>
+        <param name="params" type="GLfloat *" output="true" count="4"/>
+        <glx vendorpriv="1305" handcode="client"/>
+    </function>
+
+
+    <function name="GetProgramivARB" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true" variable_param="pname"/>
+        <glx vendorpriv="1307"/>
+    </function>
+
+    <function name="GetProgramStringARB" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="string" type="GLvoid *" output="true"/>
+        <glx vendorpriv="1308" handcode="server" always_array="true"/>
+    </function>
+
+    <function name="GetVertexAttribPointervARB" alias="GetVertexAttribPointervNV">
+        <param name="index" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="pointer" type="GLvoid **" output="true"/>
+    </function>
+</category>
+
+<category name="GL_ARB_fragment_program" number="27">
+    <enum name="FRAGMENT_PROGRAM_ARB"          count="1"  value="0x8804">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="PROGRAM_ALU_INSTRUCTIONS_ARB"  count="1"  value="0x8805">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="PROGRAM_TEX_INSTRUCTIONS_ARB"  count="1"  value="0x8806">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="PROGRAM_TEX_INDIRECTIONS_ARB"  count="1"  value="0x8807">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB" count="1" value="0x8808">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB" count="1" value="0x8809">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB" count="1" value="0x880A">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="MAX_PROGRAM_ALU_INSTRUCTIONS_ARB" count="1" value="0x880B">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="MAX_PROGRAM_TEX_INSTRUCTIONS_ARB" count="1" value="0x880C">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="MAX_PROGRAM_TEX_INDIRECTIONS_ARB" count="1" value="0x880D">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB" count="1" value="0x880E">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB" count="1" value="0x880F">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB" count="1" value="0x8810">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="MAX_TEXTURE_COORDS_ARB"        count="1"  value="0x8871">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAX_TEXTURE_IMAGE_UNITS_ARB"   count="1"  value="0x8872">
+        <size name="Get" mode="get"/>
+    </enum>
+</category>
+
+<category name="GL_ARB_vertex_buffer_object" number="28">
+    <enum name="BUFFER_SIZE_ARB"               count="1"  value="0x8764">
+        <size name="GetBufferParameterivARB" mode="get"/>
+    </enum>
+    <enum name="BUFFER_USAGE_ARB"              count="1"  value="0x8765">
+        <size name="GetBufferParameterivARB" mode="get"/>
+    </enum>
+    <enum name="ARRAY_BUFFER_BINDING_ARB"      count="1"  value="0x8894">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="ELEMENT_ARRAY_BUFFER_BINDING_ARB" count="1" value="0x8895">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="VERTEX_ARRAY_BUFFER_BINDING_ARB" count="1" value="0x8896">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="NORMAL_ARRAY_BUFFER_BINDING_ARB" count="1" value="0x8897">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="COLOR_ARRAY_BUFFER_BINDING_ARB" count="1" value="0x8898">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="INDEX_ARRAY_BUFFER_BINDING_ARB" count="1" value="0x8899">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB" count="1" value="0x889A">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB" count="1" value="0x889B">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB" count="1" value="0x889C">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB" count="1" value="0x889D">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="WEIGHT_ARRAY_BUFFER_BINDING_ARB" count="1" value="0x889E">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB" count="1" value="0x889F">
+        <size name="GetVertexAttribdvARB" mode="get"/>
+        <size name="GetVertexAttribfvARB" mode="get"/>
+        <size name="GetVertexAttribivARB" mode="get"/>
+    </enum>
+    <enum name="READ_ONLY_ARB"                            value="0x88B8"/>
+    <enum name="WRITE_ONLY_ARB"                           value="0x88B9"/>
+    <enum name="READ_WRITE_ARB"                           value="0x88BA"/>
+    <enum name="BUFFER_ACCESS_ARB"             count="1"  value="0x88BB">
+        <size name="GetBufferParameterivARB" mode="get"/>
+    </enum>
+    <enum name="BUFFER_MAPPED_ARB"             count="1"  value="0x88BC">
+        <size name="GetBufferParameterivARB" mode="get"/>
+    </enum>
+    <enum name="BUFFER_MAP_POINTER_ARB"                   value="0x88BD"/>
+    <enum name="STREAM_DRAW_ARB"                          value="0x88E0"/>
+    <enum name="STREAM_READ_ARB"                          value="0x88E1"/>
+    <enum name="STREAM_COPY_ARB"                          value="0x88E2"/>
+    <enum name="STATIC_DRAW_ARB"                          value="0x88E4"/>
+    <enum name="STATIC_READ_ARB"                          value="0x88E5"/>
+    <enum name="STATIC_COPY_ARB"                          value="0x88E6"/>
+    <enum name="DYNAMIC_DRAW_ARB"                         value="0x88E8"/>
+    <enum name="DYNAMIC_READ_ARB"                         value="0x88E9"/>
+    <enum name="DYNAMIC_COPY_ARB"                         value="0x88EA"/>
+
+    <type name="intptrARB"   size="4"                  glx_name="CARD32"/>
+    <type name="sizeiptrARB" size="4"  unsigned="true" glx_name="CARD32"/>
+
+    <function name="BindBufferARB" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="buffer" type="GLuint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="BufferDataARB" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="size" type="GLsizeiptrARB" counter="true"/>
+        <param name="data" type="const GLvoid *" count="size" img_null_flag="true"/>
+        <param name="usage" type="GLenum"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="BufferSubDataARB" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="offset" type="GLintptrARB"/>
+        <param name="size" type="GLsizeiptrARB" counter="true"/>
+        <param name="data" type="const GLvoid *" count="size"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="DeleteBuffersARB" offset="assign">
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="buffer" type="const GLuint *" count="n"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GenBuffersARB" offset="assign">
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="buffer" type="GLuint *" output="true" count="n"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetBufferParameterivARB" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true" variable_param="pname"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetBufferPointervARB" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLvoid **" output="true"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetBufferSubDataARB" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="offset" type="GLintptrARB"/>
+        <param name="size" type="GLsizeiptrARB" counter="true"/>
+        <param name="data" type="GLvoid *" output="true" count="size"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="IsBufferARB" offset="assign">
+        <param name="buffer" type="GLuint"/>
+        <return type="GLboolean"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="MapBufferARB" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="access" type="GLenum"/>
+        <return type="GLvoid *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="UnmapBufferARB" offset="assign">
+        <param name="target" type="GLenum"/>
+        <return type="GLboolean"/>
+        <glx ignore="true"/>
+    </function>
+</category>
+
+<category name="GL_ARB_occlusion_query" number="29">
+    <enum name="QUERY_COUNTER_BITS_ARB"        count="1"  value="0x8864">
+        <size name="GetQueryivARB" mode="get"/>
+    </enum>
+    <enum name="CURRENT_QUERY_ARB"             count="1"  value="0x8865">
+        <size name="GetQueryivARB" mode="get"/>
+    </enum>
+    <enum name="QUERY_RESULT_ARB"              count="1"  value="0x8866">
+        <size name="GetQueryObjectivARB" mode="get"/>
+        <size name="GetQueryObjectuivARB" mode="get"/>
+    </enum>
+    <enum name="QUERY_RESULT_AVAILABLE_ARB"    count="1"  value="0x8867">
+        <size name="GetQueryObjectivARB" mode="get"/>
+        <size name="GetQueryObjectuivARB" mode="get"/>
+    </enum>
+    <enum name="SAMPLES_PASSED_ARB"                       value="0x8914"/>
+
+    <function name="GenQueriesARB" offset="assign">
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="ids" type="GLuint *" output="true" count="n"/>
+        <glx sop="162" always_array="true"/>
+    </function>
+
+    <function name="DeleteQueriesARB" offset="assign">
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="ids" type="const GLuint *" count="n"/>
+        <glx sop="161"/>
+    </function>
+
+    <function name="IsQueryARB" offset="assign">
+        <param name="id" type="GLuint"/>
+        <return type="GLboolean"/>
+        <glx sop="163"/>
+    </function>
+
+    <function name="BeginQueryARB" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="id" type="GLuint"/>
+        <glx rop="231"/>
+    </function>
+
+    <function name="EndQueryARB" offset="assign">
+        <param name="target" type="GLenum"/>
+        <glx rop="232"/>
+    </function>
+
+    <function name="GetQueryivARB" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true" variable_param="pname"/>
+        <glx sop="164"/>
+    </function>
+
+    <function name="GetQueryObjectivARB" offset="assign">
+        <param name="id" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true" variable_param="pname"/>
+        <glx sop="165"/>
+    </function>
+
+    <function name="GetQueryObjectuivARB" offset="assign">
+        <param name="id" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLuint *" output="true" variable_param="pname"/>
+        <glx sop="166"/>
+    </function>
+</category>
+
+<category name="GL_ARB_shader_objects" number="30">
+    <enum name="PROGRAM_OBJECT_ARB"                       value="0x8B40"/>
+    <enum name="SHADER_OBJECT_ARB"                        value="0x8B48"/>
+    <enum name="OBJECT_TYPE_ARB"                          value="0x8B4E"/>
+    <enum name="OBJECT_SUBTYPE_ARB"                       value="0x8B4F"/>
+    <enum name="FLOAT_VEC2_ARB"                           value="0x8B50"/>
+    <enum name="FLOAT_VEC3_ARB"                           value="0x8B51"/>
+    <enum name="FLOAT_VEC4_ARB"                           value="0x8B52"/>
+    <enum name="INT_VEC2_ARB"                             value="0x8B53"/>
+    <enum name="INT_VEC3_ARB"                             value="0x8B54"/>
+    <enum name="INT_VEC4_ARB"                             value="0x8B55"/>
+    <enum name="BOOL_ARB"                                 value="0x8B56"/>
+    <enum name="BOOL_VEC2_ARB"                            value="0x8B57"/>
+    <enum name="BOOL_VEC3_ARB"                            value="0x8B58"/>
+    <enum name="BOOL_VEC4_ARB"                            value="0x8B59"/>
+    <enum name="FLOAT_MAT2_ARB"                           value="0x8B5A"/>
+    <enum name="FLOAT_MAT3_ARB"                           value="0x8B5B"/>
+    <enum name="FLOAT_MAT4_ARB"                           value="0x8B5C"/>
+    <enum name="OBJECT_DELETE_STATUS_ARB"                 value="0x8B80"/>
+    <enum name="OBJECT_COMPILE_STATUS_ARB"                value="0x8B81"/>
+    <enum name="OBJECT_LINK_STATUS_ARB"                   value="0x8B82"/>
+    <enum name="OBJECT_VALIDATE_STATUS_ARB"               value="0x8B83"/>
+    <enum name="OBJECT_INFO_LOG_LENGTH_ARB"               value="0x8B84"/>
+    <enum name="OBJECT_ATTACHED_OBJECTS_ARB"              value="0x8B85"/>
+    <enum name="OBJECT_ACTIVE_UNIFORMS_ARB"               value="0x8B86"/>
+    <enum name="OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB"     value="0x8B87"/>
+    <enum name="OBJECT_SHADER_SOURCE_LENGTH_ARB"          value="0x8B88"/>
+
+    <type name="charARB"   size="1" glx_name="CARD8"/>
+    <type name="handleARB" size="4" glx_name="CARD32"/>
+
+    <function name="DeleteObjectARB" offset="assign">
+        <param name="obj" type="GLhandleARB"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetHandleARB" offset="assign">
+        <param name="pname" type="GLenum"/>
+        <return type="GLhandleARB"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="DetachObjectARB" offset="assign">
+        <param name="containerObj" type="GLhandleARB"/>
+        <param name="attachedObj" type="GLhandleARB"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="CreateShaderObjectARB" offset="assign">
+        <param name="shaderType" type="GLenum"/>
+        <return type="GLhandleARB"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="ShaderSourceARB" offset="assign">
+        <param name="shader" type="GLhandleARB"/>
+        <param name="count" type="GLsizei"/>
+        <param name="string" type="const GLcharARB **"/>
+        <param name="length" type="const GLint *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="CompileShaderARB" offset="assign">
+        <param name="shader" type="GLhandleARB"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="CreateProgramObjectARB" offset="assign">
+        <return type="GLhandleARB"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="AttachObjectARB" offset="assign">
+        <param name="containerObj" type="GLhandleARB"/>
+        <param name="obj" type="GLhandleARB"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="LinkProgramARB" offset="assign">
+        <param name="program" type="GLhandleARB"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="UseProgramObjectARB" offset="assign">
+        <param name="program" type="GLhandleARB"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="ValidateProgramARB" offset="assign">
+        <param name="program" type="GLhandleARB"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="Uniform1fARB" offset="assign">
+        <param name="location" type="GLint"/>
+        <param name="v0" type="GLfloat"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="Uniform2fARB" offset="assign">
+        <param name="location" type="GLint"/>
+        <param name="v0" type="GLfloat"/>
+        <param name="v1" type="GLfloat"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="Uniform3fARB" offset="assign">
+        <param name="location" type="GLint"/>
+        <param name="v0" type="GLfloat"/>
+        <param name="v1" type="GLfloat"/>
+        <param name="v2" type="GLfloat"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="Uniform4fARB" offset="assign">
+        <param name="location" type="GLint"/>
+        <param name="v0" type="GLfloat"/>
+        <param name="v1" type="GLfloat"/>
+        <param name="v2" type="GLfloat"/>
+        <param name="v3" type="GLfloat"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="Uniform1iARB" offset="assign">
+        <param name="location" type="GLint"/>
+        <param name="v0" type="GLint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="Uniform2iARB" offset="assign">
+        <param name="location" type="GLint"/>
+        <param name="v0" type="GLint"/>
+        <param name="v1" type="GLint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="Uniform3iARB" offset="assign">
+        <param name="location" type="GLint"/>
+        <param name="v0" type="GLint"/>
+        <param name="v1" type="GLint"/>
+        <param name="v2" type="GLint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="Uniform4iARB" offset="assign">
+        <param name="location" type="GLint"/>
+        <param name="v0" type="GLint"/>
+        <param name="v1" type="GLint"/>
+        <param name="v2" type="GLint"/>
+        <param name="v3" type="GLint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="Uniform1fvARB" offset="assign">
+        <param name="location" type="GLint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="value" type="const GLfloat *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="Uniform2fvARB" offset="assign">
+        <param name="location" type="GLint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="value" type="const GLfloat *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="Uniform3fvARB" offset="assign">
+        <param name="location" type="GLint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="value" type="const GLfloat *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="Uniform4fvARB" offset="assign">
+        <param name="location" type="GLint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="value" type="const GLfloat *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="Uniform1ivARB" offset="assign">
+        <param name="location" type="GLint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="value" type="const GLint *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="Uniform2ivARB" offset="assign">
+        <param name="location" type="GLint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="value" type="const GLint *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="Uniform3ivARB" offset="assign">
+        <param name="location" type="GLint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="value" type="const GLint *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="Uniform4ivARB" offset="assign">
+        <param name="location" type="GLint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="value" type="const GLint *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="UniformMatrix2fvARB" offset="assign">
+        <param name="location" type="GLint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="transpose" type="GLboolean"/>
+        <param name="value" type="const GLfloat *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="UniformMatrix3fvARB" offset="assign">
+        <param name="location" type="GLint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="transpose" type="GLboolean"/>
+        <param name="value" type="const GLfloat *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="UniformMatrix4fvARB" offset="assign">
+        <param name="location" type="GLint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="transpose" type="GLboolean"/>
+        <param name="value" type="const GLfloat *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetObjectParameterfvARB" offset="assign">
+        <param name="obj" type="GLhandleARB"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat *" output="true"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetObjectParameterivARB" offset="assign">
+        <param name="obj" type="GLhandleARB"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetInfoLogARB" offset="assign">
+        <param name="obj" type="GLhandleARB"/>
+        <param name="maxLength" type="GLsizei"/>
+        <param name="length" type="GLsizei *" output="true"/>
+        <param name="infoLog" type="GLcharARB *" output="true"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetAttachedObjectsARB" offset="assign">
+        <param name="containerObj" type="GLhandleARB"/>
+        <param name="maxLength" type="GLsizei"/>
+        <param name="length" type="GLsizei *" output="true"/>
+        <param name="infoLog" type="GLhandleARB *" output="true"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetUniformLocationARB" offset="assign">
+        <param name="program" type="GLhandleARB"/>
+        <param name="name" type="const GLcharARB *"/>
+        <return type="GLint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetActiveUniformARB" offset="assign">
+        <param name="program" type="GLhandleARB"/>
+        <param name="index" type="GLuint"/>
+        <param name="bufSize" type="GLsizei"/>
+        <param name="length" type="GLsizei *" output="true"/>
+        <param name="size" type="GLint *" output="true"/>
+        <param name="type" type="GLenum *" output="true"/>
+        <param name="name" type="GLcharARB *" output="true"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetUniformfvARB" offset="assign">
+        <param name="program" type="GLhandleARB"/>
+        <param name="location" type="GLint"/>
+        <param name="params" type="GLfloat *" output="true"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetUniformivARB" offset="assign">
+        <param name="program" type="GLhandleARB"/>
+        <param name="location" type="GLint"/>
+        <param name="params" type="GLint *" output="true"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetShaderSourceARB" offset="assign">
+        <param name="shader" type="GLhandleARB"/>
+        <param name="bufSize" type="GLsizei"/>
+        <param name="length" type="GLsizei *" output="true"/>
+        <param name="source" type="GLcharARB *" output="true"/>
+        <glx ignore="true"/>
+    </function>
+</category>
+
+<category name="GL_ARB_vertex_shader" number="31">
+    <enum name="VERTEX_SHADER_ARB"                        value="0x8B31"/>
+    <enum name="MAX_VERTEX_UNIFORM_COMPONENTS_ARB"        value="0x8B4A"/>
+    <enum name="MAX_VARYING_FLOATS_ARB"                   value="0x8B4B"/>
+    <enum name="MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB"       value="0x8B4C"/>
+    <enum name="MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB"     value="0x8B4D"/>
+    <enum name="OBJECT_ACTIVE_ATTRIBUTES_ARB"             value="0x8B89"/>
+    <enum name="OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB"   value="0x8B8A"/>
+
+    <function name="BindAttribLocationARB" offset="assign">
+        <param name="program" type="GLhandleARB"/>
+        <param name="index" type="GLuint"/>
+        <param name="name" type="const GLcharARB *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetActiveAttribARB" offset="assign">
+        <param name="program" type="GLhandleARB"/>
+        <param name="index" type="GLuint"/>
+        <param name="bufSize" type="GLsizei"/>
+        <param name="length" type="GLsizei *" output="true"/>
+        <param name="size" type="GLint *" output="true"/>
+        <param name="type" type="GLenum *" output="true"/>
+        <param name="name" type="GLcharARB *" output="true"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetAttribLocationARB" offset="assign">
+        <param name="program" type="GLhandleARB"/>
+        <param name="name" type="const GLcharARB *"/>
+        <return type="GLint"/>
+        <glx ignore="true"/>
+    </function>
+</category>
+
+<category name="GL_ARB_fragment_shader" number="32">
+    <enum name="FRAGMENT_SHADER_ARB"                      value="0x8B30"/>
+    <enum name="MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB"      value="0x8B49"/>
+</category>
+
+<category name="GL_ARB_shading_language_100" number="33">
+    <!-- No new functions, types, enums. -->
+</category>
+
+<category name="GL_ARB_texture_non_power_of_two" number="34">
+    <!-- No new functions, types, enums. -->
+</category>
+
+<category name="GL_ARB_point_sprite" number="35">
+    <enum name="POINT_SPRITE_ARB"              count="1"  value="0x8861">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="COORD_REPLACE_ARB"             count="1"  value="0x8862">
+        <size name="TexEnvfv"/>
+        <size name="TexEnviv"/>
+        <size name="GetTexEnvfv" mode="get"/>
+        <size name="GetTexEnviv" mode="get"/>
+    </enum>
+</category>
+
+<category name="GL_ARB_fragment_program_shadow" number="36">
+    <!-- No new functions, types, enums. -->
+</category>
+
+<category name="GL_ARB_draw_buffers" number="37">
+    <enum name="MAX_DRAW_BUFFERS_ARB"          count="1"  value="0x8824">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_BUFFER0_ARB"              count="1"  value="0x8825">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_BUFFER1_ARB"              count="1"  value="0x8826">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_BUFFER2_ARB"              count="1"  value="0x8827">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_BUFFER3_ARB"              count="1"  value="0x8828">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_BUFFER4_ARB"              count="1"  value="0x8829">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_BUFFER5_ARB"              count="1"  value="0x882A">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_BUFFER6_ARB"              count="1"  value="0x882B">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_BUFFER7_ARB"              count="1"  value="0x882C">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_BUFFER8_ARB"              count="1"  value="0x882D">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_BUFFER9_ARB"              count="1"  value="0x882E">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_BUFFER10_ARB"             count="1"  value="0x882F">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_BUFFER11_ARB"             count="1"  value="0x8830">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_BUFFER12_ARB"             count="1"  value="0x8831">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_BUFFER13_ARB"             count="1"  value="0x8832">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_BUFFER14_ARB"             count="1"  value="0x8833">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_BUFFER15_ARB"             count="1"  value="0x8834">
+        <size name="Get" mode="get"/>
+    </enum>
+
+    <function name="DrawBuffersARB" offset="assign">
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="bufs" type="const GLenum *" count="n"/>
+        <glx rop="233" large="true"/>
+    </function>
+</category>
+
+<category name="GL_ARB_texture_rectangle" number="38">
+    <enum name="TEXTURE_RECTANGLE_ARB"         count="1"  value="0x84F5">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_BINDING_RECTANGLE_ARB" count="1"  value="0x84F6">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="PROXY_TEXTURE_RECTANGLE_ARB"              value="0x84F7"/>
+    <enum name="MAX_RECTANGLE_TEXTURE_SIZE_ARB" count="1" value="0x84F8">
+        <size name="Get" mode="get"/>
+    </enum>
+</category>
+
+<xi:include href="ARB_framebuffer_object.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
+
+<xi:include href="ARB_copy_buffer.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
+
+<xi:include href="ARB_depth_clamp.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
+
+<xi:include href="ARB_map_buffer_range.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
+
+<xi:include href="ARB_vertex_array_object.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
+
+<xi:include href="ARB_sync.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
+
+<xi:include href="ARB_seamless_cube_map.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
+
+<xi:include href="ARB_draw_elements_base_vertex.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
+
+<xi:include href="NV_conditional_render.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
+
+
+<!-- Non-ARB extensions sorted by extension number. -->
+
+<category name="GL_EXT_blend_color" number="2">
+    <enum name="CONSTANT_COLOR_EXT"                       value="0x8001"/>
+    <enum name="ONE_MINUS_CONSTANT_COLOR_EXT"             value="0x8002"/>
+    <enum name="CONSTANT_ALPHA_EXT"                       value="0x8003"/>
+    <enum name="ONE_MINUS_CONSTANT_ALPHA_EXT"             value="0x8004"/>
+    <enum name="BLEND_COLOR_EXT"               count="4"  value="0x8005">
+        <size name="Get" mode="get"/>
+    </enum>
+
+    <function name="BlendColorEXT" alias="BlendColor">
+        <param name="red" type="GLclampf"/>
+        <param name="green" type="GLclampf"/>
+        <param name="blue" type="GLclampf"/>
+        <param name="alpha" type="GLclampf"/>
+    </function>
+</category>
+
+<category name="GL_EXT_polygon_offset" number="3">
+    <function name="PolygonOffsetEXT" offset="assign">
+        <param name="factor" type="GLfloat"/>
+        <param name="bias" type="GLfloat"/>
+        <glx rop="4098" ignore="true"/>
+    </function>
+</category>
+
+<category name="GL_EXT_texture" number="4">
+    <enum name="ALPHA4_EXT"                               value="0x803B"/>
+    <enum name="ALPHA8_EXT"                               value="0x803C"/>
+    <enum name="ALPHA12_EXT"                              value="0x803D"/>
+    <enum name="ALPHA16_EXT"                              value="0x803E"/>
+    <enum name="LUMINANCE4_EXT"                           value="0x803F"/>
+    <enum name="LUMINANCE8_EXT"                           value="0x8040"/>
+    <enum name="LUMINANCE12_EXT"                          value="0x8041"/>
+    <enum name="LUMINANCE16_EXT"                          value="0x8042"/>
+    <enum name="LUMINANCE4_ALPHA4_EXT"                    value="0x8043"/>
+    <enum name="LUMINANCE6_ALPHA2_EXT"                    value="0x8044"/>
+    <enum name="LUMINANCE8_ALPHA8_EXT"                    value="0x8045"/>
+    <enum name="LUMINANCE12_ALPHA4_EXT"                   value="0x8046"/>
+    <enum name="LUMINANCE12_ALPHA12_EXT"                  value="0x8047"/>
+    <enum name="LUMINANCE16_ALPHA16_EXT"                  value="0x8048"/>
+    <enum name="INTENSITY_EXT"                            value="0x8049"/>
+    <enum name="INTENSITY4_EXT"                           value="0x804A"/>
+    <enum name="INTENSITY8_EXT"                           value="0x804B"/>
+    <enum name="INTENSITY12_EXT"                          value="0x804C"/>
+    <enum name="INTENSITY16_EXT"                          value="0x804D"/>
+    <enum name="RGB2_EXT"                                 value="0x804E"/>
+    <enum name="RGB4_EXT"                                 value="0x804F"/>
+    <enum name="RGB5_EXT"                                 value="0x8050"/>
+    <enum name="RGB8_EXT"                                 value="0x8051"/>
+    <enum name="RGB10_EXT"                                value="0x8052"/>
+    <enum name="RGB12_EXT"                                value="0x8053"/>
+    <enum name="RGB16_EXT"                                value="0x8054"/>
+    <enum name="RGBA2_EXT"                                value="0x8055"/>
+    <enum name="RGBA4_EXT"                                value="0x8056"/>
+    <enum name="RGB5_A1_EXT"                              value="0x8057"/>
+    <enum name="RGBA8_EXT"                                value="0x8058"/>
+    <enum name="RGB10_A2_EXT"                             value="0x8059"/>
+    <enum name="RGBA12_EXT"                               value="0x805A"/>
+    <enum name="RGBA16_EXT"                               value="0x805B"/>
+    <enum name="TEXTURE_RED_SIZE_EXT"          count="1"  value="0x805C">
+        <size name="GetTexLevelParameterfv" mode="get"/>
+        <size name="GetTexLevelParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_GREEN_SIZE_EXT"        count="1"  value="0x805D">
+        <size name="GetTexLevelParameterfv" mode="get"/>
+        <size name="GetTexLevelParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_BLUE_SIZE_EXT"         count="1"  value="0x805E">
+        <size name="GetTexLevelParameterfv" mode="get"/>
+        <size name="GetTexLevelParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_ALPHA_SIZE_EXT"        count="1"  value="0x805F">
+        <size name="GetTexLevelParameterfv" mode="get"/>
+        <size name="GetTexLevelParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_LUMINANCE_SIZE_EXT"    count="1"  value="0x8060">
+        <size name="GetTexLevelParameterfv" mode="get"/>
+        <size name="GetTexLevelParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_INTENSITY_SIZE_EXT"    count="1"  value="0x8061">
+        <size name="GetTexLevelParameterfv" mode="get"/>
+        <size name="GetTexLevelParameteriv" mode="get"/>
+    </enum>
+    <enum name="REPLACE_EXT"                              value="0x8062"/>
+    <enum name="PROXY_TEXTURE_1D_EXT"                     value="0x8063"/>
+    <enum name="PROXY_TEXTURE_2D_EXT"                     value="0x8064"/>
+    <enum name="TEXTURE_TOO_LARGE_EXT"                    value="0x8065"/>
+</category>
+
+<!-- Extension number 5 is not listed in the extension registry. -->
+
+<category name="GL_EXT_texture3D" number="6">
+    <function name="TexImage3DEXT" alias="TexImage3D">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="depth" type="GLsizei"/>
+        <param name="border" type="GLint"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="pixels" type="const GLvoid *"/>
+    </function>
+
+    <function name="TexSubImage3DEXT" alias="TexSubImage3D">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="xoffset" type="GLint"/>
+        <param name="yoffset" type="GLint"/>
+        <param name="zoffset" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="depth" type="GLsizei"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="UNUSED" type="GLuint" padding="true"/>
+        <param name="pixels" type="const GLvoid *"/>
+    </function>
+</category>
+
+<category name="GL_SGIS_texture_filter4" number="7">
+    <function name="GetTexFilterFuncSGIS">
+        <param name="target" type="GLenum"/>
+        <param name="filter" type="GLenum"/>
+        <param name="weights" type="GLfloat *" output="true"/>
+        <glx vendorpriv="4101" ignore="true"/>
+    </function>
+
+    <function name="TexFilterFuncSGIS">
+        <param name="target" type="GLenum"/>
+        <param name="filter" type="GLenum"/>
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="weights" type="const GLfloat *" count="n"/>
+        <glx rop="2064" ignore="true"/>
+    </function>
+</category>
+
+<!-- Extension number 8 is not listed in the extension registry. -->
+
+<category name="GL_EXT_subtexture" number="9">
+    <function name="TexSubImage1DEXT" alias="TexSubImage1D">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="xoffset" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="UNUSED" type="GLuint" padding="true"/>
+        <param name="pixels" type="const GLvoid *"/>
+    </function>
+
+    <function name="TexSubImage2DEXT" alias="TexSubImage2D">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="xoffset" type="GLint"/>
+        <param name="yoffset" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="UNUSED" type="GLuint" padding="true"/>
+        <param name="pixels" type="const GLvoid *"/>
+    </function>
+</category>
+
+<category name="GL_EXT_copy_texture" number="10">
+    <function name="CopyTexImage1DEXT" alias="CopyTexImage1D">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <param name="border" type="GLint"/>
+    </function>
+
+    <function name="CopyTexImage2DEXT" alias="CopyTexImage2D">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="border" type="GLint"/>
+    </function>
+
+    <function name="CopyTexSubImage1DEXT" alias="CopyTexSubImage1D">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="xoffset" type="GLint"/>
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+    </function>
+
+    <function name="CopyTexSubImage2DEXT" alias="CopyTexSubImage2D">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="xoffset" type="GLint"/>
+        <param name="yoffset" type="GLint"/>
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+    </function>
+
+    <function name="CopyTexSubImage3DEXT" alias="CopyTexSubImage3D">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="xoffset" type="GLint"/>
+        <param name="yoffset" type="GLint"/>
+        <param name="zoffset" type="GLint"/>
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+    </function>
+</category>
+
+<category name="GL_EXT_histogram" number="11">
+    <enum name="HISTOGRAM_EXT"                            value="0x8024"/>
+    <enum name="PROXY_HISTOGRAM_EXT"                      value="0x8025"/>
+    <enum name="HISTOGRAM_WIDTH_EXT"           count="1"  value="0x8026">
+        <size name="GetHistogramParameterfvEXT" mode="get"/>
+        <size name="GetHistogramParameterivEXT" mode="get"/>
+    </enum>
+    <enum name="HISTOGRAM_FORMAT_EXT"          count="1"  value="0x8027">
+        <size name="GetHistogramParameterfvEXT" mode="get"/>
+        <size name="GetHistogramParameterivEXT" mode="get"/>
+    </enum>
+    <enum name="HISTOGRAM_RED_SIZE_EXT"        count="1"  value="0x8028">
+        <size name="GetHistogramParameterfvEXT" mode="get"/>
+        <size name="GetHistogramParameterivEXT" mode="get"/>
+    </enum>
+    <enum name="HISTOGRAM_GREEN_SIZE_EXT"      count="1"  value="0x8029">
+        <size name="GetHistogramParameterfvEXT" mode="get"/>
+        <size name="GetHistogramParameterivEXT" mode="get"/>
+    </enum>
+    <enum name="HISTOGRAM_BLUE_SIZE_EXT"       count="1"  value="0x802A">
+        <size name="GetHistogramParameterfvEXT" mode="get"/>
+        <size name="GetHistogramParameterivEXT" mode="get"/>
+    </enum>
+    <enum name="HISTOGRAM_ALPHA_SIZE_EXT"      count="1"  value="0x802B">
+        <size name="GetHistogramParameterfvEXT" mode="get"/>
+        <size name="GetHistogramParameterivEXT" mode="get"/>
+    </enum>
+    <enum name="HISTOGRAM_LUMINANCE_SIZE_EXT"  count="1"  value="0x802C">
+        <size name="GetHistogramParameterfvEXT" mode="get"/>
+        <size name="GetHistogramParameterivEXT" mode="get"/>
+    </enum>
+    <enum name="HISTOGRAM_SINK_EXT"            count="1"  value="0x802D">
+        <size name="GetHistogramParameterfvEXT" mode="get"/>
+        <size name="GetHistogramParameterivEXT" mode="get"/>
+    </enum>
+    <enum name="MINMAX_EXT"                               value="0x802E"/>
+    <enum name="MINMAX_FORMAT_EXT"             count="1"  value="0x802F">
+        <size name="GetMinmaxParameterfvEXT" mode="get"/>
+        <size name="GetMinmaxParameterivEXT" mode="get"/>
+    </enum>
+    <enum name="MINMAX_SINK_EXT"               count="1"  value="0x8030">
+        <size name="GetMinmaxParameterfvEXT" mode="get"/>
+        <size name="GetMinmaxParameterivEXT" mode="get"/>
+    </enum>
+    <enum name="TABLE_TOO_LARGE_EXT"                      value="0x8031"/>
+
+    <function name="GetHistogramEXT" alias="GetHistogram" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="reset" type="GLboolean"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="values" type="GLvoid *" output="true" img_width="width" img_format="format" img_type="type"/>
+        <glx vendorpriv="5" dimensions_in_reply="true" img_reset="reset"/>
+    </function>
+
+    <function name="GetHistogramParameterfvEXT" alias="GetHistogramParameterfv" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
+        <glx vendorpriv="6"/>
+    </function>
+
+    <function name="GetHistogramParameterivEXT" alias="GetHistogramParameteriv" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true" variable_param="pname"/>
+        <glx vendorpriv="7"/>
+    </function>
+
+    <function name="GetMinmaxEXT" alias="GetMinmax" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="reset" type="GLboolean"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="values" type="GLvoid *" output="true" img_width="2" img_format="format" img_type="type"/>
+        <glx vendorpriv="8" img_reset="reset"/>
+    </function>
+
+    <function name="GetMinmaxParameterfvEXT" alias="GetMinmaxParameterfv" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
+        <glx vendorpriv="9"/>
+    </function>
+
+    <function name="GetMinmaxParameterivEXT" alias="GetMinmaxParameteriv" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true" variable_param="pname"/>
+        <glx vendorpriv="10"/>
+    </function>
+
+    <function name="HistogramEXT" alias="Histogram" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="width" type="GLsizei"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="sink" type="GLboolean"/>
+    </function>
+
+    <function name="MinmaxEXT" alias="Minmax" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="sink" type="GLboolean"/>
+    </function>
+
+    <function name="ResetHistogramEXT" alias="ResetHistogram" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+    </function>
+
+    <function name="ResetMinmaxEXT" alias="ResetMinmax" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+    </function>
+</category>
+
+<category name="GL_EXT_convolution" number="12">
+    <enum name="CONVOLUTION_BORDER_MODE_EXT"   count="1"  value="0x8013">
+        <size name="ConvolutionParameterfv"/>
+        <size name="ConvolutionParameteriv"/>
+        <size name="GetConvolutionParameterfv" mode="get"/>
+        <size name="GetConvolutionParameteriv" mode="get"/>
+    </enum>
+    <enum name="CONVOLUTION_FILTER_SCALE_EXT"  count="4"  value="0x8014">
+        <size name="ConvolutionParameterfv"/>
+        <size name="ConvolutionParameteriv"/>
+        <size name="GetConvolutionParameterfv" mode="get"/>
+        <size name="GetConvolutionParameteriv" mode="get"/>
+    </enum>
+    <enum name="CONVOLUTION_FILTER_BIAS_EXT"   count="4"  value="0x8015">
+        <size name="ConvolutionParameterfv"/>
+        <size name="ConvolutionParameteriv"/>
+        <size name="GetConvolutionParameterfv" mode="get"/>
+        <size name="GetConvolutionParameteriv" mode="get"/>
+    </enum>
+    <enum name="REDUCE_EXT"                               value="0x8016"/>
+    <enum name="CONVOLUTION_FORMAT_EXT"        count="1"  value="0x8017">
+        <size name="GetConvolutionParameterfv" mode="get"/>
+        <size name="GetConvolutionParameteriv" mode="get"/>
+    </enum>
+    <enum name="CONVOLUTION_WIDTH_EXT"         count="1"  value="0x8018">
+        <size name="GetConvolutionParameterfv" mode="get"/>
+        <size name="GetConvolutionParameteriv" mode="get"/>
+    </enum>
+    <enum name="CONVOLUTION_HEIGHT_EXT"        count="1"  value="0x8019">
+        <size name="GetConvolutionParameterfv" mode="get"/>
+        <size name="GetConvolutionParameteriv" mode="get"/>
+    </enum>
+    <enum name="MAX_CONVOLUTION_WIDTH_EXT"     count="1"  value="0x801A">
+        <size name="GetConvolutionParameterfv" mode="get"/>
+        <size name="GetConvolutionParameteriv" mode="get"/>
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAX_CONVOLUTION_HEIGHT_EXT"    count="1"  value="0x801B">
+        <size name="GetConvolutionParameterfv" mode="get"/>
+        <size name="GetConvolutionParameteriv" mode="get"/>
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POST_CONVOLUTION_RED_SCALE_EXT" count="1" value="0x801C">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POST_CONVOLUTION_GREEN_SCALE_EXT" count="1" value="0x801D">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POST_CONVOLUTION_BLUE_SCALE_EXT" count="1" value="0x801E">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POST_CONVOLUTION_ALPHA_SCALE_EXT" count="1" value="0x801F">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POST_CONVOLUTION_RED_BIAS_EXT" count="1"  value="0x8020">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POST_CONVOLUTION_GREEN_BIAS_EXT" count="1" value="0x8021">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POST_CONVOLUTION_BLUE_BIAS_EXT" count="1" value="0x8022">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="POST_CONVOLUTION_ALPHA_BIAS_EXT" count="1" value="0x8023">
+        <size name="Get" mode="get"/>
+    </enum>
+
+    <function name="ConvolutionFilter1DEXT" alias="ConvolutionFilter1D" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="width" type="GLsizei"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="image" type="const GLvoid *"/>
+    </function>
+
+    <function name="ConvolutionFilter2DEXT" alias="ConvolutionFilter2D" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="image" type="const GLvoid *"/>
+    </function>
+
+    <function name="ConvolutionParameterfEXT" alias="ConvolutionParameterf" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat"/>
+    </function>
+
+    <function name="ConvolutionParameterfvEXT" alias="ConvolutionParameterfv" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLfloat *"/>
+    </function>
+
+    <function name="ConvolutionParameteriEXT" alias="ConvolutionParameteri" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint"/>
+    </function>
+
+    <function name="ConvolutionParameterivEXT" alias="ConvolutionParameteriv" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLint *"/>
+    </function>
+
+    <function name="CopyConvolutionFilter1DEXT" alias="CopyConvolutionFilter1D" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+    </function>
+
+    <function name="CopyConvolutionFilter2DEXT" alias="CopyConvolutionFilter2D" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+    </function>
+
+    <function name="GetConvolutionFilterEXT" alias="GetConvolutionFilter" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="image" type="GLvoid *" output="true" img_width="width" img_height="height" img_format="format" img_type="type"/>
+        <glx vendorpriv="1" dimensions_in_reply="true"/>
+    </function>
+
+    <function name="GetConvolutionParameterfvEXT" alias="GetConvolutionParameterfv" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
+        <glx vendorpriv="2"/>
+    </function>
+
+    <function name="GetConvolutionParameterivEXT" alias="GetConvolutionParameteriv" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true" variable_param="pname"/>
+        <glx vendorpriv="3"/>
+    </function>
+
+    <function name="GetSeparableFilterEXT" alias="GetSeparableFilter" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="row" type="GLvoid *" output="true"/>
+        <param name="column" type="GLvoid *" output="true"/>
+        <param name="span" type="GLvoid *" output="true"/>
+        <glx vendorpriv="4" handcode="true"/>
+    </function>
+
+    <function name="SeparableFilter2DEXT" alias="SeparableFilter2D" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="row" type="const GLvoid *"/>
+        <param name="column" type="const GLvoid *"/>
+    </function>
+</category>
+
+<category name="GL_SGI_color_matrix" number="13">
+    <enum name="COLOR_MATRIX_SGI"                         value="0x80B1"/>
+    <enum name="COLOR_MATRIX_STACK_DEPTH_SGI"             value="0x80B2"/>
+    <enum name="MAX_COLOR_MATRIX_STACK_DEPTH_SGI"         value="0x80B3"/>
+    <enum name="POST_COLOR_MATRIX_RED_SCALE_SGI"          value="0x80B4"/>
+    <enum name="POST_COLOR_MATRIX_GREEN_SCALE_SGI"        value="0x80B5"/>
+    <enum name="POST_COLOR_MATRIX_BLUE_SCALE_SGI"         value="0x80B6"/>
+    <enum name="POST_COLOR_MATRIX_ALPHA_SCALE_SGI"        value="0x80B7"/>
+    <enum name="POST_COLOR_MATRIX_RED_BIAS_SGI"           value="0x80B8"/>
+    <enum name="POST_COLOR_MATRIX_GREEN_BIAS_SGI"         value="0x80B9"/>
+    <enum name="POST_COLOR_MATRIX_BLUE_BIAS_SGI"          value="0x80BA"/>
+    <enum name="POST_COLOR_MATRIX_ALPHA_BIAS_SGI"         value="0x80BB"/>
+</category>
+
+<category name="GL_SGI_color_table" number="14">
+    <enum name="COLOR_TABLE_SCALE_SGI"         count="4"  value="0x80D6">
+        <size name="ColorTableParameterfvSGI"/>
+        <size name="ColorTableParameterivSGI"/>
+        <size name="GetColorTableParameterfvSGI" mode="get"/>
+        <size name="GetColorTableParameterivSGI" mode="get"/>
+    </enum>
+    <enum name="COLOR_TABLE_BIAS_SGI"          count="4"  value="0x80D7">
+        <size name="ColorTableParameterfvSGI"/>
+        <size name="ColorTableParameterivSGI"/>
+        <size name="GetColorTableParameterfvSGI" mode="get"/>
+        <size name="GetColorTableParameterivSGI" mode="get"/>
+    </enum>
+    <enum name="COLOR_TABLE_FORMAT_SGI"        count="1"  value="0x80D8">
+        <size name="GetColorTableParameterfvSGI" mode="get"/>
+        <size name="GetColorTableParameterivSGI" mode="get"/>
+    </enum>
+    <enum name="COLOR_TABLE_WIDTH_SGI"         count="1"  value="0x80D9">
+        <size name="GetColorTableParameterfvSGI" mode="get"/>
+        <size name="GetColorTableParameterivSGI" mode="get"/>
+    </enum>
+    <enum name="COLOR_TABLE_RED_SIZE_SGI"      count="1"  value="0x80DA">
+        <size name="GetColorTableParameterfvSGI" mode="get"/>
+        <size name="GetColorTableParameterivSGI" mode="get"/>
+    </enum>
+    <enum name="COLOR_TABLE_GREEN_SIZE_SGI"    count="1"  value="0x80DB">
+        <size name="GetColorTableParameterfvSGI" mode="get"/>
+        <size name="GetColorTableParameterivSGI" mode="get"/>
+    </enum>
+    <enum name="COLOR_TABLE_BLUE_SIZE_SGI"     count="1"  value="0x80DC">
+        <size name="GetColorTableParameterfvSGI" mode="get"/>
+        <size name="GetColorTableParameterivSGI" mode="get"/>
+    </enum>
+    <enum name="COLOR_TABLE_ALPHA_SIZE_SGI"    count="1"  value="0x80DD">
+        <size name="GetColorTableParameterfvSGI" mode="get"/>
+        <size name="GetColorTableParameterivSGI" mode="get"/>
+    </enum>
+    <enum name="COLOR_TABLE_LUMINANCE_SIZE_SGI" count="1" value="0x80DE">
+        <size name="GetColorTableParameterfvSGI" mode="get"/>
+        <size name="GetColorTableParameterivSGI" mode="get"/>
+    </enum>
+    <enum name="COLOR_TABLE_INTENSITY_SIZE_SGI" count="1" value="0x80DF">
+        <size name="GetColorTableParameterfvSGI" mode="get"/>
+        <size name="GetColorTableParameterivSGI" mode="get"/>
+    </enum>
+
+    <function name="ColorTableSGI" alias="ColorTable" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="width" type="GLsizei"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="table" type="const GLvoid *"/>
+    </function>
+
+    <function name="ColorTableParameterfvSGI" alias="ColorTableParameterfv" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLfloat *"/>
+    </function>
+
+    <function name="ColorTableParameterivSGI" alias="ColorTableParameteriv" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLint *"/>
+    </function>
+
+    <function name="CopyColorTableSGI" alias="CopyColorTable" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+    </function>
+
+    <function name="GetColorTableSGI" alias="GetColorTable" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="table" type="GLvoid *" output="true" img_width="width" img_format="format" img_type="type"/>
+        <glx vendorpriv="4098" dimensions_in_reply="true"/>
+    </function>
+
+    <function name="GetColorTableParameterfvSGI" alias="GetColorTableParameterfv" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
+        <glx vendorpriv="4099"/>
+    </function>
+
+    <function name="GetColorTableParameterivSGI" alias="GetColorTableParameteriv" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true" variable_param="pname"/>
+        <glx vendorpriv="4100"/>
+    </function>
+</category>
+
+<category name="GL_SGIS_pixel_texture" number="15">
+    <function name="PixelTexGenParameteriSGIS" offset="assign" static_dispatch="false">
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="PixelTexGenParameterivSGIS" offset="assign" static_dispatch="false">
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLint *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="PixelTexGenParameterfSGIS" offset="assign" static_dispatch="false">
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLfloat"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="PixelTexGenParameterfvSGIS" offset="assign" static_dispatch="false">
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLfloat *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetPixelTexGenParameterivSGIS" offset="assign" static_dispatch="false">
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true" variable_param="pname"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetPixelTexGenParameterfvSGIS" offset="assign" static_dispatch="false">
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
+        <glx ignore="true"/>
+    </function>
+</category>
+
+<category name="GL_SGIS_texture4D" number="16">
+    <function name="TexImage4DSGIS">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="depth" type="GLsizei"/>
+        <param name="size4d" type="GLsizei"/>
+        <param name="border" type="GLint"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="pixels" type="const GLvoid *" img_width="width" img_height="height" img_depth="depth" img_extent="size4d" img_format="format" img_type="type" img_target="target" img_null_flag="true" img_pad_dimensions="true"/>
+        <glx rop="2057" ignore="true"/>
+    </function>
+
+    <function name="TexSubImage4DSGIS">
+        <param name="target" type="GLenum"/>
+        <param name="level" type="GLint"/>
+        <param name="xoffset" type="GLint"/>
+        <param name="yoffset" type="GLint"/>
+        <param name="zoffset" type="GLint"/>
+        <param name="woffset" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="depth" type="GLsizei"/>
+        <param name="size4d" type="GLsizei"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="UNUSED" type="GLuint" padding="true"/>
+        <param name="pixels" type="const GLvoid *" img_width="width" img_height="height" img_depth="depth" img_extent="size4d" img_xoff="xoffset" img_yoff="yoffset" img_zoff="zoffset" img_woff="woffset" img_format="format" img_type="type" img_target="target" img_pad_dimensions="true"/>
+        <glx rop="2058" ignore="true"/>
+    </function>
+</category>
+
+<category name="GL_SGI_texture_color_table" number="17">
+    <enum name="TEXTURE_COLOR_TABLE_SGI"                  value="0x80BC"/>
+    <enum name="PROXY_TEXTURE_COLOR_TABLE_SGI"            value="0x80BD"/>
+</category>
+
+<!-- Extension number 19 is not listed in the extension registry. -->
+
+<category name="GL_EXT_texture_object" number="20">
+    <function name="AreTexturesResidentEXT" alias="AreTexturesResident">
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="textures" type="const GLuint *" count="n"/>
+        <param name="residences" type="GLboolean *" output="true" count="n"/>
+        <return type="GLboolean"/>
+        <glx vendorpriv="11" handcode="client" always_array="true"/>
+    </function>
+
+    <function name="BindTextureEXT" alias="BindTexture">
+        <param name="target" type="GLenum"/>
+        <param name="texture" type="GLuint"/>
+    </function>
+
+    <function name="DeleteTexturesEXT" alias="DeleteTextures">
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="textures" type="const GLuint *" count="n"/>
+        <glx vendorpriv="12"/>
+    </function>
+
+    <function name="GenTexturesEXT" alias="GenTextures">
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="textures" type="GLuint *" output="true" count="n"/>
+        <glx vendorpriv="13" always_array="true"/>
+    </function>
+
+    <function name="IsTextureEXT" alias="IsTexture">
+        <param name="texture" type="GLuint"/>
+        <return type="GLboolean"/>
+        <glx vendorpriv="14"/>
+    </function>
+
+    <function name="PrioritizeTexturesEXT" alias="PrioritizeTextures">
+        <param name="n" type="GLsizei"/>
+        <param name="textures" type="const GLuint *"/>
+        <param name="priorities" type="const GLclampf *"/>
+    </function>
+</category>
+
+<category name="GL_SGIS_detail_texture" number="21">
+    <function name="DetailTexFuncSGIS">
+        <param name="target" type="GLenum"/>
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="points" type="const GLfloat *" count="n"/>
+        <glx rop="2051" ignore="true"/>
+    </function>
+
+    <function name="GetDetailTexFuncSGIS">
+        <param name="target" type="GLenum"/>
+        <param name="points" type="GLfloat *" output="true"/>
+        <glx vendorpriv="4096" ignore="true"/>
+    </function>
+</category>
+
+<category name="GL_SGIS_sharpen_texture" number="22">
+    <function name="SharpenTexFuncSGIS">
+        <param name="target" type="GLenum"/>
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="points" type="const GLfloat *" count="n" count_scale="2"/>
+        <glx rop="2052" ignore="true"/>
+    </function>
+
+    <function name="GetSharpenTexFuncSGIS">
+        <param name="target" type="GLenum"/>
+        <param name="points" type="GLfloat *" output="true"/>
+        <glx vendorpriv="4097" ignore="true"/>
+    </function>
+</category>
+
+<category name="GL_SGIS_multisample" number="25">
+    <function name="SampleMaskSGIS" offset="assign" static_dispatch="false">
+        <param name="value" type="GLclampf"/>
+        <param name="invert" type="GLboolean"/>
+        <glx rop="2048"/>
+    </function>
+
+    <function name="SamplePatternSGIS" offset="assign" static_dispatch="false">
+        <param name="pattern" type="GLenum"/>
+        <glx rop="2049"/>
+    </function>
+</category>
+
+<!-- Extension number 26 is not listed in the extension registry. -->
+
+<category name="GL_EXT_rescale_normal" number="27">
+    <enum name="RESCALE_NORMAL_EXT"            count="1"  value="0x803A">
+        <size name="Get" mode="get"/>
+    </enum>
+</category>
+
+<!-- Extension number 28 is a GLX extension. -->
+<!-- Extension number 29 is not listed in the extension registry. -->
+
+<category name="GL_EXT_vertex_array" number="30">
+    <function name="ArrayElementEXT" alias="ArrayElement">
+        <param name="i" type="GLint"/>
+    </function>
+
+    <function name="ColorPointerEXT" offset="assign">
+        <param name="size" type="GLint"/>
+        <param name="type" type="GLenum"/>
+        <param name="stride" type="GLsizei"/>
+        <param name="count" type="GLsizei"/>
+        <param name="pointer" type="const GLvoid *"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="DrawArraysEXT" alias="DrawArrays">
+        <param name="mode" type="GLenum"/>
+        <param name="first" type="GLint"/>
+        <param name="count" type="GLsizei"/>
+    </function>
+
+    <function name="EdgeFlagPointerEXT" offset="assign">
+        <param name="stride" type="GLsizei"/>
+        <param name="count" type="GLsizei"/>
+        <param name="pointer" type="const GLboolean *"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="GetPointervEXT" alias="GetPointerv">
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLvoid **" output="true"/>
+    </function>
+
+    <function name="IndexPointerEXT" offset="assign">
+        <param name="type" type="GLenum"/>
+        <param name="stride" type="GLsizei"/>
+        <param name="count" type="GLsizei"/>
+        <param name="pointer" type="const GLvoid *"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="NormalPointerEXT" offset="assign">
+        <param name="type" type="GLenum"/>
+        <param name="stride" type="GLsizei"/>
+        <param name="count" type="GLsizei"/>
+        <param name="pointer" type="const GLvoid *"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="TexCoordPointerEXT" offset="assign">
+        <param name="size" type="GLint"/>
+        <param name="type" type="GLenum"/>
+        <param name="stride" type="GLsizei"/>
+        <param name="count" type="GLsizei"/>
+        <param name="pointer" type="const GLvoid *"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="VertexPointerEXT" offset="assign">
+        <param name="size" type="GLint"/>
+        <param name="type" type="GLenum"/>
+        <param name="stride" type="GLsizei"/>
+        <param name="count" type="GLsizei"/>
+        <param name="pointer" type="const GLvoid *"/>
+        <glx handcode="true"/>
+    </function>
+</category>
+
+<category name="GL_SGIS_generate_mipmap" number="32">
+    <enum name="GENERATE_MIPMAP_SGIS"          count="1"  value="0x8191">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+    <enum name="GENERATE_MIPMAP_HINT_SGIS"                value="0x8192"/>
+</category>
+
+<category name="GL_SGIX_clipmap" number="33">
+    <enum name="LINEAR_CLIPMAP_LINEAR_SGIX"               value="0x8170"/>
+    <enum name="TEXTURE_CLIPMAP_CENTER_SGIX"   count="2"  value="0x8171">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_CLIPMAP_FRAME_SGIX"    count="1"  value="0x8172">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_CLIPMAP_OFFSET_SGIX"   count="2"  value="0x8173">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX" count="3" value="0x8174">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_CLIPMAP_LOD_OFFSET_SGIX"          value="0x8175"/>
+    <enum name="TEXTURE_CLIPMAP_DEPTH_SGIX"               value="0x8176"/>
+    <enum name="MAX_CLIPMAP_DEPTH_SGIX"                   value="0x8177"/>
+    <enum name="MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX"           value="0x8178"/>
+    <enum name="NEAREST_CLIPMAP_NEAREST_SGIX"             value="0x844D"/>
+    <enum name="NEAREST_CLIPMAP_LINEAR_SGIX"              value="0x844E"/>
+    <enum name="LINEAR_CLIPMAP_NEAREST_SGIX"              value="0x844F"/>
+</category>
+
+<category name="GL_SGIX_shadow" number="34">
+    <enum name="TEXTURE_COMPARE_SGIX"          count="1"  value="0x819A">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_COMPARE_OPERATOR_SGIX" count="1"  value="0x819B">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_LEQUAL_R_SGIX"                    value="0x819C"/>
+    <enum name="TEXTURE_GEQUAL_R_SGIX"                    value="0x819D"/>
+</category>
+
+<category name="GL_SGIS_texture_edge_clamp" number="35">
+    <enum name="CLAMP_TO_EDGE_SGIS"                       value="0x812F"/>
+</category>
+
+<category name="GL_SGIS_texture_border_clamp" number="36">
+    <enum name="CLAMP_TO_BORDER_SGIS"                     value="0x812D"/>
+</category>
+
+<category name="GL_EXT_blend_minmax" number="37">
+    <enum name="FUNC_ADD_EXT"                             value="0x8006"/>
+    <enum name="MIN_EXT"                                  value="0x8007"/>
+    <enum name="MAX_EXT"                                  value="0x8008"/>
+    <enum name="BLEND_EQUATION_EXT"            count="1"  value="0x8009">
+        <size name="Get" mode="get"/>
+    </enum>
+
+    <function name="BlendEquationEXT" alias="BlendEquation">
+        <param name="mode" type="GLenum"/>
+    </function>
+</category>
+
+<category name="GL_EXT_blend_subtract" number="38">
+    <enum name="FUNC_SUBTRACT_EXT"                        value="0x800A"/>
+    <enum name="FUNC_REVERSE_SUBTRACT_EXT"                value="0x800B"/>
+
+    <!-- <function name="BlendEquationEXT" alias="BlendEquation">
+        <param name="mode" type="GLenum"/>
+    </function> -->
+</category>
+
+<!-- Extension number 40 is a GLX extension. -->
+<!-- Extension number 41 is a GLX extension. -->
+<!-- Extension number 42 is a GLX extension. -->
+<!-- Extension number 43 is a GLX extension. -->
+<!-- Extension number 44 is a GLX extension. -->
+<!-- Extension number 46 is not listed in the extension registry. -->
+<!-- Extension number 47 is a GLX extension. -->
+<!-- Extension number 48 is not listed in the extension registry. -->
+<!-- Extension number 49 is a GLX extension. -->
+<!-- Extension number 50 is a GLX extension. -->
+
+<category name="GL_SGIX_sprite" number="52">
+    <function name="SpriteParameterfSGIX">
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLfloat"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="SpriteParameterfvSGIX">
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLfloat *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="SpriteParameteriSGIX">
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="SpriteParameterivSGIX">
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLint *"/>
+        <glx ignore="true"/>
+    </function>
+</category>
+
+<category name="GL_EXT_point_parameters" number="54">
+    <enum name="POINT_SIZE_MIN_EXT"            count="1"  value="0x8126">
+        <size name="PointParameterfvEXT"/>
+    </enum>
+    <enum name="POINT_SIZE_MAX_EXT"            count="1"  value="0x8127">
+        <size name="PointParameterfvEXT"/>
+    </enum>
+    <enum name="POINT_FADE_THRESHOLD_SIZE_EXT" count="1"  value="0x8128">
+        <size name="PointParameterfvEXT"/>
+    </enum>
+    <enum name="POINT_DISTANCE_ATTENUATION_EXT" count="3" value="0x8129">
+        <size name="PointParameterfvEXT"/>
+    </enum>
+
+    <function name="PointParameterfEXT" offset="assign">
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLfloat"/>
+        <glx rop="2065"/>
+    </function>
+
+    <function name="PointParameterfvEXT" offset="assign">
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLfloat *" variable_param="pname"/>
+        <glx rop="2066"/>
+    </function>
+</category>
+
+<category name="GL_SGIX_instruments" number="55">
+    <function name="GetInstrumentsSGIX">
+        <return type="GLint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="InstrumentsBufferSGIX">
+        <param name="size" type="GLsizei"/>
+        <param name="buffer" type="GLint *" output="true"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="PollInstrumentsSGIX">
+        <param name="marker_p" type="GLint *" output="true"/>
+        <return type="GLint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="ReadInstrumentsSGIX">
+        <param name="marker" type="GLint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="StartInstrumentsSGIX">
+        <glx ignore="true"/>
+    </function>
+
+    <function name="StopInstrumentsSGIX">
+        <param name="marker" type="GLint"/>
+        <glx ignore="true"/>
+    </function>
+</category>
+
+<category name="GL_SGIX_texture_scale_bias" number="56">
+    <enum name="POST_TEXTURE_FILTER_BIAS_SGIX"  count="4" value="0x8179">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+    <enum name="POST_TEXTURE_FILTER_SCALE_SGIX" count="4" value="0x817A">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+    <enum name="POST_TEXTURE_FILTER_BIAS_RANGE_SGIX"      value="0x817B"/>
+    <enum name="POST_TEXTURE_FILTER_SCALE_RANGE_SGIX"     value="0x817C"/>
+</category>
+
+<category name="GL_SGIX_framezoom" number="57">
+    <function name="FrameZoomSGIX">
+        <param name="factor" type="GLint"/>
+        <glx rop="2072" ignore="true"/>
+    </function>
+</category>
+
+<category name="GL_SGIX_tag_sample_buffer" number="58">
+    <function name="TagSampleBufferSGIX">
+        <glx rop="2050" ignore="true"/>
+    </function>
+</category>
+
+<!-- Extension number 59 is not listed in the extension registry. -->
+
+<category name="GL_SGIX_reference_plane" number="60">
+    <function name="ReferencePlaneSGIX">
+        <param name="equation" type="const GLdouble *" count="4"/>
+        <glx rop="2071" ignore="true"/>
+    </function>
+</category>
+
+<category name="GL_SGIX_flush_raster" number="61">
+    <function name="FlushRasterSGIX">
+        <glx vendorpriv="4105" ignore="true"/>
+    </function>
+</category>
+
+<!-- Extension number 62 is a GLX extension. -->
+
+<category name="GL_SGIX_depth_texture" number="63">
+    <enum name="DEPTH_COMPONENT16_SGIX"                   value="0x81A5"/>
+    <enum name="DEPTH_COMPONENT24_SGIX"                   value="0x81A6"/>
+    <enum name="DEPTH_COMPONENT32_SGIX"                   value="0x81A7"/>
+</category>
+
+<category name="GL_SGIS_fog_function" number="64">
+    <function name="FogFuncSGIS">
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="points" type="const GLfloat *" count="n" count_scale="2"/>
+        <glx rop="2067" ignore="true"/>
+    </function>
+
+    <function name="GetFogFuncSGIS">
+        <param name="points" type="GLfloat *" output="true"/>
+        <!-- GLX protocol for this function is unknown. -->
+    </function>
+</category>
+
+<category name="GL_SGIX_fog_offset" number="65">
+    <enum name="FOG_OFFSET_SGIX"                          value="0x8198"/>
+    <enum name="FOG_OFFSET_VALUE_SGIX"         count="1"  value="0x8199">
+        <size name="Fogfv"/>
+        <size name="Fogiv"/>
+    </enum>
+</category>
+
+<category name="GL_HP_image_transform" number="66">
+    <function name="ImageTransformParameteriHP">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLint"/>
+    </function>
+
+    <function name="ImageTransformParameterfHP">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLfloat"/>
+    </function>
+
+    <function name="ImageTransformParameterivHP">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLint *"/>
+    </function>
+
+    <function name="ImageTransformParameterfvHP">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLfloat *"/>
+    </function>
+
+    <function name="GetImageTransformParameterivHP">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true" variable_param="pname"/>
+    </function>
+
+    <function name="GetImageTransformParameterfvHP">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
+    </function>
+</category>
+
+<category name="GL_HP_convolution_border_modes" number="67">
+    <enum name="IGNORE_BORDER_HP"                         value="0x8150"/>
+    <enum name="CONSTANT_BORDER_HP"                       value="0x8151"/>
+    <enum name="REPLICATE_BORDER_HP"                      value="0x8153"/>
+    <enum name="CONVOLUTION_BORDER_COLOR_HP"   count="4"  value="0x8154">
+        <size name="ConvolutionParameterfv"/>
+        <size name="ConvolutionParameteriv"/>
+        <size name="GetConvolutionParameterfv" mode="get"/>
+        <size name="GetConvolutionParameteriv" mode="get"/>
+    </enum>
+</category>
+
+<!-- Extension number 68 is not listed in the extension registry. -->
+<!-- Extension number 70 is not listed in the extension registry. -->
+<!-- Extension number 71 is not listed in the extension registry. -->
+<!-- Extension number 72 is not listed in the extension registry. -->
+<!-- Extension number 73 is not listed in the extension registry. -->
+
+<category name="GL_EXT_color_subtable" number="74">
+    <function name="ColorSubTableEXT" alias="ColorSubTable" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="start" type="GLsizei"/>
+        <param name="count" type="GLsizei"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="data" type="const GLvoid *"/>
+    </function>
+
+    <function name="CopyColorSubTableEXT" alias="CopyColorSubTable" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="start" type="GLsizei"/>
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+        <param name="width" type="GLsizei"/>
+    </function>
+</category>
+
+<!-- Extension number 75 is a GLU extension. -->
+
+<category name="GL_PGI_misc_hints" number="77">
+    <function name="HintPGI">
+        <param name="target" type="GLenum"/>
+        <param name="mode" type="GLint"/>
+        <glx ignore="true"/>
+    </function>
+</category>
+
+<category name="GL_EXT_paletted_texture" number="78">
+    <enum name="COLOR_TABLE_FORMAT_EXT"        count="1"  value="0x80D8">
+        <size name="GetColorTableParameterfv" mode="get"/>
+        <size name="GetColorTableParameteriv" mode="get"/>
+    </enum>
+    <enum name="COLOR_TABLE_WIDTH_EXT"         count="1"  value="0x80D9">
+        <size name="GetColorTableParameterfv" mode="get"/>
+        <size name="GetColorTableParameteriv" mode="get"/>
+    </enum>
+    <enum name="COLOR_TABLE_RED_SIZE_EXT"      count="1"  value="0x80DA">
+        <size name="GetColorTableParameterfv" mode="get"/>
+        <size name="GetColorTableParameteriv" mode="get"/>
+    </enum>
+    <enum name="COLOR_TABLE_GREEN_SIZE_EXT"    count="1"  value="0x80DB">
+        <size name="GetColorTableParameterfv" mode="get"/>
+        <size name="GetColorTableParameteriv" mode="get"/>
+    </enum>
+    <enum name="COLOR_TABLE_BLUE_SIZE_EXT"     count="1"  value="0x80DC">
+        <size name="GetColorTableParameterfv" mode="get"/>
+        <size name="GetColorTableParameteriv" mode="get"/>
+    </enum>
+    <enum name="COLOR_TABLE_ALPHA_SIZE_EXT"    count="1"  value="0x80DD">
+        <size name="GetColorTableParameterfv" mode="get"/>
+        <size name="GetColorTableParameteriv" mode="get"/>
+    </enum>
+    <enum name="COLOR_TABLE_LUMINANCE_SIZE_EXT" count="1" value="0x80DE">
+        <size name="GetColorTableParameterfv" mode="get"/>
+        <size name="GetColorTableParameteriv" mode="get"/>
+    </enum>
+    <enum name="COLOR_TABLE_INTENSITY_SIZE_EXT" count="1" value="0x80DF">
+        <size name="GetColorTableParameterfv" mode="get"/>
+        <size name="GetColorTableParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_INDEX_SIZE_EXT"        count="1"  value="0x80ED">
+        <size name="GetTexLevelParameterfv" mode="get"/>
+        <size name="GetTexLevelParameteriv" mode="get"/>
+    </enum>
+
+    <function name="ColorTableEXT" alias="ColorTable">
+        <param name="target" type="GLenum"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="width" type="GLsizei"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="table" type="const GLvoid *"/>
+    </function>
+
+    <function name="GetColorTableEXT" alias="GetColorTable">
+        <param name="target" type="GLenum"/>
+        <param name="format" type="GLenum"/>
+        <param name="type" type="GLenum"/>
+        <param name="table" type="GLvoid *" output="true" img_width="width" img_format="format" img_type="type"/>
+        <glx vendorpriv="4098" dimensions_in_reply="true"/>
+    </function>
+
+    <function name="GetColorTableParameterivEXT" alias="GetColorTableParameteriv">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true" variable_param="pname"/>
+        <glx vendorpriv="4100"/>
+    </function>
+
+    <function name="GetColorTableParameterfvEXT" alias="GetColorTableParameterfv">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
+        <glx vendorpriv="4099"/>
+    </function>
+</category>
+
+<category name="GL_EXT_clip_volume_hint" number="79">
+    <enum name="CLIP_VOLUME_CLIPPING_HINT_EXT" count="1"  value="0x80F0">
+        <size name="Get" mode="get"/>
+    </enum>
+</category>
+
+<category name="GL_SGIX_list_priority" number="80">
+    <function name="GetListParameterfvSGIX">
+        <param name="list" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetListParameterivSGIX">
+        <param name="list" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true" variable_param="pname"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="ListParameterfSGIX">
+        <param name="list" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLfloat"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="ListParameterfvSGIX">
+        <param name="list" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLfloat *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="ListParameteriSGIX">
+        <param name="list" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="ListParameterivSGIX">
+        <param name="list" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLint *"/>
+        <glx ignore="true"/>
+    </function>
+</category>
+
+<!-- Extension number 82 is not listed in the extension registry. -->
+<!-- Extension number 83 is a GLX extension. -->
+
+<category name="GL_SGIX_texture_lod_bias" number="84">
+    <enum name="TEXTURE_LOD_BIAS_S_SGIX"       count="1"  value="0x818E">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_LOD_BIAS_T_SGIX"       count="1"  value="0x818F">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_LOD_BIAS_R_SGIX"       count="1"  value="0x8190">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+</category>
+
+<!-- Extension number 85 is a GLU extension. -->
+<!-- Extension number 86 is a GLX extension. -->
+<!-- Extension number 87 is not listed in the extension registry. -->
+<!-- Extension number 88 is not listed in the extension registry. -->
+<!-- Extension number 89 is not listed in the extension registry. -->
+
+
+<category name="GL_SGIX_shadow_ambient" number="90">
+    <enum name="SHADOW_AMBIENT_SGIX"           count="1"  value="0x80BF">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+</category>
+
+<!-- Extension number 91 is a GLX extension. -->
+<!-- Extension number 92 is a GLX extension. -->
+
+<category name="GL_EXT_index_material" number="94">
+    <function name="IndexMaterialEXT">
+        <param name="face" type="GLenum"/>
+        <param name="mode" type="GLenum"/>
+        <glx ignore="true"/>
+    </function>
+</category>
+
+<category name="GL_EXT_index_func" number="95">
+    <function name="IndexFuncEXT">
+        <param name="func" type="GLenum"/>
+        <param name="ref" type="GLclampf"/>
+        <glx ignore="true"/>
+    </function>
+</category>
+
+<category name="GL_EXT_compiled_vertex_array" number="97">
+    <function name="LockArraysEXT" offset="assign">
+        <param name="first" type="GLint"/>
+        <param name="count" type="GLsizei"/>
+        <glx handcode="true" ignore="true"/>
+    </function>
+
+    <function name="UnlockArraysEXT" offset="assign">
+        <glx handcode="true" ignore="true"/>
+    </function>
+</category>
+
+<category name="GL_EXT_cull_vertex" number="98">
+    <enum name="CULL_VERTEX_EXT"                          value="0x81AA"/>
+    <enum name="CULL_VERTEX_OBJECT_POSITION_EXT" count="4" value="0x81AB">
+        <size name="CullParameterfv"/>
+        <size name="CullParameterdv"/>
+    </enum>
+    <enum name="CULL_VERTEX_EYE_POSITION_EXT"  count="4"  value="0x81AC">
+        <size name="CullParameterfv"/>
+        <size name="CullParameterdv"/>
+    </enum>
+
+    <function name="CullParameterdvEXT" offset="assign" static_dispatch="false">
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLdouble *"/> <!-- Spec bug. Should be const. -->
+        <glx ignore="true"/>
+    </function>
+
+    <function name="CullParameterfvEXT" offset="assign" static_dispatch="false">
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat *"/> <!-- Spec bug. Should be const. -->
+        <glx ignore="true"/>
+    </function>
+</category>
+
+<!-- Extension number 99 is not listed in the extension registry. -->
+<!-- Extension number 100 is a GLU extension. -->
+
+<!-- Shouldn't this be EXT_fragment_lighting? -->
+<category name="GL_SGIX_fragment_lighting" number="102">
+    <function name="FragmentColorMaterialSGIX">
+        <param name="face" type="GLenum"/>
+        <param name="mode" type="GLenum"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="FragmentLightfSGIX">
+        <param name="light" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLfloat"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="FragmentLightfvSGIX">
+        <param name="light" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLfloat *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="FragmentLightiSGIX">
+        <param name="light" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="FragmentLightivSGIX">
+        <param name="light" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLint *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="FragmentLightModelfSGIX">
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLfloat"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="FragmentLightModelfvSGIX">
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLfloat *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="FragmentLightModeliSGIX">
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="FragmentLightModelivSGIX">
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLint *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="FragmentMaterialfSGIX">
+        <param name="face" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLfloat"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="FragmentMaterialfvSGIX">
+        <param name="face" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLfloat *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="FragmentMaterialiSGIX">
+        <param name="face" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="FragmentMaterialivSGIX">
+        <param name="face" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLint *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetFragmentLightfvSGIX">
+        <param name="light" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetFragmentLightivSGIX">
+        <param name="light" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true" variable_param="pname"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetFragmentMaterialfvSGIX">
+        <param name="face" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetFragmentMaterialivSGIX">
+        <param name="face" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true" variable_param="pname"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="LightEnviSGIX">
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLint"/>
+        <glx ignore="true"/>
+    </function>
+</category>
+
+<!-- Extension number 103 is not listed in the extension registry. -->
+<!-- Extension number 104 is not listed in the extension registry. -->
+<!-- Extension number 105 is not listed in the extension registry. -->
+<!-- Extension number 106 is not listed in the extension registry. -->
+<!-- Extension number 107 is not listed in the extension registry. -->
+<!-- Extension number 108 is not listed in the extension registry. -->
+<!-- Extension number 109 is not listed in the extension registry. -->
+
+<category name="GL_IBM_rasterpos_clip" number="110">
+    <enum name="RASTER_POSITION_UNCLIPPED_IBM"  count="1" value="0x19262">
+        <size name="Get" mode="get"/>
+    </enum>
+</category>
+
+<category name="GL_EXT_draw_range_elements" number="112">
+    <function name="DrawRangeElementsEXT" alias="DrawRangeElements">
+        <param name="mode" type="GLenum"/>
+        <param name="start" type="GLuint"/>
+        <param name="end" type="GLuint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="type" type="GLenum"/>
+        <param name="indices" type="const GLvoid *"/>
+        <glx handcode="true"/>
+    </function>
+</category>
+
+<!-- Extension number 115 is a GLX extension. -->
+<!-- Extension number 116 is not listed in the extension registry. -->
+
+<category name="GL_EXT_light_texture" number="117">
+    <function name="ApplyTextureEXT">
+        <param name="mode" type="GLenum"/>
+    </function>
+
+    <function name="TextureLightEXT">
+        <param name="pname" type="GLenum"/>
+    </function>
+
+    <function name="TextureMaterialEXT">
+        <param name="face" type="GLenum"/>
+        <param name="mode" type="GLenum"/>
+    </function>
+</category>
+
+<!-- Extension number 118 is not listed in the extension registry. -->
+<!-- Extension number 121 is not listed in the extension registry. -->
+<!-- Extension number 122 is not listed in the extension registry. -->
+<!-- Extension number 123 is not listed in the extension registry. -->
+<!-- Extension number 124 is not listed in the extension registry. -->
+<!-- Extension number 125 is not listed in the extension registry. -->
+<!-- Extension number 126 is not listed in the extension registry. -->
+<!-- Extension number 128 is not listed in the extension registry. -->
+<!-- Extension number 130 is not listed in the extension registry. -->
+<!-- Extension number 131 is not listed in the extension registry. -->
+
+<category name="GL_SGIX_async" number="132">
+    <function name="AsyncMarkerSGIX">
+        <param name="marker" type="GLuint"/>
+    </function>
+
+    <function name="FinishAsyncSGIX">
+        <param name="markerp" type="GLuint *"/> <!-- Spec bug. Should be const. -->
+        <return type="GLint"/>
+    </function>
+
+    <function name="PollAsyncSGIX">
+        <param name="markerp" type="GLuint *"/> <!-- Spec bug. Should be const. -->
+        <return type="GLint"/>
+    </function>
+
+    <function name="GenAsyncMarkersSGIX">
+        <param name="range" type="GLsizei"/>
+        <return type="GLuint"/>
+    </function>
+
+    <function name="DeleteAsyncMarkersSGIX">
+        <param name="marker" type="GLuint"/>
+        <param name="range" type="GLsizei"/>
+    </function>
+
+    <function name="IsAsyncMarkerSGIX">
+        <param name="marker" type="GLuint"/>
+        <return type="GLboolean"/>
+    </function>
+</category>
+
+<category name="GL_INTEL_parallel_arrays" number="136">
+    <function name="VertexPointervINTEL">
+        <param name="size" type="GLint"/>
+        <param name="type" type="GLenum"/>
+        <param name="pointer" type="const GLvoid **"/>
+    </function>
+
+    <function name="NormalPointervINTEL">
+        <param name="type" type="GLenum"/>
+        <param name="pointer" type="const GLvoid **"/>
+    </function>
+
+    <function name="ColorPointervINTEL">
+        <param name="size" type="GLint"/>
+        <param name="type" type="GLenum"/>
+        <param name="pointer" type="const GLvoid **"/>
+    </function>
+
+    <function name="TexCoordPointervINTEL">
+        <param name="size" type="GLint"/>
+        <param name="type" type="GLenum"/>
+        <param name="pointer" type="const GLvoid **"/>
+    </function>
+</category>
+
+<category name="GL_HP_occlusion_test" number="137">
+    <enum name="OCCLUSION_TEST_HP"             count="1"  value="0x8165">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="OCCLUSION_TEST_RESULT_HP"      count="1"  value="0x8166">
+        <size name="Get" mode="get"/>
+    </enum>
+</category>
+
+<category name="GL_EXT_pixel_transform" number="138">
+    <function name="PixelTransformParameteriEXT">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLint"/>
+    </function>
+
+    <function name="PixelTransformParameterfEXT">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLfloat"/>
+    </function>
+
+    <function name="PixelTransformParameterivEXT">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLint *"/>
+    </function>
+
+    <function name="PixelTransformParameterfvEXT">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLfloat *"/>
+    </function>
+</category>
+
+<!-- Extension number 140 is not listed in the extension registry. -->
+
+<category name="GL_EXT_shared_texture_palette" number="141">
+    <enum name="SHARED_TEXTURE_PALETTE_EXT"    count="1"  value="0x81FB"/>
+</category>
+
+<!-- Extension number 142 is a GLX extension. -->
+<!-- Extension number 143 is not listed in the extension registry. -->
+
+<category name="GL_EXT_separate_specular_color" number="144">
+    <enum name="LIGHT_MODEL_COLOR_CONTROL_EXT" count="1"  value="0x81F8">
+        <size name="LightModelfv"/>
+        <size name="LightModeliv"/>
+    </enum>
+    <enum name="SINGLE_COLOR_EXT"                         value="0x81F9"/>
+    <enum name="SEPARATE_SPECULAR_COLOR_EXT"              value="0x81FA"/>
+</category>
+
+<category name="GL_EXT_secondary_color" number="145">
+    <function name="SecondaryColor3bEXT" offset="assign" vectorequiv="SecondaryColor3bvEXT">
+        <param name="red" type="GLbyte"/>
+        <param name="green" type="GLbyte"/>
+        <param name="blue" type="GLbyte"/>
+    </function>
+
+    <function name="SecondaryColor3bvEXT" offset="assign">
+        <param name="v" type="const GLbyte *" count="3"/>
+        <glx rop="4126"/>
+    </function>
+
+    <function name="SecondaryColor3dEXT" offset="assign" vectorequiv="SecondaryColor3dvEXT">
+        <param name="red" type="GLdouble"/>
+        <param name="green" type="GLdouble"/>
+        <param name="blue" type="GLdouble"/>
+    </function>
+
+    <function name="SecondaryColor3dvEXT" offset="assign">
+        <param name="v" type="const GLdouble *" count="3"/>
+        <glx rop="4130"/>
+    </function>
+
+    <function name="SecondaryColor3fEXT" offset="assign" vectorequiv="SecondaryColor3fvEXT">
+        <param name="red" type="GLfloat"/>
+        <param name="green" type="GLfloat"/>
+        <param name="blue" type="GLfloat"/>
+    </function>
+
+    <function name="SecondaryColor3fvEXT" offset="assign">
+        <param name="v" type="const GLfloat *" count="3"/>
+        <glx rop="4129"/>
+    </function>
+
+    <function name="SecondaryColor3iEXT" offset="assign" vectorequiv="SecondaryColor3ivEXT">
+        <param name="red" type="GLint"/>
+        <param name="green" type="GLint"/>
+        <param name="blue" type="GLint"/>
+    </function>
+
+    <function name="SecondaryColor3ivEXT" offset="assign">
+        <param name="v" type="const GLint *" count="3"/>
+        <glx rop="4128"/>
+    </function>
+
+    <function name="SecondaryColor3sEXT" offset="assign" vectorequiv="SecondaryColor3svEXT">
+        <param name="red" type="GLshort"/>
+        <param name="green" type="GLshort"/>
+        <param name="blue" type="GLshort"/>
+    </function>
+
+    <function name="SecondaryColor3svEXT" offset="assign">
+        <param name="v" type="const GLshort *" count="3"/>
+        <glx rop="4127"/>
+    </function>
+
+    <function name="SecondaryColor3ubEXT" offset="assign" vectorequiv="SecondaryColor3ubvEXT">
+        <param name="red" type="GLubyte"/>
+        <param name="green" type="GLubyte"/>
+        <param name="blue" type="GLubyte"/>
+    </function>
+
+    <function name="SecondaryColor3ubvEXT" offset="assign">
+        <param name="v" type="const GLubyte *" count="3"/>
+        <glx rop="4131"/>
+    </function>
+
+    <function name="SecondaryColor3uiEXT" offset="assign" vectorequiv="SecondaryColor3uivEXT">
+        <param name="red" type="GLuint"/>
+        <param name="green" type="GLuint"/>
+        <param name="blue" type="GLuint"/>
+    </function>
+
+    <function name="SecondaryColor3uivEXT" offset="assign">
+        <param name="v" type="const GLuint *" count="3"/>
+        <glx rop="4133"/>
+    </function>
+
+    <function name="SecondaryColor3usEXT" offset="assign" vectorequiv="SecondaryColor3usvEXT">
+        <param name="red" type="GLushort"/>
+        <param name="green" type="GLushort"/>
+        <param name="blue" type="GLushort"/>
+    </function>
+
+    <function name="SecondaryColor3usvEXT" offset="assign">
+        <param name="v" type="const GLushort *" count="3"/>
+        <glx rop="4132"/>
+    </function>
+
+    <function name="SecondaryColorPointerEXT" offset="assign">
+        <param name="size" type="GLint"/>
+        <param name="type" type="GLenum"/>
+        <param name="stride" type="GLsizei"/>
+        <param name="pointer" type="const GLvoid *"/>
+        <glx handcode="true"/>
+    </function>
+</category>
+
+<category name="GL_EXT_texture_perturb_normal" number="147">
+    <function name="TextureNormalEXT">
+        <param name="mode" type="GLenum"/>
+    </function>
+</category>
+
+<category name="GL_EXT_multi_draw_arrays" number="148">
+    <function name="MultiDrawArraysEXT" offset="assign">
+        <param name="mode" type="GLenum"/>
+        <param name="first" type="GLint *"/> <!-- Spec bug. Should be const. -->
+        <param name="count" type="GLsizei *"/> <!-- Spec bug. Should be const. -->
+        <param name="primcount" type="GLsizei"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="MultiDrawElementsEXT" offset="assign">
+        <param name="mode" type="GLenum"/>
+        <param name="count" type="const GLsizei *"/>
+        <param name="type" type="GLenum"/>
+        <param name="indices" type="const GLvoid **"/>
+        <param name="primcount" type="GLsizei"/>
+        <glx handcode="true"/>
+    </function>
+</category>
+
+<category name="GL_EXT_fog_coord" number="149">
+    <function name="FogCoordfEXT" offset="assign" vectorequiv="FogCoordfvEXT">
+        <param name="coord" type="GLfloat"/>
+    </function>
+
+    <function name="FogCoordfvEXT" offset="assign">
+        <param name="coord" type="const GLfloat *" count="1"/>
+        <glx rop="4124"/>
+    </function>
+
+    <function name="FogCoorddEXT" offset="assign" vectorequiv="FogCoorddvEXT">
+        <param name="coord" type="GLdouble"/>
+    </function>
+
+    <function name="FogCoorddvEXT" offset="assign">
+        <param name="coord" type="const GLdouble *" count="1"/>
+        <glx rop="4125"/>
+    </function>
+
+    <function name="FogCoordPointerEXT" offset="assign">
+        <param name="type" type="GLenum"/>
+        <param name="stride" type="GLsizei"/>
+        <param name="pointer" type="const GLvoid *"/>
+        <glx handcode="true"/>
+    </function>
+</category>
+
+<!-- Extension number 150 is not listed in the extension registry. -->
+<!-- Extension number 151 is not listed in the extension registry. -->
+<!-- Extension number 152 is not listed in the extension registry. -->
+<!-- Extension number 153 is not listed in the extension registry. -->
+<!-- Extension number 154 is not listed in the extension registry. -->
+
+<category name="GL_EXT_coordinate_frame" number="156">
+    <function name="Tangent3bEXT">
+        <param name="tx" type="GLbyte"/>
+        <param name="ty" type="GLbyte"/>
+        <param name="tz" type="GLbyte"/>
+    </function>
+
+    <function name="Tangent3bvEXT">
+        <param name="v" type="const GLbyte *"/>
+    </function>
+
+    <function name="Tangent3dEXT">
+        <param name="tx" type="GLdouble"/>
+        <param name="ty" type="GLdouble"/>
+        <param name="tz" type="GLdouble"/>
+    </function>
+
+    <function name="Tangent3dvEXT">
+        <param name="v" type="const GLdouble *"/>
+    </function>
+
+    <function name="Tangent3fEXT">
+        <param name="tx" type="GLfloat"/>
+        <param name="ty" type="GLfloat"/>
+        <param name="tz" type="GLfloat"/>
+    </function>
+
+    <function name="Tangent3fvEXT">
+        <param name="v" type="const GLfloat *"/>
+    </function>
+
+    <function name="Tangent3iEXT">
+        <param name="tx" type="GLint"/>
+        <param name="ty" type="GLint"/>
+        <param name="tz" type="GLint"/>
+    </function>
+
+    <function name="Tangent3ivEXT">
+        <param name="v" type="const GLint *"/>
+    </function>
+
+    <function name="Tangent3sEXT">
+        <param name="tx" type="GLshort"/>
+        <param name="ty" type="GLshort"/>
+        <param name="tz" type="GLshort"/>
+    </function>
+
+    <function name="Tangent3svEXT">
+        <param name="v" type="const GLshort *"/>
+    </function>
+
+    <function name="Binormal3bEXT">
+        <param name="bx" type="GLbyte"/>
+        <param name="by" type="GLbyte"/>
+        <param name="bz" type="GLbyte"/>
+    </function>
+
+    <function name="Binormal3bvEXT">
+        <param name="v" type="const GLbyte *"/>
+    </function>
+
+    <function name="Binormal3dEXT">
+        <param name="bx" type="GLdouble"/>
+        <param name="by" type="GLdouble"/>
+        <param name="bz" type="GLdouble"/>
+    </function>
+
+    <function name="Binormal3dvEXT">
+        <param name="v" type="const GLdouble *"/>
+    </function>
+
+    <function name="Binormal3fEXT">
+        <param name="bx" type="GLfloat"/>
+        <param name="by" type="GLfloat"/>
+        <param name="bz" type="GLfloat"/>
+    </function>
+
+    <function name="Binormal3fvEXT">
+        <param name="v" type="const GLfloat *"/>
+    </function>
+
+    <function name="Binormal3iEXT">
+        <param name="bx" type="GLint"/>
+        <param name="by" type="GLint"/>
+        <param name="bz" type="GLint"/>
+    </function>
+
+    <function name="Binormal3ivEXT">
+        <param name="v" type="const GLint *"/>
+    </function>
+
+    <function name="Binormal3sEXT">
+        <param name="bx" type="GLshort"/>
+        <param name="by" type="GLshort"/>
+        <param name="bz" type="GLshort"/>
+    </function>
+
+    <function name="Binormal3svEXT">
+        <param name="v" type="const GLshort *"/>
+    </function>
+
+    <function name="TangentPointerEXT">
+        <param name="type" type="GLenum"/>
+        <param name="stride" type="GLsizei"/>
+        <param name="pointer" type="const GLvoid *"/>
+    </function>
+
+    <function name="BinormalPointerEXT">
+        <param name="type" type="GLenum"/>
+        <param name="stride" type="GLsizei"/>
+        <param name="pointer" type="const GLvoid *"/>
+    </function>
+</category>
+
+<!-- Extension number 157 is not listed in the extension registry. -->
+
+<category name="GL_EXT_texture_env_combine" number="158">
+    <enum name="COMBINE_EXT"                              value="0x8570"/>
+    <enum name="COMBINE_RGB_EXT"               count="1"  value="0x8571"/>
+    <enum name="COMBINE_ALPHA_EXT"             count="1"  value="0x8572"/>
+    <enum name="RGB_SCALE_EXT"                 count="1"  value="0x8573"/>
+    <enum name="ADD_SIGNED_EXT"                           value="0x8574"/>
+    <enum name="INTERPOLATE_EXT"                          value="0x8575"/>
+    <enum name="CONSTANT_EXT"                             value="0x8576"/>
+    <enum name="PRIMARY_COLOR_EXT"                        value="0x8577"/>
+    <enum name="PREVIOUS_EXT"                             value="0x8578"/>
+    <enum name="SOURCE0_RGB_EXT"               count="1"  value="0x8580"/>
+    <enum name="SOURCE1_RGB_EXT"               count="1"  value="0x8581"/>
+    <enum name="SOURCE2_RGB_EXT"               count="1"  value="0x8582"/>
+    <enum name="SOURCE0_ALPHA_EXT"             count="1"  value="0x8588"/>
+    <enum name="SOURCE1_ALPHA_EXT"             count="1"  value="0x8589"/>
+    <enum name="SOURCE2_ALPHA_EXT"             count="1"  value="0x858A"/>
+    <enum name="OPERAND0_RGB_EXT"              count="1"  value="0x8590"/>
+    <enum name="OPERAND1_RGB_EXT"              count="1"  value="0x8591"/>
+    <enum name="OPERAND2_RGB_EXT"              count="1"  value="0x8592"/>
+    <enum name="OPERAND0_ALPHA_EXT"            count="1"  value="0x8598"/>
+    <enum name="OPERAND1_ALPHA_EXT"            count="1"  value="0x8599"/>
+    <enum name="OPERAND2_ALPHA_EXT"            count="1"  value="0x859A"/>
+</category>
+
+<category name="GL_SGIX_pixel_texture" number="160">
+    <function name="PixelTexGenSGIX" offset="assign" static_dispatch="false">
+        <param name="mode" type="GLenum"/>
+        <glx rop="2059" ignore="true"/>
+    </function>
+</category>
+
+<!-- Extension number 161 is not listed in the extension registry. -->
+<!-- Extension number 162 is not listed in the extension registry. -->
+
+<category name="GL_SUNX_constant_data" number="163">
+    <function name="FinishTextureSUNX">
+    </function>
+</category>
+
+<category name="GL_SUN_global_alpha" number="164">
+    <function name="GlobalAlphaFactorbSUN">
+        <param name="factor" type="GLbyte"/>
+    </function>
+
+    <function name="GlobalAlphaFactorsSUN">
+        <param name="factor" type="GLshort"/>
+    </function>
+
+    <function name="GlobalAlphaFactoriSUN">
+        <param name="factor" type="GLint"/>
+    </function>
+
+    <function name="GlobalAlphaFactorfSUN">
+        <param name="factor" type="GLfloat"/>
+    </function>
+
+    <function name="GlobalAlphaFactordSUN">
+        <param name="factor" type="GLdouble"/>
+    </function>
+
+    <function name="GlobalAlphaFactorubSUN">
+        <param name="factor" type="GLubyte"/>
+    </function>
+
+    <function name="GlobalAlphaFactorusSUN">
+        <param name="factor" type="GLushort"/>
+    </function>
+
+    <function name="GlobalAlphaFactoruiSUN">
+        <param name="factor" type="GLuint"/>
+    </function>
+</category>
+
+<category name="GL_SUN_triangle_list" number="165">
+    <function name="ReplacementCodeuiSUN">
+        <param name="code" type="GLuint"/>
+    </function>
+
+    <function name="ReplacementCodeusSUN">
+        <param name="code" type="GLushort"/>
+    </function>
+
+    <function name="ReplacementCodeubSUN">
+        <param name="code" type="GLubyte"/>
+    </function>
+
+    <function name="ReplacementCodeuivSUN">
+        <param name="code" type="const GLuint *"/>
+    </function>
+
+    <function name="ReplacementCodeusvSUN">
+        <param name="code" type="const GLushort *"/>
+    </function>
+
+    <function name="ReplacementCodeubvSUN">
+        <param name="code" type="const GLubyte *"/>
+    </function>
+
+    <function name="ReplacementCodePointerSUN">
+        <param name="type" type="GLenum"/>
+        <param name="stride" type="GLsizei"/>
+        <param name="pointer" type="const GLvoid *"/>
+    </function>
+</category>
+
+<category name="GL_SUN_vertex" number="166">
+    <function name="Color4ubVertex2fSUN">
+        <param name="r" type="GLubyte"/>
+        <param name="g" type="GLubyte"/>
+        <param name="b" type="GLubyte"/>
+        <param name="a" type="GLubyte"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+    </function>
+
+    <function name="Color4ubVertex2fvSUN">
+        <param name="c" type="const GLubyte *"/>
+        <param name="v" type="const GLfloat *"/>
+    </function>
+
+    <function name="Color4ubVertex3fSUN">
+        <param name="r" type="GLubyte"/>
+        <param name="g" type="GLubyte"/>
+        <param name="b" type="GLubyte"/>
+        <param name="a" type="GLubyte"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+    </function>
+
+    <function name="Color4ubVertex3fvSUN">
+        <param name="c" type="const GLubyte *"/>
+        <param name="v" type="const GLfloat *"/>
+    </function>
+
+    <function name="Color3fVertex3fSUN">
+        <param name="r" type="GLfloat"/>
+        <param name="g" type="GLfloat"/>
+        <param name="b" type="GLfloat"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+    </function>
+
+    <function name="Color3fVertex3fvSUN">
+        <param name="c" type="const GLfloat *"/>
+        <param name="v" type="const GLfloat *"/>
+    </function>
+
+    <function name="Normal3fVertex3fSUN">
+        <param name="nx" type="GLfloat"/>
+        <param name="ny" type="GLfloat"/>
+        <param name="nz" type="GLfloat"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+    </function>
+
+    <function name="Normal3fVertex3fvSUN">
+        <param name="n" type="const GLfloat *"/>
+        <param name="v" type="const GLfloat *"/>
+    </function>
+
+    <function name="Color4fNormal3fVertex3fSUN">
+        <param name="r" type="GLfloat"/>
+        <param name="g" type="GLfloat"/>
+        <param name="b" type="GLfloat"/>
+        <param name="a" type="GLfloat"/>
+        <param name="nx" type="GLfloat"/>
+        <param name="ny" type="GLfloat"/>
+        <param name="nz" type="GLfloat"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+    </function>
+
+    <function name="Color4fNormal3fVertex3fvSUN">
+        <param name="c" type="const GLfloat *"/>
+        <param name="n" type="const GLfloat *"/>
+        <param name="v" type="const GLfloat *"/>
+    </function>
+
+    <function name="TexCoord2fVertex3fSUN">
+        <param name="s" type="GLfloat"/>
+        <param name="t" type="GLfloat"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+    </function>
+
+    <function name="TexCoord2fVertex3fvSUN">
+        <param name="tc" type="const GLfloat *"/>
+        <param name="v" type="const GLfloat *"/>
+    </function>
+
+    <function name="TexCoord4fVertex4fSUN">
+        <param name="s" type="GLfloat"/>
+        <param name="t" type="GLfloat"/>
+        <param name="p" type="GLfloat"/>
+        <param name="q" type="GLfloat"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+        <param name="w" type="GLfloat"/>
+    </function>
+
+    <function name="TexCoord4fVertex4fvSUN">
+        <param name="tc" type="const GLfloat *"/>
+        <param name="v" type="const GLfloat *"/>
+    </function>
+
+    <function name="TexCoord2fColor4ubVertex3fSUN">
+        <param name="s" type="GLfloat"/>
+        <param name="t" type="GLfloat"/>
+        <param name="r" type="GLubyte"/>
+        <param name="g" type="GLubyte"/>
+        <param name="b" type="GLubyte"/>
+        <param name="a" type="GLubyte"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+    </function>
+
+    <function name="TexCoord2fColor4ubVertex3fvSUN">
+        <param name="tc" type="const GLfloat *"/>
+        <param name="c" type="const GLubyte *"/>
+        <param name="v" type="const GLfloat *"/>
+    </function>
+
+    <function name="TexCoord2fColor3fVertex3fSUN">
+        <param name="s" type="GLfloat"/>
+        <param name="t" type="GLfloat"/>
+        <param name="r" type="GLfloat"/>
+        <param name="g" type="GLfloat"/>
+        <param name="b" type="GLfloat"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+    </function>
+
+    <function name="TexCoord2fColor3fVertex3fvSUN">
+        <param name="tc" type="const GLfloat *"/>
+        <param name="c" type="const GLfloat *"/>
+        <param name="v" type="const GLfloat *"/>
+    </function>
+
+    <function name="TexCoord2fNormal3fVertex3fSUN">
+        <param name="s" type="GLfloat"/>
+        <param name="t" type="GLfloat"/>
+        <param name="nx" type="GLfloat"/>
+        <param name="ny" type="GLfloat"/>
+        <param name="nz" type="GLfloat"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+    </function>
+
+    <function name="TexCoord2fNormal3fVertex3fvSUN">
+        <param name="tc" type="const GLfloat *"/>
+        <param name="n" type="const GLfloat *"/>
+        <param name="v" type="const GLfloat *"/>
+    </function>
+
+    <function name="TexCoord2fColor4fNormal3fVertex3fSUN">
+        <param name="s" type="GLfloat"/>
+        <param name="t" type="GLfloat"/>
+        <param name="r" type="GLfloat"/>
+        <param name="g" type="GLfloat"/>
+        <param name="b" type="GLfloat"/>
+        <param name="a" type="GLfloat"/>
+        <param name="nx" type="GLfloat"/>
+        <param name="ny" type="GLfloat"/>
+        <param name="nz" type="GLfloat"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+    </function>
+
+    <function name="TexCoord2fColor4fNormal3fVertex3fvSUN">
+        <param name="tc" type="const GLfloat *"/>
+        <param name="c" type="const GLfloat *"/>
+        <param name="n" type="const GLfloat *"/>
+        <param name="v" type="const GLfloat *"/>
+    </function>
+
+    <function name="TexCoord4fColor4fNormal3fVertex4fSUN">
+        <param name="s" type="GLfloat"/>
+        <param name="t" type="GLfloat"/>
+        <param name="p" type="GLfloat"/>
+        <param name="q" type="GLfloat"/>
+        <param name="r" type="GLfloat"/>
+        <param name="g" type="GLfloat"/>
+        <param name="b" type="GLfloat"/>
+        <param name="a" type="GLfloat"/>
+        <param name="nx" type="GLfloat"/>
+        <param name="ny" type="GLfloat"/>
+        <param name="nz" type="GLfloat"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+        <param name="w" type="GLfloat"/>
+    </function>
+
+    <function name="TexCoord4fColor4fNormal3fVertex4fvSUN">
+        <param name="tc" type="const GLfloat *"/>
+        <param name="c" type="const GLfloat *"/>
+        <param name="n" type="const GLfloat *"/>
+        <param name="v" type="const GLfloat *"/>
+    </function>
+
+    <function name="ReplacementCodeuiVertex3fSUN">
+        <param name="rc" type="GLuint"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+    </function>
+
+    <function name="ReplacementCodeuiVertex3fvSUN">
+        <param name="rc" type="const GLuint *"/>
+        <param name="v" type="const GLfloat *"/>
+    </function>
+
+    <function name="ReplacementCodeuiColor4ubVertex3fSUN">
+        <param name="rc" type="GLuint"/>
+        <param name="r" type="GLubyte"/>
+        <param name="g" type="GLubyte"/>
+        <param name="b" type="GLubyte"/>
+        <param name="a" type="GLubyte"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+    </function>
+
+    <function name="ReplacementCodeuiColor4ubVertex3fvSUN">
+        <param name="rc" type="const GLuint *"/>
+        <param name="c" type="const GLubyte *"/>
+        <param name="v" type="const GLfloat *"/>
+    </function>
+
+    <function name="ReplacementCodeuiColor3fVertex3fSUN">
+        <param name="rc" type="GLuint"/>
+        <param name="r" type="GLfloat"/>
+        <param name="g" type="GLfloat"/>
+        <param name="b" type="GLfloat"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+    </function>
+
+    <function name="ReplacementCodeuiColor3fVertex3fvSUN">
+        <param name="rc" type="const GLuint *"/>
+        <param name="c" type="const GLfloat *"/>
+        <param name="v" type="const GLfloat *"/>
+    </function>
+
+    <function name="ReplacementCodeuiNormal3fVertex3fSUN">
+        <param name="rc" type="GLuint"/>
+        <param name="nx" type="GLfloat"/>
+        <param name="ny" type="GLfloat"/>
+        <param name="nz" type="GLfloat"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+    </function>
+
+    <function name="ReplacementCodeuiNormal3fVertex3fvSUN">
+        <param name="rc" type="const GLuint *"/>
+        <param name="n" type="const GLfloat *"/>
+        <param name="v" type="const GLfloat *"/>
+    </function>
+
+    <function name="ReplacementCodeuiColor4fNormal3fVertex3fSUN">
+        <param name="rc" type="GLuint"/>
+        <param name="r" type="GLfloat"/>
+        <param name="g" type="GLfloat"/>
+        <param name="b" type="GLfloat"/>
+        <param name="a" type="GLfloat"/>
+        <param name="nx" type="GLfloat"/>
+        <param name="ny" type="GLfloat"/>
+        <param name="nz" type="GLfloat"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+    </function>
+
+    <function name="ReplacementCodeuiColor4fNormal3fVertex3fvSUN">
+        <param name="rc" type="const GLuint *"/>
+        <param name="c" type="const GLfloat *"/>
+        <param name="n" type="const GLfloat *"/>
+        <param name="v" type="const GLfloat *"/>
+    </function>
+
+    <function name="ReplacementCodeuiTexCoord2fVertex3fSUN">
+        <param name="rc" type="GLuint"/>
+        <param name="s" type="GLfloat"/>
+        <param name="t" type="GLfloat"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+    </function>
+
+    <function name="ReplacementCodeuiTexCoord2fVertex3fvSUN">
+        <param name="rc" type="const GLuint *"/>
+        <param name="tc" type="const GLfloat *"/>
+        <param name="v" type="const GLfloat *"/>
+    </function>
+
+    <function name="ReplacementCodeuiTexCoord2fNormal3fVertex3fSUN">
+        <param name="rc" type="GLuint"/>
+        <param name="s" type="GLfloat"/>
+        <param name="t" type="GLfloat"/>
+        <param name="nx" type="GLfloat"/>
+        <param name="ny" type="GLfloat"/>
+        <param name="nz" type="GLfloat"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+    </function>
+
+    <function name="ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN">
+        <param name="rc" type="const GLuint *"/>
+        <param name="tc" type="const GLfloat *"/>
+        <param name="n" type="const GLfloat *"/>
+        <param name="v" type="const GLfloat *"/>
+    </function>
+
+    <function name="ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN">
+        <param name="rc" type="GLuint"/>
+        <param name="s" type="GLfloat"/>
+        <param name="t" type="GLfloat"/>
+        <param name="r" type="GLfloat"/>
+        <param name="g" type="GLfloat"/>
+        <param name="b" type="GLfloat"/>
+        <param name="a" type="GLfloat"/>
+        <param name="nx" type="GLfloat"/>
+        <param name="ny" type="GLfloat"/>
+        <param name="nz" type="GLfloat"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+    </function>
+
+    <function name="ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN">
+        <param name="rc" type="const GLuint *"/>
+        <param name="tc" type="const GLfloat *"/>
+        <param name="c" type="const GLfloat *"/>
+        <param name="n" type="const GLfloat *"/>
+        <param name="v" type="const GLfloat *"/>
+    </function>
+</category>
+
+<!-- Extension number 167 is a WGL extension. -->
+<!-- Extension number 168 is a WGL extension. -->
+<!-- Extension number 169 is a WGL extension. -->
+<!-- Extension number 170 is a WGL extension. -->
+<!-- Extension number 171 is a WGL extension. -->
+<!-- Extension number 172 is a WGL extension. -->
+
+<category name="GL_EXT_blend_func_separate" number="173">
+    <function name="BlendFuncSeparateEXT" offset="assign">
+        <param name="sfactorRGB" type="GLenum"/>
+        <param name="dfactorRGB" type="GLenum"/>
+        <param name="sfactorAlpha" type="GLenum"/>
+        <param name="dfactorAlpha" type="GLenum"/>
+        <glx rop="4134"/>
+    </function>
+</category>
+
+<category name="GL_EXT_stencil_wrap" number="176">
+    <enum name="INCR_WRAP_EXT"                            value="0x8507"/>
+    <enum name="DECR_WRAP_EXT"                            value="0x8508"/>
+</category>
+
+<!-- Extension number 177 is a WGL extension. -->
+
+<category name="GL_NV_texgen_reflection" number="179">
+    <enum name="NORMAL_MAP_NV"                            value="0x8511"/>
+    <enum name="REFLECTION_MAP_NV"                        value="0x8512"/>
+</category>
+
+<!-- Extension number 180 is not listed in the extension registry. -->
+
+<category name="GL_SUN_convolution_border_modes" number="182">
+    <enum name="WRAP_BORDER_SUN"                          value="0x81D4"/>
+</category>
+
+<!-- Extension number 183 is a GLX extension. -->
+<!-- Extension number 184 is not listed in the extension registry. -->
+
+<category name="GL_EXT_texture_env_add" number="185">
+    <!-- No new functions, types, enums. -->
+</category>
+
+<category name="GL_EXT_texture_lod_bias" number="186">
+    <enum name="TEXTURE_LOD_BIAS_EXT"          count="1"  value="0x8501">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+</category>
+
+<category name="GL_EXT_texture_filter_anisotropic" number="187">
+    <enum name="TEXTURE_MAX_ANISOTROPY_EXT"    count="1"  value="0x84FE">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+    <enum name="MAX_TEXTURE_MAX_ANISOTROPY_EXT" count="1" value="0x84FF">
+        <size name="Get" mode="get"/>
+    </enum>
+</category>
+
+<category name="GL_EXT_vertex_weighting" number="188">
+    <function name="VertexWeightfEXT" vectorequiv="VertexWeightfvEXT">
+        <param name="weight" type="GLfloat"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="VertexWeightfvEXT">
+        <param name="weight" type="const GLfloat *" count="1"/>
+        <glx rop="4135" ignore="true"/>
+    </function>
+
+    <function name="VertexWeightPointerEXT">
+        <param name="size" type="GLsizei"/>
+        <param name="type" type="GLenum"/>
+        <param name="stride" type="GLsizei"/>
+        <param name="pointer" type="const GLvoid *"/>
+        <glx handcode="true" ignore="true"/>
+    </function>
+</category>
+
+<category name="GL_NV_light_max_exponent" number="189">
+    <enum name="MAX_SHININESS_NV"              count="1"  value="0x8504">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAX_SPOT_EXPONENT_NV"          count="1"  value="0x8505">
+        <size name="Get" mode="get"/>
+    </enum>
+</category>
+
+<category name="GL_NV_vertex_array_range" number="190">
+    <function name="FlushVertexArrayRangeNV" offset="assign">
+        <glx ignore="true"/>
+    </function>
+
+    <function name="VertexArrayRangeNV" offset="assign">
+        <param name="length" type="GLsizei"/>
+        <param name="pointer" type="const GLvoid *"/>
+        <glx ignore="true"/>
+    </function>
+</category>
+
+<category name="GL_NV_register_combiners" number="191">
+    <function name="CombinerParameterfvNV" offset="assign">
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLfloat *" variable_param="pname"/>
+        <glx rop="4137" ignore="true"/>
+    </function>
+
+    <function name="CombinerParameterfNV" offset="assign">
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLfloat"/>
+        <glx rop="4136" ignore="true"/>
+    </function>
+
+    <function name="CombinerParameterivNV" offset="assign">
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLint *" variable_param="pname"/>
+        <glx rop="4139" ignore="true"/>
+    </function>
+
+    <function name="CombinerParameteriNV" offset="assign">
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLint"/>
+        <glx rop="4138" ignore="true"/>
+    </function>
+
+    <function name="CombinerInputNV" offset="assign">
+        <param name="stage" type="GLenum"/>
+        <param name="portion" type="GLenum"/>
+        <param name="variable" type="GLenum"/>
+        <param name="input" type="GLenum"/>
+        <param name="mapping" type="GLenum"/>
+        <param name="componentUsage" type="GLenum"/>
+        <glx rop="4140" ignore="true"/>
+    </function>
+
+    <function name="CombinerOutputNV" offset="assign">
+        <param name="stage" type="GLenum"/>
+        <param name="portion" type="GLenum"/>
+        <param name="abOutput" type="GLenum"/>
+        <param name="cdOutput" type="GLenum"/>
+        <param name="sumOutput" type="GLenum"/>
+        <param name="scale" type="GLenum"/>
+        <param name="bias" type="GLenum"/>
+        <param name="abDotProduct" type="GLboolean"/>
+        <param name="cdDotProduct" type="GLboolean"/>
+        <param name="muxSum" type="GLboolean"/>
+        <glx rop="4141" ignore="true"/>
+    </function>
+
+    <function name="FinalCombinerInputNV" offset="assign">
+        <param name="variable" type="GLenum"/>
+        <param name="input" type="GLenum"/>
+        <param name="mapping" type="GLenum"/>
+        <param name="componentUsage" type="GLenum"/>
+        <glx rop="4142" ignore="true"/>
+    </function>
+
+    <function name="GetCombinerInputParameterfvNV" offset="assign">
+        <param name="stage" type="GLenum"/>
+        <param name="portion" type="GLenum"/>
+        <param name="variable" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat *" output="true"/>
+        <glx vendorpriv="1270" ignore="true"/>
+    </function>
+
+    <function name="GetCombinerInputParameterivNV" offset="assign">
+        <param name="stage" type="GLenum"/>
+        <param name="portion" type="GLenum"/>
+        <param name="variable" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true"/>
+        <glx vendorpriv="1271" ignore="true"/>
+    </function>
+
+    <function name="GetCombinerOutputParameterfvNV" offset="assign">
+        <param name="stage" type="GLenum"/>
+        <param name="portion" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat *" output="true"/>
+        <glx vendorpriv="1272" ignore="true"/>
+    </function>
+
+    <function name="GetCombinerOutputParameterivNV" offset="assign">
+        <param name="stage" type="GLenum"/>
+        <param name="portion" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true"/>
+        <glx vendorpriv="1273" ignore="true"/>
+    </function>
+
+    <function name="GetFinalCombinerInputParameterfvNV" offset="assign">
+        <param name="variable" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat *" output="true"/>
+        <glx vendorpriv="1274" ignore="true"/>
+    </function>
+
+    <function name="GetFinalCombinerInputParameterivNV" offset="assign">
+        <param name="variable" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true"/>
+        <glx vendorpriv="1275" ignore="true"/>
+    </function>
+</category>
+
+<category name="GL_NV_fog_distance" number="192">
+    <enum name="FOG_DISTANCE_MODE_NV"          count="1"  value="0x855A">
+        <size name="Fogfv"/>
+        <size name="Fogiv"/>
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="EYE_RADIAL_NV"                            value="0x855B"/>
+    <enum name="EYE_PLANE_ABSOLUTE_NV"                    value="0x855C"/>
+</category>
+
+<category name="GL_NV_blend_square" number="194">
+    <!-- No new functions, types, enums. -->
+</category>
+
+<category name="GL_NV_texture_env_combine4" number="195">
+    <enum name="COMBINE4"                                 value="0x8503"/>
+    <enum name="SOURCE3_RGB_NV"                count="1"  value="0x8583">
+        <size name="TexEnvfv"/>
+        <size name="TexEnviv"/>
+        <size name="GetTexEnvfv" mode="get"/>
+        <size name="GetTexEnviv" mode="get"/>
+    </enum>
+    <enum name="SOURCE3_ALPHA_NV"              count="1"  value="0x858B">
+        <size name="TexEnvfv"/>
+        <size name="TexEnviv"/>
+        <size name="GetTexEnvfv" mode="get"/>
+        <size name="GetTexEnviv" mode="get"/>
+    </enum>
+    <enum name="OPERAND3_RGB_NV"               count="1"  value="0x8593">
+        <size name="TexEnvfv"/>
+        <size name="TexEnviv"/>
+        <size name="GetTexEnvfv" mode="get"/>
+        <size name="GetTexEnviv" mode="get"/>
+    </enum>
+    <enum name="OPERAND3_ALPHA_NV"             count="1"  value="0x859B">
+        <size name="TexEnvfv"/>
+        <size name="TexEnviv"/>
+        <size name="GetTexEnvfv" mode="get"/>
+        <size name="GetTexEnviv" mode="get"/>
+    </enum>
+</category>
+
+<category name="GL_MESA_resize_buffers" number="196">
+    <function name="ResizeBuffersMESA" offset="assign">
+        <glx ignore="true"/>
+    </function>
+</category>
+
+<category name="GL_MESA_window_pos" number="197">
+    <function name="WindowPos2dMESA" offset="assign">
+        <param name="x" type="GLdouble"/>
+        <param name="y" type="GLdouble"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="WindowPos2dvMESA" offset="assign">
+        <param name="v" type="const GLdouble *"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="WindowPos2fMESA" offset="assign">
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="WindowPos2fvMESA" offset="assign">
+        <param name="v" type="const GLfloat *"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="WindowPos2iMESA" offset="assign">
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="WindowPos2ivMESA" offset="assign">
+        <param name="v" type="const GLint *"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="WindowPos2sMESA" offset="assign">
+        <param name="x" type="GLshort"/>
+        <param name="y" type="GLshort"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="WindowPos2svMESA" offset="assign">
+        <param name="v" type="const GLshort *"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="WindowPos3dMESA" offset="assign">
+        <param name="x" type="GLdouble"/>
+        <param name="y" type="GLdouble"/>
+        <param name="z" type="GLdouble"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="WindowPos3dvMESA" offset="assign">
+        <param name="v" type="const GLdouble *"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="WindowPos3fMESA" offset="assign" vectorequiv="WindowPos3fvMESA">
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+    </function>
+
+    <function name="WindowPos3fvMESA" offset="assign">
+        <param name="v" type="const GLfloat *" count="3"/>
+        <glx rop="230"/>
+    </function>
+
+    <function name="WindowPos3iMESA" offset="assign">
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+        <param name="z" type="GLint"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="WindowPos3ivMESA" offset="assign">
+        <param name="v" type="const GLint *"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="WindowPos3sMESA" offset="assign">
+        <param name="x" type="GLshort"/>
+        <param name="y" type="GLshort"/>
+        <param name="z" type="GLshort"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="WindowPos3svMESA" offset="assign">
+        <param name="v" type="const GLshort *"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="WindowPos4dMESA" offset="assign">
+        <param name="x" type="GLdouble"/>
+        <param name="y" type="GLdouble"/>
+        <param name="z" type="GLdouble"/>
+        <param name="w" type="GLdouble"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="WindowPos4dvMESA" offset="assign">
+        <param name="v" type="const GLdouble *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="WindowPos4fMESA" offset="assign">
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+        <param name="w" type="GLfloat"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="WindowPos4fvMESA" offset="assign">
+        <param name="v" type="const GLfloat *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="WindowPos4iMESA" offset="assign">
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+        <param name="z" type="GLint"/>
+        <param name="w" type="GLint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="WindowPos4ivMESA" offset="assign">
+        <param name="v" type="const GLint *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="WindowPos4sMESA" offset="assign">
+        <param name="x" type="GLshort"/>
+        <param name="y" type="GLshort"/>
+        <param name="z" type="GLshort"/>
+        <param name="w" type="GLshort"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="WindowPos4svMESA" offset="assign">
+        <param name="v" type="const GLshort *"/>
+        <glx ignore="true"/>
+    </function>
+</category>
+
+<category name="GL_EXT_texture_compression_s3tc" number="198">
+    <enum name="COMPRESSED_RGB_S3TC_DXT1_EXT"             value="0x83F0"/>
+    <enum name="COMPRESSED_RGBA_S3TC_DXT1_EXT"            value="0x83F1"/>
+    <enum name="COMPRESSED_RGBA_S3TC_DXT3_EXT"            value="0x83F2"/>
+    <enum name="COMPRESSED_RGBA_S3TC_DXT5_EXT"            value="0x83F3"/>
+</category>
+
+<category name="GL_IBM_multimode_draw_arrays" number="200">
+    <function name="MultiModeDrawArraysIBM" offset="assign" static_dispatch="false">
+        <param name="mode" type="const GLenum *"/>
+        <param name="first" type="const GLint *"/>
+        <param name="count" type="const GLsizei *"/>
+        <param name="primcount" type="GLsizei"/>
+        <param name="modestride" type="GLint"/>
+        <glx handcode="true" ignore="true"/>
+    </function>
+
+    <function name="MultiModeDrawElementsIBM" offset="assign" static_dispatch="false">
+        <param name="mode" type="const GLenum *"/>
+        <param name="count" type="const GLsizei *"/>
+        <param name="type" type="GLenum"/>
+        <param name="indices" type="const GLvoid * const *"/>
+        <param name="primcount" type="GLsizei"/>
+        <param name="modestride" type="GLint"/>
+        <glx handcode="true" ignore="true"/>
+    </function>
+</category>
+
+<category name="GL_IBM_vertex_array_lists" number="201">
+    <function name="ColorPointerListIBM">
+        <param name="size" type="GLint"/>
+        <param name="type" type="GLenum"/>
+        <param name="stride" type="GLint"/>
+        <param name="pointer" type="const GLvoid **"/>
+        <param name="ptrstride" type="GLint"/>
+    </function>
+
+    <function name="SecondaryColorPointerListIBM">
+        <param name="size" type="GLint"/>
+        <param name="type" type="GLenum"/>
+        <param name="stride" type="GLint"/>
+        <param name="pointer" type="const GLvoid **"/>
+        <param name="ptrstride" type="GLint"/>
+    </function>
+
+    <function name="EdgeFlagPointerListIBM">
+        <param name="stride" type="GLint"/>
+        <param name="pointer" type="const GLboolean **"/>
+        <param name="ptrstride" type="GLint"/>
+    </function>
+
+    <function name="FogCoordPointerListIBM">
+        <param name="type" type="GLenum"/>
+        <param name="stride" type="GLint"/>
+        <param name="pointer" type="const GLvoid **"/>
+        <param name="ptrstride" type="GLint"/>
+    </function>
+
+    <function name="IndexPointerListIBM">
+        <param name="type" type="GLenum"/>
+        <param name="stride" type="GLint"/>
+        <param name="pointer" type="const GLvoid **"/>
+        <param name="ptrstride" type="GLint"/>
+    </function>
+
+    <function name="NormalPointerListIBM">
+        <param name="type" type="GLenum"/>
+        <param name="stride" type="GLint"/>
+        <param name="pointer" type="const GLvoid **"/>
+        <param name="ptrstride" type="GLint"/>
+    </function>
+
+    <function name="TexCoordPointerListIBM">
+        <param name="size" type="GLint"/>
+        <param name="type" type="GLenum"/>
+        <param name="stride" type="GLint"/>
+        <param name="pointer" type="const GLvoid **"/>
+        <param name="ptrstride" type="GLint"/>
+    </function>
+
+    <function name="VertexPointerListIBM">
+        <param name="size" type="GLint"/>
+        <param name="type" type="GLenum"/>
+        <param name="stride" type="GLint"/>
+        <param name="pointer" type="const GLvoid **"/>
+        <param name="ptrstride" type="GLint"/>
+    </function>
+</category>
+
+<!-- Extension number 202 is not listed in the extension registry. -->
+<!-- Extension number 203 is not listed in the extension registry. -->
+<!-- Extension number 204 is not listed in the extension registry. -->
+<!-- Extension number 205 is not listed in the extension registry. -->
+
+<category name="GL_3DFX_texture_compression_FXT1" number="206">
+    <enum name="COMPRESSED_RGB_FXT1_3DFX"                 value="0x86B0"/>
+    <enum name="COMPRESSED_RGBA_FXT1_3DFX"                value="0x86B1"/>
+</category>
+
+<category name="GL_3DFX_multisample" number="207">
+    <enum name="MULTISAMPLE_3DFX"                         value="0x86B2"/>
+    <enum name="SAMPLE_BUFFERS_3DFX"                      value="0x86B3"/>
+    <enum name="SAMPLES_3DFX"                             value="0x86B4"/>
+    <enum name="MULTISAMPLE_BIT_3DFX"                     value="0x20000000"/>
+</category>
+
+<category name="GL_3DFX_tbuffer" number="208">
+    <function name="TbufferMask3DFX">
+        <param name="mask" type="GLuint"/>
+        <glx ignore="true"/>
+    </function>
+</category>
+
+<category name="GL_EXT_multisample" number="209">
+    <function name="SampleMaskEXT" alias="SampleMaskSGIS" static_dispatch="false">
+        <param name="value" type="GLclampf"/>
+        <param name="invert" type="GLboolean"/>
+    </function>
+
+    <function name="SamplePatternEXT" alias="SamplePatternSGIS" static_dispatch="false">
+        <param name="pattern" type="GLenum"/>
+    </function>
+</category>
+
+<!-- Extension number 211 is not listed in the extension registry. -->
+<!-- Extension number 213 is not listed in the extension registry. -->
+
+<category name="GL_SGIS_texture_color_mask" number="214">
+    <enum name="TEXTURE_COLOR_WRITEMASK_SGIS"             value="0x81EF"/>
+
+    <function name="TextureColorMaskSGIS">
+        <param name="red" type="GLboolean"/>
+        <param name="green" type="GLboolean"/>
+        <param name="blue" type="GLboolean"/>
+        <param name="alpha" type="GLboolean"/>
+        <glx rop="2082" ignore="true"/>
+    </function>
+</category>
+
+<!-- Extension number 215 is a GLX extension. -->
+<!-- Extension number 216 is a GLX extension. -->
+<!-- Extension number 217 is a GLX extension. -->
+<!-- Extension number 218 is a GLX extension. -->
+<!-- Extension number 219 is not listed in the extension registry. -->
+
+<category name="GL_EXT_texture_env_dot3" number="220">
+    <enum name="DOT3_RGB_EXT"                             value="0x8740"/>
+    <enum name="DOT3_RGBA_EXT"                            value="0x8741"/>
+</category>
+
+<category name="GL_ATI_texture_mirror_once" number="221">
+    <enum name="MIRROR_CLAMP_ATI"                         value="0x8742"/>
+    <enum name="MIRROR_CLAMP_TO_EDGE_ATI"                 value="0x8743"/>
+</category>
+
+<category name="GL_NV_fence" number="222">
+    <function name="DeleteFencesNV" offset="assign" static_dispatch="false">
+        <param name="n" type="GLsizei"/>
+        <param name="fences" type="const GLuint *"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GenFencesNV" offset="assign" static_dispatch="false">
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="fences" type="GLuint *" output="true" count="n"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="IsFenceNV" offset="assign" static_dispatch="false">
+        <param name="fence" type="GLuint"/>
+        <return type="GLboolean"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="TestFenceNV" offset="assign" static_dispatch="false">
+        <param name="fence" type="GLuint"/>
+        <return type="GLboolean"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="GetFenceivNV" offset="assign" static_dispatch="false">
+        <param name="fence" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="FinishFenceNV" offset="assign" static_dispatch="false">
+        <param name="fence" type="GLuint"/>
+        <glx ignore="true"/>
+    </function>
+
+    <function name="SetFenceNV" offset="assign" static_dispatch="false">
+        <param name="fence" type="GLuint"/>
+        <param name="condition" type="GLenum"/>
+        <glx ignore="true"/>
+    </function>
+</category>
+
+<category name="GL_IBM_texture_mirrored_repeat" number="224">
+    <enum name="MIRRORED_REPEAT_IBM"                      value="0x8370"/>
+</category>
+
+<category name="GL_NV_evaluators" number="225">
+    <function name="MapControlPointsNV">
+        <param name="target" type="GLenum"/>
+        <param name="index" type="GLuint"/>
+        <param name="type" type="GLenum"/>
+        <param name="ustride" type="GLsizei"/>
+        <param name="vstride" type="GLsizei"/>
+        <param name="uorder" type="GLint"/>
+        <param name="vorder" type="GLint"/>
+        <param name="packed" type="GLboolean"/>
+        <param name="points" type="const GLvoid *"/>
+    </function>
+
+    <function name="MapParameterivNV">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLint *"/>
+    </function>
+
+    <function name="MapParameterfvNV">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLfloat *"/>
+    </function>
+
+    <function name="GetMapControlPointsNV">
+        <param name="target" type="GLenum"/>
+        <param name="index" type="GLuint"/>
+        <param name="type" type="GLenum"/>
+        <param name="ustride" type="GLsizei"/>
+        <param name="vstride" type="GLsizei"/>
+        <param name="packed" type="GLboolean"/>
+        <param name="points" type="GLvoid *" output="true"/>
+    </function>
+
+    <function name="GetMapParameterivNV">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true"/>
+    </function>
+
+    <function name="GetMapParameterfvNV">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat *" output="true"/>
+    </function>
+
+    <function name="GetMapAttribParameterivNV">
+        <param name="target" type="GLenum"/>
+        <param name="index" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true"/>
+    </function>
+
+    <function name="GetMapAttribParameterfvNV">
+        <param name="target" type="GLenum"/>
+        <param name="index" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat *" output="true"/>
+    </function>
+
+    <function name="EvalMapsNV">
+        <param name="target" type="GLenum"/>
+        <param name="mode" type="GLenum"/>
+    </function>
+</category>
+
+<category name="GL_NV_packed_depth_stencil" number="226">
+    <enum name="DEPTH_STENCIL_NV"                         value="0x84F9"/>
+    <enum name="UNSIGNED_INT_24_8_NV"                     value="0x84FA"/>
+</category>
+
+<category name="GL_NV_register_combiners2" number="227">
+    <function name="CombinerStageParameterfvNV">
+        <param name="stage" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLfloat *"/>
+    </function>
+
+    <function name="GetCombinerStageParameterfvNV">
+        <param name="stage" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat *" output="true"/>
+    </function>
+</category>
+
+<category name="GL_NV_texture_compression_vtc" number="228">
+    <enum name="COMPRESSED_RGB_S3TC_DXT1_EXT"             value="0x83F0"/>
+    <enum name="COMPRESSED_RGBA_S3TC_DXT1_EXT"            value="0x83F1"/>
+    <enum name="COMPRESSED_RGBA_S3TC_DXT3_EXT"            value="0x83F2"/>
+    <enum name="COMPRESSED_RGBA_S3TC_DXT5_EXT"            value="0x83F3"/>
+</category>
+
+<category name="GL_NV_texture_rectangle" number="229">
+    <enum name="TEXTURE_RECTANGLE_NV"          count="1"  value="0x84F5">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_BINDING_RECTANGLE_NV"  count="1"  value="0x84F6">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="PROXY_TEXTURE_RECTANGLE_NV"               value="0x84F7"/>
+    <enum name="MAX_RECTANGLE_TEXTURE_SIZE_NV" count="1"  value="0x84F8">
+        <size name="Get" mode="get"/>
+    </enum>
+</category>
+
+<category name="GL_NV_vertex_program" number="233">
+    <enum name="VERTEX_PROGRAM_NV"                        value="0x8620"/>
+    <enum name="VERTEX_STATE_PROGRAM_NV"                  value="0x8621"/>
+    <enum name="ATTRIB_ARRAY_SIZE_NV"          count="1"  value="0x8623">
+        <size name="GetVertexAttribdvNV" mode="get"/>
+        <size name="GetVertexAttribfvNV" mode="get"/>
+        <size name="GetVertexAttribivNV" mode="get"/>
+    </enum>
+    <enum name="ATTRIB_ARRAY_STRIDE_NV"        count="1"  value="0x8624">
+        <size name="GetVertexAttribdvNV" mode="get"/>
+        <size name="GetVertexAttribfvNV" mode="get"/>
+        <size name="GetVertexAttribivNV" mode="get"/>
+    </enum>
+    <enum name="ATTRIB_ARRAY_TYPE_NV"          count="1"  value="0x8625">
+        <size name="GetVertexAttribdvNV" mode="get"/>
+        <size name="GetVertexAttribfvNV" mode="get"/>
+        <size name="GetVertexAttribivNV" mode="get"/>
+    </enum>
+    <enum name="CURRENT_ATTRIB_NV"             count="1"  value="0x8626">
+        <size name="GetVertexAttribdvNV" mode="get"/>
+        <size name="GetVertexAttribfvNV" mode="get"/>
+        <size name="GetVertexAttribivNV" mode="get"/>
+    </enum>
+    <enum name="PROGRAM_LENGTH_NV"             count="1"  value="0x8627">
+        <size name="GetProgramivNV" mode="get"/>
+    </enum>
+    <enum name="PROGRAM_STRING_NV"                        value="0x8628"/>
+    <enum name="MODELVIEW_PROJECTION_NV"                  value="0x8629"/>
+    <enum name="IDENTITY_NV"                              value="0x862A"/>
+    <enum name="INVERSE_NV"                               value="0x862B"/>
+    <enum name="TRANSPOSE_NV"                             value="0x862C"/>
+    <enum name="INVERSE_TRANSPOSE_NV"                     value="0x862D"/>
+    <enum name="MAX_TRACK_MATRIX_STACK_DEPTH_NV"          value="0x862E"/>
+    <enum name="MAX_TRACK_MATRICES_NV"                    value="0x862F"/>
+    <enum name="MATRIX0_NV"                               value="0x8630"/>
+    <enum name="MATRIX1_NV"                               value="0x8631"/>
+    <enum name="MATRIX2_NV"                               value="0x8632"/>
+    <enum name="MATRIX3_NV"                               value="0x8633"/>
+    <enum name="MATRIX4_NV"                               value="0x8634"/>
+    <enum name="MATRIX5_NV"                               value="0x8635"/>
+    <enum name="MATRIX6_NV"                               value="0x8636"/>
+    <enum name="MATRIX7_NV"                               value="0x8637"/>
+    <enum name="CURRENT_MATRIX_STACK_DEPTH_NV"            value="0x8640"/>
+    <enum name="CURRENT_MATRIX_NV"                        value="0x8641"/>
+    <enum name="VERTEX_PROGRAM_POINT_SIZE_NV"             value="0x8642"/>
+    <enum name="VERTEX_PROGRAM_TWO_SIDE_NV"               value="0x8643"/>
+    <enum name="PROGRAM_PARAMETER_NV"                     value="0x8644"/>
+    <enum name="ATTRIB_ARRAY_POINTER_NV"                  value="0x8645"/>
+    <enum name="PROGRAM_TARGET_NV"             count="1"  value="0x8646">
+        <size name="GetProgramivNV" mode="get"/>
+    </enum>
+    <enum name="PROGRAM_RESIDENT_NV"           count="1"  value="0x8647">
+        <size name="GetProgramivNV" mode="get"/>
+    </enum>
+    <enum name="TRACK_MATRIX_NV"                          value="0x8648"/>
+    <enum name="TRACK_MATRIX_TRANSFORM_NV"                value="0x8649"/>
+    <enum name="VERTEX_PROGRAM_BINDING_NV"                value="0x864A"/>
+    <enum name="PROGRAM_ERROR_POSITION_NV"                value="0x864B"/>
+    <enum name="VERTEX_ATTRIB_ARRAY0_NV"                  value="0x8650"/>
+    <enum name="VERTEX_ATTRIB_ARRAY1_NV"                  value="0x8651"/>
+    <enum name="VERTEX_ATTRIB_ARRAY2_NV"                  value="0x8652"/>
+    <enum name="VERTEX_ATTRIB_ARRAY3_NV"                  value="0x8653"/>
+    <enum name="VERTEX_ATTRIB_ARRAY4_NV"                  value="0x8654"/>
+    <enum name="VERTEX_ATTRIB_ARRAY5_NV"                  value="0x8655"/>
+    <enum name="VERTEX_ATTRIB_ARRAY6_NV"                  value="0x8656"/>
+    <enum name="VERTEX_ATTRIB_ARRAY7_NV"                  value="0x8657"/>
+    <enum name="VERTEX_ATTRIB_ARRAY8_NV"                  value="0x8658"/>
+    <enum name="VERTEX_ATTRIB_ARRAY9_NV"                  value="0x8659"/>
+    <enum name="VERTEX_ATTRIB_ARRAY10_NV"                 value="0x865A"/>
+    <enum name="VERTEX_ATTRIB_ARRAY11_NV"                 value="0x865B"/>
+    <enum name="VERTEX_ATTRIB_ARRAY12_NV"                 value="0x865C"/>
+    <enum name="VERTEX_ATTRIB_ARRAY13_NV"                 value="0x865D"/>
+    <enum name="VERTEX_ATTRIB_ARRAY14_NV"                 value="0x865E"/>
+    <enum name="VERTEX_ATTRIB_ARRAY15_NV"                 value="0x865F"/>
+    <enum name="MAP1_VERTEX_ATTRIB0_4_NV"                 value="0x8660"/>
+    <enum name="MAP1_VERTEX_ATTRIB1_4_NV"                 value="0x8661"/>
+    <enum name="MAP1_VERTEX_ATTRIB2_4_NV"                 value="0x8662"/>
+    <enum name="MAP1_VERTEX_ATTRIB3_4_NV"                 value="0x8663"/>
+    <enum name="MAP1_VERTEX_ATTRIB4_4_NV"                 value="0x8664"/>
+    <enum name="MAP1_VERTEX_ATTRIB5_4_NV"                 value="0x8665"/>
+    <enum name="MAP1_VERTEX_ATTRIB6_4_NV"                 value="0x8666"/>
+    <enum name="MAP1_VERTEX_ATTRIB7_4_NV"                 value="0x8667"/>
+    <enum name="MAP1_VERTEX_ATTRIB8_4_NV"                 value="0x8668"/>
+    <enum name="MAP1_VERTEX_ATTRIB9_4_NV"                 value="0x8669"/>
+    <enum name="MAP1_VERTEX_ATTRIB10_4_NV"                value="0x866A"/>
+    <enum name="MAP1_VERTEX_ATTRIB11_4_NV"                value="0x866B"/>
+    <enum name="MAP1_VERTEX_ATTRIB12_4_NV"                value="0x866C"/>
+    <enum name="MAP1_VERTEX_ATTRIB13_4_NV"                value="0x866D"/>
+    <enum name="MAP1_VERTEX_ATTRIB14_4_NV"                value="0x866E"/>
+    <enum name="MAP1_VERTEX_ATTRIB15_4_NV"                value="0x866F"/>
+    <enum name="MAP2_VERTEX_ATTRIB0_4_NV"                 value="0x8670"/>
+    <enum name="MAP2_VERTEX_ATTRIB1_4_NV"                 value="0x8671"/>
+    <enum name="MAP2_VERTEX_ATTRIB2_4_NV"                 value="0x8672"/>
+    <enum name="MAP2_VERTEX_ATTRIB3_4_NV"                 value="0x8673"/>
+    <enum name="MAP2_VERTEX_ATTRIB4_4_NV"                 value="0x8674"/>
+    <enum name="MAP2_VERTEX_ATTRIB5_4_NV"                 value="0x8675"/>
+    <enum name="MAP2_VERTEX_ATTRIB6_4_NV"                 value="0x8676"/>
+    <enum name="MAP2_VERTEX_ATTRIB7_4_NV"                 value="0x8677"/>
+    <enum name="MAP2_VERTEX_ATTRIB8_4_NV"                 value="0x8678"/>
+    <enum name="MAP2_VERTEX_ATTRIB9_4_NV"                 value="0x8679"/>
+    <enum name="MAP2_VERTEX_ATTRIB10_4_NV"                value="0x867A"/>
+    <enum name="MAP2_VERTEX_ATTRIB11_4_NV"                value="0x867B"/>
+    <enum name="MAP2_VERTEX_ATTRIB12_4_NV"                value="0x867C"/>
+    <enum name="MAP2_VERTEX_ATTRIB13_4_NV"                value="0x867D"/>
+    <enum name="MAP2_VERTEX_ATTRIB14_4_NV"                value="0x867E"/>
+    <enum name="MAP2_VERTEX_ATTRIB15_4_NV"                value="0x867F"/>
+
+    <function name="AreProgramsResidentNV" offset="assign">
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="ids" type="const GLuint *" count="n"/>
+        <param name="residences" type="GLboolean *" output="true" count="n"/>
+        <return type="GLboolean"/>
+        <glx vendorpriv="1293"/>
+    </function>
+
+    <function name="BindProgramNV" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="program" type="GLuint"/>
+        <glx rop="4180"/>
+    </function>
+
+    <function name="DeleteProgramsNV" offset="assign">
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="programs" type="const GLuint *" count="n"/>
+        <glx vendorpriv="1294"/>
+    </function>
+
+    <function name="ExecuteProgramNV" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="id" type="GLuint"/>
+        <param name="params" type="const GLfloat *" count="4"/>
+        <glx rop="4181"/>
+    </function>
+
+    <function name="GenProgramsNV" offset="assign">
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="programs" type="GLuint *" output="true" count="n"/>
+        <glx vendorpriv="1295" always_array="true"/>
+     </function>
+
+    <!-- This isn't 100% correct.  Currently, the only valid value of pname
+         is GL_PROGRAM_PARAMETER_NV, and the count for that pname is always
+         4.  This is why the pname parameter was removed in the ARB version
+         of these functions.
+      -->
+
+    <function name="GetProgramParameterdvNV" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="index" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLdouble *" output="true" count="4"/>
+        <glx vendorpriv="1297"/>
+    </function>
+
+    <function name="GetProgramParameterfvNV" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="index" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat *" output="true" count="4"/>
+        <glx vendorpriv="1296"/>
+    </function>
+
+    <function name="GetProgramivNV" offset="assign">
+        <param name="id" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true" variable_param="pname"/>
+        <glx vendorpriv="1298"/>
+    </function>
+
+    <function name="GetProgramStringNV" offset="assign">
+        <param name="id" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="program" type="GLubyte *" output="true"/>
+        <glx vendorpriv="1299" handcode="server" always_array="true"/>
+    </function>
+
+    <function name="GetTrackMatrixivNV" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="address" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true" count="1"/>
+        <glx vendorpriv="1300"/>
+    </function>
+
+    <function name="GetVertexAttribdvNV" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLdouble *" output="true" variable_param="pname"/>
+        <glx vendorpriv="1301"/>
+    </function>
+
+    <function name="GetVertexAttribfvNV" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
+        <glx vendorpriv="1302"/>
+    </function>
+
+    <function name="GetVertexAttribivNV" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *" output="true" variable_param="pname"/>
+        <glx vendorpriv="1303"/>
+    </function>
+
+    <function name="GetVertexAttribPointervNV" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="pointer" type="GLvoid **" output="true"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="IsProgramNV" offset="assign">
+        <param name="program" type="GLuint"/>
+        <return type="GLboolean"/>
+        <glx vendorpriv="1304"/>
+    </function>
+
+    <function name="LoadProgramNV" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="id" type="GLuint"/>
+        <param name="len" type="GLsizei" counter="true"/>
+        <param name="program" type="const GLubyte *" count="len"/>
+        <glx rop="4183"/>
+    </function>
+
+    <function name="ProgramParameter4dNV" alias="ProgramEnvParameter4dARB">
+        <param name="target" type="GLenum"/>
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLdouble"/>
+        <param name="y" type="GLdouble"/>
+        <param name="z" type="GLdouble"/>
+        <param name="w" type="GLdouble"/>
+    </function>
+
+    <function name="ProgramParameter4dvNV" alias="ProgramEnvParameter4dvARB">
+        <param name="target" type="GLenum"/>
+        <param name="index" type="GLuint"/>
+        <param name="params" type="const GLdouble *"/>
+    </function>
+
+    <function name="ProgramParameter4fNV" alias="ProgramEnvParameter4fARB">
+        <param name="target" type="GLenum"/>
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+        <param name="w" type="GLfloat"/>
+    </function>
+
+    <function name="ProgramParameter4fvNV" alias="ProgramEnvParameter4fvARB">
+        <param name="target" type="GLenum"/>
+        <param name="index" type="GLuint"/>
+        <param name="params" type="const GLfloat *"/>
+    </function>
+
+    <function name="ProgramParameters4dvNV" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="index" type="GLuint"/>
+        <param name="num" type="GLuint" counter="true"/>
+        <param name="params" type="const GLdouble *" count="num" count_scale="4"/>
+        <glx rop="4187"/>
+    </function>
+
+    <function name="ProgramParameters4fvNV" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="index" type="GLuint"/>
+        <param name="num" type="GLuint" counter="true"/>
+        <param name="params" type="const GLfloat *" count="num" count_scale="4"/>
+        <glx rop="4186"/>
+    </function>
+
+    <function name="RequestResidentProgramsNV" offset="assign">
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="ids" type="const GLuint *" count="n"/>
+        <glx rop="4182"/>
+    </function>
+
+    <function name="TrackMatrixNV" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="address" type="GLuint"/>
+        <param name="matrix" type="GLenum"/>
+        <param name="transform" type="GLenum"/>
+        <glx rop="4188"/>
+    </function>
+
+    <function name="VertexAttribPointerNV" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="size" type="GLint"/>
+        <param name="type" type="GLenum"/>
+        <param name="stride" type="GLsizei"/>
+        <param name="pointer" type="const GLvoid *"/>
+        <glx handcode="true"/>
+    </function>
+
+    <function name="VertexAttrib1sNV" offset="assign" vectorequiv="VertexAttrib1svNV">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLshort"/>
+    </function>
+
+    <function name="VertexAttrib1svNV" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLshort *" count="1"/>
+        <glx rop="4265"/>
+    </function>
+
+    <function name="VertexAttrib2sNV" offset="assign" vectorequiv="VertexAttrib2svNV">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLshort"/>
+        <param name="y" type="GLshort"/>
+    </function>
+
+    <function name="VertexAttrib2svNV" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLshort *" count="2"/>
+        <glx rop="4266"/>
+    </function>
+
+    <function name="VertexAttrib3sNV" offset="assign" vectorequiv="VertexAttrib3svNV">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLshort"/>
+        <param name="y" type="GLshort"/>
+        <param name="z" type="GLshort"/>
+    </function>
+
+    <function name="VertexAttrib3svNV" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLshort *" count="3"/>
+        <glx rop="4267"/>
+    </function>
+
+    <function name="VertexAttrib4sNV" offset="assign" vectorequiv="VertexAttrib4svNV">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLshort"/>
+        <param name="y" type="GLshort"/>
+        <param name="z" type="GLshort"/>
+        <param name="w" type="GLshort"/>
+    </function>
+
+    <function name="VertexAttrib4svNV" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLshort *" count="4"/>
+        <glx rop="4268"/>
+    </function>
+
+    <function name="VertexAttrib1fNV" offset="assign" vectorequiv="VertexAttrib1fvNV">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLfloat"/>
+    </function>
+
+    <function name="VertexAttrib1fvNV" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLfloat *" count="1"/>
+        <glx rop="4269"/>
+    </function>
+
+    <function name="VertexAttrib2fNV" offset="assign" vectorequiv="VertexAttrib2fvNV">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+    </function>
+
+    <function name="VertexAttrib2fvNV" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLfloat *" count="2"/>
+        <glx rop="4270"/>
+    </function>
+
+    <function name="VertexAttrib3fNV" offset="assign" vectorequiv="VertexAttrib3fvNV">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+    </function>
+
+    <function name="VertexAttrib3fvNV" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLfloat *" count="3"/>
+        <glx rop="4271"/>
+    </function>
+
+    <function name="VertexAttrib4fNV" offset="assign" vectorequiv="VertexAttrib4fvNV">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+        <param name="w" type="GLfloat"/>
+    </function>
+
+    <function name="VertexAttrib4fvNV" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLfloat *" count="4"/>
+        <glx rop="4272"/>
+    </function>
+
+    <function name="VertexAttrib1dNV" offset="assign" vectorequiv="VertexAttrib1dvNV">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLdouble"/>
+    </function>
+
+    <function name="VertexAttrib1dvNV" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLdouble *" count="1"/>
+        <glx rop="4273" doubles_in_order="true"/>
+    </function>
+
+    <function name="VertexAttrib2dNV" offset="assign" vectorequiv="VertexAttrib2dvNV">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLdouble"/>
+        <param name="y" type="GLdouble"/>
+    </function>
+
+    <function name="VertexAttrib2dvNV" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLdouble *" count="2"/>
+        <glx rop="4274" doubles_in_order="true"/>
+    </function>
+
+    <function name="VertexAttrib3dNV" offset="assign" vectorequiv="VertexAttrib3dvNV">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLdouble"/>
+        <param name="y" type="GLdouble"/>
+        <param name="z" type="GLdouble"/>
+    </function>
+
+    <function name="VertexAttrib3dvNV" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLdouble *" count="3"/>
+        <glx rop="4275" doubles_in_order="true"/>
+    </function>
+
+    <function name="VertexAttrib4dNV" offset="assign" vectorequiv="VertexAttrib4dvNV">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLdouble"/>
+        <param name="y" type="GLdouble"/>
+        <param name="z" type="GLdouble"/>
+        <param name="w" type="GLdouble"/>
+    </function>
+
+    <function name="VertexAttrib4dvNV" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLdouble *" count="4"/>
+        <glx rop="4276" doubles_in_order="true"/>
+    </function>
+
+    <function name="VertexAttrib4ubNV" offset="assign" vectorequiv="VertexAttrib4ubvNV">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLubyte"/>
+        <param name="y" type="GLubyte"/>
+        <param name="z" type="GLubyte"/>
+        <param name="w" type="GLubyte"/>
+    </function>
+
+    <function name="VertexAttrib4ubvNV" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLubyte *" count="4"/>
+        <glx rop="4277"/>
+    </function>
+
+    <function name="VertexAttribs1svNV" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="v" type="const GLshort *" count="n"/>
+        <glx rop="4202"/>
+    </function>
+
+    <function name="VertexAttribs2svNV" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="v" type="const GLshort *" count="n" count_scale="2"/>
+        <glx rop="4203"/>
+    </function>
+
+    <function name="VertexAttribs3svNV" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="v" type="const GLshort *" count="n" count_scale="3"/>
+        <glx rop="4204"/>
+    </function>
+
+    <function name="VertexAttribs4svNV" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="v" type="const GLshort *" count="n" count_scale="4"/>
+        <glx rop="4205"/>
+    </function>
+
+    <function name="VertexAttribs1fvNV" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="v" type="const GLfloat *" count="n"/>
+        <glx rop="4206"/>
+    </function>
+
+    <function name="VertexAttribs2fvNV" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="v" type="const GLfloat *" count="n" count_scale="2"/>
+        <glx rop="4207"/>
+    </function>
+
+    <function name="VertexAttribs3fvNV" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="v" type="const GLfloat *" count="n" count_scale="3"/>
+        <glx rop="4208"/>
+    </function>
+
+    <function name="VertexAttribs4fvNV" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="v" type="const GLfloat *" count="n" count_scale="4"/>
+        <glx rop="4209"/>
+    </function>
+
+    <function name="VertexAttribs1dvNV" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="v" type="const GLdouble *" count="n"/>
+        <glx rop="4210" doubles_in_order="true"/>
+    </function>
+
+    <function name="VertexAttribs2dvNV" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="v" type="const GLdouble *" count="n" count_scale="2"/>
+        <glx rop="4211" doubles_in_order="true"/>
+    </function>
+
+    <function name="VertexAttribs3dvNV" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="v" type="const GLdouble *" count="n" count_scale="3"/>
+        <glx rop="4212" doubles_in_order="true"/>
+    </function>
+
+    <function name="VertexAttribs4dvNV" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="v" type="const GLdouble *" count="n" count_scale="4"/>
+        <glx rop="4213" doubles_in_order="true"/>
+    </function>
+
+    <function name="VertexAttribs4ubvNV" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="v" type="const GLubyte *" count="n" count_scale="4"/>
+        <glx rop="4214"/>
+    </function>
+</category>
+
+<!-- Extension number 234 is a GLX extension. -->
+
+<category name="GL_SGIX_texture_coordinate_clamp" number="235">
+    <enum name="TEXTURE_MAX_CLAMP_S_SGIX"      count="1"  value="0x8369">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_MAX_CLAMP_T_SGIX"      count="1"  value="0x836A">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_MAX_CLAMP_R_SGIX"      count="1"  value="0x836B">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+</category>
+
+<!-- Extension number 236 is not listed in the extension registry. -->
+<!-- Extension number 237 is a GLX extension. -->
+<!-- Extension number 238 is a GLX extension. -->
+<!-- Extension number 242 is a WGL extension. -->
+
+<category name="GL_NV_copy_depth_to_color" number="243">
+    <enum name="DEPTH_STENCIL_TO_RGBA_NV"                 value="0x886E"/>
+    <enum name="DEPTH_STENCIL_TO_BGRA_NV"                 value="0x886F"/>
+</category>
+
+<category name="GL_ATI_envmap_bumpmap" number="244">
+    <enum name="BUMP_ROT_MATRIX_ATI"          count="4"   value="0x8775">
+        <size name="TexBumpParameterfv"/>
+        <size name="TexBumpParameteriv"/>
+        <size name="GetTexBumpParameterfv" mode="get"/>
+        <size name="GetTexBumpParameteriv" mode="get"/>
+    </enum>
+    <enum name="BUMP_ROT_MATRIX_SIZE_ATI"     count="1"   value="0x8776">
+        <size name="GetTexBumpParameterfv" mode="get"/>
+        <size name="GetTexBumpParameteriv" mode="get"/>
+    </enum>
+    <enum name="BUMP_NUM_TEX_UNITS_ATI"       count="1"   value="0x8777">
+        <size name="GetTexBumpParameterfv" mode="get"/>
+        <size name="GetTexBumpParameteriv" mode="get"/>
+    </enum>
+    <enum name="BUMP_TEX_UNITS_ATI"           count="-1"  value="0x8778">
+        <size name="GetTexBumpParameterfv" mode="get"/>
+        <size name="GetTexBumpParameteriv" mode="get"/>
+    </enum>
+    <enum name="DUDV_ATI"                                 value="0x8779"/>
+    <enum name="DU8DV8_ATI"                               value="0x877A"/>
+    <enum name="BUMP_ENVMAP_ATI"                          value="0x877B"/>
+    <enum name="BUMP_TARGET_ATI"              count="1"   value="0x877C">
+        <size name="TexEnviv"/>
+        <size name="TexEnvfv"/>
+        <size name="GetTexEnviv" mode="get"/>
+        <size name="GetTexEnvfv" mode="get"/>
+    </enum>
+    <function name="TexBumpParameterfvATI" offset="assign">
+      <param name="pname" type="GLenum"/>
+      <param name="param" type="const GLfloat *" variable_param="pname"/>
+      <glx ignore="true"/>
+    </function>
+    <function name="TexBumpParameterivATI" offset="assign">
+      <param name="pname" type="GLenum"/>
+      <param name="param" type="const GLint *" variable_param="pname"/>
+      <glx ignore="true"/>
+    </function>
+    <function name="GetTexBumpParameterfvATI" offset="assign">
+      <param name="pname" type="GLenum"/>
+      <param name="param" type="GLfloat *" variable_param="pname"/>
+      <glx ignore="true"/>
+    </function>
+    <function name="GetTexBumpParameterivATI" offset="assign">
+      <param name="pname" type="GLenum"/>
+      <param name="param" type="GLint *" variable_param="pname"/>
+      <glx ignore="true"/>
+    </function>
+</category>
+
+<category name="GL_ATI_fragment_shader" number="245">
+    <function name="GenFragmentShadersATI" offset="assign">
+      <return type="GLuint"/>
+      <param name="range" type="GLuint"/>
+      <glx ignore="true"/>
+    </function>
+    
+    <function name="BindFragmentShaderATI" offset="assign">
+      <param name="id" type="GLuint"/>
+      <glx ignore="true"/>
+    </function>
+
+    <function name="DeleteFragmentShaderATI" offset="assign">
+      <param name="id" type="GLuint"/>
+      <glx ignore="true"/>
+    </function>
+
+    <function name="BeginFragmentShaderATI" offset="assign">
+      <glx ignore="true"/>
+    </function>
+
+    <function name="EndFragmentShaderATI" offset="assign">
+      <glx ignore="true"/>
+    </function>
+    
+    <function name="PassTexCoordATI" offset="assign">
+      <param name="dst" type="GLuint"/>
+      <param name="coord" type="GLuint"/>
+      <param name="swizzle" type="GLenum"/>
+      <glx ignore="true"/>
+    </function>
+
+    <function name="SampleMapATI" offset="assign">
+      <param name="dst" type="GLuint"/>
+      <param name="interp" type="GLuint"/>
+      <param name="swizzle" type="GLenum"/>
+      <glx ignore="true"/>
+    </function>
+
+    <function name="ColorFragmentOp1ATI" offset="assign">
+      <param name="op" type="GLenum"/>
+      <param name="dst" type="GLuint"/>
+      <param name="dstMask" type="GLuint"/>
+      <param name="dstMod" type="GLuint"/>
+      <param name="arg1" type="GLuint"/>
+      <param name="arg1Rep" type="GLuint"/>
+      <param name="arg1Mod" type="GLuint"/>
+      <glx ignore="true"/>
+    </function>
+
+    <function name="ColorFragmentOp2ATI" offset="assign">
+      <param name="op" type="GLenum"/>
+      <param name="dst" type="GLuint"/>
+      <param name="dstMask" type="GLuint"/>
+      <param name="dstMod" type="GLuint"/>
+      <param name="arg1" type="GLuint"/>
+      <param name="arg1Rep" type="GLuint"/>
+      <param name="arg1Mod" type="GLuint"/>
+      <param name="arg2" type="GLuint"/>
+      <param name="arg2Rep" type="GLuint"/>
+      <param name="arg2Mod" type="GLuint"/>
+      <glx ignore="true"/>
+    </function>
+
+    <function name="ColorFragmentOp3ATI" offset="assign">
+      <param name="op" type="GLenum"/>
+      <param name="dst" type="GLuint"/>
+      <param name="dstMask" type="GLuint"/>
+      <param name="dstMod" type="GLuint"/>
+      <param name="arg1" type="GLuint"/>
+      <param name="arg1Rep" type="GLuint"/>
+      <param name="arg1Mod" type="GLuint"/>
+      <param name="arg2" type="GLuint"/>
+      <param name="arg2Rep" type="GLuint"/>
+      <param name="arg2Mod" type="GLuint"/>
+      <param name="arg3" type="GLuint"/>
+      <param name="arg3Rep" type="GLuint"/>
+      <param name="arg3Mod" type="GLuint"/>
+      <glx ignore="true"/>
+    </function>
+
+    <function name="AlphaFragmentOp1ATI" offset="assign">
+      <param name="op" type="GLenum"/>
+      <param name="dst" type="GLuint"/>
+      <param name="dstMod" type="GLuint"/>
+      <param name="arg1" type="GLuint"/>
+      <param name="arg1Rep" type="GLuint"/>
+      <param name="arg1Mod" type="GLuint"/>
+      <glx ignore="true"/>
+    </function>
+
+    <function name="AlphaFragmentOp2ATI" offset="assign">
+      <param name="op" type="GLenum"/>
+      <param name="dst" type="GLuint"/>
+      <param name="dstMod" type="GLuint"/>
+      <param name="arg1" type="GLuint"/>
+      <param name="arg1Rep" type="GLuint"/>
+      <param name="arg1Mod" type="GLuint"/>
+      <param name="arg2" type="GLuint"/>
+      <param name="arg2Rep" type="GLuint"/>
+      <param name="arg2Mod" type="GLuint"/>
+      <glx ignore="true"/>
+    </function>
+
+    <function name="AlphaFragmentOp3ATI" offset="assign">
+      <param name="op" type="GLenum"/>
+      <param name="dst" type="GLuint"/>
+      <param name="dstMod" type="GLuint"/>
+      <param name="arg1" type="GLuint"/>
+      <param name="arg1Rep" type="GLuint"/>
+      <param name="arg1Mod" type="GLuint"/>
+      <param name="arg2" type="GLuint"/>
+      <param name="arg2Rep" type="GLuint"/>
+      <param name="arg2Mod" type="GLuint"/>
+      <param name="arg3" type="GLuint"/>
+      <param name="arg3Rep" type="GLuint"/>
+      <param name="arg3Mod" type="GLuint"/>
+      <glx ignore="true"/>
+    </function>
+
+    <function name="SetFragmentShaderConstantATI" offset="assign">
+      <param name="dst" type="GLuint"/>
+      <param name="value" type="const GLfloat *"/>
+      <glx ignore="true"/>
+    </function>
+</category>
+
+<!-- Extension number 250 is a WGL extension. -->
+<!-- Extension number 251 is a WGL extension. -->
+<!-- Extension number 252 is a WGL extension. -->
+<!-- Extension number 253 is a WGL extension. -->
+<!-- Extension number 254 is a WGL extension. -->
+<!-- Extension number 255 is a WGL extension. -->
+
+<category name="GL_SUN_mesh_array" number="257">
+    <enum name="QUAD_MESH_SUN"                            value="0x8614"/>
+    <enum name="TRIANGLE_MESH_SUN"                        value="0x8615"/>
+
+    <function name="DrawMeshArraysSUN">
+        <param name="mode" type="GLenum"/>
+        <param name="first" type="GLint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="width" type="GLsizei"/>
+    </function>
+</category>
+
+<category name="GL_SUN_slice_accum" number="258">
+    <enum name="SLICE_ACCUM_SUN"                          value="0x85CC"/>
+</category>
+
+<category name="GL_NV_multisample_filter_hint" number="259">
+    <enum name="MULTISAMPLE_FILTER_HINT_NV"    count="1"  value="0x8534">
+        <size name="Get" mode="get"/>
+    </enum>
+</category>
+
+<category name="GL_NV_depth_clamp" number="260">
+    <enum name="DEPTH_CLAMP_NV"                count="1"  value="0x864F">
+        <size name="Get" mode="get"/>
+    </enum>
+</category>
+
+<category name="GL_NV_point_sprite" number="262">
+    <!-- These existing enums can be passed as a parameter to the function
+         added for this extension. -->
+
+    <enum name="POINT_SIZE_MIN_EXT"            count="1"  value="0x8126">
+        <size name="PointParameterivNV"/>
+    </enum>
+    <enum name="POINT_SIZE_MAX_EXT"            count="1"  value="0x8127">
+        <size name="PointParameterivNV"/>
+    </enum>
+    <enum name="POINT_FADE_THRESHOLD_SIZE_EXT" count="1"  value="0x8128">
+        <size name="PointParameterivNV"/>
+    </enum>
+    <enum name="POINT_DISTANCE_ATTENUATION_EXT" count="3" value="0x8129">
+        <size name="PointParameterivNV"/>
+    </enum>
+
+    <enum name="POINT_SPRITE_NV"               count="1"  value="0x8861">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="COORD_REPLACE_NV"              count="1"  value="0x8862">
+        <size name="TexEnvfv"/>
+        <size name="TexEnviv"/>
+        <size name="GetTexEnvfv" mode="get"/>
+        <size name="GetTexEnviv" mode="get"/>
+    </enum>
+    <enum name="POINT_SPRITE_R_MODE_NV"        count="1"  value="0x8863">
+        <size name="PointParameterfvEXT"/>
+        <size name="PointParameterivNV"/>
+        <size name="Get" mode="get"/>
+    </enum>
+
+    <function name="PointParameteriNV" offset="assign">
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLint"/>
+        <glx rop="4221"/>
+    </function>
+
+    <function name="PointParameterivNV" offset="assign">
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLint *" variable_param="pname"/>
+        <glx rop="4222"/>
+    </function>
+</category>
+
+<!-- Extension number 263 is a WGL extension. -->
+<!-- Extension number 264 is a WGL extension. -->
+
+<category name="GL_EXT_shadow_funcs" number="267">
+    <!-- No new functions, types, enums. -->
+</category>
+
+<category name="GL_EXT_stencil_two_side" number="268">
+    <enum name="STENCIL_TEST_TWO_SIDE_EXT"     count="1"  value="0x8910">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="ACTIVE_STENCIL_FACE_EXT"       count="1"  value="0x8911">
+        <size name="Get" mode="get"/>
+    </enum>
+
+    <function name="ActiveStencilFaceEXT" offset="assign" static_dispatch="false">
+        <param name="face" type="GLenum"/>
+        <glx rop="4220"/>
+    </function>
+</category>
+
+<xi:include href="APPLE_vertex_array_object.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
+
+<category name="GL_APPLE_ycbcr_422" number="275">
+    <enum name="YCBCR_422_APPLE"                          value="0x85B9"/>
+    <enum name="UNSIGNED_SHORT_8_8_APPLE"                 value="0x85BA"/>
+    <enum name="UNSIGNED_SHORT_8_8_REV_APPLE"             value="0x85BB"/>
+</category>
+
+<category name="GL_S3_s3tc" number="276">
+    <enum name="RGB_S3TC"                                 value="0x83A0"/>
+    <enum name="RGB4_S3TC"                                value="0x83A1"/>
+    <enum name="RGBA_S3TC"                                value="0x83A2"/>
+    <enum name="RGBA4_S3TC"                               value="0x83A3"/>
+    <enum name="RGBA_DXT5_S3TC"                           value="0x83A4"/>
+    <enum name="RGBA4_DXT5_S3TC"                          value="0x83A5"/>
+</category>
+
+<category name="GL_ATI_draw_buffers" number="277">
+    <enum name="MAX_DRAW_BUFFERS_ATI"          count="1"  value="0x8824">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_BUFFER0_ATI"              count="1"  value="0x8825">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_BUFFER1_ATI"              count="1"  value="0x8826">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_BUFFER2_ATI"              count="1"  value="0x8827">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_BUFFER3_ATI"              count="1"  value="0x8828">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_BUFFER4_ATI"              count="1"  value="0x8829">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_BUFFER5_ATI"              count="1"  value="0x882A">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_BUFFER6_ATI"              count="1"  value="0x882B">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_BUFFER7_ATI"              count="1"  value="0x882C">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_BUFFER8_ATI"              count="1"  value="0x882D">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_BUFFER9_ATI"              count="1"  value="0x882E">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_BUFFER10_ATI"             count="1"  value="0x882F">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_BUFFER11_ATI"             count="1"  value="0x8830">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_BUFFER12_ATI"             count="1"  value="0x8831">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_BUFFER13_ATI"             count="1"  value="0x8832">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_BUFFER14_ATI"             count="1"  value="0x8833">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DRAW_BUFFER15_ATI"             count="1"  value="0x8834">
+        <size name="Get" mode="get"/>
+    </enum>
+
+    <function name="DrawBuffersATI" alias="DrawBuffersARB">
+        <param name="n" type="GLsizei" counter="true"/>
+        <param name="bufs" type="const GLenum *" count="n"/>
+    </function>
+</category>
+
+<!-- Extension number 278 is a WGL extension. -->
+
+<category name="GL_ATI_texture_env_combine3" number="279">
+    <enum name="MODULATE_ADD_ATI"                         value="0x8744"/>
+    <enum name="MODULATE_SIGNED_ADD_ATI"                  value="0x8745"/>
+    <enum name="MODULATE_SUBTRACT_ATI"                    value="0x8746"/>
+</category>
+
+<category name="GL_NV_fragment_program" number="282">
+    <function name="ProgramNamedParameter4fNV" offset="assign" vectorequiv="ProgramNamedParameter4fvNV">
+        <param name="id" type="GLuint"/>
+        <param name="len" type="GLsizei" counter="true"/>
+        <param name="name" type="const GLubyte *" count="len"/>
+        <param name="x" type="GLfloat"/>
+        <param name="y" type="GLfloat"/>
+        <param name="z" type="GLfloat"/>
+        <param name="w" type="GLfloat"/>
+    </function>
+
+    <function name="ProgramNamedParameter4dNV" offset="assign" vectorequiv="ProgramNamedParameter4dvNV">
+        <param name="id" type="GLuint"/>
+        <param name="len" type="GLsizei" counter="true"/>
+        <param name="name" type="const GLubyte *" count="len"/>
+        <param name="x" type="GLdouble"/>
+        <param name="y" type="GLdouble"/>
+        <param name="z" type="GLdouble"/>
+        <param name="w" type="GLdouble"/>
+    </function>
+
+    <function name="ProgramNamedParameter4fvNV" offset="assign">
+        <param name="id" type="GLuint"/>
+        <param name="len" type="GLsizei" counter="true"/>
+        <param name="name" type="const GLubyte *" count="len"/>
+        <param name="v" type="const GLfloat *" count="4"/>
+        <glx rop="4218"/>
+    </function>
+
+    <function name="ProgramNamedParameter4dvNV" offset="assign">
+        <param name="id" type="GLuint"/>
+        <param name="len" type="GLsizei" counter="true"/>
+        <param name="name" type="const GLubyte *" count="len"/>
+        <param name="v" type="const GLdouble *" count="4"/>
+        <glx rop="4219"/>
+    </function>
+
+    <function name="GetProgramNamedParameterfvNV" offset="assign">
+        <param name="id" type="GLuint"/>
+        <param name="len" type="GLsizei" counter="true"/>
+        <param name="name" type="const GLubyte *" count="len"/>
+        <param name="params" type="GLfloat *" output="true" count="4"/>
+        <glx vendorpriv="1310" always_array="true"/>
+    </function>
+
+    <function name="GetProgramNamedParameterdvNV" offset="assign">
+        <param name="id" type="GLuint"/>
+        <param name="len" type="GLsizei" counter="true"/>
+        <param name="name" type="const GLubyte *" count="len"/>
+        <param name="params" type="GLdouble *" output="true" count="4"/>
+        <glx vendorpriv="1311" always_array="true"/>
+    </function>
+</category>
+
+<category name="GL_NV_texture_expand_normal" number="286">
+    <enum name="TEXTURE_UNSIGNED_REMAP_MODE_NV" count="1" value="0x888F">
+        <size name="TexParameterfv"/>
+        <size name="TexParameteriv"/>
+        <size name="GetTexParameterfv" mode="get"/>
+        <size name="GetTexParameteriv" mode="get"/>
+    </enum>
+</category>
+
+<category name="GL_OES_compressed_paletted_texture" number="294">
+    <enum name="PALETTE4_RGB8_OES"                        value="0x8B90"/>
+    <enum name="PALETTE4_RGBA8_OES"                       value="0x8B91"/>
+    <enum name="PALETTE4_R5_G6_B5_OES"                    value="0x8B92"/>
+    <enum name="PALETTE4_RGBA4_OES"                       value="0x8B93"/>
+    <enum name="PALETTE4_RGB5_A1_OES"                     value="0x8B94"/>
+    <enum name="PALETTE8_RGB8_OES"                        value="0x8B95"/>
+    <enum name="PALETTE8_RGBA8_OES"                       value="0x8B96"/>
+    <enum name="PALETTE8_R5_G6_B5_OES"                    value="0x8B97"/>
+    <enum name="PALETTE8_RGBA4_OES"                       value="0x8B98"/>
+    <enum name="PALETTE8_RGB5_A1_OES"                     value="0x8B99"/>
+</category>
+
+<category name="GL_OES_read_format" number="295">
+    <enum name="IMPLEMENTATION_COLOR_READ_TYPE_OES"       value="0x8B9A"/>
+    <enum name="IMPLEMENTATION_COLOR_READ_FORMAT_OES"     value="0x8B9B"/>
+</category>
+
+<category name="GL_EXT_depth_bounds_test" number="297">
+    <enum name="DEPTH_BOUNDS_TEST_EXT"         count="1"  value="0x8890">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="DEPTH_BOUNDS_EXT"              count="2"  value="0x8891">
+        <size name="Get" mode="get"/>
+    </enum>
+
+    <function name="DepthBoundsEXT" offset="assign" static_dispatch="false">
+        <param name="zmin" type="GLclampd"/>
+        <param name="zmax" type="GLclampd"/>
+        <glx rop="4229" ignore="true"/>
+    </function>
+</category>
+
+<category name="GL_EXT_texture_mirror_clamp" number="298">
+    <enum name="MIRROR_CLAMP_EXT"                         value="0x8742"/>
+    <enum name="MIRROR_CLAMP_TO_EDGE_EXT"                 value="0x8743"/>
+    <enum name="MIRROR_CLAMP_TO_BORDER_EXT"               value="0x8912"/>
+</category>
+
+<category name="GL_EXT_blend_equation_separate" number="299">
+    <enum name="BLEND_EQUATION_RGB_EXT"        count="1"  value="0x8009">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="BLEND_EQUATION_ALPHA_EXT"      count="1"  value="0x883D">
+        <size name="Get" mode="get"/>
+    </enum>
+
+    <function name="BlendEquationSeparateEXT" offset="assign" static_dispatch="false">
+        <param name="modeRGB" type="GLenum"/>
+        <param name="modeA" type="GLenum"/>
+        <glx rop="4228"/>
+    </function>
+</category>
+
+<category name="GL_MESA_pack_invert" number="300">
+    <enum name="PACK_INVERT_MESA"              count="1"  value="0x8758">
+        <size name="Get" mode="get"/>
+    </enum>
+</category>
+
+<category name="GL_MESA_ycbcr_texture" number="301">
+    <enum name="YCBCR_MESA"                               value="0x8757"/>
+    <enum name="UNSIGNED_SHORT_8_8_MESA"                  value="0x85BA"/>
+    <enum name="UNSIGNED_SHORT_8_8_REV_MESA"              value="0x85BB"/>
+</category>
+
+<category name="GL_EXT_pixel_buffer_object" number="302">
+    <enum name="PIXEL_PACK_BUFFER_EXT"                    value="0x88EB"/>
+    <enum name="PIXEL_UNPACK_BUFFER_EXT"                  value="0x88EC"/>
+    <enum name="PIXEL_PACK_BUFFER_BINDING_EXT"            value="0x88ED"/>
+    <enum name="PIXEL_UNPACK_BUFFER_BINDING_EXT"          value="0x88EF"/>
+</category>
+
+<category name="GL_NV_fragment_program_option" number="303">
+    <!-- No new functions, types, enums. -->
+</category>
+
+<category name="GL_NV_fragment_program2" number="304">
+    <enum name="MAX_PROGRAM_EXEC_INSTRUCTIONS_NV" count="1" value="0x88F4">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="MAX_PROGRAM_CALL_DEPTH_NV"      count="1"  value="0x88F5">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="MAX_PROGRAM_IF_DEPTH_NV"        count="1"  value="0x88F6">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="MAX_PROGRAM_LOOP_DEPTH_NV"      count="1"  value="0x88F7">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="MAX_PROGRAM_LOOP_COUNT_NV"      count="1"  value="0x88F8">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+</category>
+
+<category name="GL_NV_vertex_program2_option" number="305">
+    <enum name="MAX_PROGRAM_EXEC_INSTRUCTIONS_NV" count="1" value="0x88F4">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+    <enum name="MAX_PROGRAM_CALL_DEPTH_NV"      count="1"  value="0x88F5">
+        <size name="GetProgramivARB" mode="get"/>
+    </enum>
+</category>
+
+<category name="GL_NV_vertex_program3" number="306">
+    <enum name="MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB" count="1" value="0x8B4C"/>
+</category>
+
+<!-- Extension number 307 is a GLX extension. -->
+<!-- Extension number 308 is a GLX extension. -->
+
+<category name="GL_EXT_texture_compression_dxt1" number="309">
+    <enum name="COMPRESSED_RGB_S3TC_DXT1_EXT"             value="0x83F0"/>
+    <enum name="COMPRESSED_RGBA_S3TC_DXT1_EXT"            value="0x83F1"/>
+</category>
+
+<xi:include href="EXT_framebuffer_object.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
+
+<xi:include href="EXT_packed_depth_stencil.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
+
+<xi:include href="EXT_provoking_vertex.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
+
+<xi:include href="EXT_draw_buffers2.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
+
+
+<category name="GL_APPLE_flush_buffer_range" number="321">
+    <enum name="BUFFER_SERIALIZED_MODIFY_APPLE" count="1" value="0x8A12">
+        <size name="GetBufferParameteriv" mode="get"/>
+    </enum>
+    <enum name="BUFFER_FLUSHING_UNMAP_APPLE" count="1" value="0x8A13">
+        <size name="GetBufferParameteriv" mode="get"/>
+    </enum>
+    <function name="BufferParameteriAPPLE" offset="assign" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLint"/>
+    </function>
+    <function name="FlushMappedBufferRangeAPPLE" offset="assign" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="offset" type="GLintptr"/>
+        <param name="size" type="GLsizeiptr"/>
+    </function>
+</category>
+
+<xi:include href="EXT_texture_array.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
+
+<category name="GL_APPLE_texture_range" number="367">
+    <enum name="TEXTURE_STORAGE_HINT_APPLE" count="1" value="0x85BC">
+        <size name="TexParameteriv"/>
+        <size name="TexParameterfv"/>
+        <size name="GetTexParameteriv" mode="get"/>
+        <size name="GetTexParameterfv" mode="get"/>
+    </enum>
+    <enum name="STORAGE_PRIVATE_APPLE" count="1" value="0x85BD">
+        <size name="TexParameteriv"/>
+        <size name="TexParameterfv"/>
+    </enum>
+    <enum name="STORAGE_CACHED_APPLE" count="1" value="0x85BE">
+        <size name="TexParameteriv"/>
+        <size name="TexParameterfv"/>
+    </enum>
+    <enum name="STORAGE_SHARED_APPLE" count="1" value="0x85BF">
+        <size name="TexParameteriv"/>
+        <size name="TexParameterfv"/>
+    </enum>
+    <enum name="TEXTURE_RANGE_LENGTH_APPLE" count="1" value="0x85B7">
+        <size name="GetTexParameteriv" mode="get"/>
+        <size name="GetTexParameterfv" mode="get"/>
+    </enum>
+    <enum name="TEXTURE_RANGE_POINTER_APPLE" count="1" value="0x85B8">
+        <size name="GetTexParameterPointervAPPLE" mode="get"/>
+    </enum>
+    <function name="TextureRangeAPPLE" offset="assign" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="length" type="GLsizei"/>
+        <param name="pointer" type="GLvoid *"/>
+    </function>
+    <function name="GetTexParameterPointervAPPLE" offset="assign" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLvoid **"/>
+    </function>
+</category>
+
+<!-- Unnumbered extensions sorted by name. -->
+
+<category name="GL_ATI_blend_equation_separate">
+    <function name="BlendEquationSeparateATI" alias="BlendEquationSeparateEXT" static_dispatch="false">
+        <param name="modeRGB" type="GLenum"/>
+        <param name="modeA" type="GLenum"/>
+    </function>
+</category>
+
+<category name="GL_ATI_separate_stencil">
+    <enum name="STENCIL_BACK_FUNC_ATI"     count="1"  value="0x8800">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="STENCIL_BACK_FAIL_ATI"     count="1"  value="0x8801">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="STENCIL_BACK_PASS_DEPTH_FAIL_ATI" count="1"  value="0x8802">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="STENCIL_BACK_PASS_DEPTH_PASS_ATI" count="1"  value="0x8803">
+        <size name="Get" mode="get"/>
+    </enum>
+
+    <function name="StencilOpSeparateATI" alias="StencilOpSeparate" static_dispatch="false">
+        <param name="face" type="GLenum"/>
+        <param name="sfail" type="GLenum"/>
+        <param name="zfail" type="GLenum"/>
+        <param name="zpass" type="GLenum"/>
+    </function>
+    <function name="StencilFuncSeparateATI" offset="assign" static_dispatch="false">
+        <param name="frontfunc" type="GLenum"/>
+        <param name="backfunc" type="GLenum"/>
+        <param name="ref" type="GLint"/>
+        <param name="mask" type="GLuint"/>
+    </function>
+
+</category>
+
+<category name="GL_EXT_gpu_program_parameters">
+    <function name="ProgramEnvParameters4fvEXT" offset="assign" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="index" type="GLuint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="params" type="const GLfloat *"/>
+    </function>
+
+    <function name="ProgramLocalParameters4fvEXT" offset="assign" static_dispatch="false">
+        <param name="target" type="GLenum"/>
+        <param name="index" type="GLuint"/>
+        <param name="count" type="GLsizei"/>
+        <param name="params" type="const GLfloat *"/>
+    </function>
+</category>
+
+<category name="GL_EXT_timer_query">
+    <enum name="TIME_ELAPSED_EXT" value="0x88BF"/>
+    <type name="int64EXT"                  size="8"/>
+    <type name="uint64EXT" unsigned="true" size="8"/>
+    <function name="GetQueryObjecti64vEXT" offset="assign" static_dispatch="false">
+        <param name="id" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint64EXT *"/>
+    </function>
+    <function name="GetQueryObjectui64vEXT" offset="assign" static_dispatch="false">
+        <param name="id" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLuint64EXT *"/>
+    </function>
+</category>
+
+<category name="GL_INGR_blend_func_separate">
+    <function name="BlendFuncSeparateINGR" alias="BlendFuncSeparateEXT" static_dispatch="false">
+        <param name="sfactorRGB" type="GLenum"/>
+        <param name="dfactorRGB" type="GLenum"/>
+        <param name="sfactorAlpha" type="GLenum"/>
+        <param name="dfactorAlpha" type="GLenum"/>
+    </function>
+</category>
+
+<category name="GL_MESA_texture_signed_rgba">
+    <enum name="SIGNED_NORMALIZED"                        value="0x8F9C"/>
+    <enum name="RGBA_SNORM"                               value="0x8F93"/>
+    <enum name="RGBA8_SNORM"                              value="0x8F97"/>
+</category>
+
+<category name="GL_MESA_shader_debug">
+    <enum name="DEBUG_OBJECT_MESA"                        value="0x8759"/>
+    <enum name="DEBUG_PRINT_MESA"                         value="0x875A"/>
+    <enum name="DEBUG_ASSERT_MESA"                        value="0x875B"/>
+    <function name="CreateDebugObjectMESA">
+        <return type="GLhandleARB"/>
+        <glx ignore="true"/>
+    </function>
+    <function name="ClearDebugLogMESA">
+        <param name="obj" type="GLhandleARB"/>
+        <param name="logType" type="GLenum"/>
+        <param name="shaderType" type="GLenum"/>
+        <glx ignore="true"/>
+    </function>
+    <function name="GetDebugLogMESA">
+        <param name="obj" type="GLhandleARB"/>
+        <param name="logType" type="GLenum"/>
+        <param name="shaderType" type="GLenum"/>
+        <param name="maxLength" type="GLsizei"/>
+        <param name="length" type="GLsizei *" output="true"/>
+        <param name="debugLog" type="GLcharARB *" output="true"/>
+        <glx ignore="true"/>
+    </function>
+    <function name="GetDebugLogLengthMESA">
+        <return type="GLsizei"/>
+        <param name="obj" type="GLhandleARB"/>
+        <param name="logType" type="GLenum"/>
+        <param name="shaderType" type="GLenum"/>
+        <glx ignore="true"/>
+    </function>
+</category>
+
+<category name="GL_SGIS_point_parameters">
+    <enum name="POINT_SIZE_MIN_SGIS"           count="1"  value="0x8126">
+        <size name="PointParameterfvEXT"/>
+    </enum>
+    <enum name="POINT_SIZE_MAX_SGIS"           count="1"  value="0x8127">
+        <size name="PointParameterfvEXT"/>
+    </enum>
+    <enum name="POINT_FADE_THRESHOLD_SIZE_SGIS" count="1" value="0x8128">
+        <size name="PointParameterfvEXT"/>
+    </enum>
+    <enum name="POINT_DISTANCE_ATTENUATION_SGIS" count="3" value="0x8129">
+        <size name="PointParameterfvEXT"/>
+    </enum>
+
+    <function name="PointParameterfSGIS" alias="PointParameterfEXT" static_dispatch="false">
+        <param name="pname" type="GLenum"/>
+        <param name="param" type="GLfloat"/>
+    </function>
+
+    <function name="PointParameterfvSGIS" alias="PointParameterfvEXT" static_dispatch="false">
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLfloat *"/>
+    </function>
+</category>
+
+<category name="GL_SGIX_igloo_interface">
+    <function name="IglooInterfaceSGIX">
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLvoid *"/>
+    </function>
+</category>
+
+<category name="GL_SGIX_polynomial_ffd">
+    <function name="DeformationMap3dSGIX">
+        <param name="target" type="GLenum"/>
+        <param name="u1" type="GLdouble"/>
+        <param name="u2" type="GLdouble"/>
+        <param name="ustride" type="GLint"/>
+        <param name="uorder" type="GLint"/>
+        <param name="v1" type="GLdouble"/>
+        <param name="v2" type="GLdouble"/>
+        <param name="vstride" type="GLint"/>
+        <param name="vorder" type="GLint"/>
+        <param name="w1" type="GLdouble"/>
+        <param name="w2" type="GLdouble"/>
+        <param name="wstride" type="GLint"/>
+        <param name="worder" type="GLint"/>
+        <param name="points" type="const GLdouble *"/>
+    </function>
+
+    <function name="DeformationMap3fSGIX">
+        <param name="target" type="GLenum"/>
+        <param name="u1" type="GLfloat"/>
+        <param name="u2" type="GLfloat"/>
+        <param name="ustride" type="GLint"/>
+        <param name="uorder" type="GLint"/>
+        <param name="v1" type="GLfloat"/>
+        <param name="v2" type="GLfloat"/>
+        <param name="vstride" type="GLint"/>
+        <param name="vorder" type="GLint"/>
+        <param name="w1" type="GLfloat"/>
+        <param name="w2" type="GLfloat"/>
+        <param name="wstride" type="GLint"/>
+        <param name="worder" type="GLint"/>
+        <param name="points" type="const GLfloat *"/>
+    </function>
+
+    <function name="DeformSGIX">
+        <param name="mask" type="GLenum"/>
+    </function>
+
+    <function name="LoadIdentityDeformationMapSGIX">
+        <param name="mask" type="GLenum"/>
+    </function>
+</category>
+
+</OpenGLAPI>
diff --git a/src/mesa/glapi/gen/gl_SPARC_asm.py b/src/mesa/glapi/gen/gl_SPARC_asm.py
new file mode 100644
index 0000000000..33e752df38
--- /dev/null
+++ b/src/mesa/glapi/gen/gl_SPARC_asm.py
@@ -0,0 +1,275 @@
+#!/usr/bin/env python
+
+# (C) Copyright IBM Corporation 2004
+# All Rights Reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# on the rights to use, copy, modify, merge, publish, distribute, sub
+# license, and/or sell copies of the Software, and to permit persons to whom
+# the Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
+# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+#
+# Authors:
+#    Ian Romanick <idr@us.ibm.com>
+
+import license
+import gl_XML, glX_XML
+import sys, getopt
+
+class PrintGenericStubs(gl_XML.gl_print_base):
+	def __init__(self):
+		gl_XML.gl_print_base.__init__(self)
+		self.name = "gl_SPARC_asm.py (from Mesa)"
+		self.license = license.bsd_license_template % ( \
+"""Copyright (C) 1999-2003  Brian Paul   All Rights Reserved.
+(C) Copyright IBM Corporation 2004""", "BRIAN PAUL, IBM")
+
+
+	def printRealHeader(self):
+		print '#include "glapi/glapioffsets.h"'
+		print ''
+		print '#ifdef __arch64__'
+		print '#define GL_OFF(N)\t((N) * 8)'
+		print '#define GL_LL\t\tldx'
+		print '#define GL_TIE_LD(SYM)\t%tie_ldx(SYM)'
+		print '#define GL_STACK_SIZE\t128'
+		print '#else'
+		print '#define GL_OFF(N)\t((N) * 4)'
+		print '#define GL_LL\t\tld'
+		print '#define GL_TIE_LD(SYM)\t%tie_ld(SYM)'
+		print '#define GL_STACK_SIZE\t64'
+		print '#endif'
+		print ''
+		print '#define GLOBL_FN(x) .globl x ; .type x, @function'
+		print '#define HIDDEN(x) .hidden x'
+		print ''
+		print '\t.register %g2, #scratch'
+		print '\t.register %g3, #scratch'
+		print ''
+		print '\t.text'
+		print ''
+		print '\tGLOBL_FN(__glapi_sparc_icache_flush)'
+		print '\tHIDDEN(__glapi_sparc_icache_flush)'
+		print '\t.type\t__glapi_sparc_icache_flush, @function'
+		print '__glapi_sparc_icache_flush: /* %o0 = insn_addr */'
+		print '\tflush\t%o0'
+		print '\tretl'
+		print '\t nop'
+		print ''
+		print '\t.align\t32'
+		print ''
+		print '\t.type\t__glapi_sparc_get_pc, @function'
+		print '__glapi_sparc_get_pc:'
+		print '\tretl'
+		print '\t add\t%o7, %g2, %g2'
+		print '\t.size\t__glapi_sparc_get_pc, .-__glapi_sparc_get_pc'
+		print ''
+		print '#ifdef GLX_USE_TLS'
+		print ''
+		print '\tGLOBL_FN(__glapi_sparc_get_dispatch)'
+		print '\tHIDDEN(__glapi_sparc_get_dispatch)'
+		print '__glapi_sparc_get_dispatch:'
+		print '\tmov\t%o7, %g1'
+		print '\tsethi\t%hi(_GLOBAL_OFFSET_TABLE_-4), %g2'
+		print '\tcall\t__glapi_sparc_get_pc'
+		print '\tadd\t%g2, %lo(_GLOBAL_OFFSET_TABLE_+4), %g2'
+		print '\tmov\t%g1, %o7'
+		print '\tsethi\t%tie_hi22(_glapi_tls_Dispatch), %g1'
+		print '\tadd\t%g1, %tie_lo10(_glapi_tls_Dispatch), %g1'
+		print '\tGL_LL\t[%g2 + %g1], %g2, GL_TIE_LD(_glapi_tls_Dispatch)'
+		print '\tretl'
+		print '\t mov\t%g2, %o0'
+		print ''
+		print '\t.data'
+		print '\t.align\t32'
+		print ''
+		print '\t/* --> sethi %hi(_glapi_tls_Dispatch), %g1 */'
+		print '\t/* --> or %g1, %lo(_glapi_tls_Dispatch), %g1 */'
+		print '\tGLOBL_FN(__glapi_sparc_tls_stub)'
+		print '\tHIDDEN(__glapi_sparc_tls_stub)'
+		print '__glapi_sparc_tls_stub: /* Call offset in %g3 */'
+		print '\tmov\t%o7, %g1'
+		print '\tsethi\t%hi(_GLOBAL_OFFSET_TABLE_-4), %g2'
+		print '\tcall\t__glapi_sparc_get_pc'
+		print '\tadd\t%g2, %lo(_GLOBAL_OFFSET_TABLE_+4), %g2'
+		print '\tmov\t%g1, %o7'
+		print '\tsrl\t%g3, 10, %g3'
+		print '\tsethi\t%tie_hi22(_glapi_tls_Dispatch), %g1'
+		print '\tadd\t%g1, %tie_lo10(_glapi_tls_Dispatch), %g1'
+		print '\tGL_LL\t[%g2 + %g1], %g2, GL_TIE_LD(_glapi_tls_Dispatch)'
+		print '\tGL_LL\t[%g7+%g2], %g1'
+		print '\tGL_LL\t[%g1 + %g3], %g1'
+		print '\tjmp\t%g1'
+		print '\t nop'
+		print '\t.size\t__glapi_sparc_tls_stub, .-__glapi_sparc_tls_stub'
+		print ''
+		print '#define GL_STUB(fn, off)\t\t\t\t\\'
+		print '\tGLOBL_FN(fn);\t\t\t\t\t\\'
+		print 'fn:\tba\t__glapi_sparc_tls_stub;\t\t\t\\'
+		print '\t sethi\tGL_OFF(off), %g3;\t\t\t\\'
+		print '\t.size\tfn,.-fn;'
+		print ''
+		print '#elif defined(PTHREADS)'
+		print ''
+		print '\t/* 64-bit 0x00 --> sethi %hh(_glapi_Dispatch), %g1 */'
+		print '\t/* 64-bit 0x04 --> sethi %lm(_glapi_Dispatch), %g2 */'
+		print '\t/* 64-bit 0x08 --> or %g1, %hm(_glapi_Dispatch), %g1 */'
+		print '\t/* 64-bit 0x0c --> sllx %g1, 32, %g1 */'
+		print '\t/* 64-bit 0x10 --> add %g1, %g2, %g1 */'
+		print '\t/* 64-bit 0x14 --> ldx [%g1 + %lo(_glapi_Dispatch)], %g1 */'
+		print ''
+		print '\t/* 32-bit 0x00 --> sethi %hi(_glapi_Dispatch), %g1 */'
+		print '\t/* 32-bit 0x04 --> ld [%g1 + %lo(_glapi_Dispatch)], %g1 */'
+		print ''
+		print '\t.data'
+		print '\t.align\t32'
+		print ''
+		print '\tGLOBL_FN(__glapi_sparc_pthread_stub)'
+		print '\tHIDDEN(__glapi_sparc_pthread_stub)'
+		print '__glapi_sparc_pthread_stub: /* Call offset in %g3 */'
+		print '\tmov\t%o7, %g1'
+		print '\tsethi\t%hi(_GLOBAL_OFFSET_TABLE_-4), %g2'
+		print '\tcall\t__glapi_sparc_get_pc'
+		print '\t add\t%g2, %lo(_GLOBAL_OFFSET_TABLE_+4), %g2'
+		print '\tmov\t%g1, %o7'
+		print '\tsethi\t%hi(_glapi_Dispatch), %g1'
+		print '\tor\t%g1, %lo(_glapi_Dispatch), %g1'
+		print '\tsrl\t%g3, 10, %g3'
+		print '\tGL_LL\t[%g2+%g1], %g2'
+		print '\tGL_LL\t[%g2], %g1'
+		print '\tcmp\t%g1, 0'
+		print '\tbe\t2f'
+		print '\t nop'
+		print '1:\tGL_LL\t[%g1 + %g3], %g1'
+		print '\tjmp\t%g1'
+		print '\t nop'
+		print '2:\tsave\t%sp, GL_STACK_SIZE, %sp'
+		print '\tmov\t%g3, %l0'
+		print '\tcall\t_glapi_get_dispatch'
+		print '\t nop'
+		print '\tmov\t%o0, %g1'
+		print '\tmov\t%l0, %g3'
+		print '\tba\t1b'
+		print '\t restore %g0, %g0, %g0'
+		print '\t.size\t__glapi_sparc_pthread_stub, .-__glapi_sparc_pthread_stub'
+		print ''
+		print '#define GL_STUB(fn, off)\t\t\t\\'
+		print '\tGLOBL_FN(fn);\t\t\t\t\\'
+		print 'fn:\tba\t__glapi_sparc_pthread_stub;\t\\'
+		print '\t sethi\tGL_OFF(off), %g3;\t\t\\'
+		print '\t.size\tfn,.-fn;'
+		print ''
+		print '#else /* Non-threaded version. */'
+		print ''
+		print '\t.type	__glapi_sparc_nothread_stub, @function'
+		print '__glapi_sparc_nothread_stub: /* Call offset in %g3 */'
+		print '\tmov\t%o7, %g1'
+		print '\tsethi\t%hi(_GLOBAL_OFFSET_TABLE_-4), %g2'
+		print '\tcall\t__glapi_sparc_get_pc'
+		print '\t add\t%g2, %lo(_GLOBAL_OFFSET_TABLE_+4), %g2'
+		print '\tmov\t%g1, %o7'
+		print '\tsrl\t%g3, 10, %g3'
+		print '\tsethi\t%hi(_glapi_Dispatch), %g1'
+		print '\tor\t%g1, %lo(_glapi_Dispatch), %g1'
+		print '\tGL_LL\t[%g2+%g1], %g2'
+		print '\tGL_LL\t[%g2], %g1'
+		print '\tGL_LL\t[%g1 + %g3], %g1'
+		print '\tjmp\t%g1'
+		print '\t nop'
+		print '\t.size\t__glapi_sparc_nothread_stub, .-__glapi_sparc_nothread_stub'
+		print ''
+		print '#define GL_STUB(fn, off)\t\t\t\\'
+		print '\tGLOBL_FN(fn);\t\t\t\t\\'
+		print 'fn:\tba\t__glapi_sparc_nothread_stub;\t\\'
+		print '\t sethi\tGL_OFF(off), %g3;\t\t\\'
+		print '\t.size\tfn,.-fn;'
+		print ''
+		print '#endif'
+		print ''
+		print '#define GL_STUB_ALIAS(fn, alias)		\\'
+		print '	.globl	fn;				\\'
+		print '	.set	fn, alias'
+		print ''
+		print '\t.text'
+		print '\t.align\t32'
+		print ''
+		print '\t.globl\tgl_dispatch_functions_start'
+		print '\tHIDDEN(gl_dispatch_functions_start)'
+		print 'gl_dispatch_functions_start:'
+		print ''
+		return
+
+	def printRealFooter(self):
+		print ''
+		print '\t.globl\tgl_dispatch_functions_end'
+		print '\tHIDDEN(gl_dispatch_functions_end)'
+		print 'gl_dispatch_functions_end:'
+		return
+
+	def printBody(self, api):
+		for f in api.functionIterateByOffset():
+			name = f.dispatch_name()
+
+			print '\tGL_STUB(gl%s, _gloffset_%s)' % (name, f.name)
+
+			if not f.is_static_entry_point(f.name):
+				print '\tHIDDEN(gl%s)' % (name)
+
+		for f in api.functionIterateByOffset():
+			name = f.dispatch_name()
+
+			if f.is_static_entry_point(f.name):
+				for n in f.entry_points:
+					if n != f.name:
+						text = '\tGL_STUB_ALIAS(gl%s, gl%s)' % (n, f.name)
+
+						if f.has_different_protocol(n):
+							print '#ifndef GLX_INDIRECT_RENDERING'
+							print text
+							print '#endif'
+						else:
+							print text
+
+		return
+
+
+def show_usage():
+	print "Usage: %s [-f input_file_name] [-m output_mode]" % sys.argv[0]
+	sys.exit(1)
+
+if __name__ == '__main__':
+	file_name = "gl_API.xml"
+	mode = "generic"
+
+	try:
+		(args, trail) = getopt.getopt(sys.argv[1:], "m:f:")
+	except Exception,e:
+		show_usage()
+
+	for (arg,val) in args:
+		if arg == '-m':
+			mode = val
+		elif arg == "-f":
+			file_name = val
+
+	if mode == "generic":
+		printer = PrintGenericStubs()
+	else:
+		print "ERROR: Invalid mode \"%s\" specified." % mode
+		show_usage()
+
+	api = gl_XML.parse_GL_API(file_name, glX_XML.glx_item_factory())
+	printer.Print(api)
diff --git a/src/mesa/glapi/gen/gl_XML.py b/src/mesa/glapi/gen/gl_XML.py
new file mode 100644
index 0000000000..a10a35e513
--- /dev/null
+++ b/src/mesa/glapi/gen/gl_XML.py
@@ -0,0 +1,967 @@
+#!/usr/bin/env python
+
+# (C) Copyright IBM Corporation 2004, 2005
+# All Rights Reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# on the rights to use, copy, modify, merge, publish, distribute, sub
+# license, and/or sell copies of the Software, and to permit persons to whom
+# the Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
+# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+#
+# Authors:
+#    Ian Romanick <idr@us.ibm.com>
+
+import libxml2
+import re, sys, string
+import typeexpr
+
+
+def parse_GL_API( file_name, factory = None ):
+	doc = libxml2.readFile( file_name, None, libxml2.XML_PARSE_XINCLUDE + libxml2.XML_PARSE_NOBLANKS + libxml2.XML_PARSE_DTDVALID + libxml2.XML_PARSE_DTDATTR + libxml2.XML_PARSE_DTDLOAD + libxml2.XML_PARSE_NOENT )
+	ret = doc.xincludeProcess()
+
+	if not factory:
+		factory = gl_item_factory()
+
+	api = factory.create_item( "api", None, None )
+	api.process_element( doc )
+
+	# After the XML has been processed, we need to go back and assign
+	# dispatch offsets to the functions that request that their offsets
+	# be assigned by the scripts.  Typically this means all functions
+	# that are not part of the ABI.
+
+	for func in api.functionIterateByCategory():
+		if func.assign_offset:
+			func.offset = api.next_offset;
+			api.next_offset += 1
+
+	doc.freeDoc()
+
+	return api
+
+
+def is_attr_true( element, name ):
+	"""Read a name value from an element's attributes.
+	
+	The value read from the attribute list must be either 'true' or
+	'false'.  If the value is 'false', zero will be returned.  If the
+	value is 'true', non-zero will be returned.  An exception will be
+	raised for any other value."""
+
+	value = element.nsProp( name, None )
+	if value == "true":
+		return 1
+	elif value == "false":
+		return 0
+	else:
+		raise RuntimeError('Invalid value "%s" for boolean "%s".' % (value, name))
+
+
+class gl_print_base:
+	"""Base class of all API pretty-printers.
+
+	In the model-view-controller pattern, this is the view.  Any derived
+	class will want to over-ride the printBody, printRealHader, and
+	printRealFooter methods.  Some derived classes may want to over-ride
+	printHeader and printFooter, or even Print (though this is unlikely).
+	"""
+
+	def __init__(self):
+		# Name of the script that is generating the output file.
+		# Every derived class should set this to the name of its
+		# source file.
+
+		self.name = "a"
+
+
+		# License on the *generated* source file.  This may differ
+		# from the license on the script that is generating the file.
+		# Every derived class should set this to some reasonable
+		# value.
+		#
+		# See license.py for an example of a reasonable value.
+
+		self.license = "The license for this file is unspecified."
+
+		
+		# The header_tag is the name of the C preprocessor define
+		# used to prevent multiple inclusion.  Typically only
+		# generated C header files need this to be set.  Setting it
+		# causes code to be generated automatically in printHeader
+		# and printFooter.
+
+		self.header_tag = None
+
+		
+		# List of file-private defines that must be undefined at the
+		# end of the file.  This can be used in header files to define
+		# names for use in the file, then undefine them at the end of
+		# the header file.
+
+		self.undef_list = []
+		return
+
+
+	def Print(self, api):
+		self.printHeader()
+		self.printBody(api)
+		self.printFooter()
+		return
+
+
+	def printHeader(self):
+		"""Print the header associated with all files and call the printRealHeader method."""
+
+		print '/* DO NOT EDIT - This file generated automatically by %s script */' \
+			% (self.name)
+		print ''
+		print '/*'
+		print ' * ' + self.license.replace('\n', '\n * ')
+		print ' */'
+		print ''
+		if self.header_tag:
+		    print '#if !defined( %s )' % (self.header_tag)
+		    print '#  define %s' % (self.header_tag)
+		    print ''
+		self.printRealHeader();
+		return
+
+
+	def printFooter(self):
+		"""Print the header associated with all files and call the printRealFooter method."""
+
+		self.printRealFooter()
+
+		if self.undef_list:
+			print ''
+			for u in self.undef_list:
+				print "#  undef %s" % (u)
+
+		if self.header_tag:
+			print ''
+			print '#endif /* !defined( %s ) */' % (self.header_tag)
+
+
+	def printRealHeader(self):
+		"""Print the "real" header for the created file.
+
+		In the base class, this function is empty.  All derived
+		classes should over-ride this function."""
+		return
+
+
+	def printRealFooter(self):
+		"""Print the "real" footer for the created file.
+
+		In the base class, this function is empty.  All derived
+		classes should over-ride this function."""
+		return
+
+
+	def printPure(self):
+		"""Conditionally define `PURE' function attribute.
+
+		Conditionally defines a preprocessor macro `PURE' that wraps
+		GCC's `pure' function attribute.  The conditional code can be
+		easilly adapted to other compilers that support a similar
+		feature.
+
+		The name is also added to the file's undef_list.
+		"""
+		self.undef_list.append("PURE")
+		print """#  if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
+#    define PURE __attribute__((pure))
+#  else
+#    define PURE
+#  endif"""
+		return
+
+
+	def printFastcall(self):
+		"""Conditionally define `FASTCALL' function attribute.
+
+		Conditionally defines a preprocessor macro `FASTCALL' that
+		wraps GCC's `fastcall' function attribute.  The conditional
+		code can be easilly adapted to other compilers that support a
+		similar feature.
+
+		The name is also added to the file's undef_list.
+		"""
+
+		self.undef_list.append("FASTCALL")
+		print """#  if defined(__i386__) && defined(__GNUC__) && !defined(__CYGWIN__) && !defined(__MINGW32__)
+#    define FASTCALL __attribute__((fastcall))
+#  else
+#    define FASTCALL
+#  endif"""
+		return
+
+
+	def printVisibility(self, S, s):
+		"""Conditionally define visibility function attribute.
+
+		Conditionally defines a preprocessor macro name S that wraps
+		GCC's visibility function attribute.  The visibility used is
+		the parameter s.  The conditional code can be easilly adapted
+		to other compilers that support a similar feature.
+
+		The name is also added to the file's undef_list.
+		"""
+
+		self.undef_list.append(S)
+		print """#  if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))) && defined(__ELF__)
+#    define %s  __attribute__((visibility("%s")))
+#  else
+#    define %s
+#  endif""" % (S, s, S)
+		return
+
+
+	def printNoinline(self):
+		"""Conditionally define `NOINLINE' function attribute.
+
+		Conditionally defines a preprocessor macro `NOINLINE' that
+		wraps GCC's `noinline' function attribute.  The conditional
+		code can be easilly adapted to other compilers that support a
+		similar feature.
+
+		The name is also added to the file's undef_list.
+		"""
+
+		self.undef_list.append("NOINLINE")
+		print """#  if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
+#    define NOINLINE __attribute__((noinline))
+#  else
+#    define NOINLINE
+#  endif"""
+		return
+
+
+def real_function_name(element):
+	name = element.nsProp( "name", None )
+	alias = element.nsProp( "alias", None )
+	
+	if alias:
+		return alias
+	else:
+		return name
+
+
+def real_category_name(c):
+	if re.compile("[1-9][0-9]*[.][0-9]+").match(c):
+		return "GL_VERSION_" + c.replace(".", "_")
+	else:
+		return c
+
+
+def classify_category(name, number):
+	"""Based on the category name and number, select a numerical class for it.
+	
+	Categories are divided into four classes numbered 0 through 3.  The
+	classes are:
+
+		0. Core GL versions, sorted by version number.
+		1. ARB extensions, sorted by extension number.
+		2. Non-ARB extensions, sorted by extension number.
+		3. Un-numbered extensions, sorted by extension name.
+	"""
+
+	try:
+		core_version = float(name)
+	except Exception,e:
+		core_version = 0.0
+
+	if core_version > 0.0:
+		cat_type = 0
+		key = name
+	elif name.startswith("GL_ARB_") or name.startswith("GLX_ARB_") or name.startswith("WGL_ARB_"):
+		cat_type = 1
+		key = int(number)
+	else:
+		if number != None:
+			cat_type = 2
+			key = int(number)
+		else:
+			cat_type = 3
+			key = name
+
+
+	return [cat_type, key]
+
+
+def create_parameter_string(parameters, include_names):
+	"""Create a parameter string from a list of gl_parameters."""
+
+	list = []
+	for p in parameters:
+		if p.is_padding:
+			continue
+
+		if include_names:
+			list.append( p.string() )
+		else:
+			list.append( p.type_string() )
+
+	if len(list) == 0: list = ["void"]
+
+	return string.join(list, ", ")
+
+
+class gl_item:
+	def __init__(self, element, context):
+		self.context = context
+		self.name = element.nsProp( "name", None )
+		self.category = real_category_name( element.parent.nsProp( "name", None ) )
+		return
+
+
+class gl_type( gl_item ):
+	def __init__(self, element, context):
+		gl_item.__init__(self, element, context)
+		self.size = int( element.nsProp( "size", None ), 0 )
+
+		te = typeexpr.type_expression( None )
+		tn = typeexpr.type_node()
+		tn.size = int( element.nsProp( "size", None ), 0 )
+		tn.integer = not is_attr_true( element, "float" )
+		tn.unsigned = is_attr_true( element, "unsigned" )
+		tn.name = "GL" + self.name
+		te.set_base_type_node( tn )
+
+		self.type_expr = te
+		return
+	
+
+	def get_type_expression(self):
+		return self.type_expr
+
+
+class gl_enum( gl_item ):
+	def __init__(self, element, context):
+		gl_item.__init__(self, element, context)
+		self.value = int( element.nsProp( "value", None ), 0 )
+
+		temp = element.nsProp( "count", None )
+		if not temp or temp == "?":
+			self.default_count = -1
+		else:
+			try:
+				c = int(temp)
+			except Exception,e:
+				raise RuntimeError('Invalid count value "%s" for enum "%s" in function "%s" when an integer was expected.' % (temp, self.name, n))
+
+			self.default_count = c
+
+		return
+
+
+	def priority(self):
+		"""Calculate a 'priority' for this enum name.
+		
+		When an enum is looked up by number, there may be many
+		possible names, but only one is the 'prefered' name.  The
+		priority is used to select which name is the 'best'.
+
+		Highest precedence is given to core GL name.  ARB extension
+		names have the next highest, followed by EXT extension names.
+		Vendor extension names are the lowest.
+		"""
+
+		if self.name.endswith( "_BIT" ):
+			bias = 1
+		else:
+			bias = 0
+
+		if self.category.startswith( "GL_VERSION_" ):
+			priority = 0
+		elif self.category.startswith( "GL_ARB_" ):
+			priority = 2
+		elif self.category.startswith( "GL_EXT_" ):
+			priority = 4
+		else:
+			priority = 6
+
+		return priority + bias
+
+
+
+class gl_parameter:
+	def __init__(self, element, context):
+		self.name = element.nsProp( "name", None )
+
+		ts = element.nsProp( "type", None )
+		self.type_expr = typeexpr.type_expression( ts, context )
+
+		temp = element.nsProp( "variable_param", None )
+		if temp:
+			self.count_parameter_list = temp.split( ' ' )
+		else:
+			self.count_parameter_list = []
+
+		# The count tag can be either a numeric string or the name of
+		# a variable.  If it is the name of a variable, the int(c)
+		# statement will throw an exception, and the except block will
+		# take over.
+
+		c = element.nsProp( "count", None )
+		try: 
+			count = int(c)
+			self.count = count
+			self.counter = None
+		except Exception,e:
+			count = 1
+			self.count = 0
+			self.counter = c
+		
+		self.count_scale = int(element.nsProp( "count_scale", None ))
+
+		elements = (count * self.count_scale)
+		if elements == 1:
+			elements = 0
+
+		#if ts == "GLdouble":
+		#	print '/* stack size -> %s = %u (before)*/' % (self.name, self.type_expr.get_stack_size())
+		#	print '/* # elements = %u */' % (elements)
+		self.type_expr.set_elements( elements )
+		#if ts == "GLdouble":
+		#	print '/* stack size -> %s = %u (after) */' % (self.name, self.type_expr.get_stack_size())
+
+		self.is_client_only = is_attr_true( element, 'client_only' )
+		self.is_counter     = is_attr_true( element, 'counter' )
+		self.is_output      = is_attr_true( element, 'output' )
+
+
+		# Pixel data has special parameters.
+
+		self.width      = element.nsProp('img_width',  None)
+		self.height     = element.nsProp('img_height', None)
+		self.depth      = element.nsProp('img_depth',  None)
+		self.extent     = element.nsProp('img_extent', None)
+
+		self.img_xoff   = element.nsProp('img_xoff',   None)
+		self.img_yoff   = element.nsProp('img_yoff',   None)
+		self.img_zoff   = element.nsProp('img_zoff',   None)
+		self.img_woff   = element.nsProp('img_woff',   None)
+
+		self.img_format = element.nsProp('img_format', None)
+		self.img_type   = element.nsProp('img_type',   None)
+		self.img_target = element.nsProp('img_target', None)
+
+		self.img_pad_dimensions = is_attr_true( element, 'img_pad_dimensions' )
+		self.img_null_flag      = is_attr_true( element, 'img_null_flag' )
+		self.img_send_null      = is_attr_true( element, 'img_send_null' )
+
+		self.is_padding = is_attr_true( element, 'padding' )
+		return
+
+
+	def compatible(self, other):
+		return 1
+
+
+	def is_array(self):
+		return self.is_pointer()
+
+
+	def is_pointer(self):
+		return self.type_expr.is_pointer()
+
+
+	def is_image(self):
+		if self.width:
+			return 1
+		else:
+			return 0
+
+
+	def is_variable_length(self):
+		return len(self.count_parameter_list) or self.counter
+
+
+	def is_64_bit(self):
+		count = self.type_expr.get_element_count()
+		if count:
+			if (self.size() / count) == 8:
+				return 1
+		else:
+			if self.size() == 8:
+				return 1
+
+		return 0
+
+
+	def string(self):
+		return self.type_expr.original_string + " " + self.name
+
+
+	def type_string(self):
+		return self.type_expr.original_string
+
+
+	def get_base_type_string(self):
+		return self.type_expr.get_base_name()
+
+
+	def get_dimensions(self):
+		if not self.width:
+			return [ 0, "0", "0", "0", "0" ]
+
+		dim = 1
+		w = self.width
+		h = "1"
+		d = "1"
+		e = "1"
+
+		if self.height:
+			dim = 2
+			h = self.height
+
+		if self.depth:
+			dim = 3
+			d = self.depth
+
+		if self.extent:
+			dim = 4
+			e = self.extent
+
+		return [ dim, w, h, d, e ]
+
+
+	def get_stack_size(self):
+		return self.type_expr.get_stack_size()
+
+
+	def size(self):
+		if self.is_image():
+			return 0
+		else:
+			return self.type_expr.get_element_size()
+
+
+	def get_element_count(self):
+		c = self.type_expr.get_element_count()
+		if c == 0:
+			return 1
+
+		return c
+
+
+	def size_string(self, use_parens = 1):
+		s = self.size()
+		if self.counter or self.count_parameter_list:
+			list = [ "compsize" ]
+
+			if self.counter and self.count_parameter_list:
+				list.append( self.counter )
+			elif self.counter:
+				list = [ self.counter ]
+
+			if s > 1:
+				list.append( str(s) )
+
+			if len(list) > 1 and use_parens :
+				return "(%s)" % (string.join(list, " * "))
+			else:
+				return string.join(list, " * ")
+
+		elif self.is_image():
+			return "compsize"
+		else:
+			return str(s)
+
+
+	def format_string(self):
+		if self.type_expr.original_string == "GLenum":
+			return "0x%x"
+		else:
+			return self.type_expr.format_string()
+
+
+
+class gl_function( gl_item ):
+	def __init__(self, element, context):
+		self.context = context
+		self.name = None
+
+		self.entry_points = []
+		self.return_type = "void"
+		self.parameters = []
+		self.offset = -1
+		self.initialized = 0
+		self.images = []
+
+		self.assign_offset = 0
+
+		self.static_entry_points = []
+
+		# Track the parameter string (for the function prototype)
+		# for each entry-point.  This is done because some functions
+		# change their prototype slightly when promoted from extension
+		# to ARB extension to core.  glTexImage3DEXT and glTexImage3D
+		# are good examples of this.  Scripts that need to generate
+		# code for these differing aliases need to real prototype
+		# for each entry-point.  Otherwise, they may generate code
+		# that won't compile.
+
+		self.parameter_strings = {}
+
+		self.process_element( element )
+
+		return
+
+	
+	def process_element(self, element):
+		name = element.nsProp( "name", None )
+		alias = element.nsProp( "alias", None )
+
+		if is_attr_true(element, "static_dispatch"):
+			self.static_entry_points.append(name)
+
+		self.entry_points.append( name )
+		if alias:
+			true_name = alias
+		else:
+			true_name = name
+
+			# Only try to set the offset when a non-alias
+			# entry-point is being processes.
+
+			offset = element.nsProp( "offset", None )
+			if offset:
+				try:
+					o = int( offset )
+					self.offset = o
+				except Exception, e:
+					self.offset = -1
+					if offset == "assign":
+						self.assign_offset = 1
+
+
+		if not self.name:
+			self.name = true_name
+		elif self.name != true_name:
+			raise RuntimeError("Function true name redefined.  Was %s, now %s." % (self.name, true_name))
+
+
+		# There are two possible cases.  The first time an entry-point
+		# with data is seen, self.initialized will be 0.  On that
+		# pass, we just fill in the data.  The next time an
+		# entry-point with data is seen, self.initialized will be 1.
+		# On that pass we have to make that the new values match the
+		# valuse from the previous entry-point.
+
+		parameters = []
+		return_type = "void"
+		child = element.children
+		while child:
+			if child.type == "element":
+				if child.name == "return":
+					return_type = child.nsProp( "type", None )
+				elif child.name == "param":
+					param = self.context.factory.create_item( "parameter", child, self.context)
+					parameters.append( param )
+
+			child = child.next
+
+
+		if self.initialized:
+			if self.return_type != return_type:
+				raise RuntimeError( "Return type changed in %s.  Was %s, now %s." % (name, self.return_type, return_type))
+
+			if len(parameters) != len(self.parameters):
+				raise RuntimeError( "Parameter count mismatch in %s.  Was %d, now %d." % (name, len(self.parameters), len(parameters)))
+
+			for j in range(0, len(parameters)):
+				p1 = parameters[j]
+				p2 = self.parameters[j]
+				if not p1.compatible( p2 ):
+					raise RuntimeError( 'Parameter type mismatch in %s.  "%s" was "%s", now "%s".' % (name, p2.name, p2.type_expr.original_string, p1.type_expr.original_string))
+
+
+		if true_name == name or not self.initialized:
+			self.return_type = return_type
+			self.parameters = parameters
+
+			for param in self.parameters:
+				if param.is_image():
+					self.images.append( param )
+
+		if element.children:
+			self.initialized = 1
+			self.parameter_strings[name] = create_parameter_string(parameters, 1)
+		else:
+			self.parameter_strings[name] = None
+
+		return
+
+
+	def get_images(self):
+		"""Return potentially empty list of input images."""
+		return self.images
+
+
+	def parameterIterator(self):
+		return self.parameters.__iter__();
+
+
+	def get_parameter_string(self, entrypoint = None):
+		if entrypoint:
+			s = self.parameter_strings[ entrypoint ]
+			if s:
+				return s
+		
+		return create_parameter_string( self.parameters, 1 )
+
+	def get_called_parameter_string(self):
+		p_string = ""
+		comma = ""
+
+		for p in self.parameterIterator():
+			p_string = p_string + comma + p.name
+			comma = ", "
+
+		return p_string
+
+
+	def is_abi(self):
+		return (self.offset >= 0 and not self.assign_offset)
+
+	def is_static_entry_point(self, name):
+		return name in self.static_entry_points
+
+	def dispatch_name(self):
+		if self.name in self.static_entry_points:
+			return self.name
+		else:
+			return "_dispatch_stub_%u" % (self.offset)
+
+	def static_name(self, name):
+		if name in self.static_entry_points:
+			return name
+		else:
+			return "_dispatch_stub_%u" % (self.offset)
+
+
+class gl_item_factory:
+	"""Factory to create objects derived from gl_item."""
+
+	def create_item(self, item_name, element, context):
+		if item_name == "function":
+			return gl_function(element, context)
+		if item_name == "type":
+			return gl_type(element, context)
+		elif item_name == "enum":
+			return gl_enum(element, context)
+		elif item_name == "parameter":
+			return gl_parameter(element, context)
+		elif item_name == "api":
+			return gl_api(self)
+		else:
+			return None
+
+
+class gl_api:
+	def __init__(self, factory):
+		self.functions_by_name = {}
+		self.enums_by_name = {}
+		self.types_by_name = {}
+
+		self.category_dict = {}
+		self.categories = [{}, {}, {}, {}]
+
+		self.factory = factory
+
+		self.next_offset = 0
+
+		typeexpr.create_initial_types()
+		return
+
+
+	def process_element(self, doc):
+		element = doc.children
+		while element.type != "element" or element.name != "OpenGLAPI":
+			element = element.next
+
+		if element:
+			self.process_OpenGLAPI(element)
+		return
+
+
+	def process_OpenGLAPI(self, element):
+		child = element.children
+		while child:
+			if child.type == "element":
+				if child.name == "category":
+					self.process_category( child )
+				elif child.name == "OpenGLAPI":
+					self.process_OpenGLAPI( child )
+
+			child = child.next
+
+		return
+
+
+	def process_category(self, cat):
+		cat_name = cat.nsProp( "name", None )
+		cat_number = cat.nsProp( "number", None )
+
+		[cat_type, key] = classify_category(cat_name, cat_number)
+		self.categories[cat_type][key] = [cat_name, cat_number]
+
+		child = cat.children
+		while child:
+			if child.type == "element":
+				if child.name == "function":
+					func_name = real_function_name( child )
+
+					temp_name = child.nsProp( "name", None )
+					self.category_dict[ temp_name ] = [cat_name, cat_number]
+
+					if self.functions_by_name.has_key( func_name ):
+						func = self.functions_by_name[ func_name ]
+						func.process_element( child )
+					else:
+						func = self.factory.create_item( "function", child, self )
+						self.functions_by_name[ func_name ] = func
+
+					if func.offset >= self.next_offset:
+						self.next_offset = func.offset + 1
+
+
+				elif child.name == "enum":
+					enum = self.factory.create_item( "enum", child, self )
+					self.enums_by_name[ enum.name ] = enum
+				elif child.name == "type":
+					t = self.factory.create_item( "type", child, self )
+					self.types_by_name[ "GL" + t.name ] = t
+
+
+			child = child.next
+
+		return
+
+
+	def functionIterateByCategory(self, cat = None):
+		"""Iterate over functions by category.
+		
+		If cat is None, all known functions are iterated in category
+		order.  See classify_category for details of the ordering.
+		Within a category, functions are sorted by name.  If cat is
+		not None, then only functions in that category are iterated.
+		"""
+		lists = [{}, {}, {}, {}]
+
+		for func in self.functionIterateAll():
+			[cat_name, cat_number] = self.category_dict[func.name]
+
+			if (cat == None) or (cat == cat_name):
+				[func_cat_type, key] = classify_category(cat_name, cat_number)
+
+				if not lists[func_cat_type].has_key(key):
+					lists[func_cat_type][key] = {}
+
+				lists[func_cat_type][key][func.name] = func
+
+
+		functions = []
+		for func_cat_type in range(0,4):
+			keys = lists[func_cat_type].keys()
+			keys.sort()
+
+			for key in keys:
+				names = lists[func_cat_type][key].keys()
+				names.sort()
+
+				for name in names:
+					functions.append(lists[func_cat_type][key][name])
+
+		return functions.__iter__()
+
+
+	def functionIterateByOffset(self):
+		max_offset = -1
+		for func in self.functions_by_name.itervalues():
+			if func.offset > max_offset:
+				max_offset = func.offset
+
+
+		temp = [None for i in range(0, max_offset + 1)]
+		for func in self.functions_by_name.itervalues():
+			if func.offset != -1:
+				temp[ func.offset ] = func
+
+
+		list = []
+		for i in range(0, max_offset + 1):
+			if temp[i]:
+				list.append(temp[i])
+
+		return list.__iter__();
+
+
+	def functionIterateAll(self):
+		return self.functions_by_name.itervalues()
+
+
+	def enumIterateByName(self):
+		keys = self.enums_by_name.keys()
+		keys.sort()
+		
+		list = []
+		for enum in keys:
+			list.append( self.enums_by_name[ enum ] )
+
+		return list.__iter__()
+
+
+	def categoryIterate(self):
+		"""Iterate over categories.
+		
+		Iterate over all known categories in the order specified by
+		classify_category.  Each iterated value is a tuple of the
+		name and number (which may be None) of the category.
+		"""
+
+		list = []
+		for cat_type in range(0,4):
+			keys = self.categories[cat_type].keys()
+			keys.sort()
+			
+			for key in keys:
+				list.append(self.categories[cat_type][key])
+				
+		return list.__iter__()
+
+
+	def get_category_for_name( self, name ):
+		if self.category_dict.has_key(name):
+			return self.category_dict[name]
+		else:
+			return ["<unknown category>", None]
+
+
+	def typeIterate(self):
+		return self.types_by_name.itervalues()
+
+
+	def find_type( self, type_name ):
+		if type_name in self.types_by_name:
+			return self.types_by_name[ type_name ].type_expr
+		else:
+			print "Unable to find base type matching \"%s\"." % (type_name)
+			return None
diff --git a/src/mesa/glapi/gen/gl_and_glX_API.xml b/src/mesa/glapi/gen/gl_and_glX_API.xml
new file mode 100644
index 0000000000..34c977e9c0
--- /dev/null
+++ b/src/mesa/glapi/gen/gl_and_glX_API.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<OpenGLAPI>
+<xi:include href="glX_API.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
+<xi:include href="gl_API.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
+</OpenGLAPI>
\ No newline at end of file
diff --git a/src/mesa/glapi/gen/gl_apitemp.py b/src/mesa/glapi/gen/gl_apitemp.py
new file mode 100644
index 0000000000..41a40fbeb6
--- /dev/null
+++ b/src/mesa/glapi/gen/gl_apitemp.py
@@ -0,0 +1,320 @@
+#!/usr/bin/env python
+
+# (C) Copyright IBM Corporation 2004, 2005
+# All Rights Reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# on the rights to use, copy, modify, merge, publish, distribute, sub
+# license, and/or sell copies of the Software, and to permit persons to whom
+# the Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
+# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+#
+# Authors:
+#    Ian Romanick <idr@us.ibm.com>
+
+import gl_XML, glX_XML
+import license
+import sys, getopt
+
+class PrintGlOffsets(gl_XML.gl_print_base):
+	def __init__(self, es=False):
+		gl_XML.gl_print_base.__init__(self)
+
+		self.name = "gl_apitemp.py (from Mesa)"
+		self.license = license.bsd_license_template % ( \
+"""Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
+(C) Copyright IBM Corporation 2004""", "BRIAN PAUL, IBM")
+
+		self.es = es
+
+		self.undef_list.append( "KEYWORD1" )
+		self.undef_list.append( "KEYWORD1_ALT" )
+		self.undef_list.append( "KEYWORD2" )
+		self.undef_list.append( "NAME" )
+		self.undef_list.append( "DISPATCH" )
+		self.undef_list.append( "RETURN_DISPATCH" )
+		self.undef_list.append( "DISPATCH_TABLE_NAME" )
+		self.undef_list.append( "UNUSED_TABLE_NAME" )
+		self.undef_list.append( "TABLE_ENTRY" )
+
+
+	def printFunction(self, f, name):
+		p_string = ""
+		o_string = ""
+		t_string = ""
+		comma = ""
+
+		if f.is_static_entry_point(name):
+			keyword = "KEYWORD1"
+		else:
+			keyword = "KEYWORD1_ALT"
+
+		n = f.static_name(name)
+
+		for p in f.parameterIterator():
+			if p.is_padding:
+				continue
+
+			if p.is_pointer():
+				cast = "(const void *) "
+			else:
+				cast = ""
+
+			t_string = t_string + comma + p.format_string()
+			p_string = p_string + comma + p.name
+			o_string = o_string + comma + cast + p.name
+			comma = ", "
+
+
+		if f.return_type != 'void':
+			dispatch = "RETURN_DISPATCH"
+		else:
+			dispatch = "DISPATCH"
+
+		need_proto = False
+		if not f.is_static_entry_point(name):
+			need_proto = True
+		elif self.es:
+			cat, num = api.get_category_for_name(name)
+			if (cat.startswith("es") or cat.startswith("GL_OES")):
+				need_proto = True
+		if need_proto:
+			print '%s %s KEYWORD2 NAME(%s)(%s);' % (keyword, f.return_type, n, f.get_parameter_string(name))
+			print ''
+
+		print '%s %s KEYWORD2 NAME(%s)(%s)' % (keyword, f.return_type, n, f.get_parameter_string(name))
+		print '{'
+		if p_string == "":
+			print '   %s(%s, (), (F, "gl%s();\\n"));' \
+				% (dispatch, f.name, name)
+		else:
+			print '   %s(%s, (%s), (F, "gl%s(%s);\\n", %s));' \
+				% (dispatch, f.name, p_string, name, t_string, o_string)
+		print '}'
+		print ''
+		return
+
+	def printRealHeader(self):
+		print ''
+		self.printVisibility( "HIDDEN", "hidden" )
+		print """
+/*
+ * This file is a template which generates the OpenGL API entry point
+ * functions.  It should be included by a .c file which first defines
+ * the following macros:
+ *   KEYWORD1 - usually nothing, but might be __declspec(dllexport) on Win32
+ *   KEYWORD2 - usually nothing, but might be __stdcall on Win32
+ *   NAME(n)  - builds the final function name (usually add "gl" prefix)
+ *   DISPATCH(func, args, msg) - code to do dispatch of named function.
+ *                               msg is a printf-style debug message.
+ *   RETURN_DISPATCH(func, args, msg) - code to do dispatch with a return value
+ *
+ * Here is an example which generates the usual OpenGL functions:
+ *   #define KEYWORD1
+ *   #define KEYWORD2
+ *   #define NAME(func)  gl##func
+ *   #define DISPATCH(func, args, msg)                           \\
+ *          struct _glapi_table *dispatch = CurrentDispatch;     \\
+ *          (*dispatch->func) args
+ *   #define RETURN DISPATCH(func, args, msg)                    \\
+ *          struct _glapi_table *dispatch = CurrentDispatch;     \\
+ *          return (*dispatch->func) args
+ *
+ */
+
+
+#if defined( NAME )
+#ifndef KEYWORD1
+#define KEYWORD1
+#endif
+
+#ifndef KEYWORD1_ALT
+#define KEYWORD1_ALT HIDDEN
+#endif
+
+#ifndef KEYWORD2
+#define KEYWORD2
+#endif
+
+#ifndef DISPATCH
+#error DISPATCH must be defined
+#endif
+
+#ifndef RETURN_DISPATCH
+#error RETURN_DISPATCH must be defined
+#endif
+
+"""
+		return
+
+    
+
+	def printInitDispatch(self, api):
+		print """
+#endif /* defined( NAME ) */
+
+/*
+ * This is how a dispatch table can be initialized with all the functions
+ * we generated above.
+ */
+#ifdef DISPATCH_TABLE_NAME
+
+#ifndef TABLE_ENTRY
+#error TABLE_ENTRY must be defined
+#endif
+
+#ifdef _GLAPI_SKIP_NORMAL_ENTRY_POINTS
+#error _GLAPI_SKIP_NORMAL_ENTRY_POINTS must not be defined
+#endif
+
+_glapi_proc DISPATCH_TABLE_NAME[] = {"""
+		for f in api.functionIterateByOffset():
+			print '   TABLE_ENTRY(%s),' % (f.dispatch_name())
+
+		print '   /* A whole bunch of no-op functions.  These might be called'
+		print '    * when someone tries to call a dynamically-registered'
+		print '    * extension function without a current rendering context.'
+		print '    */'
+		for i in range(1, 100):
+			print '   TABLE_ENTRY(Unused),'
+
+		print '};'
+		print '#endif /* DISPATCH_TABLE_NAME */'
+		print ''
+		return
+
+
+	def printAliasedTable(self, api):
+		print """
+/*
+ * This is just used to silence compiler warnings.
+ * We list the functions which are not otherwise used.
+ */
+#ifdef UNUSED_TABLE_NAME
+_glapi_proc UNUSED_TABLE_NAME[] = {"""
+
+		normal_entries = []
+		proto_entries = []
+		for f in api.functionIterateByOffset():
+			normal_ents, proto_ents = self.classifyEntryPoints(f)
+
+			# exclude f.name
+			if f.name in normal_ents:
+				normal_ents.remove(f.name)
+			elif f.name in proto_ents:
+				proto_ents.remove(f.name)
+
+			normal_ents = [f.static_name(ent) for ent in normal_ents]
+			proto_ents = [f.static_name(ent) for ent in proto_ents]
+
+			normal_entries.extend(normal_ents)
+			proto_entries.extend(proto_ents)
+
+		print '#ifndef _GLAPI_SKIP_NORMAL_ENTRY_POINTS'
+		for ent in normal_entries:
+			print '   TABLE_ENTRY(%s),' % (ent)
+		print '#endif /* _GLAPI_SKIP_NORMAL_ENTRY_POINTS */'
+		print '#ifndef _GLAPI_SKIP_PROTO_ENTRY_POINTS'
+		for ent in proto_entries:
+			print '   TABLE_ENTRY(%s),' % (ent)
+		print '#endif /* _GLAPI_SKIP_PROTO_ENTRY_POINTS */'
+
+		print '};'
+		print '#endif /*UNUSED_TABLE_NAME*/'
+		print ''
+		return
+
+
+	def classifyEntryPoints(self, func):
+		normal_names = []
+		normal_stubs = []
+		proto_names = []
+		proto_stubs = []
+		# classify the entry points
+		for name in func.entry_points:
+			if func.has_different_protocol(name):
+				if func.is_static_entry_point(name):
+					proto_names.append(name)
+				else:
+					proto_stubs.append(name)
+			else:
+				if func.is_static_entry_point(name):
+					normal_names.append(name)
+				else:
+					normal_stubs.append(name)
+		# there can be at most one stub for a function
+		if normal_stubs:
+			normal_names.append(normal_stubs[0])
+		elif proto_stubs:
+			proto_names.append(proto_stubs[0])
+
+		return (normal_names, proto_names)
+
+	def printBody(self, api):
+		normal_entry_points = []
+		proto_entry_points = []
+		for func in api.functionIterateByOffset():
+			normal_ents, proto_ents = self.classifyEntryPoints(func)
+			normal_entry_points.append((func, normal_ents))
+			proto_entry_points.append((func, proto_ents))
+
+		print '#ifndef _GLAPI_SKIP_NORMAL_ENTRY_POINTS'
+		print ''
+		for func, ents in normal_entry_points:
+			for ent in ents:
+				self.printFunction(func, ent)
+		print ''
+		print '#endif /* _GLAPI_SKIP_NORMAL_ENTRY_POINTS */'
+		print ''
+		print '/* these entry points might require different protocols */'
+		print '#ifndef _GLAPI_SKIP_PROTO_ENTRY_POINTS'
+		print ''
+		for func, ents in proto_entry_points:
+			for ent in ents:
+				self.printFunction(func, ent)
+		print ''
+		print '#endif /* _GLAPI_SKIP_PROTO_ENTRY_POINTS */'
+		print ''
+
+		self.printInitDispatch(api)
+		self.printAliasedTable(api)
+		return
+
+
+def show_usage():
+	print "Usage: %s [-f input_file_name] [-c]" % sys.argv[0]
+	print "-c          Enable compatibility with OpenGL ES."
+	sys.exit(1)
+
+if __name__ == '__main__':
+	file_name = "gl_API.xml"
+    
+	try:
+		(args, trail) = getopt.getopt(sys.argv[1:], "f:c")
+	except Exception,e:
+		show_usage()
+
+	es = False
+	for (arg,val) in args:
+		if arg == "-f":
+			file_name = val
+		elif arg == "-c":
+			es = True
+
+	api = gl_XML.parse_GL_API(file_name, glX_XML.glx_item_factory())
+
+	printer = PrintGlOffsets(es)
+	printer.Print(api)
diff --git a/src/mesa/glapi/gen/gl_enums.py b/src/mesa/glapi/gen/gl_enums.py
new file mode 100644
index 0000000000..3a9ea3c86c
--- /dev/null
+++ b/src/mesa/glapi/gen/gl_enums.py
@@ -0,0 +1,243 @@
+#!/usr/bin/python2
+# -*- Mode: Python; py-indent-offset: 8 -*-
+
+# (C) Copyright Zack Rusin 2005
+# All Rights Reserved.
+# 
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# on the rights to use, copy, modify, merge, publish, distribute, sub
+# license, and/or sell copies of the Software, and to permit persons to whom
+# the Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
+# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+#
+# Authors:
+#    Zack Rusin <zack@kde.org>
+
+import license
+import gl_XML
+import sys, getopt
+
+class PrintGlEnums(gl_XML.gl_print_base):
+
+	def __init__(self):
+		gl_XML.gl_print_base.__init__(self)
+
+		self.name = "gl_enums.py (from Mesa)"
+		self.license = license.bsd_license_template % ( \
+"""Copyright (C) 1999-2005 Brian Paul All Rights Reserved.""", "BRIAN PAUL")
+		self.enum_table = {}
+
+
+	def printRealHeader(self):
+		print '#include "main/glheader.h"'
+		print '#include "main/mfeatures.h"'
+		print '#include "main/enums.h"'
+		print '#include "main/imports.h"'
+		print ''
+		print 'typedef struct {'
+		print '   size_t offset;'
+		print '   int n;'
+		print '} enum_elt;'
+		print ''
+		return
+
+	def print_code(self):
+		print """
+typedef int (*cfunc)(const void *, const void *);
+
+/**
+ * Compare a key name to an element in the \c all_enums array.
+ *
+ * \c bsearch always passes the key as the first parameter and the pointer
+ * to the array element as the second parameter.  We can elimiate some
+ * extra work by taking advantage of that fact.
+ *
+ * \param a  Pointer to the desired enum name.
+ * \param b  Pointer to an element of the \c all_enums array.
+ */
+static int compar_name( const char *a, const enum_elt *b )
+{
+   return strcmp( a, & enum_string_table[ b->offset ] );
+}
+
+/**
+ * Compare a key enum value to an element in the \c all_enums array.
+ *
+ * \c bsearch always passes the key as the first parameter and the pointer
+ * to the array element as the second parameter.  We can elimiate some
+ * extra work by taking advantage of that fact.
+ *
+ * \param a  Pointer to the desired enum name.
+ * \param b  Pointer to an index into the \c all_enums array.
+ */
+static int compar_nr( const int *a, const unsigned *b )
+{
+   return a[0] - all_enums[*b].n;
+}
+
+
+static char token_tmp[20];
+
+const char *_mesa_lookup_enum_by_nr( int nr )
+{
+   unsigned * i;
+
+   i = (unsigned *) _mesa_bsearch(& nr, reduced_enums,
+                                  Elements(reduced_enums),
+                                  sizeof(reduced_enums[0]),
+                                  (cfunc) compar_nr);
+
+   if ( i != NULL ) {
+      return & enum_string_table[ all_enums[ *i ].offset ];
+   }
+   else {
+      /* this is not re-entrant safe, no big deal here */
+      sprintf(token_tmp, "0x%x", nr);
+      return token_tmp;
+   }
+}
+
+/* Get the name of an enum given that it is a primitive type.  Avoids
+ * GL_FALSE/GL_POINTS ambiguity and others.
+ */
+const char *_mesa_lookup_prim_by_nr( int nr )
+{
+   switch (nr) {
+   case GL_POINTS: return "GL_POINTS";
+   case GL_LINES: return "GL_LINES";
+   case GL_LINE_STRIP: return "GL_LINE_STRIP";
+   case GL_LINE_LOOP: return "GL_LINE_LOOP";
+   case GL_TRIANGLES: return "GL_TRIANGLES";
+   case GL_TRIANGLE_STRIP: return "GL_TRIANGLE_STRIP";
+   case GL_TRIANGLE_FAN: return "GL_TRIANGLE_FAN";
+   case GL_QUADS: return "GL_QUADS";
+   case GL_QUAD_STRIP: return "GL_QUAD_STRIP";
+   case GL_POLYGON: return "GL_POLYGON";
+   case GL_POLYGON+1: return "OUTSIDE_BEGIN_END";
+   default: return "<invalid>";
+   }
+}
+
+
+
+int _mesa_lookup_enum_by_name( const char *symbol )
+{
+   enum_elt * f = NULL;
+
+   if ( symbol != NULL ) {
+      f = (enum_elt *) _mesa_bsearch(symbol, all_enums,
+                                     Elements(all_enums),
+                                     sizeof( enum_elt ),
+                                     (cfunc) compar_name);
+   }
+
+   return (f != NULL) ? f->n : -1;
+}
+
+"""
+		return
+
+
+	def printBody(self, api):
+		self.process_enums( api )
+
+		keys = self.enum_table.keys()
+		keys.sort()
+
+		name_table = []
+		enum_table = {}
+
+		for enum in keys:
+			low_pri = 9
+			for [name, pri] in self.enum_table[ enum ]:
+				name_table.append( [name, enum] )
+
+				if pri < low_pri:
+					low_pri = pri
+					enum_table[enum] = name
+						
+
+		name_table.sort()
+
+		string_offsets = {}
+		i = 0;
+		print 'LONGSTRING static const char enum_string_table[] = '
+		for [name, enum] in name_table:
+			print '   "%s\\0"' % (name)
+			string_offsets[ name ] = i
+			i += len(name) + 1
+
+		print '   ;'
+		print ''
+
+
+		print 'static const enum_elt all_enums[%u] =' % (len(name_table))
+		print '{'
+		for [name, enum] in name_table:
+			print '   { %5u, 0x%08X }, /* %s */' % (string_offsets[name], enum, name)
+		print '};'
+		print ''
+
+		print 'static const unsigned reduced_enums[%u] =' % (len(keys))
+		print '{'
+		for enum in keys:
+			name = enum_table[ enum ]
+			if [name, enum] not in name_table:
+				print '      /* Error! %s, 0x%04x */ 0,' % (name, enum)
+			else:
+				i = name_table.index( [name, enum] )
+
+				print '      %4u, /* %s */' % (i, name)
+		print '};'
+
+
+		self.print_code()
+		return
+
+
+	def process_enums(self, api):
+		self.enum_table = {}
+		
+		for obj in api.enumIterateByName():
+			if obj.value not in self.enum_table:
+				self.enum_table[ obj.value ] = []
+
+
+			name = "GL_" + obj.name
+			priority = obj.priority()
+			self.enum_table[ obj.value ].append( [name, priority] )
+
+
+def show_usage():
+	print "Usage: %s [-f input_file_name]" % sys.argv[0]
+	sys.exit(1)
+
+if __name__ == '__main__':
+	file_name = "gl_API.xml"
+
+	try:
+		(args, trail) = getopt.getopt(sys.argv[1:], "f:")
+	except Exception,e:
+		show_usage()
+
+	for (arg,val) in args:
+		if arg == "-f":
+			file_name = val
+
+	api = gl_XML.parse_GL_API( file_name )
+
+	printer = PrintGlEnums()
+	printer.Print( api )
diff --git a/src/mesa/glapi/gen/gl_offsets.py b/src/mesa/glapi/gen/gl_offsets.py
new file mode 100644
index 0000000000..54867b3463
--- /dev/null
+++ b/src/mesa/glapi/gen/gl_offsets.py
@@ -0,0 +1,120 @@
+#!/usr/bin/env python
+
+# (C) Copyright IBM Corporation 2004, 2005
+# All Rights Reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# on the rights to use, copy, modify, merge, publish, distribute, sub
+# license, and/or sell copies of the Software, and to permit persons to whom
+# the Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
+# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+#
+# Authors:
+#    Ian Romanick <idr@us.ibm.com>
+
+import gl_XML
+import license
+import sys, getopt
+
+class PrintGlOffsets(gl_XML.gl_print_base):
+	def __init__(self, es=False):
+		gl_XML.gl_print_base.__init__(self)
+
+		self.es = es
+		self.name = "gl_offsets.py (from Mesa)"
+		self.header_tag = '_GLAPI_OFFSETS_H_'
+		self.license = license.bsd_license_template % ( \
+"""Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
+(C) Copyright IBM Corporation 2004""", "BRIAN PAUL, IBM")
+		return
+
+	def printBody(self, api):
+		print '/* this file should not be included directly in mesa */'
+		print ''
+
+		functions = []
+		abi_functions = []
+		alias_functions = []
+		count = 0
+		for f in api.functionIterateByOffset():
+			if not f.is_abi():
+				functions.append( [f, count] )
+				count += 1
+			else:
+				abi_functions.append( f )
+
+			if self.es:
+				# remember functions with aliases
+				if len(f.entry_points) > 1:
+					alias_functions.append(f)
+
+		for f in abi_functions:
+			print '#define _gloffset_%s %d' % (f.name, f.offset)
+			last_static = f.offset
+
+		print ''
+		print '#if !defined(_GLAPI_USE_REMAP_TABLE)'
+		print ''
+
+		for [f, index] in functions:
+			print '#define _gloffset_%s %d' % (f.name, f.offset)
+
+		print '#define _gloffset_FIRST_DYNAMIC %d' % (api.next_offset)
+
+		print ''
+		print '#else'
+		print ''
+
+		for [f, index] in functions:
+			print '#define _gloffset_%s driDispatchRemapTable[%s_remap_index]' % (f.name, f.name)
+
+		print ''
+		print '#endif /* !defined(_GLAPI_USE_REMAP_TABLE) */'
+
+		if alias_functions:
+			print ''
+			print '/* define aliases for compatibility */'
+			for f in alias_functions:
+				for name in f.entry_points:
+					if name != f.name:
+						print '#define _gloffset_%s _gloffset_%s' % (name, f.name)
+		return
+
+
+def show_usage():
+	print "Usage: %s [-f input_file_name] [-c]" % sys.argv[0]
+	print "    -c        Enable compatibility with OpenGL ES."
+	sys.exit(1)
+
+if __name__ == '__main__':
+	file_name = "gl_API.xml"
+    
+	try:
+		(args, trail) = getopt.getopt(sys.argv[1:], "f:c")
+	except Exception,e:
+		show_usage()
+
+	es = False
+	for (arg,val) in args:
+		if arg == "-f":
+			file_name = val
+		elif arg == "-c":
+			es = True
+
+	api = gl_XML.parse_GL_API( file_name )
+
+	printer = PrintGlOffsets(es)
+	printer.Print( api )
diff --git a/src/mesa/glapi/gen/gl_procs.py b/src/mesa/glapi/gen/gl_procs.py
new file mode 100644
index 0000000000..5de61fbdfe
--- /dev/null
+++ b/src/mesa/glapi/gen/gl_procs.py
@@ -0,0 +1,215 @@
+#!/usr/bin/env python
+
+# (C) Copyright IBM Corporation 2004, 2005
+# All Rights Reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# on the rights to use, copy, modify, merge, publish, distribute, sub
+# license, and/or sell copies of the Software, and to permit persons to whom
+# the Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
+# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+#
+# Authors:
+#    Ian Romanick <idr@us.ibm.com>
+
+import license
+import gl_XML, glX_XML
+import sys, getopt
+
+class PrintGlProcs(gl_XML.gl_print_base):
+	def __init__(self, long_strings, es=False):
+		gl_XML.gl_print_base.__init__(self)
+
+		self.es = es
+		self.long_strings = long_strings
+		self.name = "gl_procs.py (from Mesa)"
+		self.license = license.bsd_license_template % ( \
+"""Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
+(C) Copyright IBM Corporation 2004, 2006""", "BRIAN PAUL, IBM")
+
+
+	def printRealHeader(self):
+		print """
+/* This file is only included by glapi.c and is used for
+ * the GetProcAddress() function
+ */
+
+typedef struct {
+    GLint Name_offset;
+#if defined(NEED_FUNCTION_POINTER) || defined(GLX_INDIRECT_RENDERING)
+    _glapi_proc Address;
+#endif
+    GLuint Offset;
+} glprocs_table_t;
+
+#if   !defined(NEED_FUNCTION_POINTER) && !defined(GLX_INDIRECT_RENDERING)
+#  define NAME_FUNC_OFFSET(n,f1,f2,f3,o) { n , o }
+#elif  defined(NEED_FUNCTION_POINTER) && !defined(GLX_INDIRECT_RENDERING)
+#  define NAME_FUNC_OFFSET(n,f1,f2,f3,o) { n , (_glapi_proc) f1 , o }
+#elif  defined(NEED_FUNCTION_POINTER) &&  defined(GLX_INDIRECT_RENDERING)
+#  define NAME_FUNC_OFFSET(n,f1,f2,f3,o) { n , (_glapi_proc) f2 , o }
+#elif !defined(NEED_FUNCTION_POINTER) &&  defined(GLX_INDIRECT_RENDERING)
+#  define NAME_FUNC_OFFSET(n,f1,f2,f3,o) { n , (_glapi_proc) f3 , o }
+#endif
+
+"""
+		return
+
+	def printRealFooter(self):
+		print ''
+		print '#undef NAME_FUNC_OFFSET'
+		return
+
+	def printFunctionString(self, name):
+		if self.long_strings:
+			print '    "gl%s\\0"' % (name)
+		else:
+			print "    'g','l',",
+			for c in name:
+				print "'%s'," % (c),
+			
+			print "'\\0',"
+
+
+	def printBody(self, api):
+		print ''
+		if self.long_strings:
+			print 'static const char gl_string_table[] ='
+		else:
+			print 'static const char gl_string_table[] = {'
+
+		base_offset = 0
+		table = []
+		for func in api.functionIterateByOffset():
+			name = func.dispatch_name()
+			self.printFunctionString(func.name)
+			table.append((base_offset, "gl" + name, "gl" + name, "NULL", func.name))
+
+			# The length of the function's name, plus 2 for "gl",
+			# plus 1 for the NUL.
+
+			base_offset += len(func.name) + 3
+
+
+		for func in api.functionIterateByOffset():
+			for n in func.entry_points:
+				if n != func.name:
+					name = func.dispatch_name()
+					self.printFunctionString( n )
+					
+					if func.has_different_protocol(n):
+						alt_name = "gl" + func.static_glx_name(n)
+						table.append((base_offset, "gl" + name, alt_name, alt_name, func.name))
+					else:
+						table.append((base_offset, "gl" + name, "gl" + name, "NULL", func.name))
+
+					base_offset += len(n) + 3
+
+
+		if self.long_strings:
+			print '    ;'
+		else:
+			print '};'
+
+		print ''
+		print ''
+		print "#ifdef USE_MGL_NAMESPACE"
+		for func in api.functionIterateByOffset():
+			for n in func.entry_points:
+				if (not func.is_static_entry_point(func.name)) or (func.has_different_protocol(n) and not func.is_static_entry_point(n)):
+					print '#define gl_dispatch_stub_%u mgl_dispatch_stub_%u' % (func.offset, func.offset)
+					break
+		print "#endif /* USE_MGL_NAMESPACE */"
+		print ''
+		print ''
+		print '#if defined(NEED_FUNCTION_POINTER) || defined(GLX_INDIRECT_RENDERING)'
+		for func in api.functionIterateByOffset():
+			for n in func.entry_points:
+				if (not func.is_static_entry_point(func.name)) or (func.has_different_protocol(n) and not func.is_static_entry_point(n)):
+					print '%s GLAPIENTRY gl_dispatch_stub_%u(%s);' % (func.return_type, func.offset, func.get_parameter_string())
+					break
+
+		if self.es:
+			categories = {}
+			for func in api.functionIterateByOffset():
+				for n in func.entry_points:
+					cat, num = api.get_category_for_name(n)
+					if (cat.startswith("es") or cat.startswith("GL_OES")):
+						if not categories.has_key(cat):
+							categories[cat] = []
+						proto = 'GLAPI %s GLAPIENTRY %s(%s);' \
+								% (func.return_type, "gl" + n, func.get_parameter_string(n))
+						categories[cat].append(proto)
+			if categories:
+				print ''
+				print '/* OpenGL ES specific prototypes */'
+				print ''
+				keys = categories.keys()
+				keys.sort()
+				for key in keys:
+					print '/* category %s */' % key
+					print "\n".join(categories[key])
+				print ''
+
+		print '#endif /* defined(NEED_FUNCTION_POINTER) || defined(GLX_INDIRECT_RENDERING) */'
+
+		print ''
+		print 'static const glprocs_table_t static_functions[] = {'
+
+		for info in table:
+			print '    NAME_FUNC_OFFSET(%5u, %s, %s, %s, _gloffset_%s),' % info
+
+		print '    NAME_FUNC_OFFSET(-1, NULL, NULL, NULL, 0)'
+		print '};'
+		return
+
+
+def show_usage():
+	print "Usage: %s [-f input_file_name] [-m mode] [-c]" % sys.argv[0]
+	print "-c          Enable compatibility with OpenGL ES."
+	print "-m mode     mode can be one of:"
+	print "    long  - Create code for compilers that can handle very"
+	print "            long string constants. (default)"
+	print "    short - Create code for compilers that can only handle"
+	print "            ANSI C89 string constants."
+	sys.exit(1)
+
+if __name__ == '__main__':
+	file_name = "gl_API.xml"
+
+	try:
+		(args, trail) = getopt.getopt(sys.argv[1:], "f:m:c")
+	except Exception,e:
+		show_usage()
+
+	long_string = 1
+	es = False
+	for (arg,val) in args:
+		if arg == "-f":
+			file_name = val
+		elif arg == "-m":
+			if val == "short":
+				long_string = 0
+			elif val == "long":
+				long_string = 1
+			else:
+				show_usage()
+		elif arg == "-c":
+		    es = True
+
+	api = gl_XML.parse_GL_API(file_name, glX_XML.glx_item_factory())
+	printer = PrintGlProcs(long_string, es)
+	printer.Print(api)
diff --git a/src/mesa/glapi/gen/gl_table.py b/src/mesa/glapi/gen/gl_table.py
new file mode 100644
index 0000000000..3bd7569e92
--- /dev/null
+++ b/src/mesa/glapi/gen/gl_table.py
@@ -0,0 +1,229 @@
+#!/usr/bin/python2
+
+# (C) Copyright IBM Corporation 2004
+# All Rights Reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# on the rights to use, copy, modify, merge, publish, distribute, sub
+# license, and/or sell copies of the Software, and to permit persons to whom
+# the Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
+# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+#
+# Authors:
+#    Ian Romanick <idr@us.ibm.com>
+
+import gl_XML
+import license
+import sys, getopt
+
+class PrintGlTable(gl_XML.gl_print_base):
+	def __init__(self, es=False):
+		gl_XML.gl_print_base.__init__(self)
+
+		self.es = es
+		self.header_tag = '_GLAPI_TABLE_H_'
+		self.name = "gl_table.py (from Mesa)"
+		self.license = license.bsd_license_template % ( \
+"""Copyright (C) 1999-2003  Brian Paul   All Rights Reserved.
+(C) Copyright IBM Corporation 2004""", "BRIAN PAUL, IBM")
+		return
+
+
+	def printBody(self, api):
+		for f in api.functionIterateByOffset():
+			arg_string = f.get_parameter_string()
+			print '   %s (GLAPIENTRYP %s)(%s); /* %d */' % (f.return_type, f.name, arg_string, f.offset)
+
+
+	def printRealHeader(self):
+		print '#ifndef GLAPIENTRYP'
+		print '# ifndef GLAPIENTRY'
+		print '#  define GLAPIENTRY'
+		print '# endif'
+		print ''
+		print '# define GLAPIENTRYP GLAPIENTRY *'
+		print '#endif'
+		print ''
+		print ''
+		print 'struct _glapi_table'
+		print '{'
+		return
+
+
+	def printRealFooter(self):
+		print '};'
+		return
+
+
+class PrintRemapTable(gl_XML.gl_print_base):
+	def __init__(self, es=False):
+		gl_XML.gl_print_base.__init__(self)
+
+		self.es = es
+		self.header_tag = '_GLAPI_DISPATCH_H_'
+		self.name = "gl_table.py (from Mesa)"
+		self.license = license.bsd_license_template % ("(C) Copyright IBM Corporation 2005", "IBM")
+		return
+
+
+	def printRealHeader(self):
+		print """
+/* this file should not be included directly in mesa */
+
+/**
+ * \\file glapidispatch.h
+ * Macros for handling GL dispatch tables.
+ *
+ * For each known GL function, there are 3 macros in this file.  The first
+ * macro is named CALL_FuncName and is used to call that GL function using
+ * the specified dispatch table.  The other 2 macros, called GET_FuncName
+ * can SET_FuncName, are used to get and set the dispatch pointer for the
+ * named function in the specified dispatch table.
+ */
+"""
+		
+		return
+
+	def printBody(self, api):
+		print '#define CALL_by_offset(disp, cast, offset, parameters) \\'
+		print '    (*(cast (GET_by_offset(disp, offset)))) parameters'
+		print '#define GET_by_offset(disp, offset) \\'
+		print '    (offset >= 0) ? (((_glapi_proc *)(disp))[offset]) : NULL'
+		print '#define SET_by_offset(disp, offset, fn) \\'
+		print '    do { \\'
+		print '        if ( (offset) < 0 ) { \\'
+		print '            /* fprintf( stderr, "[%s:%u] SET_by_offset(%p, %d, %s)!\\n", */ \\'
+		print '            /*         __func__, __LINE__, disp, offset, # fn); */ \\'
+		print '            /* abort(); */ \\'
+		print '        } \\'
+		print '        else { \\'
+		print '            ( (_glapi_proc *) (disp) )[offset] = (_glapi_proc) fn; \\'
+		print '        } \\'
+		print '    } while(0)'
+		print ''
+
+		functions = []
+		abi_functions = []
+		alias_functions = []
+		count = 0
+		for f in api.functionIterateByOffset():
+			if not f.is_abi():
+				functions.append( [f, count] )
+				count += 1
+			else:
+				abi_functions.append( f )
+
+			if self.es:
+				# remember functions with aliases
+				if len(f.entry_points) > 1:
+					alias_functions.append(f)
+
+
+		for f in abi_functions:
+			print '#define CALL_%s(disp, parameters) (*((disp)->%s)) parameters' % (f.name, f.name)
+			print '#define GET_%s(disp) ((disp)->%s)' % (f.name, f.name)
+			print '#define SET_%s(disp, fn) ((disp)->%s = fn)' % (f.name, f.name)
+
+
+		print ''
+		print '#if !defined(_GLAPI_USE_REMAP_TABLE)'
+		print ''
+
+		for [f, index] in functions:
+			print '#define CALL_%s(disp, parameters) (*((disp)->%s)) parameters' % (f.name, f.name)
+			print '#define GET_%s(disp) ((disp)->%s)' % (f.name, f.name)
+			print '#define SET_%s(disp, fn) ((disp)->%s = fn)' % (f.name, f.name)
+
+		print ''
+		print '#else'
+		print ''
+		print '#define driDispatchRemapTable_size %u' % (count)
+		print 'extern int driDispatchRemapTable[ driDispatchRemapTable_size ];'
+		print ''
+
+		for [f, index] in functions:
+			print '#define %s_remap_index %u' % (f.name, index)
+
+		print ''
+
+		for [f, index] in functions:
+			arg_string = gl_XML.create_parameter_string( f.parameters, 0 )
+			cast = '%s (GLAPIENTRYP)(%s)' % (f.return_type, arg_string)
+
+			print '#define CALL_%s(disp, parameters) CALL_by_offset(disp, (%s), driDispatchRemapTable[%s_remap_index], parameters)' % (f.name, cast, f.name)
+			print '#define GET_%s(disp) GET_by_offset(disp, driDispatchRemapTable[%s_remap_index])' % (f.name, f.name)
+			print '#define SET_%s(disp, fn) SET_by_offset(disp, driDispatchRemapTable[%s_remap_index], fn)' % (f.name, f.name)
+
+
+		print ''
+		print '#endif /* !defined(_GLAPI_USE_REMAP_TABLE) */'
+
+		if alias_functions:
+			print ''
+			print '/* define aliases for compatibility */'
+			for f in alias_functions:
+				for name in f.entry_points:
+					if name != f.name:
+						print '#define CALL_%s(disp, parameters) CALL_%s(disp, parameters)' % (name, f.name)
+						print '#define GET_%s(disp) GET_%s(disp)' % (name, f.name)
+						print '#define SET_%s(disp, fn) SET_%s(disp, fn)' % (name, f.name)
+			print ''
+
+			print '#if defined(_GLAPI_USE_REMAP_TABLE)'
+			for f in alias_functions:
+				for name in f.entry_points:
+					if name != f.name:
+						print '#define %s_remap_index %s_remap_index' % (name, f.name)
+			print '#endif /* defined(_GLAPI_USE_REMAP_TABLE) */'
+			print ''
+
+		return
+
+
+def show_usage():
+	print "Usage: %s [-f input_file_name] [-m mode] [-c]" % sys.argv[0]
+	print "    -m mode   Mode can be 'table' or 'remap_table'."
+	print "    -c        Enable compatibility with OpenGL ES."
+	sys.exit(1)
+
+if __name__ == '__main__':
+	file_name = "gl_API.xml"
+    
+	try:
+		(args, trail) = getopt.getopt(sys.argv[1:], "f:m:c")
+	except Exception,e:
+		show_usage()
+
+	mode = "table"
+	es = False
+	for (arg,val) in args:
+		if arg == "-f":
+			file_name = val
+		elif arg == "-m":
+			mode = val
+		elif arg == "-c":
+			es = True
+
+	if mode == "table":
+		printer = PrintGlTable(es)
+	elif mode == "remap_table":
+		printer = PrintRemapTable(es)
+	else:
+		show_usage()
+
+	api = gl_XML.parse_GL_API( file_name )
+
+	printer.Print( api )
diff --git a/src/mesa/glapi/gen/gl_x86-64_asm.py b/src/mesa/glapi/gen/gl_x86-64_asm.py
new file mode 100644
index 0000000000..31c1a2b93a
--- /dev/null
+++ b/src/mesa/glapi/gen/gl_x86-64_asm.py
@@ -0,0 +1,334 @@
+#!/usr/bin/env python
+
+# (C) Copyright IBM Corporation 2005
+# All Rights Reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# on the rights to use, copy, modify, merge, publish, distribute, sub
+# license, and/or sell copies of the Software, and to permit persons to whom
+# the Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
+# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+#
+# Authors:
+#    Ian Romanick <idr@us.ibm.com>
+
+import license
+import gl_XML, glX_XML
+import sys, getopt, copy
+
+def should_use_push(registers):
+	for [reg, offset] in registers:
+		if reg[1:4] == "xmm":
+			return 0
+
+	N = len(registers)
+	return (N & 1) != 0
+
+
+def local_size(registers):
+	# The x86-64 ABI says "the value (%rsp - 8) is always a multiple of
+	# 16 when control is transfered to the function entry point."  This
+	# means that the local stack usage must be (16*N)+8 for some value
+	# of N.  (16*N)+8 = (8*(2N))+8 = 8*(2N+1).  As long as N is odd, we
+	# meet this requirement.
+
+	N = (len(registers) | 1)
+	return 8*N
+
+
+def save_all_regs(registers):
+	adjust_stack = 0
+	if not should_use_push(registers):
+		adjust_stack = local_size(registers)
+		print '\tsubq\t$%u, %%rsp' % (adjust_stack)
+
+	for [reg, stack_offset] in registers:
+		save_reg( reg, stack_offset, adjust_stack )
+	return
+
+
+def restore_all_regs(registers):
+	adjust_stack = 0
+	if not should_use_push(registers):
+		adjust_stack = local_size(registers)
+
+	temp = copy.deepcopy(registers)
+	while len(temp):
+		[reg, stack_offset] = temp.pop()
+		restore_reg(reg, stack_offset, adjust_stack)
+
+	if adjust_stack:
+		print '\taddq\t$%u, %%rsp' % (adjust_stack)
+	return
+
+
+def save_reg(reg, offset, use_move):
+	if use_move:
+		if offset == 0:
+			print '\tmovq\t%s, (%%rsp)' % (reg)
+		else:
+			print '\tmovq\t%s, %u(%%rsp)' % (reg, offset)
+	else:
+		print '\tpushq\t%s' % (reg)
+
+	return
+
+
+def restore_reg(reg, offset, use_move):
+	if use_move:
+		if offset == 0:
+			print '\tmovq\t(%%rsp), %s' % (reg)
+		else:
+			print '\tmovq\t%u(%%rsp), %s' % (offset, reg)
+	else:
+		print '\tpopq\t%s' % (reg)
+
+	return
+
+
+class PrintGenericStubs(gl_XML.gl_print_base):
+
+	def __init__(self):
+		gl_XML.gl_print_base.__init__(self)
+
+		self.name = "gl_x86-64_asm.py (from Mesa)"
+		self.license = license.bsd_license_template % ("(C) Copyright IBM Corporation 2005", "IBM")
+		return
+
+
+	def get_stack_size(self, f):
+		size = 0
+		for p in f.parameterIterator():
+			size += p.get_stack_size()
+
+		return size
+
+
+	def printRealHeader(self):
+		print "/* If we build with gcc's -fvisibility=hidden flag, we'll need to change"
+		print " * the symbol visibility mode to 'default'."
+		print ' */'
+		print ''
+		print '#include "x86/assyntax.h"'
+		print ''
+		print '#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 303'
+		print '#  pragma GCC visibility push(default)'
+		print '#  define HIDDEN(x) .hidden x'
+		print '#else'
+		print '#  define HIDDEN(x)'
+		print '#endif'
+		print ''
+		print '# if defined(USE_MGL_NAMESPACE)'
+		print '#  define GL_PREFIX(n) GLNAME(CONCAT(mgl,n))'
+		print '#  define _glapi_Dispatch _mglapi_Dispatch'
+		print '# else'
+		print '#  define GL_PREFIX(n) GLNAME(CONCAT(gl,n))'
+		print '# endif'
+		print ''
+		print '#if defined(PTHREADS) || defined(SOLARIS_THREADS) || defined(WIN32_THREADS) || defined(BEOS_THREADS)'
+		print '#  define THREADS'
+		print '#endif'
+		print ''
+		print '\t.text'
+		print ''
+		print '#ifdef GLX_USE_TLS'
+		print ''
+		print '\t.globl _x86_64_get_get_dispatch; HIDDEN(_x86_64_get_get_dispatch)'
+		print '_x86_64_get_get_dispatch:'
+		print '\tlea\t_x86_64_get_dispatch(%rip), %rax'
+		print '\tret'
+		print ''
+		print '\t.p2align\t4,,15'
+		print '_x86_64_get_dispatch:'
+		print '\tmovq\t_glapi_tls_Dispatch@GOTTPOFF(%rip), %rax'
+		print '\tmovq\t%fs:(%rax), %rax'
+		print '\tret'
+		print '\t.size\t_x86_64_get_dispatch, .-_x86_64_get_dispatch'
+		print ''
+		print '#elif defined(PTHREADS)'
+		print ''
+		print '\t.extern\t_glapi_Dispatch'
+		print '\t.extern\t_gl_DispatchTSD'
+		print '\t.extern\tpthread_getspecific'
+		print ''
+		print '\t.p2align\t4,,15'
+		print '_x86_64_get_dispatch:'
+		print '\tmovq\t_gl_DispatchTSD(%rip), %rdi'
+		print '\tjmp\tpthread_getspecific@PLT'
+		print ''
+		print '#elif defined(THREADS)'
+		print ''
+		print '\t.extern\t_glapi_get_dispatch'
+		print ''
+		print '#endif'
+		print ''
+		return
+
+
+	def printRealFooter(self):
+		print ''
+		print '#if defined(GLX_USE_TLS) && defined(__linux__)'
+		print '	.section ".note.ABI-tag", "a"'
+		print '	.p2align 2'
+		print '	.long	1f - 0f   /* name length */'
+		print '	.long	3f - 2f   /* data length */'
+		print '	.long	1         /* note length */'
+		print '0:	.asciz "GNU"      /* vendor name */'
+		print '1:	.p2align 2'
+		print '2:	.long	0         /* note data: the ABI tag */'
+		print '	.long	2,4,20    /* Minimum kernel version w/TLS */'
+		print '3:	.p2align 2        /* pad out section */'
+		print '#endif /* GLX_USE_TLS */'
+		print ''
+		print '#if defined (__ELF__) && defined (__linux__)'
+		print '	.section .note.GNU-stack,"",%progbits'
+		print '#endif'
+		return
+
+
+	def printFunction(self, f):
+		
+		# The x86-64 ABI divides function parameters into a couple
+		# classes.  For the OpenGL interface, the only ones that are
+		# relevent are INTEGER and SSE.  Basically, the first 8
+		# GLfloat or GLdouble parameters are placed in %xmm0 - %xmm7,
+		# the first 6 non-GLfloat / non-GLdouble parameters are placed
+		# in registers listed in int_parameters.
+		#
+		# If more parameters than that are required, they are passed
+		# on the stack.  Therefore, we just have to make sure that
+		# %esp hasn't changed when we jump to the actual function.
+		# Since we're jumping to the function (and not calling it), we
+		# have to make sure of that anyway!
+
+		int_parameters = ["%rdi", "%rsi", "%rdx", "%rcx", "%r8", "%r9"]
+
+		int_class = 0
+		sse_class = 0
+		stack_offset = 0
+		registers = []
+		for p in f.parameterIterator():
+			type_name = p.get_base_type_string()
+
+			if p.is_pointer() or (type_name != "GLfloat" and type_name != "GLdouble"):
+				if int_class < 6:
+					registers.append( [int_parameters[int_class], stack_offset] )
+					int_class += 1
+					stack_offset += 8
+			else:
+				if sse_class < 8:
+					registers.append( ["%%xmm%u" % (sse_class), stack_offset] )
+					sse_class += 1
+					stack_offset += 8
+
+		if ((int_class & 1) == 0) and (sse_class == 0):
+			registers.append( ["%rbp", 0] )
+
+
+		name = f.dispatch_name()
+
+		print '\t.p2align\t4,,15'
+		print '\t.globl\tGL_PREFIX(%s)' % (name)
+		print '\t.type\tGL_PREFIX(%s), @function' % (name)
+		if not f.is_static_entry_point(f.name):
+			print '\tHIDDEN(GL_PREFIX(%s))' % (name)
+		print 'GL_PREFIX(%s):' % (name)
+		print '#if defined(GLX_USE_TLS)'
+		print '\tcall\t_x86_64_get_dispatch@PLT'
+		print '\tmovq\t%u(%%rax), %%r11' % (f.offset * 8)
+		print '\tjmp\t*%r11'
+		print '#elif defined(PTHREADS)'
+		
+		save_all_regs(registers)
+		print '\tcall\t_x86_64_get_dispatch@PLT'
+		restore_all_regs(registers)
+
+		if f.offset == 0:
+			print '\tmovq\t(%rax), %r11'
+		else:
+			print '\tmovq\t%u(%%rax), %%r11' % (f.offset * 8)
+
+		print '\tjmp\t*%r11'
+
+		print '#else'
+		print '\tmovq\t_glapi_Dispatch(%rip), %rax'
+		print '\ttestq\t%rax, %rax'
+		print '\tje\t1f'
+		print '\tmovq\t%u(%%rax), %%r11' % (f.offset * 8)
+		print '\tjmp\t*%r11'
+		print '1:'
+
+		save_all_regs(registers)
+		print '\tcall\t_glapi_get_dispatch'
+		restore_all_regs(registers)
+
+		print '\tmovq\t%u(%%rax), %%r11' % (f.offset * 8)
+		print '\tjmp\t*%r11'
+		print '#endif /* defined(GLX_USE_TLS) */'
+
+		print '\t.size\tGL_PREFIX(%s), .-GL_PREFIX(%s)' % (name, name)
+		print ''
+		return
+
+
+	def printBody(self, api):
+		for f in api.functionIterateByOffset():
+			self.printFunction(f)
+
+
+		for f in api.functionIterateByOffset():
+			dispatch = f.dispatch_name()
+			for n in f.entry_points:
+				if n != f.name:
+					if f.is_static_entry_point(n):
+						text = '\t.globl GL_PREFIX(%s) ; .set GL_PREFIX(%s), GL_PREFIX(%s)' % (n, n, dispatch)
+
+						if f.has_different_protocol(n):
+							print '#ifndef GLX_INDIRECT_RENDERING'
+							print text
+							print '#endif'
+						else:
+							print text
+
+		return
+
+def show_usage():
+	print "Usage: %s [-f input_file_name] [-m output_mode]" % sys.argv[0]
+	sys.exit(1)
+
+if __name__ == '__main__':
+	file_name = "gl_API.xml"
+	mode = "generic"
+
+	try:
+		(args, trail) = getopt.getopt(sys.argv[1:], "m:f:")
+	except Exception,e:
+		show_usage()
+
+	for (arg,val) in args:
+		if arg == '-m':
+			mode = val
+		elif arg == "-f":
+			file_name = val
+
+	if mode == "generic":
+		printer = PrintGenericStubs()
+	else:
+		print "ERROR: Invalid mode \"%s\" specified." % mode
+		show_usage()
+
+	api = gl_XML.parse_GL_API(file_name, glX_XML.glx_item_factory())
+	printer.Print(api)
diff --git a/src/mesa/glapi/gen/gl_x86_asm.py b/src/mesa/glapi/gen/gl_x86_asm.py
new file mode 100644
index 0000000000..d210f3a248
--- /dev/null
+++ b/src/mesa/glapi/gen/gl_x86_asm.py
@@ -0,0 +1,270 @@
+#!/usr/bin/env python
+
+# (C) Copyright IBM Corporation 2004, 2005
+# All Rights Reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# on the rights to use, copy, modify, merge, publish, distribute, sub
+# license, and/or sell copies of the Software, and to permit persons to whom
+# the Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
+# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+#
+# Authors:
+#    Ian Romanick <idr@us.ibm.com>
+
+import license
+import gl_XML, glX_XML
+import sys, getopt
+
+class PrintGenericStubs(gl_XML.gl_print_base):
+
+	def __init__(self):
+		gl_XML.gl_print_base.__init__(self)
+
+		self.name = "gl_x86_asm.py (from Mesa)"
+		self.license = license.bsd_license_template % ( \
+"""Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
+(C) Copyright IBM Corporation 2004, 2005""", "BRIAN PAUL, IBM")
+		return
+
+
+	def get_stack_size(self, f):
+		size = 0
+		for p in f.parameterIterator():
+			if p.is_padding:
+				continue
+
+			size += p.get_stack_size()
+
+		return size
+
+
+	def printRealHeader(self):
+		print '#include "x86/assyntax.h"'
+		print '#include "glapi/glapioffsets.h"'
+		print ''
+		print '#if defined(STDCALL_API)'
+		print '# if defined(USE_MGL_NAMESPACE)'
+		print '#  define GL_PREFIX(n,n2) GLNAME(CONCAT(mgl,n2))'
+		print '# else'
+		print '#  define GL_PREFIX(n,n2) GLNAME(CONCAT(gl,n2))'
+		print '# endif'
+		print '#else'
+		print '# if defined(USE_MGL_NAMESPACE)'
+		print '#  define GL_PREFIX(n,n2) GLNAME(CONCAT(mgl,n))'
+		print '#  define _glapi_Dispatch _mglapi_Dispatch'
+		print '# else'
+		print '#  define GL_PREFIX(n,n2) GLNAME(CONCAT(gl,n))'
+		print '# endif'
+		print '#endif'
+		print ''
+		print '#define GL_OFFSET(x) CODEPTR(REGOFF(4 * x, EAX))'
+		print ''
+		print '#if defined(GNU_ASSEMBLER) && !defined(__DJGPP__) && !defined(__MINGW32__) && !defined(__APPLE__)'
+		print '#define GLOBL_FN(x) GLOBL x ; .type x, function'
+		print '#else'
+		print '#define GLOBL_FN(x) GLOBL x'
+		print '#endif'
+		print ''
+		print '#if defined(PTHREADS) || defined(SOLARIS_THREADS) || defined(WIN32_THREADS) || defined(BEOS_THREADS)'
+		print '#  define THREADS'
+		print '#endif'
+		print ''
+		print '#ifdef GLX_USE_TLS'
+		print ''
+		print '#ifdef GLX_X86_READONLY_TEXT'
+		print '# define CTX_INSNS MOV_L(GS:(EAX), EAX)'
+		print '#else'
+		print '# define CTX_INSNS NOP /* Pad for init_glapi_relocs() */'
+		print '#endif'
+		print ''
+		print '#  define GL_STUB(fn,off,fn_alt)\t\t\t\\'
+		print 'ALIGNTEXT16;\t\t\t\t\t\t\\'
+		print 'GLOBL_FN(GL_PREFIX(fn, fn_alt));\t\t\t\\'
+		print 'GL_PREFIX(fn, fn_alt):\t\t\t\t\t\\'
+		print '\tCALL(_x86_get_dispatch) ;\t\t\t\\'
+		print '\tCTX_INSNS ;					\\'
+		print '\tJMP(GL_OFFSET(off))'
+		print ''
+		print '#elif defined(PTHREADS)'
+		print '#  define GL_STUB(fn,off,fn_alt)\t\t\t\\'
+		print 'ALIGNTEXT16;\t\t\t\t\t\t\\'
+		print 'GLOBL_FN(GL_PREFIX(fn, fn_alt));\t\t\t\\'
+		print 'GL_PREFIX(fn, fn_alt):\t\t\t\t\t\\'
+		print '\tMOV_L(CONTENT(GLNAME(_glapi_Dispatch)), EAX) ;\t\\'
+		print '\tTEST_L(EAX, EAX) ;\t\t\t\t\\'
+		print '\tJE(1f) ;\t\t\t\t\t\\'
+		print '\tJMP(GL_OFFSET(off)) ;\t\t\t\t\\'
+		print '1:\tCALL(_x86_get_dispatch) ;\t\t\t\\'
+		print '\tJMP(GL_OFFSET(off))'
+		print '#elif defined(THREADS)'
+		print '#  define GL_STUB(fn,off,fn_alt)\t\t\t\\'
+		print 'ALIGNTEXT16;\t\t\t\t\t\t\\'
+		print 'GLOBL_FN(GL_PREFIX(fn, fn_alt));\t\t\t\\'
+		print 'GL_PREFIX(fn, fn_alt):\t\t\t\t\t\\'
+		print '\tMOV_L(CONTENT(GLNAME(_glapi_Dispatch)), EAX) ;\t\\'
+		print '\tTEST_L(EAX, EAX) ;\t\t\t\t\\'
+		print '\tJE(1f) ;\t\t\t\t\t\\'
+		print '\tJMP(GL_OFFSET(off)) ;\t\t\t\t\\'
+		print '1:\tCALL(_glapi_get_dispatch) ;\t\t\t\\'
+		print '\tJMP(GL_OFFSET(off))'
+		print '#else /* Non-threaded version. */'
+		print '#  define GL_STUB(fn,off,fn_alt)\t\t\t\\'
+		print 'ALIGNTEXT16;\t\t\t\t\t\t\\'
+		print 'GLOBL_FN(GL_PREFIX(fn, fn_alt));\t\t\t\\'
+		print 'GL_PREFIX(fn, fn_alt):\t\t\t\t\t\\'
+		print '\tMOV_L(CONTENT(GLNAME(_glapi_Dispatch)), EAX) ;\t\\'
+		print '\tJMP(GL_OFFSET(off))'
+		print '#endif'
+		print ''
+		print '#ifdef HAVE_ALIAS'
+		print '#  define GL_STUB_ALIAS(fn,off,fn_alt,alias,alias_alt)\t\\'
+		print '\t.globl\tGL_PREFIX(fn, fn_alt) ;\t\t\t\\'
+		print '\t.set\tGL_PREFIX(fn, fn_alt), GL_PREFIX(alias, alias_alt)'
+		print '#else'
+		print '#  define GL_STUB_ALIAS(fn,off,fn_alt,alias,alias_alt)\t\\'
+		print '    GL_STUB(fn, off, fn_alt)'
+		print '#endif'
+		print ''
+		print 'SEG_TEXT'
+		print ''
+		print '#ifdef GLX_USE_TLS'
+		print ''
+		print '\tGLOBL\tGLNAME(_x86_get_dispatch)'
+		print '\tHIDDEN(GLNAME(_x86_get_dispatch))'
+		print 'ALIGNTEXT16'
+		print 'GLNAME(_x86_get_dispatch):'
+		print '\tcall	1f'
+		print '1:\tpopl	%eax'
+		print '\taddl	$_GLOBAL_OFFSET_TABLE_+[.-1b], %eax'
+		print '\tmovl	_glapi_tls_Dispatch@GOTNTPOFF(%eax), %eax'
+		print '\tret'
+		print ''
+		print '#elif defined(PTHREADS)'
+		print 'EXTERN GLNAME(_glapi_Dispatch)'
+		print 'EXTERN GLNAME(_gl_DispatchTSD)'
+		print 'EXTERN GLNAME(pthread_getspecific)'
+		print ''
+		print 'ALIGNTEXT16'
+		print 'GLNAME(_x86_get_dispatch):'
+		print '\tSUB_L(CONST(24), ESP)'
+		print '\tPUSH_L(GLNAME(_gl_DispatchTSD))'
+		print '\tCALL(GLNAME(pthread_getspecific))'
+		print '\tADD_L(CONST(28), ESP)'
+		print '\tRET'
+		print '#elif defined(THREADS)'
+		print 'EXTERN GLNAME(_glapi_get_dispatch)'
+		print '#endif'
+		print ''
+
+		print '#if defined( GLX_USE_TLS ) && !defined( GLX_X86_READONLY_TEXT )'
+		print '\t\t.section\twtext, "awx", @progbits'
+		print '#endif /* defined( GLX_USE_TLS ) */'
+
+		print ''
+		print '\t\tALIGNTEXT16'
+		print '\t\tGLOBL GLNAME(gl_dispatch_functions_start)'
+		print '\t\tHIDDEN(GLNAME(gl_dispatch_functions_start))'
+		print 'GLNAME(gl_dispatch_functions_start):'
+		print ''
+		return
+
+
+	def printRealFooter(self):
+		print ''
+		print '\t\tGLOBL\tGLNAME(gl_dispatch_functions_end)'
+		print '\t\tHIDDEN(GLNAME(gl_dispatch_functions_end))'
+		print '\t\tALIGNTEXT16'
+		print 'GLNAME(gl_dispatch_functions_end):'
+		print ''
+		print '#if defined(GLX_USE_TLS) && defined(__linux__)'
+		print '	.section ".note.ABI-tag", "a"'
+		print '	.p2align 2'
+		print '	.long	1f - 0f   /* name length */'
+		print '	.long	3f - 2f   /* data length */'
+		print '	.long	1         /* note length */'
+		print '0:	.asciz "GNU"      /* vendor name */'
+		print '1:	.p2align 2'
+		print '2:	.long	0         /* note data: the ABI tag */'
+		print '	.long	2,4,20    /* Minimum kernel version w/TLS */'
+		print '3:	.p2align 2        /* pad out section */'
+		print '#endif /* GLX_USE_TLS */'
+		print ''
+		print '#if defined (__ELF__) && defined (__linux__)'
+		print '	.section .note.GNU-stack,"",%progbits'
+		print '#endif'
+		return
+
+
+	def printBody(self, api):
+		for f in api.functionIterateByOffset():
+			name = f.dispatch_name()
+			stack = self.get_stack_size(f)
+			alt = "%s@%u" % (name, stack)
+
+			print '\tGL_STUB(%s, _gloffset_%s, %s)' % (name, f.name, alt)
+
+			if not f.is_static_entry_point(f.name):
+				print '\tHIDDEN(GL_PREFIX(%s, %s))' % (name, alt)
+
+
+		for f in api.functionIterateByOffset():
+			name = f.dispatch_name()
+			stack = self.get_stack_size(f)
+			alt = "%s@%u" % (name, stack)
+
+			if f.is_static_entry_point(f.name):
+				for n in f.entry_points:
+					if n != f.name:
+						alt2 = "%s@%u" % (n, stack)
+						text = '\tGL_STUB_ALIAS(%s, _gloffset_%s, %s, %s, %s)' % (n, f.name, alt2, f.name, alt)
+
+						if f.has_different_protocol(n):
+							print '#ifndef GLX_INDIRECT_RENDERING'
+							print text
+							print '#endif'
+						else:
+							print text
+
+		return
+
+def show_usage():
+	print "Usage: %s [-f input_file_name] [-m output_mode]" % sys.argv[0]
+	sys.exit(1)
+
+if __name__ == '__main__':
+	file_name = "gl_API.xml"
+	mode = "generic"
+
+	try:
+		(args, trail) = getopt.getopt(sys.argv[1:], "m:f:")
+	except Exception,e:
+		show_usage()
+
+	for (arg,val) in args:
+		if arg == '-m':
+			mode = val
+		elif arg == "-f":
+			file_name = val
+
+	if mode == "generic":
+		printer = PrintGenericStubs()
+	else:
+		print "ERROR: Invalid mode \"%s\" specified." % mode
+		show_usage()
+
+	api = gl_XML.parse_GL_API(file_name, glX_XML.glx_item_factory())
+	printer.Print(api)
diff --git a/src/mesa/glapi/gen/license.py b/src/mesa/glapi/gen/license.py
new file mode 100644
index 0000000000..02181648e4
--- /dev/null
+++ b/src/mesa/glapi/gen/license.py
@@ -0,0 +1,47 @@
+# (C) Copyright IBM Corporation 2004
+# All Rights Reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# on the rights to use, copy, modify, merge, publish, distribute, sub
+# license, and/or sell copies of the Software, and to permit persons to whom
+# the Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
+# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+#
+# Authors:
+#    Ian Romanick <idr@us.ibm.com>
+
+bsd_license_template = """%s
+All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sub license,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice (including the next
+paragraph) shall be included in all copies or substantial portions of the
+Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
+%s,
+AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.""" 
diff --git a/src/mesa/glapi/gen/mesadef.py b/src/mesa/glapi/gen/mesadef.py
new file mode 100644
index 0000000000..38b0246ba5
--- /dev/null
+++ b/src/mesa/glapi/gen/mesadef.py
@@ -0,0 +1,216 @@
+#!/usr/bin/env python
+
+
+# Mesa 3-D graphics library
+# Version:  4.1
+# 
+# Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
+# 
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+# 
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+# 
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+# BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+# Generate the mesa.def file for Windows.
+#
+# Usage:
+#    mesadef.py >mesa.def
+#    Then copy to src/mesa/drivers/windows/gdi
+#
+# Dependencies:
+#    The apispec file must be in the current directory.
+
+
+
+import apiparser
+import string
+
+
+def PrintHead():
+	print '; DO NOT EDIT - This file generated automatically by mesadef.py script'
+	print 'DESCRIPTION \'Mesa (OpenGL work-alike) for Win32\''
+	print 'VERSION 6.0'
+	print ';'
+	print '; Module definition file for Mesa (OPENGL32.DLL)'
+	print ';'
+	print '; Note: The OpenGL functions use the STDCALL'
+	print '; function calling convention.  Microsoft\'s'
+	print '; OPENGL32 uses this convention and so must the'
+	print '; Mesa OPENGL32 so that the Mesa DLL can be used'
+	print '; as a drop-in replacement.'
+	print ';'
+	print '; The linker exports STDCALL entry points with'
+	print '; \'decorated\' names; e.g., _glBegin@0, where the'
+	print '; trailing number is the number of bytes of '
+	print '; parameter data pushed onto the stack.  The'
+	print '; callee is responsible for popping this data'
+	print '; off the stack, usually via a RETF n instruction.'
+	print ';'
+	print '; However, the Microsoft OPENGL32.DLL does not export'
+	print '; the decorated names, even though the calling convention'
+	print '; is STDCALL.  So, this module definition file is'
+	print '; needed to force the Mesa OPENGL32.DLL to export the'
+	print '; symbols in the same manner as the Microsoft DLL.'
+	print '; Were it not for this problem, this file would not'
+	print '; be needed (for the gl* functions) since the entry'
+	print '; points are compiled with dllexport declspec.'
+	print ';'
+	print '; However, this file is still needed to export "internal"'
+	print '; Mesa symbols for the benefit of the OSMESA32.DLL.'
+	print ';'
+	print 'EXPORTS'
+	return
+#enddef
+
+
+def PrintTail():
+	print ';'
+	print '; WGL API'
+	print '\twglChoosePixelFormat'
+	print '\twglCopyContext'
+	print '\twglCreateContext'
+	print '\twglCreateLayerContext'
+	print '\twglDeleteContext'
+	print '\twglDescribeLayerPlane'
+	print '\twglDescribePixelFormat'
+	print '\twglGetCurrentContext'
+	print '\twglGetCurrentDC'
+	print '\twglGetExtensionsStringARB'
+	print '\twglGetLayerPaletteEntries'
+	print '\twglGetPixelFormat'
+	print '\twglGetProcAddress'
+	print '\twglMakeCurrent'
+	print '\twglRealizeLayerPalette'
+	print '\twglSetLayerPaletteEntries'
+	print '\twglSetPixelFormat'
+	print '\twglShareLists'
+	print '\twglSwapBuffers'
+	print '\twglSwapLayerBuffers'
+	print '\twglUseFontBitmapsA'
+	print '\twglUseFontBitmapsW'
+	print '\twglUseFontOutlinesA'
+	print '\twglUseFontOutlinesW'
+	print ';'
+	print '; Mesa internals - mostly for OSMESA'
+	print '\t_ac_CreateContext'
+	print '\t_ac_DestroyContext'
+	print '\t_ac_InvalidateState'
+	print '\t_glapi_get_context'
+	print '\t_glapi_get_proc_address'
+	print '\t_mesa_buffer_data'
+	print '\t_mesa_buffer_map'
+	print '\t_mesa_buffer_subdata'
+	print '\t_mesa_choose_tex_format'
+	print '\t_mesa_compressed_texture_size'
+	print '\t_mesa_create_framebuffer'
+	print '\t_mesa_create_visual'
+	print '\t_mesa_delete_buffer_object'
+	print '\t_mesa_delete_texture_object'
+	print '\t_mesa_destroy_framebuffer'
+	print '\t_mesa_destroy_visual'
+	print '\t_mesa_enable_1_3_extensions'
+	print '\t_mesa_enable_1_4_extensions'
+	print '\t_mesa_enable_1_5_extensions'
+	print '\t_mesa_enable_sw_extensions'
+	print '\t_mesa_error'
+	print '\t_mesa_free_context_data'
+	print '\t_mesa_get_current_context'
+	print '\t_mesa_init_default_imports'
+	print '\t_mesa_initialize_context'
+	print '\t_mesa_make_current'
+	print '\t_mesa_new_buffer_object'
+	print '\t_mesa_new_texture_object'
+	print '\t_mesa_problem'
+	print '\t_mesa_ResizeBuffersMESA'
+	print '\t_mesa_store_compressed_teximage1d'
+	print '\t_mesa_store_compressed_teximage2d'
+	print '\t_mesa_store_compressed_teximage3d'
+	print '\t_mesa_store_compressed_texsubimage1d'
+	print '\t_mesa_store_compressed_texsubimage2d'
+	print '\t_mesa_store_compressed_texsubimage3d'
+	print '\t_mesa_store_teximage1d'
+	print '\t_mesa_store_teximage2d'
+	print '\t_mesa_store_teximage3d'
+	print '\t_mesa_store_texsubimage1d'
+	print '\t_mesa_store_texsubimage2d'
+	print '\t_mesa_store_texsubimage3d'
+	print '\t_mesa_test_proxy_teximage'
+	print '\t_mesa_Viewport'
+	print '\t_mesa_meta_CopyColorSubTable'
+	print '\t_mesa_meta_CopyColorTable'
+	print '\t_mesa_meta_CopyConvolutionFilter1D'
+	print '\t_mesa_meta_CopyConvolutionFilter2D'
+	print '\t_mesa_meta_CopyTexImage1D'
+	print '\t_mesa_meta_CopyTexImage2D'
+	print '\t_mesa_meta_CopyTexSubImage1D'
+	print '\t_mesa_meta_CopyTexSubImage2D'
+	print '\t_mesa_meta_CopyTexSubImage3D'
+	print '\t_swrast_Accum'
+	print '\t_swrast_alloc_buffers'
+	print '\t_swrast_Bitmap'
+	print '\t_swrast_CopyPixels'
+	print '\t_swrast_DrawPixels'
+	print '\t_swrast_GetDeviceDriverReference'
+	print '\t_swrast_Clear'
+	print '\t_swrast_choose_line'
+	print '\t_swrast_choose_triangle'
+	print '\t_swrast_CreateContext'
+	print '\t_swrast_DestroyContext'
+	print '\t_swrast_InvalidateState'
+	print '\t_swrast_ReadPixels'
+	print '\t_swrast_zbuffer_address'
+	print '\t_swsetup_Wakeup'
+	print '\t_swsetup_CreateContext'
+	print '\t_swsetup_DestroyContext'
+	print '\t_swsetup_InvalidateState'
+	print '\t_tnl_CreateContext'
+	print '\t_tnl_DestroyContext'
+	print '\t_tnl_InvalidateState'
+	print '\t_tnl_MakeCurrent'
+	print '\t_tnl_run_pipeline'
+#enddef
+
+
+records = []
+
+def FindOffset(funcName):
+	for (name, alias, offset) in records:
+		if name == funcName:
+			return offset
+		#endif
+	#endfor
+	return -1
+#enddef
+
+
+def EmitEntry(name, returnType, argTypeList, argNameList, alias, offset):
+	if alias == '':
+		dispatchName = name
+	else:
+		dispatchName = alias
+	if offset < 0:
+		offset = FindOffset(dispatchName)
+	if offset >= 0 and string.find(name, "unused") == -1:
+		print '\tgl%s' % (name)
+		# save this info in case we need to look up an alias later
+		records.append((name, dispatchName, offset))
+
+#enddef
+
+
+PrintHead()
+apiparser.ProcessSpecFile("APIspec", EmitEntry)
+PrintTail()
diff --git a/src/mesa/glapi/gen/next_available_offset.sh b/src/mesa/glapi/gen/next_available_offset.sh
new file mode 100755
index 0000000000..e7d6c2f4af
--- /dev/null
+++ b/src/mesa/glapi/gen/next_available_offset.sh
@@ -0,0 +1,39 @@
+#!/usr/bin/env bash
+#
+# (C) Copyright IBM Corporation 2004
+# All Rights Reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# on the rights to use, copy, modify, merge, publish, distribute, sub
+# license, and/or sell copies of the Software, and to permit persons to whom
+# the Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
+# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+#
+# Authors:
+#    Ian Romanick <idr@us.ibm.com>
+
+# Trivial shell script to search the API definition file and print out the
+# next numerically available API entry-point offset.  This could probably
+# be made smarter, but it would be better to use the existin Python
+# framework to do that.  This is just a quick-and-dirty hack.
+
+num=$(grep 'offset="' gl_API.xml |\
+    sed 's/.\+ offset="//g;s/".*$//g' |\
+    grep -v '?' |\
+    sort -rn |\
+    head -1)
+    
+echo $((num + 1))
diff --git a/src/mesa/glapi/gen/remap_helper.py b/src/mesa/glapi/gen/remap_helper.py
new file mode 100644
index 0000000000..d93c7a4285
--- /dev/null
+++ b/src/mesa/glapi/gen/remap_helper.py
@@ -0,0 +1,226 @@
+#!/usr/bin/env python
+
+# Copyright (C) 2009 Chia-I Wu <olv@0xlab.org>
+# All Rights Reserved.
+#
+# This is based on extension_helper.py by Ian Romanick.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# on the rights to use, copy, modify, merge, publish, distribute, sub
+# license, and/or sell copies of the Software, and to permit persons to whom
+# the Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
+# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+import gl_XML
+import license
+import sys, getopt, string
+
+def get_function_spec(func):
+	sig = ""
+	# derive parameter signature
+	for p in func.parameterIterator():
+		if p.is_padding:
+			continue
+		# FIXME: This is a *really* ugly hack. :(
+		tn = p.type_expr.get_base_type_node()
+		if p.is_pointer():
+			sig += 'p'
+		elif tn.integer:
+			sig += 'i'
+		elif tn.size == 4:
+			sig += 'f'
+		else:
+			sig += 'd'
+
+	spec = [sig]
+	for ent in func.entry_points:
+		spec.append("gl" + ent)
+
+	# spec is terminated by an empty string
+	spec.append('')
+
+	return spec
+
+class PrintGlRemap(gl_XML.gl_print_base):
+	def __init__(self):
+		gl_XML.gl_print_base.__init__(self)
+
+		self.name = "remap_helper.py (from Mesa)"
+		self.license = license.bsd_license_template % ("Copyright (C) 2009 Chia-I Wu <olv@0xlab.org>", "Chia-I Wu")
+		return
+
+
+	def printRealHeader(self):
+		print '#include "glapi/dispatch.h"'
+		print ''
+		return
+
+
+	def printBody(self, api):
+		print 'struct gl_function_remap {'
+		print '   GLint func_index;'
+		print '   GLint dispatch_offset; /* for sanity check */'
+		print '};'
+		print ''
+
+		pool_indices = {}
+
+		print '/* this is internal to remap.c */'
+		print '#ifdef need_MESA_remap_table'
+		print ''
+		print 'static const char _mesa_function_pool[] ='
+
+		# output string pool
+		index = 0;
+		for f in api.functionIterateAll():
+			pool_indices[f] = index
+
+			spec = get_function_spec(f)
+
+			# a function has either assigned offset, fixed offset,
+			# or no offset
+			if f.assign_offset:
+				comments = "will be remapped"
+			elif f.offset > 0:
+				comments = "offset %d" % f.offset
+			else:
+				comments = "dynamic"
+
+			print '   /* _mesa_function_pool[%d]: %s (%s) */' \
+					% (index, f.name, comments)
+			for line in spec:
+				print '   "%s\\0"' % line
+				index += len(line) + 1
+		print '   ;'
+		print ''
+
+		print '/* these functions need to be remapped */'
+		print 'static const struct {'
+		print '   GLint pool_index;'
+		print '   GLint remap_index;'
+		print '} MESA_remap_table_functions[] = {'
+		# output all functions that need to be remapped
+		# iterate by offsets so that they are sorted by remap indices
+		for f in api.functionIterateByOffset():
+			if not f.assign_offset:
+				continue
+			print '   { %5d, %s_remap_index },' \
+					% (pool_indices[f], f.name)
+		print '   {    -1, -1 }'
+		print '};'
+		print ''
+
+		# collect functions by versions/extensions
+		extension_functions = {}
+		abi_extensions = []
+		for f in api.functionIterateAll():
+			for n in f.entry_points:
+				category, num = api.get_category_for_name(n)
+				# consider only GL_VERSION_X_Y or extensions
+				c = gl_XML.real_category_name(category)
+				if c.startswith("GL_"):
+					if not extension_functions.has_key(c):
+						extension_functions[c] = []
+					extension_functions[c].append(f)
+					# remember the ext names of the ABI
+					if (f.is_abi() and n == f.name and
+						c not in abi_extensions):
+						abi_extensions.append(c)
+		# ignore the ABI itself
+		for ext in abi_extensions:
+			extension_functions.pop(ext)
+
+		extensions = extension_functions.keys()
+		extensions.sort()
+
+		# output ABI functions that have alternative names (with ext suffix)
+		print '/* these functions are in the ABI, but have alternative names */'
+		print 'static const struct gl_function_remap MESA_alt_functions[] = {'
+		for ext in extensions:
+			funcs = []
+			for f in extension_functions[ext]:
+				# test if the function is in the ABI and has alt names
+				if f.is_abi() and len(f.entry_points) > 1:
+					funcs.append(f)
+			if not funcs:
+				continue
+			print '   /* from %s */' % ext
+			for f in funcs:
+				print '   { %5d, _gloffset_%s },' \
+						% (pool_indices[f], f.name)
+		print '   {    -1, -1 }'
+		print '};'
+		print ''
+
+		print '#endif /* need_MESA_remap_table */'
+		print ''
+
+		# output remap helpers for DRI drivers
+
+		for ext in extensions:
+			funcs = []
+			remapped = []
+			for f in extension_functions[ext]:
+				if f.assign_offset:
+					# these are handled above
+					remapped.append(f)
+				else:
+					# these functions are either in the
+					# abi, or have offset -1
+					funcs.append(f)
+
+			print '#if defined(need_%s)' % (ext)
+			if remapped:
+				print '/* functions defined in MESA_remap_table_functions are excluded */'
+
+			# output extension functions that need to be mapped
+			print 'static const struct gl_function_remap %s_functions[] = {' % (ext)
+			for f in funcs:
+				if f.offset >= 0:
+					print '   { %5d, _gloffset_%s },' \
+							% (pool_indices[f], f.name)
+				else:
+					print '   { %5d, -1 }, /* %s */' % \
+							(pool_indices[f], f.name)
+			print '   {    -1, -1 }'
+			print '};'
+
+			print '#endif'
+			print ''
+
+		return
+
+
+def show_usage():
+	print "Usage: %s [-f input_file_name]" % sys.argv[0]
+	sys.exit(1)
+
+if __name__ == '__main__':
+	file_name = "gl_API.xml"
+
+	try:
+		(args, trail) = getopt.getopt(sys.argv[1:], "f:")
+	except Exception,e:
+		show_usage()
+
+	for (arg,val) in args:
+		if arg == "-f":
+			file_name = val
+
+	api = gl_XML.parse_GL_API( file_name )
+
+	printer = PrintGlRemap()
+	printer.Print( api )
diff --git a/src/mesa/glapi/gen/typeexpr.py b/src/mesa/glapi/gen/typeexpr.py
new file mode 100644
index 0000000000..8ba7de4862
--- /dev/null
+++ b/src/mesa/glapi/gen/typeexpr.py
@@ -0,0 +1,292 @@
+#!/usr/bin/env python
+
+# (C) Copyright IBM Corporation 2005
+# All Rights Reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# on the rights to use, copy, modify, merge, publish, distribute, sub
+# license, and/or sell copies of the Software, and to permit persons to whom
+# the Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
+# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+#
+# Authors:
+#    Ian Romanick <idr@us.ibm.com>
+
+import string, copy
+
+class type_node:
+	def __init__(self):
+		self.pointer = 0  # bool
+		self.const = 0    # bool
+		self.signed = 1   # bool
+		self.integer = 1  # bool
+
+		# If elements is set to non-zero, then field is an array.
+		self.elements = 0
+
+		self.name = None
+		self.size = 0     # type's size in bytes
+		return
+
+
+	def string(self):
+		"""Return string representation of this type_node."""
+		s = ""
+		
+		if self.pointer:
+			s = "* "
+
+		if self.const:
+			s += "const "
+
+		if not self.pointer:
+			if self.integer:
+				if self.signed:
+					s += "signed "
+				else:
+					s += "unsigned "
+
+			if self.name:
+				s += "%s " % (self.name)
+
+		return s
+
+
+class type_table:
+	def __init__(self):
+		self.types_by_name = {}
+		return
+
+
+	def add_type(self, type_expr):
+		self.types_by_name[ type_expr.get_base_name() ] = type_expr
+		return
+
+
+	def find_type(self, name):
+		if name in self.types_by_name:
+			return self.types_by_name[ name ]
+		else:
+			return None
+
+
+def create_initial_types():
+	tt = type_table()
+
+	basic_types = [
+		("char",   1, 1),
+		("short",  2, 1),
+		("int",    4, 1),
+		("long",   4, 1),
+		("float",  4, 0),
+		("double", 8, 0),
+		("enum",   4, 1)
+	]
+
+	for (type_name, type_size, integer) in basic_types:
+		te = type_expression(None)
+		tn = type_node()
+		tn.name = type_name
+		tn.size = type_size
+		tn.integer = integer
+		te.expr.append(tn)
+		tt.add_type( te )
+
+	type_expression.built_in_types = tt
+	return
+
+
+class type_expression:
+	built_in_types = None
+
+	def __init__(self, type_string, extra_types = None):
+		self.expr = []
+
+		if not type_string:
+			return
+
+		self.original_string = type_string
+
+		if not type_expression.built_in_types:
+			raise RuntimeError("create_initial_types must be called before creating type_expression objects.")
+
+		# Replace '*' with ' * ' in type_string.  Then, split the string
+		# into tokens, separated by spaces.
+		tokens = string.split( string.replace( type_string, "*", " * " ) )
+
+		const = 0
+		t = None
+		signed = 0
+		unsigned = 0
+
+		for i in tokens:
+			if i == "const":
+				if t and t.pointer:
+					t.const = 1
+				else:
+					const = 1
+			elif i == "signed":
+				signed = 1
+			elif i == "unsigned":
+				unsigned = 1
+			elif i == "*":
+				# This is a quirky special-case because of the
+				# way the C works for types.  If 'unsigned' is
+				# specified all by itself, it is treated the
+				# same as "unsigned int".
+
+				if unsigned:
+					self.set_base_type( "int", signed, unsigned, const, extra_types )
+					const = 0
+					signed = 0
+					unsigned = 0
+
+				if not self.expr:
+					raise RuntimeError("Invalid type expression (dangling pointer)")
+
+				if signed:
+					raise RuntimeError("Invalid type expression (signed / unsigned applied to pointer)")
+
+				t = type_node()
+				t.pointer = 1
+				self.expr.append( t )
+			else:
+				if self.expr:
+					raise RuntimeError('Invalid type expression (garbage after pointer qualifier -> "%s")' % (self.original_string))
+
+				self.set_base_type( i, signed, unsigned, const, extra_types )
+				const = 0
+				signed = 0
+				unsigned = 0
+
+			if signed and unsigned:
+				raise RuntimeError("Invalid type expression (both signed and unsigned specified)")
+				
+
+		if const:
+			raise RuntimeError("Invalid type expression (dangling const)")
+
+		if unsigned:
+			raise RuntimeError("Invalid type expression (dangling signed)")
+
+		if signed:
+			raise RuntimeError("Invalid type expression (dangling unsigned)")
+
+		return
+
+
+	def set_base_type(self, type_name, signed, unsigned, const, extra_types):
+		te = type_expression.built_in_types.find_type( type_name )
+		if not te:
+			te = extra_types.find_type( type_name )
+
+		if not te:
+			raise RuntimeError('Unknown base type "%s".' % (type_name))
+
+		self.expr = copy.deepcopy(te.expr)
+
+		t = self.expr[ len(self.expr) - 1 ]
+		t.const = const
+		if signed:
+			t.signed = 1
+		elif unsigned:
+			t.signed = 0
+
+
+	def set_base_type_node(self, tn):
+		self.expr = [tn]
+		return
+
+
+	def set_elements(self, count):
+		tn = self.expr[0]
+
+		tn.elements = count
+		return
+
+
+	def string(self):
+		s = ""
+		for t in self.expr:
+			s += t.string()
+
+		return s
+
+
+	def get_base_type_node(self):
+		return self.expr[0]
+
+
+	def get_base_name(self):
+		if len(self.expr):
+			return self.expr[0].name
+		else:
+			return None
+
+
+	def get_element_size(self):
+		tn = self.expr[0]
+
+		if tn.elements:
+			return tn.elements * tn.size
+		else:
+			return tn.size
+
+
+	def get_element_count(self):
+		tn = self.expr[0]
+		return tn.elements
+
+
+	def get_stack_size(self):
+		tn = self.expr[ len(self.expr) - 1 ]
+
+		if tn.elements or tn.pointer:
+			return 4
+		elif not tn.integer:
+			return tn.size
+		else:
+			return 4
+
+
+	def is_pointer(self):
+		tn = self.expr[ len(self.expr) - 1 ]
+		return tn.pointer
+
+
+	def format_string(self):
+		tn = self.expr[ len(self.expr) - 1 ]
+		if tn.pointer:
+			return "%p"
+		elif not tn.integer:
+			return "%f"
+		else:
+			return "%d"
+
+
+
+if __name__ == '__main__':
+	
+	types_to_try = [ "int", "int *", "const int *", "int * const", "const int * const", \
+	                 "unsigned * const *", \
+			 "float", "const double", "double * const"]
+
+	create_initial_types()
+
+	for t in types_to_try:
+		print 'Trying "%s"...' % (t)
+		te = type_expression( t )
+		print 'Got "%s" (%u, %u).' % (te.string(), te.get_stack_size(), te.get_element_size())
diff --git a/src/mesa/glapi/glX_API.xml b/src/mesa/glapi/glX_API.xml
deleted file mode 100644
index 9e02aa498e..0000000000
--- a/src/mesa/glapi/glX_API.xml
+++ /dev/null
@@ -1,220 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
-
-<OpenGLAPI>
-
-<!-- Right now this file is just used to generate the GLX protocol
-     decode tables on the server.  The only information that is needed
-     for that purpose is the name of the function (or pseudo-function
-     in the case of Render of VendorPrivate) and its opcode.  Once
-     this file is used for other purposes, additional information will
-     need to be added.
-  -->
-
-<category name="1.0" window_system="glX">
-    <function name="Render">
-        <glx sop="1"/>
-    </function>
-
-    <function name="RenderLarge">
-        <glx sop="2"/>
-    </function>
-
-    <function name="CreateContext">
-        <glx sop="3"/>
-    </function>
-
-    <function name="DestroyContext">
-        <glx sop="4"/>
-    </function>
-
-    <function name="MakeCurrent">
-        <glx sop="5"/>
-    </function>
-
-    <function name="IsDirect">
-        <glx sop="6"/>
-    </function>
-
-    <function name="QueryVersion">
-        <glx sop="7"/>
-    </function>
-
-    <function name="WaitGL">
-        <glx sop="8"/>
-    </function>
-
-    <function name="WaitX">
-        <glx sop="9"/>
-    </function>
-
-    <function name="CopyContext">
-        <glx sop="10"/>
-    </function>
-
-    <function name="SwapBuffers">
-        <glx sop="11"/>
-    </function>
-
-    <function name="UseXFont">
-        <glx sop="12"/>
-    </function>
-
-    <function name="CreateGLXPixmap">
-        <glx sop="13"/>
-    </function>
-
-    <function name="GetVisualConfigs">
-        <glx sop="14"/>
-    </function>
-
-    <function name="DestroyGLXPixmap">
-        <glx sop="15"/>
-    </function>
-
-    <function name="VendorPrivate">
-        <glx sop="16"/>
-    </function>
-
-    <function name="VendorPrivateWithReply">
-        <glx sop="17"/>
-    </function>
-
-    <function name="QueryExtensionsString">
-        <glx sop="18"/>
-    </function>
-</category>
-
-<category name="1.1" window_system="glX">
-    <function name="QueryServerString">
-        <glx sop="19"/>
-    </function>
-
-    <function name="ClientInfo">
-        <glx sop="20"/>
-    </function>
-</category>
-
-<category name="1.3" window_system="glX">
-    <function name="GetFBConfigs">
-        <glx sop="21"/>
-    </function>
-
-    <function name="CreatePixmap">
-        <glx sop="22"/>
-    </function>
-
-    <function name="DestroyPixmap">
-        <glx sop="23"/>
-    </function>
-
-    <function name="CreateNewContext">
-        <glx sop="24"/>
-    </function>
-
-    <function name="QueryContext">
-        <glx sop="25"/>
-    </function>
-
-    <function name="MakeContextCurrent">
-        <glx sop="26"/>
-    </function>
-
-    <function name="CreatePbuffer">
-        <glx sop="27"/>
-    </function>
-
-    <function name="DestroyPbuffer">
-        <glx sop="28"/>
-    </function>
-
-    <function name="GetDrawableAttributes">
-        <glx sop="29"/>
-    </function>
-
-    <function name="ChangeDrawableAttributes">
-        <glx sop="30"/>
-    </function>
-
-    <function name="CreateWindow">
-        <glx sop="31"/>
-    </function>
-
-    <function name="DestroyWindow">
-        <glx sop="32"/>
-    </function>
-</category>
-
-<category name="GLX_SGI_swap_control" number="40" window_system="glX">
-    <function name="SwapIntervalSGI">
-        <return type="int"/>
-        <glx vendorpriv="65536"/>
-    </function>
-</category>
-
-<category name="GLX_SGI_make_current_read" number="42" window_system="glX">
-    <function name="MakeCurrentReadSGI">
-<!--        <param name="dpy" type="Display *"/>
-	<param name="draw" type="GLXDrawable"/>
-	<param name="read" type="GLXDrawable"/>
-	<param name="ctx" type="GLXContext"/> -->
-        <return type="Bool"/>
-        <glx vendorpriv="65537"/>
-    </function>
-</category>
-
-<category name="GLX_EXT_import_context" number="47" window_system="glX">
-    <function name="QueryContextInfoEXT">
-        <glx vendorpriv="1024"/>
-    </function>
-</category>
-
-<category name="GLX_SGIX_fbconfig" number="49" window_system="glX">
-    <function name="GetFBConfigsSGIX">
-        <glx vendorpriv="65540"/>
-    </function>
-
-    <function name="CreateContextWithConfigSGIX">
-        <glx vendorpriv="65541"/>
-    </function>
-
-    <function name="CreateGLXPixmapWithConfigSGIX">
-        <glx vendorpriv="65542"/>
-    </function>
-</category>
-
-<category name="GLX_SGIX_pbuffer" number="50" window_system="glX">
-    <function name="CreateGLXPbufferSGIX">
-        <glx vendorpriv="65543"/>
-    </function>
-
-    <function name="DestroyGLXPbufferSGIX">
-        <glx vendorpriv="65544"/>
-    </function>
-
-    <function name="ChangeDrawableAttributesSGIX">
-        <glx vendorpriv="65545"/>
-    </function>
-
-    <function name="GetDrawableAttributesSGIX">
-        <glx vendorpriv="65546"/>
-    </function>
-</category>
-
-<category name="GLX_MESA_copy_sub_buffer" number="215">
-    <function name="CopySubBufferMESA">
-        <glx vendorpriv="5154"/>
-    </function>
-</category>
-
-<category name="GLX_EXT_texture_from_pixmap">
-    <function name="BindTexImageEXT">
-        <glx vendorpriv="1330"/>
-    </function>
-
-    <function name="ReleaseTexImageEXT">
-        <glx vendorpriv="1331"/>
-    </function>
-</category>
-
-</OpenGLAPI>
diff --git a/src/mesa/glapi/glX_XML.py b/src/mesa/glapi/glX_XML.py
deleted file mode 100644
index 4c2e0f95bf..0000000000
--- a/src/mesa/glapi/glX_XML.py
+++ /dev/null
@@ -1,570 +0,0 @@
-#!/usr/bin/env python
-
-# (C) Copyright IBM Corporation 2004, 2005
-# All Rights Reserved.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# on the rights to use, copy, modify, merge, publish, distribute, sub
-# license, and/or sell copies of the Software, and to permit persons to whom
-# the Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
-# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-#
-# Authors:
-#    Ian Romanick <idr@us.ibm.com>
-
-import gl_XML
-import license
-import sys, getopt, string
-
-
-class glx_item_factory(gl_XML.gl_item_factory):
-	"""Factory to create GLX protocol oriented objects derived from gl_item."""
-    
-	def create_item(self, name, element, context):
-		if name == "function":
-			return glx_function(element, context)
-		elif name == "enum":
-			return glx_enum(element, context)
-		elif name == "api":
-			return glx_api(self)
-		else:
-			return gl_XML.gl_item_factory.create_item(self, name, element, context)
-
-
-class glx_enum(gl_XML.gl_enum):
-	def __init__(self, element, context):
-		gl_XML.gl_enum.__init__(self, element, context)
-		
-		self.functions = {}
-
-		child = element.children
-		while child:
-			if child.type == "element" and child.name == "size":
-				n = child.nsProp( "name", None )
-				c = child.nsProp( "count", None )
-				m = child.nsProp( "mode", None )
-				
-				if not c:
-					c = self.default_count
-				else:
-					c = int(c)
-
-				if m == "get":
-					mode = 0
-				else:
-					mode = 1
-
-				if not self.functions.has_key(n):
-					self.functions[ n ] = [c, mode]
-
-			child = child.next
-
-		return
-
-
-class glx_function(gl_XML.gl_function):
-	def __init__(self, element, context):
-		self.glx_rop = 0
-		self.glx_sop = 0
-		self.glx_vendorpriv = 0
-
-		self.glx_vendorpriv_names = []
-
-		# If this is set to true, it means that GLdouble parameters should be
-		# written to the GLX protocol packet in the order they appear in the
-		# prototype.  This is different from the "classic" ordering.  In the
-		# classic ordering GLdoubles are written to the protocol packet first,
-		# followed by non-doubles.  NV_vertex_program was the first extension
-		# to break with this tradition.
-
-		self.glx_doubles_in_order = 0
-
-		self.vectorequiv = None
-		self.output = None
-		self.can_be_large = 0
-		self.reply_always_array = 0
-		self.dimensions_in_reply = 0
-		self.img_reset = None
-
-		self.server_handcode = 0
-		self.client_handcode = 0
-		self.ignore = 0
-
-		self.count_parameter_list = []
-		self.counter_list = []
-		self.parameters_by_name = {}
-		self.offsets_calculated = 0
-
-		gl_XML.gl_function.__init__(self, element, context)
-		return
-
-
-	def process_element(self, element):
-		gl_XML.gl_function.process_element(self, element)
-
-		# If the function already has a vector equivalent set, don't
-		# set it again.  This can happen if an alias to a function
-		# appears after the function that it aliases.
-
-		if not self.vectorequiv:
-			self.vectorequiv = element.nsProp("vectorequiv", None)
-
-
-		name = element.nsProp("name", None)
-		if name == self.name:
-			for param in self.parameters:
-				self.parameters_by_name[ param.name ] = param
-				
-				if len(param.count_parameter_list):
-					self.count_parameter_list.extend( param.count_parameter_list )
-				
-				if param.counter and param.counter not in self.counter_list:
-					self.counter_list.append(param.counter)
-
-
-		child = element.children
-		while child:
-			if child.type == "element" and child.name == "glx":
-				rop = child.nsProp( 'rop', None )
-				sop = child.nsProp( 'sop', None )
-				vop = child.nsProp( 'vendorpriv', None )
-
-				if rop:
-					self.glx_rop = int(rop)
-
-				if sop:
-					self.glx_sop = int(sop)
-
-				if vop:
-					self.glx_vendorpriv = int(vop)
-					self.glx_vendorpriv_names.append(name)
-
-				self.img_reset = child.nsProp( 'img_reset', None )
-
-				# The 'handcode' attribute can be one of 'true',
-				# 'false', 'client', or 'server'.
-
-				handcode = child.nsProp( 'handcode', None )
-				if handcode == "false":
-					self.server_handcode = 0
-					self.client_handcode = 0
-				elif handcode == "true":
-					self.server_handcode = 1
-					self.client_handcode = 1
-				elif handcode == "client":
-					self.server_handcode = 0
-					self.client_handcode = 1
-				elif handcode == "server":
-					self.server_handcode = 1
-					self.client_handcode = 0
-				else:
-					raise RuntimeError('Invalid handcode mode "%s" in function "%s".' % (handcode, self.name))
-
-				self.ignore               = gl_XML.is_attr_true( child, 'ignore' )
-				self.can_be_large         = gl_XML.is_attr_true( child, 'large' )
-				self.glx_doubles_in_order = gl_XML.is_attr_true( child, 'doubles_in_order' )
-				self.reply_always_array   = gl_XML.is_attr_true( child, 'always_array' )
-				self.dimensions_in_reply  = gl_XML.is_attr_true( child, 'dimensions_in_reply' )
-
-			child = child.next
-
-
-		# Do some validation of the GLX protocol information.  As
-		# new tests are discovered, they should be added here.
-
-		for param in self.parameters:
-			if param.is_output and self.glx_rop != 0:
-				raise RuntimeError("Render / RenderLarge commands cannot have outputs (%s)." % (self.name))
-
-		return
-
-
-	def has_variable_size_request(self):
-		"""Determine if the GLX request packet is variable sized.
-
-		The GLX request packet is variable sized in several common
-		situations.
-		
-		1. The function has a non-output parameter that is counted
-		   by another parameter (e.g., the 'textures' parameter of
-		   glDeleteTextures).
-		   
-		2. The function has a non-output parameter whose count is
-		   determined by another parameter that is an enum (e.g., the
-		   'params' parameter of glLightfv).
-		   
-		3. The function has a non-output parameter that is an
-		   image.
-
-		4. The function must be hand-coded on the server.
-		"""
-
-		if self.glx_rop == 0:
-			return 0
-
-		if self.server_handcode or self.images:
-			return 1
-
-		for param in self.parameters:
-			if not param.is_output:
-				if param.counter or len(param.count_parameter_list):
-					return 1
-
-		return 0
-
-
-	def variable_length_parameter(self):
-		for param in self.parameters:
-			if not param.is_output:
-				if param.counter or len(param.count_parameter_list):
-					return param
-				
-		return None
-
-
-	def calculate_offsets(self):
-		if not self.offsets_calculated:
-			# Calculate the offset of the first function parameter
-			# in the GLX command packet.  This byte offset is
-			# measured from the end of the Render / RenderLarge
-			# header.  The offset for all non-pixel commends is
-			# zero.  The offset for pixel commands depends on the
-			# number of dimensions of the pixel data.
-
-			if len(self.images) and not self.images[0].is_output:
-				[dim, junk, junk, junk, junk] = self.images[0].get_dimensions()
-
-				# The base size is the size of the pixel pack info
-				# header used by images with the specified number
-				# of dimensions.
-
-				if dim <=  2:
-					offset = 20
-				elif dim <= 4:
-					offset = 36
-				else:
-					raise RuntimeError('Invalid number of dimensions %u for parameter "%s" in function "%s".' % (dim, self.image.name, self.name))
-			else:
-				offset = 0
-
-			for param in self.parameterIterateGlxSend():
-				if param.img_null_flag:
-					offset += 4
-
-				if param.name != self.img_reset:
-					param.offset = offset
-					if not param.is_variable_length() and not param.is_client_only:
-						offset += param.size()
-					
-				if self.pad_after( param ):
-					offset += 4
-
-
-			self.offsets_calculated = 1
-		return
-
-
-	def offset_of(self, param_name):
-		self.calculate_offsets()
-		return self.parameters_by_name[ param_name ].offset
-
-
-	def parameterIterateGlxSend(self, include_variable_parameters = 1):
-		"""Create an iterator for parameters in GLX request order."""
-
-		# The parameter lists are usually quite short, so it's easier
-		# (i.e., less code) to just generate a new list with the
-		# required elements than it is to create a new iterator class.
-		
-		temp = [ [],  [], [] ]
-		for param in self.parameters:
-			if param.is_output: continue
-
-			if param.is_variable_length():
-				temp[2].append( param )
-			elif not self.glx_doubles_in_order and param.is_64_bit():
-				temp[0].append( param )
-			else:
-				temp[1].append( param )
-
-		parameters = temp[0]
-		parameters.extend( temp[1] )
-		if include_variable_parameters:
-			parameters.extend( temp[2] )
-		return parameters.__iter__()
-
-
-	def parameterIterateCounters(self):
-		temp = []
-		for name in self.counter_list:
-			temp.append( self.parameters_by_name[ name ] )
-
-		return temp.__iter__()
-
-
-	def parameterIterateOutputs(self):
-		temp = []
-		for p in self.parameters:
-			if p.is_output:
-				temp.append( p )
-
-		return temp
-
-
-	def command_fixed_length(self):
-		"""Return the length, in bytes as an integer, of the
-		fixed-size portion of the command."""
-
-		if len(self.parameters) == 0:
-			return 0
-		
-		self.calculate_offsets()
-
-		size = 0
-		for param in self.parameterIterateGlxSend(0):
-			if param.name != self.img_reset and not param.is_client_only:
-				if size == 0:
-					size = param.offset + param.size()
-				else:
-					size += param.size()
-
-				if self.pad_after( param ):
-					size += 4
-
-		for param in self.images:
-			if param.img_null_flag or param.is_output:
-				size += 4
-
-		return size
-
-
-	def command_variable_length(self):
-		"""Return the length, as a string, of the variable-sized
-		portion of the command."""
-
-		size_string = ""
-		for p in self.parameterIterateGlxSend():
-			if (not p.is_output) and (p.is_variable_length() or p.is_image()):
-				# FIXME Replace the 1 in the size_string call
-				# FIXME w/0 to eliminate some un-needed parnes
-				# FIXME This would already be done, but it
-				# FIXME adds some extra diffs to the generated
-				# FIXME code.
-
-				size_string = size_string + " + __GLX_PAD(%s)" % (p.size_string(1))
-
-		return size_string
-
-
-	def command_length(self):
-		size = self.command_fixed_length()
-
-		if self.glx_rop != 0:
-			size += 4
-
-		size = ((size + 3) & ~3)
-		return "%u%s" % (size, self.command_variable_length())
-
-
-	def opcode_real_value(self):
-		"""Get the true numeric value of the GLX opcode
-		
-		Behaves similarly to opcode_value, except for
-		X_GLXVendorPrivate and X_GLXVendorPrivateWithReply commands.
-		In these cases the value for the GLX opcode field (i.e.,
-		16 for X_GLXVendorPrivate or 17 for
-		X_GLXVendorPrivateWithReply) is returned.  For other 'single'
-		commands, the opcode for the command (e.g., 101 for
-		X_GLsop_NewList) is returned."""
-
-		if self.glx_vendorpriv != 0:
-			if self.needs_reply():
-				return 17
-			else:
-				return 16
-		else:
-			return self.opcode_value()
-
-
-	def opcode_value(self):
-		"""Get the unique protocol opcode for the glXFunction"""
-
-		if (self.glx_rop == 0) and self.vectorequiv:
-			equiv = self.context.functions_by_name[ self.vectorequiv ]
-			self.glx_rop = equiv.glx_rop
-
-
-		if self.glx_rop != 0:
-			return self.glx_rop
-		elif self.glx_sop != 0:
-			return self.glx_sop
-		elif self.glx_vendorpriv != 0:
-			return self.glx_vendorpriv
-		else:
-			return -1
-	
-
-	def opcode_rop_basename(self):
-		"""Return either the name to be used for GLX protocol enum.
-		
-		Returns either the name of the function or the name of the
-		name of the equivalent vector (e.g., glVertex3fv for
-		glVertex3f) function."""
-
-		if self.vectorequiv == None:
-			return self.name
-		else:
-			return self.vectorequiv
-
-
-	def opcode_name(self):
-		"""Get the unique protocol enum name for the glXFunction"""
-
-		if (self.glx_rop == 0) and self.vectorequiv:
-			equiv = self.context.functions_by_name[ self.vectorequiv ]
-			self.glx_rop = equiv.glx_rop
-			self.glx_doubles_in_order = equiv.glx_doubles_in_order
-
-
-		if self.glx_rop != 0:
-			return "X_GLrop_%s" % (self.opcode_rop_basename())
-		elif self.glx_sop != 0:
-			return "X_GLsop_%s" % (self.name)
-		elif self.glx_vendorpriv != 0:
-			return "X_GLvop_%s" % (self.name)
-		else:
-			raise RuntimeError('Function "%s" has no opcode.' % (self.name))
-
-
-	def opcode_vendor_name(self, name):
-		if name in self.glx_vendorpriv_names:
-			return "X_GLvop_%s" % (name)
-		else:
-			raise RuntimeError('Function "%s" has no VendorPrivate opcode.' % (name))
-
-
-	def opcode_real_name(self):
-		"""Get the true protocol enum name for the GLX opcode
-		
-		Behaves similarly to opcode_name, except for
-		X_GLXVendorPrivate and X_GLXVendorPrivateWithReply commands.
-		In these cases the string 'X_GLXVendorPrivate' or
-		'X_GLXVendorPrivateWithReply' is returned.  For other
-		single or render commands 'X_GLsop' or 'X_GLrop' plus the
-		name of the function returned."""
-
-		if self.glx_vendorpriv != 0:
-			if self.needs_reply():
-				return "X_GLXVendorPrivateWithReply"
-			else:
-				return "X_GLXVendorPrivate"
-		else:
-			return self.opcode_name()
-
-
-	def needs_reply(self):
-		try:
-			x = self._needs_reply
-		except Exception, e:
-			x = 0
-			if self.return_type != 'void':
-				x = 1
-
-			for param in self.parameters:
-				if param.is_output:
-					x = 1
-					break
-
-			self._needs_reply = x
-
-		return x
-
-
-	def pad_after(self, p):
-		"""Returns the name of the field inserted after the
-		specified field to pad out the command header."""
-
-		for image in self.images:
-			if image.img_pad_dimensions:
-				if not image.height:
-					if p.name == image.width:
-						return "height"
-					elif p.name == image.img_xoff:
-						return "yoffset"
-				elif not image.extent:
-					if p.name == image.depth:
-						# Should this be "size4d"?
-						return "extent"
-					elif p.name == image.img_zoff:
-						return "woffset"
-
-		return None
-
-
-	def has_different_protocol(self, name):
-		"""Returns true if the named version of the function uses different protocol from the other versions.
-		
-		Some functions, such as glDeleteTextures and
-		glDeleteTexturesEXT are functionally identical, but have
-		different protocol.  This function returns true if the
-		named function is an alias name and that named version uses
-		different protocol from the function that is aliased.
-		"""
-
-		return (name in self.glx_vendorpriv_names) and self.glx_sop
-
-
-	def static_glx_name(self, name):
-		if self.has_different_protocol(name):
-			for n in self.glx_vendorpriv_names:
-				if n in self.static_entry_points:
-					return n
-				
-		return self.static_name(name)
-
-
-	def client_supported_for_indirect(self):
-		"""Returns true if the function is supported on the client
-		side for indirect rendering."""
-
-		return not self.ignore and (self.offset != -1) and (self.glx_rop or self.glx_sop or self.glx_vendorpriv or self.vectorequiv or self.client_handcode)
-
-
-class glx_function_iterator:
-	"""Class to iterate over a list of glXFunctions"""
-
-	def __init__(self, context):
-		self.iterator = context.functionIterateByOffset()
-		return
-
-
-	def __iter__(self):
-		return self
-
-
-	def next(self):
-		f = self.iterator.next()
-
-		if f.client_supported_for_indirect():
-			return f
-		else:
-			return self.next()
-
-
-class glx_api(gl_XML.gl_api):
-	def functionIterateGlx(self):
-		return glx_function_iterator(self)
-
diff --git a/src/mesa/glapi/glX_doc.py b/src/mesa/glapi/glX_doc.py
deleted file mode 100644
index e9fbbe6f16..0000000000
--- a/src/mesa/glapi/glX_doc.py
+++ /dev/null
@@ -1,280 +0,0 @@
-#!/usr/bin/env python
-
-# (C) Copyright IBM Corporation 2004, 2005
-# All Rights Reserved.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# on the rights to use, copy, modify, merge, publish, distribute, sub
-# license, and/or sell copies of the Software, and to permit persons to whom
-# the Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
-# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-#
-# Authors:
-#    Ian Romanick <idr@us.ibm.com>
-
-import gl_XML, glX_XML, glX_proto_common, license
-import sys, getopt
-
-
-class glx_doc_item_factory(glX_proto_common.glx_proto_item_factory):
-	"""Factory to create GLX protocol documentation oriented objects derived from glItem."""
-    
-	def create_item(self, name, element, context):
-		if name == "parameter":
-			return glx_doc_parameter(element, context)
-		else:
-			return glX_proto_common.glx_proto_item_factory.create_item(self, name, element, context)
-
-
-class glx_doc_parameter(gl_XML.gl_parameter):
-	def packet_type(self, type_dict):
-		"""Get the type string for the packet header
-		
-		GLX protocol documentation uses type names like CARD32,
-		FLOAT64, LISTofCARD8, and ENUM.  This function converts the
-		type of the parameter to one of these names."""
-
-		list_of = ""
-		if self.is_array():
-			list_of = "LISTof"
-
-		t_name = self.get_base_type_string()
-		if not type_dict.has_key( t_name ):
-			type_name = "CARD8"
-		else:
-			type_name = type_dict[ t_name ]
-
-		return "%s%s" % (list_of, type_name)
-
-
-	def packet_size(self):
-		p = None
-		s = self.size()
-		if s == 0:
-			a_prod = "n"
-			b_prod = self.p_type.size
-
-			if not self.count_parameter_list and self.counter:
-				a_prod = self.counter
-			elif self.count_parameter_list and not self.counter or self.is_output:
-				pass
-			elif self.count_parameter_list and self.counter:
-				b_prod = self.counter
-			else:
-				raise RuntimeError("Parameter '%s' to function '%s' has size 0." % (self.name, self.context.name))
-
-			ss = "%s*%s" % (a_prod, b_prod)
-
-			return [ss, p]
-		else:
-			if s % 4 != 0:
-				p = "p"
-
-			return [str(s), p]
-
-class PrintGlxProtoText(gl_XML.gl_print_base):
-	def __init__(self):
-		gl_XML.gl_print_base.__init__(self)
-		self.license = ""
-
-
-	def printHeader(self):
-		return
-
-
-	def body_size(self, f):
-		# At some point, refactor this function and
-		# glXFunction::command_payload_length.
-
-		size = 0;
-		size_str = ""
-		pad_str = ""
-		plus = ""
-		for p in f.parameterIterateGlxSend():
-			[s, pad] = p.packet_size()
-			try: 
-				size += int(s)
-			except Exception,e:
-				size_str += "%s%s" % (plus, s)
-				plus = "+"
-
-			if pad != None:
-				pad_str = pad
-
-		return [size, size_str, pad_str]
-
-
-	def print_render_header(self, f):
-		[size, size_str, pad_str] = self.body_size(f)
-		size += 4;
-
-		if size_str == "":
-			s = "%u" % ((size + 3) & ~3)
-		elif pad_str != "":
-			s = "%u+%s+%s" % (size, size_str, pad_str)
-		else:
-			s = "%u+%s" % (size, size_str)
-
-		print '            2        %-15s rendering command length' % (s)
-		print '            2        %-4u            rendering command opcode' % (f.glx_rop)
-		return
-
-
-	def print_single_header(self, f):
-		[size, size_str, pad_str] = self.body_size(f)
-		size = ((size + 3) / 4) + 2;
-
-		if f.glx_vendorpriv != 0:
-			size += 1
-
-		print '            1        CARD8           opcode (X assigned)'
-		print '            1        %-4u            GLX opcode (%s)' % (f.opcode_real_value(), f.opcode_real_name())
-
-		if size_str == "":
-			s = "%u" % (size)
-		elif pad_str != "":
-			s = "%u+((%s+%s)/4)" % (size, size_str, pad_str)
-		else:
-			s = "%u+((%s)/4)" % (size, size_str)
-
-		print '            2        %-15s request length' % (s)
-
-		if f.glx_vendorpriv != 0:
-			print '            4        %-4u            vendor specific opcode' % (f.opcode_value())
-			
-		print '            4        GLX_CONTEXT_TAG context tag'
-
-		return
-		
-
-	def print_reply(self, f):
-		print '          =>'
-		print '            1        1               reply'
-		print '            1                        unused'
-		print '            2        CARD16          sequence number'
-
-		if f.output == None:
-			print '            4        0               reply length'
-		elif f.reply_always_array:
-			print '            4        m               reply length'
-		else:
-			print '            4        m               reply length, m = (n == 1 ? 0 : n)'
-
-
-		output = None
-		for x in f.parameterIterateOutputs():
-			output = x
-			break
-
-
-		unused = 24
-		if f.return_type != 'void':
-			print '            4        %-15s return value' % (f.return_type)
-			unused -= 4
-		elif output != None:
-			print '            4                        unused'
-			unused -= 4
-
-		if output != None:
-			print '            4        CARD32          n'
-			unused -= 4
-
-		if output != None:
-			if not f.reply_always_array:
-				print ''
-				print '            if (n = 1) this follows:'
-				print ''
-				print '            4        CARD32          %s' % (output.name)
-				print '            %-2u                       unused' % (unused - 4)
-				print ''
-				print '            otherwise this follows:'
-				print ''
-
-			print '            %-2u                       unused' % (unused)
-
-			[s, pad] = output.packet_size()
-			print '            %-8s %-15s %s' % (s, output.packet_type( self.type_map ), output.name)
-			if pad != None:
-				try:
-					bytes = int(s)
-					bytes = 4 - (bytes & 3)
-					print '            %-8u %-15s unused' % (bytes, "")
-				except Exception,e:
-					print '            %-8s %-15s unused, %s=pad(%s)' % (pad, "", pad, s)
-		else:
-			print '            %-2u                       unused' % (unused)
-
-
-	def print_body(self, f):
-		for p in f.parameterIterateGlxSend():
-			[s, pad] = p.packet_size()
-			print '            %-8s %-15s %s' % (s, p.packet_type( self.type_map ), p.name)
-			if pad != None:
-				try:
-					bytes = int(s)
-					bytes = 4 - (bytes & 3)
-					print '            %-8u %-15s unused' % (bytes, "")
-				except Exception,e:
-					print '            %-8s %-15s unused, %s=pad(%s)' % (pad, "", pad, s)
-
-	def printBody(self, api):
-		self.type_map = {}
-		for t in api.typeIterate():
-			self.type_map[ "GL" + t.name ] = t.glx_name
-
-
-		# At some point this should be expanded to support pixel
-		# functions, but I'm not going to lose any sleep over it now.
-
-		for f in api.functionIterateByOffset():
-			if f.client_handcode or f.server_handcode or f.vectorequiv or len(f.get_images()):
-				continue
-
-
-			if f.glx_rop:
-				print '        %s' % (f.name)
-				self.print_render_header(f)
-			elif f.glx_sop or f.glx_vendorpriv:
-				print '        %s' % (f.name)
-				self.print_single_header(f)
-			else:
-				continue
-
-			self.print_body(f)
-
-			if f.needs_reply():
-				self.print_reply(f)
-
-			print ''
-		return
-
-
-if __name__ == '__main__':
-	file_name = "gl_API.xml"
-
-	try:
-		(args, trail) = getopt.getopt(sys.argv[1:], "f:")
-	except Exception,e:
-		show_usage()
-
-	for (arg,val) in args:
-		if arg == "-f":
-			file_name = val
-
-	api = gl_XML.parse_GL_API( file_name, glx_doc_item_factory() )
-
-	printer = PrintGlxProtoText()
-	printer.Print( api )
diff --git a/src/mesa/glapi/glX_proto_common.py b/src/mesa/glapi/glX_proto_common.py
deleted file mode 100644
index 6f094e22b3..0000000000
--- a/src/mesa/glapi/glX_proto_common.py
+++ /dev/null
@@ -1,95 +0,0 @@
-#!/usr/bin/env python
-
-# (C) Copyright IBM Corporation 2004, 2005
-# All Rights Reserved.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# on the rights to use, copy, modify, merge, publish, distribute, sub
-# license, and/or sell copies of the Software, and to permit persons to whom
-# the Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
-# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-#
-# Authors:
-#    Ian Romanick <idr@us.ibm.com>
-
-import gl_XML, glX_XML
-import string
-
-
-class glx_proto_item_factory(glX_XML.glx_item_factory):
-	"""Factory to create GLX protocol oriented objects derived from gl_item."""
-    
-	def create_item(self, name, element, context):
-		if name == "type":
-			return glx_proto_type(element, context)
-		else:
-			return glX_XML.glx_item_factory.create_item(self, name, element, context)
-
-
-class glx_proto_type(gl_XML.gl_type):
-	def __init__(self, element, context):
-		gl_XML.gl_type.__init__(self, element, context)
-
-		self.glx_name = element.nsProp( "glx_name", None )
-		return
-
-
-class glx_print_proto(gl_XML.gl_print_base):
-	def size_call(self, func, outputs_also = 0):
-		"""Create C code to calculate 'compsize'.
-
-		Creates code to calculate 'compsize'.  If the function does
-		not need 'compsize' to be calculated, None will be
-		returned."""
-	
-		compsize = None
-
-		for param in func.parameterIterator():
-			if outputs_also or not param.is_output:
-				if param.is_image():
-					[dim, w, h, d, junk] = param.get_dimensions()
-
-					compsize = '__glImageSize(%s, %s, %s, %s, %s, %s)' % (w, h, d, param.img_format, param.img_type, param.img_target)
-					if not param.img_send_null:
-						compsize = '(%s != NULL) ? %s : 0' % (param.name, compsize)
-
-					return compsize
-
-				elif len(param.count_parameter_list):
-					parameters = string.join( param.count_parameter_list, "," )
-					compsize = "__gl%s_size(%s)" % (func.name, parameters)
-
-					return compsize
-
-		return None
-
-
-	def emit_packet_size_calculation(self, f, bias):
-		# compsize is only used in the command size calculation if
-		# the function has a non-output parameter that has a non-empty
-		# counter_parameter_list.
-
-		compsize = self.size_call(f)
-		if compsize:
-			print '    const GLuint compsize = %s;' % (compsize)
-
-		if bias:
-			print '    const GLuint cmdlen = %s - %u;' % (f.command_length(), bias)
-		else:
-			print '    const GLuint cmdlen = %s;' % (f.command_length())
-
-		#print ''
-		return compsize
diff --git a/src/mesa/glapi/glX_proto_recv.py b/src/mesa/glapi/glX_proto_recv.py
deleted file mode 100644
index f423c6db08..0000000000
--- a/src/mesa/glapi/glX_proto_recv.py
+++ /dev/null
@@ -1,554 +0,0 @@
-#!/usr/bin/env python
-
-# (C) Copyright IBM Corporation 2005
-# All Rights Reserved.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# on the rights to use, copy, modify, merge, publish, distribute, sub
-# license, and/or sell copies of the Software, and to permit persons to whom
-# the Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
-# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-#
-# Authors:
-#    Ian Romanick <idr@us.ibm.com>
-
-import gl_XML, glX_XML, glX_proto_common, license
-import sys, getopt, string
-
-
-class PrintGlxDispatch_h(gl_XML.gl_print_base):
-	def __init__(self):
-		gl_XML.gl_print_base.__init__(self)
-
-		self.name = "glX_proto_recv.py (from Mesa)"
-		self.license = license.bsd_license_template % ( "(C) Copyright IBM Corporation 2005", "IBM")
-
-		self.header_tag = "_INDIRECT_DISPATCH_H_"
-		return
-
-
-	def printRealHeader(self):
-		self.printVisibility( "HIDDEN", "hidden" )
-		print 'struct __GLXclientStateRec;'
-		print ''
-		return
-
-
-	def printBody(self, api):
-		for func in api.functionIterateAll():
-			if not func.ignore and not func.vectorequiv:
-				if func.glx_rop:
-					print 'extern HIDDEN void __glXDisp_%s(GLbyte * pc);' % (func.name)
-					print 'extern HIDDEN void __glXDispSwap_%s(GLbyte * pc);' % (func.name)
-				elif func.glx_sop or func.glx_vendorpriv:
-					print 'extern HIDDEN int __glXDisp_%s(struct __GLXclientStateRec *, GLbyte *);' % (func.name)
-					print 'extern HIDDEN int __glXDispSwap_%s(struct __GLXclientStateRec *, GLbyte *);' % (func.name)
-
-					if func.glx_sop and func.glx_vendorpriv:
-						n = func.glx_vendorpriv_names[0]
-						print 'extern HIDDEN int __glXDisp_%s(struct __GLXclientStateRec *, GLbyte *);' % (n)
-						print 'extern HIDDEN int __glXDispSwap_%s(struct __GLXclientStateRec *, GLbyte *);' % (n)
-
-		return
-
-
-class PrintGlxDispatchFunctions(glX_proto_common.glx_print_proto):
-	def __init__(self, do_swap):
-		gl_XML.gl_print_base.__init__(self)
-		self.name = "glX_proto_recv.py (from Mesa)"
-		self.license = license.bsd_license_template % ( "(C) Copyright IBM Corporation 2005", "IBM")
-
-		self.real_types = [ '', '', 'uint16_t', '', 'uint32_t', '', '', '', 'uint64_t' ]
-		self.do_swap = do_swap
-		return
-
-
-	def printRealHeader(self):
-		print '#include <X11/Xmd.h>'
-		print '#include <GL/gl.h>'
-		print '#include <GL/glxproto.h>'
-
-		print '#include <inttypes.h>'
-		print '#include "indirect_size.h"'
-		print '#include "indirect_size_get.h"'
-		print '#include "indirect_dispatch.h"'
-		print '#include "glxserver.h"'
-		print '#include "glxbyteorder.h"'
-		print '#include "indirect_util.h"'
-		print '#include "singlesize.h"'
-		print '#include "glapi.h"'
-		print '#include "glapitable.h"'
-		print '#include "glthread.h"'
-		print '#include "dispatch.h"'
-		print ''
-		print '#define __GLX_PAD(x)  (((x) + 3) & ~3)'
-		print ''
-		print 'typedef struct {'
-		print '    __GLX_PIXEL_3D_HDR;'
-		print '} __GLXpixel3DHeader;'
-		print ''
-		print 'extern GLboolean __glXErrorOccured( void );'
-		print 'extern void __glXClearErrorOccured( void );'
-		print ''
-		print 'static const unsigned dummy_answer[2] = {0, 0};'
-		print ''
-		return
-
-
-	def printBody(self, api):
-		if self.do_swap:
-			self.emit_swap_wrappers(api)
-
-
-		for func in api.functionIterateByOffset():
-			if not func.ignore and not func.server_handcode and not func.vectorequiv and (func.glx_rop or func.glx_sop or func.glx_vendorpriv):
-				self.printFunction(func, func.name)
-				if func.glx_sop and func.glx_vendorpriv:
-					self.printFunction(func, func.glx_vendorpriv_names[0])
-					
-
-		return
-
-
-	def printFunction(self, f, name):
-		if (f.glx_sop or f.glx_vendorpriv) and (len(f.get_images()) != 0):
-			return
-
-		if not self.do_swap:
-			base = '__glXDisp'
-		else:
-			base = '__glXDispSwap'
-
-		if f.glx_rop:
-			print 'void %s_%s(GLbyte * pc)' % (base, name)
-		else:
-			print 'int %s_%s(__GLXclientState *cl, GLbyte *pc)' % (base, name)
-
-		print '{'
-
-		if f.glx_rop or f.vectorequiv:
-			self.printRenderFunction(f)
-		elif f.glx_sop or f.glx_vendorpriv:
-			if len(f.get_images()) == 0: 
-				self.printSingleFunction(f, name)
-		else:
-			print "/* Missing GLX protocol for %s. */" % (name)
-
-		print '}'
-		print ''
-		return
-
-
-	def swap_name(self, bytes):
-		return 'bswap_%u_array' % (8 * bytes)
-
-
-	def emit_swap_wrappers(self, api):
-		self.type_map = {}
-		already_done = [ ]
-
-		for t in api.typeIterate():
-			te = t.get_type_expression()
-			t_size = te.get_element_size()
-
-			if t_size > 1 and t.glx_name:
-				
-				t_name = "GL" + t.name
-				self.type_map[ t_name ] = t.glx_name
-
-				if t.glx_name not in already_done:
-					real_name = self.real_types[t_size]
-
-					print 'static %s' % (t_name)
-					print 'bswap_%s( const void * src )' % (t.glx_name)
-					print '{'
-					print '    union { %s dst; %s ret; } x;' % (real_name, t_name)
-					print '    x.dst = bswap_%u( *(%s *) src );' % (t_size * 8, real_name)
-					print '    return x.ret;'
-					print '}'
-					print ''
-					already_done.append( t.glx_name )
-
-		for bits in [16, 32, 64]:
-			print 'static void *'
-			print 'bswap_%u_array( uint%u_t * src, unsigned count )' % (bits, bits)
-			print '{'
-			print '    unsigned  i;'
-			print ''
-			print '    for ( i = 0 ; i < count ; i++ ) {'
-			print '        uint%u_t temp = bswap_%u( src[i] );' % (bits, bits)
-			print '        src[i] = temp;'
-			print '    }'
-			print ''
-			print '    return src;'
-			print '}'
-			print ''
-			
-
-	def fetch_param(self, param):
-		t = param.type_string()
-		o = param.offset
-		element_size = param.size() / param.get_element_count()
-
-		if self.do_swap and (element_size != 1):
-			if param.is_array():
-				real_name = self.real_types[ element_size ]
-
-				swap_func = self.swap_name( element_size )
-				return ' (%-8s)%s( (%s *) (pc + %2s), %s )' % (t, swap_func, real_name, o, param.count)
-			else:
-				t_name = param.get_base_type_string()
-				return ' (%-8s)bswap_%-7s( pc + %2s )' % (t, self.type_map[ t_name ], o)
-		else:
-			if param.is_array():
-				return ' (%-8s)(pc + %2u)' % (t, o)
-			else:
-				return '*(%-8s *)(pc + %2u)' % (t, o)
-				
-		return None
-
-
-	def emit_function_call(self, f, retval_assign, indent):
-		list = []
-
-		for param in f.parameterIterator():
-			if param.is_padding:
-				continue
-
-			if param.is_counter or param.is_image() or param.is_output or param.name in f.count_parameter_list or len(param.count_parameter_list):
-				location = param.name
-			else:
-				location = self.fetch_param(param)
-
-			list.append( '%s        %s' % (indent, location) )
-			
-
-		if len( list ):
-			print '%s    %sCALL_%s( GET_DISPATCH(), (' % (indent, retval_assign, f.name)
-			print string.join( list, ",\n" )
-			print '%s    ) );' % (indent)
-		else:
-			print '%s    %sCALL_%s( GET_DISPATCH(), () );' % (indent, retval_assign, f.name)
-		return
-
-
-	def common_func_print_just_start(self, f, indent):
-		align64 = 0
-		need_blank = 0
-
-
-		f.calculate_offsets()
-		for param in f.parameterIterateGlxSend():
-			# If any parameter has a 64-bit base type, then we
-			# have to do alignment magic for the while thing.
-
-			if param.is_64_bit():
-				align64 = 1
-
-
-			# FIXME img_null_flag is over-loaded.  In addition to
-			# FIXME being used for images, it is used to signify
-			# FIXME NULL data pointers for vertex buffer object
-			# FIXME related functions.  Re-name it to null_data
-			# FIXME or something similar.
-
-			if param.img_null_flag:
-				print '%s    const CARD32 ptr_is_null = *(CARD32 *)(pc + %s);' % (indent, param.offset - 4)
-				cond = '(ptr_is_null != 0) ? NULL : '
-			else:
-				cond = ""
-
-
-			type_string = param.type_string()
-
-			if param.is_image():
-				offset = f.offset_of( param.name )
-
-				print '%s    %s const %s = (%s) (%s(pc + %s));' % (indent, type_string, param.name, type_string, cond, offset)
-				
-				if param.depth:
-					print '%s    __GLXpixel3DHeader * const hdr = (__GLXpixel3DHeader *)(pc);' % (indent)
-				else:
-					print '%s    __GLXpixelHeader * const hdr = (__GLXpixelHeader *)(pc);' % (indent)
-
-				need_blank = 1
-			elif param.is_counter or param.name in f.count_parameter_list:
-				location = self.fetch_param(param)
-				print '%s    const %s %s = %s;' % (indent, type_string, param.name, location)
-				need_blank = 1
-			elif len(param.count_parameter_list):
-				if param.size() == 1 and not self.do_swap:
-					location = self.fetch_param(param)
-					print '%s    %s %s = %s%s;' % (indent, type_string, param.name, cond, location)
-				else:
-					print '%s    %s %s;' % (indent, type_string, param.name)
-				need_blank = 1
-
-
-
-		if need_blank:
-			print ''
-
-		if align64:
-			print '#ifdef __GLX_ALIGN64'
-
-			if f.has_variable_size_request():
-				self.emit_packet_size_calculation(f, 4)
-				s = "cmdlen"
-			else:
-				s = str((f.command_fixed_length() + 3) & ~3)
-
-			print '    if ((unsigned long)(pc) & 7) {'
-			print '        (void) memmove(pc-4, pc, %s);' % (s)
-			print '        pc -= 4;'
-			print '    }'
-			print '#endif'
-			print ''
-
-
-		need_blank = 0
-		if self.do_swap:
-			for param in f.parameterIterateGlxSend():
-				if param.count_parameter_list:
-					o = param.offset
-					count = param.get_element_count()
-					type_size = param.size() / count
-					
-					if param.counter:
-						count_name = param.counter
-					else:
-						count_name = str(count)
-
-					# This is basically an ugly special-
-					# case for glCallLists.
-
-					if type_size == 1:
-						x = [] 
-						x.append( [1, ['BYTE', 'UNSIGNED_BYTE', '2_BYTES', '3_BYTES', '4_BYTES']] )
-						x.append( [2, ['SHORT', 'UNSIGNED_SHORT']] )
-						x.append( [4, ['INT', 'UNSIGNED_INT', 'FLOAT']] )
-
-						print '    switch(%s) {' % (param.count_parameter_list[0])
-						for sub in x:
-							for t_name in sub[1]:
-								print '    case GL_%s:' % (t_name)
-
-							if sub[0] == 1:
-								print '        %s = (%s) (pc + %s); break;' % (param.name, param.type_string(), o)
-							else:
-								swap_func = self.swap_name(sub[0])
-								print '        %s = (%s) %s( (%s *) (pc + %s), %s ); break;' % (param.name, param.type_string(), swap_func, self.real_types[sub[0]], o, count_name)
-						print '    default:'
-						print '        return;'
-						print '    }'
-					else:
-						swap_func = self.swap_name(type_size)
-						compsize = self.size_call(f, 1)
-						print '    %s = (%s) %s( (%s *) (pc + %s), %s );' % (param.name, param.type_string(), swap_func, self.real_types[type_size], o, compsize)
-
-					need_blank = 1
-
-		else:
-			for param in f.parameterIterateGlxSend():
-				if param.count_parameter_list:
-					print '%s    %s = (%s) (pc + %s);' % (indent, param.name, param.type_string(), param.offset)
-					need_blank = 1
-
-
-		if need_blank:
-			print ''
-
-
-		return
-
-
-	def printSingleFunction(self, f, name):
-		if name not in f.glx_vendorpriv_names:
-			print '    xGLXSingleReq * const req = (xGLXSingleReq *) pc;'
-		else:
-			print '    xGLXVendorPrivateReq * const req = (xGLXVendorPrivateReq *) pc;'
-
-		print '    int error;'
-
-		if self.do_swap:
-		    print '    __GLXcontext * const cx = __glXForceCurrent(cl, bswap_CARD32( &req->contextTag ), &error);'
-		else:
-		    print '    __GLXcontext * const cx = __glXForceCurrent(cl, req->contextTag, &error);'
-
-		print ''
-		if name not in f.glx_vendorpriv_names:
-			print '    pc += __GLX_SINGLE_HDR_SIZE;'
-		else:
-			print '    pc += __GLX_VENDPRIV_HDR_SIZE;'
-
-		print '    if ( cx != NULL ) {'
-		self.common_func_print_just_start(f, "    ")
-		
-
-		if f.return_type != 'void':
-			print '        %s retval;' % (f.return_type)
-			retval_string = "retval"
-			retval_assign = "retval = "
-		else:
-			retval_string = "0"
-			retval_assign = ""
-
-
-		type_size = 0
-		answer_string = "dummy_answer"
-		answer_count = "0"
-		is_array_string = "GL_FALSE"
-
-		for param in f.parameterIterateOutputs():
-			answer_type = param.get_base_type_string()
-			if answer_type == "GLvoid":
-				answer_type = "GLubyte"
-
-
-			c = param.get_element_count()
-			type_size = (param.size() / c)
-			if type_size == 1:
-				size_scale = ""
-			else:
-				size_scale = " * %u" % (type_size)
-
-
-			if param.count_parameter_list:
-				print '        const GLuint compsize = %s;' % (self.size_call(f, 1))
-				print '        %s answerBuffer[200];' %  (answer_type)
-				print '        %s %s = __glXGetAnswerBuffer(cl, compsize%s, answerBuffer, sizeof(answerBuffer), %u);' % (param.type_string(), param.name, size_scale, type_size )
-				answer_string = param.name
-				answer_count = "compsize"
-
-				print ''
-				print '        if (%s == NULL) return BadAlloc;' % (param.name)
-				print '        __glXClearErrorOccured();'
-				print ''
-			elif param.counter:
-				print '        %s answerBuffer[200];' %  (answer_type)
-				print '        %s %s = __glXGetAnswerBuffer(cl, %s%s, answerBuffer, sizeof(answerBuffer), %u);' % (param.type_string(), param.name, param.counter, size_scale, type_size)
-				answer_string = param.name
-				answer_count = param.counter
-			elif c >= 1:
-				print '        %s %s[%u];' % (answer_type, param.name, c)
-				answer_string = param.name
-				answer_count = "%u" % (c)
-
-			if f.reply_always_array:
-				is_array_string = "GL_TRUE"
-
-
-		self.emit_function_call(f, retval_assign, "    ")
-
-
-		if f.needs_reply():
-			if self.do_swap:
-				for param in f.parameterIterateOutputs():
-					c = param.get_element_count()
-					type_size = (param.size() / c)
-
-					if type_size > 1:
-						swap_name = self.swap_name( type_size )
-						print '        (void) %s( (uint%u_t *) %s, %s );' % (swap_name, 8 * type_size, param.name, answer_count)
-
-
-				reply_func = '__glXSendReplySwap'
-			else:
-				reply_func = '__glXSendReply'
-
-			print '        %s(cl->client, %s, %s, %u, %s, %s);' % (reply_func, answer_string, answer_count, type_size, is_array_string, retval_string)
-		#elif f.note_unflushed:
-		#	print '        cx->hasUnflushedCommands = GL_TRUE;'
-
-		print '        error = Success;'
-		print '    }'
-		print ''
-		print '    return error;'
-		return
-
-
-	def printRenderFunction(self, f):
-		# There are 4 distinct phases in a rendering dispatch function.
-		# In the first phase we compute the sizes and offsets of each
-		# element in the command.  In the second phase we (optionally)
-		# re-align 64-bit data elements.  In the third phase we
-		# (optionally) byte-swap array data.  Finally, in the fourth
-		# phase we actually dispatch the function.
-
-		self.common_func_print_just_start(f, "")
-
-		images = f.get_images()
-		if len(images):
-			if self.do_swap:
-				pre = "bswap_CARD32( & "
-				post = " )"
-			else:
-				pre = ""
-				post = ""
-
-			img = images[0]
-
-			# swapBytes and lsbFirst are single byte fields, so
-			# the must NEVER be byte-swapped.
-
-			if not (img.img_type == "GL_BITMAP" and img.img_format == "GL_COLOR_INDEX"):
-				print '    CALL_PixelStorei( GET_DISPATCH(), (GL_UNPACK_SWAP_BYTES,   hdr->swapBytes) );'
-
-			print '    CALL_PixelStorei( GET_DISPATCH(), (GL_UNPACK_LSB_FIRST,    hdr->lsbFirst) );'
-
-			print '    CALL_PixelStorei( GET_DISPATCH(), (GL_UNPACK_ROW_LENGTH,   (GLint) %shdr->rowLength%s) );' % (pre, post)
-			if img.depth:
-				print '    CALL_PixelStorei( GET_DISPATCH(), (GL_UNPACK_IMAGE_HEIGHT, (GLint) %shdr->imageHeight%s) );' % (pre, post)
-			print '    CALL_PixelStorei( GET_DISPATCH(), (GL_UNPACK_SKIP_ROWS,    (GLint) %shdr->skipRows%s) );' % (pre, post)
-			if img.depth:
-				print '    CALL_PixelStorei( GET_DISPATCH(), (GL_UNPACK_SKIP_IMAGES,  (GLint) %shdr->skipImages%s) );' % (pre, post)
-			print '    CALL_PixelStorei( GET_DISPATCH(), (GL_UNPACK_SKIP_PIXELS,  (GLint) %shdr->skipPixels%s) );' % (pre, post)
-			print '    CALL_PixelStorei( GET_DISPATCH(), (GL_UNPACK_ALIGNMENT,    (GLint) %shdr->alignment%s) );' % (pre, post)
-			print ''
-
-
-		self.emit_function_call(f, "", "")
-		return
-
-
-if __name__ == '__main__':
-	file_name = "gl_API.xml"
-
-	try:
-		(args, trail) = getopt.getopt(sys.argv[1:], "f:m:s")
-	except Exception,e:
-		show_usage()
-
-	mode = "dispatch_c"
-	do_swap = 0
-	for (arg,val) in args:
-		if arg == "-f":
-			file_name = val
-		elif arg == "-m":
-			mode = val
-		elif arg == "-s":
-			do_swap = 1
-
-	if mode == "dispatch_c":
-		printer = PrintGlxDispatchFunctions(do_swap)
-	elif mode == "dispatch_h":
-		printer = PrintGlxDispatch_h()
-	else:
-		show_usage()
-
-	api = gl_XML.parse_GL_API( file_name, glX_proto_common.glx_proto_item_factory() )
-
-	printer.Print( api )
diff --git a/src/mesa/glapi/glX_proto_send.py b/src/mesa/glapi/glX_proto_send.py
deleted file mode 100644
index daca1b767a..0000000000
--- a/src/mesa/glapi/glX_proto_send.py
+++ /dev/null
@@ -1,1042 +0,0 @@
-#!/usr/bin/env python
-
-# (C) Copyright IBM Corporation 2004, 2005
-# All Rights Reserved.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# on the rights to use, copy, modify, merge, publish, distribute, sub
-# license, and/or sell copies of the Software, and to permit persons to whom
-# the Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
-# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-#
-# Authors:
-#    Ian Romanick <idr@us.ibm.com>
-#    Jeremy Kolb <jkolb@brandeis.edu>
-
-import gl_XML, glX_XML, glX_proto_common, license
-import sys, getopt, copy, string
-
-def convertStringForXCB(str):
-    tmp = ""
-    special = [ "ARB" ]
-    i = 0
-    while i < len(str):
-        if str[i:i+3] in special:
-            tmp = '%s_%s' % (tmp, string.lower(str[i:i+3]))
-            i = i + 2;
-        elif str[i].isupper():
-            tmp = '%s_%s' % (tmp, string.lower(str[i]))
-        else:
-            tmp = '%s%s' % (tmp, str[i])
-        i += 1
-    return tmp
-
-def hash_pixel_function(func):
-	"""Generate a 'unique' key for a pixel function.  The key is based on
-	the parameters written in the command packet.  This includes any
-	padding that might be added for the original function and the 'NULL
-	image' flag."""
-
-
-	h = ""
-	hash_pre = ""
-	hash_suf = ""
-	for param in func.parameterIterateGlxSend():
-		if param.is_image():
-			[dim, junk, junk, junk, junk] = param.get_dimensions()
-
-			d = (dim + 1) & ~1
-			hash_pre = "%uD%uD_" % (d - 1, d)
-
-			if param.img_null_flag:
-				hash_suf = "_NF"
-
-		h += "%u" % (param.size())
-
-		if func.pad_after(param):
-			h += "4"
-
-
-	n = func.name.replace("%uD" % (dim), "")
-	n = "__glx_%s_%uD%uD" % (n, d - 1, d)
-
-	h = hash_pre + h + hash_suf
-	return [h, n]
-
-
-class glx_pixel_function_stub(glX_XML.glx_function):
-	"""Dummy class used to generate pixel "utility" functions that are
-	shared by multiple dimension image functions.  For example, these
-	objects are used to generate shared functions used to send GLX
-	protocol for TexImage1D and TexImage2D, TexSubImage1D and
-	TexSubImage2D, etc."""
-
-	def __init__(self, func, name):
-		# The parameters to the utility function are the same as the
-		# parameters to the real function except for the added "pad"
-		# parameters.
-
-		self.name = name
-		self.images = []
-		self.parameters = []
-		self.parameters_by_name = {}
-		for _p in func.parameterIterator():
-			p = copy.copy(_p)
-			self.parameters.append(p)
-			self.parameters_by_name[ p.name ] = p
-
-
-			if p.is_image():
-				self.images.append(p)
-				p.height = "height"
-
-				if p.img_yoff == None:
-					p.img_yoff = "yoffset"
-
-				if p.depth:
-					if p.extent == None:
-						p.extent = "extent"
-
-					if p.img_woff == None:
-						p.img_woff = "woffset"
-
-
-			pad_name = func.pad_after(p)
-			if pad_name:
-				pad = copy.copy(p)
-				pad.name = pad_name
-				self.parameters.append(pad)
-				self.parameters_by_name[ pad.name ] = pad
-				
-
-		self.return_type = func.return_type
-
-		self.glx_rop = ~0
-		self.glx_sop = 0
-		self.glx_vendorpriv = 0
-
-		self.glx_doubles_in_order = func.glx_doubles_in_order
-
-		self.vectorequiv = None
-		self.output = None
-		self.can_be_large = func.can_be_large
-		self.reply_always_array = func.reply_always_array
-		self.dimensions_in_reply = func.dimensions_in_reply
-		self.img_reset = None
-
-		self.server_handcode = 0
-		self.client_handcode = 0
-		self.ignore = 0
-
-		self.count_parameter_list = func.count_parameter_list
-		self.counter_list = func.counter_list
-		self.offsets_calculated = 0
-		return
-
-
-class PrintGlxProtoStubs(glX_proto_common.glx_print_proto):
-	def __init__(self):
-		glX_proto_common.glx_print_proto.__init__(self)
-		self.name = "glX_proto_send.py (from Mesa)"
-		self.license = license.bsd_license_template % ( "(C) Copyright IBM Corporation 2004, 2005", "IBM")
-
-
-		self.last_category = ""
-		self.generic_sizes = [3, 4, 6, 8, 12, 16, 24, 32]
-		self.pixel_stubs = {}
-		self.debug = 0
-		return
-
-	def printRealHeader(self):
-		print ''
-		print '#include <GL/gl.h>'
-		print '#include "indirect.h"'
-		print '#include "glxclient.h"'
-		print '#include "indirect_size.h"'
-		print '#include "dispatch.h"'
-		print '#include "glapi.h"'
-		print '#include "glthread.h"'
-		print '#include <GL/glxproto.h>'
-		print '#ifdef USE_XCB'
-		print '#include <X11/Xlib-xcb.h>'
-		print '#include <xcb/xcb.h>'
-		print '#include <xcb/glx.h>'
-		print '#endif /* USE_XCB */'
-
-		print ''
-		print '#define __GLX_PAD(n) (((n) + 3) & ~3)'
-		print ''
-		self.printFastcall()
-		self.printNoinline()
-		print ''
-		print '#if !defined __GNUC__ || __GNUC__ < 3'
-		print '#  define __builtin_expect(x, y) x'
-		print '#endif'
-		print ''
-		print '/* If the size and opcode values are known at compile-time, this will, on'
-		print ' * x86 at least, emit them with a single instruction.'
-		print ' */'
-		print '#define emit_header(dest, op, size)            \\'
-		print '    do { union { short s[2]; int i; } temp;    \\'
-		print '         temp.s[0] = (size); temp.s[1] = (op); \\'
-		print '         *((int *)(dest)) = temp.i; } while(0)'
-		print ''
-		print """NOINLINE CARD32
-__glXReadReply( Display *dpy, size_t size, void * dest, GLboolean reply_is_always_array )
-{
-    xGLXSingleReply reply;
-    
-    (void) _XReply(dpy, (xReply *) & reply, 0, False);
-    if (size != 0) {
-        if ((reply.length > 0) || reply_is_always_array) {
-            const GLint bytes = (reply_is_always_array) 
-              ? (4 * reply.length) : (reply.size * size);
-            const GLint extra = 4 - (bytes & 3);
-
-            _XRead(dpy, dest, bytes);
-            if ( extra < 4 ) {
-                _XEatData(dpy, extra);
-            }
-        }
-        else {
-            (void) memcpy( dest, &(reply.pad3), size);
-        }
-    }
-
-    return reply.retval;
-}
-
-NOINLINE void
-__glXReadPixelReply( Display *dpy, __GLXcontext * gc, unsigned max_dim,
-    GLint width, GLint height, GLint depth, GLenum format, GLenum type,
-    void * dest, GLboolean dimensions_in_reply )
-{
-    xGLXSingleReply reply;
-    GLint size;
-    
-    (void) _XReply(dpy, (xReply *) & reply, 0, False);
-
-    if ( dimensions_in_reply ) {
-        width  = reply.pad3;
-        height = reply.pad4;
-        depth  = reply.pad5;
-	
-	if ((height == 0) || (max_dim < 2)) { height = 1; }
-	if ((depth  == 0) || (max_dim < 3)) { depth  = 1; }
-    }
-
-    size = reply.length * 4;
-    if (size != 0) {
-        void * buf = Xmalloc( size );
-
-        if ( buf == NULL ) {
-            _XEatData(dpy, size);
-            __glXSetError(gc, GL_OUT_OF_MEMORY);
-        }
-        else {
-            const GLint extra = 4 - (size & 3);
-
-            _XRead(dpy, buf, size);
-            if ( extra < 4 ) {
-                _XEatData(dpy, extra);
-            }
-
-            __glEmptyImage(gc, 3, width, height, depth, format, type,
-                           buf, dest);
-            Xfree(buf);
-        }
-    }
-}
-
-#define X_GLXSingle 0
-
-NOINLINE FASTCALL GLubyte *
-__glXSetupSingleRequest( __GLXcontext * gc, GLint sop, GLint cmdlen )
-{
-    xGLXSingleReq * req;
-    Display * const dpy = gc->currentDpy;
-
-    (void) __glXFlushRenderBuffer(gc, gc->pc);
-    LockDisplay(dpy);
-    GetReqExtra(GLXSingle, cmdlen, req);
-    req->reqType = gc->majorOpcode;
-    req->contextTag = gc->currentContextTag;
-    req->glxCode = sop;
-    return (GLubyte *)(req) + sz_xGLXSingleReq;
-}
-
-NOINLINE FASTCALL GLubyte *
-__glXSetupVendorRequest( __GLXcontext * gc, GLint code, GLint vop, GLint cmdlen )
-{
-    xGLXVendorPrivateReq * req;
-    Display * const dpy = gc->currentDpy;
-
-    (void) __glXFlushRenderBuffer(gc, gc->pc);
-    LockDisplay(dpy);
-    GetReqExtra(GLXVendorPrivate, cmdlen, req);
-    req->reqType = gc->majorOpcode;
-    req->glxCode = code;
-    req->vendorCode = vop;
-    req->contextTag = gc->currentContextTag;
-    return (GLubyte *)(req) + sz_xGLXVendorPrivateReq;
-}
-
-const GLuint __glXDefaultPixelStore[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 1 };
-
-#define zero                        (__glXDefaultPixelStore+0)
-#define one                         (__glXDefaultPixelStore+8)
-#define default_pixel_store_1D      (__glXDefaultPixelStore+4)
-#define default_pixel_store_1D_size 20
-#define default_pixel_store_2D      (__glXDefaultPixelStore+4)
-#define default_pixel_store_2D_size 20
-#define default_pixel_store_3D      (__glXDefaultPixelStore+0)
-#define default_pixel_store_3D_size 36
-#define default_pixel_store_4D      (__glXDefaultPixelStore+0)
-#define default_pixel_store_4D_size 36
-"""
-
-		for size in self.generic_sizes:
-			self.print_generic_function(size)
-		return
-
-
-	def printBody(self, api):
-
-		self.pixel_stubs = {}
-		generated_stubs = []
-
-		for func in api.functionIterateGlx():
-			if func.client_handcode: continue
-
-			# If the function is a pixel function with a certain
-			# GLX protocol signature, create a fake stub function
-			# for it.  For example, create a single stub function
-			# that is used to implement both glTexImage1D and
-			# glTexImage2D.
-
-			if func.glx_rop != 0:
-				do_it = 0
-				for image in func.get_images():
-					if image.img_pad_dimensions:
-						do_it = 1
-						break
-
-
-				if do_it:
-					[h, n] = hash_pixel_function(func)
-
-
-					self.pixel_stubs[ func.name ] = n
-					if h not in generated_stubs:
-						generated_stubs.append(h)
-
-						fake_func = glx_pixel_function_stub( func, n )
-						self.printFunction(fake_func, fake_func.name)
-
-
-			self.printFunction(func, func.name)
-			if func.glx_sop and func.glx_vendorpriv:
-				self.printFunction(func, func.glx_vendorpriv_names[0])
-
-		return
-
-
-	def printFunction(self, func, name):
-		footer = '}\n'
-		if func.glx_rop == ~0:
-			print 'static %s' % (func.return_type)
-			print '%s( unsigned opcode, unsigned dim, %s )' % (func.name, func.get_parameter_string())
-			print '{'
-		else:
-			if func.has_different_protocol(name):
-				if func.return_type == "void":
-					ret_string = ''
-				else:
-					ret_string = "return "
-
-				func_name = func.static_glx_name(name)
-				print '#define %s %d' % (func.opcode_vendor_name(name), func.glx_vendorpriv)
-				print '%s gl%s(%s)' % (func.return_type, func_name, func.get_parameter_string())
-				print '{'
-				print '    __GLXcontext * const gc = __glXGetCurrentContext();'
-				print ''
-				print '#ifdef GLX_DIRECT_RENDERING'
-				print '    if (gc->driContext) {'
-				print '    %sCALL_%s(GET_DISPATCH(), (%s));' % (ret_string, func.name, func.get_called_parameter_string())
-				print '    } else'
-				print '#endif'
-				print '    {'
-
-				footer = '}\n}\n'
-			else:
-				print '#define %s %d' % (func.opcode_name(), func.opcode_value())
-
-				print '%s __indirect_gl%s(%s)' % (func.return_type, name, func.get_parameter_string())
-				print '{'
-
-
-		if func.glx_rop != 0 or func.vectorequiv != None:
-			if len(func.images):
-				self.printPixelFunction(func)
-			else:
-				self.printRenderFunction(func)
-		elif func.glx_sop != 0 or func.glx_vendorpriv != 0:
-			self.printSingleFunction(func, name)
-			pass
-		else:
-			print "/* Missing GLX protocol for %s. */" % (name)
-
-		print footer
-		return
-
-
-	def print_generic_function(self, n):
-		size = (n + 3) & ~3
-		print """static FASTCALL NOINLINE void
-generic_%u_byte( GLint rop, const void * ptr )
-{
-    __GLXcontext * const gc = __glXGetCurrentContext();
-    const GLuint cmdlen = %u;
-
-    emit_header(gc->pc, rop, cmdlen);
-    (void) memcpy((void *)(gc->pc + 4), ptr, %u);
-    gc->pc += cmdlen;
-    if (__builtin_expect(gc->pc > gc->limit, 0)) { (void) __glXFlushRenderBuffer(gc, gc->pc); }
-}
-""" % (n, size + 4, size)
-		return
-
-
-	def common_emit_one_arg(self, p, pc, adjust, extra_offset):
-		if p.is_array():
-			src_ptr = p.name
-		else:
-			src_ptr = "&" + p.name
-
-		if p.is_padding:
-			print '(void) memset((void *)(%s + %u), 0, %s);' \
-			    % (pc, p.offset + adjust, p.size_string() )
-		elif not extra_offset:
-			print '(void) memcpy((void *)(%s + %u), (void *)(%s), %s);' \
-			    % (pc, p.offset + adjust, src_ptr, p.size_string() )
-		else:
-			print '(void) memcpy((void *)(%s + %u + %s), (void *)(%s), %s);' \
-			    % (pc, p.offset + adjust, extra_offset, src_ptr, p.size_string() )
-
-	def common_emit_args(self, f, pc, adjust, skip_vla):
-		extra_offset = None
-
-		for p in f.parameterIterateGlxSend( not skip_vla ):
-			if p.name != f.img_reset:
-				self.common_emit_one_arg(p, pc, adjust, extra_offset)
-				
-				if p.is_variable_length():
-					temp = p.size_string()
-					if extra_offset:
-						extra_offset += " + %s" % (temp)
-					else:
-						extra_offset = temp
-
-		return
-
-
-	def pixel_emit_args(self, f, pc, large):
-		"""Emit the arguments for a pixel function.  This differs from
-		common_emit_args in that pixel functions may require padding
-		be inserted (i.e., for the missing width field for
-		TexImage1D), and they may also require a 'NULL image' flag
-		be inserted before the image data."""
-
-		if large:
-			adjust = 8
-		else:
-			adjust = 4
-
-		for param in f.parameterIterateGlxSend():
-			if not param.is_image():
-				self.common_emit_one_arg(param, pc, adjust, None)
-
-				if f.pad_after(param):
-					print '(void) memcpy((void *)(%s + %u), zero, 4);' % (pc, (param.offset + param.size()) + adjust)
-
-			else:
-				[dim, width, height, depth, extent] = param.get_dimensions()
-				if f.glx_rop == ~0:
-					dim_str = "dim"
-				else:
-					dim_str = str(dim)
-
-				if param.is_padding:
-					print '(void) memset((void *)(%s + %u), 0, %s);' \
-					% (pc, (param.offset - 4) + adjust, param.size_string() )
-
-				if param.img_null_flag:
-					if large:
-						print '(void) memcpy((void *)(%s + %u), zero, 4);' % (pc, (param.offset - 4) + adjust)
-					else:
-						print '(void) memcpy((void *)(%s + %u), (void *)((%s == NULL) ? one : zero), 4);' % (pc, (param.offset - 4) + adjust, param.name)
-
-
-				pixHeaderPtr = "%s + %u" % (pc, adjust)
-				pcPtr = "%s + %u" % (pc, param.offset + adjust)
-
-				if not large:
-					if param.img_send_null:
-						condition = '(compsize > 0) && (%s != NULL)' % (param.name)
-					else:
-						condition = 'compsize > 0'
-
-					print 'if (%s) {' % (condition)
-					print '    (*gc->fillImage)(gc, %s, %s, %s, %s, %s, %s, %s, %s, %s);' % (dim_str, width, height, depth, param.img_format, param.img_type, param.name, pcPtr, pixHeaderPtr)
-					print '} else {'
-					print '    (void) memcpy( %s, default_pixel_store_%uD, default_pixel_store_%uD_size );' % (pixHeaderPtr, dim, dim)
-					print '}'
-				else:
-					print '__glXSendLargeImage(gc, compsize, %s, %s, %s, %s, %s, %s, %s, %s, %s);' % (dim_str, width, height, depth, param.img_format, param.img_type, param.name, pcPtr, pixHeaderPtr)
-
-		return
-
-
-	def large_emit_begin(self, f, op_name = None):
-		if not op_name:
-			op_name = f.opcode_real_name()
-
-		print 'const GLint op = %s;' % (op_name)
-		print 'const GLuint cmdlenLarge = cmdlen + 4;'
-		print 'GLubyte * const pc = __glXFlushRenderBuffer(gc, gc->pc);'
-		print '(void) memcpy((void *)(pc + 0), (void *)(&cmdlenLarge), 4);'
-		print '(void) memcpy((void *)(pc + 4), (void *)(&op), 4);'
-		return
-
-
-	def common_func_print_just_start(self, f, name):
-		print '    __GLXcontext * const gc = __glXGetCurrentContext();'
-
-		# The only reason that single and vendor private commands need
-		# a variable called 'dpy' is becuase they use the SyncHandle
-		# macro.  For whatever brain-dead reason, that macro is hard-
-		# coded to use a variable called 'dpy' instead of taking a
-		# parameter.
-
-		# FIXME Simplify the logic related to skip_condition and
-		# FIXME condition_list in this function.  Basically, remove
-		# FIXME skip_condition, and just append the "dpy != NULL" type
-		# FIXME condition to condition_list from the start.  The only
-		# FIXME reason it's done in this confusing way now is to
-		# FIXME minimize the diffs in the generated code.
-
-		if not f.glx_rop:
-			for p in f.parameterIterateOutputs():
-				if p.is_image() and (p.img_format != "GL_COLOR_INDEX" or p.img_type != "GL_BITMAP"):
-					print '    const __GLXattribute * const state = gc->client_state_private;'
-					break
-
-			print '    Display * const dpy = gc->currentDpy;'
-			skip_condition = "dpy != NULL"
-		elif f.can_be_large:
-			skip_condition = "gc->currentDpy != NULL"
-		else:
-			skip_condition = None
-
-
-		if f.return_type != 'void':
-			print '    %s retval = (%s) 0;' % (f.return_type, f.return_type)
-
-
-		if name != None and name not in f.glx_vendorpriv_names:
-			print '#ifndef USE_XCB'
-		self.emit_packet_size_calculation(f, 0)
-		if name != None and name not in f.glx_vendorpriv_names:
-			print '#endif'
-
-		condition_list = []
-		for p in f.parameterIterateCounters():
-			condition_list.append( "%s >= 0" % (p.name) )
-			# 'counter' parameters cannot be negative
-			print "    if (%s < 0) {" % p.name
-			print "        __glXSetError(gc, GL_INVALID_VALUE);"
-			if f.return_type != 'void':
-				print "        return 0;"
-			else:
-				print "        return;"
-			print "    }"
-
-		if skip_condition:
-			condition_list.append( skip_condition )
-
-		if len( condition_list ) > 0:
-			if len( condition_list ) > 1:
-				skip_condition = "(%s)" % (string.join( condition_list, ") && (" ))
-			else:
-				skip_condition = "%s" % (condition_list.pop(0))
-
-			print '    if (__builtin_expect(%s, 1)) {' % (skip_condition)
-			return 1
-		else:
-			return 0
-
-
-	def printSingleFunction(self, f, name):
-		self.common_func_print_just_start(f, name)
-
-		if self.debug:
-			print '        printf( "Enter %%s...\\n", "gl%s" );' % (f.name)
-
-		if name not in f.glx_vendorpriv_names:
-
-			# XCB specific:
-			print '#ifdef USE_XCB'
-			if self.debug:
-				print '        printf("\\tUsing XCB.\\n");'
-			print '        xcb_connection_t *c = XGetXCBConnection(dpy);'
-			print '        (void) __glXFlushRenderBuffer(gc, gc->pc);'
-			xcb_name = 'xcb_glx%s' % convertStringForXCB(name)
-
-			iparams=[]
-			extra_iparams = []
-			output = None
-			for p in f.parameterIterator():
-				if p.is_output:
-					output = p
-
-					if p.is_image():
-						if p.img_format != "GL_COLOR_INDEX" or p.img_type != "GL_BITMAP":
-							extra_iparams.append("state->storePack.swapEndian")
-						else:
-							extra_iparams.append("0")
-					
-						# Hardcode this in.  lsb_first param (apparently always GL_FALSE)
-						# also present in GetPolygonStipple, but taken care of above.
-						if xcb_name == "xcb_glx_read_pixels": 
-							extra_iparams.append("0")
-				else:
-					iparams.append(p.name)
-
-
-			xcb_request = '%s(%s)' % (xcb_name, ", ".join(["c", "gc->currentContextTag"] + iparams + extra_iparams))
-
-			if f.needs_reply():
-				print '        %s_reply_t *reply = %s_reply(c, %s, NULL);' % (xcb_name, xcb_name, xcb_request)
-				if output and f.reply_always_array:
-					print '        (void)memcpy(%s, %s_data(reply), %s_data_length(reply) * sizeof(%s));' % (output.name, xcb_name, xcb_name, output.get_base_type_string())
-
-				elif output and not f.reply_always_array:
-					if not output.is_image():
-						print '        if (%s_data_length(reply) == 0)' % (xcb_name)
-						print '            (void)memcpy(%s, &reply->datum, sizeof(reply->datum));' % (output.name)
-						print '        else'
-					print '        (void)memcpy(%s, %s_data(reply), %s_data_length(reply) * sizeof(%s));' % (output.name, xcb_name, xcb_name, output.get_base_type_string())
-
-
-				if f.return_type != 'void':
-					print '        retval = reply->ret_val;'
-				print '        free(reply);'
-			else:
-				print '        ' + xcb_request + ';'
-			print '#else'
-			# End of XCB specific.
-
-
-		if f.parameters != []:
-			pc_decl = "GLubyte const * pc ="
-		else:
-			pc_decl = "(void)"
-
-		if name in f.glx_vendorpriv_names:
-			print '        %s __glXSetupVendorRequest(gc, %s, %s, cmdlen);' % (pc_decl, f.opcode_real_name(), f.opcode_vendor_name(name))
-		else:
-			print '        %s __glXSetupSingleRequest(gc, %s, cmdlen);' % (pc_decl, f.opcode_name())
-
-		self.common_emit_args(f, "pc", 0, 0)
-
-		images = f.get_images()
-
-		for img in images:
-			if img.is_output:
-				o = f.command_fixed_length() - 4
-				print '        *(int32_t *)(pc + %u) = 0;' % (o)
-				if img.img_format != "GL_COLOR_INDEX" or img.img_type != "GL_BITMAP":
-					print '        * (int8_t *)(pc + %u) = state->storePack.swapEndian;' % (o)
-		
-				if f.img_reset:
-					print '        * (int8_t *)(pc + %u) = %s;' % (o + 1, f.img_reset)
-
-
-		return_name = ''
-		if f.needs_reply():
-			if f.return_type != 'void':
-				return_name = " retval"
-				return_str = " retval = (%s)" % (f.return_type)
-			else:
-				return_str = " (void)"
-
-			got_reply = 0
-
-			for p in f.parameterIterateOutputs():
-				if p.is_image():
-					[dim, w, h, d, junk] = p.get_dimensions()
-					if f.dimensions_in_reply:
-						print "        __glXReadPixelReply(dpy, gc, %u, 0, 0, 0, %s, %s, %s, GL_TRUE);" % (dim, p.img_format, p.img_type, p.name)
-					else:
-						print "        __glXReadPixelReply(dpy, gc, %u, %s, %s, %s, %s, %s, %s, GL_FALSE);" % (dim, w, h, d, p.img_format, p.img_type, p.name)
-
-					got_reply = 1
-				else:
-					if f.reply_always_array:
-						aa = "GL_TRUE"
-					else:
-						aa = "GL_FALSE"
-
-					# gl_parameter.size() returns the size
-					# of the entire data item.  If the
-					# item is a fixed-size array, this is
-					# the size of the whole array.  This
-					# is not what __glXReadReply wants. It
-					# wants the size of a single data
-					# element in the reply packet.
-					# Dividing by the array size (1 for
-					# non-arrays) gives us this.
-
-					s = p.size() / p.get_element_count()
-					print "       %s __glXReadReply(dpy, %s, %s, %s);" % (return_str, s, p.name, aa)
-					got_reply = 1
-
-
-			# If a reply wasn't read to fill an output parameter,
-			# read a NULL reply to get the return value.
-
-			if not got_reply:
-				print "       %s __glXReadReply(dpy, 0, NULL, GL_FALSE);" % (return_str)
-
-
-		elif self.debug:
-			# Only emit the extra glFinish call for functions
-			# that don't already require a reply from the server.
-			print '        __indirect_glFinish();'
-
-		if self.debug:
-			print '        printf( "Exit %%s.\\n", "gl%s" );' % (name)
-
-
-		print '        UnlockDisplay(dpy); SyncHandle();'
-
-		if name not in f.glx_vendorpriv_names:
-			print '#endif /* USE_XCB */'
-
-		print '    }'
-		print '    return%s;' % (return_name)
-		return
-
-
-	def printPixelFunction(self, f):
-		if self.pixel_stubs.has_key( f.name ):
-			# Normally gl_function::get_parameter_string could be
-			# used.  However, this call needs to have the missing
-			# dimensions (e.g., a fake height value for
-			# glTexImage1D) added in.
-
-			p_string = ""
-			for param in f.parameterIterateGlxSend():
-				if param.is_padding:
-					continue
-
-				p_string += ", " + param.name
-
-				if param.is_image():
-					[dim, junk, junk, junk, junk] = param.get_dimensions()
-
-				if f.pad_after(param):
-					p_string += ", 1"
-
-			print '    %s(%s, %u%s );' % (self.pixel_stubs[f.name] , f.opcode_name(), dim, p_string)
-			return
-
-
-		if self.common_func_print_just_start(f, None):
-			trailer = "    }"
-		else:
-			trailer = None
-
-
-		if f.can_be_large:
-			print 'if (cmdlen <= gc->maxSmallRenderCommandSize) {'
-			print '    if ( (gc->pc + cmdlen) > gc->bufEnd ) {'
-			print '        (void) __glXFlushRenderBuffer(gc, gc->pc);'
-			print '    }'
-
-		if f.glx_rop == ~0:
-			opcode = "opcode"
-		else:
-			opcode = f.opcode_real_name()
-
-		print 'emit_header(gc->pc, %s, cmdlen);' % (opcode)
-
-		self.pixel_emit_args( f, "gc->pc", 0 )
-		print 'gc->pc += cmdlen;'
-		print 'if (gc->pc > gc->limit) { (void) __glXFlushRenderBuffer(gc, gc->pc); }'
-
-		if f.can_be_large:
-			print '}'
-			print 'else {'
-
-			self.large_emit_begin(f, opcode)
-			self.pixel_emit_args(f, "pc", 1)
-
-			print '}'
-
-		if trailer: print trailer
-		return
-
-
-	def printRenderFunction(self, f):
-		# There is a class of GL functions that take a single pointer
-		# as a parameter.  This pointer points to a fixed-size chunk
-		# of data, and the protocol for this functions is very
-		# regular.  Since they are so regular and there are so many
-		# of them, special case them with generic functions.  On
-		# x86, this saves about 26KB in the libGL.so binary.
-
-		if f.variable_length_parameter() == None and len(f.parameters) == 1:
-			p = f.parameters[0]
-			if p.is_pointer():
-				cmdlen = f.command_fixed_length()
-				if cmdlen in self.generic_sizes:
-					print '    generic_%u_byte( %s, %s );' % (cmdlen, f.opcode_real_name(), p.name)
-					return
-
-		if self.common_func_print_just_start(f, None):
-			trailer = "    }"
-		else:
-			trailer = None
-
-		if self.debug:
-			print 'printf( "Enter %%s...\\n", "gl%s" );' % (f.name)
-
-		if f.can_be_large:
-			print 'if (cmdlen <= gc->maxSmallRenderCommandSize) {'
-			print '    if ( (gc->pc + cmdlen) > gc->bufEnd ) {'
-			print '        (void) __glXFlushRenderBuffer(gc, gc->pc);'
-			print '    }'
-
-		print 'emit_header(gc->pc, %s, cmdlen);' % (f.opcode_real_name())
-
-		self.common_emit_args(f, "gc->pc", 4, 0)
-		print 'gc->pc += cmdlen;'
-		print 'if (__builtin_expect(gc->pc > gc->limit, 0)) { (void) __glXFlushRenderBuffer(gc, gc->pc); }'
-
-		if f.can_be_large:
-			print '}'
-			print 'else {'
-
-			self.large_emit_begin(f)
-			self.common_emit_args(f, "pc", 8, 1)
-
-			p = f.variable_length_parameter()
-			print '    __glXSendLargeCommand(gc, pc, %u, %s, %s);' % (p.offset + 8, p.name, p.size_string())
-			print '}'
-
-		if self.debug:
-			print '__indirect_glFinish();'
-			print 'printf( "Exit %%s.\\n", "gl%s" );' % (f.name)
-
-		if trailer: print trailer
-		return
-
-
-class PrintGlxProtoInit_c(gl_XML.gl_print_base):
-	def __init__(self):
-		gl_XML.gl_print_base.__init__(self)
-
-		self.name = "glX_proto_send.py (from Mesa)"
-		self.license = license.bsd_license_template % ( \
-"""Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
-(C) Copyright IBM Corporation 2004""", "PRECISION INSIGHT, IBM")
-		return
-
-
-	def printRealHeader(self):
-		print """/**
- * \\file indirect_init.c
- * Initialize indirect rendering dispatch table.
- *
- * \\author Kevin E. Martin <kevin@precisioninsight.com>
- * \\author Brian Paul <brian@precisioninsight.com>
- * \\author Ian Romanick <idr@us.ibm.com>
- */
-
-#include "indirect_init.h"
-#include "indirect.h"
-#include "glapi.h"
-
-
-/**
- * No-op function used to initialize functions that have no GLX protocol
- * support.
- */
-static int NoOp(void)
-{
-    return 0;
-}
-
-/**
- * Create and initialize a new GL dispatch table.  The table is initialized
- * with GLX indirect rendering protocol functions.
- */
-__GLapi * __glXNewIndirectAPI( void )
-{
-    __GLapi *glAPI;
-    GLuint entries;
-
-    entries = _glapi_get_dispatch_table_size();
-    glAPI = (__GLapi *) Xmalloc(entries * sizeof(void *));
-
-    /* first, set all entries to point to no-op functions */
-    {
-       int i;
-       void **dispatch = (void **) glAPI;
-       for (i = 0; i < entries; i++) {
-          dispatch[i] = (void *) NoOp;
-       }
-    }
-
-    /* now, initialize the entries we understand */"""
-
-	def printRealFooter(self):
-		print """
-    return glAPI;
-}
-"""
-		return
-
-
-	def printBody(self, api):
-		for [name, number] in api.categoryIterate():
-			if number != None:
-				preamble = '\n    /* %3u. %s */\n\n' % (int(number), name)
-			else:
-				preamble = '\n    /* %s */\n\n' % (name)
-
-			for func in api.functionIterateByCategory(name):
-				if func.client_supported_for_indirect():
-					print '%s    glAPI->%s = __indirect_gl%s;' % (preamble, func.name, func.name)
-					preamble = ''
-
-		return
-
-
-class PrintGlxProtoInit_h(gl_XML.gl_print_base):
-	def __init__(self):
-		gl_XML.gl_print_base.__init__(self)
-
-		self.name = "glX_proto_send.py (from Mesa)"
-		self.license = license.bsd_license_template % ( \
-"""Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
-(C) Copyright IBM Corporation 2004""", "PRECISION INSIGHT, IBM")
-		self.header_tag = "_INDIRECT_H_"
-
-		self.last_category = ""
-		return
-
-
-	def printRealHeader(self):
-		print """/**
- * \\file
- * Prototypes for indirect rendering functions.
- *
- * \\author Kevin E. Martin <kevin@precisioninsight.com>
- * \\author Ian Romanick <idr@us.ibm.com>
- */
-"""
-		self.printVisibility( "HIDDEN", "hidden" )
-		self.printFastcall()
-		self.printNoinline()
-
-		print """
-#include "glxclient.h"
-
-extern HIDDEN NOINLINE CARD32 __glXReadReply( Display *dpy, size_t size,
-    void * dest, GLboolean reply_is_always_array );
-
-extern HIDDEN NOINLINE void __glXReadPixelReply( Display *dpy,
-    __GLXcontext * gc, unsigned max_dim, GLint width, GLint height,
-    GLint depth, GLenum format, GLenum type, void * dest,
-    GLboolean dimensions_in_reply );
-
-extern HIDDEN NOINLINE FASTCALL GLubyte * __glXSetupSingleRequest(
-    __GLXcontext * gc, GLint sop, GLint cmdlen );
-
-extern HIDDEN NOINLINE FASTCALL GLubyte * __glXSetupVendorRequest(
-    __GLXcontext * gc, GLint code, GLint vop, GLint cmdlen );
-"""
-
-
-	def printBody(self, api):
-		for func in api.functionIterateGlx():
-			params = func.get_parameter_string()
-
-			print 'extern HIDDEN %s __indirect_gl%s(%s);' % (func.return_type, func.name, params)
-
-			for n in func.entry_points:
-				if func.has_different_protocol(n):
-					asdf = func.static_glx_name(n)
-					if asdf not in func.static_entry_points:
-						print 'extern HIDDEN %s gl%s(%s);' % (func.return_type, asdf, params)
-					else:
-						print 'GLAPI %s GLAPIENTRY gl%s(%s);' % (func.return_type, asdf, params)
-						
-					break
-
-
-
-def show_usage():
-	print "Usage: %s [-f input_file_name] [-m output_mode] [-d]" % sys.argv[0]
-	print "    -m output_mode   Output mode can be one of 'proto', 'init_c' or 'init_h'."
-	print "    -d               Enable extra debug information in the generated code."
-	sys.exit(1)
-
-
-if __name__ == '__main__':
-	file_name = "gl_API.xml"
-
-	try:
-		(args, trail) = getopt.getopt(sys.argv[1:], "f:m:d")
-	except Exception,e:
-		show_usage()
-
-	debug = 0
-	mode = "proto"
-	for (arg,val) in args:
-		if arg == "-f":
-			file_name = val
-		elif arg == "-m":
-			mode = val
-		elif arg == "-d":
-			debug = 1
-
-	if mode == "proto":
-		printer = PrintGlxProtoStubs()
-	elif mode == "init_c":
-		printer = PrintGlxProtoInit_c()
-	elif mode == "init_h":
-		printer = PrintGlxProtoInit_h()
-	else:
-		show_usage()
-
-
-	printer.debug = debug
-	api = gl_XML.parse_GL_API( file_name, glX_XML.glx_item_factory() )
-
-	printer.Print( api )
diff --git a/src/mesa/glapi/glX_proto_size.py b/src/mesa/glapi/glX_proto_size.py
deleted file mode 100644
index 95cb5110cc..0000000000
--- a/src/mesa/glapi/glX_proto_size.py
+++ /dev/null
@@ -1,704 +0,0 @@
-#!/usr/bin/env python
-
-# (C) Copyright IBM Corporation 2004, 2005
-# All Rights Reserved.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# on the rights to use, copy, modify, merge, publish, distribute, sub
-# license, and/or sell copies of the Software, and to permit persons to whom
-# the Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
-# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-#
-# Authors:
-#    Ian Romanick <idr@us.ibm.com>
-
-import gl_XML, glX_XML
-import license
-import sys, getopt, copy, string
-
-
-class glx_enum_function:
-	def __init__(self, func_name, enum_dict):
-		self.name = func_name
-		self.mode = 1
-		self.sig = None
-
-		# "enums" is a set of lists.  The element in the set is the
-		# value of the enum.  The list is the list of names for that
-		# value.  For example, [0x8126] = {"POINT_SIZE_MIN",
-		# "POINT_SIZE_MIN_ARB", "POINT_SIZE_MIN_EXT",
-		# "POINT_SIZE_MIN_SGIS"}.
-
-		self.enums = {}
-
-		# "count" is indexed by count values.  Each element of count
-		# is a list of index to "enums" that have that number of
-		# associated data elements.  For example, [4] = 
-		# {GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR, GL_EMISSION,
-		# GL_AMBIENT_AND_DIFFUSE} (the enum names are used here,
-		# but the actual hexadecimal values would be in the array).
-
-		self.count = {}
-
-
-		# Fill self.count and self.enums using the dictionary of enums
-		# that was passed in.  The generic Get functions (e.g.,
-		# GetBooleanv and friends) are handled specially here.  In
-		# the data the generic Get functions are refered to as "Get".
-
-		if func_name in ["GetIntegerv", "GetBooleanv", "GetFloatv", "GetDoublev"]:
-			match_name = "Get"
-		else:
-			match_name = func_name
-
-		mode_set = 0
-		for enum_name in enum_dict:
-			e = enum_dict[ enum_name ]
-
-			if e.functions.has_key( match_name ):
-				[count, mode] = e.functions[ match_name ]
-
-				if mode_set and mode != self.mode:
-					raise RuntimeError("Not all enums for %s have the same mode." % (func_name))
-
-				self.mode = mode
-
-				if self.enums.has_key( e.value ):
-					if e.name not in self.enums[ e.value ]:
-						self.enums[ e.value ].append( e )
-				else:
-					if not self.count.has_key( count ):
-						self.count[ count ] = []
-
-					self.enums[ e.value ] = [ e ]
-					self.count[ count ].append( e.value )
-
-
-		return
-
-
-	def signature( self ):
-		if self.sig == None:
-			self.sig = ""
-			for i in self.count:
-				if i == None:
-					raise RuntimeError("i is None.  WTF?")
-
-				self.count[i].sort()
-				for e in self.count[i]:
-					self.sig += "%04x,%d," % (e, i)
-
-		return self.sig
-
-
-	def is_set( self ):
-		return self.mode
-
-
-	def PrintUsingTable(self):
-		"""Emit the body of the __gl*_size function using a pair
-		of look-up tables and a mask.  The mask is calculated such
-		that (e & mask) is unique for all the valid values of e for
-		this function.  The result of (e & mask) is used as an index
-		into the first look-up table.  If it matches e, then the
-		same entry of the second table is returned.  Otherwise zero
-		is returned.
-		
-		It seems like this should cause better code to be generated.
-		However, on x86 at least, the resulting .o file is about 20%
-		larger then the switch-statment version.  I am leaving this
-		code in because the results may be different on other
-		platforms (e.g., PowerPC or x86-64)."""
-
-		return 0
-		count = 0
-		for a in self.enums:
-			count += 1
-
-		if self.count.has_key(-1):
-			return 0
-
-		# Determine if there is some mask M, such that M = (2^N) - 1,
-		# that will generate unique values for all of the enums.
-
-		mask = 0
-		for i in [1, 2, 3, 4, 5, 6, 7, 8]:
-			mask = (1 << i) - 1
-
-			fail = 0;
-			for a in self.enums:
-				for b in self.enums:
-					if a != b:
-						if (a & mask) == (b & mask):
-							fail = 1;
-
-			if not fail:
-				break;
-			else:
-				mask = 0
-
-		if (mask != 0) and (mask < (2 * count)):
-			masked_enums = {}
-			masked_count = {}
-
-			for i in range(0, mask + 1):
-				masked_enums[i] = "0";
-				masked_count[i] = 0;
-
-			for c in self.count:
-				for e in self.count[c]:
-					i = e & mask
-					enum_obj = self.enums[e][0]
-					masked_enums[i] = '0x%04x /* %s */' % (e, enum_obj.name )
-					masked_count[i] = c
-
-
-			print '    static const GLushort a[%u] = {' % (mask + 1)
-			for e in masked_enums:
-				print '        %s, ' % (masked_enums[e])
-			print '    };'
-
-			print '    static const GLubyte b[%u] = {' % (mask + 1)
-			for c in masked_count:
-				print '        %u, ' % (masked_count[c])
-			print '    };'
-
-			print '    const unsigned idx = (e & 0x%02xU);' % (mask)
-			print ''
-			print '    return (e == a[idx]) ? (GLint) b[idx] : 0;'
-			return 1;
-		else:
-			return 0;
-
-
-	def PrintUsingSwitch(self, name):
-		"""Emit the body of the __gl*_size function using a 
-		switch-statement."""
-
-		print '    switch( e ) {'
-
-		for c in self.count:
-			for e in self.count[c]:
-				first = 1
-
-				# There may be multiple enums with the same
-				# value.  This happens has extensions are
-				# promoted from vendor-specific or EXT to
-				# ARB and to the core.  Emit the first one as
-				# a case label, and emit the others as
-				# commented-out case labels.
-
-				list = {}
-				for enum_obj in self.enums[e]:
-					list[ enum_obj.priority() ] = enum_obj.name
-
-				keys = list.keys()
-				keys.sort()
-				for k in keys:
-					j = list[k]
-					if first:
-						print '        case GL_%s:' % (j)
-						first = 0
-					else:
-						print '/*      case GL_%s:*/' % (j)
-					
-			if c == -1:
-				print '            return __gl%s_variable_size( e );' % (name)
-			else:
-				print '            return %u;' % (c)
-					
-		print '        default: return 0;'
-		print '    }'
-
-
-	def Print(self, name):
-		print 'INTERNAL PURE FASTCALL GLint'
-		print '__gl%s_size( GLenum e )' % (name)
-		print '{'
-
-		if not self.PrintUsingTable():
-			self.PrintUsingSwitch(name)
-
-		print '}'
-		print ''
-
-
-class glx_server_enum_function(glx_enum_function):
-	def __init__(self, func, enum_dict):
-		glx_enum_function.__init__(self, func.name, enum_dict)
-		
-		self.function = func
-		return
-
-
-	def signature( self ):
-		if self.sig == None:
-			sig = glx_enum_function.signature(self)
-
-			p = self.function.variable_length_parameter()
-			if p:
-				sig += "%u" % (p.size())
-
-			self.sig = sig
-
-		return self.sig;
-
-
-	def Print(self, name, printer):
-		f = self.function
-		printer.common_func_print_just_header( f )
-
-		fixup = []
-		
-		foo = {}
-		for param_name in f.count_parameter_list:
-			o = f.offset_of( param_name )
-			foo[o] = param_name
-
-		for param_name in f.counter_list:
-			o = f.offset_of( param_name )
-			foo[o] = param_name
-
-		keys = foo.keys()
-		keys.sort()
-		for o in keys:
-			p = f.parameters_by_name[ foo[o] ]
-
-			printer.common_emit_one_arg(p, "pc", 0)
-			fixup.append( p.name )
-
-
-		print '    GLsizei compsize;'
-		print ''
-
-		printer.common_emit_fixups(fixup)
-
-		print ''
-		print '    compsize = __gl%s_size(%s);' % (f.name, string.join(f.count_parameter_list, ","))
-		p = f.variable_length_parameter()
-		print '    return __GLX_PAD(%s);' % (p.size_string())
-
-		print '}'
-		print ''
-
-
-class PrintGlxSizeStubs_common(gl_XML.gl_print_base):
-	do_get = (1 << 0)
-	do_set = (1 << 1)
-
-	def __init__(self, which_functions):
-		gl_XML.gl_print_base.__init__(self)
-
-		self.name = "glX_proto_size.py (from Mesa)"
-		self.license = license.bsd_license_template % ( "(C) Copyright IBM Corporation 2004", "IBM")
-
-		self.emit_set = ((which_functions & PrintGlxSizeStubs_common.do_set) != 0)
-		self.emit_get = ((which_functions & PrintGlxSizeStubs_common.do_get) != 0)
-		return
-
-
-class PrintGlxSizeStubs_c(PrintGlxSizeStubs_common):
-	def printRealHeader(self):
-		print ''
-		print '#include <GL/gl.h>'
-		if self.emit_get:
-			print '#include "indirect_size_get.h"'
-			print '#include "glxserver.h"'
-			print '#include "indirect_util.h"'
-		
-		print '#include "indirect_size.h"'
-
-		print ''
-		self.printPure()
-		print ''
-		self.printFastcall()
-		print ''
-		self.printVisibility( "INTERNAL", "internal" )
-		print ''
-		print ''
-		print '#if defined(__CYGWIN__) || defined(__MINGW32__) || defined(__APPLE__)'
-		print '#  undef HAVE_ALIAS'
-		print '#endif'
-		print '#ifdef HAVE_ALIAS'
-		print '#  define ALIAS2(from,to) \\'
-		print '    INTERNAL PURE FASTCALL GLint __gl ## from ## _size( GLenum e ) \\'
-		print '        __attribute__ ((alias( # to )));'
-		print '#  define ALIAS(from,to) ALIAS2( from, __gl ## to ## _size )'
-		print '#else'
-		print '#  define ALIAS(from,to) \\'
-		print '    INTERNAL PURE FASTCALL GLint __gl ## from ## _size( GLenum e ) \\'
-		print '    { return __gl ## to ## _size( e ); }'
-		print '#endif'
-		print ''
-		print ''
-
-
-	def printBody(self, api):
-		enum_sigs = {}
-		aliases = []
-
-		for func in api.functionIterateGlx():
-			ef = glx_enum_function( func.name, api.enums_by_name )
-			if len(ef.enums) == 0:
-				continue
-
-			if (ef.is_set() and self.emit_set) or (not ef.is_set() and self.emit_get):
-				sig = ef.signature()
-				if enum_sigs.has_key( sig ):
-					aliases.append( [func.name, enum_sigs[ sig ]] )
-				else:
-					enum_sigs[ sig ] = func.name
-					ef.Print( func.name )
-
-
-		for [alias_name, real_name] in aliases:
-			print 'ALIAS( %s, %s )' % (alias_name, real_name)
-
-
-				
-class PrintGlxSizeStubs_h(PrintGlxSizeStubs_common):
-	def printRealHeader(self):
-		print """/**
- * \\file
- * Prototypes for functions used to determine the number of data elements in
- * various GLX protocol messages.
- *
- * \\author Ian Romanick <idr@us.ibm.com>
- */
-"""
-		self.printPure();
-		print ''
-		self.printFastcall();
-		print ''
-		self.printVisibility( "INTERNAL", "internal" );
-		print ''
-
-
-	def printBody(self, api):
-		for func in api.functionIterateGlx():
-			ef = glx_enum_function( func.name, api.enums_by_name )
-			if len(ef.enums) == 0:
-				continue
-
-			if (ef.is_set() and self.emit_set) or (not ef.is_set() and self.emit_get):
-				print 'extern INTERNAL PURE FASTCALL GLint __gl%s_size(GLenum);' % (func.name)
-
-
-class PrintGlxReqSize_common(gl_XML.gl_print_base):
-	"""Common base class for PrintGlxSizeReq_h and PrintGlxSizeReq_h.
-
-	The main purpose of this common base class is to provide the infrastructure
-	for the derrived classes to iterate over the same set of functions.
-	"""
-
-	def __init__(self):
-		gl_XML.gl_print_base.__init__(self)
-
-		self.name = "glX_proto_size.py (from Mesa)"
-		self.license = license.bsd_license_template % ( "(C) Copyright IBM Corporation 2005", "IBM")
-
-
-class PrintGlxReqSize_h(PrintGlxReqSize_common):
-	def __init__(self):
-		PrintGlxReqSize_common.__init__(self)
-		self.header_tag = "_INDIRECT_REQSIZE_H_"
-
-
-	def printRealHeader(self):
-		self.printVisibility("HIDDEN", "hidden")
-		print ''
-		self.printPure()
-		print ''
-
-
-	def printBody(self, api):
-		for func in api.functionIterateGlx():
-			if not func.ignore and func.has_variable_size_request():
-				print 'extern PURE HIDDEN int __glX%sReqSize(const GLbyte *pc, Bool swap);' % (func.name)
-
-
-class PrintGlxReqSize_c(PrintGlxReqSize_common):
-	"""Create the server-side 'request size' functions.
-
-	Create the server-side functions that are used to determine what the
-	size of a varible length command should be.  The server then uses
-	this value to determine if the incoming command packed it malformed.
-	"""
-
-	def __init__(self):
-		PrintGlxReqSize_common.__init__(self)
-		self.counter_sigs = {}
-
-
-	def printRealHeader(self):
-		print ''
-		print '#include <GL/gl.h>'
-		print '#include "glxserver.h"'
-		print '#include "glxbyteorder.h"'
-		print '#include "indirect_size.h"'
-		print '#include "indirect_reqsize.h"'
-		print ''
-		print '#define __GLX_PAD(x)  (((x) + 3) & ~3)'
-		print ''
-		print '#if defined(__CYGWIN__) || defined(__MINGW32__)'
-		print '#  undef HAVE_ALIAS'
-		print '#endif'
-		print '#ifdef HAVE_ALIAS'
-		print '#  define ALIAS2(from,to) \\'
-		print '    GLint __glX ## from ## ReqSize( const GLbyte * pc, Bool swap ) \\'
-		print '        __attribute__ ((alias( # to )));'
-		print '#  define ALIAS(from,to) ALIAS2( from, __glX ## to ## ReqSize )'
-		print '#else'
-		print '#  define ALIAS(from,to) \\'
-		print '    GLint __glX ## from ## ReqSize( const GLbyte * pc, Bool swap ) \\'
-		print '    { return __glX ## to ## ReqSize( pc, swap ); }'
-		print '#endif'
-		print ''
-		print ''
-
-
-	def printBody(self, api):
-		aliases = []
-		enum_functions = {}
-		enum_sigs = {}
-
-		for func in api.functionIterateGlx():
-			if not func.has_variable_size_request(): continue
-
-			ef = glx_server_enum_function( func, api.enums_by_name )
-			if len(ef.enums) == 0: continue
-
-			sig = ef.signature()
-
-			if not enum_functions.has_key(func.name):
-				enum_functions[ func.name ] = sig
-
-			if not enum_sigs.has_key( sig ):
-				enum_sigs[ sig ] = ef
-			
-
-
-		for func in api.functionIterateGlx():
-			# Even though server-handcode fuctions are on "the
-			# list", and prototypes are generated for them, there
-			# isn't enough information to generate a size
-			# function.  If there was enough information, they
-			# probably wouldn't need to be handcoded in the first
-			# place!
-
-			if func.server_handcode: continue
-			if not func.has_variable_size_request(): continue
-
-			if enum_functions.has_key(func.name):
-				sig = enum_functions[func.name]
-				ef = enum_sigs[ sig ]
-
-				if ef.name != func.name:
-					aliases.append( [func.name, ef.name] )
-				else:
-					ef.Print( func.name, self )
-
-			elif func.images:
-				self.printPixelFunction(func)
-			elif func.has_variable_size_request():
-				a = self.printCountedFunction(func)
-				if a: aliases.append(a)
-
-
-		for [alias_name, real_name] in aliases:
-			print 'ALIAS( %s, %s )' % (alias_name, real_name)
-
-		return
-
-
-	def common_emit_fixups(self, fixup):
-		"""Utility function to emit conditional byte-swaps."""
-
-		if fixup:
-			print '    if (swap) {'
-			for name in fixup:
-				print '        %s = bswap_32(%s);' % (name, name)
-			print '    }'
-
-		return
-
-
-	def common_emit_one_arg(self, p, pc, adjust):
-		offset = p.offset
-		dst = p.string()
-		src = '(%s *)' % (p.type_string())
-		print '%-18s = *%11s(%s + %u);' % (dst, src, pc, offset + adjust);
-		return
-
-
-	def common_func_print_just_header(self, f):
-		print 'int'
-		print '__glX%sReqSize( const GLbyte * pc, Bool swap )' % (f.name)
-		print '{'
-
-
-	def printPixelFunction(self, f):
-		self.common_func_print_just_header(f)
-		
-		f.offset_of( f.parameters[0].name )
-		[dim, w, h, d, junk] = f.get_images()[0].get_dimensions()
-
-		print '    GLint row_length   = *  (GLint *)(pc +  4);'
-
-		if dim < 3:
-			fixup = ['row_length', 'skip_rows', 'alignment']
-			print '    GLint image_height = 0;'
-			print '    GLint skip_images  = 0;'
-			print '    GLint skip_rows    = *  (GLint *)(pc +  8);'
-			print '    GLint alignment    = *  (GLint *)(pc + 16);'
-		else:
-			fixup = ['row_length', 'image_height', 'skip_rows', 'skip_images', 'alignment']
-			print '    GLint image_height = *  (GLint *)(pc +  8);'
-			print '    GLint skip_rows    = *  (GLint *)(pc + 16);'
-			print '    GLint skip_images  = *  (GLint *)(pc + 20);'
-			print '    GLint alignment    = *  (GLint *)(pc + 32);'
-
-		img = f.images[0]
-		for p in f.parameterIterateGlxSend():
-			if p.name in [w, h, d, img.img_format, img.img_type, img.img_target]:
-				self.common_emit_one_arg(p, "pc", 0)
-				fixup.append( p.name )
-
-		print ''
-
-		self.common_emit_fixups(fixup)
-
-		if img.img_null_flag:
-			print ''
-			print '	   if (*(CARD32 *) (pc + %s))' % (img.offset - 4)
-			print '	       return 0;'
-
-		print ''
-		print '    return __glXImageSize(%s, %s, %s, %s, %s, %s,' % (img.img_format, img.img_type, img.img_target, w, h, d )
-		print '                          image_height, row_length, skip_images,'
-		print '                          skip_rows, alignment);'
-		print '}'
-		print ''
-		return
-
-
-	def printCountedFunction(self, f):
-
-		sig = ""
-		offset = 0
-		fixup = []
-		params = []
-		plus = ''
-		size = ''
-		param_offsets = {}
-
-		# Calculate the offset of each counter parameter and the
-		# size string for the variable length parameter(s).  While
-		# that is being done, calculate a unique signature for this
-		# function.
-
-		for p in f.parameterIterateGlxSend():
-			if p.is_counter:
-				fixup.append( p.name )
-				params.append( p )
-			elif p.counter:
-				s = p.size()
-				if s == 0: s = 1
-
-				sig += "(%u,%u)" % (f.offset_of(p.counter), s)
-				size += '%s%s' % (plus, p.size_string())
-				plus = ' + '
-
-
-		# If the calculated signature matches a function that has
-		# already be emitted, don't emit this function.  Instead, add
-		# it to the list of function aliases.
-
-		if self.counter_sigs.has_key(sig):
-			n = self.counter_sigs[sig];
-			alias = [f.name, n]
-		else:
-			alias = None
-			self.counter_sigs[sig] = f.name
-
-			self.common_func_print_just_header(f)
-
-			for p in params:
-				self.common_emit_one_arg(p, "pc", 0)
-
-
-			print ''
-			self.common_emit_fixups(fixup)
-			print ''
-
-			print '    return __GLX_PAD(%s);' % (size)
-			print '}'
-			print ''
-
-		return alias
-
-
-def show_usage():
-	print "Usage: %s [-f input_file_name] -m output_mode [--only-get | --only-set] [--get-alias-set]" % sys.argv[0]
-	print "    -m output_mode   Output mode can be one of 'size_c' or 'size_h'."
-	print "    --only-get       Only emit 'get'-type functions."
-	print "    --only-set       Only emit 'set'-type functions."
-	print ""
-	print "By default, both 'get' and 'set'-type functions are emitted."
-	sys.exit(1)
-
-
-if __name__ == '__main__':
-	file_name = "gl_API.xml"
-
-	try:
-		(args, trail) = getopt.getopt(sys.argv[1:], "f:m:h:", ["only-get", "only-set", "header-tag"])
-	except Exception,e:
-		show_usage()
-
-	mode = None
-	header_tag = None
-	which_functions = PrintGlxSizeStubs_common.do_get | PrintGlxSizeStubs_common.do_set
-
-	for (arg,val) in args:
-		if arg == "-f":
-			file_name = val
-		elif arg == "-m":
-			mode = val
-		elif arg == "--only-get":
-			which_functions = PrintGlxSizeStubs_common.do_get
-		elif arg == "--only-set":
-			which_functions = PrintGlxSizeStubs_common.do_set
-		elif (arg == '-h') or (arg == "--header-tag"):
-			header_tag = val
-
-	if mode == "size_c":
-		printer = PrintGlxSizeStubs_c( which_functions )
-	elif mode == "size_h":
-		printer = PrintGlxSizeStubs_h( which_functions )
-		if header_tag:
-			printer.header_tag = header_tag
-	elif mode == "reqsize_c":
-		printer = PrintGlxReqSize_c()
-	elif mode == "reqsize_h":
-		printer = PrintGlxReqSize_h()
-	else:
-		show_usage()
-
-	api = gl_XML.parse_GL_API( file_name, glX_XML.glx_item_factory() )
-
-
-	printer.Print( api )
diff --git a/src/mesa/glapi/glX_server_table.py b/src/mesa/glapi/glX_server_table.py
deleted file mode 100644
index f3962f875b..0000000000
--- a/src/mesa/glapi/glX_server_table.py
+++ /dev/null
@@ -1,411 +0,0 @@
-#!/bin/env python
-
-# (C) Copyright IBM Corporation 2005, 2006
-# All Rights Reserved.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# on the rights to use, copy, modify, merge, publish, distribute, sub
-# license, and/or sell copies of the Software, and to permit persons to whom
-# the Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
-# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-#
-# Authors:
-#    Ian Romanick <idr@us.ibm.com>
-
-import gl_XML, glX_XML, glX_proto_common, license
-import sys, getopt
-
-
-def log2(value):
-	for i in range(0, 30):
-		p = 1 << i
-		if p >= value:
-			return i
-
-	return -1
-
-
-def round_down_to_power_of_two(n):
-	"""Returns the nearest power-of-two less than or equal to n."""
-
-	for i in range(30, 0, -1):
-		p = 1 << i
-		if p <= n:
-			return p
-
-	return -1
-
-
-class function_table:
-	def __init__(self, name, do_size_check):
-		self.name_base = name
-		self.do_size_check = do_size_check
-
-
-		self.max_bits = 1
-		self.next_opcode_threshold = (1 << self.max_bits)
-		self.max_opcode = 0
-
-		self.functions = {}
-		self.lookup_table = []
-		
-		# Minimum number of opcodes in a leaf node.
-		self.min_op_bits = 3
-		self.min_op_count = (1 << self.min_op_bits)
-		return
-
-
-	def append(self, opcode, func):
-		self.functions[opcode] = func
-
-		if opcode > self.max_opcode:
-			self.max_opcode = opcode
-
-			if opcode > self.next_opcode_threshold:
-				bits = log2(opcode)
-				if (1 << bits) <= opcode:
-					bits += 1
-
-				self.max_bits = bits
-				self.next_opcode_threshold = 1 << bits
-		return
-
-
-	def divide_group(self, min_opcode, total):
-		"""Divide the group starting min_opcode into subgroups.
-		Returns a tuple containing the number of bits consumed by
-		the node, the list of the children's tuple, and the number
-		of entries in the final array used by this node and its
-		children, and the depth of the subtree rooted at the node."""
-
-		remaining_bits = self.max_bits - total
-		next_opcode = min_opcode + (1 << remaining_bits)
-		empty_children = 0
-		
-		for M in range(0, remaining_bits):
-			op_count = 1 << (remaining_bits - M);
-			child_count = 1 << M;
-
-			empty_children = 0
-			full_children = 0
-			for i in range(min_opcode, next_opcode, op_count):
-				used = 0
-				empty = 0
-
-				for j in range(i, i + op_count):
-					if self.functions.has_key(j):
-						used += 1;
-					else:
-						empty += 1;
-						
-
-				if empty == op_count:
-					empty_children += 1
-
-				if used == op_count:
-					full_children += 1
-
-			if (empty_children > 0) or (full_children == child_count) or (op_count <= self.min_op_count):
-				break
-
-
-		# If all the remaining bits are used by this node, as is the
-		# case when M is 0 or remaining_bits, the node is a leaf.
-
-		if (M == 0) or (M == remaining_bits):
-			return [remaining_bits, [], 0, 0]
-		else:
-			children = []
-			count = 1
-			depth = 1
-			all_children_are_nonempty_leaf_nodes = 1
-			for i in range(min_opcode, next_opcode, op_count):
-				n = self.divide_group(i, total + M)
-
-				if not (n[1] == [] and not self.is_empty_leaf(i, n[0])):
-					all_children_are_nonempty_leaf_nodes = 0
-
-				children.append(n)
-				count += n[2] + 1
-				
-				if n[3] >= depth:
-					depth = n[3] + 1
-
-			# If all of the child nodes are non-empty leaf nodes, pull
-			# them up and make this node a leaf.
-
-			if all_children_are_nonempty_leaf_nodes:
-				return [remaining_bits, [], 0, 0]
-			else:
-				return [M, children, count, depth]
-
-
-	def is_empty_leaf(self, base_opcode, M):
-		for op in range(base_opcode, base_opcode + (1 << M)):
-			if self.functions.has_key(op):
-				return 0
-				break
-
-		return 1
-
-
-	def dump_tree(self, node, base_opcode, remaining_bits, base_entry, depth):
-		M = node[0]
-		children = node[1]
-		child_M = remaining_bits - M
-
-
-		# This actually an error condition.
-		if children == []:
-			return
-
-		print '    /* [%u] -> opcode range [%u, %u], node depth %u */' % (base_entry, base_opcode, base_opcode + (1 << remaining_bits), depth)
-		print '    %u,' % (M)
-
-		base_entry += (1 << M) + 1
-
-		child_index = base_entry
-		child_base_opcode = base_opcode
-		for child in children:
-			if child[1] == []:
-				if self.is_empty_leaf(child_base_opcode, child_M):
-					print '    EMPTY_LEAF,'
-				else:
-					# Emit the index of the next dispatch
-					# function.  Then add all the
-					# dispatch functions for this leaf
-					# node to the dispatch function
-					# lookup table.
-
-					print '    LEAF(%u),' % (len(self.lookup_table))
-
-					for op in range(child_base_opcode, child_base_opcode + (1 << child_M)):
-						if self.functions.has_key(op):
-							func = self.functions[op]
-							size = func.command_fixed_length()
-
-							if func.glx_rop != 0:
-								size += 4
-
-							size = ((size + 3) & ~3)
-
-							if func.has_variable_size_request():
-								size_name = "__glX%sReqSize" % (func.name)
-							else:
-								size_name = ""
-
-							if func.glx_vendorpriv == op:
-								func_name = func.glx_vendorpriv_names[0]
-							else:
-								func_name = func.name
-
-							temp = [op, "__glXDisp_%s" % (func_name), "__glXDispSwap_%s" % (func_name), size, size_name]
-						else:
-							temp = [op, "NULL", "NULL", 0, ""]
-
-						self.lookup_table.append(temp)
-			else:
-				print '    %u,' % (child_index)
-				child_index += child[2]
-
-			child_base_opcode += 1 << child_M
-
-		print ''
-
-		child_index = base_entry
-		for child in children:
-			if child[1] != []:
-				self.dump_tree(child, base_opcode, remaining_bits - M, child_index, depth + 1)
-				child_index += child[2]
-
-			base_opcode += 1 << (remaining_bits - M)
-
-
-	def Print(self):
-		# Each dispatch table consists of two data structures.
-		#
-		# The first structure is an N-way tree where the opcode for
-		# the function is the key.  Each node switches on a range of
-		# bits from the opcode.  M bits are extracted from the opcde
-		# and are used as an index to select one of the N, where
-		# N = 2^M, children.
-		#
-		# The tree is stored as a flat array.  The first value is the
-		# number of bits, M, used by the node.  For inner nodes, the
-		# following 2^M values are indexes into the array for the
-		# child nodes.  For leaf nodes, the followign 2^M values are
-		# indexes into the second data structure.
-		#
-		# If an inner node's child index is 0, the child is an empty
-		# leaf node.  That is, none of the opcodes selectable from
-		# that child exist.  Since most of the possible opcode space
-		# is unused, this allows compact data storage.
-		#
-		# The second data structure is an array of pairs of function
-		# pointers.  Each function contains a pointer to a protocol
-		# decode function and a pointer to a byte-swapped protocol
-		# decode function.  Elements in this array are selected by the
-		# leaf nodes of the first data structure.
-		#
-		# As the tree is traversed, an accumulator is kept.  This
-		# accumulator counts the bits of the opcode consumed by the
-		# traversal.  When accumulator + M = B, where B is the
-		# maximum number of bits in an opcode, the traversal has
-		# reached a leaf node.  The traversal starts with the most
-		# significant bits and works down to the least significant
-		# bits.
-		#
-		# Creation of the tree is the most complicated part.  At
-		# each node the elements are divided into groups of 2^M
-		# elements.  The value of M selected is the smallest possible
-		# value where all of the groups are either empty or full, or
-		# the groups are a preset minimum size.  If all the children
-		# of a node are non-empty leaf nodes, the children are merged
-		# to create a single leaf node that replaces the parent.
-
-		tree = self.divide_group(0, 0)
-
-		print '/*****************************************************************/'
-		print '/* tree depth = %u */' % (tree[3])
-		print 'static const int_fast16_t %s_dispatch_tree[%u] = {' % (self.name_base, tree[2])
-		self.dump_tree(tree, 0, self.max_bits, 0, 1)
-		print '};\n'
-		
-		# After dumping the tree, dump the function lookup table.
-		
-		print 'static const void *%s_function_table[%u][2] = {' % (self.name_base, len(self.lookup_table))
-		index = 0
-		for func in self.lookup_table:
-			opcode = func[0]
-			name = func[1]
-			name_swap = func[2]
-			
-			print '    /* [% 3u] = %5u */ {%s, %s},' % (index, opcode, name, name_swap)
-			
-			index += 1
-
-		print '};\n'
-		
-		if self.do_size_check:
-			var_table = []
-
-			print 'static const int_fast16_t %s_size_table[%u][2] = {' % (self.name_base, len(self.lookup_table))
-			index = 0
-			var_table = []
-			for func in self.lookup_table:
-				opcode = func[0]
-				fixed = func[3]
-				var = func[4]
-				
-				if var != "":
-					var_offset = "%2u" % (len(var_table))
-					var_table.append(var)
-				else:
-					var_offset = "~0"
-
-				print '    /* [%3u] = %5u */ {%3u, %s},' % (index, opcode, fixed, var_offset)
-				index += 1
-
-				
-			print '};\n'
-
-
-			print 'static const gl_proto_size_func %s_size_func_table[%u] = {' % (self.name_base, len(var_table))
-			for func in var_table:
-				print '   %s,' % (func)
- 
-			print '};\n'
-
-
-		print 'const struct __glXDispatchInfo %s_dispatch_info = {' % (self.name_base)
-		print '    %u,' % (self.max_bits)
-		print '    %s_dispatch_tree,' % (self.name_base)
-		print '    %s_function_table,' % (self.name_base)
-		if self.do_size_check:
-			print '    %s_size_table,' % (self.name_base)
-			print '    %s_size_func_table' % (self.name_base)
-		else:
-			print '    NULL,'
-			print '    NULL'
-		print '};\n'
-		return
-
-
-class PrintGlxDispatchTables(glX_proto_common.glx_print_proto):
-	def __init__(self):
-		gl_XML.gl_print_base.__init__(self)
-		self.name = "glX_server_table.py (from Mesa)"
-		self.license = license.bsd_license_template % ( "(C) Copyright IBM Corporation 2005, 2006", "IBM")
-
-		self.rop_functions = function_table("Render", 1)
-		self.sop_functions = function_table("Single", 0)
-		self.vop_functions = function_table("VendorPriv", 0)
-		return
-
-
-	def printRealHeader(self):
-		print '#include <inttypes.h>'
-		print '#include "glxserver.h"'
-		print '#include "glxext.h"'
-		print '#include "indirect_dispatch.h"'
-		print '#include "indirect_reqsize.h"'
-		print '#include "g_disptab.h"'
-		print '#include "indirect_table.h"'
-		print ''
-		return
-
-
-	def printBody(self, api):
-		for f in api.functionIterateAll():
-			if not f.ignore and f.vectorequiv == None:
-				if f.glx_rop != 0:
-					self.rop_functions.append(f.glx_rop, f)
-				if f.glx_sop != 0:
-					self.sop_functions.append(f.glx_sop, f)
-				if f.glx_vendorpriv != 0:
-					self.vop_functions.append(f.glx_vendorpriv, f)
-
-		self.sop_functions.Print()
-		self.rop_functions.Print()
-		self.vop_functions.Print()
-		return
-
-
-if __name__ == '__main__':
-	file_name = "gl_API.xml"
-
-	try:
-		(args, trail) = getopt.getopt(sys.argv[1:], "f:m")
-	except Exception,e:
-		show_usage()
-
-	mode = "table_c"
-	for (arg,val) in args:
-		if arg == "-f":
-			file_name = val
-		elif arg == "-m":
-			mode = val
-
-	if mode == "table_c":
-		printer = PrintGlxDispatchTables()
-	else:
-		show_usage()
-
-
-	api = gl_XML.parse_GL_API( file_name, glX_XML.glx_item_factory() )
-
-
-	printer.Print( api )
diff --git a/src/mesa/glapi/gl_API.dtd b/src/mesa/glapi/gl_API.dtd
deleted file mode 100644
index 30c646c924..0000000000
--- a/src/mesa/glapi/gl_API.dtd
+++ /dev/null
@@ -1,140 +0,0 @@
-<!ELEMENT OpenGLAPI (category?, xi:include?, OpenGLAPI?)+>
-<!ELEMENT category (type*, enum*, function*)*>
-<!ELEMENT type EMPTY>
-<!ELEMENT enum (size*)>
-<!ELEMENT size EMPTY>
-<!ELEMENT function (param*, return?, glx?)*>
-<!ELEMENT param EMPTY>
-<!ELEMENT return EMPTY>
-<!ELEMENT glx EMPTY>
-
-<!ELEMENT xi:include (xi:fallback)?>
-<!ATTLIST xi:include
-          xmlns:xi  CDATA #FIXED "http://www.w3.org/2001/XInclude"
-          href       CDATA #REQUIRED
-          parse      (xml|text) "xml"
-          encoding   CDATA #IMPLIED>
-<!ELEMENT xi:fallback ANY>
-<!ATTLIST xi:fallback
-          xmlns:xi   CDATA #FIXED "http://www.w3.org/2001/XInclude">
-
-
-<!ATTLIST category name                NMTOKEN #REQUIRED
-                   number              NMTOKEN #IMPLIED
-		   window_system       NMTOKEN #IMPLIED>
-<!ATTLIST type     name                NMTOKEN #REQUIRED
-                   size                NMTOKEN #REQUIRED
-		   float               (true | false) "false"
-		   unsigned            (true | false) "false"
-                   glx_name            NMTOKEN #IMPLIED>
-<!ATTLIST enum     name                NMTOKEN #REQUIRED
-                   count               CDATA   #IMPLIED
-                   value               NMTOKEN #REQUIRED>
-<!ATTLIST function name                NMTOKEN #REQUIRED
-                   alias               NMTOKEN #IMPLIED
-                   offset              CDATA   #IMPLIED
-                   static_dispatch     (true | false) "true"
-                   vectorequiv         NMTOKEN #IMPLIED>
-<!ATTLIST size     name                NMTOKEN #REQUIRED
-                   count               NMTOKEN #IMPLIED
-                   mode                (get | set) "set">
-<!ATTLIST param    name                NMTOKEN #REQUIRED
-                   type                CDATA   #REQUIRED
-		   client_only	       (true | false) "false"
-                   count               NMTOKEN #IMPLIED
-                   counter             (true | false) "false"
-                   count_scale         NMTOKEN "1"
-                   output              (true | false) "false"
-                   padding             (true | false) "false"
-                   img_width           NMTOKEN #IMPLIED
-                   img_height          NMTOKEN #IMPLIED
-                   img_depth           NMTOKEN #IMPLIED
-                   img_extent          NMTOKEN #IMPLIED
-                   img_xoff            NMTOKEN #IMPLIED
-                   img_yoff            NMTOKEN #IMPLIED
-                   img_zoff            NMTOKEN #IMPLIED
-                   img_woff            NMTOKEN #IMPLIED
-                   img_format          NMTOKEN #IMPLIED
-                   img_type            NMTOKEN #IMPLIED
-                   img_target          NMTOKEN #IMPLIED
-                   img_send_null       (true | false) "false"
-                   img_null_flag       (true | false) "false"
-                   img_pad_dimensions  (true | false) "false"
-                   variable_param      NMTOKENS #IMPLIED>
-<!ATTLIST return   type                CDATA   "void">
-<!ATTLIST glx      rop                 NMTOKEN #IMPLIED
-                   sop                 NMTOKEN #IMPLIED
-                   vendorpriv          NMTOKEN #IMPLIED
-                   large               (true | false) "false"
-                   doubles_in_order    (true | false) "false"
-                   always_array        (true | false) "false"
-                   handcode            (true | false | client | server) "false"
-                   img_reset           NMTOKEN #IMPLIED
-                   dimensions_in_reply (true | false) "false"
-                   ignore              (true | false) "false">
-
-<!--
-The various attributes for param and glx have the meanings listed below.
-When adding new functions, please annote them correctly.  In most cases this
-will just mean adding a '<glx ignore="true"/>' tag.
-
-param:
-     name - name of the parameter
-     type - fully qualified type (e.g., with "const", etc.)
-     client_only - boolean flag set on parameters which are interpreted only
-         by the client and are not present in the protocol encoding (e.g.,
-	 the stride parameters to Map1f, etc.)
-     count - for counted arrays (e.g., the 'lists' parameter to glCallLists),
-         the parameter or literal that represents the count.  For functions
-         like glVertex3fv it will be a litteral, for others it will be one of
-         the parameters.
-     counter - this parameter is a counter that will be referenced by the
-         'count' attribute in another parameter.
-     count_scale - literal value scale factor for the 'count' attribute.
-         See ProgramParameters4dvNV for an example.
-     output - this parameter is used to store the output of the function.
-     variable_param - name of parameter used to determine the number of
-         elements referenced by this parameter.  This should be the name of a
-         single enum parameter.  Most of the gl*Parameter[if]v functions use
-         this.  Additionally, the enums that can be passed should be properly
-         annotated.
-     img_width / img_height / img_depth / img_extent - name of parameters
-         (or hardcoded integer) used for the dimensions of pixel data.
-     img_xoff / img_yoff / img_zoff / img_woff - name of parameters used
-         for x, y, z, and w offsets of pixel data.
-     img_format - name of parameter used as the pixel data format.
-     img_type - name of parameter used as the pixel data type.
-     img_target - name of parameter used as a texture target.  Non-texture
-        pixel data should hardcode 0.
-     img_send_null - boolean flag to determine if blank pixel data should
-        be sent when a NULL pointer is passed.  This is only used by
-        TexImage1D and TexImage2D.
-     img_null_flag - boolean flag to determine if an extra flag is used to
-        determine if a NULL pixel pointer was passed.  This is used by
-        TexSubImage1D, TexSubImage2D, TexImage3D and others.
-     img_pad_dimensions - boolean flag to determine if dimension data and
-        offset data should be padded to the next even number of dimensions.
-        For example, this will insert an empty "height" field after the
-        "width" field in the protocol for TexImage1D.
-
-glx:
-     rop - Opcode value for "render" commands
-     sop - Opcode value for "single" commands
-     vendorpriv - Opcode value for vendor private (or vendor private with
-         reply) commands
-     large - set to "true" of the render command can use RenderLarge protocol.
-     doubles_in_order - older commands always put GLdouble data at the
-         start of the render packet.  Newer commands (e.g., 
-         ProgramEnvParameter4dvARB) put the in the order that they appear
-         in the parameter list.
-     always_array - some single commands take reply data as an array or as
-         return value data (e.g., glGetLightfv).  Other single commands take
-         reply data only as an array (e.g., glGetClipPlane).
-     handcode - some functions are just too complicated to generate 
-         (e.g., glSeperableFilter2D) or operate only on client-side data
-         (e.g., glVertexPointer) and must be handcoded.
-     ignore - some functions have an entry in the dispatch table, but aren't
-         suitable for protocol implementation (e.g., glLockArraysEXT).  This
-         also applies to functions that don't have any GLX protocol specified
-         (e.g., glGetFogFuncSGIS).
--->
diff --git a/src/mesa/glapi/gl_API.xml b/src/mesa/glapi/gl_API.xml
deleted file mode 100644
index fbf8b0c3e4..0000000000
--- a/src/mesa/glapi/gl_API.xml
+++ /dev/null
@@ -1,12505 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
-
-<OpenGLAPI>
-
-<!-- Core versions sorted by version number. -->
-
-<category name="1.0">
-    <enum name="FALSE"                                    value="0x0"/>
-    <enum name="TRUE"                                     value="0x1"/>
-    <enum name="ZERO"                                     value="0x0"/>
-    <enum name="ONE"                                      value="0x1"/>
-    <enum name="NONE"                                     value="0x0"/>
-    <enum name="NO_ERROR"                                 value="0x0"/>
-    <enum name="POINTS"                                   value="0x0000"/>
-    <enum name="LINES"                                    value="0x0001"/>
-    <enum name="LINE_LOOP"                                value="0x0002"/>
-    <enum name="LINE_STRIP"                               value="0x0003"/>
-    <enum name="TRIANGLES"                                value="0x0004"/>
-    <enum name="TRIANGLE_STRIP"                           value="0x0005"/>
-    <enum name="TRIANGLE_FAN"                             value="0x0006"/>
-    <enum name="QUADS"                                    value="0x0007"/>
-    <enum name="QUAD_STRIP"                               value="0x0008"/>
-    <enum name="POLYGON"                                  value="0x0009"/>
-    <enum name="ACCUM"                                    value="0x0100"/>
-    <enum name="LOAD"                                     value="0x0101"/>
-    <enum name="RETURN"                                   value="0x0102"/>
-    <enum name="MULT"                                     value="0x0103"/>
-    <enum name="ADD"                                      value="0x0104"/>
-    <enum name="NEVER"                                    value="0x0200"/>
-    <enum name="LESS"                                     value="0x0201"/>
-    <enum name="EQUAL"                                    value="0x0202"/>
-    <enum name="LEQUAL"                                   value="0x0203"/>
-    <enum name="GREATER"                                  value="0x0204"/>
-    <enum name="NOTEQUAL"                                 value="0x0205"/>
-    <enum name="GEQUAL"                                   value="0x0206"/>
-    <enum name="ALWAYS"                                   value="0x0207"/>
-    <enum name="SRC_COLOR"                                value="0x0300"/>
-    <enum name="ONE_MINUS_SRC_COLOR"                      value="0x0301"/>
-    <enum name="SRC_ALPHA"                                value="0x0302"/>
-    <enum name="ONE_MINUS_SRC_ALPHA"                      value="0x0303"/>
-    <enum name="DST_ALPHA"                                value="0x0304"/>
-    <enum name="ONE_MINUS_DST_ALPHA"                      value="0x0305"/>
-    <enum name="DST_COLOR"                                value="0x0306"/>
-    <enum name="ONE_MINUS_DST_COLOR"                      value="0x0307"/>
-    <enum name="SRC_ALPHA_SATURATE"                       value="0x0308"/>
-    <enum name="FRONT_LEFT"                               value="0x0400"/>
-    <enum name="FRONT_RIGHT"                              value="0x0401"/>
-    <enum name="BACK_LEFT"                                value="0x0402"/>
-    <enum name="BACK_RIGHT"                               value="0x0403"/>
-    <enum name="FRONT"                                    value="0x0404"/>
-    <enum name="BACK"                                     value="0x0405"/>
-    <enum name="LEFT"                                     value="0x0406"/>
-    <enum name="RIGHT"                                    value="0x0407"/>
-    <enum name="FRONT_AND_BACK"                           value="0x0408"/>
-    <enum name="AUX0"                                     value="0x0409"/>
-    <enum name="AUX1"                                     value="0x040A"/>
-    <enum name="AUX2"                                     value="0x040B"/>
-    <enum name="AUX3"                                     value="0x040C"/>
-    <enum name="INVALID_VALUE"                            value="0x0501"/>
-    <enum name="INVALID_ENUM"                             value="0x0500"/>
-    <enum name="INVALID_OPERATION"                        value="0x0502"/>
-    <enum name="STACK_OVERFLOW"                           value="0x0503"/>
-    <enum name="STACK_UNDERFLOW"                          value="0x0504"/>
-    <enum name="OUT_OF_MEMORY"                            value="0x0505"/>
-    <enum name="2D"                                       value="0x0600"/>
-    <enum name="3D"                                       value="0x0601"/>
-    <enum name="3D_COLOR"                                 value="0x0602"/>
-    <enum name="3D_COLOR_TEXTURE"                         value="0x0603"/>
-    <enum name="4D_COLOR_TEXTURE"                         value="0x0604"/>
-    <enum name="PASS_THROUGH_TOKEN"                       value="0x0700"/>
-    <enum name="POINT_TOKEN"                              value="0x0701"/>
-    <enum name="LINE_TOKEN"                               value="0x0702"/>
-    <enum name="POLYGON_TOKEN"                            value="0x0703"/>
-    <enum name="BITMAP_TOKEN"                             value="0x0704"/>
-    <enum name="DRAW_PIXEL_TOKEN"                         value="0x0705"/>
-    <enum name="COPY_PIXEL_TOKEN"                         value="0x0706"/>
-    <enum name="LINE_RESET_TOKEN"                         value="0x0707"/>
-    <enum name="EXP"                                      value="0x0800"/>
-    <enum name="EXP2"                                     value="0x0801"/>
-    <enum name="CW"                                       value="0x0900"/>
-    <enum name="CCW"                                      value="0x0901"/>
-    <enum name="COEFF"                                    value="0x0A00"/>
-    <enum name="ORDER"                                    value="0x0A01"/>
-    <enum name="DOMAIN"                                   value="0x0A02"/>
-    <enum name="CURRENT_COLOR"                 count="4"  value="0x0B00">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="CURRENT_INDEX"                 count="1"  value="0x0B01">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="CURRENT_NORMAL"                count="3"  value="0x0B02">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="CURRENT_TEXTURE_COORDS"        count="4"  value="0x0B03">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="CURRENT_RASTER_COLOR"          count="4"  value="0x0B04">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="CURRENT_RASTER_INDEX"          count="1"  value="0x0B05">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="CURRENT_RASTER_TEXTURE_COORDS" count="4"  value="0x0B06">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="CURRENT_RASTER_POSITION"       count="4"  value="0x0B07">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="CURRENT_RASTER_POSITION_VALID" count="1"  value="0x0B08">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="CURRENT_RASTER_DISTANCE"       count="1"  value="0x0B09">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POINT_SMOOTH"                  count="1"  value="0x0B10">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POINT_SIZE"                    count="1"  value="0x0B11">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POINT_SIZE_RANGE"              count="2"  value="0x0B12">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POINT_SIZE_GRANULARITY"        count="1"  value="0x0B13">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="LINE_SMOOTH"                   count="1"  value="0x0B20">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="LINE_WIDTH"                    count="1"  value="0x0B21">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="LINE_WIDTH_RANGE"              count="2"  value="0x0B22">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="LINE_WIDTH_GRANULARITY"        count="1"  value="0x0B23">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="LINE_STIPPLE"                  count="1"  value="0x0B24">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="LINE_STIPPLE_PATTERN"          count="1"  value="0x0B25">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="LINE_STIPPLE_REPEAT"           count="1"  value="0x0B26">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="LIST_MODE"                     count="1"  value="0x0B30">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAX_LIST_NESTING"              count="1"  value="0x0B31">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="LIST_BASE"                     count="1"  value="0x0B32">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="LIST_INDEX"                    count="1"  value="0x0B33">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POLYGON_MODE"                  count="2"  value="0x0B40">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POLYGON_SMOOTH"                count="1"  value="0x0B41">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POLYGON_STIPPLE"               count="1"  value="0x0B42">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="EDGE_FLAG"                     count="1"  value="0x0B43">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="CULL_FACE"                     count="1"  value="0x0B44">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="CULL_FACE_MODE"                count="1"  value="0x0B45">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="FRONT_FACE"                    count="1"  value="0x0B46">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="LIGHTING"                      count="1"  value="0x0B50">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="LIGHT_MODEL_LOCAL_VIEWER"      count="1"  value="0x0B51">
-        <size name="LightModelfv"/>
-        <size name="LightModeliv"/>
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="LIGHT_MODEL_TWO_SIDE"          count="1"  value="0x0B52">
-        <size name="LightModelfv"/>
-        <size name="LightModeliv"/>
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="LIGHT_MODEL_AMBIENT"           count="4"  value="0x0B53">
-        <size name="LightModelfv"/>
-        <size name="LightModeliv"/>
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="SHADE_MODEL"                   count="1"  value="0x0B54">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="COLOR_MATERIAL_FACE"           count="1"  value="0x0B55">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="COLOR_MATERIAL_PARAMETER"      count="1"  value="0x0B56">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="COLOR_MATERIAL"                count="1"  value="0x0B57">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="FOG"                           count="1"  value="0x0B60">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="FOG_INDEX"                     count="1"  value="0x0B61">
-        <size name="Fogfv"/>
-        <size name="Fogiv"/>
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="FOG_DENSITY"                   count="1"  value="0x0B62">
-        <size name="Fogfv"/>
-        <size name="Fogiv"/>
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="FOG_START"                     count="1"  value="0x0B63">
-        <size name="Fogfv"/>
-        <size name="Fogiv"/>
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="FOG_END"                       count="1"  value="0x0B64">
-        <size name="Fogfv"/>
-        <size name="Fogiv"/>
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="FOG_MODE"                      count="1"  value="0x0B65">
-        <size name="Fogfv"/>
-        <size name="Fogiv"/>
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="FOG_COLOR"                     count="4"  value="0x0B66">
-        <size name="Fogfv"/>
-        <size name="Fogiv"/>
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DEPTH_RANGE"                   count="2"  value="0x0B70">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DEPTH_TEST"                    count="1"  value="0x0B71">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DEPTH_WRITEMASK"               count="1"  value="0x0B72">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DEPTH_CLEAR_VALUE"             count="1"  value="0x0B73">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DEPTH_FUNC"                    count="1"  value="0x0B74">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="ACCUM_CLEAR_VALUE"             count="4"  value="0x0B80">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="STENCIL_TEST"                  count="1"  value="0x0B90">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="STENCIL_CLEAR_VALUE"           count="1"  value="0x0B91">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="STENCIL_FUNC"                  count="1"  value="0x0B92">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="STENCIL_VALUE_MASK"            count="1"  value="0x0B93">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="STENCIL_FAIL"                  count="1"  value="0x0B94">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="STENCIL_PASS_DEPTH_FAIL"       count="1"  value="0x0B95">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="STENCIL_PASS_DEPTH_PASS"       count="1"  value="0x0B96">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="STENCIL_REF"                   count="1"  value="0x0B97">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="STENCIL_WRITEMASK"             count="1"  value="0x0B98">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MATRIX_MODE"                   count="1"  value="0x0BA0">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="NORMALIZE"                     count="1"  value="0x0BA1">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="VIEWPORT"                      count="4"  value="0x0BA2">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW_STACK_DEPTH"         count="1"  value="0x0BA3">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="PROJECTION_STACK_DEPTH"        count="1"  value="0x0BA4">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_STACK_DEPTH"           count="1"  value="0x0BA5">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW_MATRIX"              count="16" value="0x0BA6">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="PROJECTION_MATRIX"             count="16" value="0x0BA7">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_MATRIX"                count="16" value="0x0BA8">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="ATTRIB_STACK_DEPTH"            count="1"  value="0x0BB0">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="CLIENT_ATTRIB_STACK_DEPTH"     count="1"  value="0x0BB1">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="ALPHA_TEST"                    count="1"  value="0x0BC0">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="ALPHA_TEST_FUNC"               count="1"  value="0x0BC1">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="ALPHA_TEST_REF"                count="1"  value="0x0BC2">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DITHER"                        count="1"  value="0x0BD0">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="BLEND_DST"                     count="1"  value="0x0BE0">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="BLEND_SRC"                     count="1"  value="0x0BE1">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="BLEND"                         count="1"  value="0x0BE2">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="LOGIC_OP_MODE"                 count="1"  value="0x0BF0">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="LOGIC_OP"                      count="1"  value="0x0BF1">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="AUX_BUFFERS"                   count="1"  value="0x0C00">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_BUFFER"                   count="1"  value="0x0C01">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="READ_BUFFER"                   count="1"  value="0x0C02">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="SCISSOR_BOX"                   count="4"  value="0x0C10">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="SCISSOR_TEST"                  count="1"  value="0x0C11">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="INDEX_CLEAR_VALUE"             count="1"  value="0x0C20">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="INDEX_WRITEMASK"               count="1"  value="0x0C21">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="COLOR_CLEAR_VALUE"             count="4"  value="0x0C22">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="COLOR_WRITEMASK"               count="4"  value="0x0C23">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="INDEX_MODE"                    count="1"  value="0x0C30">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="RGBA_MODE"                     count="1"  value="0x0C31">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DOUBLEBUFFER"                  count="1"  value="0x0C32">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="STEREO"                        count="1"  value="0x0C33">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="RENDER_MODE"                   count="1"  value="0x0C40">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="PERSPECTIVE_CORRECTION_HINT"   count="1"  value="0x0C50">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POINT_SMOOTH_HINT"             count="1"  value="0x0C51">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="LINE_SMOOTH_HINT"              count="1"  value="0x0C52">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POLYGON_SMOOTH_HINT"           count="1"  value="0x0C53">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="FOG_HINT"                      count="1"  value="0x0C54">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_GEN_S"                 count="1"  value="0x0C60">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_GEN_T"                 count="1"  value="0x0C61">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_GEN_R"                 count="1"  value="0x0C62">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_GEN_Q"                 count="1"  value="0x0C63">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="PIXEL_MAP_I_TO_I"              count="1"  value="0x0C70">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="PIXEL_MAP_S_TO_S"                         value="0x0C71"/>
-    <enum name="PIXEL_MAP_I_TO_R"                         value="0x0C72"/>
-    <enum name="PIXEL_MAP_I_TO_G"                         value="0x0C73"/>
-    <enum name="PIXEL_MAP_I_TO_B"                         value="0x0C74"/>
-    <enum name="PIXEL_MAP_I_TO_A"                         value="0x0C75"/>
-    <enum name="PIXEL_MAP_R_TO_R"                         value="0x0C76"/>
-    <enum name="PIXEL_MAP_G_TO_G"                         value="0x0C77"/>
-    <enum name="PIXEL_MAP_B_TO_B"                         value="0x0C78"/>
-    <enum name="PIXEL_MAP_A_TO_A"                         value="0x0C79"/>
-    <enum name="PIXEL_MAP_I_TO_I_SIZE"         count="1"  value="0x0CB0">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="PIXEL_MAP_S_TO_S_SIZE"         count="1"  value="0x0CB1">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="PIXEL_MAP_I_TO_R_SIZE"         count="1"  value="0x0CB2">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="PIXEL_MAP_I_TO_G_SIZE"         count="1"  value="0x0CB3">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="PIXEL_MAP_I_TO_B_SIZE"         count="1"  value="0x0CB4">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="PIXEL_MAP_I_TO_A_SIZE"         count="1"  value="0x0CB5">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="PIXEL_MAP_R_TO_R_SIZE"         count="1"  value="0x0CB6">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="PIXEL_MAP_G_TO_G_SIZE"         count="1"  value="0x0CB7">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="PIXEL_MAP_B_TO_B_SIZE"         count="1"  value="0x0CB8">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="PIXEL_MAP_A_TO_A_SIZE"         count="1"  value="0x0CB9">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="UNPACK_SWAP_BYTES"             count="1"  value="0x0CF0">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="UNPACK_LSB_FIRST"              count="1"  value="0x0CF1">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="UNPACK_ROW_LENGTH"             count="1"  value="0x0CF2">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="UNPACK_SKIP_PIXELS"            count="1"  value="0x0CF4">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="UNPACK_SKIP_ROWS"              count="1"  value="0x0CF3">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="UNPACK_ALIGNMENT"              count="1"  value="0x0CF5">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="PACK_SWAP_BYTES"               count="1"  value="0x0D00">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="PACK_LSB_FIRST"                count="1"  value="0x0D01">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="PACK_ROW_LENGTH"               count="1"  value="0x0D02">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="PACK_SKIP_ROWS"                count="1"  value="0x0D03">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="PACK_SKIP_PIXELS"              count="1"  value="0x0D04">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="PACK_ALIGNMENT"                count="1"  value="0x0D05">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAP_COLOR"                     count="1"  value="0x0D10">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAP_STENCIL"                   count="1"  value="0x0D11">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="INDEX_SHIFT"                   count="1"  value="0x0D12">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="INDEX_OFFSET"                  count="1"  value="0x0D13">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="RED_SCALE"                     count="1"  value="0x0D14">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="RED_BIAS"                      count="1"  value="0x0D15">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="ZOOM_X"                        count="1"  value="0x0D16">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="ZOOM_Y"                        count="1"  value="0x0D17">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="GREEN_SCALE"                   count="1"  value="0x0D18">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="GREEN_BIAS"                    count="1"  value="0x0D19">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="BLUE_SCALE"                    count="1"  value="0x0D1A">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="BLUE_BIAS"                     count="1"  value="0x0D1B">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="ALPHA_SCALE"                   count="1"  value="0x0D1C">
-        <size name="TexEnvfv"/>
-        <size name="TexEnviv"/>
-        <size name="GetTexEnvfv" mode="get"/>
-        <size name="GetTexEnviv" mode="get"/>
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="ALPHA_BIAS"                    count="1"  value="0x0D1D">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DEPTH_SCALE"                   count="1"  value="0x0D1E">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DEPTH_BIAS"                    count="1"  value="0x0D1F">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAX_EVAL_ORDER"                count="1"  value="0x0D30">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAX_LIGHTS"                    count="1"  value="0x0D31">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAX_CLIP_PLANES"               count="1"  value="0x0D32">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAX_TEXTURE_SIZE"              count="1"  value="0x0D33">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAX_PIXEL_MAP_TABLE"           count="1"  value="0x0D34">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAX_ATTRIB_STACK_DEPTH"        count="1"  value="0x0D35">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAX_MODELVIEW_STACK_DEPTH"     count="1"  value="0x0D36">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAX_NAME_STACK_DEPTH"          count="1"  value="0x0D37">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAX_PROJECTION_STACK_DEPTH"    count="1"  value="0x0D38">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAX_TEXTURE_STACK_DEPTH"       count="1"  value="0x0D39">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAX_VIEWPORT_DIMS"             count="2"  value="0x0D3A">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAX_CLIENT_ATTRIB_STACK_DEPTH" count="1"  value="0x0D3B">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="SUBPIXEL_BITS"                 count="1"  value="0x0D50">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="INDEX_BITS"                    count="1"  value="0x0D51">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="RED_BITS"                      count="1"  value="0x0D52">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="GREEN_BITS"                    count="1"  value="0x0D53">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="BLUE_BITS"                     count="1"  value="0x0D54">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="ALPHA_BITS"                    count="1"  value="0x0D55">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DEPTH_BITS"                    count="1"  value="0x0D56">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="STENCIL_BITS"                  count="1"  value="0x0D57">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="ACCUM_RED_BITS"                count="1"  value="0x0D58">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="ACCUM_GREEN_BITS"              count="1"  value="0x0D59">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="ACCUM_BLUE_BITS"               count="1"  value="0x0D5A">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="ACCUM_ALPHA_BITS"              count="1"  value="0x0D5B">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="NAME_STACK_DEPTH"              count="1"  value="0x0D70">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="AUTO_NORMAL"                   count="1"  value="0x0D80">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAP1_COLOR_4"                  count="4"  value="0x0D90">
-        <size name="Map1d"/>
-        <size name="Map1f"/>
-        <size name="Get" count="1" mode="get"/>
-    </enum>
-    <enum name="MAP1_INDEX"                    count="1"  value="0x0D91">
-        <size name="Map1d"/>
-        <size name="Map1f"/>
-        <size name="Get" count="1" mode="get"/>
-    </enum>
-    <enum name="MAP1_NORMAL"                   count="3"  value="0x0D92">
-        <size name="Map1d"/>
-        <size name="Map1f"/>
-        <size name="Get" count="1" mode="get"/>
-    </enum>
-    <enum name="MAP1_TEXTURE_COORD_1"          count="1"  value="0x0D93">
-        <size name="Map1d"/>
-        <size name="Map1f"/>
-        <size name="Get" count="1" mode="get"/>
-    </enum>
-    <enum name="MAP1_TEXTURE_COORD_2"          count="2"  value="0x0D94">
-        <size name="Map1d"/>
-        <size name="Map1f"/>
-        <size name="Get" count="1" mode="get"/>
-    </enum>
-    <enum name="MAP1_TEXTURE_COORD_3"          count="3"  value="0x0D95">
-        <size name="Map1d"/>
-        <size name="Map1f"/>
-        <size name="Get" count="1" mode="get"/>
-    </enum>
-    <enum name="MAP1_TEXTURE_COORD_4"          count="4"  value="0x0D96">
-        <size name="Map1d"/>
-        <size name="Map1f"/>
-        <size name="Get" count="1" mode="get"/>
-    </enum>
-    <enum name="MAP1_VERTEX_3"                 count="3"  value="0x0D97">
-        <size name="Map1d"/>
-        <size name="Map1f"/>
-        <size name="Get" count="1" mode="get"/>
-    </enum>
-    <enum name="MAP1_VERTEX_4"                 count="4"  value="0x0D98">
-        <size name="Map1d"/>
-        <size name="Map1f"/>
-        <size name="Get" count="1" mode="get"/>
-    </enum>
-    <enum name="MAP2_COLOR_4"                  count="4"  value="0x0DB0">
-        <size name="Map2d"/>
-        <size name="Map2f"/>
-        <size name="Get" count="1" mode="get"/>
-    </enum>
-    <enum name="MAP2_INDEX"                    count="1"  value="0x0DB1">
-        <size name="Map2d"/>
-        <size name="Map2f"/>
-        <size name="Get" count="1" mode="get"/>
-    </enum>
-    <enum name="MAP2_NORMAL"                   count="3"  value="0x0DB2">
-        <size name="Map2d"/>
-        <size name="Map2f"/>
-        <size name="Get" count="1" mode="get"/>
-    </enum>
-    <enum name="MAP2_TEXTURE_COORD_1"          count="1"  value="0x0DB3">
-        <size name="Map2d"/>
-        <size name="Map2f"/>
-        <size name="Get" count="1" mode="get"/>
-    </enum>
-    <enum name="MAP2_TEXTURE_COORD_2"          count="2"  value="0x0DB4">
-        <size name="Map2d"/>
-        <size name="Map2f"/>
-        <size name="Get" count="1" mode="get"/>
-    </enum>
-    <enum name="MAP2_TEXTURE_COORD_3"          count="3"  value="0x0DB5">
-        <size name="Map2d"/>
-        <size name="Map2f"/>
-        <size name="Get" count="1" mode="get"/>
-    </enum>
-    <enum name="MAP2_TEXTURE_COORD_4"          count="4"  value="0x0DB6">
-        <size name="Map2d"/>
-        <size name="Map2f"/>
-        <size name="Get" count="1" mode="get"/>
-    </enum>
-    <enum name="MAP2_VERTEX_3"                 count="3"  value="0x0DB7">
-        <size name="Map2d"/>
-        <size name="Map2f"/>
-        <size name="Get" count="1" mode="get"/>
-    </enum>
-    <enum name="MAP2_VERTEX_4"                 count="4"  value="0x0DB8">
-        <size name="Map2d"/>
-        <size name="Map2f"/>
-        <size name="Get" count="1" mode="get"/>
-    </enum>
-    <enum name="MAP1_GRID_DOMAIN"              count="2"  value="0x0DD0">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAP1_GRID_SEGMENTS"            count="1"  value="0x0DD1">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAP2_GRID_DOMAIN"              count="4"  value="0x0DD2">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAP2_GRID_SEGMENTS"            count="2"  value="0x0DD3">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_1D"                    count="1"  value="0x0DE0">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_2D"                    count="1"  value="0x0DE1">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="FEEDBACK_BUFFER_POINTER"                  value="0x0DF0"/>
-    <enum name="FEEDBACK_BUFFER_SIZE"                     value="0x0DF1"/>
-    <enum name="FEEDBACK_BUFFER_TYPE"                     value="0x0DF2"/>
-    <enum name="SELECTION_BUFFER_POINTER"                 value="0x0DF3"/>
-    <enum name="SELECTION_BUFFER_SIZE"                    value="0x0DF4"/>
-    <enum name="TEXTURE_WIDTH"                 count="1"  value="0x1000">
-        <size name="GetTexLevelParameterfv" mode="get"/>
-        <size name="GetTexLevelParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_HEIGHT"                count="1"  value="0x1001">
-        <size name="GetTexLevelParameterfv" mode="get"/>
-        <size name="GetTexLevelParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_BORDER"                count="1"  value="0x1005">
-        <size name="GetTexLevelParameterfv" mode="get"/>
-        <size name="GetTexLevelParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_COMPONENTS"            count="1"  value="0x1003">
-        <size name="GetTexLevelParameterfv" mode="get"/>
-        <size name="GetTexLevelParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_BORDER_COLOR"          count="4"  value="0x1004">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-    <enum name="DONT_CARE"                                value="0x1100"/>
-    <enum name="FASTEST"                                  value="0x1101"/>
-    <enum name="NICEST"                                   value="0x1102"/>
-    <enum name="AMBIENT"                       count="4"  value="0x1200">
-        <size name="Materialfv"/>
-        <size name="Materialiv"/>
-        <size name="Lightfv"/>
-        <size name="Lightiv"/>
-        <size name="GetMaterialfv" mode="get"/>
-        <size name="GetMaterialiv" mode="get"/>
-        <size name="GetLightfv" mode="get"/>
-        <size name="GetLightiv" mode="get"/>
-    </enum>
-    <enum name="DIFFUSE"                       count="4"  value="0x1201">
-        <size name="Materialfv"/>
-        <size name="Materialiv"/>
-        <size name="Lightfv"/>
-        <size name="Lightiv"/>
-        <size name="GetMaterialfv" mode="get"/>
-        <size name="GetMaterialiv" mode="get"/>
-        <size name="GetLightfv" mode="get"/>
-        <size name="GetLightiv" mode="get"/>
-    </enum>
-    <enum name="SPECULAR"                      count="4"  value="0x1202">
-        <size name="Materialfv"/>
-        <size name="Materialiv"/>
-        <size name="Lightfv"/>
-        <size name="Lightiv"/>
-        <size name="GetMaterialfv" mode="get"/>
-        <size name="GetMaterialiv" mode="get"/>
-        <size name="GetLightfv" mode="get"/>
-        <size name="GetLightiv" mode="get"/>
-    </enum>
-    <enum name="POSITION"                      count="4"  value="0x1203">
-        <size name="Lightfv"/>
-        <size name="Lightiv"/>
-        <size name="GetLightfv" mode="get"/>
-        <size name="GetLightiv" mode="get"/>
-    </enum>
-    <enum name="SPOT_DIRECTION"                count="3"  value="0x1204">
-        <size name="Lightfv"/>
-        <size name="Lightiv"/>
-        <size name="GetLightfv" mode="get"/>
-        <size name="GetLightiv" mode="get"/>
-    </enum>
-    <enum name="SPOT_EXPONENT"                 count="1"  value="0x1205">
-        <size name="Lightfv"/>
-        <size name="Lightiv"/>
-        <size name="GetLightfv" mode="get"/>
-        <size name="GetLightiv" mode="get"/>
-    </enum>
-    <enum name="SPOT_CUTOFF"                   count="1"  value="0x1206">
-        <size name="Lightfv"/>
-        <size name="Lightiv"/>
-        <size name="GetLightfv" mode="get"/>
-        <size name="GetLightiv" mode="get"/>
-    </enum>
-    <enum name="CONSTANT_ATTENUATION"          count="1"  value="0x1207">
-        <size name="Lightfv"/>
-        <size name="Lightiv"/>
-        <size name="GetLightfv" mode="get"/>
-        <size name="GetLightiv" mode="get"/>
-    </enum>
-    <enum name="LINEAR_ATTENUATION"            count="1"  value="0x1208">
-        <size name="Lightfv"/>
-        <size name="Lightiv"/>
-        <size name="GetLightfv" mode="get"/>
-        <size name="GetLightiv" mode="get"/>
-    </enum>
-    <enum name="QUADRATIC_ATTENUATION"         count="1"  value="0x1209">
-        <size name="Lightfv"/>
-        <size name="Lightiv"/>
-        <size name="GetLightfv" mode="get"/>
-        <size name="GetLightiv" mode="get"/>
-    </enum>
-    <enum name="COMPILE"                                  value="0x1300"/>
-    <enum name="COMPILE_AND_EXECUTE"                      value="0x1301"/>
-    <enum name="BYTE"                          count="1"  value="0x1400">
-        <size name="CallLists"/>
-    </enum>
-    <enum name="UNSIGNED_BYTE"                 count="1"  value="0x1401">
-        <size name="CallLists"/>
-    </enum>
-    <enum name="SHORT"                         count="2"  value="0x1402">
-        <size name="CallLists"/>
-    </enum>
-    <enum name="UNSIGNED_SHORT"                count="2"  value="0x1403">
-        <size name="CallLists"/>
-    </enum>
-    <enum name="INT"                           count="4"  value="0x1404">
-        <size name="CallLists"/>
-    </enum>
-    <enum name="UNSIGNED_INT"                  count="4"  value="0x1405">
-        <size name="CallLists"/>
-    </enum>
-    <enum name="FLOAT"                         count="4"  value="0x1406">
-        <size name="CallLists"/>
-    </enum>
-    <enum name="2_BYTES"                       count="2"  value="0x1407">
-        <size name="CallLists"/>
-    </enum>
-    <enum name="3_BYTES"                       count="3"  value="0x1408">
-        <size name="CallLists"/>
-    </enum>
-    <enum name="4_BYTES"                       count="4"  value="0x1409">
-        <size name="CallLists"/>
-    </enum>
-    <enum name="HALF_FLOAT"                    count="2"  value="0x140B">
-        <size name="CallLists"/>
-    </enum>
-    <enum name="CLEAR"                                    value="0x1500"/>
-    <enum name="AND"                                      value="0x1501"/>
-    <enum name="AND_REVERSE"                              value="0x1502"/>
-    <enum name="COPY"                                     value="0x1503"/>
-    <enum name="AND_INVERTED"                             value="0x1504"/>
-    <enum name="NOOP"                                     value="0x1505"/>
-    <enum name="XOR"                                      value="0x1506"/>
-    <enum name="OR"                                       value="0x1507"/>
-    <enum name="NOR"                                      value="0x1508"/>
-    <enum name="EQUIV"                                    value="0x1509"/>
-    <enum name="INVERT"                                   value="0x150A"/>
-    <enum name="OR_REVERSE"                               value="0x150B"/>
-    <enum name="COPY_INVERTED"                            value="0x150C"/>
-    <enum name="OR_INVERTED"                              value="0x150D"/>
-    <enum name="NAND"                                     value="0x150E"/>
-    <enum name="SET"                                      value="0x150F"/>
-    <enum name="EMISSION"                      count="4"  value="0x1600">
-        <size name="Materialfv"/>
-        <size name="Materialiv"/>
-        <size name="GetMaterialfv" mode="get"/>
-        <size name="GetMaterialiv" mode="get"/>
-    </enum>
-    <enum name="SHININESS"                     count="1"  value="0x1601">
-        <size name="Materialfv"/>
-        <size name="Materialiv"/>
-        <size name="GetMaterialfv" mode="get"/>
-        <size name="GetMaterialiv" mode="get"/>
-    </enum>
-    <enum name="AMBIENT_AND_DIFFUSE"           count="4"  value="0x1602">
-        <size name="Materialfv"/>
-        <size name="Materialiv"/>
-        <size name="GetMaterialfv" mode="get"/>
-        <size name="GetMaterialiv" mode="get"/>
-    </enum>
-    <enum name="COLOR_INDEXES"                 count="3"  value="0x1603">
-        <size name="Materialfv"/>
-        <size name="Materialiv"/>
-        <size name="GetMaterialfv" mode="get"/>
-        <size name="GetMaterialiv" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW"                                value="0x1700"/>
-    <enum name="PROJECTION"                               value="0x1701"/>
-    <enum name="TEXTURE"                                  value="0x1702"/>
-    <enum name="COLOR"                                    value="0x1800"/>
-    <enum name="DEPTH"                                    value="0x1801"/>
-    <enum name="STENCIL"                                  value="0x1802"/>
-    <enum name="COLOR_INDEX"                              value="0x1900"/>
-    <enum name="STENCIL_INDEX"                            value="0x1901"/>
-    <enum name="DEPTH_COMPONENT"                          value="0x1902"/>
-    <enum name="RED"                                      value="0x1903"/>
-    <enum name="GREEN"                                    value="0x1904"/>
-    <enum name="BLUE"                                     value="0x1905"/>
-    <enum name="ALPHA"                                    value="0x1906"/>
-    <enum name="RGBA"                                     value="0x1908"/>
-    <enum name="RGB"                                      value="0x1907"/>
-    <enum name="LUMINANCE"                                value="0x1909"/>
-    <enum name="LUMINANCE_ALPHA"                          value="0x190A"/>
-    <enum name="BITMAP"                                   value="0x1A00"/>
-    <enum name="POINT"                                    value="0x1B00"/>
-    <enum name="LINE"                                     value="0x1B01"/>
-    <enum name="FILL"                                     value="0x1B02"/>
-    <enum name="FEEDBACK"                                 value="0x1C01"/>
-    <enum name="RENDER"                                   value="0x1C00"/>
-    <enum name="SELECT"                                   value="0x1C02"/>
-    <enum name="FLAT"                                     value="0x1D00"/>
-    <enum name="SMOOTH"                                   value="0x1D01"/>
-    <enum name="KEEP"                                     value="0x1E00"/>
-    <enum name="REPLACE"                                  value="0x1E01"/>
-    <enum name="INCR"                                     value="0x1E02"/>
-    <enum name="DECR"                                     value="0x1E03"/>
-    <enum name="VENDOR"                                   value="0x1F00"/>
-    <enum name="RENDERER"                                 value="0x1F01"/>
-    <enum name="VERSION"                                  value="0x1F02"/>
-    <enum name="EXTENSIONS"                               value="0x1F03"/>
-    <enum name="S"                                        value="0x2000"/>
-    <enum name="T"                                        value="0x2001"/>
-    <enum name="R"                                        value="0x2002"/>
-    <enum name="Q"                                        value="0x2003"/>
-    <enum name="MODULATE"                                 value="0x2100"/>
-    <enum name="DECAL"                                    value="0x2101"/>
-    <enum name="TEXTURE_ENV_MODE"              count="1"  value="0x2200">
-        <size name="TexEnvfv"/>
-        <size name="TexEnviv"/>
-        <size name="GetTexEnvfv" mode="get"/>
-        <size name="GetTexEnviv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_ENV_COLOR"             count="4"  value="0x2201">
-        <size name="TexEnvfv"/>
-        <size name="TexEnviv"/>
-        <size name="GetTexEnvfv" mode="get"/>
-        <size name="GetTexEnviv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_ENV"                              value="0x2300"/>
-    <enum name="EYE_LINEAR"                               value="0x2400"/>
-    <enum name="OBJECT_LINEAR"                            value="0x2401"/>
-    <enum name="SPHERE_MAP"                               value="0x2402"/>
-    <enum name="TEXTURE_GEN_MODE"              count="1"  value="0x2500">
-        <size name="TexGendv"/>
-        <size name="TexGenfv"/>
-        <size name="TexGeniv"/>
-        <size name="GetTexGendv" mode="get"/>
-        <size name="GetTexGenfv" mode="get"/>
-        <size name="GetTexGeniv" mode="get"/>
-    </enum>
-    <enum name="OBJECT_PLANE"                  count="4"  value="0x2501">
-        <size name="TexGendv"/>
-        <size name="TexGenfv"/>
-        <size name="TexGeniv"/>
-        <size name="GetTexGendv" mode="get"/>
-        <size name="GetTexGenfv" mode="get"/>
-        <size name="GetTexGeniv" mode="get"/>
-    </enum>
-    <enum name="EYE_PLANE"                     count="4"  value="0x2502">
-        <size name="TexGendv"/>
-        <size name="TexGenfv"/>
-        <size name="TexGeniv"/>
-        <size name="GetTexGendv" mode="get"/>
-        <size name="GetTexGenfv" mode="get"/>
-        <size name="GetTexGeniv" mode="get"/>
-    </enum>
-    <enum name="NEAREST"                                  value="0x2600"/>
-    <enum name="LINEAR"                                   value="0x2601"/>
-    <enum name="NEAREST_MIPMAP_NEAREST"                   value="0x2700"/>
-    <enum name="LINEAR_MIPMAP_NEAREST"                    value="0x2701"/>
-    <enum name="NEAREST_MIPMAP_LINEAR"                    value="0x2702"/>
-    <enum name="LINEAR_MIPMAP_LINEAR"                     value="0x2703"/>
-    <enum name="TEXTURE_MAG_FILTER"            count="1"  value="0x2800">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_MIN_FILTER"            count="1"  value="0x2801">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_WRAP_S"                count="1"  value="0x2802">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_WRAP_T"                count="1"  value="0x2803">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-    <enum name="CLAMP"                                    value="0x2900"/>
-    <enum name="REPEAT"                                   value="0x2901"/>
-    <enum name="CLIP_PLANE0"                   count="1"  value="0x3000">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="CLIP_PLANE1"                   count="1"  value="0x3001">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="CLIP_PLANE2"                   count="1"  value="0x3002">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="CLIP_PLANE3"                   count="1"  value="0x3003">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="CLIP_PLANE4"                   count="1"  value="0x3004">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="CLIP_PLANE5"                   count="1"  value="0x3005">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="LIGHT0"                        count="1"  value="0x4000">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="LIGHT1"                        count="1"  value="0x4001">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="LIGHT2"                        count="1"  value="0x4002">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="LIGHT3"                        count="1"  value="0x4003">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="LIGHT4"                        count="1"  value="0x4004">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="LIGHT5"                        count="1"  value="0x4005">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="LIGHT6"                        count="1"  value="0x4006">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="LIGHT7"                        count="1"  value="0x4007">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="CURRENT_BIT"                              value="0x00000001"/>
-    <enum name="POINT_BIT"                                value="0x00000002"/>
-    <enum name="LINE_BIT"                                 value="0x00000004"/>
-    <enum name="POLYGON_BIT"                              value="0x00000008"/>
-    <enum name="POLYGON_STIPPLE_BIT"                      value="0x00000010"/>
-    <enum name="PIXEL_MODE_BIT"                           value="0x00000020"/>
-    <enum name="LIGHTING_BIT"                             value="0x00000040"/>
-    <enum name="FOG_BIT"                                  value="0x00000080"/>
-    <enum name="DEPTH_BUFFER_BIT"                         value="0x00000100"/>
-    <enum name="ACCUM_BUFFER_BIT"                         value="0x00000200"/>
-    <enum name="STENCIL_BUFFER_BIT"                       value="0x00000400"/>
-    <enum name="VIEWPORT_BIT"                             value="0x00000800"/>
-    <enum name="TRANSFORM_BIT"                            value="0x00001000"/>
-    <enum name="ENABLE_BIT"                               value="0x00002000"/>
-    <enum name="COLOR_BUFFER_BIT"                         value="0x00004000"/>
-    <enum name="HINT_BIT"                                 value="0x00008000"/>
-    <enum name="EVAL_BIT"                                 value="0x00010000"/>
-    <enum name="LIST_BIT"                                 value="0x00020000"/>
-    <enum name="TEXTURE_BIT"                              value="0x00040000"/>
-    <enum name="SCISSOR_BIT"                              value="0x00080000"/>
-    <enum name="ALL_ATTRIB_BITS"                          value="0x000FFFFF"/>
-
-    <type name="double"  size="8"  float="true"    glx_name="FLOAT64"/>
-    <type name="clampd"  size="8"  float="true"    glx_name="FLOAT64"/>
-
-    <type name="float"   size="4"  float="true"    glx_name="FLOAT32"/>
-    <type name="clampf"  size="4"  float="true"    glx_name="FLOAT32"/>
-
-    <type name="int"     size="4"                  glx_name="CARD32"/>
-    <type name="uint"    size="4"  unsigned="true" glx_name="CARD32"/>
-    <type name="sizei"   size="4"  unsigned="true" glx_name="CARD32"/>
-    <type name="enum"    size="4"  unsigned="true" glx_name="ENUM"/>
-    <type name="bitfield" size="4" unsigned="true" glx_name="CARD32"/>
-
-    <type name="short"   size="2"                  glx_name="CARD16"/>
-    <type name="ushort"  size="2"  unsigned="true" glx_name="CARD16"/>
-
-    <type name="byte"    size="1"                  glx_name="CARD8"/>
-    <type name="ubyte"   size="1"  unsigned="true" glx_name="CARD8"/>
-    <type name="boolean" size="1"  unsigned="true" glx_name="CARD8"/>
-    
-    <type name="void"    size="1"/>
-
-    <function name="NewList" offset="0">
-        <param name="list" type="GLuint"/>
-        <param name="mode" type="GLenum"/>
-        <glx sop="101"/>
-    </function>
-
-    <function name="EndList" offset="1">
-        <glx sop="102"/>
-    </function>
-
-    <function name="CallList" offset="2">
-        <param name="list" type="GLuint"/>
-        <glx rop="1"/>
-    </function>
-
-    <function name="CallLists" offset="3">
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="type" type="GLenum"/>
-        <param name="lists" type="const GLvoid *" variable_param="type" count="n"/>
-        <glx rop="2" large="true"/>
-    </function>
-
-    <function name="DeleteLists" offset="4">
-        <param name="list" type="GLuint"/>
-        <param name="range" type="GLsizei"/>
-        <glx sop="103"/>
-    </function>
-
-    <function name="GenLists" offset="5">
-        <param name="range" type="GLsizei"/>
-        <return type="GLuint"/>
-        <glx sop="104"/>
-    </function>
-
-    <function name="ListBase" offset="6">
-        <param name="base" type="GLuint"/>
-        <glx rop="3"/>
-    </function>
-
-    <function name="Begin" offset="7">
-        <param name="mode" type="GLenum"/>
-        <glx rop="4"/>
-    </function>
-
-    <function name="Bitmap" offset="8">
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-        <param name="xorig" type="GLfloat"/>
-        <param name="yorig" type="GLfloat"/>
-        <param name="xmove" type="GLfloat"/>
-        <param name="ymove" type="GLfloat"/>
-        <param name="bitmap" type="const GLubyte *" img_width="width" img_height="height" img_format="GL_COLOR_INDEX" img_type="GL_BITMAP" img_target="0" img_pad_dimensions="false"/>
-        <glx rop="5" large="true"/>
-    </function>
-
-    <function name="Color3b" offset="9" vectorequiv="Color3bv">
-        <param name="red" type="GLbyte"/>
-        <param name="green" type="GLbyte"/>
-        <param name="blue" type="GLbyte"/>
-    </function>
-
-    <function name="Color3bv" offset="10">
-        <param name="v" type="const GLbyte *" count="3"/>
-        <glx rop="6"/>
-    </function>
-
-    <function name="Color3d" offset="11" vectorequiv="Color3dv">
-        <param name="red" type="GLdouble"/>
-        <param name="green" type="GLdouble"/>
-        <param name="blue" type="GLdouble"/>
-    </function>
-
-    <function name="Color3dv" offset="12">
-        <param name="v" type="const GLdouble *" count="3"/>
-        <glx rop="7"/>
-    </function>
-
-    <function name="Color3f" offset="13" vectorequiv="Color3fv">
-        <param name="red" type="GLfloat"/>
-        <param name="green" type="GLfloat"/>
-        <param name="blue" type="GLfloat"/>
-    </function>
-
-    <function name="Color3fv" offset="14">
-        <param name="v" type="const GLfloat *" count="3"/>
-        <glx rop="8"/>
-    </function>
-
-    <function name="Color3i" offset="15" vectorequiv="Color3iv">
-        <param name="red" type="GLint"/>
-        <param name="green" type="GLint"/>
-        <param name="blue" type="GLint"/>
-    </function>
-
-    <function name="Color3iv" offset="16">
-        <param name="v" type="const GLint *" count="3"/>
-        <glx rop="9"/>
-    </function>
-
-    <function name="Color3s" offset="17" vectorequiv="Color3sv">
-        <param name="red" type="GLshort"/>
-        <param name="green" type="GLshort"/>
-        <param name="blue" type="GLshort"/>
-    </function>
-
-    <function name="Color3sv" offset="18">
-        <param name="v" type="const GLshort *" count="3"/>
-        <glx rop="10"/>
-    </function>
-
-    <function name="Color3ub" offset="19" vectorequiv="Color3ubv">
-        <param name="red" type="GLubyte"/>
-        <param name="green" type="GLubyte"/>
-        <param name="blue" type="GLubyte"/>
-    </function>
-
-    <function name="Color3ubv" offset="20">
-        <param name="v" type="const GLubyte *" count="3"/>
-        <glx rop="11"/>
-    </function>
-
-    <function name="Color3ui" offset="21" vectorequiv="Color3uiv">
-        <param name="red" type="GLuint"/>
-        <param name="green" type="GLuint"/>
-        <param name="blue" type="GLuint"/>
-    </function>
-
-    <function name="Color3uiv" offset="22">
-        <param name="v" type="const GLuint *" count="3"/>
-        <glx rop="12"/>
-    </function>
-
-    <function name="Color3us" offset="23" vectorequiv="Color3usv">
-        <param name="red" type="GLushort"/>
-        <param name="green" type="GLushort"/>
-        <param name="blue" type="GLushort"/>
-    </function>
-
-    <function name="Color3usv" offset="24">
-        <param name="v" type="const GLushort *" count="3"/>
-        <glx rop="13"/>
-    </function>
-
-    <function name="Color4b" offset="25" vectorequiv="Color4bv">
-        <param name="red" type="GLbyte"/>
-        <param name="green" type="GLbyte"/>
-        <param name="blue" type="GLbyte"/>
-        <param name="alpha" type="GLbyte"/>
-    </function>
-
-    <function name="Color4bv" offset="26">
-        <param name="v" type="const GLbyte *" count="4"/>
-        <glx rop="14"/>
-    </function>
-
-    <function name="Color4d" offset="27" vectorequiv="Color4dv">
-        <param name="red" type="GLdouble"/>
-        <param name="green" type="GLdouble"/>
-        <param name="blue" type="GLdouble"/>
-        <param name="alpha" type="GLdouble"/>
-    </function>
-
-    <function name="Color4dv" offset="28">
-        <param name="v" type="const GLdouble *" count="4"/>
-        <glx rop="15"/>
-    </function>
-
-    <function name="Color4f" offset="29" vectorequiv="Color4fv">
-        <param name="red" type="GLfloat"/>
-        <param name="green" type="GLfloat"/>
-        <param name="blue" type="GLfloat"/>
-        <param name="alpha" type="GLfloat"/>
-    </function>
-
-    <function name="Color4fv" offset="30">
-        <param name="v" type="const GLfloat *" count="4"/>
-        <glx rop="16"/>
-    </function>
-
-    <function name="Color4i" offset="31" vectorequiv="Color4iv">
-        <param name="red" type="GLint"/>
-        <param name="green" type="GLint"/>
-        <param name="blue" type="GLint"/>
-        <param name="alpha" type="GLint"/>
-    </function>
-
-    <function name="Color4iv" offset="32">
-        <param name="v" type="const GLint *" count="4"/>
-        <glx rop="17"/>
-    </function>
-
-    <function name="Color4s" offset="33" vectorequiv="Color4sv">
-        <param name="red" type="GLshort"/>
-        <param name="green" type="GLshort"/>
-        <param name="blue" type="GLshort"/>
-        <param name="alpha" type="GLshort"/>
-    </function>
-
-    <function name="Color4sv" offset="34">
-        <param name="v" type="const GLshort *" count="4"/>
-        <glx rop="18"/>
-    </function>
-
-    <function name="Color4ub" offset="35" vectorequiv="Color4ubv">
-        <param name="red" type="GLubyte"/>
-        <param name="green" type="GLubyte"/>
-        <param name="blue" type="GLubyte"/>
-        <param name="alpha" type="GLubyte"/>
-    </function>
-
-    <function name="Color4ubv" offset="36">
-        <param name="v" type="const GLubyte *" count="4"/>
-        <glx rop="19"/>
-    </function>
-
-    <function name="Color4ui" offset="37" vectorequiv="Color4uiv">
-        <param name="red" type="GLuint"/>
-        <param name="green" type="GLuint"/>
-        <param name="blue" type="GLuint"/>
-        <param name="alpha" type="GLuint"/>
-    </function>
-
-    <function name="Color4uiv" offset="38">
-        <param name="v" type="const GLuint *" count="4"/>
-        <glx rop="20"/>
-    </function>
-
-    <function name="Color4us" offset="39" vectorequiv="Color4usv">
-        <param name="red" type="GLushort"/>
-        <param name="green" type="GLushort"/>
-        <param name="blue" type="GLushort"/>
-        <param name="alpha" type="GLushort"/>
-    </function>
-
-    <function name="Color4usv" offset="40">
-        <param name="v" type="const GLushort *" count="4"/>
-        <glx rop="21"/>
-    </function>
-
-    <function name="EdgeFlag" offset="41" vectorequiv="EdgeFlagv">
-        <param name="flag" type="GLboolean"/>
-    </function>
-
-    <function name="EdgeFlagv" offset="42">
-        <param name="flag" type="const GLboolean *" count="1"/>
-        <glx rop="22"/>
-    </function>
-
-    <function name="End" offset="43">
-        <glx rop="23"/>
-    </function>
-
-    <function name="Indexd" offset="44" vectorequiv="Indexdv">
-        <param name="c" type="GLdouble"/>
-    </function>
-
-    <function name="Indexdv" offset="45">
-        <param name="c" type="const GLdouble *" count="1"/>
-        <glx rop="24"/>
-    </function>
-
-    <function name="Indexf" offset="46" vectorequiv="Indexfv">
-        <param name="c" type="GLfloat"/>
-    </function>
-
-    <function name="Indexfv" offset="47">
-        <param name="c" type="const GLfloat *" count="1"/>
-        <glx rop="25"/>
-    </function>
-
-    <function name="Indexi" offset="48" vectorequiv="Indexiv">
-        <param name="c" type="GLint"/>
-    </function>
-
-    <function name="Indexiv" offset="49">
-        <param name="c" type="const GLint *" count="1"/>
-        <glx rop="26"/>
-    </function>
-
-    <function name="Indexs" offset="50" vectorequiv="Indexsv">
-        <param name="c" type="GLshort"/>
-    </function>
-
-    <function name="Indexsv" offset="51">
-        <param name="c" type="const GLshort *" count="1"/>
-        <glx rop="27"/>
-    </function>
-
-    <function name="Normal3b" offset="52" vectorequiv="Normal3bv">
-        <param name="nx" type="GLbyte"/>
-        <param name="ny" type="GLbyte"/>
-        <param name="nz" type="GLbyte"/>
-    </function>
-
-    <function name="Normal3bv" offset="53">
-        <param name="v" type="const GLbyte *" count="3"/>
-        <glx rop="28"/>
-    </function>
-
-    <function name="Normal3d" offset="54" vectorequiv="Normal3dv">
-        <param name="nx" type="GLdouble"/>
-        <param name="ny" type="GLdouble"/>
-        <param name="nz" type="GLdouble"/>
-    </function>
-
-    <function name="Normal3dv" offset="55">
-        <param name="v" type="const GLdouble *" count="3"/>
-        <glx rop="29"/>
-    </function>
-
-    <function name="Normal3f" offset="56" vectorequiv="Normal3fv">
-        <param name="nx" type="GLfloat"/>
-        <param name="ny" type="GLfloat"/>
-        <param name="nz" type="GLfloat"/>
-    </function>
-
-    <function name="Normal3fv" offset="57">
-        <param name="v" type="const GLfloat *" count="3"/>
-        <glx rop="30"/>
-    </function>
-
-    <function name="Normal3i" offset="58" vectorequiv="Normal3iv">
-        <param name="nx" type="GLint"/>
-        <param name="ny" type="GLint"/>
-        <param name="nz" type="GLint"/>
-    </function>
-
-    <function name="Normal3iv" offset="59">
-        <param name="v" type="const GLint *" count="3"/>
-        <glx rop="31"/>
-    </function>
-
-    <function name="Normal3s" offset="60" vectorequiv="Normal3sv">
-        <param name="nx" type="GLshort"/>
-        <param name="ny" type="GLshort"/>
-        <param name="nz" type="GLshort"/>
-    </function>
-
-    <function name="Normal3sv" offset="61">
-        <param name="v" type="const GLshort *" count="3"/>
-        <glx rop="32"/>
-    </function>
-
-    <function name="RasterPos2d" offset="62" vectorequiv="RasterPos2dv">
-        <param name="x" type="GLdouble"/>
-        <param name="y" type="GLdouble"/>
-    </function>
-
-    <function name="RasterPos2dv" offset="63">
-        <param name="v" type="const GLdouble *" count="2"/>
-        <glx rop="33"/>
-    </function>
-
-    <function name="RasterPos2f" offset="64" vectorequiv="RasterPos2fv">
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-    </function>
-
-    <function name="RasterPos2fv" offset="65">
-        <param name="v" type="const GLfloat *" count="2"/>
-        <glx rop="34"/>
-    </function>
-
-    <function name="RasterPos2i" offset="66" vectorequiv="RasterPos2iv">
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-    </function>
-
-    <function name="RasterPos2iv" offset="67">
-        <param name="v" type="const GLint *" count="2"/>
-        <glx rop="35"/>
-    </function>
-
-    <function name="RasterPos2s" offset="68" vectorequiv="RasterPos2sv">
-        <param name="x" type="GLshort"/>
-        <param name="y" type="GLshort"/>
-    </function>
-
-    <function name="RasterPos2sv" offset="69">
-        <param name="v" type="const GLshort *" count="2"/>
-        <glx rop="36"/>
-    </function>
-
-    <function name="RasterPos3d" offset="70" vectorequiv="RasterPos3dv">
-        <param name="x" type="GLdouble"/>
-        <param name="y" type="GLdouble"/>
-        <param name="z" type="GLdouble"/>
-    </function>
-
-    <function name="RasterPos3dv" offset="71">
-        <param name="v" type="const GLdouble *" count="3"/>
-        <glx rop="37"/>
-    </function>
-
-    <function name="RasterPos3f" offset="72" vectorequiv="RasterPos3fv">
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-    </function>
-
-    <function name="RasterPos3fv" offset="73">
-        <param name="v" type="const GLfloat *" count="3"/>
-        <glx rop="38"/>
-    </function>
-
-    <function name="RasterPos3i" offset="74" vectorequiv="RasterPos3iv">
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-        <param name="z" type="GLint"/>
-    </function>
-
-    <function name="RasterPos3iv" offset="75">
-        <param name="v" type="const GLint *" count="3"/>
-        <glx rop="39"/>
-    </function>
-
-    <function name="RasterPos3s" offset="76" vectorequiv="RasterPos3sv">
-        <param name="x" type="GLshort"/>
-        <param name="y" type="GLshort"/>
-        <param name="z" type="GLshort"/>
-    </function>
-
-    <function name="RasterPos3sv" offset="77">
-        <param name="v" type="const GLshort *" count="3"/>
-        <glx rop="40"/>
-    </function>
-
-    <function name="RasterPos4d" offset="78" vectorequiv="RasterPos4dv">
-        <param name="x" type="GLdouble"/>
-        <param name="y" type="GLdouble"/>
-        <param name="z" type="GLdouble"/>
-        <param name="w" type="GLdouble"/>
-    </function>
-
-    <function name="RasterPos4dv" offset="79">
-        <param name="v" type="const GLdouble *" count="4"/>
-        <glx rop="41"/>
-    </function>
-
-    <function name="RasterPos4f" offset="80" vectorequiv="RasterPos4fv">
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-        <param name="w" type="GLfloat"/>
-    </function>
-
-    <function name="RasterPos4fv" offset="81">
-        <param name="v" type="const GLfloat *" count="4"/>
-        <glx rop="42"/>
-    </function>
-
-    <function name="RasterPos4i" offset="82" vectorequiv="RasterPos4iv">
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-        <param name="z" type="GLint"/>
-        <param name="w" type="GLint"/>
-    </function>
-
-    <function name="RasterPos4iv" offset="83">
-        <param name="v" type="const GLint *" count="4"/>
-        <glx rop="43"/>
-    </function>
-
-    <function name="RasterPos4s" offset="84" vectorequiv="RasterPos4sv">
-        <param name="x" type="GLshort"/>
-        <param name="y" type="GLshort"/>
-        <param name="z" type="GLshort"/>
-        <param name="w" type="GLshort"/>
-    </function>
-
-    <function name="RasterPos4sv" offset="85">
-        <param name="v" type="const GLshort *" count="4"/>
-        <glx rop="44"/>
-    </function>
-
-    <function name="Rectd" offset="86" vectorequiv="Rectdv">
-        <param name="x1" type="GLdouble"/>
-        <param name="y1" type="GLdouble"/>
-        <param name="x2" type="GLdouble"/>
-        <param name="y2" type="GLdouble"/>
-    </function>
-
-    <function name="Rectdv" offset="87">
-        <param name="v1" type="const GLdouble *" count="2"/>
-        <param name="v2" type="const GLdouble *" count="2"/>
-        <glx rop="45"/>
-    </function>
-
-    <function name="Rectf" offset="88" vectorequiv="Rectfv">
-        <param name="x1" type="GLfloat"/>
-        <param name="y1" type="GLfloat"/>
-        <param name="x2" type="GLfloat"/>
-        <param name="y2" type="GLfloat"/>
-    </function>
-
-    <function name="Rectfv" offset="89">
-        <param name="v1" type="const GLfloat *" count="2"/>
-        <param name="v2" type="const GLfloat *" count="2"/>
-        <glx rop="46"/>
-    </function>
-
-    <function name="Recti" offset="90" vectorequiv="Rectiv">
-        <param name="x1" type="GLint"/>
-        <param name="y1" type="GLint"/>
-        <param name="x2" type="GLint"/>
-        <param name="y2" type="GLint"/>
-    </function>
-
-    <function name="Rectiv" offset="91">
-        <param name="v1" type="const GLint *" count="2"/>
-        <param name="v2" type="const GLint *" count="2"/>
-        <glx rop="47"/>
-    </function>
-
-    <function name="Rects" offset="92" vectorequiv="Rectsv">
-        <param name="x1" type="GLshort"/>
-        <param name="y1" type="GLshort"/>
-        <param name="x2" type="GLshort"/>
-        <param name="y2" type="GLshort"/>
-    </function>
-
-    <function name="Rectsv" offset="93">
-        <param name="v1" type="const GLshort *" count="2"/>
-        <param name="v2" type="const GLshort *" count="2"/>
-        <glx rop="48"/>
-    </function>
-
-    <function name="TexCoord1d" offset="94" vectorequiv="TexCoord1dv">
-        <param name="s" type="GLdouble"/>
-    </function>
-
-    <function name="TexCoord1dv" offset="95">
-        <param name="v" type="const GLdouble *" count="1"/>
-        <glx rop="49"/>
-    </function>
-
-    <function name="TexCoord1f" offset="96" vectorequiv="TexCoord1fv">
-        <param name="s" type="GLfloat"/>
-    </function>
-
-    <function name="TexCoord1fv" offset="97">
-        <param name="v" type="const GLfloat *" count="1"/>
-        <glx rop="50"/>
-    </function>
-
-    <function name="TexCoord1i" offset="98" vectorequiv="TexCoord1iv">
-        <param name="s" type="GLint"/>
-    </function>
-
-    <function name="TexCoord1iv" offset="99">
-        <param name="v" type="const GLint *" count="1"/>
-        <glx rop="51"/>
-    </function>
-
-    <function name="TexCoord1s" offset="100" vectorequiv="TexCoord1sv">
-        <param name="s" type="GLshort"/>
-    </function>
-
-    <function name="TexCoord1sv" offset="101">
-        <param name="v" type="const GLshort *" count="1"/>
-        <glx rop="52"/>
-    </function>
-
-    <function name="TexCoord2d" offset="102" vectorequiv="TexCoord2dv">
-        <param name="s" type="GLdouble"/>
-        <param name="t" type="GLdouble"/>
-    </function>
-
-    <function name="TexCoord2dv" offset="103">
-        <param name="v" type="const GLdouble *" count="2"/>
-        <glx rop="53"/>
-    </function>
-
-    <function name="TexCoord2f" offset="104" vectorequiv="TexCoord2fv">
-        <param name="s" type="GLfloat"/>
-        <param name="t" type="GLfloat"/>
-    </function>
-
-    <function name="TexCoord2fv" offset="105">
-        <param name="v" type="const GLfloat *" count="2"/>
-        <glx rop="54"/>
-    </function>
-
-    <function name="TexCoord2i" offset="106" vectorequiv="TexCoord2iv">
-        <param name="s" type="GLint"/>
-        <param name="t" type="GLint"/>
-    </function>
-
-    <function name="TexCoord2iv" offset="107">
-        <param name="v" type="const GLint *" count="2"/>
-        <glx rop="55"/>
-    </function>
-
-    <function name="TexCoord2s" offset="108" vectorequiv="TexCoord2sv">
-        <param name="s" type="GLshort"/>
-        <param name="t" type="GLshort"/>
-    </function>
-
-    <function name="TexCoord2sv" offset="109">
-        <param name="v" type="const GLshort *" count="2"/>
-        <glx rop="56"/>
-    </function>
-
-    <function name="TexCoord3d" offset="110" vectorequiv="TexCoord3dv">
-        <param name="s" type="GLdouble"/>
-        <param name="t" type="GLdouble"/>
-        <param name="r" type="GLdouble"/>
-    </function>
-
-    <function name="TexCoord3dv" offset="111">
-        <param name="v" type="const GLdouble *" count="3"/>
-        <glx rop="57"/>
-    </function>
-
-    <function name="TexCoord3f" offset="112" vectorequiv="TexCoord3fv">
-        <param name="s" type="GLfloat"/>
-        <param name="t" type="GLfloat"/>
-        <param name="r" type="GLfloat"/>
-    </function>
-
-    <function name="TexCoord3fv" offset="113">
-        <param name="v" type="const GLfloat *" count="3"/>
-        <glx rop="58"/>
-    </function>
-
-    <function name="TexCoord3i" offset="114" vectorequiv="TexCoord3iv">
-        <param name="s" type="GLint"/>
-        <param name="t" type="GLint"/>
-        <param name="r" type="GLint"/>
-    </function>
-
-    <function name="TexCoord3iv" offset="115">
-        <param name="v" type="const GLint *" count="3"/>
-        <glx rop="59"/>
-    </function>
-
-    <function name="TexCoord3s" offset="116" vectorequiv="TexCoord3sv">
-        <param name="s" type="GLshort"/>
-        <param name="t" type="GLshort"/>
-        <param name="r" type="GLshort"/>
-    </function>
-
-    <function name="TexCoord3sv" offset="117">
-        <param name="v" type="const GLshort *" count="3"/>
-        <glx rop="60"/>
-    </function>
-
-    <function name="TexCoord4d" offset="118" vectorequiv="TexCoord4dv">
-        <param name="s" type="GLdouble"/>
-        <param name="t" type="GLdouble"/>
-        <param name="r" type="GLdouble"/>
-        <param name="q" type="GLdouble"/>
-    </function>
-
-    <function name="TexCoord4dv" offset="119">
-        <param name="v" type="const GLdouble *" count="4"/>
-        <glx rop="61"/>
-    </function>
-
-    <function name="TexCoord4f" offset="120" vectorequiv="TexCoord4fv">
-        <param name="s" type="GLfloat"/>
-        <param name="t" type="GLfloat"/>
-        <param name="r" type="GLfloat"/>
-        <param name="q" type="GLfloat"/>
-    </function>
-
-    <function name="TexCoord4fv" offset="121">
-        <param name="v" type="const GLfloat *" count="4"/>
-        <glx rop="62"/>
-    </function>
-
-    <function name="TexCoord4i" offset="122" vectorequiv="TexCoord4iv">
-        <param name="s" type="GLint"/>
-        <param name="t" type="GLint"/>
-        <param name="r" type="GLint"/>
-        <param name="q" type="GLint"/>
-    </function>
-
-    <function name="TexCoord4iv" offset="123">
-        <param name="v" type="const GLint *" count="4"/>
-        <glx rop="63"/>
-    </function>
-
-    <function name="TexCoord4s" offset="124" vectorequiv="TexCoord4sv">
-        <param name="s" type="GLshort"/>
-        <param name="t" type="GLshort"/>
-        <param name="r" type="GLshort"/>
-        <param name="q" type="GLshort"/>
-    </function>
-
-    <function name="TexCoord4sv" offset="125">
-        <param name="v" type="const GLshort *" count="4"/>
-        <glx rop="64"/>
-    </function>
-
-    <function name="Vertex2d" offset="126" vectorequiv="Vertex2dv">
-        <param name="x" type="GLdouble"/>
-        <param name="y" type="GLdouble"/>
-    </function>
-
-    <function name="Vertex2dv" offset="127">
-        <param name="v" type="const GLdouble *" count="2"/>
-        <glx rop="65"/>
-    </function>
-
-    <function name="Vertex2f" offset="128" vectorequiv="Vertex2fv">
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-    </function>
-
-    <function name="Vertex2fv" offset="129">
-        <param name="v" type="const GLfloat *" count="2"/>
-        <glx rop="66"/>
-    </function>
-
-    <function name="Vertex2i" offset="130" vectorequiv="Vertex2iv">
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-    </function>
-
-    <function name="Vertex2iv" offset="131">
-        <param name="v" type="const GLint *" count="2"/>
-        <glx rop="67"/>
-    </function>
-
-    <function name="Vertex2s" offset="132" vectorequiv="Vertex2sv">
-        <param name="x" type="GLshort"/>
-        <param name="y" type="GLshort"/>
-    </function>
-
-    <function name="Vertex2sv" offset="133">
-        <param name="v" type="const GLshort *" count="2"/>
-        <glx rop="68"/>
-    </function>
-
-    <function name="Vertex3d" offset="134" vectorequiv="Vertex3dv">
-        <param name="x" type="GLdouble"/>
-        <param name="y" type="GLdouble"/>
-        <param name="z" type="GLdouble"/>
-    </function>
-
-    <function name="Vertex3dv" offset="135">
-        <param name="v" type="const GLdouble *" count="3"/>
-        <glx rop="69"/>
-    </function>
-
-    <function name="Vertex3f" offset="136" vectorequiv="Vertex3fv">
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-    </function>
-
-    <function name="Vertex3fv" offset="137">
-        <param name="v" type="const GLfloat *" count="3"/>
-        <glx rop="70"/>
-    </function>
-
-    <function name="Vertex3i" offset="138" vectorequiv="Vertex3iv">
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-        <param name="z" type="GLint"/>
-    </function>
-
-    <function name="Vertex3iv" offset="139">
-        <param name="v" type="const GLint *" count="3"/>
-        <glx rop="71"/>
-    </function>
-
-    <function name="Vertex3s" offset="140" vectorequiv="Vertex3sv">
-        <param name="x" type="GLshort"/>
-        <param name="y" type="GLshort"/>
-        <param name="z" type="GLshort"/>
-    </function>
-
-    <function name="Vertex3sv" offset="141">
-        <param name="v" type="const GLshort *" count="3"/>
-        <glx rop="72"/>
-    </function>
-
-    <function name="Vertex4d" offset="142" vectorequiv="Vertex4dv">
-        <param name="x" type="GLdouble"/>
-        <param name="y" type="GLdouble"/>
-        <param name="z" type="GLdouble"/>
-        <param name="w" type="GLdouble"/>
-    </function>
-
-    <function name="Vertex4dv" offset="143">
-        <param name="v" type="const GLdouble *" count="4"/>
-        <glx rop="73"/>
-    </function>
-
-    <function name="Vertex4f" offset="144" vectorequiv="Vertex4fv">
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-        <param name="w" type="GLfloat"/>
-    </function>
-
-    <function name="Vertex4fv" offset="145">
-        <param name="v" type="const GLfloat *" count="4"/>
-        <glx rop="74"/>
-    </function>
-
-    <function name="Vertex4i" offset="146" vectorequiv="Vertex4iv">
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-        <param name="z" type="GLint"/>
-        <param name="w" type="GLint"/>
-    </function>
-
-    <function name="Vertex4iv" offset="147">
-        <param name="v" type="const GLint *" count="4"/>
-        <glx rop="75"/>
-    </function>
-
-    <function name="Vertex4s" offset="148" vectorequiv="Vertex4sv">
-        <param name="x" type="GLshort"/>
-        <param name="y" type="GLshort"/>
-        <param name="z" type="GLshort"/>
-        <param name="w" type="GLshort"/>
-    </function>
-
-    <function name="Vertex4sv" offset="149">
-        <param name="v" type="const GLshort *" count="4"/>
-        <glx rop="76"/>
-    </function>
-
-    <function name="ClipPlane" offset="150">
-        <param name="plane" type="GLenum"/>
-        <param name="equation" type="const GLdouble *" count="4"/>
-        <glx rop="77"/>
-    </function>
-
-    <function name="ColorMaterial" offset="151">
-        <param name="face" type="GLenum"/>
-        <param name="mode" type="GLenum"/>
-        <glx rop="78"/>
-    </function>
-
-    <function name="CullFace" offset="152">
-        <param name="mode" type="GLenum"/>
-        <glx rop="79"/>
-    </function>
-
-    <function name="Fogf" offset="153">
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLfloat"/>
-        <glx rop="80"/>
-    </function>
-
-    <function name="Fogfv" offset="154">
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLfloat *" variable_param="pname"/>
-        <glx rop="81"/>
-    </function>
-
-    <function name="Fogi" offset="155">
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLint"/>
-        <glx rop="82"/>
-    </function>
-
-    <function name="Fogiv" offset="156">
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLint *" variable_param="pname"/>
-        <glx rop="83"/>
-    </function>
-
-    <function name="FrontFace" offset="157">
-        <param name="mode" type="GLenum"/>
-        <glx rop="84"/>
-    </function>
-
-    <function name="Hint" offset="158">
-        <param name="target" type="GLenum"/>
-        <param name="mode" type="GLenum"/>
-        <glx rop="85"/>
-    </function>
-
-    <function name="Lightf" offset="159">
-        <param name="light" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLfloat"/>
-        <glx rop="86"/>
-    </function>
-
-    <function name="Lightfv" offset="160">
-        <param name="light" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLfloat *" variable_param="pname"/>
-        <glx rop="87"/>
-    </function>
-
-    <function name="Lighti" offset="161">
-        <param name="light" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLint"/>
-        <glx rop="88"/>
-    </function>
-
-    <function name="Lightiv" offset="162">
-        <param name="light" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLint *" variable_param="pname"/>
-        <glx rop="89"/>
-    </function>
-
-    <function name="LightModelf" offset="163">
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLfloat"/>
-        <glx rop="90"/>
-    </function>
-
-    <function name="LightModelfv" offset="164">
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLfloat *" variable_param="pname"/>
-        <glx rop="91"/>
-    </function>
-
-    <function name="LightModeli" offset="165">
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLint"/>
-        <glx rop="92"/>
-    </function>
-
-    <function name="LightModeliv" offset="166">
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLint *" variable_param="pname"/>
-        <glx rop="93"/>
-    </function>
-
-    <function name="LineStipple" offset="167">
-        <param name="factor" type="GLint"/>
-        <param name="pattern" type="GLushort"/>
-        <glx rop="94"/>
-    </function>
-
-    <function name="LineWidth" offset="168">
-        <param name="width" type="GLfloat"/>
-        <glx rop="95"/>
-    </function>
-
-    <function name="Materialf" offset="169">
-        <param name="face" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLfloat"/>
-        <glx rop="96"/>
-    </function>
-
-    <function name="Materialfv" offset="170">
-        <param name="face" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLfloat *" variable_param="pname"/>
-        <glx rop="97"/>
-    </function>
-
-    <function name="Materiali" offset="171">
-        <param name="face" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLint"/>
-        <glx rop="98"/>
-    </function>
-
-    <function name="Materialiv" offset="172">
-        <param name="face" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLint *" variable_param="pname"/>
-        <glx rop="99"/>
-    </function>
-
-    <function name="PointSize" offset="173">
-        <param name="size" type="GLfloat"/>
-        <glx rop="100"/>
-    </function>
-
-    <function name="PolygonMode" offset="174">
-        <param name="face" type="GLenum"/>
-        <param name="mode" type="GLenum"/>
-        <glx rop="101"/>
-    </function>
-
-    <function name="PolygonStipple" offset="175">
-        <param name="mask" type="const GLubyte *" img_width="32" img_height="32" img_format="GL_COLOR_INDEX" img_type="GL_BITMAP" img_target="0" img_pad_dimensions="false"/>
-        <glx rop="102"/>
-    </function>
-
-    <function name="Scissor" offset="176">
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-        <glx rop="103"/>
-    </function>
-
-    <function name="ShadeModel" offset="177">
-        <param name="mode" type="GLenum"/>
-        <glx rop="104"/>
-    </function>
-
-    <function name="TexParameterf" offset="178">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLfloat"/>
-        <glx rop="105"/>
-    </function>
-
-    <function name="TexParameterfv" offset="179">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLfloat *" variable_param="pname"/>
-        <glx rop="106"/>
-    </function>
-
-    <function name="TexParameteri" offset="180">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLint"/>
-        <glx rop="107"/>
-    </function>
-
-    <function name="TexParameteriv" offset="181">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLint *" variable_param="pname"/>
-        <glx rop="108"/>
-    </function>
-
-    <function name="TexImage1D" offset="182">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="internalformat" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <param name="border" type="GLint"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="pixels" type="const GLvoid *" img_width="width" img_format="format" img_type="type" img_target="target" img_send_null="true" img_pad_dimensions="true"/>
-        <glx rop="109" large="true"/>
-    </function>
-
-    <function name="TexImage2D" offset="183">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="internalformat" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-        <param name="border" type="GLint"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="pixels" type="const GLvoid *" img_width="width" img_height="height" img_format="format" img_type="type" img_target="target" img_send_null="true" img_pad_dimensions="true"/>
-        <glx rop="110" large="true"/>
-    </function>
-
-    <function name="TexEnvf" offset="184">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLfloat"/>
-        <glx rop="111"/>
-    </function>
-
-    <function name="TexEnvfv" offset="185">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLfloat *" variable_param="pname"/>
-        <glx rop="112"/>
-    </function>
-
-    <function name="TexEnvi" offset="186">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLint"/>
-        <glx rop="113"/>
-    </function>
-
-    <function name="TexEnviv" offset="187">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLint *" variable_param="pname"/>
-        <glx rop="114"/>
-    </function>
-
-    <function name="TexGend" offset="188">
-        <param name="coord" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLdouble"/>
-        <glx rop="115"/>
-    </function>
-
-    <function name="TexGendv" offset="189">
-        <param name="coord" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLdouble *" variable_param="pname"/>
-        <glx rop="116"/>
-    </function>
-
-    <function name="TexGenf" offset="190">
-        <param name="coord" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLfloat"/>
-        <glx rop="117"/>
-    </function>
-
-    <function name="TexGenfv" offset="191">
-        <param name="coord" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLfloat *" variable_param="pname"/>
-        <glx rop="118"/>
-    </function>
-
-    <function name="TexGeni" offset="192">
-        <param name="coord" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLint"/>
-        <glx rop="119"/>
-    </function>
-
-    <function name="TexGeniv" offset="193">
-        <param name="coord" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLint *" variable_param="pname"/>
-        <glx rop="120"/>
-    </function>
-
-    <function name="FeedbackBuffer" offset="194">
-        <param name="size" type="GLsizei"/>
-        <param name="type" type="GLenum"/>
-        <param name="buffer" type="GLfloat *" output="true"/>
-        <glx sop="105" handcode="true"/>
-    </function>
-
-    <function name="SelectBuffer" offset="195">
-        <param name="size" type="GLsizei"/>
-        <param name="buffer" type="GLuint *" output="true"/>
-        <glx sop="106" handcode="true"/>
-    </function>
-
-    <function name="RenderMode" offset="196">
-        <param name="mode" type="GLenum"/>
-        <return type="GLint"/>
-        <glx sop="107" handcode="true"/>
-    </function>
-
-    <function name="InitNames" offset="197">
-        <glx rop="121"/>
-    </function>
-
-    <function name="LoadName" offset="198">
-        <param name="name" type="GLuint"/>
-        <glx rop="122"/>
-    </function>
-
-    <function name="PassThrough" offset="199">
-        <param name="token" type="GLfloat"/>
-        <glx rop="123"/>
-    </function>
-
-    <function name="PopName" offset="200">
-        <glx rop="124"/>
-    </function>
-
-    <function name="PushName" offset="201">
-        <param name="name" type="GLuint"/>
-        <glx rop="125"/>
-    </function>
-
-    <function name="DrawBuffer" offset="202">
-        <param name="mode" type="GLenum"/>
-        <glx rop="126"/>
-    </function>
-
-    <function name="Clear" offset="203">
-        <param name="mask" type="GLbitfield"/>
-        <glx rop="127"/>
-    </function>
-
-    <function name="ClearAccum" offset="204">
-        <param name="red" type="GLfloat"/>
-        <param name="green" type="GLfloat"/>
-        <param name="blue" type="GLfloat"/>
-        <param name="alpha" type="GLfloat"/>
-        <glx rop="128"/>
-    </function>
-
-    <function name="ClearIndex" offset="205">
-        <param name="c" type="GLfloat"/>
-        <glx rop="129"/>
-    </function>
-
-    <function name="ClearColor" offset="206">
-        <param name="red" type="GLclampf"/>
-        <param name="green" type="GLclampf"/>
-        <param name="blue" type="GLclampf"/>
-        <param name="alpha" type="GLclampf"/>
-        <glx rop="130"/>
-    </function>
-
-    <function name="ClearStencil" offset="207">
-        <param name="s" type="GLint"/>
-        <glx rop="131"/>
-    </function>
-
-    <function name="ClearDepth" offset="208">
-        <param name="depth" type="GLclampd"/>
-        <glx rop="132"/>
-    </function>
-
-    <function name="StencilMask" offset="209">
-        <param name="mask" type="GLuint"/>
-        <glx rop="133"/>
-    </function>
-
-    <function name="ColorMask" offset="210">
-        <param name="red" type="GLboolean"/>
-        <param name="green" type="GLboolean"/>
-        <param name="blue" type="GLboolean"/>
-        <param name="alpha" type="GLboolean"/>
-        <glx rop="134"/>
-    </function>
-
-    <function name="DepthMask" offset="211">
-        <param name="flag" type="GLboolean"/>
-        <glx rop="135"/>
-    </function>
-
-    <function name="IndexMask" offset="212">
-        <param name="mask" type="GLuint"/>
-        <glx rop="136"/>
-    </function>
-
-    <function name="Accum" offset="213">
-        <param name="op" type="GLenum"/>
-        <param name="value" type="GLfloat"/>
-        <glx rop="137"/>
-    </function>
-
-    <function name="Disable" offset="214">
-        <param name="cap" type="GLenum"/>
-        <glx rop="138" handcode="client"/>
-    </function>
-
-    <function name="Enable" offset="215">
-        <param name="cap" type="GLenum"/>
-        <glx rop="139" handcode="client"/>
-    </function>
-
-    <function name="Finish" offset="216">
-        <glx sop="108" handcode="true"/>
-    </function>
-
-    <function name="Flush" offset="217">
-        <glx sop="142" handcode="true"/>
-    </function>
-
-    <function name="PopAttrib" offset="218">
-        <glx rop="141"/>
-    </function>
-
-    <function name="PushAttrib" offset="219">
-        <param name="mask" type="GLbitfield"/>
-        <glx rop="142"/>
-    </function>
-
-    <function name="Map1d" offset="220">
-        <param name="target" type="GLenum"/>
-        <param name="u1" type="GLdouble"/>
-        <param name="u2" type="GLdouble"/>
-        <param name="stride" type="GLint" client_only="true"/>
-        <param name="order" type="GLint"/>
-        <param name="points" type="const GLdouble *" variable_param="order"/>
-        <glx rop="143" handcode="true"/>
-    </function>
-
-    <function name="Map1f" offset="221">
-        <param name="target" type="GLenum"/>
-        <param name="u1" type="GLfloat"/>
-        <param name="u2" type="GLfloat"/>
-        <param name="stride" type="GLint" client_only="true"/>
-        <param name="order" type="GLint"/>
-        <param name="points" type="const GLfloat *" variable_param="order"/>
-        <glx rop="144" handcode="true"/>
-    </function>
-
-    <function name="Map2d" offset="222">
-        <param name="target" type="GLenum"/>
-        <param name="u1" type="GLdouble"/>
-        <param name="u2" type="GLdouble"/>
-        <param name="ustride" type="GLint" client_only="true"/>
-        <param name="uorder" type="GLint"/>
-        <param name="v1" type="GLdouble"/>
-        <param name="v2" type="GLdouble"/>
-        <param name="vstride" type="GLint" client_only="true"/>
-        <param name="vorder" type="GLint"/>
-        <param name="points" type="const GLdouble *" variable_param="uorder"/>
-        <glx rop="145" handcode="true"/>
-    </function>
-
-    <function name="Map2f" offset="223">
-        <param name="target" type="GLenum"/>
-        <param name="u1" type="GLfloat"/>
-        <param name="u2" type="GLfloat"/>
-        <param name="ustride" type="GLint" client_only="true"/>
-        <param name="uorder" type="GLint"/>
-        <param name="v1" type="GLfloat"/>
-        <param name="v2" type="GLfloat"/>
-        <param name="vstride" type="GLint" client_only="true"/>
-        <param name="vorder" type="GLint"/>
-        <param name="points" type="const GLfloat *" variable_param="uorder"/>
-        <glx rop="146" handcode="true"/>
-    </function>
-
-    <function name="MapGrid1d" offset="224">
-        <param name="un" type="GLint"/>
-        <param name="u1" type="GLdouble"/>
-        <param name="u2" type="GLdouble"/>
-        <glx rop="147"/>
-    </function>
-
-    <function name="MapGrid1f" offset="225">
-        <param name="un" type="GLint"/>
-        <param name="u1" type="GLfloat"/>
-        <param name="u2" type="GLfloat"/>
-        <glx rop="148"/>
-    </function>
-
-    <function name="MapGrid2d" offset="226">
-        <param name="un" type="GLint"/>
-        <param name="u1" type="GLdouble"/>
-        <param name="u2" type="GLdouble"/>
-        <param name="vn" type="GLint"/>
-        <param name="v1" type="GLdouble"/>
-        <param name="v2" type="GLdouble"/>
-        <glx rop="149"/>
-    </function>
-
-    <function name="MapGrid2f" offset="227">
-        <param name="un" type="GLint"/>
-        <param name="u1" type="GLfloat"/>
-        <param name="u2" type="GLfloat"/>
-        <param name="vn" type="GLint"/>
-        <param name="v1" type="GLfloat"/>
-        <param name="v2" type="GLfloat"/>
-        <glx rop="150"/>
-    </function>
-
-    <function name="EvalCoord1d" offset="228" vectorequiv="EvalCoord1dv">
-        <param name="u" type="GLdouble"/>
-    </function>
-
-    <function name="EvalCoord1dv" offset="229">
-        <param name="u" type="const GLdouble *" count="1"/>
-        <glx rop="151"/>
-    </function>
-
-    <function name="EvalCoord1f" offset="230" vectorequiv="EvalCoord1fv">
-        <param name="u" type="GLfloat"/>
-    </function>
-
-    <function name="EvalCoord1fv" offset="231">
-        <param name="u" type="const GLfloat *" count="1"/>
-        <glx rop="152"/>
-    </function>
-
-    <function name="EvalCoord2d" offset="232" vectorequiv="EvalCoord2dv">
-        <param name="u" type="GLdouble"/>
-        <param name="v" type="GLdouble"/>
-    </function>
-
-    <function name="EvalCoord2dv" offset="233">
-        <param name="u" type="const GLdouble *" count="2"/>
-        <glx rop="153"/>
-    </function>
-
-    <function name="EvalCoord2f" offset="234" vectorequiv="EvalCoord2fv">
-        <param name="u" type="GLfloat"/>
-        <param name="v" type="GLfloat"/>
-    </function>
-
-    <function name="EvalCoord2fv" offset="235">
-        <param name="u" type="const GLfloat *" count="2"/>
-        <glx rop="154"/>
-    </function>
-
-    <function name="EvalMesh1" offset="236">
-        <param name="mode" type="GLenum"/>
-        <param name="i1" type="GLint"/>
-        <param name="i2" type="GLint"/>
-        <glx rop="155"/>
-    </function>
-
-    <function name="EvalPoint1" offset="237">
-        <param name="i" type="GLint"/>
-        <glx rop="156"/>
-    </function>
-
-    <function name="EvalMesh2" offset="238">
-        <param name="mode" type="GLenum"/>
-        <param name="i1" type="GLint"/>
-        <param name="i2" type="GLint"/>
-        <param name="j1" type="GLint"/>
-        <param name="j2" type="GLint"/>
-        <glx rop="157"/>
-    </function>
-
-    <function name="EvalPoint2" offset="239">
-        <param name="i" type="GLint"/>
-        <param name="j" type="GLint"/>
-        <glx rop="158"/>
-    </function>
-
-    <function name="AlphaFunc" offset="240">
-        <param name="func" type="GLenum"/>
-        <param name="ref" type="GLclampf"/>
-        <glx rop="159"/>
-    </function>
-
-    <function name="BlendFunc" offset="241">
-        <param name="sfactor" type="GLenum"/>
-        <param name="dfactor" type="GLenum"/>
-        <glx rop="160"/>
-    </function>
-
-    <function name="LogicOp" offset="242">
-        <param name="opcode" type="GLenum"/>
-        <glx rop="161"/>
-    </function>
-
-    <function name="StencilFunc" offset="243">
-        <param name="func" type="GLenum"/>
-        <param name="ref" type="GLint"/>
-        <param name="mask" type="GLuint"/>
-        <glx rop="162"/>
-    </function>
-
-    <function name="StencilOp" offset="244">
-        <param name="fail" type="GLenum"/>
-        <param name="zfail" type="GLenum"/>
-        <param name="zpass" type="GLenum"/>
-        <glx rop="163"/>
-    </function>
-
-    <function name="DepthFunc" offset="245">
-        <param name="func" type="GLenum"/>
-        <glx rop="164"/>
-    </function>
-
-    <function name="PixelZoom" offset="246">
-        <param name="xfactor" type="GLfloat"/>
-        <param name="yfactor" type="GLfloat"/>
-        <glx rop="165"/>
-    </function>
-
-    <function name="PixelTransferf" offset="247">
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLfloat"/>
-        <glx rop="166"/>
-    </function>
-
-    <function name="PixelTransferi" offset="248">
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLint"/>
-        <glx rop="167"/>
-    </function>
-
-    <function name="PixelStoref" offset="249">
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLfloat"/>
-        <glx sop="109" handcode="client"/>
-    </function>
-
-    <function name="PixelStorei" offset="250">
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLint"/>
-        <glx sop="110" handcode="client"/>
-    </function>
-
-    <function name="PixelMapfv" offset="251">
-        <param name="map" type="GLenum"/>
-        <param name="mapsize" type="GLsizei" counter="true"/>
-        <param name="values" type="const GLfloat *" count="mapsize"/>
-        <glx rop="168" large="true"/>
-    </function>
-
-    <function name="PixelMapuiv" offset="252">
-        <param name="map" type="GLenum"/>
-        <param name="mapsize" type="GLsizei" counter="true"/>
-        <param name="values" type="const GLuint *" count="mapsize"/>
-        <glx rop="169" large="true"/>
-    </function>
-
-    <function name="PixelMapusv" offset="253">
-        <param name="map" type="GLenum"/>
-        <param name="mapsize" type="GLsizei" counter="true"/>
-        <param name="values" type="const GLushort *" count="mapsize"/>
-        <glx rop="170" large="true"/>
-    </function>
-
-    <function name="ReadBuffer" offset="254">
-        <param name="mode" type="GLenum"/>
-        <glx rop="171"/>
-    </function>
-
-    <function name="CopyPixels" offset="255">
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-        <param name="type" type="GLenum"/>
-        <glx rop="172"/>
-    </function>
-
-    <function name="ReadPixels" offset="256">
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="pixels" type="GLvoid *" output="true"  img_width="width" img_height="height" img_format="format" img_type="type" img_target="0"/>
-        <glx sop="111"/>
-    </function>
-
-    <function name="DrawPixels" offset="257">
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="pixels" type="const GLvoid *" img_width="width" img_height="height" img_format="format" img_type="type" img_target="0" img_pad_dimensions="false"/>
-        <glx rop="173" large="true"/>
-    </function>
-
-    <function name="GetBooleanv" offset="258">
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLboolean *" output="true" variable_param="pname"/>
-        <glx sop="112" handcode="client"/>
-    </function>
-
-    <function name="GetClipPlane" offset="259">
-        <param name="plane" type="GLenum"/>
-        <param name="equation" type="GLdouble *" output="true" count="4"/>
-        <glx sop="113" always_array="true"/>
-    </function>
-
-    <function name="GetDoublev" offset="260">
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLdouble *" output="true" variable_param="pname"/>
-        <glx sop="114" handcode="client"/>
-    </function>
-
-    <function name="GetError" offset="261">
-        <return type="GLenum"/>
-        <glx sop="115" handcode="client"/>
-    </function>
-
-    <function name="GetFloatv" offset="262">
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
-        <glx sop="116" handcode="client"/>
-    </function>
-
-    <function name="GetIntegerv" offset="263">
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true" variable_param="pname"/>
-        <glx sop="117" handcode="client"/>
-    </function>
-
-    <function name="GetLightfv" offset="264">
-        <param name="light" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
-        <glx sop="118"/>
-    </function>
-
-    <function name="GetLightiv" offset="265">
-        <param name="light" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true" variable_param="pname"/>
-        <glx sop="119"/>
-    </function>
-
-    <function name="GetMapdv" offset="266">
-        <param name="target" type="GLenum"/>
-        <param name="query" type="GLenum"/>
-        <param name="v" type="GLdouble *" output="true" variable_param="target query"/>
-        <glx sop="120"/>
-    </function>
-
-    <function name="GetMapfv" offset="267">
-        <param name="target" type="GLenum"/>
-        <param name="query" type="GLenum"/>
-        <param name="v" type="GLfloat *" output="true" variable_param="target query"/>
-        <glx sop="121"/>
-    </function>
-
-    <function name="GetMapiv" offset="268">
-        <param name="target" type="GLenum"/>
-        <param name="query" type="GLenum"/>
-        <param name="v" type="GLint *" output="true" variable_param="target query"/>
-        <glx sop="122"/>
-    </function>
-
-    <function name="GetMaterialfv" offset="269">
-        <param name="face" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
-        <glx sop="123"/>
-    </function>
-
-    <function name="GetMaterialiv" offset="270">
-        <param name="face" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true" variable_param="pname"/>
-        <glx sop="124"/>
-    </function>
-
-    <function name="GetPixelMapfv" offset="271">
-        <param name="map" type="GLenum"/>
-        <param name="values" type="GLfloat *" output="true" variable_param="map"/>
-        <glx sop="125"/>
-    </function>
-
-    <function name="GetPixelMapuiv" offset="272">
-        <param name="map" type="GLenum"/>
-        <param name="values" type="GLuint *" output="true" variable_param="map"/>
-        <glx sop="126"/>
-    </function>
-
-    <function name="GetPixelMapusv" offset="273">
-        <param name="map" type="GLenum"/>
-        <param name="values" type="GLushort *" output="true" variable_param="map"/>
-        <glx sop="127"/>
-    </function>
-
-    <function name="GetPolygonStipple" offset="274">
-        <param name="mask" type="GLubyte *" output="true" img_width="32" img_height="32" img_format="GL_COLOR_INDEX" img_type="GL_BITMAP"/>
-        <glx sop="128"/>
-    </function>
-
-    <function name="GetString" offset="275">
-        <param name="name" type="GLenum"/>
-        <return type="const GLubyte *"/>
-        <glx sop="129" handcode="true"/>
-    </function>
-
-    <function name="GetTexEnvfv" offset="276">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
-        <glx sop="130"/>
-    </function>
-
-    <function name="GetTexEnviv" offset="277">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true" variable_param="pname"/>
-        <glx sop="131"/>
-    </function>
-
-    <function name="GetTexGendv" offset="278">
-        <param name="coord" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLdouble *" output="true" variable_param="pname"/>
-        <glx sop="132"/>
-    </function>
-
-    <function name="GetTexGenfv" offset="279">
-        <param name="coord" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
-        <glx sop="133"/>
-    </function>
-
-    <function name="GetTexGeniv" offset="280">
-        <param name="coord" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true" variable_param="pname"/>
-        <glx sop="134"/>
-    </function>
-
-    <function name="GetTexImage" offset="281">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="pixels" type="GLvoid *" output="true" img_width="width" img_height="height" img_depth="depth" img_format="format" img_type="type"/>
-        <glx sop="135" dimensions_in_reply="true"/>
-    </function>
-
-    <function name="GetTexParameterfv" offset="282">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
-        <glx sop="136"/>
-    </function>
-
-    <function name="GetTexParameteriv" offset="283">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true" variable_param="pname"/>
-        <glx sop="137"/>
-    </function>
-
-    <function name="GetTexLevelParameterfv" offset="284">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
-        <glx sop="138"/>
-    </function>
-
-    <function name="GetTexLevelParameteriv" offset="285">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true" variable_param="pname"/>
-        <glx sop="139"/>
-    </function>
-
-    <function name="IsEnabled" offset="286">
-        <param name="cap" type="GLenum"/>
-        <return type="GLboolean"/>
-        <glx sop="140" handcode="client"/>
-    </function>
-
-    <function name="IsList" offset="287">
-        <param name="list" type="GLuint"/>
-        <return type="GLboolean"/>
-        <glx sop="141"/>
-    </function>
-
-    <function name="DepthRange" offset="288">
-        <param name="zNear" type="GLclampd"/>
-        <param name="zFar" type="GLclampd"/>
-        <glx rop="174"/>
-    </function>
-
-    <function name="Frustum" offset="289">
-        <param name="left" type="GLdouble"/>
-        <param name="right" type="GLdouble"/>
-        <param name="bottom" type="GLdouble"/>
-        <param name="top" type="GLdouble"/>
-        <param name="zNear" type="GLdouble"/>
-        <param name="zFar" type="GLdouble"/>
-        <glx rop="175"/>
-    </function>
-
-    <function name="LoadIdentity" offset="290">
-        <glx rop="176"/>
-    </function>
-
-    <function name="LoadMatrixf" offset="291">
-        <param name="m" type="const GLfloat *" count="16"/>
-        <glx rop="177"/>
-    </function>
-
-    <function name="LoadMatrixd" offset="292">
-        <param name="m" type="const GLdouble *" count="16"/>
-        <glx rop="178"/>
-    </function>
-
-    <function name="MatrixMode" offset="293">
-        <param name="mode" type="GLenum"/>
-        <glx rop="179"/>
-    </function>
-
-    <function name="MultMatrixf" offset="294">
-        <param name="m" type="const GLfloat *" count="16"/>
-        <glx rop="180"/>
-    </function>
-
-    <function name="MultMatrixd" offset="295">
-        <param name="m" type="const GLdouble *" count="16"/>
-        <glx rop="181"/>
-    </function>
-
-    <function name="Ortho" offset="296">
-        <param name="left" type="GLdouble"/>
-        <param name="right" type="GLdouble"/>
-        <param name="bottom" type="GLdouble"/>
-        <param name="top" type="GLdouble"/>
-        <param name="zNear" type="GLdouble"/>
-        <param name="zFar" type="GLdouble"/>
-        <glx rop="182"/>
-    </function>
-
-    <function name="PopMatrix" offset="297">
-        <glx rop="183"/>
-    </function>
-
-    <function name="PushMatrix" offset="298">
-        <glx rop="184"/>
-    </function>
-
-    <function name="Rotated" offset="299">
-        <param name="angle" type="GLdouble"/>
-        <param name="x" type="GLdouble"/>
-        <param name="y" type="GLdouble"/>
-        <param name="z" type="GLdouble"/>
-        <glx rop="185"/>
-    </function>
-
-    <function name="Rotatef" offset="300">
-        <param name="angle" type="GLfloat"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-        <glx rop="186"/>
-    </function>
-
-    <function name="Scaled" offset="301">
-        <param name="x" type="GLdouble"/>
-        <param name="y" type="GLdouble"/>
-        <param name="z" type="GLdouble"/>
-        <glx rop="187"/>
-    </function>
-
-    <function name="Scalef" offset="302">
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-        <glx rop="188"/>
-    </function>
-
-    <function name="Translated" offset="303">
-        <param name="x" type="GLdouble"/>
-        <param name="y" type="GLdouble"/>
-        <param name="z" type="GLdouble"/>
-        <glx rop="189"/>
-    </function>
-
-    <function name="Translatef" offset="304">
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-        <glx rop="190"/>
-    </function>
-
-    <function name="Viewport" offset="305">
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-        <glx rop="191"/>
-    </function>
-</category>
-
-<category name="1.1">
-    <enum name="INDEX_LOGIC_OP"                           value="0x0BF1"/>
-    <enum name="COLOR_LOGIC_OP"                           value="0x0BF2"/>
-    <enum name="TEXTURE_INTERNAL_FORMAT"                  value="0x1003"/>
-    <enum name="DOUBLE"                                   value="0x140A"/>
-    <enum name="POLYGON_OFFSET_UNITS"          count="1"  value="0x2A00">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POLYGON_OFFSET_POINT"                     value="0x2A01"/>
-    <enum name="POLYGON_OFFSET_LINE"                      value="0x2A02"/>
-    <enum name="R3_G3_B2"                                 value="0x2A10"/>
-    <enum name="V2F"                                      value="0x2A20"/>
-    <enum name="V3F"                                      value="0x2A21"/>
-    <enum name="C4UB_V2F"                                 value="0x2A22"/>
-    <enum name="C4UB_V3F"                                 value="0x2A23"/>
-    <enum name="C3F_V3F"                                  value="0x2A24"/>
-    <enum name="N3F_V3F"                                  value="0x2A25"/>
-    <enum name="C4F_N3F_V3F"                              value="0x2A26"/>
-    <enum name="T2F_V3F"                                  value="0x2A27"/>
-    <enum name="T4F_V4F"                                  value="0x2A28"/>
-    <enum name="T2F_C4UB_V3F"                             value="0x2A29"/>
-    <enum name="T2F_C3F_V3F"                              value="0x2A2A"/>
-    <enum name="T2F_N3F_V3F"                              value="0x2A2B"/>
-    <enum name="T2F_C4F_N3F_V3F"                          value="0x2A2C"/>
-    <enum name="T4F_C4F_N3F_V4F"                          value="0x2A2D"/>
-    <enum name="POLYGON_OFFSET_FILL"                      value="0x8037"/>
-    <enum name="POLYGON_OFFSET_FACTOR"         count="1"  value="0x8038">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POLYGON_OFFSET_BIAS"                      value="0x8039"/>
-    <enum name="ALPHA4"                                   value="0x803B"/>
-    <enum name="ALPHA8"                                   value="0x803C"/>
-    <enum name="ALPHA12"                                  value="0x803D"/>
-    <enum name="ALPHA16"                                  value="0x803E"/>
-    <enum name="LUMINANCE4"                               value="0x803F"/>
-    <enum name="LUMINANCE8"                               value="0x8040"/>
-    <enum name="LUMINANCE12"                              value="0x8041"/>
-    <enum name="LUMINANCE16"                              value="0x8042"/>
-    <enum name="LUMINANCE4_ALPHA4"                        value="0x8043"/>
-    <enum name="LUMINANCE6_ALPHA2"                        value="0x8044"/>
-    <enum name="LUMINANCE8_ALPHA8"                        value="0x8045"/>
-    <enum name="LUMINANCE12_ALPHA4"                       value="0x8046"/>
-    <enum name="LUMINANCE12_ALPHA12"                      value="0x8047"/>
-    <enum name="LUMINANCE16_ALPHA16"                      value="0x8048"/>
-    <enum name="INTENSITY"                                value="0x8049"/>
-    <enum name="INTENSITY4"                               value="0x804A"/>
-    <enum name="INTENSITY8"                               value="0x804B"/>
-    <enum name="INTENSITY12"                              value="0x804C"/>
-    <enum name="INTENSITY16"                              value="0x804D"/>
-    <enum name="RGB4"                                     value="0x804F"/>
-    <enum name="RGB5"                                     value="0x8050"/>
-    <enum name="RGB8"                                     value="0x8051"/>
-    <enum name="RGB10"                                    value="0x8052"/>
-    <enum name="RGB12"                                    value="0x8053"/>
-    <enum name="RGB16"                                    value="0x8054"/>
-    <enum name="RGBA2"                                    value="0x8055"/>
-    <enum name="RGBA4"                                    value="0x8056"/>
-    <enum name="RGB5_A1"                                  value="0x8057"/>
-    <enum name="RGBA8"                                    value="0x8058"/>
-    <enum name="RGB10_A2"                                 value="0x8059"/>
-    <enum name="RGBA12"                                   value="0x805A"/>
-    <enum name="RGBA16"                                   value="0x805B"/>
-    <enum name="TEXTURE_RED_SIZE"              count="1"  value="0x805C">
-        <size name="GetTexLevelParameterfv" mode="get"/>
-        <size name="GetTexLevelParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_GREEN_SIZE"            count="1"  value="0x805D">
-        <size name="GetTexLevelParameterfv" mode="get"/>
-        <size name="GetTexLevelParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_BLUE_SIZE"             count="1"  value="0x805E">
-        <size name="GetTexLevelParameterfv" mode="get"/>
-        <size name="GetTexLevelParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_ALPHA_SIZE"            count="1"  value="0x805F">
-        <size name="GetTexLevelParameterfv" mode="get"/>
-        <size name="GetTexLevelParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_LUMINANCE_SIZE"        count="1"  value="0x8060">
-        <size name="GetTexLevelParameterfv" mode="get"/>
-        <size name="GetTexLevelParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_INTENSITY_SIZE"        count="1"  value="0x8061">
-        <size name="GetTexLevelParameterfv" mode="get"/>
-        <size name="GetTexLevelParameteriv" mode="get"/>
-    </enum>
-    <enum name="PROXY_TEXTURE_1D"                         value="0x8063"/>
-    <enum name="PROXY_TEXTURE_2D"                         value="0x8064"/>
-    <enum name="TEXTURE_PRIORITY"              count="1"  value="0x8066">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_RESIDENT"              count="1"  value="0x8067">
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_BINDING_1D"            count="1"  value="0x8068">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_BINDING_2D"            count="1"  value="0x8069">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="VERTEX_ARRAY"                  count="1"  value="0x8074">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="NORMAL_ARRAY"                  count="1"  value="0x8075">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="COLOR_ARRAY"                   count="1"  value="0x8076">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="INDEX_ARRAY"                   count="1"  value="0x8077">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_COORD_ARRAY"           count="1"  value="0x8078">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="EDGE_FLAG_ARRAY"               count="1"  value="0x8079">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="VERTEX_ARRAY_SIZE"             count="1"  value="0x807A">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="VERTEX_ARRAY_TYPE"             count="1"  value="0x807B">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="VERTEX_ARRAY_STRIDE"           count="1"  value="0x807C">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="NORMAL_ARRAY_TYPE"             count="1"  value="0x807E">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="NORMAL_ARRAY_STRIDE"           count="1"  value="0x807F">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="COLOR_ARRAY_SIZE"              count="1"  value="0x8081">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="COLOR_ARRAY_TYPE"              count="1"  value="0x8082">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="COLOR_ARRAY_STRIDE"            count="1"  value="0x8083">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="INDEX_ARRAY_TYPE"              count="1"  value="0x8085">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="INDEX_ARRAY_STRIDE"            count="1"  value="0x8086">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_COORD_ARRAY_SIZE"      count="1"  value="0x8088">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_COORD_ARRAY_TYPE"      count="1"  value="0x8089">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_COORD_ARRAY_STRIDE"    count="1"  value="0x808A">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="EDGE_FLAG_ARRAY_STRIDE"        count="1"  value="0x808C">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="VERTEX_ARRAY_POINTER"                     value="0x808E"/>
-    <enum name="NORMAL_ARRAY_POINTER"                     value="0x808F"/>
-    <enum name="COLOR_ARRAY_POINTER"                      value="0x8090"/>
-    <enum name="INDEX_ARRAY_POINTER"                      value="0x8091"/>
-    <enum name="TEXTURE_COORD_ARRAY_POINTER"              value="0x8092"/>
-    <enum name="EDGE_FLAG_ARRAY_POINTER"                  value="0x8093"/>
-    <enum name="CLIENT_PIXEL_STORE_BIT"                   value="0x00000001"/>
-    <enum name="CLIENT_VERTEX_ARRAY_BIT"                  value="0x00000002"/>
-    <enum name="ALL_CLIENT_ATTRIB_BITS"                   value="0xFFFFFFFF"/>
-    <enum name="CLIENT_ALL_ATTRIB_BITS"                   value="0xFFFFFFFF"/>
-
-    <function name="ArrayElement" offset="306">
-        <param name="i" type="GLint"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="ColorPointer" offset="308">
-        <param name="size" type="GLint"/>
-        <param name="type" type="GLenum"/>
-        <param name="stride" type="GLsizei"/>
-        <param name="pointer" type="const GLvoid *"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="DisableClientState" offset="309">
-        <param name="array" type="GLenum"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="DrawArrays" offset="310">
-        <param name="mode" type="GLenum"/>
-        <param name="first" type="GLint"/>
-        <param name="count" type="GLsizei"/>
-        <glx rop="193" handcode="true"/>
-    </function>
-
-    <function name="DrawElements" offset="311">
-        <param name="mode" type="GLenum"/>
-        <param name="count" type="GLsizei"/>
-        <param name="type" type="GLenum"/>
-        <param name="indices" type="const GLvoid *"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="EdgeFlagPointer" offset="312">
-        <param name="stride" type="GLsizei"/>
-        <param name="pointer" type="const GLvoid *"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="EnableClientState" offset="313">
-        <param name="array" type="GLenum"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="GetPointerv" offset="329">
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLvoid **" output="true"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="IndexPointer" offset="314">
-        <param name="type" type="GLenum"/>
-        <param name="stride" type="GLsizei"/>
-        <param name="pointer" type="const GLvoid *"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="InterleavedArrays" offset="317">
-        <param name="format" type="GLenum"/>
-        <param name="stride" type="GLsizei"/>
-        <param name="pointer" type="const GLvoid *"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="NormalPointer" offset="318">
-        <param name="type" type="GLenum"/>
-        <param name="stride" type="GLsizei"/>
-        <param name="pointer" type="const GLvoid *"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="TexCoordPointer" offset="320">
-        <param name="size" type="GLint"/>
-        <param name="type" type="GLenum"/>
-        <param name="stride" type="GLsizei"/>
-        <param name="pointer" type="const GLvoid *"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="VertexPointer" offset="321">
-        <param name="size" type="GLint"/>
-        <param name="type" type="GLenum"/>
-        <param name="stride" type="GLsizei"/>
-        <param name="pointer" type="const GLvoid *"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="PolygonOffset" offset="319">
-        <param name="factor" type="GLfloat"/>
-        <param name="units" type="GLfloat"/>
-        <glx rop="192"/>
-    </function>
-
-    <function name="CopyTexImage1D" offset="323">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <param name="border" type="GLint"/>
-        <glx rop="4119"/>
-    </function>
-
-    <function name="CopyTexImage2D" offset="324">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-        <param name="border" type="GLint"/>
-        <glx rop="4120"/>
-    </function>
-
-    <function name="CopyTexSubImage1D" offset="325">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="xoffset" type="GLint"/>
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <glx rop="4121"/>
-    </function>
-
-    <function name="CopyTexSubImage2D" offset="326">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="xoffset" type="GLint"/>
-        <param name="yoffset" type="GLint"/>
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-        <glx rop="4122"/>
-    </function>
-
-    <function name="TexSubImage1D" offset="332">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="xoffset" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="UNUSED" type="GLuint" padding="true"/>
-        <param name="pixels" type="const GLvoid *" img_width="width" img_xoff="xoffset" img_format="format" img_type="type" img_target="target" img_pad_dimensions="true"/>
-        <glx rop="4099" large="true"/>
-    </function>
-
-    <function name="TexSubImage2D" offset="333">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="xoffset" type="GLint"/>
-        <param name="yoffset" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="UNUSED" type="GLuint" padding="true"/>
-        <param name="pixels" type="const GLvoid *" img_width="width" img_height="height" img_xoff="xoffset" img_yoff="yoffset" img_format="format" img_type="type" img_target="target" img_pad_dimensions="true"/>
-        <glx rop="4100" large="true"/>
-    </function>
-
-    <function name="AreTexturesResident" offset="322">
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="textures" type="const GLuint *" count="n"/>
-        <param name="residences" type="GLboolean *" output="true" count="n"/>
-        <return type="GLboolean"/>
-        <glx sop="143" handcode="client" always_array="true"/>
-    </function>
-
-    <function name="BindTexture" offset="307">
-        <param name="target" type="GLenum"/>
-        <param name="texture" type="GLuint"/>
-        <glx rop="4117"/>
-    </function>
-
-    <function name="DeleteTextures" offset="327">
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="textures" type="const GLuint *" count="n"/>
-        <glx sop="144"/>
-    </function>
-
-    <function name="GenTextures" offset="328">
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="textures" type="GLuint *" output="true" count="n"/>
-        <glx sop="145" always_array="true"/>
-    </function>
-
-    <function name="IsTexture" offset="330">
-        <param name="texture" type="GLuint"/>
-        <return type="GLboolean"/>
-        <glx sop="146"/>
-    </function>
-
-    <function name="PrioritizeTextures" offset="331">
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="textures" type="const GLuint *" count="n"/>
-        <param name="priorities" type="const GLclampf *" count="n"/>
-        <glx rop="4118"/>
-    </function>
-
-    <function name="Indexub" offset="315" vectorequiv="Indexubv">
-        <param name="c" type="GLubyte"/>
-    </function>
-
-    <function name="Indexubv" offset="316">
-        <param name="c" type="const GLubyte *" count="1"/>
-        <glx rop="194"/>
-    </function>
-
-    <function name="PopClientAttrib" offset="334">
-        <glx handcode="true"/>
-    </function>
-
-    <function name="PushClientAttrib" offset="335">
-        <param name="mask" type="GLbitfield"/>
-        <glx handcode="true"/>
-    </function>
-</category>
-
-<category name="1.2">
-    <enum name="UNSIGNED_BYTE_3_3_2"                      value="0x8032"/>
-    <enum name="UNSIGNED_SHORT_4_4_4_4"                   value="0x8033"/>
-    <enum name="UNSIGNED_SHORT_5_5_5_1"                   value="0x8034"/>
-    <enum name="UNSIGNED_INT_8_8_8_8"                     value="0x8035"/>
-    <enum name="UNSIGNED_INT_10_10_10_2"                  value="0x8036"/>
-    <enum name="RESCALE_NORMAL"                count="1"  value="0x803A">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_BINDING_3D"            count="1"  value="0x806A">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="PACK_SKIP_IMAGES"              count="1"  value="0x806B">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="PACK_IMAGE_HEIGHT"             count="1"  value="0x806C">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="UNPACK_SKIP_IMAGES"            count="1"  value="0x806D">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="UNPACK_IMAGE_HEIGHT"           count="1"  value="0x806E">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_3D"                    count="1"  value="0x806F">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="PROXY_TEXTURE_3D"                         value="0x8070"/>
-    <enum name="TEXTURE_DEPTH"                 count="1"  value="0x8071">
-        <size name="GetTexLevelParameterfv" mode="get"/>
-        <size name="GetTexLevelParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_WRAP_R"                count="1"  value="0x8072">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-    <enum name="MAX_3D_TEXTURE_SIZE"           count="1"  value="0x8073">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="UNSIGNED_BYTE_2_3_3_REV"                  value="0x8362"/>
-    <enum name="UNSIGNED_SHORT_5_6_5"                     value="0x8363"/>
-    <enum name="UNSIGNED_SHORT_5_6_5_REV"                 value="0x8364"/>
-    <enum name="UNSIGNED_SHORT_4_4_4_4_REV"               value="0x8365"/>
-    <enum name="UNSIGNED_SHORT_1_5_5_5_REV"               value="0x8366"/>
-    <enum name="UNSIGNED_INT_8_8_8_8_REV"                 value="0x8367"/>
-    <enum name="UNSIGNED_INT_2_10_10_10_REV"              value="0x8368"/>
-    <enum name="BGR"                                      value="0x80E0"/>
-    <enum name="BGRA"                                     value="0x80E1"/>
-    <enum name="MAX_ELEMENTS_VERTICES"         count="1"  value="0x80E8">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAX_ELEMENTS_INDICES"          count="1"  value="0x80E9">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="CLAMP_TO_EDGE"                            value="0x812F"/>
-    <enum name="TEXTURE_MIN_LOD"               count="1"  value="0x813A">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_MAX_LOD"               count="1"  value="0x813B">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_BASE_LEVEL"            count="1"  value="0x813C">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_MAX_LEVEL"             count="1"  value="0x813D">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-    <enum name="LIGHT_MODEL_COLOR_CONTROL"     count="1"  value="0x81F8">
-        <size name="LightModelfv"/>
-        <size name="LightModeliv"/>
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="SINGLE_COLOR"                             value="0x81F9"/>
-    <enum name="SEPARATE_SPECULAR_COLOR"                  value="0x81FA"/>
-    <enum name="SMOOTH_POINT_SIZE_RANGE"       count="2"  value="0x0B12">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="SMOOTH_POINT_SIZE_GRANULARITY" count="1"  value="0x0B13">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="SMOOTH_LINE_WIDTH_RANGE"       count="2"  value="0x0B22">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="SMOOTH_LINE_WIDTH_GRANULARITY" count="1"  value="0x0B23">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="ALIASED_POINT_SIZE_RANGE"      count="2"  value="0x846D">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="ALIASED_LINE_WIDTH_RANGE"      count="2"  value="0x846E">
-        <size name="Get" mode="get"/>
-    </enum>
-
-    <!-- These enums are actually part of the ARB_imaging subset. -->
-
-    <enum name="CONSTANT_COLOR"                           value="0x8001"/>
-    <enum name="ONE_MINUS_CONSTANT_COLOR"                 value="0x8002"/>
-    <enum name="CONSTANT_ALPHA"                           value="0x8003"/>
-    <enum name="ONE_MINUS_CONSTANT_ALPHA"                 value="0x8004"/>
-    <enum name="BLEND_COLOR"                   count="4"  value="0x8005">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="FUNC_ADD"                                 value="0x8006"/>
-    <enum name="MIN"                                      value="0x8007"/>
-    <enum name="MAX"                                      value="0x8008"/>
-    <enum name="BLEND_EQUATION"                count="1"  value="0x8009">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="FUNC_SUBTRACT"                            value="0x800A"/>
-    <enum name="FUNC_REVERSE_SUBTRACT"                    value="0x800B"/>
-    <enum name="CONVOLUTION_1D"                count="1"  value="0x8010">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="CONVOLUTION_2D"                count="1"  value="0x8011">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="SEPARABLE_2D"                  count="1"  value="0x8012">
-        <size name="Get" mode="get"/>
-    </enum>
-
-    <enum name="CONVOLUTION_BORDER_MODE"       count="1"  value="0x8013">
-        <size name="ConvolutionParameterfv"/>
-        <size name="ConvolutionParameteriv"/>
-        <size name="GetConvolutionParameterfv" mode="get"/>
-        <size name="GetConvolutionParameteriv" mode="get"/>
-    </enum>
-    <enum name="CONVOLUTION_BORDER_COLOR"      count="4"  value="0x8154">
-        <size name="ConvolutionParameterfv"/>
-        <size name="ConvolutionParameteriv"/>
-        <size name="GetConvolutionParameterfv" mode="get"/>
-        <size name="GetConvolutionParameteriv" mode="get"/>
-    </enum>
-    <enum name="CONVOLUTION_FILTER_SCALE"      count="4"  value="0x8014">
-        <size name="ConvolutionParameterfv"/>
-        <size name="ConvolutionParameteriv"/>
-        <size name="GetConvolutionParameterfv" mode="get"/>
-        <size name="GetConvolutionParameteriv" mode="get"/>
-    </enum>
-    <enum name="CONVOLUTION_FILTER_BIAS"       count="4"  value="0x8015">
-        <size name="ConvolutionParameterfv"/>
-        <size name="ConvolutionParameteriv"/>
-        <size name="GetConvolutionParameterfv" mode="get"/>
-        <size name="GetConvolutionParameteriv" mode="get"/>
-    </enum>
-    <enum name="REDUCE"                                   value="0x8016"/>
-    <enum name="CONVOLUTION_FORMAT"            count="1"  value="0x8017">
-        <size name="GetConvolutionParameterfv" mode="get"/>
-        <size name="GetConvolutionParameteriv" mode="get"/>
-    </enum>
-    <enum name="CONVOLUTION_WIDTH"             count="1"  value="0x8018">
-        <size name="GetConvolutionParameterfv" mode="get"/>
-        <size name="GetConvolutionParameteriv" mode="get"/>
-    </enum>
-    <enum name="CONVOLUTION_HEIGHT"            count="1"  value="0x8019">
-        <size name="GetConvolutionParameterfv" mode="get"/>
-        <size name="GetConvolutionParameteriv" mode="get"/>
-    </enum>
-    <enum name="MAX_CONVOLUTION_WIDTH"         count="1"  value="0x801A">
-        <size name="GetConvolutionParameterfv" mode="get"/>
-        <size name="GetConvolutionParameteriv" mode="get"/>
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAX_CONVOLUTION_HEIGHT"        count="1"  value="0x801B">
-        <size name="GetConvolutionParameterfv" mode="get"/>
-        <size name="GetConvolutionParameteriv" mode="get"/>
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POST_CONVOLUTION_RED_SCALE"    count="1"  value="0x801C">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POST_CONVOLUTION_GREEN_SCALE"  count="1"  value="0x801D">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POST_CONVOLUTION_BLUE_SCALE"   count="1"  value="0x801E">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POST_CONVOLUTION_ALPHA_SCALE"  count="1"  value="0x801F">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POST_CONVOLUTION_RED_BIAS"     count="1"  value="0x8020">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POST_CONVOLUTION_GREEN_BIAS"   count="1"  value="0x8021">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POST_CONVOLUTION_BLUE_BIAS"    count="1"  value="0x8022">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POST_CONVOLUTION_ALPHA_BIAS"   count="1"  value="0x8023">
-        <size name="Get" mode="get"/>
-    </enum>
-
-    <enum name="HISTOGRAM"                     count="1"  value="0x8024">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="PROXY_HISTOGRAM"                          value="0x8025"/>
-    <enum name="HISTOGRAM_WIDTH"               count="1"  value="0x8026">
-        <size name="GetHistogramParameterfv" mode="get"/>
-        <size name="GetHistogramParameteriv" mode="get"/>
-    </enum>
-    <enum name="HISTOGRAM_FORMAT"              count="1"  value="0x8027">
-        <size name="GetHistogramParameterfv" mode="get"/>
-        <size name="GetHistogramParameteriv" mode="get"/>
-    </enum>
-    <enum name="HISTOGRAM_RED_SIZE"            count="1"  value="0x8028">
-        <size name="GetHistogramParameterfv" mode="get"/>
-        <size name="GetHistogramParameteriv" mode="get"/>
-    </enum>
-    <enum name="HISTOGRAM_GREEN_SIZE"          count="1"  value="0x8029">
-        <size name="GetHistogramParameterfv" mode="get"/>
-        <size name="GetHistogramParameteriv" mode="get"/>
-    </enum>
-    <enum name="HISTOGRAM_BLUE_SIZE"           count="1"  value="0x802A">
-        <size name="GetHistogramParameterfv" mode="get"/>
-        <size name="GetHistogramParameteriv" mode="get"/>
-    </enum>
-    <enum name="HISTOGRAM_ALPHA_SIZE"          count="1"  value="0x802B">
-        <size name="GetHistogramParameterfv" mode="get"/>
-        <size name="GetHistogramParameteriv" mode="get"/>
-    </enum>
-    <enum name="HISTOGRAM_LUMINANCE_SIZE"      count="1"  value="0x802C">
-        <size name="GetHistogramParameterfv" mode="get"/>
-        <size name="GetHistogramParameteriv" mode="get"/>
-    </enum>
-    <enum name="HISTOGRAM_SINK"                count="1"  value="0x802D">
-        <size name="GetHistogramParameterfv" mode="get"/>
-        <size name="GetHistogramParameteriv" mode="get"/>
-    </enum>
-    <enum name="MINMAX"                        count="1"  value="0x802E">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MINMAX_FORMAT"                 count="1"  value="0x802F">
-        <size name="GetMinmaxParameterfv" mode="get"/>
-        <size name="GetMinmaxParameteriv" mode="get"/>
-    </enum>
-    <enum name="MINMAX_SINK"                   count="1"  value="0x8030">
-        <size name="GetMinmaxParameterfv" mode="get"/>
-        <size name="GetMinmaxParameteriv" mode="get"/>
-    </enum>
-
-    <enum name="COLOR_MATRIX"                  count="16" value="0x80B1">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="COLOR_MATRIX_STACK_DEPTH"      count="1"  value="0x80B2">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAX_COLOR_MATRIX_STACK_DEPTH"  count="1"  value="0x80B3">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POST_COLOR_MATRIX_RED_SCALE"   count="1"  value="0x80B4">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POST_COLOR_MATRIX_GREEN_SCALE" count="1"  value="0x80B5">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POST_COLOR_MATRIX_BLUE_SCALE"  count="1"  value="0x80B6">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POST_COLOR_MATRIX_ALPHA_SCALE" count="1"  value="0x80B7">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POST_COLOR_MATRIX_RED_BIAS"    count="1"  value="0x80B8">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POST_COLOR_MATRIX_GREEN_BIAS"  count="1"  value="0x80B9">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POST_COLOR_MATRIX_BLUE_BIAS"   count="1"  value="0x80BA">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POST_COLOR_MATRIX_ALPHA_BIAS"  count="1"  value="0x80BB">
-        <size name="Get" mode="get"/>
-    </enum>
-
-    <enum name="COLOR_TABLE"                   count="1"  value="0x80D0">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POST_CONVOLUTION_COLOR_TABLE"  count="1"  value="0x80D1">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POST_COLOR_MATRIX_COLOR_TABLE" count="1"  value="0x80D2">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="PROXY_COLOR_TABLE"                              value="0x80D3"/>
-    <enum name="PROXY_POST_CONVOLUTION_COLOR_TABLE"             value="0x80D4"/>
-    <enum name="PROXY_POST_COLOR_MATRIX_COLOR_TABLE"            value="0x80D5"/>
-
-    <enum name="COLOR_TABLE_SCALE"             count="4"  value="0x80D6">
-        <size name="ColorTableParameterfv"/>
-        <size name="ColorTableParameteriv"/>
-        <size name="GetColorTableParameterfv" mode="get"/>
-        <size name="GetColorTableParameteriv" mode="get"/>
-    </enum>
-    <enum name="COLOR_TABLE_BIAS"              count="4"  value="0x80D7">
-        <size name="ColorTableParameterfv"/>
-        <size name="ColorTableParameteriv"/>
-        <size name="GetColorTableParameterfv" mode="get"/>
-        <size name="GetColorTableParameteriv" mode="get"/>
-    </enum>
-    <enum name="COLOR_TABLE_FORMAT"            count="1"  value="0x80D8">
-        <size name="GetColorTableParameterfv" mode="get"/>
-        <size name="GetColorTableParameteriv" mode="get"/>
-    </enum>
-    <enum name="COLOR_TABLE_WIDTH"             count="1"  value="0x80D9">
-        <size name="GetColorTableParameterfv" mode="get"/>
-        <size name="GetColorTableParameteriv" mode="get"/>
-    </enum>
-    <enum name="COLOR_TABLE_RED_SIZE"          count="1"  value="0x80DA">
-        <size name="GetColorTableParameterfv" mode="get"/>
-        <size name="GetColorTableParameteriv" mode="get"/>
-    </enum>
-    <enum name="COLOR_TABLE_GREEN_SIZE"        count="1"  value="0x80DB">
-        <size name="GetColorTableParameterfv" mode="get"/>
-        <size name="GetColorTableParameteriv" mode="get"/>
-    </enum>
-    <enum name="COLOR_TABLE_BLUE_SIZE"         count="1"  value="0x80DC">
-        <size name="GetColorTableParameterfv" mode="get"/>
-        <size name="GetColorTableParameteriv" mode="get"/>
-    </enum>
-    <enum name="COLOR_TABLE_ALPHA_SIZE"        count="1"  value="0x80DD">
-        <size name="GetColorTableParameterfv" mode="get"/>
-        <size name="GetColorTableParameteriv" mode="get"/>
-    </enum>
-    <enum name="COLOR_TABLE_LUMINANCE_SIZE"    count="1"  value="0x80DE">
-        <size name="GetColorTableParameterfv" mode="get"/>
-        <size name="GetColorTableParameteriv" mode="get"/>
-    </enum>
-    <enum name="COLOR_TABLE_INTENSITY_SIZE"    count="1"  value="0x80DF">
-        <size name="GetColorTableParameterfv" mode="get"/>
-        <size name="GetColorTableParameteriv" mode="get"/>
-    </enum>
-
-
-    <function name="BlendColor" offset="336">
-        <param name="red" type="GLclampf"/>
-        <param name="green" type="GLclampf"/>
-        <param name="blue" type="GLclampf"/>
-        <param name="alpha" type="GLclampf"/>
-        <glx rop="4096"/>
-    </function>
-
-    <function name="BlendEquation" offset="337">
-        <param name="mode" type="GLenum"/>
-        <glx rop="4097"/>
-    </function>
-
-    <function name="DrawRangeElements" offset="338">
-        <param name="mode" type="GLenum"/>
-        <param name="start" type="GLuint"/>
-        <param name="end" type="GLuint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="type" type="GLenum"/>
-        <param name="indices" type="const GLvoid *"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="ColorTable" offset="339">
-        <param name="target" type="GLenum"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="width" type="GLsizei"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="table" type="const GLvoid *" img_width="width" img_pad_dimensions="false" img_format="format" img_type="type" img_target="target"/>
-        <glx rop="2053" large="true"/>
-    </function>
-
-    <function name="ColorTableParameterfv" offset="340">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLfloat *" variable_param="pname"/>
-        <glx rop="2054"/>
-    </function>
-
-    <function name="ColorTableParameteriv" offset="341">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLint *" variable_param="pname"/>
-        <glx rop="2055"/>
-    </function>
-
-    <function name="CopyColorTable" offset="342">
-        <param name="target" type="GLenum"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <glx rop="2056"/>
-    </function>
-
-    <function name="GetColorTable" offset="343">
-        <param name="target" type="GLenum"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="table" type="GLvoid *" output="true" img_width="width" img_format="format" img_type="type"/>
-        <glx sop="147" dimensions_in_reply="true"/>
-    </function>
-
-    <function name="GetColorTableParameterfv" offset="344">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
-        <glx sop="148"/>
-    </function>
-
-    <function name="GetColorTableParameteriv" offset="345">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true" variable_param="pname"/>
-        <glx sop="149"/>
-    </function>
-
-    <function name="ColorSubTable" offset="346">
-        <param name="target" type="GLenum"/>
-        <param name="start" type="GLsizei"/>
-        <param name="count" type="GLsizei"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="data" type="const GLvoid *" img_width="count" img_pad_dimensions="false" img_format="format" img_type="type" img_target="target"/>
-        <glx rop="195" large="true"/>
-    </function>
-
-    <function name="CopyColorSubTable" offset="347">
-        <param name="target" type="GLenum"/>
-        <param name="start" type="GLsizei"/>
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <glx rop="196"/>
-    </function>
-
-    <function name="ConvolutionFilter1D" offset="348">
-        <param name="target" type="GLenum"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="width" type="GLsizei"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="image" type="const GLvoid *" img_width="width" img_format="format" img_type="type" img_target="target" img_pad_dimensions="true"/>
-        <glx rop="4101" large="true"/>
-    </function>
-
-    <function name="ConvolutionFilter2D" offset="349">
-        <param name="target" type="GLenum"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="image" type="const GLvoid *" img_width="width" img_height="height" img_format="format" img_type="type" img_target="target" img_pad_dimensions="true"/>
-        <glx rop="4102" large="true"/>
-    </function>
-
-    <function name="ConvolutionParameterf" offset="350">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat"/>
-        <glx rop="4103"/>
-    </function>
-
-    <function name="ConvolutionParameterfv" offset="351">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLfloat *" variable_param="pname"/>
-        <glx rop="4104"/>
-    </function>
-
-    <function name="ConvolutionParameteri" offset="352">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint"/>
-        <glx rop="4105"/>
-    </function>
-
-    <function name="ConvolutionParameteriv" offset="353">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLint *" variable_param="pname"/>
-        <glx rop="4106"/>
-    </function>
-
-    <function name="CopyConvolutionFilter1D" offset="354">
-        <param name="target" type="GLenum"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <glx rop="4107"/>
-    </function>
-
-    <function name="CopyConvolutionFilter2D" offset="355">
-        <param name="target" type="GLenum"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-        <glx rop="4108"/>
-    </function>
-
-    <function name="GetConvolutionFilter" offset="356">
-        <param name="target" type="GLenum"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="image" type="GLvoid *" output="true" img_width="width" img_height="height" img_format="format" img_type="type"/>
-        <glx sop="150" dimensions_in_reply="true"/>
-    </function>
-
-    <function name="GetConvolutionParameterfv" offset="357">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
-        <glx sop="151"/>
-    </function>
-
-    <function name="GetConvolutionParameteriv" offset="358">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true" variable_param="pname"/>
-        <glx sop="152"/>
-    </function>
-
-    <function name="GetSeparableFilter" offset="359">
-        <param name="target" type="GLenum"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="row" type="GLvoid *" output="true"/>
-        <param name="column" type="GLvoid *" output="true"/>
-        <param name="span" type="GLvoid *" output="true"/>
-        <glx sop="153" handcode="true"/>
-    </function>
-
-    <function name="SeparableFilter2D" offset="360">
-        <param name="target" type="GLenum"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="row" type="const GLvoid *"/>
-        <param name="column" type="const GLvoid *"/>
-        <glx rop="4109" handcode="true"/>
-    </function>
-
-    <function name="GetHistogram" offset="361">
-        <param name="target" type="GLenum"/>
-        <param name="reset" type="GLboolean"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="values" type="GLvoid *" output="true" img_width="width" img_format="format" img_type="type"/>
-        <glx sop="154" dimensions_in_reply="true" img_reset="reset"/>
-    </function>
-
-    <function name="GetHistogramParameterfv" offset="362">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
-        <glx sop="155"/>
-    </function>
-
-    <function name="GetHistogramParameteriv" offset="363">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true" variable_param="pname"/>
-        <glx sop="156"/>
-    </function>
-
-    <function name="GetMinmax" offset="364">
-        <param name="target" type="GLenum"/>
-        <param name="reset" type="GLboolean"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="values" type="GLvoid *" output="true" img_width="2" img_format="format" img_type="type"/>
-        <glx sop="157" img_reset="reset"/>
-    </function>
-
-    <function name="GetMinmaxParameterfv" offset="365">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
-        <glx sop="158"/>
-    </function>
-
-    <function name="GetMinmaxParameteriv" offset="366">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true" variable_param="pname"/>
-        <glx sop="159"/>
-    </function>
-
-    <function name="Histogram" offset="367">
-        <param name="target" type="GLenum"/>
-        <param name="width" type="GLsizei"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="sink" type="GLboolean"/>
-        <glx rop="4110"/>
-    </function>
-
-    <function name="Minmax" offset="368">
-        <param name="target" type="GLenum"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="sink" type="GLboolean"/>
-        <glx rop="4111"/>
-    </function>
-
-    <function name="ResetHistogram" offset="369">
-        <param name="target" type="GLenum"/>
-        <glx rop="4112"/>
-    </function>
-
-    <function name="ResetMinmax" offset="370">
-        <param name="target" type="GLenum"/>
-        <glx rop="4113"/>
-    </function>
-
-    <function name="TexImage3D" offset="371">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="internalformat" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-        <param name="depth" type="GLsizei"/>
-        <param name="border" type="GLint"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="pixels" type="const GLvoid *" img_width="width" img_height="height" img_depth="depth" img_format="format" img_type="type" img_target="target" img_null_flag="true" img_pad_dimensions="true"/>
-        <glx rop="4114" large="true"/>
-    </function>
-
-    <function name="TexSubImage3D" offset="372">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="xoffset" type="GLint"/>
-        <param name="yoffset" type="GLint"/>
-        <param name="zoffset" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-        <param name="depth" type="GLsizei"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="UNUSED" type="GLuint" padding="true"/>
-        <param name="pixels" type="const GLvoid *" img_width="width" img_height="height" img_depth="depth" img_xoff="xoffset" img_yoff="yoffset" img_zoff="zoffset" img_format="format" img_type="type" img_target="target" img_pad_dimensions="true"/>
-        <glx rop="4115" large="true"/>
-    </function>
-
-    <function name="CopyTexSubImage3D" offset="373">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="xoffset" type="GLint"/>
-        <param name="yoffset" type="GLint"/>
-        <param name="zoffset" type="GLint"/>
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-        <glx rop="4123"/>
-    </function>
-</category>
-
-<category name="1.3">
-    <enum name="TEXTURE0"                                 value="0x84C0"/>
-    <enum name="TEXTURE1"                                 value="0x84C1"/>
-    <enum name="TEXTURE2"                                 value="0x84C2"/>
-    <enum name="TEXTURE3"                                 value="0x84C3"/>
-    <enum name="TEXTURE4"                                 value="0x84C4"/>
-    <enum name="TEXTURE5"                                 value="0x84C5"/>
-    <enum name="TEXTURE6"                                 value="0x84C6"/>
-    <enum name="TEXTURE7"                                 value="0x84C7"/>
-    <enum name="TEXTURE8"                                 value="0x84C8"/>
-    <enum name="TEXTURE9"                                 value="0x84C9"/>
-    <enum name="TEXTURE10"                                value="0x84CA"/>
-    <enum name="TEXTURE11"                                value="0x84CB"/>
-    <enum name="TEXTURE12"                                value="0x84CC"/>
-    <enum name="TEXTURE13"                                value="0x84CD"/>
-    <enum name="TEXTURE14"                                value="0x84CE"/>
-    <enum name="TEXTURE15"                                value="0x84CF"/>
-    <enum name="TEXTURE16"                                value="0x84D0"/>
-    <enum name="TEXTURE17"                                value="0x84D1"/>
-    <enum name="TEXTURE18"                                value="0x84D2"/>
-    <enum name="TEXTURE19"                                value="0x84D3"/>
-    <enum name="TEXTURE20"                                value="0x84D4"/>
-    <enum name="TEXTURE21"                                value="0x84D5"/>
-    <enum name="TEXTURE22"                                value="0x84D6"/>
-    <enum name="TEXTURE23"                                value="0x84D7"/>
-    <enum name="TEXTURE24"                                value="0x84D8"/>
-    <enum name="TEXTURE25"                                value="0x84D9"/>
-    <enum name="TEXTURE26"                                value="0x84DA"/>
-    <enum name="TEXTURE27"                                value="0x84DB"/>
-    <enum name="TEXTURE28"                                value="0x84DC"/>
-    <enum name="TEXTURE29"                                value="0x84DD"/>
-    <enum name="TEXTURE30"                                value="0x84DE"/>
-    <enum name="TEXTURE31"                                value="0x84DF"/>
-    <enum name="ACTIVE_TEXTURE"                count="1"  value="0x84E0">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="CLIENT_ACTIVE_TEXTURE"         count="1"  value="0x84E1">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAX_TEXTURE_UNITS"             count="1"  value="0x84E2">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="TRANSPOSE_MODELVIEW_MATRIX"               value="0x84E3"/>
-    <enum name="TRANSPOSE_PROJECTION_MATRIX"              value="0x84E4"/>
-    <enum name="TRANSPOSE_TEXTURE_MATRIX"                 value="0x84E5"/>
-    <enum name="TRANSPOSE_COLOR_MATRIX"                   value="0x84E6"/>
-    <enum name="MULTISAMPLE"                   count="1"  value="0x809D">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="SAMPLE_ALPHA_TO_COVERAGE"      count="1"  value="0x809E">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="SAMPLE_ALPHA_TO_ONE"           count="1"  value="0x809F">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="SAMPLE_COVERAGE"               count="1"  value="0x80A0">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="SAMPLE_BUFFERS"                count="1"  value="0x80A8">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="SAMPLES"                       count="1"  value="0x80A9">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="SAMPLE_COVERAGE_VALUE"         count="1"  value="0x80AA">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="SAMPLE_COVERAGE_INVERT"        count="1"  value="0x80AB">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MULTISAMPLE_BIT"                          value="0x20000000"/>
-    <enum name="NORMAL_MAP"                               value="0x8511"/>
-    <enum name="REFLECTION_MAP"                           value="0x8512"/>
-    <enum name="TEXTURE_CUBE_MAP"              count="1"  value="0x8513">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_BINDING_CUBE_MAP"      count="1"  value="0x8514">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_CUBE_MAP_POSITIVE_X"              value="0x8515"/>
-    <enum name="TEXTURE_CUBE_MAP_NEGATIVE_X"              value="0x8516"/>
-    <enum name="TEXTURE_CUBE_MAP_POSITIVE_Y"              value="0x8517"/>
-    <enum name="TEXTURE_CUBE_MAP_NEGATIVE_Y"              value="0x8518"/>
-    <enum name="TEXTURE_CUBE_MAP_POSITIVE_Z"              value="0x8519"/>
-    <enum name="TEXTURE_CUBE_MAP_NEGATIVE_Z"              value="0x851A"/>
-    <enum name="PROXY_TEXTURE_CUBE_MAP"                   value="0x851B"/>
-    <enum name="MAX_CUBE_MAP_TEXTURE_SIZE"     count="1"  value="0x851C">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="COMPRESSED_ALPHA"                         value="0x84E9"/>
-    <enum name="COMPRESSED_LUMINANCE"                     value="0x84EA"/>
-    <enum name="COMPRESSED_LUMINANCE_ALPHA"               value="0x84EB"/>
-    <enum name="COMPRESSED_INTENSITY"                     value="0x84EC"/>
-    <enum name="COMPRESSED_RGB"                           value="0x84ED"/>
-    <enum name="COMPRESSED_RGBA"                          value="0x84EE"/>
-    <enum name="TEXTURE_COMPRESSION_HINT"      count="1"  value="0x84EF">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_COMPRESSED_IMAGE_SIZE" count="1"  value="0x86A0">
-        <size name="GetTexLevelParameterfv" mode="get"/>
-        <size name="GetTexLevelParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_COMPRESSED"            count="1"  value="0x86A1">
-        <size name="GetTexLevelParameterfv" mode="get"/>
-        <size name="GetTexLevelParameteriv" mode="get"/>
-    </enum>
-    <enum name="NUM_COMPRESSED_TEXTURE_FORMATS" count="1" value="0x86A2">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="COMPRESSED_TEXTURE_FORMATS"    count="-1"  value="0x86A3">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="CLAMP_TO_BORDER"                          value="0x812D"/>
-    <enum name="COMBINE"                                  value="0x8570"/>
-    <enum name="COMBINE_RGB"                   count="1"  value="0x8571">
-        <size name="TexEnvfv"/>
-        <size name="TexEnviv"/>
-        <size name="GetTexEnvfv" mode="get"/>
-        <size name="GetTexEnviv" mode="get"/>
-    </enum>
-    <enum name="COMBINE_ALPHA"                 count="1"  value="0x8572">
-        <size name="TexEnvfv"/>
-        <size name="TexEnviv"/>
-        <size name="GetTexEnvfv" mode="get"/>
-        <size name="GetTexEnviv" mode="get"/>
-    </enum>
-    <enum name="SOURCE0_RGB"                   count="1"  value="0x8580">
-        <size name="TexEnvfv"/>
-        <size name="TexEnviv"/>
-        <size name="GetTexEnvfv" mode="get"/>
-        <size name="GetTexEnviv" mode="get"/>
-    </enum>
-    <enum name="SOURCE1_RGB"                   count="1"  value="0x8581">
-        <size name="TexEnvfv"/>
-        <size name="TexEnviv"/>
-        <size name="GetTexEnvfv" mode="get"/>
-        <size name="GetTexEnviv" mode="get"/>
-    </enum>
-    <enum name="SOURCE2_RGB"                   count="1"  value="0x8582">
-        <size name="TexEnvfv"/>
-        <size name="TexEnviv"/>
-        <size name="GetTexEnvfv" mode="get"/>
-        <size name="GetTexEnviv" mode="get"/>
-    </enum>
-    <enum name="SOURCE0_ALPHA"                 count="1"  value="0x8588">
-        <size name="TexEnvfv"/>
-        <size name="TexEnviv"/>
-        <size name="GetTexEnvfv" mode="get"/>
-        <size name="GetTexEnviv" mode="get"/>
-    </enum>
-    <enum name="SOURCE1_ALPHA"                 count="1"  value="0x8589">
-        <size name="TexEnvfv"/>
-        <size name="TexEnviv"/>
-        <size name="GetTexEnvfv" mode="get"/>
-        <size name="GetTexEnviv" mode="get"/>
-    </enum>
-    <enum name="SOURCE2_ALPHA"                 count="1"  value="0x858A">
-        <size name="TexEnvfv"/>
-        <size name="TexEnviv"/>
-        <size name="GetTexEnvfv" mode="get"/>
-        <size name="GetTexEnviv" mode="get"/>
-    </enum>
-    <enum name="OPERAND0_RGB"                  count="1"  value="0x8590">
-        <size name="TexEnvfv"/>
-        <size name="TexEnviv"/>
-        <size name="GetTexEnvfv" mode="get"/>
-        <size name="GetTexEnviv" mode="get"/>
-    </enum>
-    <enum name="OPERAND1_RGB"                  count="1"  value="0x8591">
-        <size name="TexEnvfv"/>
-        <size name="TexEnviv"/>
-        <size name="GetTexEnvfv" mode="get"/>
-        <size name="GetTexEnviv" mode="get"/>
-    </enum>
-    <enum name="OPERAND2_RGB"                  count="1"  value="0x8592">
-        <size name="TexEnvfv"/>
-        <size name="TexEnviv"/>
-        <size name="GetTexEnvfv" mode="get"/>
-        <size name="GetTexEnviv" mode="get"/>
-    </enum>
-    <enum name="OPERAND0_ALPHA"                count="1"  value="0x8598">
-        <size name="TexEnvfv"/>
-        <size name="TexEnviv"/>
-        <size name="GetTexEnvfv" mode="get"/>
-        <size name="GetTexEnviv" mode="get"/>
-    </enum>
-    <enum name="OPERAND1_ALPHA"                count="1"  value="0x8599">
-        <size name="TexEnvfv"/>
-        <size name="TexEnviv"/>
-        <size name="GetTexEnvfv" mode="get"/>
-        <size name="GetTexEnviv" mode="get"/>
-    </enum>
-    <enum name="OPERAND2_ALPHA"                count="1"  value="0x859A">
-        <size name="TexEnvfv"/>
-        <size name="TexEnviv"/>
-        <size name="GetTexEnvfv" mode="get"/>
-        <size name="GetTexEnviv" mode="get"/>
-    </enum>
-    <enum name="RGB_SCALE"                     count="1"  value="0x8573">
-        <size name="TexEnvfv"/>
-        <size name="TexEnviv"/>
-        <size name="GetTexEnvfv" mode="get"/>
-        <size name="GetTexEnviv" mode="get"/>
-    </enum>
-    <enum name="ADD_SIGNED"                               value="0x8574"/>
-    <enum name="INTERPOLATE"                              value="0x8575"/>
-    <enum name="SUBTRACT"                                 value="0x84E7"/>
-    <enum name="CONSTANT"                                 value="0x8576"/>
-    <enum name="PRIMARY_COLOR"                            value="0x8577"/>
-    <enum name="PREVIOUS"                                 value="0x8578"/>
-    <enum name="DOT3_RGB"                                 value="0x86AE"/>
-    <enum name="DOT3_RGBA"                                value="0x86AF"/>
-
-    <function name="ActiveTexture" alias="ActiveTextureARB">
-        <param name="texture" type="GLenum"/>
-    </function>
-
-    <function name="ClientActiveTexture" alias="ClientActiveTextureARB">
-        <param name="texture" type="GLenum"/>
-    </function>
-
-    <function name="MultiTexCoord1d" alias="MultiTexCoord1dARB">
-        <param name="target" type="GLenum"/>
-        <param name="s" type="GLdouble"/>
-    </function>
-
-    <function name="MultiTexCoord1dv" alias="MultiTexCoord1dvARB">
-        <param name="target" type="GLenum"/>
-        <param name="v" type="const GLdouble *"/>
-    </function>
-
-    <function name="MultiTexCoord1f" alias="MultiTexCoord1fARB">
-        <param name="target" type="GLenum"/>
-        <param name="s" type="GLfloat"/>
-    </function>
-
-    <function name="MultiTexCoord1fv" alias="MultiTexCoord1fvARB">
-        <param name="target" type="GLenum"/>
-        <param name="v" type="const GLfloat *"/>
-    </function>
-
-    <function name="MultiTexCoord1i" alias="MultiTexCoord1iARB">
-        <param name="target" type="GLenum"/>
-        <param name="s" type="GLint"/>
-    </function>
-
-    <function name="MultiTexCoord1iv" alias="MultiTexCoord1ivARB">
-        <param name="target" type="GLenum"/>
-        <param name="v" type="const GLint *"/>
-    </function>
-
-    <function name="MultiTexCoord1s" alias="MultiTexCoord1sARB">
-        <param name="target" type="GLenum"/>
-        <param name="s" type="GLshort"/>
-    </function>
-
-    <function name="MultiTexCoord1sv" alias="MultiTexCoord1svARB">
-        <param name="target" type="GLenum"/>
-        <param name="v" type="const GLshort *"/>
-    </function>
-
-    <function name="MultiTexCoord2d" alias="MultiTexCoord2dARB">
-        <param name="target" type="GLenum"/>
-        <param name="s" type="GLdouble"/>
-        <param name="t" type="GLdouble"/>
-    </function>
-
-    <function name="MultiTexCoord2dv" alias="MultiTexCoord2dvARB">
-        <param name="target" type="GLenum"/>
-        <param name="v" type="const GLdouble *"/>
-    </function>
-
-    <function name="MultiTexCoord2f" alias="MultiTexCoord2fARB">
-        <param name="target" type="GLenum"/>
-        <param name="s" type="GLfloat"/>
-        <param name="t" type="GLfloat"/>
-    </function>
-
-    <function name="MultiTexCoord2fv" alias="MultiTexCoord2fvARB">
-        <param name="target" type="GLenum"/>
-        <param name="v" type="const GLfloat *"/>
-    </function>
-
-    <function name="MultiTexCoord2i" alias="MultiTexCoord2iARB">
-        <param name="target" type="GLenum"/>
-        <param name="s" type="GLint"/>
-        <param name="t" type="GLint"/>
-    </function>
-
-    <function name="MultiTexCoord2iv" alias="MultiTexCoord2ivARB">
-        <param name="target" type="GLenum"/>
-        <param name="v" type="const GLint *"/>
-    </function>
-
-    <function name="MultiTexCoord2s" alias="MultiTexCoord2sARB">
-        <param name="target" type="GLenum"/>
-        <param name="s" type="GLshort"/>
-        <param name="t" type="GLshort"/>
-    </function>
-
-    <function name="MultiTexCoord2sv" alias="MultiTexCoord2svARB">
-        <param name="target" type="GLenum"/>
-        <param name="v" type="const GLshort *"/>
-    </function>
-
-    <function name="MultiTexCoord3d" alias="MultiTexCoord3dARB">
-        <param name="target" type="GLenum"/>
-        <param name="s" type="GLdouble"/>
-        <param name="t" type="GLdouble"/>
-        <param name="r" type="GLdouble"/>
-    </function>
-
-    <function name="MultiTexCoord3dv" alias="MultiTexCoord3dvARB">
-        <param name="target" type="GLenum"/>
-        <param name="v" type="const GLdouble *"/>
-    </function>
-
-    <function name="MultiTexCoord3f" alias="MultiTexCoord3fARB">
-        <param name="target" type="GLenum"/>
-        <param name="s" type="GLfloat"/>
-        <param name="t" type="GLfloat"/>
-        <param name="r" type="GLfloat"/>
-    </function>
-
-    <function name="MultiTexCoord3fv" alias="MultiTexCoord3fvARB">
-        <param name="target" type="GLenum"/>
-        <param name="v" type="const GLfloat *"/>
-    </function>
-
-    <function name="MultiTexCoord3i" alias="MultiTexCoord3iARB">
-        <param name="target" type="GLenum"/>
-        <param name="s" type="GLint"/>
-        <param name="t" type="GLint"/>
-        <param name="r" type="GLint"/>
-    </function>
-
-    <function name="MultiTexCoord3iv" alias="MultiTexCoord3ivARB">
-        <param name="target" type="GLenum"/>
-        <param name="v" type="const GLint *"/>
-    </function>
-
-    <function name="MultiTexCoord3s" alias="MultiTexCoord3sARB">
-        <param name="target" type="GLenum"/>
-        <param name="s" type="GLshort"/>
-        <param name="t" type="GLshort"/>
-        <param name="r" type="GLshort"/>
-    </function>
-
-    <function name="MultiTexCoord3sv" alias="MultiTexCoord3svARB">
-        <param name="target" type="GLenum"/>
-        <param name="v" type="const GLshort *"/>
-    </function>
-
-    <function name="MultiTexCoord4d" alias="MultiTexCoord4dARB">
-        <param name="target" type="GLenum"/>
-        <param name="s" type="GLdouble"/>
-        <param name="t" type="GLdouble"/>
-        <param name="r" type="GLdouble"/>
-        <param name="q" type="GLdouble"/>
-    </function>
-
-    <function name="MultiTexCoord4dv" alias="MultiTexCoord4dvARB">
-        <param name="target" type="GLenum"/>
-        <param name="v" type="const GLdouble *"/>
-    </function>
-
-    <function name="MultiTexCoord4f" alias="MultiTexCoord4fARB">
-        <param name="target" type="GLenum"/>
-        <param name="s" type="GLfloat"/>
-        <param name="t" type="GLfloat"/>
-        <param name="r" type="GLfloat"/>
-        <param name="q" type="GLfloat"/>
-    </function>
-
-    <function name="MultiTexCoord4fv" alias="MultiTexCoord4fvARB">
-        <param name="target" type="GLenum"/>
-        <param name="v" type="const GLfloat *"/>
-    </function>
-
-    <function name="MultiTexCoord4i" alias="MultiTexCoord4iARB">
-        <param name="target" type="GLenum"/>
-        <param name="s" type="GLint"/>
-        <param name="t" type="GLint"/>
-        <param name="r" type="GLint"/>
-        <param name="q" type="GLint"/>
-    </function>
-
-    <function name="MultiTexCoord4iv" alias="MultiTexCoord4ivARB">
-        <param name="target" type="GLenum"/>
-        <param name="v" type="const GLint *"/>
-    </function>
-
-    <function name="MultiTexCoord4s" alias="MultiTexCoord4sARB">
-        <param name="target" type="GLenum"/>
-        <param name="s" type="GLshort"/>
-        <param name="t" type="GLshort"/>
-        <param name="r" type="GLshort"/>
-        <param name="q" type="GLshort"/>
-    </function>
-
-    <function name="MultiTexCoord4sv" alias="MultiTexCoord4svARB">
-        <param name="target" type="GLenum"/>
-        <param name="v" type="const GLshort *"/>
-    </function>
-
-    <function name="LoadTransposeMatrixf" alias="LoadTransposeMatrixfARB">
-        <param name="m" type="const GLfloat *"/>
-    </function>
-
-    <function name="LoadTransposeMatrixd" alias="LoadTransposeMatrixdARB">
-        <param name="m" type="const GLdouble *"/>
-    </function>
-
-    <function name="MultTransposeMatrixf" alias="MultTransposeMatrixfARB">
-        <param name="m" type="const GLfloat *"/>
-    </function>
-
-    <function name="MultTransposeMatrixd" alias="MultTransposeMatrixdARB">
-        <param name="m" type="const GLdouble *"/>
-    </function>
-
-    <function name="SampleCoverage" alias="SampleCoverageARB">
-        <param name="value" type="GLclampf"/>
-        <param name="invert" type="GLboolean"/>
-    </function>
-
-    <function name="CompressedTexImage3D" alias="CompressedTexImage3DARB">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-        <param name="depth" type="GLsizei"/>
-        <param name="border" type="GLint"/>
-        <param name="imageSize" type="GLsizei"/>
-        <param name="data" type="const GLvoid *"/>
-    </function>
-
-    <function name="CompressedTexImage2D" alias="CompressedTexImage2DARB">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-        <param name="border" type="GLint"/>
-        <param name="imageSize" type="GLsizei"/>
-        <param name="data" type="const GLvoid *"/>
-    </function>
-
-    <function name="CompressedTexImage1D" alias="CompressedTexImage1DARB">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="width" type="GLsizei"/>
-        <param name="border" type="GLint"/>
-        <param name="imageSize" type="GLsizei"/>
-        <param name="data" type="const GLvoid *"/>
-    </function>
-
-    <function name="CompressedTexSubImage3D" alias="CompressedTexSubImage3DARB">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="xoffset" type="GLint"/>
-        <param name="yoffset" type="GLint"/>
-        <param name="zoffset" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-        <param name="depth" type="GLsizei"/>
-        <param name="format" type="GLenum"/>
-        <param name="imageSize" type="GLsizei"/>
-        <param name="data" type="const GLvoid *"/>
-    </function>
-
-    <function name="CompressedTexSubImage2D" alias="CompressedTexSubImage2DARB">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="xoffset" type="GLint"/>
-        <param name="yoffset" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-        <param name="format" type="GLenum"/>
-        <param name="imageSize" type="GLsizei"/>
-        <param name="data" type="const GLvoid *"/>
-    </function>
-
-    <function name="CompressedTexSubImage1D" alias="CompressedTexSubImage1DARB">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="xoffset" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <param name="format" type="GLenum"/>
-        <param name="imageSize" type="GLsizei"/>
-        <param name="data" type="const GLvoid *"/>
-    </function>
-
-    <function name="GetCompressedTexImage" alias="GetCompressedTexImageARB">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="img" type="GLvoid *" output="true"/>
-    </function>
-</category>
-
-<category name="1.4">
-    <enum name="BLEND_DST_RGB"                 count="1"  value="0x80C8">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="BLEND_SRC_RGB"                 count="1"  value="0x80C9">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="BLEND_DST_ALPHA"               count="1"  value="0x80CA">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="BLEND_SRC_ALPHA"               count="1"  value="0x80CB">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POINT_SIZE_MIN"                count="1"  value="0x8126">
-        <size name="PointParameterfvEXT"/>
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POINT_SIZE_MAX"                count="1"  value="0x8127">
-        <size name="PointParameterfvEXT"/>
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POINT_FADE_THRESHOLD_SIZE"     count="1"  value="0x8128">
-        <size name="PointParameterfvEXT"/>
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POINT_DISTANCE_ATTENUATION"    count="3"  value="0x8129">
-        <size name="PointParameterfvEXT"/>
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="GENERATE_MIPMAP"               count="1"  value="0x8191">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-    <enum name="GENERATE_MIPMAP_HINT"                     value="0x8192"/>
-    <enum name="DEPTH_COMPONENT16"                        value="0x81A5"/>
-    <enum name="DEPTH_COMPONENT24"                        value="0x81A6"/>
-    <enum name="DEPTH_COMPONENT32"                        value="0x81A7"/>
-    <enum name="MIRRORED_REPEAT"                          value="0x8370"/>
-    <enum name="FOG_COORDINATE_SOURCE"         count="1"  value="0x8450">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="FOG_COORDINATE"                           value="0x8451"/>
-    <enum name="FRAGMENT_DEPTH"                           value="0x8452"/>
-    <enum name="CURRENT_FOG_COORDINATE"        count="1"  value="0x8453">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="FOG_COORDINATE_ARRAY_TYPE"     count="1"  value="0x8454">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="FOG_COORDINATE_ARRAY_STRIDE"   count="1"  value="0x8455">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="FOG_COORDINATE_ARRAY_POINTER"             value="0x8456"/>
-    <enum name="FOG_COORDINATE_ARRAY"          count="1"  value="0x8457">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="COLOR_SUM"                                value="0x8458"/>
-    <enum name="CURRENT_SECONDARY_COLOR"       count="4"  value="0x8459">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="SECONDARY_COLOR_ARRAY_SIZE"    count="1"  value="0x845A">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="SECONDARY_COLOR_ARRAY_TYPE"    count="1"  value="0x845B">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="SECONDARY_COLOR_ARRAY_STRIDE"  count="1"  value="0x845C">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="SECONDARY_COLOR_ARRAY_POINTER"            value="0x845D"/>
-    <enum name="SECONDARY_COLOR_ARRAY"         count="1"  value="0x845E">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAX_TEXTURE_LOD_BIAS"          count="1"  value="0x84FD">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_FILTER_CONTROL"                   value="0x8500"/>
-    <enum name="TEXTURE_LOD_BIAS"              count="1"  value="0x8501">
-        <size name="TexEnvfv"/>
-        <size name="TexEnviv"/>
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexEnvfv" mode="get"/>
-        <size name="GetTexEnviv" mode="get"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-    <enum name="INCR_WRAP"                                value="0x8507"/>
-    <enum name="DECR_WRAP"                                value="0x8508"/>
-    <enum name="TEXTURE_DEPTH_SIZE"            count="1"  value="0x884A">
-        <size name="GetTexLevelParameterfv" mode="get"/>
-        <size name="GetTexLevelParameteriv" mode="get"/>
-    </enum>
-    <enum name="DEPTH_TEXTURE_MODE"            count="1"  value="0x884B">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_COMPARE_MODE"          count="1"  value="0x884C">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_COMPARE_FUNC"          count="1"  value="0x884D">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-    <enum name="COMPARE_R_TO_TEXTURE"                     value="0x884E"/>
-
-    <function name="BlendFuncSeparate" alias="BlendFuncSeparateEXT">
-        <param name="sfactorRGB" type="GLenum"/>
-        <param name="dfactorRGB" type="GLenum"/>
-        <param name="sfactorAlpha" type="GLenum"/>
-        <param name="dfactorAlpha" type="GLenum"/>
-    </function>
-
-    <function name="FogCoordf" alias="FogCoordfEXT">
-        <param name="coord" type="GLfloat"/>
-    </function>
-
-    <function name="FogCoordfv" alias="FogCoordfvEXT">
-        <param name="coord" type="const GLfloat *"/>
-    </function>
-
-    <function name="FogCoordd" alias="FogCoorddEXT">
-        <param name="coord" type="GLdouble"/>
-    </function>
-
-    <function name="FogCoorddv" alias="FogCoorddvEXT">
-        <param name="coord" type="const GLdouble *"/>
-    </function>
-
-    <function name="FogCoordPointer" alias="FogCoordPointerEXT">
-        <param name="type" type="GLenum"/>
-        <param name="stride" type="GLsizei"/>
-        <param name="pointer" type="const GLvoid *"/>
-    </function>
-
-    <function name="MultiDrawArrays" alias="MultiDrawArraysEXT">
-        <param name="mode" type="GLenum"/>
-        <param name="first" type="GLint *"/> <!-- Spec bug. Should be const. -->
-        <param name="count" type="GLsizei *"/> <!-- Spec bug. Should be const. -->
-        <param name="primcount" type="GLsizei"/>
-    </function>
-
-    <function name="MultiDrawElements" alias="MultiDrawElementsEXT">
-        <param name="mode" type="GLenum"/>
-        <param name="count" type="const GLsizei *"/>
-        <param name="type" type="GLenum"/>
-        <param name="indices" type="const GLvoid **"/>
-        <param name="primcount" type="GLsizei"/>
-    </function>
-
-    <function name="PointParameterf" alias="PointParameterfEXT">
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLfloat"/>
-    </function>
-
-    <function name="PointParameterfv" alias="PointParameterfvEXT">
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLfloat *"/>
-    </function>
-
-    <function name="PointParameteri" alias="PointParameteriNV">
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLint"/>
-    </function>
-
-    <function name="PointParameteriv" alias="PointParameterivNV">
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLint *"/>
-    </function>
-
-    <function name="SecondaryColor3b" alias="SecondaryColor3bEXT">
-        <param name="red" type="GLbyte"/>
-        <param name="green" type="GLbyte"/>
-        <param name="blue" type="GLbyte"/>
-    </function>
-
-    <function name="SecondaryColor3bv" alias="SecondaryColor3bvEXT">
-        <param name="v" type="const GLbyte *"/>
-    </function>
-
-    <function name="SecondaryColor3d" alias="SecondaryColor3dEXT">
-        <param name="red" type="GLdouble"/>
-        <param name="green" type="GLdouble"/>
-        <param name="blue" type="GLdouble"/>
-    </function>
-
-    <function name="SecondaryColor3dv" alias="SecondaryColor3dvEXT">
-        <param name="v" type="const GLdouble *"/>
-    </function>
-
-    <function name="SecondaryColor3f" alias="SecondaryColor3fEXT">
-        <param name="red" type="GLfloat"/>
-        <param name="green" type="GLfloat"/>
-        <param name="blue" type="GLfloat"/>
-    </function>
-
-    <function name="SecondaryColor3fv" alias="SecondaryColor3fvEXT">
-        <param name="v" type="const GLfloat *"/>
-    </function>
-
-    <function name="SecondaryColor3i" alias="SecondaryColor3iEXT">
-        <param name="red" type="GLint"/>
-        <param name="green" type="GLint"/>
-        <param name="blue" type="GLint"/>
-    </function>
-
-    <function name="SecondaryColor3iv" alias="SecondaryColor3ivEXT">
-        <param name="v" type="const GLint *"/>
-    </function>
-
-    <function name="SecondaryColor3s" alias="SecondaryColor3sEXT">
-        <param name="red" type="GLshort"/>
-        <param name="green" type="GLshort"/>
-        <param name="blue" type="GLshort"/>
-    </function>
-
-    <function name="SecondaryColor3sv" alias="SecondaryColor3svEXT">
-        <param name="v" type="const GLshort *"/>
-    </function>
-
-    <function name="SecondaryColor3ub" alias="SecondaryColor3ubEXT">
-        <param name="red" type="GLubyte"/>
-        <param name="green" type="GLubyte"/>
-        <param name="blue" type="GLubyte"/>
-    </function>
-
-    <function name="SecondaryColor3ubv" alias="SecondaryColor3ubvEXT">
-        <param name="v" type="const GLubyte *"/>
-    </function>
-
-    <function name="SecondaryColor3ui" alias="SecondaryColor3uiEXT">
-        <param name="red" type="GLuint"/>
-        <param name="green" type="GLuint"/>
-        <param name="blue" type="GLuint"/>
-    </function>
-
-    <function name="SecondaryColor3uiv" alias="SecondaryColor3uivEXT">
-        <param name="v" type="const GLuint *"/>
-    </function>
-
-    <function name="SecondaryColor3us" alias="SecondaryColor3usEXT">
-        <param name="red" type="GLushort"/>
-        <param name="green" type="GLushort"/>
-        <param name="blue" type="GLushort"/>
-    </function>
-
-    <function name="SecondaryColor3usv" alias="SecondaryColor3usvEXT">
-        <param name="v" type="const GLushort *"/>
-    </function>
-
-    <function name="SecondaryColorPointer" alias="SecondaryColorPointerEXT">
-        <param name="size" type="GLint"/>
-        <param name="type" type="GLenum"/>
-        <param name="stride" type="GLsizei"/>
-        <param name="pointer" type="const GLvoid *"/>
-    </function>
-
-    <function name="WindowPos2d" alias="WindowPos2dMESA">
-        <param name="x" type="GLdouble"/>
-        <param name="y" type="GLdouble"/>
-    </function>
-
-    <function name="WindowPos2dv" alias="WindowPos2dvMESA">
-        <param name="v" type="const GLdouble *"/>
-    </function>
-
-    <function name="WindowPos2f" alias="WindowPos2fMESA">
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-    </function>
-
-    <function name="WindowPos2fv" alias="WindowPos2fvMESA">
-        <param name="v" type="const GLfloat *"/>
-    </function>
-
-    <function name="WindowPos2i" alias="WindowPos2iMESA">
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-    </function>
-
-    <function name="WindowPos2iv" alias="WindowPos2ivMESA">
-        <param name="v" type="const GLint *"/>
-    </function>
-
-    <function name="WindowPos2s" alias="WindowPos2sMESA">
-        <param name="x" type="GLshort"/>
-        <param name="y" type="GLshort"/>
-    </function>
-
-    <function name="WindowPos2sv" alias="WindowPos2svMESA">
-        <param name="v" type="const GLshort *"/>
-    </function>
-
-    <function name="WindowPos3d" alias="WindowPos3dMESA">
-        <param name="x" type="GLdouble"/>
-        <param name="y" type="GLdouble"/>
-        <param name="z" type="GLdouble"/>
-    </function>
-
-    <function name="WindowPos3dv" alias="WindowPos3dvMESA">
-        <param name="v" type="const GLdouble *"/>
-    </function>
-
-    <function name="WindowPos3f" alias="WindowPos3fMESA">
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-    </function>
-
-    <function name="WindowPos3fv" alias="WindowPos3fvMESA">
-        <param name="v" type="const GLfloat *"/>
-    </function>
-
-    <function name="WindowPos3i" alias="WindowPos3iMESA">
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-        <param name="z" type="GLint"/>
-    </function>
-
-    <function name="WindowPos3iv" alias="WindowPos3ivMESA">
-        <param name="v" type="const GLint *"/>
-    </function>
-
-    <function name="WindowPos3s" alias="WindowPos3sMESA">
-        <param name="x" type="GLshort"/>
-        <param name="y" type="GLshort"/>
-        <param name="z" type="GLshort"/>
-    </function>
-
-    <function name="WindowPos3sv" alias="WindowPos3svMESA">
-        <param name="v" type="const GLshort *"/>
-    </function>
-</category>
-
-<category name="1.5">
-    <enum name="BUFFER_SIZE"                              value="0x8764"/>
-    <enum name="BUFFER_USAGE"                             value="0x8765"/>
-    <enum name="QUERY_COUNTER_BITS"                       value="0x8864"/>
-    <enum name="CURRENT_QUERY"                            value="0x8865"/>
-    <enum name="QUERY_RESULT"                             value="0x8866"/>
-    <enum name="QUERY_RESULT_AVAILABLE"                   value="0x8867"/>
-    <enum name="ARRAY_BUFFER"                             value="0x8892"/>
-    <enum name="ELEMENT_ARRAY_BUFFER"                     value="0x8893"/>
-    <enum name="ARRAY_BUFFER_BINDING"                     value="0x8894"/>
-    <enum name="ELEMENT_ARRAY_BUFFER_BINDING"             value="0x8895"/>
-    <enum name="VERTEX_ARRAY_BUFFER_BINDING"              value="0x8896"/>
-    <enum name="NORMAL_ARRAY_BUFFER_BINDING"              value="0x8897"/>
-    <enum name="COLOR_ARRAY_BUFFER_BINDING"               value="0x8898"/>
-    <enum name="INDEX_ARRAY_BUFFER_BINDING"               value="0x8899"/>
-    <enum name="TEXTURE_COORD_ARRAY_BUFFER_BINDING"       value="0x889A"/>
-    <enum name="EDGE_FLAG_ARRAY_BUFFER_BINDING"           value="0x889B"/>
-    <enum name="SECONDARY_COLOR_ARRAY_BUFFER_BINDING"     value="0x889C"/>
-    <enum name="FOG_COORDINATE_ARRAY_BUFFER_BINDING"      value="0x889D"/>
-    <enum name="WEIGHT_ARRAY_BUFFER_BINDING"              value="0x889E"/>
-    <enum name="VERTEX_ATTRIB_ARRAY_BUFFER_BINDING"       value="0x889F"/>
-    <enum name="READ_ONLY"                                value="0x88B8"/>
-    <enum name="WRITE_ONLY"                               value="0x88B9"/>
-    <enum name="READ_WRITE"                               value="0x88BA"/>
-    <enum name="BUFFER_ACCESS"                            value="0x88BB"/>
-    <enum name="BUFFER_MAPPED"                            value="0x88BC"/>
-    <enum name="BUFFER_MAP_POINTER"                       value="0x88BD"/>
-    <enum name="STREAM_DRAW"                              value="0x88E0"/>
-    <enum name="STREAM_READ"                              value="0x88E1"/>
-    <enum name="STREAM_COPY"                              value="0x88E2"/>
-    <enum name="STATIC_DRAW"                              value="0x88E4"/>
-    <enum name="STATIC_READ"                              value="0x88E5"/>
-    <enum name="STATIC_COPY"                              value="0x88E6"/>
-    <enum name="DYNAMIC_DRAW"                             value="0x88E8"/>
-    <enum name="DYNAMIC_READ"                             value="0x88E9"/>
-    <enum name="DYNAMIC_COPY"                             value="0x88EA"/>
-    <enum name="SAMPLES_PASSED"                count="1"  value="0x8914"/>
-    <enum name="FOG_COORD_SRC"                            value="0x8450">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="FOG_COORD"                                value="0x8451"/>
-    <enum name="CURRENT_FOG_COORD"             count="1"  value="0x8453">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="FOG_COORD_ARRAY_TYPE"          count="1"  value="0x8454">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="FOG_COORD_ARRAY_STRIDE"        count="1"  value="0x8455">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="FOG_COORD_ARRAY_POINTER"                  value="0x8456"/>
-    <enum name="FOG_COORD_ARRAY"               count="1"  value="0x8457">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="FOG_COORD_ARRAY_BUFFER_BINDING"           value="0x889D"/>
-    <enum name="SRC0_RGB"                                 value="0x8580"/>
-    <enum name="SRC1_RGB"                                 value="0x8581"/>
-    <enum name="SRC2_RGB"                                 value="0x8582"/>
-    <enum name="SRC0_ALPHA"                               value="0x8588"/>
-    <enum name="SRC1_ALPHA"                               value="0x8589"/>
-    <enum name="SRC2_ALPHA"                               value="0x858A"/>
-
-    <type name="intptr"   size="4"                  glx_name="CARD32"/>
-    <type name="sizeiptr" size="4"  unsigned="true" glx_name="CARD32"/>
-
-    <function name="BindBuffer" alias="BindBufferARB">
-        <param name="target" type="GLenum"/>
-        <param name="buffer" type="GLuint"/>
-    </function>
-
-    <function name="BufferData" alias="BufferDataARB">
-        <param name="target" type="GLenum"/>
-        <param name="size" type="GLsizeiptr"/>
-        <param name="data" type="const GLvoid *"/>
-        <param name="usage" type="GLenum"/>
-    </function>
-
-    <function name="BufferSubData" alias="BufferSubDataARB">
-        <param name="target" type="GLenum"/>
-        <param name="offset" type="GLintptr"/>
-        <param name="size" type="GLsizeiptr"/>
-        <param name="data" type="const GLvoid *"/>
-    </function>
-
-    <function name="DeleteBuffers" alias="DeleteBuffersARB">
-        <param name="n" type="GLsizei"/>
-        <param name="buffer" type="const GLuint *"/>
-    </function>
-
-    <function name="GenBuffers" alias="GenBuffersARB">
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="buffer" type="GLuint *" output="true" count="n"/>
-    </function>
-
-    <function name="GetBufferParameteriv" alias="GetBufferParameterivARB">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true" variable_param="pname"/>
-    </function>
-
-    <function name="GetBufferPointerv" alias="GetBufferPointervARB">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLvoid **" output="true"/>
-    </function>
-
-    <function name="GetBufferSubData" alias="GetBufferSubDataARB">
-        <param name="target" type="GLenum"/>
-        <param name="offset" type="GLintptr"/>
-        <param name="size" type="GLsizeiptr"/>
-        <param name="data" type="GLvoid *" output="true"/>
-    </function>
-
-    <function name="IsBuffer" alias="IsBufferARB">
-        <param name="buffer" type="GLuint"/>
-        <return type="GLboolean"/>
-    </function>
-
-    <function name="MapBuffer" alias="MapBufferARB">
-        <param name="target" type="GLenum"/>
-        <param name="access" type="GLenum"/>
-        <return type="GLvoid *"/>
-    </function>
-
-    <function name="UnmapBuffer" alias="UnmapBufferARB">
-        <param name="target" type="GLenum"/>
-        <return type="GLboolean"/>
-    </function>
-
-    <function name="GenQueries" alias="GenQueriesARB">
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="ids" type="GLuint *" output="true" count="n"/>
-    </function>
-
-    <function name="DeleteQueries" alias="DeleteQueriesARB">
-        <param name="n" type="GLsizei"/>
-        <param name="ids" type="const GLuint *"/>
-    </function>
-
-    <function name="IsQuery" alias="IsQueryARB">
-        <param name="id" type="GLuint"/>
-        <return type="GLboolean"/>
-    </function>
-
-    <function name="BeginQuery" alias="BeginQueryARB">
-        <param name="target" type="GLenum"/>
-        <param name="id" type="GLuint"/>
-    </function>
-
-    <function name="EndQuery" alias="EndQueryARB">
-        <param name="target" type="GLenum"/>
-    </function>
-
-    <function name="GetQueryiv" alias="GetQueryivARB">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true" variable_param="pname"/>
-    </function>
-
-    <function name="GetQueryObjectiv" alias="GetQueryObjectivARB">
-        <param name="id" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true" variable_param="pname"/>
-    </function>
-
-    <function name="GetQueryObjectuiv" alias="GetQueryObjectuivARB">
-        <param name="id" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLuint *" output="true" variable_param="pname"/>
-    </function>
-</category>
-
-
-<category name="2.0">
-    <!-- XXX some of the enums and functions probably need additional -->
-    <!-- flags/attributes. -->
-
-    <type name="char"   size="1" glx_name="CARD8"/>
-
-    <enum name="BLEND_EQUATION_RGB"            value="0x8009"/>
-    <enum name="VERTEX_ATTRIB_ARRAY_ENABLED"      value="0x8622"/>
-    <enum name="VERTEX_ATTRIB_ARRAY_SIZE"         value="0x8623"/>
-    <enum name="VERTEX_ATTRIB_ARRAY_STRIDE"       value="0x8624"/>
-    <enum name="VERTEX_ATTRIB_ARRAY_TYPE"         value="0x8625"/>
-    <enum name="CURRENT_VERTEX_ATTRIB"            value="0x8626"/>
-    <enum name="VERTEX_PROGRAM_POINT_SIZE"        value="0x8642"/>
-    <enum name="VERTEX_PROGRAM_TWO_SIDE"          value="0x8643"/>
-    <enum name="VERTEX_ATTRIB_ARRAY_POINTER"      value="0x8645"/>
-    <enum name="STENCIL_BACK_FUNC"                value="0x8800"/>
-    <enum name="STENCIL_BACK_FAIL"                value="0x8801"/>
-    <enum name="STENCIL_BACK_PASS_DEPTH_FAIL"     value="0x8802"/>
-    <enum name="STENCIL_BACK_PASS_DEPTH_PASS"     value="0x8803"/>
-    <enum name="MAX_DRAW_BUFFERS"                 value="0x8824"/>
-    <enum name="DRAW_BUFFER0"                     value="0x8825"/>
-    <enum name="DRAW_BUFFER1"                     value="0x8826"/>
-    <enum name="DRAW_BUFFER2"                     value="0x8827"/>
-    <enum name="DRAW_BUFFER3"                     value="0x8828"/>
-    <enum name="DRAW_BUFFER4"                     value="0x8829"/>
-    <enum name="DRAW_BUFFER5"                     value="0x882A"/>
-    <enum name="DRAW_BUFFER6"                     value="0x882B"/>
-    <enum name="DRAW_BUFFER7"                     value="0x882C"/>
-    <enum name="DRAW_BUFFER8"                     value="0x882D"/>
-    <enum name="DRAW_BUFFER9"                     value="0x882E"/>
-    <enum name="DRAW_BUFFER10"                    value="0x882F"/>
-    <enum name="DRAW_BUFFER11"                    value="0x8830"/>
-    <enum name="DRAW_BUFFER12"                    value="0x8831"/>
-    <enum name="DRAW_BUFFER13"                    value="0x8832"/>
-    <enum name="DRAW_BUFFER14"                    value="0x8833"/>
-    <enum name="DRAW_BUFFER15"                    value="0x8834"/>
-    <enum name="BLEND_EQUATION_ALPHA"             value="0x883D"/>
-    <enum name="POINT_SPRITE"                     value="0x8861"/>
-    <enum name="COORD_REPLACE"                    value="0x8862"/>
-    <enum name="MAX_VERTEX_ATTRIBS"               value="0x8869"/>
-    <enum name="VERTEX_ATTRIB_ARRAY_NORMALIZED"   value="0x886A"/>
-    <enum name="MAX_TEXTURE_COORDS"               value="0x8871"/>
-    <enum name="MAX_TEXTURE_IMAGE_UNITS"          value="0x8872"/>
-    <enum name="FRAGMENT_SHADER"                  value="0x8B30"/>
-    <enum name="VERTEX_SHADER"                    value="0x8B31"/>
-    <enum name="MAX_FRAGMENT_UNIFORM_COMPONENTS"  value="0x8B49"/>
-    <enum name="MAX_VERTEX_UNIFORM_COMPONENTS"    value="0x8B4A"/>
-    <enum name="MAX_VARYING_FLOATS"               value="0x8B4B"/>
-    <enum name="MAX_VERTEX_TEXTURE_IMAGE_UNITS"   value="0x8B4C"/>
-    <enum name="MAX_COMBINED_TEXTURE_IMAGE_UNITS" value="0x8B4D"/>
-    <enum name="SHADER_TYPE"                      value="0x8B4F"/>
-    <enum name="FLOAT_VEC2"                       value="0x8B50"/>
-    <enum name="FLOAT_VEC3"                       value="0x8B51"/>
-    <enum name="FLOAT_VEC4"                       value="0x8B52"/>
-    <enum name="INT_VEC2"                         value="0x8B53"/>
-    <enum name="INT_VEC3"                         value="0x8B54"/>
-    <enum name="INT_VEC4"                         value="0x8B55"/>
-    <enum name="BOOL"                             value="0x8B56"/>
-    <enum name="BOOL_VEC2"                        value="0x8B57"/>
-    <enum name="BOOL_VEC3"                        value="0x8B58"/>
-    <enum name="BOOL_VEC4"                        value="0x8B59"/>
-    <enum name="FLOAT_MAT2"                       value="0x8B5A"/>
-    <enum name="FLOAT_MAT3"                       value="0x8B5B"/>
-    <enum name="FLOAT_MAT4"                       value="0x8B5C"/>
-    <enum name="SAMPLER_1D"                       value="0x8B5D"/>
-    <enum name="SAMPLER_2D"                       value="0x8B5E"/>
-    <enum name="SAMPLER_3D"                       value="0x8B5F"/>
-    <enum name="SAMPLER_CUBE"                     value="0x8B60"/>
-    <enum name="SAMPLER_1D_SHADOW"                value="0x8B61"/>
-    <enum name="SAMPLER_2D_SHADOW"                value="0x8B62"/>
-    <enum name="DELETE_STATUS"                    value="0x8B80"/>
-    <enum name="COMPILE_STATUS"                   value="0x8B81"/>
-    <enum name="LINK_STATUS"                      value="0x8B82"/>
-    <enum name="VALIDATE_STATUS"                  value="0x8B83"/>
-    <enum name="INFO_LOG_LENGTH"                  value="0x8B84"/>
-    <enum name="ATTACHED_SHADERS"                 value="0x8B85"/>
-    <enum name="ACTIVE_UNIFORMS"                  value="0x8B86"/>
-    <enum name="ACTIVE_UNIFORM_MAX_LENGTH"        value="0x8B87"/>
-    <enum name="SHADER_SOURCE_LENGTH"             value="0x8B88"/>
-    <enum name="ACTIVE_ATTRIBUTES"                value="0x8B89"/>
-    <enum name="ACTIVE_ATTRIBUTE_MAX_LENGTH"      value="0x8B8A"/>
-    <enum name="FRAGMENT_SHADER_DERIVATIVE_HINT"  value="0x8B8B"/>
-    <enum name="SHADING_LANGUAGE_VERSION"         value="0x8B8C"/>
-    <enum name="CURRENT_PROGRAM"                  value="0x8B8D"/>
-    <enum name="POINT_SPRITE_COORD_ORIGIN" count="1"  value="0x8CA0">
-        <size name="PointParameterfvEXT"/>
-        <size name="PointParameterivNV"/>
-    </enum>
-    <enum name="LOWER_LEFT"                       value="0x8CA1"/>
-    <enum name="UPPER_LEFT"                       value="0x8CA2"/>
-    <enum name="STENCIL_BACK_REF"                 value="0x8CA3"/>
-    <enum name="STENCIL_BACK_VALUE_MASK"          value="0x8CA4"/>
-    <enum name="STENCIL_BACK_WRITEMASK"           value="0x8CA5"/>
-
-    <function name="BlendEquationSeparate" alias="BlendEquationSeparateEXT">
-        <param name="modeRGB" type="GLenum"/>
-        <param name="modeA" type="GLenum"/>
-    </function>
-
-    <function name="DrawBuffers" alias="DrawBuffersARB">
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="bufs" type="const GLenum *" count="n"/>
-    </function>
-
-    <function name="StencilFuncSeparate" offset="assign">
-        <param name="face" type="GLenum"/>
-        <param name="func" type="GLenum"/>
-        <param name="ref" type="GLint"/>
-        <param name="mask" type="GLuint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="StencilOpSeparate" offset="assign">
-        <param name="face" type="GLenum"/>
-        <param name="sfail" type="GLenum"/>
-        <param name="zfail" type="GLenum"/>
-        <param name="zpass" type="GLenum"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="StencilMaskSeparate" offset="assign">
-        <param name="face" type="GLenum"/>
-        <param name="mask" type="GLuint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="AttachShader" offset="assign">
-        <param name="program" type="GLuint"/>
-        <param name="shader" type="GLuint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="BindAttribLocation" alias="BindAttribLocationARB">
-        <param name="program" type="GLuint"/>
-        <param name="index" type="GLuint"/>
-        <param name="name" type="const GLchar *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="CompileShader" alias="CompileShaderARB">
-        <param name="shader" type="GLuint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="CreateProgram" offset="assign">
-        <return type="GLuint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="CreateShader" offset="assign">
-        <param name="type" type="GLenum"/>
-        <return type="GLuint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="DeleteProgram" offset="assign">
-        <param name="program" type="GLuint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="DeleteShader" offset="assign">
-        <param name="program" type="GLuint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="DetachShader" offset="assign">
-        <param name="program" type="GLuint"/>
-        <param name="shader" type="GLuint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="DisableVertexAttribArray" alias="DisableVertexAttribArrayARB">
-        <param name="index" type="GLuint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="EnableVertexAttribArray" alias="EnableVertexAttribArrayARB">
-        <param name="index" type="GLuint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetActiveAttrib" alias="GetActiveAttribARB">
-        <param name="program" type="GLuint"/>
-        <param name="index" type="GLuint"/>
-        <param name="bufSize" type="GLsizei "/>
-        <param name="length" type="GLsizei *" output="true"/>
-        <param name="size" type="GLint *" output="true"/>
-        <param name="type" type="GLenum *" output="true"/>
-        <param name="name" type="GLchar *" output="true"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetActiveUniform" alias="GetActiveUniformARB">
-        <param name="program" type="GLuint"/>
-        <param name="index" type="GLuint"/>
-        <param name="bufSize" type="GLsizei"/>
-        <param name="length" type="GLsizei *" output="true"/>
-        <param name="size" type="GLint *" output="true"/>
-        <param name="type" type="GLenum *" output="true"/>
-        <param name="name" type="GLchar *" output="true"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetAttachedShaders" offset="assign">
-        <param name="program" type="GLuint"/>
-        <param name="maxCount" type="GLsizei"/>
-        <param name="count" type="GLsizei *" output="true"/>
-        <param name="obj" type="GLuint *" output="true"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetAttribLocation" alias="GetAttribLocationARB">
-        <param name="program" type="GLuint"/>
-        <param name="name" type="const GLchar *"/>
-        <return type="GLint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetProgramiv" offset="assign">
-        <param name="program" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetProgramInfoLog" offset="assign">
-        <param name="program" type="GLuint"/>
-        <param name="bufSize" type="GLsizei"/>
-        <param name="length" type="GLsizei *"/>
-        <param name="infoLog" type="GLchar *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetShaderiv" offset="assign">
-        <param name="shader" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetShaderInfoLog" offset="assign">
-        <param name="shader" type="GLuint"/>
-        <param name="bufSize" type="GLsizei"/>
-        <param name="length" type="GLsizei *"/>
-        <param name="infoLog" type="GLchar *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetShaderSource" alias="GetShaderSourceARB">
-        <param name="shader" type="GLuint"/>
-        <param name="bufSize" type="GLsizei"/>
-        <param name="length" type="GLsizei *" output="true"/>
-        <param name="source" type="GLchar *" output="true"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetUniformLocation" alias="GetUniformLocationARB">
-        <param name="program" type="GLuint"/>
-        <param name="name" type="const GLchar *"/>
-        <return type="GLint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetUniformfv" alias="GetUniformfvARB">
-        <param name="program" type="GLuint"/>
-        <param name="location" type="GLint"/>
-        <param name="params" type="GLfloat *" output="true"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetUniformiv" alias="GetUniformivARB">
-        <param name="program" type="GLuint"/>
-        <param name="location" type="GLint"/>
-        <param name="params" type="GLint *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetVertexAttribdv" alias="GetVertexAttribdvARB">
-        <param name="index" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLdouble *" output="true" variable_param="pname"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetVertexAttribfv" alias="GetVertexAttribfvARB">
-        <param name="index" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetVertexAttribiv" alias="GetVertexAttribivARB">
-        <param name="index" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true" variable_param="pname"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetVertexAttribPointerv" alias="GetVertexAttribPointervNV">
-        <param name="index" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="pointer" type="GLvoid **" output="true"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="IsProgram" offset="assign">
-        <param name="program" type="GLuint"/>
-        <return type="GLboolean"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="IsShader" offset="assign">
-        <param name="shader" type="GLuint"/>
-        <return type="GLboolean"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="LinkProgram" alias="LinkProgramARB">
-        <param name="program" type="GLuint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="ShaderSource" alias="ShaderSourceARB">
-        <param name="shader" type="GLuint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="string" type="const GLchar **"/>
-        <param name="length" type="const GLint *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="UseProgram" alias="UseProgramObjectARB">
-        <param name="program" type="GLuint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="Uniform1f" alias="Uniform1fARB">
-        <param name="location" type="GLint"/>
-        <param name="v0" type="GLfloat"/>
-        <glx ignore="true"/>
-    </function>
-    <function name="Uniform2f" alias="Uniform2fARB">
-        <param name="location" type="GLint"/>
-        <param name="v0" type="GLfloat"/>
-        <param name="v1" type="GLfloat"/>
-        <glx ignore="true"/>
-    </function>
-    <function name="Uniform3f" alias="Uniform3fARB">
-        <param name="location" type="GLint"/>
-        <param name="v0" type="GLfloat"/>
-        <param name="v1" type="GLfloat"/>
-        <param name="v2" type="GLfloat"/>
-        <glx ignore="true"/>
-    </function>
-    <function name="Uniform4f" alias="Uniform4fARB">
-        <param name="location" type="GLint"/>
-        <param name="v0" type="GLfloat"/>
-        <param name="v1" type="GLfloat"/>
-        <param name="v2" type="GLfloat"/>
-        <param name="v3" type="GLfloat"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="Uniform1i" alias="Uniform1iARB">
-        <param name="location" type="GLint"/>
-        <param name="v0" type="GLint"/>
-        <glx ignore="true"/>
-    </function>
-    <function name="Uniform2i" alias="Uniform2iARB">
-        <param name="location" type="GLint"/>
-        <param name="v0" type="GLint"/>
-        <param name="v1" type="GLint"/>
-        <glx ignore="true"/>
-    </function>
-    <function name="Uniform3i" alias="Uniform3iARB">
-        <param name="location" type="GLint"/>
-        <param name="v0" type="GLint"/>
-        <param name="v1" type="GLint"/>
-        <param name="v2" type="GLint"/>
-        <glx ignore="true"/>
-    </function>
-    <function name="Uniform4i" alias="Uniform4iARB">
-        <param name="location" type="GLint"/>
-        <param name="v0" type="GLint"/>
-        <param name="v1" type="GLint"/>
-        <param name="v2" type="GLint"/>
-        <param name="v3" type="GLint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="Uniform1fv" alias="Uniform1fvARB">
-        <param name="location" type="GLint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="value" type="const GLfloat *"/>
-        <glx ignore="true"/>
-    </function>
-    <function name="Uniform2fv" alias="Uniform2fvARB">
-        <param name="location" type="GLint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="value" type="const GLfloat *"/>
-        <glx ignore="true"/>
-    </function>
-    <function name="Uniform3fv" alias="Uniform3fvARB">
-        <param name="location" type="GLint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="value" type="const GLfloat *"/>
-        <glx ignore="true"/>
-    </function>
-    <function name="Uniform4fv" alias="Uniform4fvARB">
-        <param name="location" type="GLint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="value" type="const GLfloat *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="Uniform1iv" alias="Uniform1ivARB">
-        <param name="location" type="GLint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="value" type="const GLint *"/>
-        <glx ignore="true"/>
-    </function>
-    <function name="Uniform2iv" alias="Uniform2ivARB">
-        <param name="location" type="GLint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="value" type="const GLint *"/>
-        <glx ignore="true"/>
-    </function>
-    <function name="Uniform3iv" alias="Uniform3ivARB">
-        <param name="location" type="GLint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="value" type="const GLint *"/>
-        <glx ignore="true"/>
-    </function>
-    <function name="Uniform4iv" alias="Uniform4ivARB">
-        <param name="location" type="GLint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="value" type="const GLint *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="UniformMatrix2fv" alias="UniformMatrix2fvARB">
-        <param name="location" type="GLint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="transpose" type="GLboolean"/>
-        <param name="value" type="const GLfloat *"/>
-        <glx ignore="true"/>
-    </function>
-    <function name="UniformMatrix3fv" alias="UniformMatrix3fvARB">
-        <param name="location" type="GLint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="transpose" type="GLboolean"/>
-        <param name="value" type="const GLfloat *"/>
-        <glx ignore="true"/>
-    </function>
-    <function name="UniformMatrix4fv" alias="UniformMatrix4fvARB">
-        <param name="location" type="GLint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="transpose" type="GLboolean"/>
-        <param name="value" type="const GLfloat *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="ValidateProgram" alias="ValidateProgramARB">
-        <param name="program" type="GLuint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="VertexAttrib1d" alias="VertexAttrib1dARB">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLdouble"/>
-    </function>
-    <function name="VertexAttrib1dv" alias="VertexAttrib1dvARB">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLdouble *"/>
-    </function>
-    <function name="VertexAttrib1f" alias="VertexAttrib1fARB">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLfloat"/>
-    </function>
-    <function name="VertexAttrib1fv" alias="VertexAttrib1fvARB">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLfloat *"/>
-    </function>
-    <function name="VertexAttrib1s" alias="VertexAttrib1sARB">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLshort"/>
-    </function>
-    <function name="VertexAttrib1sv" alias="VertexAttrib1svARB">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLshort *"/>
-    </function>
-
-    <function name="VertexAttrib2d" alias="VertexAttrib2dARB">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLdouble"/>
-        <param name="y" type="GLdouble"/>
-    </function>
-    <function name="VertexAttrib2dv" alias="VertexAttrib2dvARB">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLdouble *"/>
-    </function>
-    <function name="VertexAttrib2f" alias="VertexAttrib2fARB">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-    </function>
-    <function name="VertexAttrib2fv" alias="VertexAttrib2fvARB">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLfloat *"/>
-    </function>
-    <function name="VertexAttrib2s" alias="VertexAttrib2sARB">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLshort"/>
-        <param name="y" type="GLshort"/>
-    </function>
-    <function name="VertexAttrib2sv" alias="VertexAttrib2svARB">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLshort *"/>
-    </function>
-
-    <function name="VertexAttrib3d" alias="VertexAttrib3dARB">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLdouble"/>
-        <param name="y" type="GLdouble"/>
-        <param name="z" type="GLdouble"/>
-    </function>
-    <function name="VertexAttrib3dv" alias="VertexAttrib3dvARB">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLdouble *"/>
-    </function>
-    <function name="VertexAttrib3f" alias="VertexAttrib3fARB">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-    </function>
-    <function name="VertexAttrib3fv" alias="VertexAttrib3fvARB">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLfloat *"/>
-    </function>
-    <function name="VertexAttrib3s" alias="VertexAttrib3sARB">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLshort"/>
-        <param name="y" type="GLshort"/>
-        <param name="z" type="GLshort"/>
-    </function>
-    <function name="VertexAttrib3sv" alias="VertexAttrib3svARB">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLshort *"/>
-    </function>
-
-    <function name="VertexAttrib4Nbv" alias="VertexAttrib4NbvARB">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLbyte *"/>
-    </function>
-    <function name="VertexAttrib4Niv" alias="VertexAttrib4NivARB">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLint *"/>
-    </function>
-    <function name="VertexAttrib4Nsv" alias="VertexAttrib4NsvARB">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLshort *"/>
-    </function>
-    <function name="VertexAttrib4Nub" alias="VertexAttrib4NubARB">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLubyte"/>
-        <param name="y" type="GLubyte"/>
-        <param name="z" type="GLubyte"/>
-        <param name="w" type="GLubyte"/>
-    </function>
-    <function name="VertexAttrib4Nubv" alias="VertexAttrib4NubvARB">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLubyte *"/>
-    </function>
-    <function name="VertexAttrib4Nuiv" alias="VertexAttrib4NuivARB">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLuint *"/>
-    </function>
-    <function name="VertexAttrib4Nusv" alias="VertexAttrib4NusvARB">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLushort *"/>
-    </function>
-    <function name="VertexAttrib4bv" alias="VertexAttrib4bvARB">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLbyte *" count="4"/>
-    </function>
-    <function name="VertexAttrib4d" alias="VertexAttrib4dARB">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLdouble"/>
-        <param name="y" type="GLdouble"/>
-        <param name="z" type="GLdouble"/>
-        <param name="w" type="GLdouble"/>
-    </function>
-    <function name="VertexAttrib4dv" alias="VertexAttrib4dvARB">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLdouble *"/>
-    </function>
-    <function name="VertexAttrib4f" alias="VertexAttrib4fARB">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-        <param name="w" type="GLfloat"/>
-    </function>
-    <function name="VertexAttrib4fv" alias="VertexAttrib4fvARB">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLfloat *"/>
-    </function>
-    <function name="VertexAttrib4iv" alias="VertexAttrib4ivARB">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLint *" count="4"/>
-    </function>
-    <function name="VertexAttrib4s" alias="VertexAttrib4sARB">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLshort"/>
-        <param name="y" type="GLshort"/>
-        <param name="z" type="GLshort"/>
-        <param name="w" type="GLshort"/>
-    </function>
-    <function name="VertexAttrib4sv" alias="VertexAttrib4svARB">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLshort *"/>
-    </function>
-    <function name="VertexAttrib4ubv" alias="VertexAttrib4ubvARB">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLubyte *" count="4"/>
-    </function>
-    <function name="VertexAttrib4uiv" alias="VertexAttrib4uivARB">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLuint *" count="4"/>
-    </function>
-    <function name="VertexAttrib4usv" alias="VertexAttrib4usvARB">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLushort *" count="4"/>
-    </function>
-
-    <function name="VertexAttribPointer" alias="VertexAttribPointerARB">
-        <param name="index" type="GLuint"/>
-        <param name="size" type="GLint"/>
-        <param name="type" type="GLenum"/>
-        <param name="normalized" type="GLboolean"/>
-        <param name="stride" type="GLsizei"/>
-        <param name="pointer" type="const GLvoid *"/>
-    </function>
-
-</category>
-
-
-<category name="2.1">
-    <!-- XXX some of the enums and functions probably need additional -->
-    <!-- flags/attributes. -->
-
-    <enum name="CURRENT_RASTER_SECONDARY_COLOR" value="0x845F"/>
-    <enum name="PIXEL_PACK_BUFFER"              value="0x88EB"/>
-    <enum name="PIXEL_UNPACK_BUFFER"            value="0x88EC"/>
-    <enum name="PIXEL_PACK_BUFFER_BINDING"      value="0x88ED"/>
-    <enum name="PIXEL_UNPACK_BUFFER_BINDING"    value="0x88EF"/>
-    <enum name="FLOAT_MAT2x3"                   value="0x8B65"/>
-    <enum name="FLOAT_MAT2x4"                   value="0x8B66"/>
-    <enum name="FLOAT_MAT3x2"                   value="0x8B67"/>
-    <enum name="FLOAT_MAT3x4"                   value="0x8B68"/>
-    <enum name="FLOAT_MAT4x2"                   value="0x8B69"/>
-    <enum name="FLOAT_MAT4x3"                   value="0x8B6A"/>
-    <enum name="SRGB"                           value="0x8C40"/>
-    <enum name="SRGB8"                          value="0x8C41"/>
-    <enum name="SRGB_ALPHA"                     value="0x8C42"/>
-    <enum name="SRGB8_ALPHA8"                   value="0x8C43"/>
-    <enum name="SLUMINANCE_ALPHA"               value="0x8C44"/>
-    <enum name="SLUMINANCE8_ALPHA8"             value="0x8C45"/>
-    <enum name="SLUMINANCE"                     value="0x8C46"/>
-    <enum name="SLUMINANCE8"                    value="0x8C47"/>
-    <enum name="COMPRESSED_SRGB"                value="0x8C48"/>
-    <enum name="COMPRESSED_SRGB_ALPHA"          value="0x8C49"/>
-    <enum name="COMPRESSED_SLUMINANCE"          value="0x8C4A"/>
-    <enum name="COMPRESSED_SLUMINANCE_ALPHA"    value="0x8C4B"/>
-
-    <function name="UniformMatrix2x3fv" offset="assign">
-        <param name="location" type="GLint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="transpose" type="GLboolean"/>
-        <param name="value" type="const GLfloat *"/>
-        <glx ignore="true"/>
-    </function>
-    <function name="UniformMatrix3x2fv" offset="assign">
-        <param name="location" type="GLint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="transpose" type="GLboolean"/>
-        <param name="value" type="const GLfloat *"/>
-        <glx ignore="true"/>
-    </function>
-    <function name="UniformMatrix2x4fv" offset="assign">
-        <param name="location" type="GLint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="transpose" type="GLboolean"/>
-        <param name="value" type="const GLfloat *"/>
-        <glx ignore="true"/>
-    </function>
-    <function name="UniformMatrix4x2fv" offset="assign">
-        <param name="location" type="GLint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="transpose" type="GLboolean"/>
-        <param name="value" type="const GLfloat *"/>
-        <glx ignore="true"/>
-    </function>
-    <function name="UniformMatrix3x4fv" offset="assign">
-        <param name="location" type="GLint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="transpose" type="GLboolean"/>
-        <param name="value" type="const GLfloat *"/>
-        <glx ignore="true"/>
-    </function>
-    <function name="UniformMatrix4x3fv" offset="assign">
-        <param name="location" type="GLint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="transpose" type="GLboolean"/>
-        <param name="value" type="const GLfloat *"/>
-        <glx ignore="true"/>
-    </function>
-
-</category>
-
-
-<!-- ARB extensions sorted by extension number. -->
-
-<category name="GL_ARB_multitexture" number="1">
-    <enum name="TEXTURE0_ARB"                             value="0x84C0"/>
-    <enum name="TEXTURE1_ARB"                             value="0x84C1"/>
-    <enum name="TEXTURE2_ARB"                             value="0x84C2"/>
-    <enum name="TEXTURE3_ARB"                             value="0x84C3"/>
-    <enum name="TEXTURE4_ARB"                             value="0x84C4"/>
-    <enum name="TEXTURE5_ARB"                             value="0x84C5"/>
-    <enum name="TEXTURE6_ARB"                             value="0x84C6"/>
-    <enum name="TEXTURE7_ARB"                             value="0x84C7"/>
-    <enum name="TEXTURE8_ARB"                             value="0x84C8"/>
-    <enum name="TEXTURE9_ARB"                             value="0x84C9"/>
-    <enum name="TEXTURE10_ARB"                            value="0x84CA"/>
-    <enum name="TEXTURE11_ARB"                            value="0x84CB"/>
-    <enum name="TEXTURE12_ARB"                            value="0x84CC"/>
-    <enum name="TEXTURE13_ARB"                            value="0x84CD"/>
-    <enum name="TEXTURE14_ARB"                            value="0x84CE"/>
-    <enum name="TEXTURE15_ARB"                            value="0x84CF"/>
-    <enum name="TEXTURE16_ARB"                            value="0x84D0"/>
-    <enum name="TEXTURE17_ARB"                            value="0x84D1"/>
-    <enum name="TEXTURE18_ARB"                            value="0x84D2"/>
-    <enum name="TEXTURE19_ARB"                            value="0x84D3"/>
-    <enum name="TEXTURE20_ARB"                            value="0x84D4"/>
-    <enum name="TEXTURE21_ARB"                            value="0x84D5"/>
-    <enum name="TEXTURE22_ARB"                            value="0x84D6"/>
-    <enum name="TEXTURE23_ARB"                            value="0x84D7"/>
-    <enum name="TEXTURE24_ARB"                            value="0x84D8"/>
-    <enum name="TEXTURE25_ARB"                            value="0x84D9"/>
-    <enum name="TEXTURE26_ARB"                            value="0x84DA"/>
-    <enum name="TEXTURE27_ARB"                            value="0x84DB"/>
-    <enum name="TEXTURE28_ARB"                            value="0x84DC"/>
-    <enum name="TEXTURE29_ARB"                            value="0x84DD"/>
-    <enum name="TEXTURE30_ARB"                            value="0x84DE"/>
-    <enum name="TEXTURE31_ARB"                            value="0x84DF"/>
-    <enum name="ACTIVE_TEXTURE_ARB"            count="1"  value="0x84E0">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="CLIENT_ACTIVE_TEXTURE_ARB"     count="1"  value="0x84E1">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAX_TEXTURE_UNITS_ARB"         count="1"  value="0x84E2">
-        <size name="Get" mode="get"/>
-    </enum>
-
-    <function name="ActiveTextureARB" offset="374">
-        <param name="texture" type="GLenum"/>
-        <glx rop="197"/>
-    </function>
-
-    <function name="ClientActiveTextureARB" offset="375">
-        <param name="texture" type="GLenum"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="MultiTexCoord1dARB" offset="376" vectorequiv="MultiTexCoord1dvARB">
-        <param name="target" type="GLenum"/>
-        <param name="s" type="GLdouble"/>
-    </function>
-
-    <function name="MultiTexCoord1dvARB" offset="377">
-        <param name="target" type="GLenum"/>
-        <param name="v" type="const GLdouble *" count="1"/>
-        <glx rop="198"/>
-    </function>
-
-    <function name="MultiTexCoord1fARB" offset="378" vectorequiv="MultiTexCoord1fvARB">
-        <param name="target" type="GLenum"/>
-        <param name="s" type="GLfloat"/>
-    </function>
-
-    <function name="MultiTexCoord1fvARB" offset="379">
-        <param name="target" type="GLenum"/>
-        <param name="v" type="const GLfloat *" count="1"/>
-        <glx rop="199"/>
-    </function>
-
-    <function name="MultiTexCoord1iARB" offset="380" vectorequiv="MultiTexCoord1ivARB">
-        <param name="target" type="GLenum"/>
-        <param name="s" type="GLint"/>
-    </function>
-
-    <function name="MultiTexCoord1ivARB" offset="381">
-        <param name="target" type="GLenum"/>
-        <param name="v" type="const GLint *" count="1"/>
-        <glx rop="200"/>
-    </function>
-
-    <function name="MultiTexCoord1sARB" offset="382" vectorequiv="MultiTexCoord1svARB">
-        <param name="target" type="GLenum"/>
-        <param name="s" type="GLshort"/>
-    </function>
-
-    <function name="MultiTexCoord1svARB" offset="383">
-        <param name="target" type="GLenum"/>
-        <param name="v" type="const GLshort *" count="1"/>
-        <glx rop="201"/>
-    </function>
-
-    <function name="MultiTexCoord2dARB" offset="384" vectorequiv="MultiTexCoord2dvARB">
-        <param name="target" type="GLenum"/>
-        <param name="s" type="GLdouble"/>
-        <param name="t" type="GLdouble"/>
-    </function>
-
-    <function name="MultiTexCoord2dvARB" offset="385">
-        <param name="target" type="GLenum"/>
-        <param name="v" type="const GLdouble *" count="2"/>
-        <glx rop="202"/>
-    </function>
-
-    <function name="MultiTexCoord2fARB" offset="386" vectorequiv="MultiTexCoord2fvARB">
-        <param name="target" type="GLenum"/>
-        <param name="s" type="GLfloat"/>
-        <param name="t" type="GLfloat"/>
-    </function>
-
-    <function name="MultiTexCoord2fvARB" offset="387">
-        <param name="target" type="GLenum"/>
-        <param name="v" type="const GLfloat *" count="2"/>
-        <glx rop="203"/>
-    </function>
-
-    <function name="MultiTexCoord2iARB" offset="388" vectorequiv="MultiTexCoord2ivARB">
-        <param name="target" type="GLenum"/>
-        <param name="s" type="GLint"/>
-        <param name="t" type="GLint"/>
-    </function>
-
-    <function name="MultiTexCoord2ivARB" offset="389">
-        <param name="target" type="GLenum"/>
-        <param name="v" type="const GLint *" count="2"/>
-        <glx rop="204"/>
-    </function>
-
-    <function name="MultiTexCoord2sARB" offset="390" vectorequiv="MultiTexCoord2svARB">
-        <param name="target" type="GLenum"/>
-        <param name="s" type="GLshort"/>
-        <param name="t" type="GLshort"/>
-    </function>
-
-    <function name="MultiTexCoord2svARB" offset="391">
-        <param name="target" type="GLenum"/>
-        <param name="v" type="const GLshort *" count="2"/>
-        <glx rop="205"/>
-    </function>
-
-    <function name="MultiTexCoord3dARB" offset="392" vectorequiv="MultiTexCoord3dvARB">
-        <param name="target" type="GLenum"/>
-        <param name="s" type="GLdouble"/>
-        <param name="t" type="GLdouble"/>
-        <param name="r" type="GLdouble"/>
-    </function>
-
-    <function name="MultiTexCoord3dvARB" offset="393">
-        <param name="target" type="GLenum"/>
-        <param name="v" type="const GLdouble *" count="3"/>
-        <glx rop="206"/>
-    </function>
-
-    <function name="MultiTexCoord3fARB" offset="394" vectorequiv="MultiTexCoord3fvARB">
-        <param name="target" type="GLenum"/>
-        <param name="s" type="GLfloat"/>
-        <param name="t" type="GLfloat"/>
-        <param name="r" type="GLfloat"/>
-    </function>
-
-    <function name="MultiTexCoord3fvARB" offset="395">
-        <param name="target" type="GLenum"/>
-        <param name="v" type="const GLfloat *" count="3"/>
-        <glx rop="207"/>
-    </function>
-
-    <function name="MultiTexCoord3iARB" offset="396" vectorequiv="MultiTexCoord3ivARB">
-        <param name="target" type="GLenum"/>
-        <param name="s" type="GLint"/>
-        <param name="t" type="GLint"/>
-        <param name="r" type="GLint"/>
-    </function>
-
-    <function name="MultiTexCoord3ivARB" offset="397">
-        <param name="target" type="GLenum"/>
-        <param name="v" type="const GLint *" count="3"/>
-        <glx rop="208"/>
-    </function>
-
-    <function name="MultiTexCoord3sARB" offset="398" vectorequiv="MultiTexCoord3svARB">
-        <param name="target" type="GLenum"/>
-        <param name="s" type="GLshort"/>
-        <param name="t" type="GLshort"/>
-        <param name="r" type="GLshort"/>
-    </function>
-
-    <function name="MultiTexCoord3svARB" offset="399">
-        <param name="target" type="GLenum"/>
-        <param name="v" type="const GLshort *" count="3"/>
-        <glx rop="209"/>
-    </function>
-
-    <function name="MultiTexCoord4dARB" offset="400" vectorequiv="MultiTexCoord4dvARB">
-        <param name="target" type="GLenum"/>
-        <param name="s" type="GLdouble"/>
-        <param name="t" type="GLdouble"/>
-        <param name="r" type="GLdouble"/>
-        <param name="q" type="GLdouble"/>
-    </function>
-
-    <function name="MultiTexCoord4dvARB" offset="401">
-        <param name="target" type="GLenum"/>
-        <param name="v" type="const GLdouble *" count="4"/>
-        <glx rop="210"/>
-    </function>
-
-    <function name="MultiTexCoord4fARB" offset="402" vectorequiv="MultiTexCoord4fvARB">
-        <param name="target" type="GLenum"/>
-        <param name="s" type="GLfloat"/>
-        <param name="t" type="GLfloat"/>
-        <param name="r" type="GLfloat"/>
-        <param name="q" type="GLfloat"/>
-    </function>
-
-    <function name="MultiTexCoord4fvARB" offset="403">
-        <param name="target" type="GLenum"/>
-        <param name="v" type="const GLfloat *" count="4"/>
-        <glx rop="211"/>
-    </function>
-
-    <function name="MultiTexCoord4iARB" offset="404" vectorequiv="MultiTexCoord4ivARB">
-        <param name="target" type="GLenum"/>
-        <param name="s" type="GLint"/>
-        <param name="t" type="GLint"/>
-        <param name="r" type="GLint"/>
-        <param name="q" type="GLint"/>
-    </function>
-
-    <function name="MultiTexCoord4ivARB" offset="405">
-        <param name="target" type="GLenum"/>
-        <param name="v" type="const GLint *" count="4"/>
-        <glx rop="212"/>
-    </function>
-
-    <function name="MultiTexCoord4sARB" offset="406" vectorequiv="MultiTexCoord4svARB">
-        <param name="target" type="GLenum"/>
-        <param name="s" type="GLshort"/>
-        <param name="t" type="GLshort"/>
-        <param name="r" type="GLshort"/>
-        <param name="q" type="GLshort"/>
-    </function>
-
-    <function name="MultiTexCoord4svARB" offset="407">
-        <param name="target" type="GLenum"/>
-        <param name="v" type="const GLshort *" count="4"/>
-        <glx rop="213"/>
-    </function>
-</category>
-
-<!-- ARB extension number 2 is a GLX extension. -->
-
-<category name="GL_ARB_transpose_matrix" number="3">
-    <enum name="TRANSPOSE_MODELVIEW_MATRIX_ARB"           value="0x84E3"/>
-    <enum name="TRANSPOSE_PROJECTION_MATRIX_ARB"          value="0x84E4"/>
-    <enum name="TRANSPOSE_TEXTURE_MATRIX_ARB"             value="0x84E5"/>
-    <enum name="TRANSPOSE_COLOR_MATRIX_ARB"               value="0x84E6"/>
-
-    <function name="LoadTransposeMatrixfARB" offset="assign">
-        <param name="m" type="const GLfloat *"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="LoadTransposeMatrixdARB" offset="assign">
-        <param name="m" type="const GLdouble *"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="MultTransposeMatrixfARB" offset="assign">
-        <param name="m" type="const GLfloat *"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="MultTransposeMatrixdARB" offset="assign">
-        <param name="m" type="const GLdouble *"/>
-        <glx handcode="true"/>
-    </function>
-</category>
-
-<!-- ARB extension number 4 is a WGL extension. -->
-
-<category name="GL_ARB_multisample" number="5">
-    <enum name="MULTISAMPLE_ARB"               count="1"  value="0x809D">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="SAMPLE_ALPHA_TO_COVERAGE_ARB"  count="1"  value="0x809E">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="SAMPLE_ALPHA_TO_ONE_ARB"       count="1"  value="0x809F">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="SAMPLE_COVERAGE_ARB"           count="1"  value="0x80A0">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="SAMPLE_BUFFERS_ARB"            count="1"  value="0x80A8">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="SAMPLES_ARB"                   count="1"  value="0x80A9">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="SAMPLE_COVERAGE_VALUE_ARB"     count="1"  value="0x80AA">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="SAMPLE_COVERAGE_INVERT_ARB"    count="1"  value="0x80AB">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MULTISAMPLE_BIT_ARB"                      value="0x20000000"/>
-
-    <function name="SampleCoverageARB" offset="assign">
-        <param name="value" type="GLclampf"/>
-        <param name="invert" type="GLboolean"/>
-        <glx rop="229"/>
-    </function>
-</category>
-
-<category name="GL_ARB_texture_env_add" number="6">
-    <!-- No new functions, types, enums. -->
-</category>
-
-<category name="GL_ARB_texture_cube_map" number="7">
-    <enum name="NORMAL_MAP_ARB"                           value="0x8511"/>
-    <enum name="REFLECTION_MAP_ARB"                       value="0x8512"/>
-    <enum name="TEXTURE_CUBE_MAP_ARB"          count="1"  value="0x8513">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_BINDING_CUBE_MAP_ARB"  count="1"  value="0x8514">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_CUBE_MAP_POSITIVE_X_ARB"          value="0x8515"/>
-    <enum name="TEXTURE_CUBE_MAP_NEGATIVE_X_ARB"          value="0x8516"/>
-    <enum name="TEXTURE_CUBE_MAP_POSITIVE_Y_ARB"          value="0x8517"/>
-    <enum name="TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB"          value="0x8518"/>
-    <enum name="TEXTURE_CUBE_MAP_POSITIVE_Z_ARB"          value="0x8519"/>
-    <enum name="TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB"          value="0x851A"/>
-    <enum name="PROXY_TEXTURE_CUBE_MAP_ARB"               value="0x851B"/>
-    <enum name="MAX_CUBE_MAP_TEXTURE_SIZE_ARB" count="1"  value="0x851C">
-        <size name="Get" mode="get"/>
-    </enum>
-</category>
-
-<!-- ARB extension number 8 is a WGL extension. -->
-<!-- ARB extension number 9 is a WGL extension. -->
-<!-- ARB extension number 10 is a WGL extension. -->
-<!-- ARB extension number 11 is a WGL extension. -->
-
-<category name="GL_ARB_texture_compression" number="12">
-    <enum name="COMPRESSED_ALPHA_ARB"                     value="0x84E9"/>
-    <enum name="COMPRESSED_LUMINANCE_ARB"                 value="0x84EA"/>
-    <enum name="COMPRESSED_LUMINANCE_ALPHA_ARB"           value="0x84EB"/>
-    <enum name="COMPRESSED_INTENSITY_ARB"                 value="0x84EC"/>
-    <enum name="COMPRESSED_RGB_ARB"                       value="0x84ED"/>
-    <enum name="COMPRESSED_RGBA_ARB"                      value="0x84EE"/>
-    <enum name="TEXTURE_COMPRESSION_HINT_ARB"  count="1"  value="0x84EF">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_COMPRESSED_IMAGE_SIZE_ARB" count="1" value="0x86A0">
-        <size name="GetTexLevelParameterfv" mode="get"/>
-        <size name="GetTexLevelParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_COMPRESSED_ARB"        count="1"  value="0x86A1">
-        <size name="GetTexLevelParameterfv" mode="get"/>
-        <size name="GetTexLevelParameteriv" mode="get"/>
-    </enum>
-    <enum name="NUM_COMPRESSED_TEXTURE_FORMATS_ARB" count="1" value="0x86A2">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_COMPRESSED_FORMATS_ARB"           value="0x86A3"/>
-
-    <function name="CompressedTexImage3DARB" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-        <param name="depth" type="GLsizei"/>
-        <param name="border" type="GLint"/>
-        <param name="imageSize" type="GLsizei" counter="true"/>
-        <param name="data" type="const GLvoid *" count="imageSize"/>
-        <glx rop="216" handcode="client"/>
-    </function>
-
-    <function name="CompressedTexImage2DARB" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-        <param name="border" type="GLint"/>
-        <param name="imageSize" type="GLsizei" counter="true"/>
-        <param name="data" type="const GLvoid *" count="imageSize"/>
-        <glx rop="215" handcode="client"/>
-    </function>
-
-    <function name="CompressedTexImage1DARB" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="width" type="GLsizei"/>
-        <param name="border" type="GLint"/>
-        <param name="imageSize" type="GLsizei" counter="true"/>
-        <param name="data" type="const GLvoid *" count="imageSize"/>
-        <glx rop="214" handcode="client"/>
-    </function>
-
-    <function name="CompressedTexSubImage3DARB" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="xoffset" type="GLint"/>
-        <param name="yoffset" type="GLint"/>
-        <param name="zoffset" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-        <param name="depth" type="GLsizei"/>
-        <param name="format" type="GLenum"/>
-        <param name="imageSize" type="GLsizei" counter="true"/>
-        <param name="data" type="const GLvoid *" count="imageSize"/>
-        <glx rop="219" handcode="client"/>
-    </function>
-
-    <function name="CompressedTexSubImage2DARB" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="xoffset" type="GLint"/>
-        <param name="yoffset" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-        <param name="format" type="GLenum"/>
-        <param name="imageSize" type="GLsizei" counter="true"/>
-        <param name="data" type="const GLvoid *" count="imageSize"/>
-        <glx rop="218" handcode="client"/>
-    </function>
-
-    <function name="CompressedTexSubImage1DARB" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="xoffset" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <param name="format" type="GLenum"/>
-        <param name="imageSize" type="GLsizei" counter="true"/>
-        <param name="data" type="const GLvoid *" count="imageSize"/>
-        <glx rop="217" handcode="client"/>
-    </function>
-
-    <function name="GetCompressedTexImageARB" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="img" type="GLvoid *" output="true"/>
-
-        <!-- This has to be hand coded because the image size is in the
-             "wrong" place.  Technically, this should be a
-             'always_array="true"' case.  The size field in the reply would
-             be at offset 12.  However, the size is actually at offset 16.
-             This is where the 'width' is in a GetTexImage reply. -->
-        <glx sop="160" handcode="true"/>
-    </function>
-</category>
-
-<category name="GL_ARB_texture_border_clamp" number="13">
-    <enum name="CLAMP_TO_BORDER_ARB"                      value="0x812D"/>
-</category>
-
-<category name="GL_ARB_point_parameters" number="14">
-    <enum name="POINT_SIZE_MIN_ARB"            count="1"  value="0x8126">
-        <size name="PointParameterfvEXT"/>
-    </enum>
-    <enum name="POINT_SIZE_MAX_ARB"            count="1"  value="0x8127">
-        <size name="PointParameterfvEXT"/>
-    </enum>
-    <enum name="POINT_FADE_THRESHOLD_SIZE_ARB" count="1"  value="0x8128">
-        <size name="PointParameterfvEXT"/>
-    </enum>
-    <enum name="POINT_DISTANCE_ATTENUATION_ARB" count="3" value="0x8129">
-        <size name="PointParameterfvEXT"/>
-    </enum>
-
-    <function name="PointParameterfARB" alias="PointParameterfEXT">
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLfloat"/>
-        <glx rop="2065"/>
-    </function>
-
-    <function name="PointParameterfvARB" alias="PointParameterfvEXT">
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLfloat *" variable_param="pname"/>
-        <glx rop="2066"/>
-    </function>
-</category>
-
-<category name="GL_ARB_vertex_blend" number="15">
-    <enum name="MAX_VERTEX_UNITS_ARB"          count="1"  value="0x86A4">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="ACTIVE_VERTEX_UNITS_ARB"       count="1"  value="0x86A5">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="WEIGHT_SUM_UNITY_ARB"          count="1"  value="0x86A6">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="VERTEX_BLEND_ARB"              count="1"  value="0x86A7">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="CURRENT_WEIGHT_ARB"            count="1"  value="0x86A8">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="WEIGHT_ARRAY_TYPE_ARB"         count="1"  value="0x86A9">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="WEIGHT_ARRAY_STRIDE_ARB"       count="1"  value="0x86AA">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="WEIGHT_ARRAY_SIZE_ARB"         count="1"  value="0x86AB">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="WEIGHT_ARRAY_POINTER_ARB"                 value="0x86AC"/>
-    <enum name="WEIGHT_ARRAY_ARB"              count="1"  value="0x86AD">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW0_ARB"                count="16" value="0x1700">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW1_ARB"                count="16" value="0x850A">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW2_ARB"                count="16" value="0x8722">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW3_ARB"                count="16" value="0x8723">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW4_ARB"                count="16" value="0x8724">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW5_ARB"                count="16" value="0x8725">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW6_ARB"                count="16" value="0x8726">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW7_ARB"                count="16" value="0x8727">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW8_ARB"                count="16" value="0x8728">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW9_ARB"                count="16" value="0x8729">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW10_ARB"               count="16" value="0x872A">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW11_ARB"               count="16" value="0x872B">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW12_ARB"               count="16" value="0x872C">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW13_ARB"               count="16" value="0x872D">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW14_ARB"               count="16" value="0x872E">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW15_ARB"               count="16" value="0x872F">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW16_ARB"               count="16" value="0x8730">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW17_ARB"               count="16" value="0x8731">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW18_ARB"               count="16" value="0x8732">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW19_ARB"               count="16" value="0x8733">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW20_ARB"               count="16" value="0x8734">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW21_ARB"               count="16" value="0x8735">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW22_ARB"               count="16" value="0x8736">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW23_ARB"               count="16" value="0x8737">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW24_ARB"               count="16" value="0x8738">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW25_ARB"               count="16" value="0x8739">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW26_ARB"               count="16" value="0x873A">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW27_ARB"               count="16" value="0x873B">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW28_ARB"               count="16" value="0x873C">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW29_ARB"               count="16" value="0x873D">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW30_ARB"               count="16" value="0x873E">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MODELVIEW31_ARB"               count="16" value="0x873F">
-        <size name="Get" mode="get"/>
-    </enum>
-
-    <function name="WeightbvARB">
-        <param name="size" type="GLint"/>
-        <param name="weights" type="const GLbyte *"/>
-    </function>
-
-    <function name="WeightsvARB">
-        <param name="size" type="GLint"/>
-        <param name="weights" type="const GLshort *"/>
-    </function>
-
-    <function name="WeightivARB">
-        <param name="size" type="GLint"/>
-        <param name="weights" type="const GLint *"/>
-    </function>
-
-    <function name="WeightfvARB">
-        <param name="size" type="GLint"/>
-        <param name="weights" type="const GLfloat *"/>
-    </function>
-
-    <function name="WeightdvARB">
-        <param name="size" type="GLint"/>
-        <param name="weights" type="const GLdouble *"/>
-    </function>
-
-    <function name="WeightubvARB">
-        <param name="size" type="GLint"/>
-        <param name="weights" type="const GLubyte *"/>
-    </function>
-
-    <function name="WeightusvARB">
-        <param name="size" type="GLint"/>
-        <param name="weights" type="const GLushort *"/>
-    </function>
-
-    <function name="WeightuivARB">
-        <param name="size" type="GLint"/>
-        <param name="weights" type="const GLuint *"/>
-    </function>
-
-    <function name="WeightPointerARB">
-        <param name="size" type="GLint"/>
-        <param name="type" type="GLenum"/>
-        <param name="stride" type="GLsizei"/>
-        <param name="pointer" type="const GLvoid *"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="VertexBlendARB">
-        <param name="count" type="GLint"/>
-    </function>
-</category>
-
-<category name="GL_ARB_matrix_palette" number="16">
-    <enum name="MATRIX_PALETTE_ARB"            count="1"  value="0x8840">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAX_MATRIX_PALETTE_STACK_DEPTH_ARB" count="1" value="0x8841">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAX_PALETTE_MATRICES_ARB"      count="1"  value="0x8842">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="CURRENT_PALETTE_MATRIX_ARB"    count="1"  value="0x8843">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MATRIX_INDEX_ARRAY_ARB"        count="1"  value="0x8844">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="CURRENT_MATRIX_INDEX_ARB"      count="1"  value="0x8845">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MATRIX_INDEX_ARRAY_SIZE_ARB"   count="1"  value="0x8846">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MATRIX_INDEX_ARRAY_TYPE_ARB"   count="1"  value="0x8847">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MATRIX_INDEX_ARRAY_STRIDE_ARB" count="1"  value="0x8848">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MATRIX_INDEX_ARRAY_POINTER_ARB"           value="0x8849"/>
-
-    <function name="CurrentPaletteMatrixARB">
-        <param name="index" type="GLint"/>
-        <glx ignore="true" rop="4329"/>
-    </function>
-
-    <function name="MatrixIndexubvARB">
-        <param name="size" type="GLint" counter="true"/>
-        <param name="indices" type="const GLubyte *" count="size"/>
-        <glx ignore="true" rop="4326"/>
-    </function>
-
-    <function name="MatrixIndexusvARB">
-        <param name="size" type="GLint" counter="true"/>
-        <param name="indices" type="const GLushort *" count="size"/>
-        <glx ignore="true" rop="4327"/>
-    </function>
-
-    <function name="MatrixIndexuivARB">
-        <param name="size" type="GLint" counter="true"/>
-        <param name="indices" type="const GLuint *" count="size"/>
-        <glx ignore="true" rop="4328"/>
-    </function>
-
-    <function name="MatrixIndexPointerARB">
-        <param name="size" type="GLint"/>
-        <param name="type" type="GLenum"/>
-        <param name="stride" type="GLsizei"/>
-        <param name="pointer" type="const GLvoid *"/>
-        <glx handcode="true"/>
-    </function>
-</category>
-
-<category name="GL_ARB_texture_env_combine" number="17">
-    <enum name="COMBINE_ARB"                              value="0x8570"/>
-    <enum name="COMBINE_RGB_ARB"                          value="0x8571"/>
-    <enum name="COMBINE_ALPHA_ARB"                        value="0x8572"/>
-    <enum name="SOURCE0_RGB_ARB"                          value="0x8580"/>
-    <enum name="SOURCE1_RGB_ARB"                          value="0x8581"/>
-    <enum name="SOURCE2_RGB_ARB"                          value="0x8582"/>
-    <enum name="SOURCE0_ALPHA_ARB"                        value="0x8588"/>
-    <enum name="SOURCE1_ALPHA_ARB"                        value="0x8589"/>
-    <enum name="SOURCE2_ALPHA_ARB"                        value="0x858A"/>
-    <enum name="OPERAND0_RGB_ARB"                         value="0x8590"/>
-    <enum name="OPERAND1_RGB_ARB"                         value="0x8591"/>
-    <enum name="OPERAND2_RGB_ARB"                         value="0x8592"/>
-    <enum name="OPERAND0_ALPHA_ARB"                       value="0x8598"/>
-    <enum name="OPERAND1_ALPHA_ARB"                       value="0x8599"/>
-    <enum name="OPERAND2_ALPHA_ARB"                       value="0x859A"/>
-    <enum name="RGB_SCALE_ARB"                            value="0x8573"/>
-    <enum name="ADD_SIGNED_ARB"                           value="0x8574"/>
-    <enum name="INTERPOLATE_ARB"                          value="0x8575"/>
-    <enum name="SUBTRACT_ARB"                             value="0x84E7"/>
-    <enum name="CONSTANT_ARB"                             value="0x8576"/>
-    <enum name="PRIMARY_COLOR_ARB"                        value="0x8577"/>
-    <enum name="PREVIOUS_ARB"                             value="0x8578"/>
-</category>
-
-<category name="GL_ARB_texture_env_crossbar" number="18">
-    <!-- No new functions, types, enums. -->
-</category>
-
-<category name="GL_ARB_texture_env_dot3" number="19">
-    <enum name="DOT3_RGB_ARB"                             value="0x86AE"/>
-    <enum name="DOT3_RGBA_ARB"                            value="0x86AF"/>
-</category>
-
-<!-- ARB extension number 20 is a WGL extension. -->
-
-<category name="GL_ARB_texture_mirrored_repeat" number="21">
-    <enum name="MIRRORED_REPEAT_ARB"                      value="0x8370"/>
-</category>
-
-<category name="GL_ARB_depth_texture" number="22">
-    <enum name="DEPTH_COMPONENT16_ARB"                    value="0x81A5"/>
-    <enum name="DEPTH_COMPONENT24_ARB"                    value="0x81A6"/>
-    <enum name="DEPTH_COMPONENT32_ARB"                    value="0x81A7"/>
-    <enum name="TEXTURE_DEPTH_SIZE_ARB"        count="1"  value="0x884A">
-        <size name="GetTexLevelParameterfv" mode="get"/>
-        <size name="GetTexLevelParameteriv" mode="get"/>
-    </enum>
-    <enum name="DEPTH_TEXTURE_MODE_ARB"        count="1"  value="0x884B">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-</category>
-
-<category name="GL_ARB_shadow" number="23">
-    <enum name="TEXTURE_COMPARE_MODE_ARB"      count="1"  value="0x884C">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_COMPARE_FUNC_ARB"      count="1"  value="0x884D">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-    <enum name="COMPARE_R_TO_TEXTURE_ARB"                 value="0x884E"/>
-</category>
-
-<category name="GL_ARB_shadow_ambient" number="24">
-    <enum name="TEXTURE_COMPARE_FAIL_VALUE_ARB" count="1" value="0x80BF">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-</category>
-
-<category name="GL_ARB_window_pos" number="25">
-    <function name="WindowPos2dARB" alias="WindowPos2dMESA">
-        <param name="x" type="GLdouble"/>
-        <param name="y" type="GLdouble"/>
-    </function>
-
-    <function name="WindowPos2fARB" alias="WindowPos2fMESA">
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-    </function>
-
-    <function name="WindowPos2iARB" alias="WindowPos2iMESA">
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-    </function>
-
-    <function name="WindowPos2sARB" alias="WindowPos2sMESA">
-        <param name="x" type="GLshort"/>
-        <param name="y" type="GLshort"/>
-    </function>
-
-    <function name="WindowPos2dvARB" alias="WindowPos2dvMESA">
-        <param name="v" type="const GLdouble *"/>
-    </function>
-
-    <function name="WindowPos2fvARB" alias="WindowPos2fvMESA">
-        <param name="v" type="const GLfloat *"/>
-    </function>
-
-    <function name="WindowPos2ivARB" alias="WindowPos2ivMESA">
-        <param name="v" type="const GLint *"/>
-    </function>
-
-    <function name="WindowPos2svARB" alias="WindowPos2svMESA">
-        <param name="v" type="const GLshort *"/>
-    </function>
-
-    <function name="WindowPos3dARB" alias="WindowPos3dMESA">
-        <param name="x" type="GLdouble"/>
-        <param name="y" type="GLdouble"/>
-        <param name="z" type="GLdouble"/>
-    </function>
-
-    <function name="WindowPos3fARB" alias="WindowPos3fMESA">
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-    </function>
-
-    <function name="WindowPos3iARB" alias="WindowPos3iMESA">
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-        <param name="z" type="GLint"/>
-    </function>
-
-    <function name="WindowPos3sARB" alias="WindowPos3sMESA">
-        <param name="x" type="GLshort"/>
-        <param name="y" type="GLshort"/>
-        <param name="z" type="GLshort"/>
-    </function>
-
-    <function name="WindowPos3dvARB" alias="WindowPos3dvMESA">
-        <param name="v" type="const GLdouble *"/>
-    </function>
-
-    <function name="WindowPos3fvARB" alias="WindowPos3fvMESA">
-        <param name="v" type="const GLfloat *"/>
-    </function>
-
-    <function name="WindowPos3ivARB" alias="WindowPos3ivMESA">
-        <param name="v" type="const GLint *"/>
-    </function>
-
-    <function name="WindowPos3svARB" alias="WindowPos3svMESA">
-        <param name="v" type="const GLshort *"/>
-    </function>
-</category>
-
-<category name="GL_ARB_vertex_program" number="26">
-    <enum name="COLOR_SUM_ARB"                 count="1"  value="0x8458">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="VERTEX_PROGRAM_ARB"            count="1"  value="0x8620">
-        <size name="GetVertexAttribdvARB" mode="get"/>
-        <size name="GetVertexAttribfvARB" mode="get"/>
-        <size name="GetVertexAttribivARB" mode="get"/>
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="VERTEX_ATTRIB_ARRAY_ENABLED_ARB" count="1" value="0x8622">
-        <size name="GetVertexAttribdvARB" mode="get"/>
-        <size name="GetVertexAttribfvARB" mode="get"/>
-        <size name="GetVertexAttribivARB" mode="get"/>
-    </enum>
-    <enum name="VERTEX_ATTRIB_ARRAY_SIZE_ARB"  count="1"  value="0x8623">
-        <size name="GetVertexAttribdvARB" mode="get"/>
-        <size name="GetVertexAttribfvARB" mode="get"/>
-        <size name="GetVertexAttribivARB" mode="get"/>
-    </enum>
-    <enum name="VERTEX_ATTRIB_ARRAY_STRIDE_ARB" count="1" value="0x8624">
-        <size name="GetVertexAttribdvARB" mode="get"/>
-        <size name="GetVertexAttribfvARB" mode="get"/>
-        <size name="GetVertexAttribivARB" mode="get"/>
-    </enum>
-    <enum name="VERTEX_ATTRIB_ARRAY_TYPE_ARB"  count="1"  value="0x8625">
-        <size name="GetVertexAttribdvARB" mode="get"/>
-        <size name="GetVertexAttribfvARB" mode="get"/>
-        <size name="GetVertexAttribivARB" mode="get"/>
-    </enum>
-    <enum name="CURRENT_VERTEX_ATTRIB_ARB"     count="1"  value="0x8626">
-        <size name="GetVertexAttribdvARB" mode="get"/>
-        <size name="GetVertexAttribfvARB" mode="get"/>
-        <size name="GetVertexAttribivARB" mode="get"/>
-    </enum>
-    <enum name="PROGRAM_LENGTH_ARB"            count="1"  value="0x8627">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="PROGRAM_STRING_ARB"                       value="0x8628"/>
-    <enum name="MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB" count="1" value="0x862E">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAX_PROGRAM_MATRICES_ARB"      count="1"  value="0x862F">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="CURRENT_MATRIX_STACK_DEPTH_ARB" count="1" value="0x8640">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="CURRENT_MATRIX_ARB"            count="16" value="0x8641">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="VERTEX_PROGRAM_POINT_SIZE_ARB" count="1"  value="0x8642">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="VERTEX_PROGRAM_TWO_SIDE_ARB"   count="1"  value="0x8643">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="VERTEX_ATTRIB_ARRAY_POINTER_ARB"          value="0x8645"/>
-    <enum name="PROGRAM_ERROR_POSITION_ARB"    count="1"  value="0x864B">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="PROGRAM_BINDING_ARB"           count="1"  value="0x8677">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="MAX_VERTEX_ATTRIBS_ARB"        count="1"  value="0x8869">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB"       value="0x886A"/>
-    <enum name="PROGRAM_ERROR_STRING_ARB"                 value="0x8874"/>
-    <enum name="PROGRAM_FORMAT_ASCII_ARB"                 value="0x8875"/>
-    <enum name="PROGRAM_FORMAT_ARB"            count="1"  value="0x8876">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="PROGRAM_INSTRUCTIONS_ARB"      count="1"  value="0x88A0">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="MAX_PROGRAM_INSTRUCTIONS_ARB"  count="1"  value="0x88A1">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="PROGRAM_NATIVE_INSTRUCTIONS_ARB" count="1" value="0x88A2">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB" count="1" value="0x88A3">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="PROGRAM_TEMPORARIES_ARB"       count="1"  value="0x88A4">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="MAX_PROGRAM_TEMPORARIES_ARB"   count="1"  value="0x88A5">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="PROGRAM_NATIVE_TEMPORARIES_ARB" count="1" value="0x88A6">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="MAX_PROGRAM_NATIVE_TEMPORARIES_ARB" count="1" value="0x88A7">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="PROGRAM_PARAMETERS_ARB"        count="1"  value="0x88A8">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="MAX_PROGRAM_PARAMETERS_ARB"    count="1"  value="0x88A9">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="PROGRAM_NATIVE_PARAMETERS_ARB" count="1"  value="0x88AA">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="MAX_PROGRAM_NATIVE_PARAMETERS_ARB" count="1" value="0x88AB">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="PROGRAM_ATTRIBS_ARB"           count="1"  value="0x88AC">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="MAX_PROGRAM_ATTRIBS_ARB"       count="1"  value="0x88AD">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="PROGRAM_NATIVE_ATTRIBS_ARB"    count="1"  value="0x88AE">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="MAX_PROGRAM_NATIVE_ATTRIBS_ARB" count="1" value="0x88AF">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="PROGRAM_ADDRESS_REGISTERS_ARB" count="1"  value="0x88B0">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="MAX_PROGRAM_ADDRESS_REGISTERS_ARB" count="1" value="0x88B1">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB" count="1" value="0x88B2">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB" count="1" value="0x88B3">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="MAX_PROGRAM_LOCAL_PARAMETERS_ARB" count="1" value="0x88B4">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="MAX_PROGRAM_ENV_PARAMETERS_ARB" count="1" value="0x88B5">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="PROGRAM_UNDER_NATIVE_LIMITS_ARB" count="1" value="0x88B6">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="TRANSPOSE_CURRENT_MATRIX_ARB"  count="16" value="0x88B7">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MATRIX0_ARB"                              value="0x88C0"/>
-    <enum name="MATRIX1_ARB"                              value="0x88C1"/>
-    <enum name="MATRIX2_ARB"                              value="0x88C2"/>
-    <enum name="MATRIX3_ARB"                              value="0x88C3"/>
-    <enum name="MATRIX4_ARB"                              value="0x88C4"/>
-    <enum name="MATRIX5_ARB"                              value="0x88C5"/>
-    <enum name="MATRIX6_ARB"                              value="0x88C6"/>
-    <enum name="MATRIX7_ARB"                              value="0x88C7"/>
-    <enum name="MATRIX8_ARB"                              value="0x88C8"/>
-    <enum name="MATRIX9_ARB"                              value="0x88C9"/>
-    <enum name="MATRIX10_ARB"                             value="0x88CA"/>
-    <enum name="MATRIX11_ARB"                             value="0x88CB"/>
-    <enum name="MATRIX12_ARB"                             value="0x88CC"/>
-    <enum name="MATRIX13_ARB"                             value="0x88CD"/>
-    <enum name="MATRIX14_ARB"                             value="0x88CE"/>
-    <enum name="MATRIX15_ARB"                             value="0x88CF"/>
-    <enum name="MATRIX16_ARB"                             value="0x88D0"/>
-    <enum name="MATRIX17_ARB"                             value="0x88D1"/>
-    <enum name="MATRIX18_ARB"                             value="0x88D2"/>
-    <enum name="MATRIX19_ARB"                             value="0x88D3"/>
-    <enum name="MATRIX20_ARB"                             value="0x88D4"/>
-    <enum name="MATRIX21_ARB"                             value="0x88D5"/>
-    <enum name="MATRIX22_ARB"                             value="0x88D6"/>
-    <enum name="MATRIX23_ARB"                             value="0x88D7"/>
-    <enum name="MATRIX24_ARB"                             value="0x88D8"/>
-    <enum name="MATRIX25_ARB"                             value="0x88D9"/>
-    <enum name="MATRIX26_ARB"                             value="0x88DA"/>
-    <enum name="MATRIX27_ARB"                             value="0x88DB"/>
-    <enum name="MATRIX28_ARB"                             value="0x88DC"/>
-    <enum name="MATRIX29_ARB"                             value="0x88DD"/>
-    <enum name="MATRIX30_ARB"                             value="0x88DE"/>
-    <enum name="MATRIX31_ARB"                             value="0x88DF"/>
-
-    <function name="GetVertexAttribdvARB" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLdouble *" output="true" variable_param="pname"/>
-        <glx handcode="client" vendorpriv="1301"/>
-    </function>
-
-    <function name="GetVertexAttribfvARB" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
-        <glx handcode="client" vendorpriv="1302"/>
-    </function>
-
-    <function name="GetVertexAttribivARB" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true" variable_param="pname"/>
-        <glx handcode="client" vendorpriv="1303"/>
-    </function>
-
-    <function name="VertexAttrib1dARB" offset="assign" vectorequiv="VertexAttrib1dvARB">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLdouble"/>
-    </function>
-
-    <function name="VertexAttrib1dvARB" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLdouble *" count="1"/>
-        <glx rop="4197" doubles_in_order="true"/>
-    </function>
-
-    <function name="VertexAttrib1fARB" offset="assign" vectorequiv="VertexAttrib1fvARB">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLfloat"/>
-    </function>
-
-    <function name="VertexAttrib1fvARB" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLfloat *" count="1"/>
-        <glx rop="4193"/>
-    </function>
-
-    <function name="VertexAttrib1sARB" offset="assign" vectorequiv="VertexAttrib1svARB">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLshort"/>
-    </function>
-
-    <function name="VertexAttrib1svARB" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLshort *" count="1"/>
-        <glx rop="4189"/>
-    </function>
-
-    <function name="VertexAttrib2dARB" offset="assign" vectorequiv="VertexAttrib2dvARB">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLdouble"/>
-        <param name="y" type="GLdouble"/>
-    </function>
-
-    <function name="VertexAttrib2dvARB" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLdouble *" count="2"/>
-        <glx rop="4198" doubles_in_order="true"/>
-    </function>
-
-    <function name="VertexAttrib2fARB" offset="assign" vectorequiv="VertexAttrib2fvARB">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-    </function>
-
-    <function name="VertexAttrib2fvARB" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLfloat *" count="2"/>
-        <glx rop="4194"/>
-    </function>
-
-    <function name="VertexAttrib2sARB" offset="assign" vectorequiv="VertexAttrib2svARB">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLshort"/>
-        <param name="y" type="GLshort"/>
-    </function>
-
-    <function name="VertexAttrib2svARB" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLshort *" count="2"/>
-        <glx rop="4190"/>
-    </function>
-
-    <function name="VertexAttrib3dARB" offset="assign" vectorequiv="VertexAttrib3dvARB">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLdouble"/>
-        <param name="y" type="GLdouble"/>
-        <param name="z" type="GLdouble"/>
-    </function>
-
-    <function name="VertexAttrib3dvARB" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLdouble *" count="3"/>
-        <glx rop="4199" doubles_in_order="true"/>
-    </function>
-
-    <function name="VertexAttrib3fARB" offset="assign" vectorequiv="VertexAttrib3fvARB">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-    </function>
-
-    <function name="VertexAttrib3fvARB" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLfloat *" count="3"/>
-        <glx rop="4195"/>
-    </function>
-
-    <function name="VertexAttrib3sARB" offset="assign" vectorequiv="VertexAttrib3svARB">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLshort"/>
-        <param name="y" type="GLshort"/>
-        <param name="z" type="GLshort"/>
-    </function>
-
-    <function name="VertexAttrib3svARB" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLshort *" count="3"/>
-        <glx rop="4191"/>
-    </function>
-
-    <function name="VertexAttrib4dARB" offset="assign" vectorequiv="VertexAttrib4dvARB">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLdouble"/>
-        <param name="y" type="GLdouble"/>
-        <param name="z" type="GLdouble"/>
-        <param name="w" type="GLdouble"/>
-    </function>
-
-    <function name="VertexAttrib4dvARB" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLdouble *" count="4"/>
-        <glx rop="4200" doubles_in_order="true"/>
-    </function>
-
-    <function name="VertexAttrib4fARB" offset="assign" vectorequiv="VertexAttrib4fvARB">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-        <param name="w" type="GLfloat"/>
-    </function>
-
-    <function name="VertexAttrib4fvARB" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLfloat *" count="4"/>
-        <glx rop="4196"/>
-    </function>
-
-    <function name="VertexAttrib4sARB" offset="assign" vectorequiv="VertexAttrib4svARB">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLshort"/>
-        <param name="y" type="GLshort"/>
-        <param name="z" type="GLshort"/>
-        <param name="w" type="GLshort"/>
-    </function>
-
-    <function name="VertexAttrib4svARB" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLshort *" count="4"/>
-        <glx rop="4192"/>
-    </function>
-
-    <function name="VertexAttrib4NubARB" offset="assign" vectorequiv="VertexAttrib4NubvARB">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLubyte"/>
-        <param name="y" type="GLubyte"/>
-        <param name="z" type="GLubyte"/>
-        <param name="w" type="GLubyte"/>
-    </function>
-
-    <function name="VertexAttrib4NubvARB" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLubyte *" count="4"/>
-        <glx rop="4201"/>
-    </function>
-
-    <function name="VertexAttrib4bvARB" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLbyte *" count="4"/>
-        <glx rop="4230"/>
-    </function>
-
-    <function name="VertexAttrib4ivARB" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLint *" count="4"/>
-        <glx rop="4231"/>
-    </function>
-
-    <function name="VertexAttrib4ubvARB" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLubyte *" count="4"/>
-        <glx rop="4232"/>
-    </function>
-
-    <function name="VertexAttrib4usvARB" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLushort *" count="4"/>
-        <glx rop="4233"/>
-    </function>
-
-    <function name="VertexAttrib4uivARB" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLuint *" count="4"/>
-        <glx rop="4234"/>
-    </function>
-
-    <function name="VertexAttrib4NbvARB" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLbyte *" count="4"/>
-        <glx rop="4235"/>
-    </function>
-
-    <function name="VertexAttrib4NsvARB" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLshort *" count="4"/>
-        <glx rop="4236"/>
-    </function>
-
-    <function name="VertexAttrib4NivARB" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLint *" count="4"/>
-        <glx rop="4237"/>
-    </function>
-
-    <function name="VertexAttrib4NusvARB" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLushort *" count="4"/>
-        <glx rop="4238"/>
-    </function>
-
-    <function name="VertexAttrib4NuivARB" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLuint *" count="4"/>
-        <glx rop="4239"/>
-    </function>
-
-    <function name="VertexAttribPointerARB" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="size" type="GLint"/>
-        <param name="type" type="GLenum"/>
-        <param name="normalized" type="GLboolean"/>
-        <param name="stride" type="GLsizei"/>
-        <param name="pointer" type="const GLvoid *"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="EnableVertexAttribArrayARB" offset="assign">
-        <param name="index" type="GLuint"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="DisableVertexAttribArrayARB" offset="assign">
-        <param name="index" type="GLuint"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="ProgramStringARB" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="format" type="GLenum"/>
-        <param name="len" type="GLsizei" counter="true"/>
-        <param name="string" type="const GLvoid *" count="len"/>
-        <glx rop="4217" large="true"/>
-    </function>
-
-    <function name="BindProgramARB" alias="BindProgramNV">
-        <param name="target" type="GLenum"/>
-        <param name="program" type="GLuint"/>
-    </function>
-
-    <function name="DeleteProgramsARB" alias="DeleteProgramsNV">
-        <param name="n" type="GLsizei"/>
-        <param name="programs" type="const GLuint *"/>
-    </function>
-
-    <function name="GenProgramsARB" alias="GenProgramsNV">
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="programs" type="GLuint *" output="true" count="n"/>
-    </function>
-
-    <function name="IsProgramARB" alias="IsProgramNV">
-        <param name="program" type="GLuint"/>
-        <return type="GLboolean"/>
-    </function>
-
-    <function name="ProgramEnvParameter4dARB" offset="assign" vectorequiv="ProgramEnvParameter4dvARB">
-        <param name="target" type="GLenum"/>
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLdouble"/>
-        <param name="y" type="GLdouble"/>
-        <param name="z" type="GLdouble"/>
-        <param name="w" type="GLdouble"/>
-    </function>
-
-    <function name="ProgramEnvParameter4dvARB" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="index" type="GLuint"/>
-        <param name="params" type="const GLdouble *" count="4"/>
-        <glx rop="4185" doubles_in_order="true"/>
-    </function>
-
-    <function name="ProgramEnvParameter4fARB" offset="assign" vectorequiv="ProgramEnvParameter4fvARB">
-        <param name="target" type="GLenum"/>
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-        <param name="w" type="GLfloat"/>
-    </function>
-
-    <function name="ProgramEnvParameter4fvARB" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="index" type="GLuint"/>
-        <param name="params" type="const GLfloat *" count="4"/>
-        <glx rop="4184"/>
-    </function>
-
-    <function name="ProgramLocalParameter4dARB" offset="assign" vectorequiv="ProgramLocalParameter4dvARB">
-        <param name="target" type="GLenum"/>
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLdouble"/>
-        <param name="y" type="GLdouble"/>
-        <param name="z" type="GLdouble"/>
-        <param name="w" type="GLdouble"/>
-    </function>
-
-    <function name="ProgramLocalParameter4dvARB" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="index" type="GLuint"/>
-        <param name="params" type="const GLdouble *" count="4"/>
-        <glx rop="4216" doubles_in_order="true"/>
-    </function>
-
-    <function name="ProgramLocalParameter4fARB" offset="assign" vectorequiv="ProgramLocalParameter4fvARB">
-        <param name="target" type="GLenum"/>
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-        <param name="w" type="GLfloat"/>
-    </function>
-
-    <function name="ProgramLocalParameter4fvARB" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="index" type="GLuint"/>
-        <param name="params" type="const GLfloat *" count="4"/>
-        <glx rop="4215"/>
-    </function>
-
-    <!-- The GetProgramEnvParameter[df]vARB are handcoded because there
-         is an extra CARD32 of padding after the "index" field.  Originally,
-         GetProgranEnvParameter[df]vARB and GetProgramParameter[df]vNV
-         shared the same GLX protocol.  The pad field was where the pname
-         parameter was in the NV functions.  When this error was discovered
-         and fixed, there was already at least one implementation of
-         GLX protocol for ARB_vertex_program, but there were no
-         implementations of NV_vertex_program.  The sollution was to renumber
-         the opcodes for NV_vertex_program and convert the unused field in
-         the ARB_vertex_program protocol to unused padding.
-      -->
-
-    <function name="GetProgramEnvParameterdvARB" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="index" type="GLuint"/>
-        <param name="params" type="GLdouble *" output="true" count="4"/>
-        <glx vendorpriv="1297" handcode="client" doubles_in_order="true"/>
-    </function>
-
-    <function name="GetProgramEnvParameterfvARB" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="index" type="GLuint"/>
-        <param name="params" type="GLfloat *" output="true" count="4"/>
-        <glx vendorpriv="1296" handcode="client"/>
-    </function>
-
-    <function name="GetProgramLocalParameterdvARB" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="index" type="GLuint"/>
-        <param name="params" type="GLdouble *" output="true" count="4"/>
-        <glx vendorpriv="1306" handcode="client" doubles_in_order="true"/>
-    </function>
-
-    <function name="GetProgramLocalParameterfvARB" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="index" type="GLuint"/>
-        <param name="params" type="GLfloat *" output="true" count="4"/>
-        <glx vendorpriv="1305" handcode="client"/>
-    </function>
-
-
-    <function name="GetProgramivARB" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true" variable_param="pname"/>
-        <glx vendorpriv="1307"/>
-    </function>
-
-    <function name="GetProgramStringARB" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="string" type="GLvoid *" output="true"/>
-        <glx vendorpriv="1308" handcode="server" always_array="true"/>
-    </function>
-
-    <function name="GetVertexAttribPointervARB" alias="GetVertexAttribPointervNV">
-        <param name="index" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="pointer" type="GLvoid **" output="true"/>
-    </function>
-</category>
-
-<category name="GL_ARB_fragment_program" number="27">
-    <enum name="FRAGMENT_PROGRAM_ARB"          count="1"  value="0x8804">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="PROGRAM_ALU_INSTRUCTIONS_ARB"  count="1"  value="0x8805">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="PROGRAM_TEX_INSTRUCTIONS_ARB"  count="1"  value="0x8806">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="PROGRAM_TEX_INDIRECTIONS_ARB"  count="1"  value="0x8807">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB" count="1" value="0x8808">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB" count="1" value="0x8809">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB" count="1" value="0x880A">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="MAX_PROGRAM_ALU_INSTRUCTIONS_ARB" count="1" value="0x880B">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="MAX_PROGRAM_TEX_INSTRUCTIONS_ARB" count="1" value="0x880C">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="MAX_PROGRAM_TEX_INDIRECTIONS_ARB" count="1" value="0x880D">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB" count="1" value="0x880E">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB" count="1" value="0x880F">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB" count="1" value="0x8810">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="MAX_TEXTURE_COORDS_ARB"        count="1"  value="0x8871">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAX_TEXTURE_IMAGE_UNITS_ARB"   count="1"  value="0x8872">
-        <size name="Get" mode="get"/>
-    </enum>
-</category>
-
-<category name="GL_ARB_vertex_buffer_object" number="28">
-    <enum name="BUFFER_SIZE_ARB"               count="1"  value="0x8764">
-        <size name="GetBufferParameterivARB" mode="get"/>
-    </enum>
-    <enum name="BUFFER_USAGE_ARB"              count="1"  value="0x8765">
-        <size name="GetBufferParameterivARB" mode="get"/>
-    </enum>
-    <enum name="ARRAY_BUFFER_BINDING_ARB"      count="1"  value="0x8894">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="ELEMENT_ARRAY_BUFFER_BINDING_ARB" count="1" value="0x8895">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="VERTEX_ARRAY_BUFFER_BINDING_ARB" count="1" value="0x8896">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="NORMAL_ARRAY_BUFFER_BINDING_ARB" count="1" value="0x8897">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="COLOR_ARRAY_BUFFER_BINDING_ARB" count="1" value="0x8898">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="INDEX_ARRAY_BUFFER_BINDING_ARB" count="1" value="0x8899">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB" count="1" value="0x889A">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB" count="1" value="0x889B">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB" count="1" value="0x889C">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB" count="1" value="0x889D">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="WEIGHT_ARRAY_BUFFER_BINDING_ARB" count="1" value="0x889E">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB" count="1" value="0x889F">
-        <size name="GetVertexAttribdvARB" mode="get"/>
-        <size name="GetVertexAttribfvARB" mode="get"/>
-        <size name="GetVertexAttribivARB" mode="get"/>
-    </enum>
-    <enum name="READ_ONLY_ARB"                            value="0x88B8"/>
-    <enum name="WRITE_ONLY_ARB"                           value="0x88B9"/>
-    <enum name="READ_WRITE_ARB"                           value="0x88BA"/>
-    <enum name="BUFFER_ACCESS_ARB"             count="1"  value="0x88BB">
-        <size name="GetBufferParameterivARB" mode="get"/>
-    </enum>
-    <enum name="BUFFER_MAPPED_ARB"             count="1"  value="0x88BC">
-        <size name="GetBufferParameterivARB" mode="get"/>
-    </enum>
-    <enum name="BUFFER_MAP_POINTER_ARB"                   value="0x88BD"/>
-    <enum name="STREAM_DRAW_ARB"                          value="0x88E0"/>
-    <enum name="STREAM_READ_ARB"                          value="0x88E1"/>
-    <enum name="STREAM_COPY_ARB"                          value="0x88E2"/>
-    <enum name="STATIC_DRAW_ARB"                          value="0x88E4"/>
-    <enum name="STATIC_READ_ARB"                          value="0x88E5"/>
-    <enum name="STATIC_COPY_ARB"                          value="0x88E6"/>
-    <enum name="DYNAMIC_DRAW_ARB"                         value="0x88E8"/>
-    <enum name="DYNAMIC_READ_ARB"                         value="0x88E9"/>
-    <enum name="DYNAMIC_COPY_ARB"                         value="0x88EA"/>
-
-    <type name="intptrARB"   size="4"                  glx_name="CARD32"/>
-    <type name="sizeiptrARB" size="4"  unsigned="true" glx_name="CARD32"/>
-
-    <function name="BindBufferARB" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="buffer" type="GLuint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="BufferDataARB" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="size" type="GLsizeiptrARB" counter="true"/>
-        <param name="data" type="const GLvoid *" count="size" img_null_flag="true"/>
-        <param name="usage" type="GLenum"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="BufferSubDataARB" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="offset" type="GLintptrARB"/>
-        <param name="size" type="GLsizeiptrARB" counter="true"/>
-        <param name="data" type="const GLvoid *" count="size"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="DeleteBuffersARB" offset="assign">
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="buffer" type="const GLuint *" count="n"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GenBuffersARB" offset="assign">
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="buffer" type="GLuint *" output="true" count="n"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetBufferParameterivARB" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true" variable_param="pname"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetBufferPointervARB" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLvoid **" output="true"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetBufferSubDataARB" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="offset" type="GLintptrARB"/>
-        <param name="size" type="GLsizeiptrARB" counter="true"/>
-        <param name="data" type="GLvoid *" output="true" count="size"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="IsBufferARB" offset="assign">
-        <param name="buffer" type="GLuint"/>
-        <return type="GLboolean"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="MapBufferARB" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="access" type="GLenum"/>
-        <return type="GLvoid *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="UnmapBufferARB" offset="assign">
-        <param name="target" type="GLenum"/>
-        <return type="GLboolean"/>
-        <glx ignore="true"/>
-    </function>
-</category>
-
-<category name="GL_ARB_occlusion_query" number="29">
-    <enum name="QUERY_COUNTER_BITS_ARB"        count="1"  value="0x8864">
-        <size name="GetQueryivARB" mode="get"/>
-    </enum>
-    <enum name="CURRENT_QUERY_ARB"             count="1"  value="0x8865">
-        <size name="GetQueryivARB" mode="get"/>
-    </enum>
-    <enum name="QUERY_RESULT_ARB"              count="1"  value="0x8866">
-        <size name="GetQueryObjectivARB" mode="get"/>
-        <size name="GetQueryObjectuivARB" mode="get"/>
-    </enum>
-    <enum name="QUERY_RESULT_AVAILABLE_ARB"    count="1"  value="0x8867">
-        <size name="GetQueryObjectivARB" mode="get"/>
-        <size name="GetQueryObjectuivARB" mode="get"/>
-    </enum>
-    <enum name="SAMPLES_PASSED_ARB"                       value="0x8914"/>
-
-    <function name="GenQueriesARB" offset="assign">
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="ids" type="GLuint *" output="true" count="n"/>
-        <glx sop="162" always_array="true"/>
-    </function>
-
-    <function name="DeleteQueriesARB" offset="assign">
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="ids" type="const GLuint *" count="n"/>
-        <glx sop="161"/>
-    </function>
-
-    <function name="IsQueryARB" offset="assign">
-        <param name="id" type="GLuint"/>
-        <return type="GLboolean"/>
-        <glx sop="163"/>
-    </function>
-
-    <function name="BeginQueryARB" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="id" type="GLuint"/>
-        <glx rop="231"/>
-    </function>
-
-    <function name="EndQueryARB" offset="assign">
-        <param name="target" type="GLenum"/>
-        <glx rop="232"/>
-    </function>
-
-    <function name="GetQueryivARB" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true" variable_param="pname"/>
-        <glx sop="164"/>
-    </function>
-
-    <function name="GetQueryObjectivARB" offset="assign">
-        <param name="id" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true" variable_param="pname"/>
-        <glx sop="165"/>
-    </function>
-
-    <function name="GetQueryObjectuivARB" offset="assign">
-        <param name="id" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLuint *" output="true" variable_param="pname"/>
-        <glx sop="166"/>
-    </function>
-</category>
-
-<category name="GL_ARB_shader_objects" number="30">
-    <enum name="PROGRAM_OBJECT_ARB"                       value="0x8B40"/>
-    <enum name="SHADER_OBJECT_ARB"                        value="0x8B48"/>
-    <enum name="OBJECT_TYPE_ARB"                          value="0x8B4E"/>
-    <enum name="OBJECT_SUBTYPE_ARB"                       value="0x8B4F"/>
-    <enum name="FLOAT_VEC2_ARB"                           value="0x8B50"/>
-    <enum name="FLOAT_VEC3_ARB"                           value="0x8B51"/>
-    <enum name="FLOAT_VEC4_ARB"                           value="0x8B52"/>
-    <enum name="INT_VEC2_ARB"                             value="0x8B53"/>
-    <enum name="INT_VEC3_ARB"                             value="0x8B54"/>
-    <enum name="INT_VEC4_ARB"                             value="0x8B55"/>
-    <enum name="BOOL_ARB"                                 value="0x8B56"/>
-    <enum name="BOOL_VEC2_ARB"                            value="0x8B57"/>
-    <enum name="BOOL_VEC3_ARB"                            value="0x8B58"/>
-    <enum name="BOOL_VEC4_ARB"                            value="0x8B59"/>
-    <enum name="FLOAT_MAT2_ARB"                           value="0x8B5A"/>
-    <enum name="FLOAT_MAT3_ARB"                           value="0x8B5B"/>
-    <enum name="FLOAT_MAT4_ARB"                           value="0x8B5C"/>
-    <enum name="OBJECT_DELETE_STATUS_ARB"                 value="0x8B80"/>
-    <enum name="OBJECT_COMPILE_STATUS_ARB"                value="0x8B81"/>
-    <enum name="OBJECT_LINK_STATUS_ARB"                   value="0x8B82"/>
-    <enum name="OBJECT_VALIDATE_STATUS_ARB"               value="0x8B83"/>
-    <enum name="OBJECT_INFO_LOG_LENGTH_ARB"               value="0x8B84"/>
-    <enum name="OBJECT_ATTACHED_OBJECTS_ARB"              value="0x8B85"/>
-    <enum name="OBJECT_ACTIVE_UNIFORMS_ARB"               value="0x8B86"/>
-    <enum name="OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB"     value="0x8B87"/>
-    <enum name="OBJECT_SHADER_SOURCE_LENGTH_ARB"          value="0x8B88"/>
-
-    <type name="charARB"   size="1" glx_name="CARD8"/>
-    <type name="handleARB" size="4" glx_name="CARD32"/>
-
-    <function name="DeleteObjectARB" offset="assign">
-        <param name="obj" type="GLhandleARB"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetHandleARB" offset="assign">
-        <param name="pname" type="GLenum"/>
-        <return type="GLhandleARB"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="DetachObjectARB" offset="assign">
-        <param name="containerObj" type="GLhandleARB"/>
-        <param name="attachedObj" type="GLhandleARB"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="CreateShaderObjectARB" offset="assign">
-        <param name="shaderType" type="GLenum"/>
-        <return type="GLhandleARB"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="ShaderSourceARB" offset="assign">
-        <param name="shader" type="GLhandleARB"/>
-        <param name="count" type="GLsizei"/>
-        <param name="string" type="const GLcharARB **"/>
-        <param name="length" type="const GLint *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="CompileShaderARB" offset="assign">
-        <param name="shader" type="GLhandleARB"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="CreateProgramObjectARB" offset="assign">
-        <return type="GLhandleARB"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="AttachObjectARB" offset="assign">
-        <param name="containerObj" type="GLhandleARB"/>
-        <param name="obj" type="GLhandleARB"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="LinkProgramARB" offset="assign">
-        <param name="program" type="GLhandleARB"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="UseProgramObjectARB" offset="assign">
-        <param name="program" type="GLhandleARB"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="ValidateProgramARB" offset="assign">
-        <param name="program" type="GLhandleARB"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="Uniform1fARB" offset="assign">
-        <param name="location" type="GLint"/>
-        <param name="v0" type="GLfloat"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="Uniform2fARB" offset="assign">
-        <param name="location" type="GLint"/>
-        <param name="v0" type="GLfloat"/>
-        <param name="v1" type="GLfloat"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="Uniform3fARB" offset="assign">
-        <param name="location" type="GLint"/>
-        <param name="v0" type="GLfloat"/>
-        <param name="v1" type="GLfloat"/>
-        <param name="v2" type="GLfloat"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="Uniform4fARB" offset="assign">
-        <param name="location" type="GLint"/>
-        <param name="v0" type="GLfloat"/>
-        <param name="v1" type="GLfloat"/>
-        <param name="v2" type="GLfloat"/>
-        <param name="v3" type="GLfloat"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="Uniform1iARB" offset="assign">
-        <param name="location" type="GLint"/>
-        <param name="v0" type="GLint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="Uniform2iARB" offset="assign">
-        <param name="location" type="GLint"/>
-        <param name="v0" type="GLint"/>
-        <param name="v1" type="GLint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="Uniform3iARB" offset="assign">
-        <param name="location" type="GLint"/>
-        <param name="v0" type="GLint"/>
-        <param name="v1" type="GLint"/>
-        <param name="v2" type="GLint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="Uniform4iARB" offset="assign">
-        <param name="location" type="GLint"/>
-        <param name="v0" type="GLint"/>
-        <param name="v1" type="GLint"/>
-        <param name="v2" type="GLint"/>
-        <param name="v3" type="GLint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="Uniform1fvARB" offset="assign">
-        <param name="location" type="GLint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="value" type="const GLfloat *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="Uniform2fvARB" offset="assign">
-        <param name="location" type="GLint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="value" type="const GLfloat *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="Uniform3fvARB" offset="assign">
-        <param name="location" type="GLint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="value" type="const GLfloat *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="Uniform4fvARB" offset="assign">
-        <param name="location" type="GLint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="value" type="const GLfloat *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="Uniform1ivARB" offset="assign">
-        <param name="location" type="GLint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="value" type="const GLint *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="Uniform2ivARB" offset="assign">
-        <param name="location" type="GLint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="value" type="const GLint *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="Uniform3ivARB" offset="assign">
-        <param name="location" type="GLint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="value" type="const GLint *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="Uniform4ivARB" offset="assign">
-        <param name="location" type="GLint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="value" type="const GLint *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="UniformMatrix2fvARB" offset="assign">
-        <param name="location" type="GLint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="transpose" type="GLboolean"/>
-        <param name="value" type="const GLfloat *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="UniformMatrix3fvARB" offset="assign">
-        <param name="location" type="GLint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="transpose" type="GLboolean"/>
-        <param name="value" type="const GLfloat *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="UniformMatrix4fvARB" offset="assign">
-        <param name="location" type="GLint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="transpose" type="GLboolean"/>
-        <param name="value" type="const GLfloat *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetObjectParameterfvARB" offset="assign">
-        <param name="obj" type="GLhandleARB"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat *" output="true"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetObjectParameterivARB" offset="assign">
-        <param name="obj" type="GLhandleARB"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetInfoLogARB" offset="assign">
-        <param name="obj" type="GLhandleARB"/>
-        <param name="maxLength" type="GLsizei"/>
-        <param name="length" type="GLsizei *" output="true"/>
-        <param name="infoLog" type="GLcharARB *" output="true"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetAttachedObjectsARB" offset="assign">
-        <param name="containerObj" type="GLhandleARB"/>
-        <param name="maxLength" type="GLsizei"/>
-        <param name="length" type="GLsizei *" output="true"/>
-        <param name="infoLog" type="GLhandleARB *" output="true"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetUniformLocationARB" offset="assign">
-        <param name="program" type="GLhandleARB"/>
-        <param name="name" type="const GLcharARB *"/>
-        <return type="GLint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetActiveUniformARB" offset="assign">
-        <param name="program" type="GLhandleARB"/>
-        <param name="index" type="GLuint"/>
-        <param name="bufSize" type="GLsizei"/>
-        <param name="length" type="GLsizei *" output="true"/>
-        <param name="size" type="GLint *" output="true"/>
-        <param name="type" type="GLenum *" output="true"/>
-        <param name="name" type="GLcharARB *" output="true"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetUniformfvARB" offset="assign">
-        <param name="program" type="GLhandleARB"/>
-        <param name="location" type="GLint"/>
-        <param name="params" type="GLfloat *" output="true"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetUniformivARB" offset="assign">
-        <param name="program" type="GLhandleARB"/>
-        <param name="location" type="GLint"/>
-        <param name="params" type="GLint *" output="true"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetShaderSourceARB" offset="assign">
-        <param name="shader" type="GLhandleARB"/>
-        <param name="bufSize" type="GLsizei"/>
-        <param name="length" type="GLsizei *" output="true"/>
-        <param name="source" type="GLcharARB *" output="true"/>
-        <glx ignore="true"/>
-    </function>
-</category>
-
-<category name="GL_ARB_vertex_shader" number="31">
-    <enum name="VERTEX_SHADER_ARB"                        value="0x8B31"/>
-    <enum name="MAX_VERTEX_UNIFORM_COMPONENTS_ARB"        value="0x8B4A"/>
-    <enum name="MAX_VARYING_FLOATS_ARB"                   value="0x8B4B"/>
-    <enum name="MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB"       value="0x8B4C"/>
-    <enum name="MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB"     value="0x8B4D"/>
-    <enum name="OBJECT_ACTIVE_ATTRIBUTES_ARB"             value="0x8B89"/>
-    <enum name="OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB"   value="0x8B8A"/>
-
-    <function name="BindAttribLocationARB" offset="assign">
-        <param name="program" type="GLhandleARB"/>
-        <param name="index" type="GLuint"/>
-        <param name="name" type="const GLcharARB *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetActiveAttribARB" offset="assign">
-        <param name="program" type="GLhandleARB"/>
-        <param name="index" type="GLuint"/>
-        <param name="bufSize" type="GLsizei"/>
-        <param name="length" type="GLsizei *" output="true"/>
-        <param name="size" type="GLint *" output="true"/>
-        <param name="type" type="GLenum *" output="true"/>
-        <param name="name" type="GLcharARB *" output="true"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetAttribLocationARB" offset="assign">
-        <param name="program" type="GLhandleARB"/>
-        <param name="name" type="const GLcharARB *"/>
-        <return type="GLint"/>
-        <glx ignore="true"/>
-    </function>
-</category>
-
-<category name="GL_ARB_fragment_shader" number="32">
-    <enum name="FRAGMENT_SHADER_ARB"                      value="0x8B30"/>
-    <enum name="MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB"      value="0x8B49"/>
-</category>
-
-<category name="GL_ARB_shading_language_100" number="33">
-    <!-- No new functions, types, enums. -->
-</category>
-
-<category name="GL_ARB_texture_non_power_of_two" number="34">
-    <!-- No new functions, types, enums. -->
-</category>
-
-<category name="GL_ARB_point_sprite" number="35">
-    <enum name="POINT_SPRITE_ARB"              count="1"  value="0x8861">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="COORD_REPLACE_ARB"             count="1"  value="0x8862">
-        <size name="TexEnvfv"/>
-        <size name="TexEnviv"/>
-        <size name="GetTexEnvfv" mode="get"/>
-        <size name="GetTexEnviv" mode="get"/>
-    </enum>
-</category>
-
-<category name="GL_ARB_fragment_program_shadow" number="36">
-    <!-- No new functions, types, enums. -->
-</category>
-
-<category name="GL_ARB_draw_buffers" number="37">
-    <enum name="MAX_DRAW_BUFFERS_ARB"          count="1"  value="0x8824">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_BUFFER0_ARB"              count="1"  value="0x8825">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_BUFFER1_ARB"              count="1"  value="0x8826">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_BUFFER2_ARB"              count="1"  value="0x8827">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_BUFFER3_ARB"              count="1"  value="0x8828">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_BUFFER4_ARB"              count="1"  value="0x8829">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_BUFFER5_ARB"              count="1"  value="0x882A">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_BUFFER6_ARB"              count="1"  value="0x882B">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_BUFFER7_ARB"              count="1"  value="0x882C">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_BUFFER8_ARB"              count="1"  value="0x882D">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_BUFFER9_ARB"              count="1"  value="0x882E">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_BUFFER10_ARB"             count="1"  value="0x882F">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_BUFFER11_ARB"             count="1"  value="0x8830">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_BUFFER12_ARB"             count="1"  value="0x8831">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_BUFFER13_ARB"             count="1"  value="0x8832">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_BUFFER14_ARB"             count="1"  value="0x8833">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_BUFFER15_ARB"             count="1"  value="0x8834">
-        <size name="Get" mode="get"/>
-    </enum>
-
-    <function name="DrawBuffersARB" offset="assign">
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="bufs" type="const GLenum *" count="n"/>
-        <glx rop="233" large="true"/>
-    </function>
-</category>
-
-<category name="GL_ARB_texture_rectangle" number="38">
-    <enum name="TEXTURE_RECTANGLE_ARB"         count="1"  value="0x84F5">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_BINDING_RECTANGLE_ARB" count="1"  value="0x84F6">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="PROXY_TEXTURE_RECTANGLE_ARB"              value="0x84F7"/>
-    <enum name="MAX_RECTANGLE_TEXTURE_SIZE_ARB" count="1" value="0x84F8">
-        <size name="Get" mode="get"/>
-    </enum>
-</category>
-
-<xi:include href="ARB_framebuffer_object.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
-
-<xi:include href="ARB_copy_buffer.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
-
-<xi:include href="ARB_depth_clamp.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
-
-<xi:include href="ARB_map_buffer_range.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
-
-<xi:include href="ARB_vertex_array_object.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
-
-<xi:include href="ARB_sync.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
-
-<xi:include href="ARB_seamless_cube_map.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
-
-<xi:include href="ARB_draw_elements_base_vertex.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
-
-<xi:include href="NV_conditional_render.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
-
-
-<!-- Non-ARB extensions sorted by extension number. -->
-
-<category name="GL_EXT_blend_color" number="2">
-    <enum name="CONSTANT_COLOR_EXT"                       value="0x8001"/>
-    <enum name="ONE_MINUS_CONSTANT_COLOR_EXT"             value="0x8002"/>
-    <enum name="CONSTANT_ALPHA_EXT"                       value="0x8003"/>
-    <enum name="ONE_MINUS_CONSTANT_ALPHA_EXT"             value="0x8004"/>
-    <enum name="BLEND_COLOR_EXT"               count="4"  value="0x8005">
-        <size name="Get" mode="get"/>
-    </enum>
-
-    <function name="BlendColorEXT" alias="BlendColor">
-        <param name="red" type="GLclampf"/>
-        <param name="green" type="GLclampf"/>
-        <param name="blue" type="GLclampf"/>
-        <param name="alpha" type="GLclampf"/>
-    </function>
-</category>
-
-<category name="GL_EXT_polygon_offset" number="3">
-    <function name="PolygonOffsetEXT" offset="assign">
-        <param name="factor" type="GLfloat"/>
-        <param name="bias" type="GLfloat"/>
-        <glx rop="4098" ignore="true"/>
-    </function>
-</category>
-
-<category name="GL_EXT_texture" number="4">
-    <enum name="ALPHA4_EXT"                               value="0x803B"/>
-    <enum name="ALPHA8_EXT"                               value="0x803C"/>
-    <enum name="ALPHA12_EXT"                              value="0x803D"/>
-    <enum name="ALPHA16_EXT"                              value="0x803E"/>
-    <enum name="LUMINANCE4_EXT"                           value="0x803F"/>
-    <enum name="LUMINANCE8_EXT"                           value="0x8040"/>
-    <enum name="LUMINANCE12_EXT"                          value="0x8041"/>
-    <enum name="LUMINANCE16_EXT"                          value="0x8042"/>
-    <enum name="LUMINANCE4_ALPHA4_EXT"                    value="0x8043"/>
-    <enum name="LUMINANCE6_ALPHA2_EXT"                    value="0x8044"/>
-    <enum name="LUMINANCE8_ALPHA8_EXT"                    value="0x8045"/>
-    <enum name="LUMINANCE12_ALPHA4_EXT"                   value="0x8046"/>
-    <enum name="LUMINANCE12_ALPHA12_EXT"                  value="0x8047"/>
-    <enum name="LUMINANCE16_ALPHA16_EXT"                  value="0x8048"/>
-    <enum name="INTENSITY_EXT"                            value="0x8049"/>
-    <enum name="INTENSITY4_EXT"                           value="0x804A"/>
-    <enum name="INTENSITY8_EXT"                           value="0x804B"/>
-    <enum name="INTENSITY12_EXT"                          value="0x804C"/>
-    <enum name="INTENSITY16_EXT"                          value="0x804D"/>
-    <enum name="RGB2_EXT"                                 value="0x804E"/>
-    <enum name="RGB4_EXT"                                 value="0x804F"/>
-    <enum name="RGB5_EXT"                                 value="0x8050"/>
-    <enum name="RGB8_EXT"                                 value="0x8051"/>
-    <enum name="RGB10_EXT"                                value="0x8052"/>
-    <enum name="RGB12_EXT"                                value="0x8053"/>
-    <enum name="RGB16_EXT"                                value="0x8054"/>
-    <enum name="RGBA2_EXT"                                value="0x8055"/>
-    <enum name="RGBA4_EXT"                                value="0x8056"/>
-    <enum name="RGB5_A1_EXT"                              value="0x8057"/>
-    <enum name="RGBA8_EXT"                                value="0x8058"/>
-    <enum name="RGB10_A2_EXT"                             value="0x8059"/>
-    <enum name="RGBA12_EXT"                               value="0x805A"/>
-    <enum name="RGBA16_EXT"                               value="0x805B"/>
-    <enum name="TEXTURE_RED_SIZE_EXT"          count="1"  value="0x805C">
-        <size name="GetTexLevelParameterfv" mode="get"/>
-        <size name="GetTexLevelParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_GREEN_SIZE_EXT"        count="1"  value="0x805D">
-        <size name="GetTexLevelParameterfv" mode="get"/>
-        <size name="GetTexLevelParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_BLUE_SIZE_EXT"         count="1"  value="0x805E">
-        <size name="GetTexLevelParameterfv" mode="get"/>
-        <size name="GetTexLevelParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_ALPHA_SIZE_EXT"        count="1"  value="0x805F">
-        <size name="GetTexLevelParameterfv" mode="get"/>
-        <size name="GetTexLevelParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_LUMINANCE_SIZE_EXT"    count="1"  value="0x8060">
-        <size name="GetTexLevelParameterfv" mode="get"/>
-        <size name="GetTexLevelParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_INTENSITY_SIZE_EXT"    count="1"  value="0x8061">
-        <size name="GetTexLevelParameterfv" mode="get"/>
-        <size name="GetTexLevelParameteriv" mode="get"/>
-    </enum>
-    <enum name="REPLACE_EXT"                              value="0x8062"/>
-    <enum name="PROXY_TEXTURE_1D_EXT"                     value="0x8063"/>
-    <enum name="PROXY_TEXTURE_2D_EXT"                     value="0x8064"/>
-    <enum name="TEXTURE_TOO_LARGE_EXT"                    value="0x8065"/>
-</category>
-
-<!-- Extension number 5 is not listed in the extension registry. -->
-
-<category name="GL_EXT_texture3D" number="6">
-    <function name="TexImage3DEXT" alias="TexImage3D">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-        <param name="depth" type="GLsizei"/>
-        <param name="border" type="GLint"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="pixels" type="const GLvoid *"/>
-    </function>
-
-    <function name="TexSubImage3DEXT" alias="TexSubImage3D">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="xoffset" type="GLint"/>
-        <param name="yoffset" type="GLint"/>
-        <param name="zoffset" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-        <param name="depth" type="GLsizei"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="UNUSED" type="GLuint" padding="true"/>
-        <param name="pixels" type="const GLvoid *"/>
-    </function>
-</category>
-
-<category name="GL_SGIS_texture_filter4" number="7">
-    <function name="GetTexFilterFuncSGIS">
-        <param name="target" type="GLenum"/>
-        <param name="filter" type="GLenum"/>
-        <param name="weights" type="GLfloat *" output="true"/>
-        <glx vendorpriv="4101" ignore="true"/>
-    </function>
-
-    <function name="TexFilterFuncSGIS">
-        <param name="target" type="GLenum"/>
-        <param name="filter" type="GLenum"/>
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="weights" type="const GLfloat *" count="n"/>
-        <glx rop="2064" ignore="true"/>
-    </function>
-</category>
-
-<!-- Extension number 8 is not listed in the extension registry. -->
-
-<category name="GL_EXT_subtexture" number="9">
-    <function name="TexSubImage1DEXT" alias="TexSubImage1D">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="xoffset" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="UNUSED" type="GLuint" padding="true"/>
-        <param name="pixels" type="const GLvoid *"/>
-    </function>
-
-    <function name="TexSubImage2DEXT" alias="TexSubImage2D">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="xoffset" type="GLint"/>
-        <param name="yoffset" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="UNUSED" type="GLuint" padding="true"/>
-        <param name="pixels" type="const GLvoid *"/>
-    </function>
-</category>
-
-<category name="GL_EXT_copy_texture" number="10">
-    <function name="CopyTexImage1DEXT" alias="CopyTexImage1D">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <param name="border" type="GLint"/>
-    </function>
-
-    <function name="CopyTexImage2DEXT" alias="CopyTexImage2D">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-        <param name="border" type="GLint"/>
-    </function>
-
-    <function name="CopyTexSubImage1DEXT" alias="CopyTexSubImage1D">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="xoffset" type="GLint"/>
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-    </function>
-
-    <function name="CopyTexSubImage2DEXT" alias="CopyTexSubImage2D">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="xoffset" type="GLint"/>
-        <param name="yoffset" type="GLint"/>
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-    </function>
-
-    <function name="CopyTexSubImage3DEXT" alias="CopyTexSubImage3D">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="xoffset" type="GLint"/>
-        <param name="yoffset" type="GLint"/>
-        <param name="zoffset" type="GLint"/>
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-    </function>
-</category>
-
-<category name="GL_EXT_histogram" number="11">
-    <enum name="HISTOGRAM_EXT"                            value="0x8024"/>
-    <enum name="PROXY_HISTOGRAM_EXT"                      value="0x8025"/>
-    <enum name="HISTOGRAM_WIDTH_EXT"           count="1"  value="0x8026">
-        <size name="GetHistogramParameterfvEXT" mode="get"/>
-        <size name="GetHistogramParameterivEXT" mode="get"/>
-    </enum>
-    <enum name="HISTOGRAM_FORMAT_EXT"          count="1"  value="0x8027">
-        <size name="GetHistogramParameterfvEXT" mode="get"/>
-        <size name="GetHistogramParameterivEXT" mode="get"/>
-    </enum>
-    <enum name="HISTOGRAM_RED_SIZE_EXT"        count="1"  value="0x8028">
-        <size name="GetHistogramParameterfvEXT" mode="get"/>
-        <size name="GetHistogramParameterivEXT" mode="get"/>
-    </enum>
-    <enum name="HISTOGRAM_GREEN_SIZE_EXT"      count="1"  value="0x8029">
-        <size name="GetHistogramParameterfvEXT" mode="get"/>
-        <size name="GetHistogramParameterivEXT" mode="get"/>
-    </enum>
-    <enum name="HISTOGRAM_BLUE_SIZE_EXT"       count="1"  value="0x802A">
-        <size name="GetHistogramParameterfvEXT" mode="get"/>
-        <size name="GetHistogramParameterivEXT" mode="get"/>
-    </enum>
-    <enum name="HISTOGRAM_ALPHA_SIZE_EXT"      count="1"  value="0x802B">
-        <size name="GetHistogramParameterfvEXT" mode="get"/>
-        <size name="GetHistogramParameterivEXT" mode="get"/>
-    </enum>
-    <enum name="HISTOGRAM_LUMINANCE_SIZE_EXT"  count="1"  value="0x802C">
-        <size name="GetHistogramParameterfvEXT" mode="get"/>
-        <size name="GetHistogramParameterivEXT" mode="get"/>
-    </enum>
-    <enum name="HISTOGRAM_SINK_EXT"            count="1"  value="0x802D">
-        <size name="GetHistogramParameterfvEXT" mode="get"/>
-        <size name="GetHistogramParameterivEXT" mode="get"/>
-    </enum>
-    <enum name="MINMAX_EXT"                               value="0x802E"/>
-    <enum name="MINMAX_FORMAT_EXT"             count="1"  value="0x802F">
-        <size name="GetMinmaxParameterfvEXT" mode="get"/>
-        <size name="GetMinmaxParameterivEXT" mode="get"/>
-    </enum>
-    <enum name="MINMAX_SINK_EXT"               count="1"  value="0x8030">
-        <size name="GetMinmaxParameterfvEXT" mode="get"/>
-        <size name="GetMinmaxParameterivEXT" mode="get"/>
-    </enum>
-    <enum name="TABLE_TOO_LARGE_EXT"                      value="0x8031"/>
-
-    <function name="GetHistogramEXT" alias="GetHistogram" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="reset" type="GLboolean"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="values" type="GLvoid *" output="true" img_width="width" img_format="format" img_type="type"/>
-        <glx vendorpriv="5" dimensions_in_reply="true" img_reset="reset"/>
-    </function>
-
-    <function name="GetHistogramParameterfvEXT" alias="GetHistogramParameterfv" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
-        <glx vendorpriv="6"/>
-    </function>
-
-    <function name="GetHistogramParameterivEXT" alias="GetHistogramParameteriv" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true" variable_param="pname"/>
-        <glx vendorpriv="7"/>
-    </function>
-
-    <function name="GetMinmaxEXT" alias="GetMinmax" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="reset" type="GLboolean"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="values" type="GLvoid *" output="true" img_width="2" img_format="format" img_type="type"/>
-        <glx vendorpriv="8" img_reset="reset"/>
-    </function>
-
-    <function name="GetMinmaxParameterfvEXT" alias="GetMinmaxParameterfv" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
-        <glx vendorpriv="9"/>
-    </function>
-
-    <function name="GetMinmaxParameterivEXT" alias="GetMinmaxParameteriv" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true" variable_param="pname"/>
-        <glx vendorpriv="10"/>
-    </function>
-
-    <function name="HistogramEXT" alias="Histogram" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="width" type="GLsizei"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="sink" type="GLboolean"/>
-    </function>
-
-    <function name="MinmaxEXT" alias="Minmax" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="sink" type="GLboolean"/>
-    </function>
-
-    <function name="ResetHistogramEXT" alias="ResetHistogram" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-    </function>
-
-    <function name="ResetMinmaxEXT" alias="ResetMinmax" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-    </function>
-</category>
-
-<category name="GL_EXT_convolution" number="12">
-    <enum name="CONVOLUTION_BORDER_MODE_EXT"   count="1"  value="0x8013">
-        <size name="ConvolutionParameterfv"/>
-        <size name="ConvolutionParameteriv"/>
-        <size name="GetConvolutionParameterfv" mode="get"/>
-        <size name="GetConvolutionParameteriv" mode="get"/>
-    </enum>
-    <enum name="CONVOLUTION_FILTER_SCALE_EXT"  count="4"  value="0x8014">
-        <size name="ConvolutionParameterfv"/>
-        <size name="ConvolutionParameteriv"/>
-        <size name="GetConvolutionParameterfv" mode="get"/>
-        <size name="GetConvolutionParameteriv" mode="get"/>
-    </enum>
-    <enum name="CONVOLUTION_FILTER_BIAS_EXT"   count="4"  value="0x8015">
-        <size name="ConvolutionParameterfv"/>
-        <size name="ConvolutionParameteriv"/>
-        <size name="GetConvolutionParameterfv" mode="get"/>
-        <size name="GetConvolutionParameteriv" mode="get"/>
-    </enum>
-    <enum name="REDUCE_EXT"                               value="0x8016"/>
-    <enum name="CONVOLUTION_FORMAT_EXT"        count="1"  value="0x8017">
-        <size name="GetConvolutionParameterfv" mode="get"/>
-        <size name="GetConvolutionParameteriv" mode="get"/>
-    </enum>
-    <enum name="CONVOLUTION_WIDTH_EXT"         count="1"  value="0x8018">
-        <size name="GetConvolutionParameterfv" mode="get"/>
-        <size name="GetConvolutionParameteriv" mode="get"/>
-    </enum>
-    <enum name="CONVOLUTION_HEIGHT_EXT"        count="1"  value="0x8019">
-        <size name="GetConvolutionParameterfv" mode="get"/>
-        <size name="GetConvolutionParameteriv" mode="get"/>
-    </enum>
-    <enum name="MAX_CONVOLUTION_WIDTH_EXT"     count="1"  value="0x801A">
-        <size name="GetConvolutionParameterfv" mode="get"/>
-        <size name="GetConvolutionParameteriv" mode="get"/>
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAX_CONVOLUTION_HEIGHT_EXT"    count="1"  value="0x801B">
-        <size name="GetConvolutionParameterfv" mode="get"/>
-        <size name="GetConvolutionParameteriv" mode="get"/>
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POST_CONVOLUTION_RED_SCALE_EXT" count="1" value="0x801C">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POST_CONVOLUTION_GREEN_SCALE_EXT" count="1" value="0x801D">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POST_CONVOLUTION_BLUE_SCALE_EXT" count="1" value="0x801E">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POST_CONVOLUTION_ALPHA_SCALE_EXT" count="1" value="0x801F">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POST_CONVOLUTION_RED_BIAS_EXT" count="1"  value="0x8020">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POST_CONVOLUTION_GREEN_BIAS_EXT" count="1" value="0x8021">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POST_CONVOLUTION_BLUE_BIAS_EXT" count="1" value="0x8022">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="POST_CONVOLUTION_ALPHA_BIAS_EXT" count="1" value="0x8023">
-        <size name="Get" mode="get"/>
-    </enum>
-
-    <function name="ConvolutionFilter1DEXT" alias="ConvolutionFilter1D" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="width" type="GLsizei"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="image" type="const GLvoid *"/>
-    </function>
-
-    <function name="ConvolutionFilter2DEXT" alias="ConvolutionFilter2D" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="image" type="const GLvoid *"/>
-    </function>
-
-    <function name="ConvolutionParameterfEXT" alias="ConvolutionParameterf" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat"/>
-    </function>
-
-    <function name="ConvolutionParameterfvEXT" alias="ConvolutionParameterfv" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLfloat *"/>
-    </function>
-
-    <function name="ConvolutionParameteriEXT" alias="ConvolutionParameteri" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint"/>
-    </function>
-
-    <function name="ConvolutionParameterivEXT" alias="ConvolutionParameteriv" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLint *"/>
-    </function>
-
-    <function name="CopyConvolutionFilter1DEXT" alias="CopyConvolutionFilter1D" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-    </function>
-
-    <function name="CopyConvolutionFilter2DEXT" alias="CopyConvolutionFilter2D" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-    </function>
-
-    <function name="GetConvolutionFilterEXT" alias="GetConvolutionFilter" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="image" type="GLvoid *" output="true" img_width="width" img_height="height" img_format="format" img_type="type"/>
-        <glx vendorpriv="1" dimensions_in_reply="true"/>
-    </function>
-
-    <function name="GetConvolutionParameterfvEXT" alias="GetConvolutionParameterfv" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
-        <glx vendorpriv="2"/>
-    </function>
-
-    <function name="GetConvolutionParameterivEXT" alias="GetConvolutionParameteriv" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true" variable_param="pname"/>
-        <glx vendorpriv="3"/>
-    </function>
-
-    <function name="GetSeparableFilterEXT" alias="GetSeparableFilter" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="row" type="GLvoid *" output="true"/>
-        <param name="column" type="GLvoid *" output="true"/>
-        <param name="span" type="GLvoid *" output="true"/>
-        <glx vendorpriv="4" handcode="true"/>
-    </function>
-
-    <function name="SeparableFilter2DEXT" alias="SeparableFilter2D" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="row" type="const GLvoid *"/>
-        <param name="column" type="const GLvoid *"/>
-    </function>
-</category>
-
-<category name="GL_SGI_color_matrix" number="13">
-    <enum name="COLOR_MATRIX_SGI"                         value="0x80B1"/>
-    <enum name="COLOR_MATRIX_STACK_DEPTH_SGI"             value="0x80B2"/>
-    <enum name="MAX_COLOR_MATRIX_STACK_DEPTH_SGI"         value="0x80B3"/>
-    <enum name="POST_COLOR_MATRIX_RED_SCALE_SGI"          value="0x80B4"/>
-    <enum name="POST_COLOR_MATRIX_GREEN_SCALE_SGI"        value="0x80B5"/>
-    <enum name="POST_COLOR_MATRIX_BLUE_SCALE_SGI"         value="0x80B6"/>
-    <enum name="POST_COLOR_MATRIX_ALPHA_SCALE_SGI"        value="0x80B7"/>
-    <enum name="POST_COLOR_MATRIX_RED_BIAS_SGI"           value="0x80B8"/>
-    <enum name="POST_COLOR_MATRIX_GREEN_BIAS_SGI"         value="0x80B9"/>
-    <enum name="POST_COLOR_MATRIX_BLUE_BIAS_SGI"          value="0x80BA"/>
-    <enum name="POST_COLOR_MATRIX_ALPHA_BIAS_SGI"         value="0x80BB"/>
-</category>
-
-<category name="GL_SGI_color_table" number="14">
-    <enum name="COLOR_TABLE_SCALE_SGI"         count="4"  value="0x80D6">
-        <size name="ColorTableParameterfvSGI"/>
-        <size name="ColorTableParameterivSGI"/>
-        <size name="GetColorTableParameterfvSGI" mode="get"/>
-        <size name="GetColorTableParameterivSGI" mode="get"/>
-    </enum>
-    <enum name="COLOR_TABLE_BIAS_SGI"          count="4"  value="0x80D7">
-        <size name="ColorTableParameterfvSGI"/>
-        <size name="ColorTableParameterivSGI"/>
-        <size name="GetColorTableParameterfvSGI" mode="get"/>
-        <size name="GetColorTableParameterivSGI" mode="get"/>
-    </enum>
-    <enum name="COLOR_TABLE_FORMAT_SGI"        count="1"  value="0x80D8">
-        <size name="GetColorTableParameterfvSGI" mode="get"/>
-        <size name="GetColorTableParameterivSGI" mode="get"/>
-    </enum>
-    <enum name="COLOR_TABLE_WIDTH_SGI"         count="1"  value="0x80D9">
-        <size name="GetColorTableParameterfvSGI" mode="get"/>
-        <size name="GetColorTableParameterivSGI" mode="get"/>
-    </enum>
-    <enum name="COLOR_TABLE_RED_SIZE_SGI"      count="1"  value="0x80DA">
-        <size name="GetColorTableParameterfvSGI" mode="get"/>
-        <size name="GetColorTableParameterivSGI" mode="get"/>
-    </enum>
-    <enum name="COLOR_TABLE_GREEN_SIZE_SGI"    count="1"  value="0x80DB">
-        <size name="GetColorTableParameterfvSGI" mode="get"/>
-        <size name="GetColorTableParameterivSGI" mode="get"/>
-    </enum>
-    <enum name="COLOR_TABLE_BLUE_SIZE_SGI"     count="1"  value="0x80DC">
-        <size name="GetColorTableParameterfvSGI" mode="get"/>
-        <size name="GetColorTableParameterivSGI" mode="get"/>
-    </enum>
-    <enum name="COLOR_TABLE_ALPHA_SIZE_SGI"    count="1"  value="0x80DD">
-        <size name="GetColorTableParameterfvSGI" mode="get"/>
-        <size name="GetColorTableParameterivSGI" mode="get"/>
-    </enum>
-    <enum name="COLOR_TABLE_LUMINANCE_SIZE_SGI" count="1" value="0x80DE">
-        <size name="GetColorTableParameterfvSGI" mode="get"/>
-        <size name="GetColorTableParameterivSGI" mode="get"/>
-    </enum>
-    <enum name="COLOR_TABLE_INTENSITY_SIZE_SGI" count="1" value="0x80DF">
-        <size name="GetColorTableParameterfvSGI" mode="get"/>
-        <size name="GetColorTableParameterivSGI" mode="get"/>
-    </enum>
-
-    <function name="ColorTableSGI" alias="ColorTable" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="width" type="GLsizei"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="table" type="const GLvoid *"/>
-    </function>
-
-    <function name="ColorTableParameterfvSGI" alias="ColorTableParameterfv" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLfloat *"/>
-    </function>
-
-    <function name="ColorTableParameterivSGI" alias="ColorTableParameteriv" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLint *"/>
-    </function>
-
-    <function name="CopyColorTableSGI" alias="CopyColorTable" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-    </function>
-
-    <function name="GetColorTableSGI" alias="GetColorTable" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="table" type="GLvoid *" output="true" img_width="width" img_format="format" img_type="type"/>
-        <glx vendorpriv="4098" dimensions_in_reply="true"/>
-    </function>
-
-    <function name="GetColorTableParameterfvSGI" alias="GetColorTableParameterfv" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
-        <glx vendorpriv="4099"/>
-    </function>
-
-    <function name="GetColorTableParameterivSGI" alias="GetColorTableParameteriv" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true" variable_param="pname"/>
-        <glx vendorpriv="4100"/>
-    </function>
-</category>
-
-<category name="GL_SGIS_pixel_texture" number="15">
-    <function name="PixelTexGenParameteriSGIS" offset="assign" static_dispatch="false">
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="PixelTexGenParameterivSGIS" offset="assign" static_dispatch="false">
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLint *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="PixelTexGenParameterfSGIS" offset="assign" static_dispatch="false">
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLfloat"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="PixelTexGenParameterfvSGIS" offset="assign" static_dispatch="false">
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLfloat *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetPixelTexGenParameterivSGIS" offset="assign" static_dispatch="false">
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true" variable_param="pname"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetPixelTexGenParameterfvSGIS" offset="assign" static_dispatch="false">
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
-        <glx ignore="true"/>
-    </function>
-</category>
-
-<category name="GL_SGIS_texture4D" number="16">
-    <function name="TexImage4DSGIS">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-        <param name="depth" type="GLsizei"/>
-        <param name="size4d" type="GLsizei"/>
-        <param name="border" type="GLint"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="pixels" type="const GLvoid *" img_width="width" img_height="height" img_depth="depth" img_extent="size4d" img_format="format" img_type="type" img_target="target" img_null_flag="true" img_pad_dimensions="true"/>
-        <glx rop="2057" ignore="true"/>
-    </function>
-
-    <function name="TexSubImage4DSGIS">
-        <param name="target" type="GLenum"/>
-        <param name="level" type="GLint"/>
-        <param name="xoffset" type="GLint"/>
-        <param name="yoffset" type="GLint"/>
-        <param name="zoffset" type="GLint"/>
-        <param name="woffset" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-        <param name="height" type="GLsizei"/>
-        <param name="depth" type="GLsizei"/>
-        <param name="size4d" type="GLsizei"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="UNUSED" type="GLuint" padding="true"/>
-        <param name="pixels" type="const GLvoid *" img_width="width" img_height="height" img_depth="depth" img_extent="size4d" img_xoff="xoffset" img_yoff="yoffset" img_zoff="zoffset" img_woff="woffset" img_format="format" img_type="type" img_target="target" img_pad_dimensions="true"/>
-        <glx rop="2058" ignore="true"/>
-    </function>
-</category>
-
-<category name="GL_SGI_texture_color_table" number="17">
-    <enum name="TEXTURE_COLOR_TABLE_SGI"                  value="0x80BC"/>
-    <enum name="PROXY_TEXTURE_COLOR_TABLE_SGI"            value="0x80BD"/>
-</category>
-
-<!-- Extension number 19 is not listed in the extension registry. -->
-
-<category name="GL_EXT_texture_object" number="20">
-    <function name="AreTexturesResidentEXT" alias="AreTexturesResident">
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="textures" type="const GLuint *" count="n"/>
-        <param name="residences" type="GLboolean *" output="true" count="n"/>
-        <return type="GLboolean"/>
-        <glx vendorpriv="11" handcode="client" always_array="true"/>
-    </function>
-
-    <function name="BindTextureEXT" alias="BindTexture">
-        <param name="target" type="GLenum"/>
-        <param name="texture" type="GLuint"/>
-    </function>
-
-    <function name="DeleteTexturesEXT" alias="DeleteTextures">
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="textures" type="const GLuint *" count="n"/>
-        <glx vendorpriv="12"/>
-    </function>
-
-    <function name="GenTexturesEXT" alias="GenTextures">
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="textures" type="GLuint *" output="true" count="n"/>
-        <glx vendorpriv="13" always_array="true"/>
-    </function>
-
-    <function name="IsTextureEXT" alias="IsTexture">
-        <param name="texture" type="GLuint"/>
-        <return type="GLboolean"/>
-        <glx vendorpriv="14"/>
-    </function>
-
-    <function name="PrioritizeTexturesEXT" alias="PrioritizeTextures">
-        <param name="n" type="GLsizei"/>
-        <param name="textures" type="const GLuint *"/>
-        <param name="priorities" type="const GLclampf *"/>
-    </function>
-</category>
-
-<category name="GL_SGIS_detail_texture" number="21">
-    <function name="DetailTexFuncSGIS">
-        <param name="target" type="GLenum"/>
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="points" type="const GLfloat *" count="n"/>
-        <glx rop="2051" ignore="true"/>
-    </function>
-
-    <function name="GetDetailTexFuncSGIS">
-        <param name="target" type="GLenum"/>
-        <param name="points" type="GLfloat *" output="true"/>
-        <glx vendorpriv="4096" ignore="true"/>
-    </function>
-</category>
-
-<category name="GL_SGIS_sharpen_texture" number="22">
-    <function name="SharpenTexFuncSGIS">
-        <param name="target" type="GLenum"/>
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="points" type="const GLfloat *" count="n" count_scale="2"/>
-        <glx rop="2052" ignore="true"/>
-    </function>
-
-    <function name="GetSharpenTexFuncSGIS">
-        <param name="target" type="GLenum"/>
-        <param name="points" type="GLfloat *" output="true"/>
-        <glx vendorpriv="4097" ignore="true"/>
-    </function>
-</category>
-
-<category name="GL_SGIS_multisample" number="25">
-    <function name="SampleMaskSGIS" offset="assign" static_dispatch="false">
-        <param name="value" type="GLclampf"/>
-        <param name="invert" type="GLboolean"/>
-        <glx rop="2048"/>
-    </function>
-
-    <function name="SamplePatternSGIS" offset="assign" static_dispatch="false">
-        <param name="pattern" type="GLenum"/>
-        <glx rop="2049"/>
-    </function>
-</category>
-
-<!-- Extension number 26 is not listed in the extension registry. -->
-
-<category name="GL_EXT_rescale_normal" number="27">
-    <enum name="RESCALE_NORMAL_EXT"            count="1"  value="0x803A">
-        <size name="Get" mode="get"/>
-    </enum>
-</category>
-
-<!-- Extension number 28 is a GLX extension. -->
-<!-- Extension number 29 is not listed in the extension registry. -->
-
-<category name="GL_EXT_vertex_array" number="30">
-    <function name="ArrayElementEXT" alias="ArrayElement">
-        <param name="i" type="GLint"/>
-    </function>
-
-    <function name="ColorPointerEXT" offset="assign">
-        <param name="size" type="GLint"/>
-        <param name="type" type="GLenum"/>
-        <param name="stride" type="GLsizei"/>
-        <param name="count" type="GLsizei"/>
-        <param name="pointer" type="const GLvoid *"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="DrawArraysEXT" alias="DrawArrays">
-        <param name="mode" type="GLenum"/>
-        <param name="first" type="GLint"/>
-        <param name="count" type="GLsizei"/>
-    </function>
-
-    <function name="EdgeFlagPointerEXT" offset="assign">
-        <param name="stride" type="GLsizei"/>
-        <param name="count" type="GLsizei"/>
-        <param name="pointer" type="const GLboolean *"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="GetPointervEXT" alias="GetPointerv">
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLvoid **" output="true"/>
-    </function>
-
-    <function name="IndexPointerEXT" offset="assign">
-        <param name="type" type="GLenum"/>
-        <param name="stride" type="GLsizei"/>
-        <param name="count" type="GLsizei"/>
-        <param name="pointer" type="const GLvoid *"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="NormalPointerEXT" offset="assign">
-        <param name="type" type="GLenum"/>
-        <param name="stride" type="GLsizei"/>
-        <param name="count" type="GLsizei"/>
-        <param name="pointer" type="const GLvoid *"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="TexCoordPointerEXT" offset="assign">
-        <param name="size" type="GLint"/>
-        <param name="type" type="GLenum"/>
-        <param name="stride" type="GLsizei"/>
-        <param name="count" type="GLsizei"/>
-        <param name="pointer" type="const GLvoid *"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="VertexPointerEXT" offset="assign">
-        <param name="size" type="GLint"/>
-        <param name="type" type="GLenum"/>
-        <param name="stride" type="GLsizei"/>
-        <param name="count" type="GLsizei"/>
-        <param name="pointer" type="const GLvoid *"/>
-        <glx handcode="true"/>
-    </function>
-</category>
-
-<category name="GL_SGIS_generate_mipmap" number="32">
-    <enum name="GENERATE_MIPMAP_SGIS"          count="1"  value="0x8191">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-    <enum name="GENERATE_MIPMAP_HINT_SGIS"                value="0x8192"/>
-</category>
-
-<category name="GL_SGIX_clipmap" number="33">
-    <enum name="LINEAR_CLIPMAP_LINEAR_SGIX"               value="0x8170"/>
-    <enum name="TEXTURE_CLIPMAP_CENTER_SGIX"   count="2"  value="0x8171">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_CLIPMAP_FRAME_SGIX"    count="1"  value="0x8172">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_CLIPMAP_OFFSET_SGIX"   count="2"  value="0x8173">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX" count="3" value="0x8174">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_CLIPMAP_LOD_OFFSET_SGIX"          value="0x8175"/>
-    <enum name="TEXTURE_CLIPMAP_DEPTH_SGIX"               value="0x8176"/>
-    <enum name="MAX_CLIPMAP_DEPTH_SGIX"                   value="0x8177"/>
-    <enum name="MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX"           value="0x8178"/>
-    <enum name="NEAREST_CLIPMAP_NEAREST_SGIX"             value="0x844D"/>
-    <enum name="NEAREST_CLIPMAP_LINEAR_SGIX"              value="0x844E"/>
-    <enum name="LINEAR_CLIPMAP_NEAREST_SGIX"              value="0x844F"/>
-</category>
-
-<category name="GL_SGIX_shadow" number="34">
-    <enum name="TEXTURE_COMPARE_SGIX"          count="1"  value="0x819A">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_COMPARE_OPERATOR_SGIX" count="1"  value="0x819B">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_LEQUAL_R_SGIX"                    value="0x819C"/>
-    <enum name="TEXTURE_GEQUAL_R_SGIX"                    value="0x819D"/>
-</category>
-
-<category name="GL_SGIS_texture_edge_clamp" number="35">
-    <enum name="CLAMP_TO_EDGE_SGIS"                       value="0x812F"/>
-</category>
-
-<category name="GL_SGIS_texture_border_clamp" number="36">
-    <enum name="CLAMP_TO_BORDER_SGIS"                     value="0x812D"/>
-</category>
-
-<category name="GL_EXT_blend_minmax" number="37">
-    <enum name="FUNC_ADD_EXT"                             value="0x8006"/>
-    <enum name="MIN_EXT"                                  value="0x8007"/>
-    <enum name="MAX_EXT"                                  value="0x8008"/>
-    <enum name="BLEND_EQUATION_EXT"            count="1"  value="0x8009">
-        <size name="Get" mode="get"/>
-    </enum>
-
-    <function name="BlendEquationEXT" alias="BlendEquation">
-        <param name="mode" type="GLenum"/>
-    </function>
-</category>
-
-<category name="GL_EXT_blend_subtract" number="38">
-    <enum name="FUNC_SUBTRACT_EXT"                        value="0x800A"/>
-    <enum name="FUNC_REVERSE_SUBTRACT_EXT"                value="0x800B"/>
-
-    <!-- <function name="BlendEquationEXT" alias="BlendEquation">
-        <param name="mode" type="GLenum"/>
-    </function> -->
-</category>
-
-<!-- Extension number 40 is a GLX extension. -->
-<!-- Extension number 41 is a GLX extension. -->
-<!-- Extension number 42 is a GLX extension. -->
-<!-- Extension number 43 is a GLX extension. -->
-<!-- Extension number 44 is a GLX extension. -->
-<!-- Extension number 46 is not listed in the extension registry. -->
-<!-- Extension number 47 is a GLX extension. -->
-<!-- Extension number 48 is not listed in the extension registry. -->
-<!-- Extension number 49 is a GLX extension. -->
-<!-- Extension number 50 is a GLX extension. -->
-
-<category name="GL_SGIX_sprite" number="52">
-    <function name="SpriteParameterfSGIX">
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLfloat"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="SpriteParameterfvSGIX">
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLfloat *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="SpriteParameteriSGIX">
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="SpriteParameterivSGIX">
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLint *"/>
-        <glx ignore="true"/>
-    </function>
-</category>
-
-<category name="GL_EXT_point_parameters" number="54">
-    <enum name="POINT_SIZE_MIN_EXT"            count="1"  value="0x8126">
-        <size name="PointParameterfvEXT"/>
-    </enum>
-    <enum name="POINT_SIZE_MAX_EXT"            count="1"  value="0x8127">
-        <size name="PointParameterfvEXT"/>
-    </enum>
-    <enum name="POINT_FADE_THRESHOLD_SIZE_EXT" count="1"  value="0x8128">
-        <size name="PointParameterfvEXT"/>
-    </enum>
-    <enum name="POINT_DISTANCE_ATTENUATION_EXT" count="3" value="0x8129">
-        <size name="PointParameterfvEXT"/>
-    </enum>
-
-    <function name="PointParameterfEXT" offset="assign">
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLfloat"/>
-        <glx rop="2065"/>
-    </function>
-
-    <function name="PointParameterfvEXT" offset="assign">
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLfloat *" variable_param="pname"/>
-        <glx rop="2066"/>
-    </function>
-</category>
-
-<category name="GL_SGIX_instruments" number="55">
-    <function name="GetInstrumentsSGIX">
-        <return type="GLint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="InstrumentsBufferSGIX">
-        <param name="size" type="GLsizei"/>
-        <param name="buffer" type="GLint *" output="true"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="PollInstrumentsSGIX">
-        <param name="marker_p" type="GLint *" output="true"/>
-        <return type="GLint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="ReadInstrumentsSGIX">
-        <param name="marker" type="GLint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="StartInstrumentsSGIX">
-        <glx ignore="true"/>
-    </function>
-
-    <function name="StopInstrumentsSGIX">
-        <param name="marker" type="GLint"/>
-        <glx ignore="true"/>
-    </function>
-</category>
-
-<category name="GL_SGIX_texture_scale_bias" number="56">
-    <enum name="POST_TEXTURE_FILTER_BIAS_SGIX"  count="4" value="0x8179">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-    <enum name="POST_TEXTURE_FILTER_SCALE_SGIX" count="4" value="0x817A">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-    <enum name="POST_TEXTURE_FILTER_BIAS_RANGE_SGIX"      value="0x817B"/>
-    <enum name="POST_TEXTURE_FILTER_SCALE_RANGE_SGIX"     value="0x817C"/>
-</category>
-
-<category name="GL_SGIX_framezoom" number="57">
-    <function name="FrameZoomSGIX">
-        <param name="factor" type="GLint"/>
-        <glx rop="2072" ignore="true"/>
-    </function>
-</category>
-
-<category name="GL_SGIX_tag_sample_buffer" number="58">
-    <function name="TagSampleBufferSGIX">
-        <glx rop="2050" ignore="true"/>
-    </function>
-</category>
-
-<!-- Extension number 59 is not listed in the extension registry. -->
-
-<category name="GL_SGIX_reference_plane" number="60">
-    <function name="ReferencePlaneSGIX">
-        <param name="equation" type="const GLdouble *" count="4"/>
-        <glx rop="2071" ignore="true"/>
-    </function>
-</category>
-
-<category name="GL_SGIX_flush_raster" number="61">
-    <function name="FlushRasterSGIX">
-        <glx vendorpriv="4105" ignore="true"/>
-    </function>
-</category>
-
-<!-- Extension number 62 is a GLX extension. -->
-
-<category name="GL_SGIX_depth_texture" number="63">
-    <enum name="DEPTH_COMPONENT16_SGIX"                   value="0x81A5"/>
-    <enum name="DEPTH_COMPONENT24_SGIX"                   value="0x81A6"/>
-    <enum name="DEPTH_COMPONENT32_SGIX"                   value="0x81A7"/>
-</category>
-
-<category name="GL_SGIS_fog_function" number="64">
-    <function name="FogFuncSGIS">
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="points" type="const GLfloat *" count="n" count_scale="2"/>
-        <glx rop="2067" ignore="true"/>
-    </function>
-
-    <function name="GetFogFuncSGIS">
-        <param name="points" type="GLfloat *" output="true"/>
-        <!-- GLX protocol for this function is unknown. -->
-    </function>
-</category>
-
-<category name="GL_SGIX_fog_offset" number="65">
-    <enum name="FOG_OFFSET_SGIX"                          value="0x8198"/>
-    <enum name="FOG_OFFSET_VALUE_SGIX"         count="1"  value="0x8199">
-        <size name="Fogfv"/>
-        <size name="Fogiv"/>
-    </enum>
-</category>
-
-<category name="GL_HP_image_transform" number="66">
-    <function name="ImageTransformParameteriHP">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLint"/>
-    </function>
-
-    <function name="ImageTransformParameterfHP">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLfloat"/>
-    </function>
-
-    <function name="ImageTransformParameterivHP">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLint *"/>
-    </function>
-
-    <function name="ImageTransformParameterfvHP">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLfloat *"/>
-    </function>
-
-    <function name="GetImageTransformParameterivHP">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true" variable_param="pname"/>
-    </function>
-
-    <function name="GetImageTransformParameterfvHP">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
-    </function>
-</category>
-
-<category name="GL_HP_convolution_border_modes" number="67">
-    <enum name="IGNORE_BORDER_HP"                         value="0x8150"/>
-    <enum name="CONSTANT_BORDER_HP"                       value="0x8151"/>
-    <enum name="REPLICATE_BORDER_HP"                      value="0x8153"/>
-    <enum name="CONVOLUTION_BORDER_COLOR_HP"   count="4"  value="0x8154">
-        <size name="ConvolutionParameterfv"/>
-        <size name="ConvolutionParameteriv"/>
-        <size name="GetConvolutionParameterfv" mode="get"/>
-        <size name="GetConvolutionParameteriv" mode="get"/>
-    </enum>
-</category>
-
-<!-- Extension number 68 is not listed in the extension registry. -->
-<!-- Extension number 70 is not listed in the extension registry. -->
-<!-- Extension number 71 is not listed in the extension registry. -->
-<!-- Extension number 72 is not listed in the extension registry. -->
-<!-- Extension number 73 is not listed in the extension registry. -->
-
-<category name="GL_EXT_color_subtable" number="74">
-    <function name="ColorSubTableEXT" alias="ColorSubTable" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="start" type="GLsizei"/>
-        <param name="count" type="GLsizei"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="data" type="const GLvoid *"/>
-    </function>
-
-    <function name="CopyColorSubTableEXT" alias="CopyColorSubTable" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="start" type="GLsizei"/>
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-        <param name="width" type="GLsizei"/>
-    </function>
-</category>
-
-<!-- Extension number 75 is a GLU extension. -->
-
-<category name="GL_PGI_misc_hints" number="77">
-    <function name="HintPGI">
-        <param name="target" type="GLenum"/>
-        <param name="mode" type="GLint"/>
-        <glx ignore="true"/>
-    </function>
-</category>
-
-<category name="GL_EXT_paletted_texture" number="78">
-    <enum name="COLOR_TABLE_FORMAT_EXT"        count="1"  value="0x80D8">
-        <size name="GetColorTableParameterfv" mode="get"/>
-        <size name="GetColorTableParameteriv" mode="get"/>
-    </enum>
-    <enum name="COLOR_TABLE_WIDTH_EXT"         count="1"  value="0x80D9">
-        <size name="GetColorTableParameterfv" mode="get"/>
-        <size name="GetColorTableParameteriv" mode="get"/>
-    </enum>
-    <enum name="COLOR_TABLE_RED_SIZE_EXT"      count="1"  value="0x80DA">
-        <size name="GetColorTableParameterfv" mode="get"/>
-        <size name="GetColorTableParameteriv" mode="get"/>
-    </enum>
-    <enum name="COLOR_TABLE_GREEN_SIZE_EXT"    count="1"  value="0x80DB">
-        <size name="GetColorTableParameterfv" mode="get"/>
-        <size name="GetColorTableParameteriv" mode="get"/>
-    </enum>
-    <enum name="COLOR_TABLE_BLUE_SIZE_EXT"     count="1"  value="0x80DC">
-        <size name="GetColorTableParameterfv" mode="get"/>
-        <size name="GetColorTableParameteriv" mode="get"/>
-    </enum>
-    <enum name="COLOR_TABLE_ALPHA_SIZE_EXT"    count="1"  value="0x80DD">
-        <size name="GetColorTableParameterfv" mode="get"/>
-        <size name="GetColorTableParameteriv" mode="get"/>
-    </enum>
-    <enum name="COLOR_TABLE_LUMINANCE_SIZE_EXT" count="1" value="0x80DE">
-        <size name="GetColorTableParameterfv" mode="get"/>
-        <size name="GetColorTableParameteriv" mode="get"/>
-    </enum>
-    <enum name="COLOR_TABLE_INTENSITY_SIZE_EXT" count="1" value="0x80DF">
-        <size name="GetColorTableParameterfv" mode="get"/>
-        <size name="GetColorTableParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_INDEX_SIZE_EXT"        count="1"  value="0x80ED">
-        <size name="GetTexLevelParameterfv" mode="get"/>
-        <size name="GetTexLevelParameteriv" mode="get"/>
-    </enum>
-
-    <function name="ColorTableEXT" alias="ColorTable">
-        <param name="target" type="GLenum"/>
-        <param name="internalformat" type="GLenum"/>
-        <param name="width" type="GLsizei"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="table" type="const GLvoid *"/>
-    </function>
-
-    <function name="GetColorTableEXT" alias="GetColorTable">
-        <param name="target" type="GLenum"/>
-        <param name="format" type="GLenum"/>
-        <param name="type" type="GLenum"/>
-        <param name="table" type="GLvoid *" output="true" img_width="width" img_format="format" img_type="type"/>
-        <glx vendorpriv="4098" dimensions_in_reply="true"/>
-    </function>
-
-    <function name="GetColorTableParameterivEXT" alias="GetColorTableParameteriv">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true" variable_param="pname"/>
-        <glx vendorpriv="4100"/>
-    </function>
-
-    <function name="GetColorTableParameterfvEXT" alias="GetColorTableParameterfv">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
-        <glx vendorpriv="4099"/>
-    </function>
-</category>
-
-<category name="GL_EXT_clip_volume_hint" number="79">
-    <enum name="CLIP_VOLUME_CLIPPING_HINT_EXT" count="1"  value="0x80F0">
-        <size name="Get" mode="get"/>
-    </enum>
-</category>
-
-<category name="GL_SGIX_list_priority" number="80">
-    <function name="GetListParameterfvSGIX">
-        <param name="list" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetListParameterivSGIX">
-        <param name="list" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true" variable_param="pname"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="ListParameterfSGIX">
-        <param name="list" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLfloat"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="ListParameterfvSGIX">
-        <param name="list" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLfloat *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="ListParameteriSGIX">
-        <param name="list" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="ListParameterivSGIX">
-        <param name="list" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLint *"/>
-        <glx ignore="true"/>
-    </function>
-</category>
-
-<!-- Extension number 82 is not listed in the extension registry. -->
-<!-- Extension number 83 is a GLX extension. -->
-
-<category name="GL_SGIX_texture_lod_bias" number="84">
-    <enum name="TEXTURE_LOD_BIAS_S_SGIX"       count="1"  value="0x818E">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_LOD_BIAS_T_SGIX"       count="1"  value="0x818F">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_LOD_BIAS_R_SGIX"       count="1"  value="0x8190">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-</category>
-
-<!-- Extension number 85 is a GLU extension. -->
-<!-- Extension number 86 is a GLX extension. -->
-<!-- Extension number 87 is not listed in the extension registry. -->
-<!-- Extension number 88 is not listed in the extension registry. -->
-<!-- Extension number 89 is not listed in the extension registry. -->
-
-
-<category name="GL_SGIX_shadow_ambient" number="90">
-    <enum name="SHADOW_AMBIENT_SGIX"           count="1"  value="0x80BF">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-</category>
-
-<!-- Extension number 91 is a GLX extension. -->
-<!-- Extension number 92 is a GLX extension. -->
-
-<category name="GL_EXT_index_material" number="94">
-    <function name="IndexMaterialEXT">
-        <param name="face" type="GLenum"/>
-        <param name="mode" type="GLenum"/>
-        <glx ignore="true"/>
-    </function>
-</category>
-
-<category name="GL_EXT_index_func" number="95">
-    <function name="IndexFuncEXT">
-        <param name="func" type="GLenum"/>
-        <param name="ref" type="GLclampf"/>
-        <glx ignore="true"/>
-    </function>
-</category>
-
-<category name="GL_EXT_compiled_vertex_array" number="97">
-    <function name="LockArraysEXT" offset="assign">
-        <param name="first" type="GLint"/>
-        <param name="count" type="GLsizei"/>
-        <glx handcode="true" ignore="true"/>
-    </function>
-
-    <function name="UnlockArraysEXT" offset="assign">
-        <glx handcode="true" ignore="true"/>
-    </function>
-</category>
-
-<category name="GL_EXT_cull_vertex" number="98">
-    <enum name="CULL_VERTEX_EXT"                          value="0x81AA"/>
-    <enum name="CULL_VERTEX_OBJECT_POSITION_EXT" count="4" value="0x81AB">
-        <size name="CullParameterfv"/>
-        <size name="CullParameterdv"/>
-    </enum>
-    <enum name="CULL_VERTEX_EYE_POSITION_EXT"  count="4"  value="0x81AC">
-        <size name="CullParameterfv"/>
-        <size name="CullParameterdv"/>
-    </enum>
-
-    <function name="CullParameterdvEXT" offset="assign" static_dispatch="false">
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLdouble *"/> <!-- Spec bug. Should be const. -->
-        <glx ignore="true"/>
-    </function>
-
-    <function name="CullParameterfvEXT" offset="assign" static_dispatch="false">
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat *"/> <!-- Spec bug. Should be const. -->
-        <glx ignore="true"/>
-    </function>
-</category>
-
-<!-- Extension number 99 is not listed in the extension registry. -->
-<!-- Extension number 100 is a GLU extension. -->
-
-<!-- Shouldn't this be EXT_fragment_lighting? -->
-<category name="GL_SGIX_fragment_lighting" number="102">
-    <function name="FragmentColorMaterialSGIX">
-        <param name="face" type="GLenum"/>
-        <param name="mode" type="GLenum"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="FragmentLightfSGIX">
-        <param name="light" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLfloat"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="FragmentLightfvSGIX">
-        <param name="light" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLfloat *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="FragmentLightiSGIX">
-        <param name="light" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="FragmentLightivSGIX">
-        <param name="light" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLint *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="FragmentLightModelfSGIX">
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLfloat"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="FragmentLightModelfvSGIX">
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLfloat *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="FragmentLightModeliSGIX">
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="FragmentLightModelivSGIX">
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLint *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="FragmentMaterialfSGIX">
-        <param name="face" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLfloat"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="FragmentMaterialfvSGIX">
-        <param name="face" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLfloat *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="FragmentMaterialiSGIX">
-        <param name="face" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="FragmentMaterialivSGIX">
-        <param name="face" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLint *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetFragmentLightfvSGIX">
-        <param name="light" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetFragmentLightivSGIX">
-        <param name="light" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true" variable_param="pname"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetFragmentMaterialfvSGIX">
-        <param name="face" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetFragmentMaterialivSGIX">
-        <param name="face" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true" variable_param="pname"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="LightEnviSGIX">
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLint"/>
-        <glx ignore="true"/>
-    </function>
-</category>
-
-<!-- Extension number 103 is not listed in the extension registry. -->
-<!-- Extension number 104 is not listed in the extension registry. -->
-<!-- Extension number 105 is not listed in the extension registry. -->
-<!-- Extension number 106 is not listed in the extension registry. -->
-<!-- Extension number 107 is not listed in the extension registry. -->
-<!-- Extension number 108 is not listed in the extension registry. -->
-<!-- Extension number 109 is not listed in the extension registry. -->
-
-<category name="GL_IBM_rasterpos_clip" number="110">
-    <enum name="RASTER_POSITION_UNCLIPPED_IBM"  count="1" value="0x19262">
-        <size name="Get" mode="get"/>
-    </enum>
-</category>
-
-<category name="GL_EXT_draw_range_elements" number="112">
-    <function name="DrawRangeElementsEXT" alias="DrawRangeElements">
-        <param name="mode" type="GLenum"/>
-        <param name="start" type="GLuint"/>
-        <param name="end" type="GLuint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="type" type="GLenum"/>
-        <param name="indices" type="const GLvoid *"/>
-        <glx handcode="true"/>
-    </function>
-</category>
-
-<!-- Extension number 115 is a GLX extension. -->
-<!-- Extension number 116 is not listed in the extension registry. -->
-
-<category name="GL_EXT_light_texture" number="117">
-    <function name="ApplyTextureEXT">
-        <param name="mode" type="GLenum"/>
-    </function>
-
-    <function name="TextureLightEXT">
-        <param name="pname" type="GLenum"/>
-    </function>
-
-    <function name="TextureMaterialEXT">
-        <param name="face" type="GLenum"/>
-        <param name="mode" type="GLenum"/>
-    </function>
-</category>
-
-<!-- Extension number 118 is not listed in the extension registry. -->
-<!-- Extension number 121 is not listed in the extension registry. -->
-<!-- Extension number 122 is not listed in the extension registry. -->
-<!-- Extension number 123 is not listed in the extension registry. -->
-<!-- Extension number 124 is not listed in the extension registry. -->
-<!-- Extension number 125 is not listed in the extension registry. -->
-<!-- Extension number 126 is not listed in the extension registry. -->
-<!-- Extension number 128 is not listed in the extension registry. -->
-<!-- Extension number 130 is not listed in the extension registry. -->
-<!-- Extension number 131 is not listed in the extension registry. -->
-
-<category name="GL_SGIX_async" number="132">
-    <function name="AsyncMarkerSGIX">
-        <param name="marker" type="GLuint"/>
-    </function>
-
-    <function name="FinishAsyncSGIX">
-        <param name="markerp" type="GLuint *"/> <!-- Spec bug. Should be const. -->
-        <return type="GLint"/>
-    </function>
-
-    <function name="PollAsyncSGIX">
-        <param name="markerp" type="GLuint *"/> <!-- Spec bug. Should be const. -->
-        <return type="GLint"/>
-    </function>
-
-    <function name="GenAsyncMarkersSGIX">
-        <param name="range" type="GLsizei"/>
-        <return type="GLuint"/>
-    </function>
-
-    <function name="DeleteAsyncMarkersSGIX">
-        <param name="marker" type="GLuint"/>
-        <param name="range" type="GLsizei"/>
-    </function>
-
-    <function name="IsAsyncMarkerSGIX">
-        <param name="marker" type="GLuint"/>
-        <return type="GLboolean"/>
-    </function>
-</category>
-
-<category name="GL_INTEL_parallel_arrays" number="136">
-    <function name="VertexPointervINTEL">
-        <param name="size" type="GLint"/>
-        <param name="type" type="GLenum"/>
-        <param name="pointer" type="const GLvoid **"/>
-    </function>
-
-    <function name="NormalPointervINTEL">
-        <param name="type" type="GLenum"/>
-        <param name="pointer" type="const GLvoid **"/>
-    </function>
-
-    <function name="ColorPointervINTEL">
-        <param name="size" type="GLint"/>
-        <param name="type" type="GLenum"/>
-        <param name="pointer" type="const GLvoid **"/>
-    </function>
-
-    <function name="TexCoordPointervINTEL">
-        <param name="size" type="GLint"/>
-        <param name="type" type="GLenum"/>
-        <param name="pointer" type="const GLvoid **"/>
-    </function>
-</category>
-
-<category name="GL_HP_occlusion_test" number="137">
-    <enum name="OCCLUSION_TEST_HP"             count="1"  value="0x8165">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="OCCLUSION_TEST_RESULT_HP"      count="1"  value="0x8166">
-        <size name="Get" mode="get"/>
-    </enum>
-</category>
-
-<category name="GL_EXT_pixel_transform" number="138">
-    <function name="PixelTransformParameteriEXT">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLint"/>
-    </function>
-
-    <function name="PixelTransformParameterfEXT">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLfloat"/>
-    </function>
-
-    <function name="PixelTransformParameterivEXT">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLint *"/>
-    </function>
-
-    <function name="PixelTransformParameterfvEXT">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLfloat *"/>
-    </function>
-</category>
-
-<!-- Extension number 140 is not listed in the extension registry. -->
-
-<category name="GL_EXT_shared_texture_palette" number="141">
-    <enum name="SHARED_TEXTURE_PALETTE_EXT"    count="1"  value="0x81FB"/>
-</category>
-
-<!-- Extension number 142 is a GLX extension. -->
-<!-- Extension number 143 is not listed in the extension registry. -->
-
-<category name="GL_EXT_separate_specular_color" number="144">
-    <enum name="LIGHT_MODEL_COLOR_CONTROL_EXT" count="1"  value="0x81F8">
-        <size name="LightModelfv"/>
-        <size name="LightModeliv"/>
-    </enum>
-    <enum name="SINGLE_COLOR_EXT"                         value="0x81F9"/>
-    <enum name="SEPARATE_SPECULAR_COLOR_EXT"              value="0x81FA"/>
-</category>
-
-<category name="GL_EXT_secondary_color" number="145">
-    <function name="SecondaryColor3bEXT" offset="assign" vectorequiv="SecondaryColor3bvEXT">
-        <param name="red" type="GLbyte"/>
-        <param name="green" type="GLbyte"/>
-        <param name="blue" type="GLbyte"/>
-    </function>
-
-    <function name="SecondaryColor3bvEXT" offset="assign">
-        <param name="v" type="const GLbyte *" count="3"/>
-        <glx rop="4126"/>
-    </function>
-
-    <function name="SecondaryColor3dEXT" offset="assign" vectorequiv="SecondaryColor3dvEXT">
-        <param name="red" type="GLdouble"/>
-        <param name="green" type="GLdouble"/>
-        <param name="blue" type="GLdouble"/>
-    </function>
-
-    <function name="SecondaryColor3dvEXT" offset="assign">
-        <param name="v" type="const GLdouble *" count="3"/>
-        <glx rop="4130"/>
-    </function>
-
-    <function name="SecondaryColor3fEXT" offset="assign" vectorequiv="SecondaryColor3fvEXT">
-        <param name="red" type="GLfloat"/>
-        <param name="green" type="GLfloat"/>
-        <param name="blue" type="GLfloat"/>
-    </function>
-
-    <function name="SecondaryColor3fvEXT" offset="assign">
-        <param name="v" type="const GLfloat *" count="3"/>
-        <glx rop="4129"/>
-    </function>
-
-    <function name="SecondaryColor3iEXT" offset="assign" vectorequiv="SecondaryColor3ivEXT">
-        <param name="red" type="GLint"/>
-        <param name="green" type="GLint"/>
-        <param name="blue" type="GLint"/>
-    </function>
-
-    <function name="SecondaryColor3ivEXT" offset="assign">
-        <param name="v" type="const GLint *" count="3"/>
-        <glx rop="4128"/>
-    </function>
-
-    <function name="SecondaryColor3sEXT" offset="assign" vectorequiv="SecondaryColor3svEXT">
-        <param name="red" type="GLshort"/>
-        <param name="green" type="GLshort"/>
-        <param name="blue" type="GLshort"/>
-    </function>
-
-    <function name="SecondaryColor3svEXT" offset="assign">
-        <param name="v" type="const GLshort *" count="3"/>
-        <glx rop="4127"/>
-    </function>
-
-    <function name="SecondaryColor3ubEXT" offset="assign" vectorequiv="SecondaryColor3ubvEXT">
-        <param name="red" type="GLubyte"/>
-        <param name="green" type="GLubyte"/>
-        <param name="blue" type="GLubyte"/>
-    </function>
-
-    <function name="SecondaryColor3ubvEXT" offset="assign">
-        <param name="v" type="const GLubyte *" count="3"/>
-        <glx rop="4131"/>
-    </function>
-
-    <function name="SecondaryColor3uiEXT" offset="assign" vectorequiv="SecondaryColor3uivEXT">
-        <param name="red" type="GLuint"/>
-        <param name="green" type="GLuint"/>
-        <param name="blue" type="GLuint"/>
-    </function>
-
-    <function name="SecondaryColor3uivEXT" offset="assign">
-        <param name="v" type="const GLuint *" count="3"/>
-        <glx rop="4133"/>
-    </function>
-
-    <function name="SecondaryColor3usEXT" offset="assign" vectorequiv="SecondaryColor3usvEXT">
-        <param name="red" type="GLushort"/>
-        <param name="green" type="GLushort"/>
-        <param name="blue" type="GLushort"/>
-    </function>
-
-    <function name="SecondaryColor3usvEXT" offset="assign">
-        <param name="v" type="const GLushort *" count="3"/>
-        <glx rop="4132"/>
-    </function>
-
-    <function name="SecondaryColorPointerEXT" offset="assign">
-        <param name="size" type="GLint"/>
-        <param name="type" type="GLenum"/>
-        <param name="stride" type="GLsizei"/>
-        <param name="pointer" type="const GLvoid *"/>
-        <glx handcode="true"/>
-    </function>
-</category>
-
-<category name="GL_EXT_texture_perturb_normal" number="147">
-    <function name="TextureNormalEXT">
-        <param name="mode" type="GLenum"/>
-    </function>
-</category>
-
-<category name="GL_EXT_multi_draw_arrays" number="148">
-    <function name="MultiDrawArraysEXT" offset="assign">
-        <param name="mode" type="GLenum"/>
-        <param name="first" type="GLint *"/> <!-- Spec bug. Should be const. -->
-        <param name="count" type="GLsizei *"/> <!-- Spec bug. Should be const. -->
-        <param name="primcount" type="GLsizei"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="MultiDrawElementsEXT" offset="assign">
-        <param name="mode" type="GLenum"/>
-        <param name="count" type="const GLsizei *"/>
-        <param name="type" type="GLenum"/>
-        <param name="indices" type="const GLvoid **"/>
-        <param name="primcount" type="GLsizei"/>
-        <glx handcode="true"/>
-    </function>
-</category>
-
-<category name="GL_EXT_fog_coord" number="149">
-    <function name="FogCoordfEXT" offset="assign" vectorequiv="FogCoordfvEXT">
-        <param name="coord" type="GLfloat"/>
-    </function>
-
-    <function name="FogCoordfvEXT" offset="assign">
-        <param name="coord" type="const GLfloat *" count="1"/>
-        <glx rop="4124"/>
-    </function>
-
-    <function name="FogCoorddEXT" offset="assign" vectorequiv="FogCoorddvEXT">
-        <param name="coord" type="GLdouble"/>
-    </function>
-
-    <function name="FogCoorddvEXT" offset="assign">
-        <param name="coord" type="const GLdouble *" count="1"/>
-        <glx rop="4125"/>
-    </function>
-
-    <function name="FogCoordPointerEXT" offset="assign">
-        <param name="type" type="GLenum"/>
-        <param name="stride" type="GLsizei"/>
-        <param name="pointer" type="const GLvoid *"/>
-        <glx handcode="true"/>
-    </function>
-</category>
-
-<!-- Extension number 150 is not listed in the extension registry. -->
-<!-- Extension number 151 is not listed in the extension registry. -->
-<!-- Extension number 152 is not listed in the extension registry. -->
-<!-- Extension number 153 is not listed in the extension registry. -->
-<!-- Extension number 154 is not listed in the extension registry. -->
-
-<category name="GL_EXT_coordinate_frame" number="156">
-    <function name="Tangent3bEXT">
-        <param name="tx" type="GLbyte"/>
-        <param name="ty" type="GLbyte"/>
-        <param name="tz" type="GLbyte"/>
-    </function>
-
-    <function name="Tangent3bvEXT">
-        <param name="v" type="const GLbyte *"/>
-    </function>
-
-    <function name="Tangent3dEXT">
-        <param name="tx" type="GLdouble"/>
-        <param name="ty" type="GLdouble"/>
-        <param name="tz" type="GLdouble"/>
-    </function>
-
-    <function name="Tangent3dvEXT">
-        <param name="v" type="const GLdouble *"/>
-    </function>
-
-    <function name="Tangent3fEXT">
-        <param name="tx" type="GLfloat"/>
-        <param name="ty" type="GLfloat"/>
-        <param name="tz" type="GLfloat"/>
-    </function>
-
-    <function name="Tangent3fvEXT">
-        <param name="v" type="const GLfloat *"/>
-    </function>
-
-    <function name="Tangent3iEXT">
-        <param name="tx" type="GLint"/>
-        <param name="ty" type="GLint"/>
-        <param name="tz" type="GLint"/>
-    </function>
-
-    <function name="Tangent3ivEXT">
-        <param name="v" type="const GLint *"/>
-    </function>
-
-    <function name="Tangent3sEXT">
-        <param name="tx" type="GLshort"/>
-        <param name="ty" type="GLshort"/>
-        <param name="tz" type="GLshort"/>
-    </function>
-
-    <function name="Tangent3svEXT">
-        <param name="v" type="const GLshort *"/>
-    </function>
-
-    <function name="Binormal3bEXT">
-        <param name="bx" type="GLbyte"/>
-        <param name="by" type="GLbyte"/>
-        <param name="bz" type="GLbyte"/>
-    </function>
-
-    <function name="Binormal3bvEXT">
-        <param name="v" type="const GLbyte *"/>
-    </function>
-
-    <function name="Binormal3dEXT">
-        <param name="bx" type="GLdouble"/>
-        <param name="by" type="GLdouble"/>
-        <param name="bz" type="GLdouble"/>
-    </function>
-
-    <function name="Binormal3dvEXT">
-        <param name="v" type="const GLdouble *"/>
-    </function>
-
-    <function name="Binormal3fEXT">
-        <param name="bx" type="GLfloat"/>
-        <param name="by" type="GLfloat"/>
-        <param name="bz" type="GLfloat"/>
-    </function>
-
-    <function name="Binormal3fvEXT">
-        <param name="v" type="const GLfloat *"/>
-    </function>
-
-    <function name="Binormal3iEXT">
-        <param name="bx" type="GLint"/>
-        <param name="by" type="GLint"/>
-        <param name="bz" type="GLint"/>
-    </function>
-
-    <function name="Binormal3ivEXT">
-        <param name="v" type="const GLint *"/>
-    </function>
-
-    <function name="Binormal3sEXT">
-        <param name="bx" type="GLshort"/>
-        <param name="by" type="GLshort"/>
-        <param name="bz" type="GLshort"/>
-    </function>
-
-    <function name="Binormal3svEXT">
-        <param name="v" type="const GLshort *"/>
-    </function>
-
-    <function name="TangentPointerEXT">
-        <param name="type" type="GLenum"/>
-        <param name="stride" type="GLsizei"/>
-        <param name="pointer" type="const GLvoid *"/>
-    </function>
-
-    <function name="BinormalPointerEXT">
-        <param name="type" type="GLenum"/>
-        <param name="stride" type="GLsizei"/>
-        <param name="pointer" type="const GLvoid *"/>
-    </function>
-</category>
-
-<!-- Extension number 157 is not listed in the extension registry. -->
-
-<category name="GL_EXT_texture_env_combine" number="158">
-    <enum name="COMBINE_EXT"                              value="0x8570"/>
-    <enum name="COMBINE_RGB_EXT"               count="1"  value="0x8571"/>
-    <enum name="COMBINE_ALPHA_EXT"             count="1"  value="0x8572"/>
-    <enum name="RGB_SCALE_EXT"                 count="1"  value="0x8573"/>
-    <enum name="ADD_SIGNED_EXT"                           value="0x8574"/>
-    <enum name="INTERPOLATE_EXT"                          value="0x8575"/>
-    <enum name="CONSTANT_EXT"                             value="0x8576"/>
-    <enum name="PRIMARY_COLOR_EXT"                        value="0x8577"/>
-    <enum name="PREVIOUS_EXT"                             value="0x8578"/>
-    <enum name="SOURCE0_RGB_EXT"               count="1"  value="0x8580"/>
-    <enum name="SOURCE1_RGB_EXT"               count="1"  value="0x8581"/>
-    <enum name="SOURCE2_RGB_EXT"               count="1"  value="0x8582"/>
-    <enum name="SOURCE0_ALPHA_EXT"             count="1"  value="0x8588"/>
-    <enum name="SOURCE1_ALPHA_EXT"             count="1"  value="0x8589"/>
-    <enum name="SOURCE2_ALPHA_EXT"             count="1"  value="0x858A"/>
-    <enum name="OPERAND0_RGB_EXT"              count="1"  value="0x8590"/>
-    <enum name="OPERAND1_RGB_EXT"              count="1"  value="0x8591"/>
-    <enum name="OPERAND2_RGB_EXT"              count="1"  value="0x8592"/>
-    <enum name="OPERAND0_ALPHA_EXT"            count="1"  value="0x8598"/>
-    <enum name="OPERAND1_ALPHA_EXT"            count="1"  value="0x8599"/>
-    <enum name="OPERAND2_ALPHA_EXT"            count="1"  value="0x859A"/>
-</category>
-
-<category name="GL_SGIX_pixel_texture" number="160">
-    <function name="PixelTexGenSGIX" offset="assign" static_dispatch="false">
-        <param name="mode" type="GLenum"/>
-        <glx rop="2059" ignore="true"/>
-    </function>
-</category>
-
-<!-- Extension number 161 is not listed in the extension registry. -->
-<!-- Extension number 162 is not listed in the extension registry. -->
-
-<category name="GL_SUNX_constant_data" number="163">
-    <function name="FinishTextureSUNX">
-    </function>
-</category>
-
-<category name="GL_SUN_global_alpha" number="164">
-    <function name="GlobalAlphaFactorbSUN">
-        <param name="factor" type="GLbyte"/>
-    </function>
-
-    <function name="GlobalAlphaFactorsSUN">
-        <param name="factor" type="GLshort"/>
-    </function>
-
-    <function name="GlobalAlphaFactoriSUN">
-        <param name="factor" type="GLint"/>
-    </function>
-
-    <function name="GlobalAlphaFactorfSUN">
-        <param name="factor" type="GLfloat"/>
-    </function>
-
-    <function name="GlobalAlphaFactordSUN">
-        <param name="factor" type="GLdouble"/>
-    </function>
-
-    <function name="GlobalAlphaFactorubSUN">
-        <param name="factor" type="GLubyte"/>
-    </function>
-
-    <function name="GlobalAlphaFactorusSUN">
-        <param name="factor" type="GLushort"/>
-    </function>
-
-    <function name="GlobalAlphaFactoruiSUN">
-        <param name="factor" type="GLuint"/>
-    </function>
-</category>
-
-<category name="GL_SUN_triangle_list" number="165">
-    <function name="ReplacementCodeuiSUN">
-        <param name="code" type="GLuint"/>
-    </function>
-
-    <function name="ReplacementCodeusSUN">
-        <param name="code" type="GLushort"/>
-    </function>
-
-    <function name="ReplacementCodeubSUN">
-        <param name="code" type="GLubyte"/>
-    </function>
-
-    <function name="ReplacementCodeuivSUN">
-        <param name="code" type="const GLuint *"/>
-    </function>
-
-    <function name="ReplacementCodeusvSUN">
-        <param name="code" type="const GLushort *"/>
-    </function>
-
-    <function name="ReplacementCodeubvSUN">
-        <param name="code" type="const GLubyte *"/>
-    </function>
-
-    <function name="ReplacementCodePointerSUN">
-        <param name="type" type="GLenum"/>
-        <param name="stride" type="GLsizei"/>
-        <param name="pointer" type="const GLvoid *"/>
-    </function>
-</category>
-
-<category name="GL_SUN_vertex" number="166">
-    <function name="Color4ubVertex2fSUN">
-        <param name="r" type="GLubyte"/>
-        <param name="g" type="GLubyte"/>
-        <param name="b" type="GLubyte"/>
-        <param name="a" type="GLubyte"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-    </function>
-
-    <function name="Color4ubVertex2fvSUN">
-        <param name="c" type="const GLubyte *"/>
-        <param name="v" type="const GLfloat *"/>
-    </function>
-
-    <function name="Color4ubVertex3fSUN">
-        <param name="r" type="GLubyte"/>
-        <param name="g" type="GLubyte"/>
-        <param name="b" type="GLubyte"/>
-        <param name="a" type="GLubyte"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-    </function>
-
-    <function name="Color4ubVertex3fvSUN">
-        <param name="c" type="const GLubyte *"/>
-        <param name="v" type="const GLfloat *"/>
-    </function>
-
-    <function name="Color3fVertex3fSUN">
-        <param name="r" type="GLfloat"/>
-        <param name="g" type="GLfloat"/>
-        <param name="b" type="GLfloat"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-    </function>
-
-    <function name="Color3fVertex3fvSUN">
-        <param name="c" type="const GLfloat *"/>
-        <param name="v" type="const GLfloat *"/>
-    </function>
-
-    <function name="Normal3fVertex3fSUN">
-        <param name="nx" type="GLfloat"/>
-        <param name="ny" type="GLfloat"/>
-        <param name="nz" type="GLfloat"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-    </function>
-
-    <function name="Normal3fVertex3fvSUN">
-        <param name="n" type="const GLfloat *"/>
-        <param name="v" type="const GLfloat *"/>
-    </function>
-
-    <function name="Color4fNormal3fVertex3fSUN">
-        <param name="r" type="GLfloat"/>
-        <param name="g" type="GLfloat"/>
-        <param name="b" type="GLfloat"/>
-        <param name="a" type="GLfloat"/>
-        <param name="nx" type="GLfloat"/>
-        <param name="ny" type="GLfloat"/>
-        <param name="nz" type="GLfloat"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-    </function>
-
-    <function name="Color4fNormal3fVertex3fvSUN">
-        <param name="c" type="const GLfloat *"/>
-        <param name="n" type="const GLfloat *"/>
-        <param name="v" type="const GLfloat *"/>
-    </function>
-
-    <function name="TexCoord2fVertex3fSUN">
-        <param name="s" type="GLfloat"/>
-        <param name="t" type="GLfloat"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-    </function>
-
-    <function name="TexCoord2fVertex3fvSUN">
-        <param name="tc" type="const GLfloat *"/>
-        <param name="v" type="const GLfloat *"/>
-    </function>
-
-    <function name="TexCoord4fVertex4fSUN">
-        <param name="s" type="GLfloat"/>
-        <param name="t" type="GLfloat"/>
-        <param name="p" type="GLfloat"/>
-        <param name="q" type="GLfloat"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-        <param name="w" type="GLfloat"/>
-    </function>
-
-    <function name="TexCoord4fVertex4fvSUN">
-        <param name="tc" type="const GLfloat *"/>
-        <param name="v" type="const GLfloat *"/>
-    </function>
-
-    <function name="TexCoord2fColor4ubVertex3fSUN">
-        <param name="s" type="GLfloat"/>
-        <param name="t" type="GLfloat"/>
-        <param name="r" type="GLubyte"/>
-        <param name="g" type="GLubyte"/>
-        <param name="b" type="GLubyte"/>
-        <param name="a" type="GLubyte"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-    </function>
-
-    <function name="TexCoord2fColor4ubVertex3fvSUN">
-        <param name="tc" type="const GLfloat *"/>
-        <param name="c" type="const GLubyte *"/>
-        <param name="v" type="const GLfloat *"/>
-    </function>
-
-    <function name="TexCoord2fColor3fVertex3fSUN">
-        <param name="s" type="GLfloat"/>
-        <param name="t" type="GLfloat"/>
-        <param name="r" type="GLfloat"/>
-        <param name="g" type="GLfloat"/>
-        <param name="b" type="GLfloat"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-    </function>
-
-    <function name="TexCoord2fColor3fVertex3fvSUN">
-        <param name="tc" type="const GLfloat *"/>
-        <param name="c" type="const GLfloat *"/>
-        <param name="v" type="const GLfloat *"/>
-    </function>
-
-    <function name="TexCoord2fNormal3fVertex3fSUN">
-        <param name="s" type="GLfloat"/>
-        <param name="t" type="GLfloat"/>
-        <param name="nx" type="GLfloat"/>
-        <param name="ny" type="GLfloat"/>
-        <param name="nz" type="GLfloat"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-    </function>
-
-    <function name="TexCoord2fNormal3fVertex3fvSUN">
-        <param name="tc" type="const GLfloat *"/>
-        <param name="n" type="const GLfloat *"/>
-        <param name="v" type="const GLfloat *"/>
-    </function>
-
-    <function name="TexCoord2fColor4fNormal3fVertex3fSUN">
-        <param name="s" type="GLfloat"/>
-        <param name="t" type="GLfloat"/>
-        <param name="r" type="GLfloat"/>
-        <param name="g" type="GLfloat"/>
-        <param name="b" type="GLfloat"/>
-        <param name="a" type="GLfloat"/>
-        <param name="nx" type="GLfloat"/>
-        <param name="ny" type="GLfloat"/>
-        <param name="nz" type="GLfloat"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-    </function>
-
-    <function name="TexCoord2fColor4fNormal3fVertex3fvSUN">
-        <param name="tc" type="const GLfloat *"/>
-        <param name="c" type="const GLfloat *"/>
-        <param name="n" type="const GLfloat *"/>
-        <param name="v" type="const GLfloat *"/>
-    </function>
-
-    <function name="TexCoord4fColor4fNormal3fVertex4fSUN">
-        <param name="s" type="GLfloat"/>
-        <param name="t" type="GLfloat"/>
-        <param name="p" type="GLfloat"/>
-        <param name="q" type="GLfloat"/>
-        <param name="r" type="GLfloat"/>
-        <param name="g" type="GLfloat"/>
-        <param name="b" type="GLfloat"/>
-        <param name="a" type="GLfloat"/>
-        <param name="nx" type="GLfloat"/>
-        <param name="ny" type="GLfloat"/>
-        <param name="nz" type="GLfloat"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-        <param name="w" type="GLfloat"/>
-    </function>
-
-    <function name="TexCoord4fColor4fNormal3fVertex4fvSUN">
-        <param name="tc" type="const GLfloat *"/>
-        <param name="c" type="const GLfloat *"/>
-        <param name="n" type="const GLfloat *"/>
-        <param name="v" type="const GLfloat *"/>
-    </function>
-
-    <function name="ReplacementCodeuiVertex3fSUN">
-        <param name="rc" type="GLuint"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-    </function>
-
-    <function name="ReplacementCodeuiVertex3fvSUN">
-        <param name="rc" type="const GLuint *"/>
-        <param name="v" type="const GLfloat *"/>
-    </function>
-
-    <function name="ReplacementCodeuiColor4ubVertex3fSUN">
-        <param name="rc" type="GLuint"/>
-        <param name="r" type="GLubyte"/>
-        <param name="g" type="GLubyte"/>
-        <param name="b" type="GLubyte"/>
-        <param name="a" type="GLubyte"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-    </function>
-
-    <function name="ReplacementCodeuiColor4ubVertex3fvSUN">
-        <param name="rc" type="const GLuint *"/>
-        <param name="c" type="const GLubyte *"/>
-        <param name="v" type="const GLfloat *"/>
-    </function>
-
-    <function name="ReplacementCodeuiColor3fVertex3fSUN">
-        <param name="rc" type="GLuint"/>
-        <param name="r" type="GLfloat"/>
-        <param name="g" type="GLfloat"/>
-        <param name="b" type="GLfloat"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-    </function>
-
-    <function name="ReplacementCodeuiColor3fVertex3fvSUN">
-        <param name="rc" type="const GLuint *"/>
-        <param name="c" type="const GLfloat *"/>
-        <param name="v" type="const GLfloat *"/>
-    </function>
-
-    <function name="ReplacementCodeuiNormal3fVertex3fSUN">
-        <param name="rc" type="GLuint"/>
-        <param name="nx" type="GLfloat"/>
-        <param name="ny" type="GLfloat"/>
-        <param name="nz" type="GLfloat"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-    </function>
-
-    <function name="ReplacementCodeuiNormal3fVertex3fvSUN">
-        <param name="rc" type="const GLuint *"/>
-        <param name="n" type="const GLfloat *"/>
-        <param name="v" type="const GLfloat *"/>
-    </function>
-
-    <function name="ReplacementCodeuiColor4fNormal3fVertex3fSUN">
-        <param name="rc" type="GLuint"/>
-        <param name="r" type="GLfloat"/>
-        <param name="g" type="GLfloat"/>
-        <param name="b" type="GLfloat"/>
-        <param name="a" type="GLfloat"/>
-        <param name="nx" type="GLfloat"/>
-        <param name="ny" type="GLfloat"/>
-        <param name="nz" type="GLfloat"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-    </function>
-
-    <function name="ReplacementCodeuiColor4fNormal3fVertex3fvSUN">
-        <param name="rc" type="const GLuint *"/>
-        <param name="c" type="const GLfloat *"/>
-        <param name="n" type="const GLfloat *"/>
-        <param name="v" type="const GLfloat *"/>
-    </function>
-
-    <function name="ReplacementCodeuiTexCoord2fVertex3fSUN">
-        <param name="rc" type="GLuint"/>
-        <param name="s" type="GLfloat"/>
-        <param name="t" type="GLfloat"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-    </function>
-
-    <function name="ReplacementCodeuiTexCoord2fVertex3fvSUN">
-        <param name="rc" type="const GLuint *"/>
-        <param name="tc" type="const GLfloat *"/>
-        <param name="v" type="const GLfloat *"/>
-    </function>
-
-    <function name="ReplacementCodeuiTexCoord2fNormal3fVertex3fSUN">
-        <param name="rc" type="GLuint"/>
-        <param name="s" type="GLfloat"/>
-        <param name="t" type="GLfloat"/>
-        <param name="nx" type="GLfloat"/>
-        <param name="ny" type="GLfloat"/>
-        <param name="nz" type="GLfloat"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-    </function>
-
-    <function name="ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN">
-        <param name="rc" type="const GLuint *"/>
-        <param name="tc" type="const GLfloat *"/>
-        <param name="n" type="const GLfloat *"/>
-        <param name="v" type="const GLfloat *"/>
-    </function>
-
-    <function name="ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN">
-        <param name="rc" type="GLuint"/>
-        <param name="s" type="GLfloat"/>
-        <param name="t" type="GLfloat"/>
-        <param name="r" type="GLfloat"/>
-        <param name="g" type="GLfloat"/>
-        <param name="b" type="GLfloat"/>
-        <param name="a" type="GLfloat"/>
-        <param name="nx" type="GLfloat"/>
-        <param name="ny" type="GLfloat"/>
-        <param name="nz" type="GLfloat"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-    </function>
-
-    <function name="ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN">
-        <param name="rc" type="const GLuint *"/>
-        <param name="tc" type="const GLfloat *"/>
-        <param name="c" type="const GLfloat *"/>
-        <param name="n" type="const GLfloat *"/>
-        <param name="v" type="const GLfloat *"/>
-    </function>
-</category>
-
-<!-- Extension number 167 is a WGL extension. -->
-<!-- Extension number 168 is a WGL extension. -->
-<!-- Extension number 169 is a WGL extension. -->
-<!-- Extension number 170 is a WGL extension. -->
-<!-- Extension number 171 is a WGL extension. -->
-<!-- Extension number 172 is a WGL extension. -->
-
-<category name="GL_EXT_blend_func_separate" number="173">
-    <function name="BlendFuncSeparateEXT" offset="assign">
-        <param name="sfactorRGB" type="GLenum"/>
-        <param name="dfactorRGB" type="GLenum"/>
-        <param name="sfactorAlpha" type="GLenum"/>
-        <param name="dfactorAlpha" type="GLenum"/>
-        <glx rop="4134"/>
-    </function>
-</category>
-
-<category name="GL_EXT_stencil_wrap" number="176">
-    <enum name="INCR_WRAP_EXT"                            value="0x8507"/>
-    <enum name="DECR_WRAP_EXT"                            value="0x8508"/>
-</category>
-
-<!-- Extension number 177 is a WGL extension. -->
-
-<category name="GL_NV_texgen_reflection" number="179">
-    <enum name="NORMAL_MAP_NV"                            value="0x8511"/>
-    <enum name="REFLECTION_MAP_NV"                        value="0x8512"/>
-</category>
-
-<!-- Extension number 180 is not listed in the extension registry. -->
-
-<category name="GL_SUN_convolution_border_modes" number="182">
-    <enum name="WRAP_BORDER_SUN"                          value="0x81D4"/>
-</category>
-
-<!-- Extension number 183 is a GLX extension. -->
-<!-- Extension number 184 is not listed in the extension registry. -->
-
-<category name="GL_EXT_texture_env_add" number="185">
-    <!-- No new functions, types, enums. -->
-</category>
-
-<category name="GL_EXT_texture_lod_bias" number="186">
-    <enum name="TEXTURE_LOD_BIAS_EXT"          count="1"  value="0x8501">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-</category>
-
-<category name="GL_EXT_texture_filter_anisotropic" number="187">
-    <enum name="TEXTURE_MAX_ANISOTROPY_EXT"    count="1"  value="0x84FE">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-    <enum name="MAX_TEXTURE_MAX_ANISOTROPY_EXT" count="1" value="0x84FF">
-        <size name="Get" mode="get"/>
-    </enum>
-</category>
-
-<category name="GL_EXT_vertex_weighting" number="188">
-    <function name="VertexWeightfEXT" vectorequiv="VertexWeightfvEXT">
-        <param name="weight" type="GLfloat"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="VertexWeightfvEXT">
-        <param name="weight" type="const GLfloat *" count="1"/>
-        <glx rop="4135" ignore="true"/>
-    </function>
-
-    <function name="VertexWeightPointerEXT">
-        <param name="size" type="GLsizei"/>
-        <param name="type" type="GLenum"/>
-        <param name="stride" type="GLsizei"/>
-        <param name="pointer" type="const GLvoid *"/>
-        <glx handcode="true" ignore="true"/>
-    </function>
-</category>
-
-<category name="GL_NV_light_max_exponent" number="189">
-    <enum name="MAX_SHININESS_NV"              count="1"  value="0x8504">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="MAX_SPOT_EXPONENT_NV"          count="1"  value="0x8505">
-        <size name="Get" mode="get"/>
-    </enum>
-</category>
-
-<category name="GL_NV_vertex_array_range" number="190">
-    <function name="FlushVertexArrayRangeNV" offset="assign">
-        <glx ignore="true"/>
-    </function>
-
-    <function name="VertexArrayRangeNV" offset="assign">
-        <param name="length" type="GLsizei"/>
-        <param name="pointer" type="const GLvoid *"/>
-        <glx ignore="true"/>
-    </function>
-</category>
-
-<category name="GL_NV_register_combiners" number="191">
-    <function name="CombinerParameterfvNV" offset="assign">
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLfloat *" variable_param="pname"/>
-        <glx rop="4137" ignore="true"/>
-    </function>
-
-    <function name="CombinerParameterfNV" offset="assign">
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLfloat"/>
-        <glx rop="4136" ignore="true"/>
-    </function>
-
-    <function name="CombinerParameterivNV" offset="assign">
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLint *" variable_param="pname"/>
-        <glx rop="4139" ignore="true"/>
-    </function>
-
-    <function name="CombinerParameteriNV" offset="assign">
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLint"/>
-        <glx rop="4138" ignore="true"/>
-    </function>
-
-    <function name="CombinerInputNV" offset="assign">
-        <param name="stage" type="GLenum"/>
-        <param name="portion" type="GLenum"/>
-        <param name="variable" type="GLenum"/>
-        <param name="input" type="GLenum"/>
-        <param name="mapping" type="GLenum"/>
-        <param name="componentUsage" type="GLenum"/>
-        <glx rop="4140" ignore="true"/>
-    </function>
-
-    <function name="CombinerOutputNV" offset="assign">
-        <param name="stage" type="GLenum"/>
-        <param name="portion" type="GLenum"/>
-        <param name="abOutput" type="GLenum"/>
-        <param name="cdOutput" type="GLenum"/>
-        <param name="sumOutput" type="GLenum"/>
-        <param name="scale" type="GLenum"/>
-        <param name="bias" type="GLenum"/>
-        <param name="abDotProduct" type="GLboolean"/>
-        <param name="cdDotProduct" type="GLboolean"/>
-        <param name="muxSum" type="GLboolean"/>
-        <glx rop="4141" ignore="true"/>
-    </function>
-
-    <function name="FinalCombinerInputNV" offset="assign">
-        <param name="variable" type="GLenum"/>
-        <param name="input" type="GLenum"/>
-        <param name="mapping" type="GLenum"/>
-        <param name="componentUsage" type="GLenum"/>
-        <glx rop="4142" ignore="true"/>
-    </function>
-
-    <function name="GetCombinerInputParameterfvNV" offset="assign">
-        <param name="stage" type="GLenum"/>
-        <param name="portion" type="GLenum"/>
-        <param name="variable" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat *" output="true"/>
-        <glx vendorpriv="1270" ignore="true"/>
-    </function>
-
-    <function name="GetCombinerInputParameterivNV" offset="assign">
-        <param name="stage" type="GLenum"/>
-        <param name="portion" type="GLenum"/>
-        <param name="variable" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true"/>
-        <glx vendorpriv="1271" ignore="true"/>
-    </function>
-
-    <function name="GetCombinerOutputParameterfvNV" offset="assign">
-        <param name="stage" type="GLenum"/>
-        <param name="portion" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat *" output="true"/>
-        <glx vendorpriv="1272" ignore="true"/>
-    </function>
-
-    <function name="GetCombinerOutputParameterivNV" offset="assign">
-        <param name="stage" type="GLenum"/>
-        <param name="portion" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true"/>
-        <glx vendorpriv="1273" ignore="true"/>
-    </function>
-
-    <function name="GetFinalCombinerInputParameterfvNV" offset="assign">
-        <param name="variable" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat *" output="true"/>
-        <glx vendorpriv="1274" ignore="true"/>
-    </function>
-
-    <function name="GetFinalCombinerInputParameterivNV" offset="assign">
-        <param name="variable" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true"/>
-        <glx vendorpriv="1275" ignore="true"/>
-    </function>
-</category>
-
-<category name="GL_NV_fog_distance" number="192">
-    <enum name="FOG_DISTANCE_MODE_NV"          count="1"  value="0x855A">
-        <size name="Fogfv"/>
-        <size name="Fogiv"/>
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="EYE_RADIAL_NV"                            value="0x855B"/>
-    <enum name="EYE_PLANE_ABSOLUTE_NV"                    value="0x855C"/>
-</category>
-
-<category name="GL_NV_blend_square" number="194">
-    <!-- No new functions, types, enums. -->
-</category>
-
-<category name="GL_NV_texture_env_combine4" number="195">
-    <enum name="COMBINE4"                                 value="0x8503"/>
-    <enum name="SOURCE3_RGB_NV"                count="1"  value="0x8583">
-        <size name="TexEnvfv"/>
-        <size name="TexEnviv"/>
-        <size name="GetTexEnvfv" mode="get"/>
-        <size name="GetTexEnviv" mode="get"/>
-    </enum>
-    <enum name="SOURCE3_ALPHA_NV"              count="1"  value="0x858B">
-        <size name="TexEnvfv"/>
-        <size name="TexEnviv"/>
-        <size name="GetTexEnvfv" mode="get"/>
-        <size name="GetTexEnviv" mode="get"/>
-    </enum>
-    <enum name="OPERAND3_RGB_NV"               count="1"  value="0x8593">
-        <size name="TexEnvfv"/>
-        <size name="TexEnviv"/>
-        <size name="GetTexEnvfv" mode="get"/>
-        <size name="GetTexEnviv" mode="get"/>
-    </enum>
-    <enum name="OPERAND3_ALPHA_NV"             count="1"  value="0x859B">
-        <size name="TexEnvfv"/>
-        <size name="TexEnviv"/>
-        <size name="GetTexEnvfv" mode="get"/>
-        <size name="GetTexEnviv" mode="get"/>
-    </enum>
-</category>
-
-<category name="GL_MESA_resize_buffers" number="196">
-    <function name="ResizeBuffersMESA" offset="assign">
-        <glx ignore="true"/>
-    </function>
-</category>
-
-<category name="GL_MESA_window_pos" number="197">
-    <function name="WindowPos2dMESA" offset="assign">
-        <param name="x" type="GLdouble"/>
-        <param name="y" type="GLdouble"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="WindowPos2dvMESA" offset="assign">
-        <param name="v" type="const GLdouble *"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="WindowPos2fMESA" offset="assign">
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="WindowPos2fvMESA" offset="assign">
-        <param name="v" type="const GLfloat *"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="WindowPos2iMESA" offset="assign">
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="WindowPos2ivMESA" offset="assign">
-        <param name="v" type="const GLint *"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="WindowPos2sMESA" offset="assign">
-        <param name="x" type="GLshort"/>
-        <param name="y" type="GLshort"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="WindowPos2svMESA" offset="assign">
-        <param name="v" type="const GLshort *"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="WindowPos3dMESA" offset="assign">
-        <param name="x" type="GLdouble"/>
-        <param name="y" type="GLdouble"/>
-        <param name="z" type="GLdouble"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="WindowPos3dvMESA" offset="assign">
-        <param name="v" type="const GLdouble *"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="WindowPos3fMESA" offset="assign" vectorequiv="WindowPos3fvMESA">
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-    </function>
-
-    <function name="WindowPos3fvMESA" offset="assign">
-        <param name="v" type="const GLfloat *" count="3"/>
-        <glx rop="230"/>
-    </function>
-
-    <function name="WindowPos3iMESA" offset="assign">
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-        <param name="z" type="GLint"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="WindowPos3ivMESA" offset="assign">
-        <param name="v" type="const GLint *"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="WindowPos3sMESA" offset="assign">
-        <param name="x" type="GLshort"/>
-        <param name="y" type="GLshort"/>
-        <param name="z" type="GLshort"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="WindowPos3svMESA" offset="assign">
-        <param name="v" type="const GLshort *"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="WindowPos4dMESA" offset="assign">
-        <param name="x" type="GLdouble"/>
-        <param name="y" type="GLdouble"/>
-        <param name="z" type="GLdouble"/>
-        <param name="w" type="GLdouble"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="WindowPos4dvMESA" offset="assign">
-        <param name="v" type="const GLdouble *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="WindowPos4fMESA" offset="assign">
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-        <param name="w" type="GLfloat"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="WindowPos4fvMESA" offset="assign">
-        <param name="v" type="const GLfloat *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="WindowPos4iMESA" offset="assign">
-        <param name="x" type="GLint"/>
-        <param name="y" type="GLint"/>
-        <param name="z" type="GLint"/>
-        <param name="w" type="GLint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="WindowPos4ivMESA" offset="assign">
-        <param name="v" type="const GLint *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="WindowPos4sMESA" offset="assign">
-        <param name="x" type="GLshort"/>
-        <param name="y" type="GLshort"/>
-        <param name="z" type="GLshort"/>
-        <param name="w" type="GLshort"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="WindowPos4svMESA" offset="assign">
-        <param name="v" type="const GLshort *"/>
-        <glx ignore="true"/>
-    </function>
-</category>
-
-<category name="GL_EXT_texture_compression_s3tc" number="198">
-    <enum name="COMPRESSED_RGB_S3TC_DXT1_EXT"             value="0x83F0"/>
-    <enum name="COMPRESSED_RGBA_S3TC_DXT1_EXT"            value="0x83F1"/>
-    <enum name="COMPRESSED_RGBA_S3TC_DXT3_EXT"            value="0x83F2"/>
-    <enum name="COMPRESSED_RGBA_S3TC_DXT5_EXT"            value="0x83F3"/>
-</category>
-
-<category name="GL_IBM_multimode_draw_arrays" number="200">
-    <function name="MultiModeDrawArraysIBM" offset="assign" static_dispatch="false">
-        <param name="mode" type="const GLenum *"/>
-        <param name="first" type="const GLint *"/>
-        <param name="count" type="const GLsizei *"/>
-        <param name="primcount" type="GLsizei"/>
-        <param name="modestride" type="GLint"/>
-        <glx handcode="true" ignore="true"/>
-    </function>
-
-    <function name="MultiModeDrawElementsIBM" offset="assign" static_dispatch="false">
-        <param name="mode" type="const GLenum *"/>
-        <param name="count" type="const GLsizei *"/>
-        <param name="type" type="GLenum"/>
-        <param name="indices" type="const GLvoid * const *"/>
-        <param name="primcount" type="GLsizei"/>
-        <param name="modestride" type="GLint"/>
-        <glx handcode="true" ignore="true"/>
-    </function>
-</category>
-
-<category name="GL_IBM_vertex_array_lists" number="201">
-    <function name="ColorPointerListIBM">
-        <param name="size" type="GLint"/>
-        <param name="type" type="GLenum"/>
-        <param name="stride" type="GLint"/>
-        <param name="pointer" type="const GLvoid **"/>
-        <param name="ptrstride" type="GLint"/>
-    </function>
-
-    <function name="SecondaryColorPointerListIBM">
-        <param name="size" type="GLint"/>
-        <param name="type" type="GLenum"/>
-        <param name="stride" type="GLint"/>
-        <param name="pointer" type="const GLvoid **"/>
-        <param name="ptrstride" type="GLint"/>
-    </function>
-
-    <function name="EdgeFlagPointerListIBM">
-        <param name="stride" type="GLint"/>
-        <param name="pointer" type="const GLboolean **"/>
-        <param name="ptrstride" type="GLint"/>
-    </function>
-
-    <function name="FogCoordPointerListIBM">
-        <param name="type" type="GLenum"/>
-        <param name="stride" type="GLint"/>
-        <param name="pointer" type="const GLvoid **"/>
-        <param name="ptrstride" type="GLint"/>
-    </function>
-
-    <function name="IndexPointerListIBM">
-        <param name="type" type="GLenum"/>
-        <param name="stride" type="GLint"/>
-        <param name="pointer" type="const GLvoid **"/>
-        <param name="ptrstride" type="GLint"/>
-    </function>
-
-    <function name="NormalPointerListIBM">
-        <param name="type" type="GLenum"/>
-        <param name="stride" type="GLint"/>
-        <param name="pointer" type="const GLvoid **"/>
-        <param name="ptrstride" type="GLint"/>
-    </function>
-
-    <function name="TexCoordPointerListIBM">
-        <param name="size" type="GLint"/>
-        <param name="type" type="GLenum"/>
-        <param name="stride" type="GLint"/>
-        <param name="pointer" type="const GLvoid **"/>
-        <param name="ptrstride" type="GLint"/>
-    </function>
-
-    <function name="VertexPointerListIBM">
-        <param name="size" type="GLint"/>
-        <param name="type" type="GLenum"/>
-        <param name="stride" type="GLint"/>
-        <param name="pointer" type="const GLvoid **"/>
-        <param name="ptrstride" type="GLint"/>
-    </function>
-</category>
-
-<!-- Extension number 202 is not listed in the extension registry. -->
-<!-- Extension number 203 is not listed in the extension registry. -->
-<!-- Extension number 204 is not listed in the extension registry. -->
-<!-- Extension number 205 is not listed in the extension registry. -->
-
-<category name="GL_3DFX_texture_compression_FXT1" number="206">
-    <enum name="COMPRESSED_RGB_FXT1_3DFX"                 value="0x86B0"/>
-    <enum name="COMPRESSED_RGBA_FXT1_3DFX"                value="0x86B1"/>
-</category>
-
-<category name="GL_3DFX_multisample" number="207">
-    <enum name="MULTISAMPLE_3DFX"                         value="0x86B2"/>
-    <enum name="SAMPLE_BUFFERS_3DFX"                      value="0x86B3"/>
-    <enum name="SAMPLES_3DFX"                             value="0x86B4"/>
-    <enum name="MULTISAMPLE_BIT_3DFX"                     value="0x20000000"/>
-</category>
-
-<category name="GL_3DFX_tbuffer" number="208">
-    <function name="TbufferMask3DFX">
-        <param name="mask" type="GLuint"/>
-        <glx ignore="true"/>
-    </function>
-</category>
-
-<category name="GL_EXT_multisample" number="209">
-    <function name="SampleMaskEXT" alias="SampleMaskSGIS" static_dispatch="false">
-        <param name="value" type="GLclampf"/>
-        <param name="invert" type="GLboolean"/>
-    </function>
-
-    <function name="SamplePatternEXT" alias="SamplePatternSGIS" static_dispatch="false">
-        <param name="pattern" type="GLenum"/>
-    </function>
-</category>
-
-<!-- Extension number 211 is not listed in the extension registry. -->
-<!-- Extension number 213 is not listed in the extension registry. -->
-
-<category name="GL_SGIS_texture_color_mask" number="214">
-    <enum name="TEXTURE_COLOR_WRITEMASK_SGIS"             value="0x81EF"/>
-
-    <function name="TextureColorMaskSGIS">
-        <param name="red" type="GLboolean"/>
-        <param name="green" type="GLboolean"/>
-        <param name="blue" type="GLboolean"/>
-        <param name="alpha" type="GLboolean"/>
-        <glx rop="2082" ignore="true"/>
-    </function>
-</category>
-
-<!-- Extension number 215 is a GLX extension. -->
-<!-- Extension number 216 is a GLX extension. -->
-<!-- Extension number 217 is a GLX extension. -->
-<!-- Extension number 218 is a GLX extension. -->
-<!-- Extension number 219 is not listed in the extension registry. -->
-
-<category name="GL_EXT_texture_env_dot3" number="220">
-    <enum name="DOT3_RGB_EXT"                             value="0x8740"/>
-    <enum name="DOT3_RGBA_EXT"                            value="0x8741"/>
-</category>
-
-<category name="GL_ATI_texture_mirror_once" number="221">
-    <enum name="MIRROR_CLAMP_ATI"                         value="0x8742"/>
-    <enum name="MIRROR_CLAMP_TO_EDGE_ATI"                 value="0x8743"/>
-</category>
-
-<category name="GL_NV_fence" number="222">
-    <function name="DeleteFencesNV" offset="assign" static_dispatch="false">
-        <param name="n" type="GLsizei"/>
-        <param name="fences" type="const GLuint *"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GenFencesNV" offset="assign" static_dispatch="false">
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="fences" type="GLuint *" output="true" count="n"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="IsFenceNV" offset="assign" static_dispatch="false">
-        <param name="fence" type="GLuint"/>
-        <return type="GLboolean"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="TestFenceNV" offset="assign" static_dispatch="false">
-        <param name="fence" type="GLuint"/>
-        <return type="GLboolean"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="GetFenceivNV" offset="assign" static_dispatch="false">
-        <param name="fence" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="FinishFenceNV" offset="assign" static_dispatch="false">
-        <param name="fence" type="GLuint"/>
-        <glx ignore="true"/>
-    </function>
-
-    <function name="SetFenceNV" offset="assign" static_dispatch="false">
-        <param name="fence" type="GLuint"/>
-        <param name="condition" type="GLenum"/>
-        <glx ignore="true"/>
-    </function>
-</category>
-
-<category name="GL_IBM_texture_mirrored_repeat" number="224">
-    <enum name="MIRRORED_REPEAT_IBM"                      value="0x8370"/>
-</category>
-
-<category name="GL_NV_evaluators" number="225">
-    <function name="MapControlPointsNV">
-        <param name="target" type="GLenum"/>
-        <param name="index" type="GLuint"/>
-        <param name="type" type="GLenum"/>
-        <param name="ustride" type="GLsizei"/>
-        <param name="vstride" type="GLsizei"/>
-        <param name="uorder" type="GLint"/>
-        <param name="vorder" type="GLint"/>
-        <param name="packed" type="GLboolean"/>
-        <param name="points" type="const GLvoid *"/>
-    </function>
-
-    <function name="MapParameterivNV">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLint *"/>
-    </function>
-
-    <function name="MapParameterfvNV">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLfloat *"/>
-    </function>
-
-    <function name="GetMapControlPointsNV">
-        <param name="target" type="GLenum"/>
-        <param name="index" type="GLuint"/>
-        <param name="type" type="GLenum"/>
-        <param name="ustride" type="GLsizei"/>
-        <param name="vstride" type="GLsizei"/>
-        <param name="packed" type="GLboolean"/>
-        <param name="points" type="GLvoid *" output="true"/>
-    </function>
-
-    <function name="GetMapParameterivNV">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true"/>
-    </function>
-
-    <function name="GetMapParameterfvNV">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat *" output="true"/>
-    </function>
-
-    <function name="GetMapAttribParameterivNV">
-        <param name="target" type="GLenum"/>
-        <param name="index" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true"/>
-    </function>
-
-    <function name="GetMapAttribParameterfvNV">
-        <param name="target" type="GLenum"/>
-        <param name="index" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat *" output="true"/>
-    </function>
-
-    <function name="EvalMapsNV">
-        <param name="target" type="GLenum"/>
-        <param name="mode" type="GLenum"/>
-    </function>
-</category>
-
-<category name="GL_NV_packed_depth_stencil" number="226">
-    <enum name="DEPTH_STENCIL_NV"                         value="0x84F9"/>
-    <enum name="UNSIGNED_INT_24_8_NV"                     value="0x84FA"/>
-</category>
-
-<category name="GL_NV_register_combiners2" number="227">
-    <function name="CombinerStageParameterfvNV">
-        <param name="stage" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLfloat *"/>
-    </function>
-
-    <function name="GetCombinerStageParameterfvNV">
-        <param name="stage" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat *" output="true"/>
-    </function>
-</category>
-
-<category name="GL_NV_texture_compression_vtc" number="228">
-    <enum name="COMPRESSED_RGB_S3TC_DXT1_EXT"             value="0x83F0"/>
-    <enum name="COMPRESSED_RGBA_S3TC_DXT1_EXT"            value="0x83F1"/>
-    <enum name="COMPRESSED_RGBA_S3TC_DXT3_EXT"            value="0x83F2"/>
-    <enum name="COMPRESSED_RGBA_S3TC_DXT5_EXT"            value="0x83F3"/>
-</category>
-
-<category name="GL_NV_texture_rectangle" number="229">
-    <enum name="TEXTURE_RECTANGLE_NV"          count="1"  value="0x84F5">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_BINDING_RECTANGLE_NV"  count="1"  value="0x84F6">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="PROXY_TEXTURE_RECTANGLE_NV"               value="0x84F7"/>
-    <enum name="MAX_RECTANGLE_TEXTURE_SIZE_NV" count="1"  value="0x84F8">
-        <size name="Get" mode="get"/>
-    </enum>
-</category>
-
-<category name="GL_NV_vertex_program" number="233">
-    <enum name="VERTEX_PROGRAM_NV"                        value="0x8620"/>
-    <enum name="VERTEX_STATE_PROGRAM_NV"                  value="0x8621"/>
-    <enum name="ATTRIB_ARRAY_SIZE_NV"          count="1"  value="0x8623">
-        <size name="GetVertexAttribdvNV" mode="get"/>
-        <size name="GetVertexAttribfvNV" mode="get"/>
-        <size name="GetVertexAttribivNV" mode="get"/>
-    </enum>
-    <enum name="ATTRIB_ARRAY_STRIDE_NV"        count="1"  value="0x8624">
-        <size name="GetVertexAttribdvNV" mode="get"/>
-        <size name="GetVertexAttribfvNV" mode="get"/>
-        <size name="GetVertexAttribivNV" mode="get"/>
-    </enum>
-    <enum name="ATTRIB_ARRAY_TYPE_NV"          count="1"  value="0x8625">
-        <size name="GetVertexAttribdvNV" mode="get"/>
-        <size name="GetVertexAttribfvNV" mode="get"/>
-        <size name="GetVertexAttribivNV" mode="get"/>
-    </enum>
-    <enum name="CURRENT_ATTRIB_NV"             count="1"  value="0x8626">
-        <size name="GetVertexAttribdvNV" mode="get"/>
-        <size name="GetVertexAttribfvNV" mode="get"/>
-        <size name="GetVertexAttribivNV" mode="get"/>
-    </enum>
-    <enum name="PROGRAM_LENGTH_NV"             count="1"  value="0x8627">
-        <size name="GetProgramivNV" mode="get"/>
-    </enum>
-    <enum name="PROGRAM_STRING_NV"                        value="0x8628"/>
-    <enum name="MODELVIEW_PROJECTION_NV"                  value="0x8629"/>
-    <enum name="IDENTITY_NV"                              value="0x862A"/>
-    <enum name="INVERSE_NV"                               value="0x862B"/>
-    <enum name="TRANSPOSE_NV"                             value="0x862C"/>
-    <enum name="INVERSE_TRANSPOSE_NV"                     value="0x862D"/>
-    <enum name="MAX_TRACK_MATRIX_STACK_DEPTH_NV"          value="0x862E"/>
-    <enum name="MAX_TRACK_MATRICES_NV"                    value="0x862F"/>
-    <enum name="MATRIX0_NV"                               value="0x8630"/>
-    <enum name="MATRIX1_NV"                               value="0x8631"/>
-    <enum name="MATRIX2_NV"                               value="0x8632"/>
-    <enum name="MATRIX3_NV"                               value="0x8633"/>
-    <enum name="MATRIX4_NV"                               value="0x8634"/>
-    <enum name="MATRIX5_NV"                               value="0x8635"/>
-    <enum name="MATRIX6_NV"                               value="0x8636"/>
-    <enum name="MATRIX7_NV"                               value="0x8637"/>
-    <enum name="CURRENT_MATRIX_STACK_DEPTH_NV"            value="0x8640"/>
-    <enum name="CURRENT_MATRIX_NV"                        value="0x8641"/>
-    <enum name="VERTEX_PROGRAM_POINT_SIZE_NV"             value="0x8642"/>
-    <enum name="VERTEX_PROGRAM_TWO_SIDE_NV"               value="0x8643"/>
-    <enum name="PROGRAM_PARAMETER_NV"                     value="0x8644"/>
-    <enum name="ATTRIB_ARRAY_POINTER_NV"                  value="0x8645"/>
-    <enum name="PROGRAM_TARGET_NV"             count="1"  value="0x8646">
-        <size name="GetProgramivNV" mode="get"/>
-    </enum>
-    <enum name="PROGRAM_RESIDENT_NV"           count="1"  value="0x8647">
-        <size name="GetProgramivNV" mode="get"/>
-    </enum>
-    <enum name="TRACK_MATRIX_NV"                          value="0x8648"/>
-    <enum name="TRACK_MATRIX_TRANSFORM_NV"                value="0x8649"/>
-    <enum name="VERTEX_PROGRAM_BINDING_NV"                value="0x864A"/>
-    <enum name="PROGRAM_ERROR_POSITION_NV"                value="0x864B"/>
-    <enum name="VERTEX_ATTRIB_ARRAY0_NV"                  value="0x8650"/>
-    <enum name="VERTEX_ATTRIB_ARRAY1_NV"                  value="0x8651"/>
-    <enum name="VERTEX_ATTRIB_ARRAY2_NV"                  value="0x8652"/>
-    <enum name="VERTEX_ATTRIB_ARRAY3_NV"                  value="0x8653"/>
-    <enum name="VERTEX_ATTRIB_ARRAY4_NV"                  value="0x8654"/>
-    <enum name="VERTEX_ATTRIB_ARRAY5_NV"                  value="0x8655"/>
-    <enum name="VERTEX_ATTRIB_ARRAY6_NV"                  value="0x8656"/>
-    <enum name="VERTEX_ATTRIB_ARRAY7_NV"                  value="0x8657"/>
-    <enum name="VERTEX_ATTRIB_ARRAY8_NV"                  value="0x8658"/>
-    <enum name="VERTEX_ATTRIB_ARRAY9_NV"                  value="0x8659"/>
-    <enum name="VERTEX_ATTRIB_ARRAY10_NV"                 value="0x865A"/>
-    <enum name="VERTEX_ATTRIB_ARRAY11_NV"                 value="0x865B"/>
-    <enum name="VERTEX_ATTRIB_ARRAY12_NV"                 value="0x865C"/>
-    <enum name="VERTEX_ATTRIB_ARRAY13_NV"                 value="0x865D"/>
-    <enum name="VERTEX_ATTRIB_ARRAY14_NV"                 value="0x865E"/>
-    <enum name="VERTEX_ATTRIB_ARRAY15_NV"                 value="0x865F"/>
-    <enum name="MAP1_VERTEX_ATTRIB0_4_NV"                 value="0x8660"/>
-    <enum name="MAP1_VERTEX_ATTRIB1_4_NV"                 value="0x8661"/>
-    <enum name="MAP1_VERTEX_ATTRIB2_4_NV"                 value="0x8662"/>
-    <enum name="MAP1_VERTEX_ATTRIB3_4_NV"                 value="0x8663"/>
-    <enum name="MAP1_VERTEX_ATTRIB4_4_NV"                 value="0x8664"/>
-    <enum name="MAP1_VERTEX_ATTRIB5_4_NV"                 value="0x8665"/>
-    <enum name="MAP1_VERTEX_ATTRIB6_4_NV"                 value="0x8666"/>
-    <enum name="MAP1_VERTEX_ATTRIB7_4_NV"                 value="0x8667"/>
-    <enum name="MAP1_VERTEX_ATTRIB8_4_NV"                 value="0x8668"/>
-    <enum name="MAP1_VERTEX_ATTRIB9_4_NV"                 value="0x8669"/>
-    <enum name="MAP1_VERTEX_ATTRIB10_4_NV"                value="0x866A"/>
-    <enum name="MAP1_VERTEX_ATTRIB11_4_NV"                value="0x866B"/>
-    <enum name="MAP1_VERTEX_ATTRIB12_4_NV"                value="0x866C"/>
-    <enum name="MAP1_VERTEX_ATTRIB13_4_NV"                value="0x866D"/>
-    <enum name="MAP1_VERTEX_ATTRIB14_4_NV"                value="0x866E"/>
-    <enum name="MAP1_VERTEX_ATTRIB15_4_NV"                value="0x866F"/>
-    <enum name="MAP2_VERTEX_ATTRIB0_4_NV"                 value="0x8670"/>
-    <enum name="MAP2_VERTEX_ATTRIB1_4_NV"                 value="0x8671"/>
-    <enum name="MAP2_VERTEX_ATTRIB2_4_NV"                 value="0x8672"/>
-    <enum name="MAP2_VERTEX_ATTRIB3_4_NV"                 value="0x8673"/>
-    <enum name="MAP2_VERTEX_ATTRIB4_4_NV"                 value="0x8674"/>
-    <enum name="MAP2_VERTEX_ATTRIB5_4_NV"                 value="0x8675"/>
-    <enum name="MAP2_VERTEX_ATTRIB6_4_NV"                 value="0x8676"/>
-    <enum name="MAP2_VERTEX_ATTRIB7_4_NV"                 value="0x8677"/>
-    <enum name="MAP2_VERTEX_ATTRIB8_4_NV"                 value="0x8678"/>
-    <enum name="MAP2_VERTEX_ATTRIB9_4_NV"                 value="0x8679"/>
-    <enum name="MAP2_VERTEX_ATTRIB10_4_NV"                value="0x867A"/>
-    <enum name="MAP2_VERTEX_ATTRIB11_4_NV"                value="0x867B"/>
-    <enum name="MAP2_VERTEX_ATTRIB12_4_NV"                value="0x867C"/>
-    <enum name="MAP2_VERTEX_ATTRIB13_4_NV"                value="0x867D"/>
-    <enum name="MAP2_VERTEX_ATTRIB14_4_NV"                value="0x867E"/>
-    <enum name="MAP2_VERTEX_ATTRIB15_4_NV"                value="0x867F"/>
-
-    <function name="AreProgramsResidentNV" offset="assign">
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="ids" type="const GLuint *" count="n"/>
-        <param name="residences" type="GLboolean *" output="true" count="n"/>
-        <return type="GLboolean"/>
-        <glx vendorpriv="1293"/>
-    </function>
-
-    <function name="BindProgramNV" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="program" type="GLuint"/>
-        <glx rop="4180"/>
-    </function>
-
-    <function name="DeleteProgramsNV" offset="assign">
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="programs" type="const GLuint *" count="n"/>
-        <glx vendorpriv="1294"/>
-    </function>
-
-    <function name="ExecuteProgramNV" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="id" type="GLuint"/>
-        <param name="params" type="const GLfloat *" count="4"/>
-        <glx rop="4181"/>
-    </function>
-
-    <function name="GenProgramsNV" offset="assign">
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="programs" type="GLuint *" output="true" count="n"/>
-        <glx vendorpriv="1295" always_array="true"/>
-     </function>
-
-    <!-- This isn't 100% correct.  Currently, the only valid value of pname
-         is GL_PROGRAM_PARAMETER_NV, and the count for that pname is always
-         4.  This is why the pname parameter was removed in the ARB version
-         of these functions.
-      -->
-
-    <function name="GetProgramParameterdvNV" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="index" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLdouble *" output="true" count="4"/>
-        <glx vendorpriv="1297"/>
-    </function>
-
-    <function name="GetProgramParameterfvNV" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="index" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat *" output="true" count="4"/>
-        <glx vendorpriv="1296"/>
-    </function>
-
-    <function name="GetProgramivNV" offset="assign">
-        <param name="id" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true" variable_param="pname"/>
-        <glx vendorpriv="1298"/>
-    </function>
-
-    <function name="GetProgramStringNV" offset="assign">
-        <param name="id" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="program" type="GLubyte *" output="true"/>
-        <glx vendorpriv="1299" handcode="server" always_array="true"/>
-    </function>
-
-    <function name="GetTrackMatrixivNV" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="address" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true" count="1"/>
-        <glx vendorpriv="1300"/>
-    </function>
-
-    <function name="GetVertexAttribdvNV" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLdouble *" output="true" variable_param="pname"/>
-        <glx vendorpriv="1301"/>
-    </function>
-
-    <function name="GetVertexAttribfvNV" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
-        <glx vendorpriv="1302"/>
-    </function>
-
-    <function name="GetVertexAttribivNV" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint *" output="true" variable_param="pname"/>
-        <glx vendorpriv="1303"/>
-    </function>
-
-    <function name="GetVertexAttribPointervNV" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="pointer" type="GLvoid **" output="true"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="IsProgramNV" offset="assign">
-        <param name="program" type="GLuint"/>
-        <return type="GLboolean"/>
-        <glx vendorpriv="1304"/>
-    </function>
-
-    <function name="LoadProgramNV" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="id" type="GLuint"/>
-        <param name="len" type="GLsizei" counter="true"/>
-        <param name="program" type="const GLubyte *" count="len"/>
-        <glx rop="4183"/>
-    </function>
-
-    <function name="ProgramParameter4dNV" alias="ProgramEnvParameter4dARB">
-        <param name="target" type="GLenum"/>
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLdouble"/>
-        <param name="y" type="GLdouble"/>
-        <param name="z" type="GLdouble"/>
-        <param name="w" type="GLdouble"/>
-    </function>
-
-    <function name="ProgramParameter4dvNV" alias="ProgramEnvParameter4dvARB">
-        <param name="target" type="GLenum"/>
-        <param name="index" type="GLuint"/>
-        <param name="params" type="const GLdouble *"/>
-    </function>
-
-    <function name="ProgramParameter4fNV" alias="ProgramEnvParameter4fARB">
-        <param name="target" type="GLenum"/>
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-        <param name="w" type="GLfloat"/>
-    </function>
-
-    <function name="ProgramParameter4fvNV" alias="ProgramEnvParameter4fvARB">
-        <param name="target" type="GLenum"/>
-        <param name="index" type="GLuint"/>
-        <param name="params" type="const GLfloat *"/>
-    </function>
-
-    <function name="ProgramParameters4dvNV" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="index" type="GLuint"/>
-        <param name="num" type="GLuint" counter="true"/>
-        <param name="params" type="const GLdouble *" count="num" count_scale="4"/>
-        <glx rop="4187"/>
-    </function>
-
-    <function name="ProgramParameters4fvNV" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="index" type="GLuint"/>
-        <param name="num" type="GLuint" counter="true"/>
-        <param name="params" type="const GLfloat *" count="num" count_scale="4"/>
-        <glx rop="4186"/>
-    </function>
-
-    <function name="RequestResidentProgramsNV" offset="assign">
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="ids" type="const GLuint *" count="n"/>
-        <glx rop="4182"/>
-    </function>
-
-    <function name="TrackMatrixNV" offset="assign">
-        <param name="target" type="GLenum"/>
-        <param name="address" type="GLuint"/>
-        <param name="matrix" type="GLenum"/>
-        <param name="transform" type="GLenum"/>
-        <glx rop="4188"/>
-    </function>
-
-    <function name="VertexAttribPointerNV" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="size" type="GLint"/>
-        <param name="type" type="GLenum"/>
-        <param name="stride" type="GLsizei"/>
-        <param name="pointer" type="const GLvoid *"/>
-        <glx handcode="true"/>
-    </function>
-
-    <function name="VertexAttrib1sNV" offset="assign" vectorequiv="VertexAttrib1svNV">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLshort"/>
-    </function>
-
-    <function name="VertexAttrib1svNV" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLshort *" count="1"/>
-        <glx rop="4265"/>
-    </function>
-
-    <function name="VertexAttrib2sNV" offset="assign" vectorequiv="VertexAttrib2svNV">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLshort"/>
-        <param name="y" type="GLshort"/>
-    </function>
-
-    <function name="VertexAttrib2svNV" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLshort *" count="2"/>
-        <glx rop="4266"/>
-    </function>
-
-    <function name="VertexAttrib3sNV" offset="assign" vectorequiv="VertexAttrib3svNV">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLshort"/>
-        <param name="y" type="GLshort"/>
-        <param name="z" type="GLshort"/>
-    </function>
-
-    <function name="VertexAttrib3svNV" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLshort *" count="3"/>
-        <glx rop="4267"/>
-    </function>
-
-    <function name="VertexAttrib4sNV" offset="assign" vectorequiv="VertexAttrib4svNV">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLshort"/>
-        <param name="y" type="GLshort"/>
-        <param name="z" type="GLshort"/>
-        <param name="w" type="GLshort"/>
-    </function>
-
-    <function name="VertexAttrib4svNV" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLshort *" count="4"/>
-        <glx rop="4268"/>
-    </function>
-
-    <function name="VertexAttrib1fNV" offset="assign" vectorequiv="VertexAttrib1fvNV">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLfloat"/>
-    </function>
-
-    <function name="VertexAttrib1fvNV" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLfloat *" count="1"/>
-        <glx rop="4269"/>
-    </function>
-
-    <function name="VertexAttrib2fNV" offset="assign" vectorequiv="VertexAttrib2fvNV">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-    </function>
-
-    <function name="VertexAttrib2fvNV" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLfloat *" count="2"/>
-        <glx rop="4270"/>
-    </function>
-
-    <function name="VertexAttrib3fNV" offset="assign" vectorequiv="VertexAttrib3fvNV">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-    </function>
-
-    <function name="VertexAttrib3fvNV" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLfloat *" count="3"/>
-        <glx rop="4271"/>
-    </function>
-
-    <function name="VertexAttrib4fNV" offset="assign" vectorequiv="VertexAttrib4fvNV">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-        <param name="w" type="GLfloat"/>
-    </function>
-
-    <function name="VertexAttrib4fvNV" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLfloat *" count="4"/>
-        <glx rop="4272"/>
-    </function>
-
-    <function name="VertexAttrib1dNV" offset="assign" vectorequiv="VertexAttrib1dvNV">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLdouble"/>
-    </function>
-
-    <function name="VertexAttrib1dvNV" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLdouble *" count="1"/>
-        <glx rop="4273" doubles_in_order="true"/>
-    </function>
-
-    <function name="VertexAttrib2dNV" offset="assign" vectorequiv="VertexAttrib2dvNV">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLdouble"/>
-        <param name="y" type="GLdouble"/>
-    </function>
-
-    <function name="VertexAttrib2dvNV" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLdouble *" count="2"/>
-        <glx rop="4274" doubles_in_order="true"/>
-    </function>
-
-    <function name="VertexAttrib3dNV" offset="assign" vectorequiv="VertexAttrib3dvNV">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLdouble"/>
-        <param name="y" type="GLdouble"/>
-        <param name="z" type="GLdouble"/>
-    </function>
-
-    <function name="VertexAttrib3dvNV" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLdouble *" count="3"/>
-        <glx rop="4275" doubles_in_order="true"/>
-    </function>
-
-    <function name="VertexAttrib4dNV" offset="assign" vectorequiv="VertexAttrib4dvNV">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLdouble"/>
-        <param name="y" type="GLdouble"/>
-        <param name="z" type="GLdouble"/>
-        <param name="w" type="GLdouble"/>
-    </function>
-
-    <function name="VertexAttrib4dvNV" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLdouble *" count="4"/>
-        <glx rop="4276" doubles_in_order="true"/>
-    </function>
-
-    <function name="VertexAttrib4ubNV" offset="assign" vectorequiv="VertexAttrib4ubvNV">
-        <param name="index" type="GLuint"/>
-        <param name="x" type="GLubyte"/>
-        <param name="y" type="GLubyte"/>
-        <param name="z" type="GLubyte"/>
-        <param name="w" type="GLubyte"/>
-    </function>
-
-    <function name="VertexAttrib4ubvNV" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="v" type="const GLubyte *" count="4"/>
-        <glx rop="4277"/>
-    </function>
-
-    <function name="VertexAttribs1svNV" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="v" type="const GLshort *" count="n"/>
-        <glx rop="4202"/>
-    </function>
-
-    <function name="VertexAttribs2svNV" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="v" type="const GLshort *" count="n" count_scale="2"/>
-        <glx rop="4203"/>
-    </function>
-
-    <function name="VertexAttribs3svNV" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="v" type="const GLshort *" count="n" count_scale="3"/>
-        <glx rop="4204"/>
-    </function>
-
-    <function name="VertexAttribs4svNV" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="v" type="const GLshort *" count="n" count_scale="4"/>
-        <glx rop="4205"/>
-    </function>
-
-    <function name="VertexAttribs1fvNV" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="v" type="const GLfloat *" count="n"/>
-        <glx rop="4206"/>
-    </function>
-
-    <function name="VertexAttribs2fvNV" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="v" type="const GLfloat *" count="n" count_scale="2"/>
-        <glx rop="4207"/>
-    </function>
-
-    <function name="VertexAttribs3fvNV" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="v" type="const GLfloat *" count="n" count_scale="3"/>
-        <glx rop="4208"/>
-    </function>
-
-    <function name="VertexAttribs4fvNV" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="v" type="const GLfloat *" count="n" count_scale="4"/>
-        <glx rop="4209"/>
-    </function>
-
-    <function name="VertexAttribs1dvNV" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="v" type="const GLdouble *" count="n"/>
-        <glx rop="4210" doubles_in_order="true"/>
-    </function>
-
-    <function name="VertexAttribs2dvNV" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="v" type="const GLdouble *" count="n" count_scale="2"/>
-        <glx rop="4211" doubles_in_order="true"/>
-    </function>
-
-    <function name="VertexAttribs3dvNV" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="v" type="const GLdouble *" count="n" count_scale="3"/>
-        <glx rop="4212" doubles_in_order="true"/>
-    </function>
-
-    <function name="VertexAttribs4dvNV" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="v" type="const GLdouble *" count="n" count_scale="4"/>
-        <glx rop="4213" doubles_in_order="true"/>
-    </function>
-
-    <function name="VertexAttribs4ubvNV" offset="assign">
-        <param name="index" type="GLuint"/>
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="v" type="const GLubyte *" count="n" count_scale="4"/>
-        <glx rop="4214"/>
-    </function>
-</category>
-
-<!-- Extension number 234 is a GLX extension. -->
-
-<category name="GL_SGIX_texture_coordinate_clamp" number="235">
-    <enum name="TEXTURE_MAX_CLAMP_S_SGIX"      count="1"  value="0x8369">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_MAX_CLAMP_T_SGIX"      count="1"  value="0x836A">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_MAX_CLAMP_R_SGIX"      count="1"  value="0x836B">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-</category>
-
-<!-- Extension number 236 is not listed in the extension registry. -->
-<!-- Extension number 237 is a GLX extension. -->
-<!-- Extension number 238 is a GLX extension. -->
-<!-- Extension number 242 is a WGL extension. -->
-
-<category name="GL_NV_copy_depth_to_color" number="243">
-    <enum name="DEPTH_STENCIL_TO_RGBA_NV"                 value="0x886E"/>
-    <enum name="DEPTH_STENCIL_TO_BGRA_NV"                 value="0x886F"/>
-</category>
-
-<category name="GL_ATI_envmap_bumpmap" number="244">
-    <enum name="BUMP_ROT_MATRIX_ATI"          count="4"   value="0x8775">
-        <size name="TexBumpParameterfv"/>
-        <size name="TexBumpParameteriv"/>
-        <size name="GetTexBumpParameterfv" mode="get"/>
-        <size name="GetTexBumpParameteriv" mode="get"/>
-    </enum>
-    <enum name="BUMP_ROT_MATRIX_SIZE_ATI"     count="1"   value="0x8776">
-        <size name="GetTexBumpParameterfv" mode="get"/>
-        <size name="GetTexBumpParameteriv" mode="get"/>
-    </enum>
-    <enum name="BUMP_NUM_TEX_UNITS_ATI"       count="1"   value="0x8777">
-        <size name="GetTexBumpParameterfv" mode="get"/>
-        <size name="GetTexBumpParameteriv" mode="get"/>
-    </enum>
-    <enum name="BUMP_TEX_UNITS_ATI"           count="-1"  value="0x8778">
-        <size name="GetTexBumpParameterfv" mode="get"/>
-        <size name="GetTexBumpParameteriv" mode="get"/>
-    </enum>
-    <enum name="DUDV_ATI"                                 value="0x8779"/>
-    <enum name="DU8DV8_ATI"                               value="0x877A"/>
-    <enum name="BUMP_ENVMAP_ATI"                          value="0x877B"/>
-    <enum name="BUMP_TARGET_ATI"              count="1"   value="0x877C">
-        <size name="TexEnviv"/>
-        <size name="TexEnvfv"/>
-        <size name="GetTexEnviv" mode="get"/>
-        <size name="GetTexEnvfv" mode="get"/>
-    </enum>
-    <function name="TexBumpParameterfvATI" offset="assign">
-      <param name="pname" type="GLenum"/>
-      <param name="param" type="const GLfloat *" variable_param="pname"/>
-      <glx ignore="true"/>
-    </function>
-    <function name="TexBumpParameterivATI" offset="assign">
-      <param name="pname" type="GLenum"/>
-      <param name="param" type="const GLint *" variable_param="pname"/>
-      <glx ignore="true"/>
-    </function>
-    <function name="GetTexBumpParameterfvATI" offset="assign">
-      <param name="pname" type="GLenum"/>
-      <param name="param" type="GLfloat *" variable_param="pname"/>
-      <glx ignore="true"/>
-    </function>
-    <function name="GetTexBumpParameterivATI" offset="assign">
-      <param name="pname" type="GLenum"/>
-      <param name="param" type="GLint *" variable_param="pname"/>
-      <glx ignore="true"/>
-    </function>
-</category>
-
-<category name="GL_ATI_fragment_shader" number="245">
-    <function name="GenFragmentShadersATI" offset="assign">
-      <return type="GLuint"/>
-      <param name="range" type="GLuint"/>
-      <glx ignore="true"/>
-    </function>
-    
-    <function name="BindFragmentShaderATI" offset="assign">
-      <param name="id" type="GLuint"/>
-      <glx ignore="true"/>
-    </function>
-
-    <function name="DeleteFragmentShaderATI" offset="assign">
-      <param name="id" type="GLuint"/>
-      <glx ignore="true"/>
-    </function>
-
-    <function name="BeginFragmentShaderATI" offset="assign">
-      <glx ignore="true"/>
-    </function>
-
-    <function name="EndFragmentShaderATI" offset="assign">
-      <glx ignore="true"/>
-    </function>
-    
-    <function name="PassTexCoordATI" offset="assign">
-      <param name="dst" type="GLuint"/>
-      <param name="coord" type="GLuint"/>
-      <param name="swizzle" type="GLenum"/>
-      <glx ignore="true"/>
-    </function>
-
-    <function name="SampleMapATI" offset="assign">
-      <param name="dst" type="GLuint"/>
-      <param name="interp" type="GLuint"/>
-      <param name="swizzle" type="GLenum"/>
-      <glx ignore="true"/>
-    </function>
-
-    <function name="ColorFragmentOp1ATI" offset="assign">
-      <param name="op" type="GLenum"/>
-      <param name="dst" type="GLuint"/>
-      <param name="dstMask" type="GLuint"/>
-      <param name="dstMod" type="GLuint"/>
-      <param name="arg1" type="GLuint"/>
-      <param name="arg1Rep" type="GLuint"/>
-      <param name="arg1Mod" type="GLuint"/>
-      <glx ignore="true"/>
-    </function>
-
-    <function name="ColorFragmentOp2ATI" offset="assign">
-      <param name="op" type="GLenum"/>
-      <param name="dst" type="GLuint"/>
-      <param name="dstMask" type="GLuint"/>
-      <param name="dstMod" type="GLuint"/>
-      <param name="arg1" type="GLuint"/>
-      <param name="arg1Rep" type="GLuint"/>
-      <param name="arg1Mod" type="GLuint"/>
-      <param name="arg2" type="GLuint"/>
-      <param name="arg2Rep" type="GLuint"/>
-      <param name="arg2Mod" type="GLuint"/>
-      <glx ignore="true"/>
-    </function>
-
-    <function name="ColorFragmentOp3ATI" offset="assign">
-      <param name="op" type="GLenum"/>
-      <param name="dst" type="GLuint"/>
-      <param name="dstMask" type="GLuint"/>
-      <param name="dstMod" type="GLuint"/>
-      <param name="arg1" type="GLuint"/>
-      <param name="arg1Rep" type="GLuint"/>
-      <param name="arg1Mod" type="GLuint"/>
-      <param name="arg2" type="GLuint"/>
-      <param name="arg2Rep" type="GLuint"/>
-      <param name="arg2Mod" type="GLuint"/>
-      <param name="arg3" type="GLuint"/>
-      <param name="arg3Rep" type="GLuint"/>
-      <param name="arg3Mod" type="GLuint"/>
-      <glx ignore="true"/>
-    </function>
-
-    <function name="AlphaFragmentOp1ATI" offset="assign">
-      <param name="op" type="GLenum"/>
-      <param name="dst" type="GLuint"/>
-      <param name="dstMod" type="GLuint"/>
-      <param name="arg1" type="GLuint"/>
-      <param name="arg1Rep" type="GLuint"/>
-      <param name="arg1Mod" type="GLuint"/>
-      <glx ignore="true"/>
-    </function>
-
-    <function name="AlphaFragmentOp2ATI" offset="assign">
-      <param name="op" type="GLenum"/>
-      <param name="dst" type="GLuint"/>
-      <param name="dstMod" type="GLuint"/>
-      <param name="arg1" type="GLuint"/>
-      <param name="arg1Rep" type="GLuint"/>
-      <param name="arg1Mod" type="GLuint"/>
-      <param name="arg2" type="GLuint"/>
-      <param name="arg2Rep" type="GLuint"/>
-      <param name="arg2Mod" type="GLuint"/>
-      <glx ignore="true"/>
-    </function>
-
-    <function name="AlphaFragmentOp3ATI" offset="assign">
-      <param name="op" type="GLenum"/>
-      <param name="dst" type="GLuint"/>
-      <param name="dstMod" type="GLuint"/>
-      <param name="arg1" type="GLuint"/>
-      <param name="arg1Rep" type="GLuint"/>
-      <param name="arg1Mod" type="GLuint"/>
-      <param name="arg2" type="GLuint"/>
-      <param name="arg2Rep" type="GLuint"/>
-      <param name="arg2Mod" type="GLuint"/>
-      <param name="arg3" type="GLuint"/>
-      <param name="arg3Rep" type="GLuint"/>
-      <param name="arg3Mod" type="GLuint"/>
-      <glx ignore="true"/>
-    </function>
-
-    <function name="SetFragmentShaderConstantATI" offset="assign">
-      <param name="dst" type="GLuint"/>
-      <param name="value" type="const GLfloat *"/>
-      <glx ignore="true"/>
-    </function>
-</category>
-
-<!-- Extension number 250 is a WGL extension. -->
-<!-- Extension number 251 is a WGL extension. -->
-<!-- Extension number 252 is a WGL extension. -->
-<!-- Extension number 253 is a WGL extension. -->
-<!-- Extension number 254 is a WGL extension. -->
-<!-- Extension number 255 is a WGL extension. -->
-
-<category name="GL_SUN_mesh_array" number="257">
-    <enum name="QUAD_MESH_SUN"                            value="0x8614"/>
-    <enum name="TRIANGLE_MESH_SUN"                        value="0x8615"/>
-
-    <function name="DrawMeshArraysSUN">
-        <param name="mode" type="GLenum"/>
-        <param name="first" type="GLint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="width" type="GLsizei"/>
-    </function>
-</category>
-
-<category name="GL_SUN_slice_accum" number="258">
-    <enum name="SLICE_ACCUM_SUN"                          value="0x85CC"/>
-</category>
-
-<category name="GL_NV_multisample_filter_hint" number="259">
-    <enum name="MULTISAMPLE_FILTER_HINT_NV"    count="1"  value="0x8534">
-        <size name="Get" mode="get"/>
-    </enum>
-</category>
-
-<category name="GL_NV_depth_clamp" number="260">
-    <enum name="DEPTH_CLAMP_NV"                count="1"  value="0x864F">
-        <size name="Get" mode="get"/>
-    </enum>
-</category>
-
-<category name="GL_NV_point_sprite" number="262">
-    <!-- These existing enums can be passed as a parameter to the function
-         added for this extension. -->
-
-    <enum name="POINT_SIZE_MIN_EXT"            count="1"  value="0x8126">
-        <size name="PointParameterivNV"/>
-    </enum>
-    <enum name="POINT_SIZE_MAX_EXT"            count="1"  value="0x8127">
-        <size name="PointParameterivNV"/>
-    </enum>
-    <enum name="POINT_FADE_THRESHOLD_SIZE_EXT" count="1"  value="0x8128">
-        <size name="PointParameterivNV"/>
-    </enum>
-    <enum name="POINT_DISTANCE_ATTENUATION_EXT" count="3" value="0x8129">
-        <size name="PointParameterivNV"/>
-    </enum>
-
-    <enum name="POINT_SPRITE_NV"               count="1"  value="0x8861">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="COORD_REPLACE_NV"              count="1"  value="0x8862">
-        <size name="TexEnvfv"/>
-        <size name="TexEnviv"/>
-        <size name="GetTexEnvfv" mode="get"/>
-        <size name="GetTexEnviv" mode="get"/>
-    </enum>
-    <enum name="POINT_SPRITE_R_MODE_NV"        count="1"  value="0x8863">
-        <size name="PointParameterfvEXT"/>
-        <size name="PointParameterivNV"/>
-        <size name="Get" mode="get"/>
-    </enum>
-
-    <function name="PointParameteriNV" offset="assign">
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLint"/>
-        <glx rop="4221"/>
-    </function>
-
-    <function name="PointParameterivNV" offset="assign">
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLint *" variable_param="pname"/>
-        <glx rop="4222"/>
-    </function>
-</category>
-
-<!-- Extension number 263 is a WGL extension. -->
-<!-- Extension number 264 is a WGL extension. -->
-
-<category name="GL_EXT_shadow_funcs" number="267">
-    <!-- No new functions, types, enums. -->
-</category>
-
-<category name="GL_EXT_stencil_two_side" number="268">
-    <enum name="STENCIL_TEST_TWO_SIDE_EXT"     count="1"  value="0x8910">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="ACTIVE_STENCIL_FACE_EXT"       count="1"  value="0x8911">
-        <size name="Get" mode="get"/>
-    </enum>
-
-    <function name="ActiveStencilFaceEXT" offset="assign" static_dispatch="false">
-        <param name="face" type="GLenum"/>
-        <glx rop="4220"/>
-    </function>
-</category>
-
-<xi:include href="APPLE_vertex_array_object.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
-
-<category name="GL_APPLE_ycbcr_422" number="275">
-    <enum name="YCBCR_422_APPLE"                          value="0x85B9"/>
-    <enum name="UNSIGNED_SHORT_8_8_APPLE"                 value="0x85BA"/>
-    <enum name="UNSIGNED_SHORT_8_8_REV_APPLE"             value="0x85BB"/>
-</category>
-
-<category name="GL_S3_s3tc" number="276">
-    <enum name="RGB_S3TC"                                 value="0x83A0"/>
-    <enum name="RGB4_S3TC"                                value="0x83A1"/>
-    <enum name="RGBA_S3TC"                                value="0x83A2"/>
-    <enum name="RGBA4_S3TC"                               value="0x83A3"/>
-    <enum name="RGBA_DXT5_S3TC"                           value="0x83A4"/>
-    <enum name="RGBA4_DXT5_S3TC"                          value="0x83A5"/>
-</category>
-
-<category name="GL_ATI_draw_buffers" number="277">
-    <enum name="MAX_DRAW_BUFFERS_ATI"          count="1"  value="0x8824">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_BUFFER0_ATI"              count="1"  value="0x8825">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_BUFFER1_ATI"              count="1"  value="0x8826">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_BUFFER2_ATI"              count="1"  value="0x8827">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_BUFFER3_ATI"              count="1"  value="0x8828">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_BUFFER4_ATI"              count="1"  value="0x8829">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_BUFFER5_ATI"              count="1"  value="0x882A">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_BUFFER6_ATI"              count="1"  value="0x882B">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_BUFFER7_ATI"              count="1"  value="0x882C">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_BUFFER8_ATI"              count="1"  value="0x882D">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_BUFFER9_ATI"              count="1"  value="0x882E">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_BUFFER10_ATI"             count="1"  value="0x882F">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_BUFFER11_ATI"             count="1"  value="0x8830">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_BUFFER12_ATI"             count="1"  value="0x8831">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_BUFFER13_ATI"             count="1"  value="0x8832">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_BUFFER14_ATI"             count="1"  value="0x8833">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DRAW_BUFFER15_ATI"             count="1"  value="0x8834">
-        <size name="Get" mode="get"/>
-    </enum>
-
-    <function name="DrawBuffersATI" alias="DrawBuffersARB">
-        <param name="n" type="GLsizei" counter="true"/>
-        <param name="bufs" type="const GLenum *" count="n"/>
-    </function>
-</category>
-
-<!-- Extension number 278 is a WGL extension. -->
-
-<category name="GL_ATI_texture_env_combine3" number="279">
-    <enum name="MODULATE_ADD_ATI"                         value="0x8744"/>
-    <enum name="MODULATE_SIGNED_ADD_ATI"                  value="0x8745"/>
-    <enum name="MODULATE_SUBTRACT_ATI"                    value="0x8746"/>
-</category>
-
-<category name="GL_NV_fragment_program" number="282">
-    <function name="ProgramNamedParameter4fNV" offset="assign" vectorequiv="ProgramNamedParameter4fvNV">
-        <param name="id" type="GLuint"/>
-        <param name="len" type="GLsizei" counter="true"/>
-        <param name="name" type="const GLubyte *" count="len"/>
-        <param name="x" type="GLfloat"/>
-        <param name="y" type="GLfloat"/>
-        <param name="z" type="GLfloat"/>
-        <param name="w" type="GLfloat"/>
-    </function>
-
-    <function name="ProgramNamedParameter4dNV" offset="assign" vectorequiv="ProgramNamedParameter4dvNV">
-        <param name="id" type="GLuint"/>
-        <param name="len" type="GLsizei" counter="true"/>
-        <param name="name" type="const GLubyte *" count="len"/>
-        <param name="x" type="GLdouble"/>
-        <param name="y" type="GLdouble"/>
-        <param name="z" type="GLdouble"/>
-        <param name="w" type="GLdouble"/>
-    </function>
-
-    <function name="ProgramNamedParameter4fvNV" offset="assign">
-        <param name="id" type="GLuint"/>
-        <param name="len" type="GLsizei" counter="true"/>
-        <param name="name" type="const GLubyte *" count="len"/>
-        <param name="v" type="const GLfloat *" count="4"/>
-        <glx rop="4218"/>
-    </function>
-
-    <function name="ProgramNamedParameter4dvNV" offset="assign">
-        <param name="id" type="GLuint"/>
-        <param name="len" type="GLsizei" counter="true"/>
-        <param name="name" type="const GLubyte *" count="len"/>
-        <param name="v" type="const GLdouble *" count="4"/>
-        <glx rop="4219"/>
-    </function>
-
-    <function name="GetProgramNamedParameterfvNV" offset="assign">
-        <param name="id" type="GLuint"/>
-        <param name="len" type="GLsizei" counter="true"/>
-        <param name="name" type="const GLubyte *" count="len"/>
-        <param name="params" type="GLfloat *" output="true" count="4"/>
-        <glx vendorpriv="1310" always_array="true"/>
-    </function>
-
-    <function name="GetProgramNamedParameterdvNV" offset="assign">
-        <param name="id" type="GLuint"/>
-        <param name="len" type="GLsizei" counter="true"/>
-        <param name="name" type="const GLubyte *" count="len"/>
-        <param name="params" type="GLdouble *" output="true" count="4"/>
-        <glx vendorpriv="1311" always_array="true"/>
-    </function>
-</category>
-
-<category name="GL_NV_texture_expand_normal" number="286">
-    <enum name="TEXTURE_UNSIGNED_REMAP_MODE_NV" count="1" value="0x888F">
-        <size name="TexParameterfv"/>
-        <size name="TexParameteriv"/>
-        <size name="GetTexParameterfv" mode="get"/>
-        <size name="GetTexParameteriv" mode="get"/>
-    </enum>
-</category>
-
-<category name="GL_OES_compressed_paletted_texture" number="294">
-    <enum name="PALETTE4_RGB8_OES"                        value="0x8B90"/>
-    <enum name="PALETTE4_RGBA8_OES"                       value="0x8B91"/>
-    <enum name="PALETTE4_R5_G6_B5_OES"                    value="0x8B92"/>
-    <enum name="PALETTE4_RGBA4_OES"                       value="0x8B93"/>
-    <enum name="PALETTE4_RGB5_A1_OES"                     value="0x8B94"/>
-    <enum name="PALETTE8_RGB8_OES"                        value="0x8B95"/>
-    <enum name="PALETTE8_RGBA8_OES"                       value="0x8B96"/>
-    <enum name="PALETTE8_R5_G6_B5_OES"                    value="0x8B97"/>
-    <enum name="PALETTE8_RGBA4_OES"                       value="0x8B98"/>
-    <enum name="PALETTE8_RGB5_A1_OES"                     value="0x8B99"/>
-</category>
-
-<category name="GL_OES_read_format" number="295">
-    <enum name="IMPLEMENTATION_COLOR_READ_TYPE_OES"       value="0x8B9A"/>
-    <enum name="IMPLEMENTATION_COLOR_READ_FORMAT_OES"     value="0x8B9B"/>
-</category>
-
-<category name="GL_EXT_depth_bounds_test" number="297">
-    <enum name="DEPTH_BOUNDS_TEST_EXT"         count="1"  value="0x8890">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="DEPTH_BOUNDS_EXT"              count="2"  value="0x8891">
-        <size name="Get" mode="get"/>
-    </enum>
-
-    <function name="DepthBoundsEXT" offset="assign" static_dispatch="false">
-        <param name="zmin" type="GLclampd"/>
-        <param name="zmax" type="GLclampd"/>
-        <glx rop="4229" ignore="true"/>
-    </function>
-</category>
-
-<category name="GL_EXT_texture_mirror_clamp" number="298">
-    <enum name="MIRROR_CLAMP_EXT"                         value="0x8742"/>
-    <enum name="MIRROR_CLAMP_TO_EDGE_EXT"                 value="0x8743"/>
-    <enum name="MIRROR_CLAMP_TO_BORDER_EXT"               value="0x8912"/>
-</category>
-
-<category name="GL_EXT_blend_equation_separate" number="299">
-    <enum name="BLEND_EQUATION_RGB_EXT"        count="1"  value="0x8009">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="BLEND_EQUATION_ALPHA_EXT"      count="1"  value="0x883D">
-        <size name="Get" mode="get"/>
-    </enum>
-
-    <function name="BlendEquationSeparateEXT" offset="assign" static_dispatch="false">
-        <param name="modeRGB" type="GLenum"/>
-        <param name="modeA" type="GLenum"/>
-        <glx rop="4228"/>
-    </function>
-</category>
-
-<category name="GL_MESA_pack_invert" number="300">
-    <enum name="PACK_INVERT_MESA"              count="1"  value="0x8758">
-        <size name="Get" mode="get"/>
-    </enum>
-</category>
-
-<category name="GL_MESA_ycbcr_texture" number="301">
-    <enum name="YCBCR_MESA"                               value="0x8757"/>
-    <enum name="UNSIGNED_SHORT_8_8_MESA"                  value="0x85BA"/>
-    <enum name="UNSIGNED_SHORT_8_8_REV_MESA"              value="0x85BB"/>
-</category>
-
-<category name="GL_EXT_pixel_buffer_object" number="302">
-    <enum name="PIXEL_PACK_BUFFER_EXT"                    value="0x88EB"/>
-    <enum name="PIXEL_UNPACK_BUFFER_EXT"                  value="0x88EC"/>
-    <enum name="PIXEL_PACK_BUFFER_BINDING_EXT"            value="0x88ED"/>
-    <enum name="PIXEL_UNPACK_BUFFER_BINDING_EXT"          value="0x88EF"/>
-</category>
-
-<category name="GL_NV_fragment_program_option" number="303">
-    <!-- No new functions, types, enums. -->
-</category>
-
-<category name="GL_NV_fragment_program2" number="304">
-    <enum name="MAX_PROGRAM_EXEC_INSTRUCTIONS_NV" count="1" value="0x88F4">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="MAX_PROGRAM_CALL_DEPTH_NV"      count="1"  value="0x88F5">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="MAX_PROGRAM_IF_DEPTH_NV"        count="1"  value="0x88F6">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="MAX_PROGRAM_LOOP_DEPTH_NV"      count="1"  value="0x88F7">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="MAX_PROGRAM_LOOP_COUNT_NV"      count="1"  value="0x88F8">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-</category>
-
-<category name="GL_NV_vertex_program2_option" number="305">
-    <enum name="MAX_PROGRAM_EXEC_INSTRUCTIONS_NV" count="1" value="0x88F4">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-    <enum name="MAX_PROGRAM_CALL_DEPTH_NV"      count="1"  value="0x88F5">
-        <size name="GetProgramivARB" mode="get"/>
-    </enum>
-</category>
-
-<category name="GL_NV_vertex_program3" number="306">
-    <enum name="MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB" count="1" value="0x8B4C"/>
-</category>
-
-<!-- Extension number 307 is a GLX extension. -->
-<!-- Extension number 308 is a GLX extension. -->
-
-<category name="GL_EXT_texture_compression_dxt1" number="309">
-    <enum name="COMPRESSED_RGB_S3TC_DXT1_EXT"             value="0x83F0"/>
-    <enum name="COMPRESSED_RGBA_S3TC_DXT1_EXT"            value="0x83F1"/>
-</category>
-
-<xi:include href="EXT_framebuffer_object.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
-
-<xi:include href="EXT_packed_depth_stencil.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
-
-<xi:include href="EXT_provoking_vertex.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
-
-<xi:include href="EXT_draw_buffers2.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
-
-
-<category name="GL_APPLE_flush_buffer_range" number="321">
-    <enum name="BUFFER_SERIALIZED_MODIFY_APPLE" count="1" value="0x8A12">
-        <size name="GetBufferParameteriv" mode="get"/>
-    </enum>
-    <enum name="BUFFER_FLUSHING_UNMAP_APPLE" count="1" value="0x8A13">
-        <size name="GetBufferParameteriv" mode="get"/>
-    </enum>
-    <function name="BufferParameteriAPPLE" offset="assign" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLint"/>
-    </function>
-    <function name="FlushMappedBufferRangeAPPLE" offset="assign" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="offset" type="GLintptr"/>
-        <param name="size" type="GLsizeiptr"/>
-    </function>
-</category>
-
-<xi:include href="EXT_texture_array.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
-
-<category name="GL_APPLE_texture_range" number="367">
-    <enum name="TEXTURE_STORAGE_HINT_APPLE" count="1" value="0x85BC">
-        <size name="TexParameteriv"/>
-        <size name="TexParameterfv"/>
-        <size name="GetTexParameteriv" mode="get"/>
-        <size name="GetTexParameterfv" mode="get"/>
-    </enum>
-    <enum name="STORAGE_PRIVATE_APPLE" count="1" value="0x85BD">
-        <size name="TexParameteriv"/>
-        <size name="TexParameterfv"/>
-    </enum>
-    <enum name="STORAGE_CACHED_APPLE" count="1" value="0x85BE">
-        <size name="TexParameteriv"/>
-        <size name="TexParameterfv"/>
-    </enum>
-    <enum name="STORAGE_SHARED_APPLE" count="1" value="0x85BF">
-        <size name="TexParameteriv"/>
-        <size name="TexParameterfv"/>
-    </enum>
-    <enum name="TEXTURE_RANGE_LENGTH_APPLE" count="1" value="0x85B7">
-        <size name="GetTexParameteriv" mode="get"/>
-        <size name="GetTexParameterfv" mode="get"/>
-    </enum>
-    <enum name="TEXTURE_RANGE_POINTER_APPLE" count="1" value="0x85B8">
-        <size name="GetTexParameterPointervAPPLE" mode="get"/>
-    </enum>
-    <function name="TextureRangeAPPLE" offset="assign" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="length" type="GLsizei"/>
-        <param name="pointer" type="GLvoid *"/>
-    </function>
-    <function name="GetTexParameterPointervAPPLE" offset="assign" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLvoid **"/>
-    </function>
-</category>
-
-<!-- Unnumbered extensions sorted by name. -->
-
-<category name="GL_ATI_blend_equation_separate">
-    <function name="BlendEquationSeparateATI" alias="BlendEquationSeparateEXT" static_dispatch="false">
-        <param name="modeRGB" type="GLenum"/>
-        <param name="modeA" type="GLenum"/>
-    </function>
-</category>
-
-<category name="GL_ATI_separate_stencil">
-    <enum name="STENCIL_BACK_FUNC_ATI"     count="1"  value="0x8800">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="STENCIL_BACK_FAIL_ATI"     count="1"  value="0x8801">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="STENCIL_BACK_PASS_DEPTH_FAIL_ATI" count="1"  value="0x8802">
-        <size name="Get" mode="get"/>
-    </enum>
-    <enum name="STENCIL_BACK_PASS_DEPTH_PASS_ATI" count="1"  value="0x8803">
-        <size name="Get" mode="get"/>
-    </enum>
-
-    <function name="StencilOpSeparateATI" alias="StencilOpSeparate" static_dispatch="false">
-        <param name="face" type="GLenum"/>
-        <param name="sfail" type="GLenum"/>
-        <param name="zfail" type="GLenum"/>
-        <param name="zpass" type="GLenum"/>
-    </function>
-    <function name="StencilFuncSeparateATI" offset="assign" static_dispatch="false">
-        <param name="frontfunc" type="GLenum"/>
-        <param name="backfunc" type="GLenum"/>
-        <param name="ref" type="GLint"/>
-        <param name="mask" type="GLuint"/>
-    </function>
-
-</category>
-
-<category name="GL_EXT_gpu_program_parameters">
-    <function name="ProgramEnvParameters4fvEXT" offset="assign" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="index" type="GLuint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="params" type="const GLfloat *"/>
-    </function>
-
-    <function name="ProgramLocalParameters4fvEXT" offset="assign" static_dispatch="false">
-        <param name="target" type="GLenum"/>
-        <param name="index" type="GLuint"/>
-        <param name="count" type="GLsizei"/>
-        <param name="params" type="const GLfloat *"/>
-    </function>
-</category>
-
-<category name="GL_EXT_timer_query">
-    <enum name="TIME_ELAPSED_EXT" value="0x88BF"/>
-    <type name="int64EXT"                  size="8"/>
-    <type name="uint64EXT" unsigned="true" size="8"/>
-    <function name="GetQueryObjecti64vEXT" offset="assign" static_dispatch="false">
-        <param name="id" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLint64EXT *"/>
-    </function>
-    <function name="GetQueryObjectui64vEXT" offset="assign" static_dispatch="false">
-        <param name="id" type="GLuint"/>
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="GLuint64EXT *"/>
-    </function>
-</category>
-
-<category name="GL_INGR_blend_func_separate">
-    <function name="BlendFuncSeparateINGR" alias="BlendFuncSeparateEXT" static_dispatch="false">
-        <param name="sfactorRGB" type="GLenum"/>
-        <param name="dfactorRGB" type="GLenum"/>
-        <param name="sfactorAlpha" type="GLenum"/>
-        <param name="dfactorAlpha" type="GLenum"/>
-    </function>
-</category>
-
-<category name="GL_MESA_texture_signed_rgba">
-    <enum name="SIGNED_NORMALIZED"                        value="0x8F9C"/>
-    <enum name="RGBA_SNORM"                               value="0x8F93"/>
-    <enum name="RGBA8_SNORM"                              value="0x8F97"/>
-</category>
-
-<category name="GL_MESA_shader_debug">
-    <enum name="DEBUG_OBJECT_MESA"                        value="0x8759"/>
-    <enum name="DEBUG_PRINT_MESA"                         value="0x875A"/>
-    <enum name="DEBUG_ASSERT_MESA"                        value="0x875B"/>
-    <function name="CreateDebugObjectMESA">
-        <return type="GLhandleARB"/>
-        <glx ignore="true"/>
-    </function>
-    <function name="ClearDebugLogMESA">
-        <param name="obj" type="GLhandleARB"/>
-        <param name="logType" type="GLenum"/>
-        <param name="shaderType" type="GLenum"/>
-        <glx ignore="true"/>
-    </function>
-    <function name="GetDebugLogMESA">
-        <param name="obj" type="GLhandleARB"/>
-        <param name="logType" type="GLenum"/>
-        <param name="shaderType" type="GLenum"/>
-        <param name="maxLength" type="GLsizei"/>
-        <param name="length" type="GLsizei *" output="true"/>
-        <param name="debugLog" type="GLcharARB *" output="true"/>
-        <glx ignore="true"/>
-    </function>
-    <function name="GetDebugLogLengthMESA">
-        <return type="GLsizei"/>
-        <param name="obj" type="GLhandleARB"/>
-        <param name="logType" type="GLenum"/>
-        <param name="shaderType" type="GLenum"/>
-        <glx ignore="true"/>
-    </function>
-</category>
-
-<category name="GL_SGIS_point_parameters">
-    <enum name="POINT_SIZE_MIN_SGIS"           count="1"  value="0x8126">
-        <size name="PointParameterfvEXT"/>
-    </enum>
-    <enum name="POINT_SIZE_MAX_SGIS"           count="1"  value="0x8127">
-        <size name="PointParameterfvEXT"/>
-    </enum>
-    <enum name="POINT_FADE_THRESHOLD_SIZE_SGIS" count="1" value="0x8128">
-        <size name="PointParameterfvEXT"/>
-    </enum>
-    <enum name="POINT_DISTANCE_ATTENUATION_SGIS" count="3" value="0x8129">
-        <size name="PointParameterfvEXT"/>
-    </enum>
-
-    <function name="PointParameterfSGIS" alias="PointParameterfEXT" static_dispatch="false">
-        <param name="pname" type="GLenum"/>
-        <param name="param" type="GLfloat"/>
-    </function>
-
-    <function name="PointParameterfvSGIS" alias="PointParameterfvEXT" static_dispatch="false">
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLfloat *"/>
-    </function>
-</category>
-
-<category name="GL_SGIX_igloo_interface">
-    <function name="IglooInterfaceSGIX">
-        <param name="pname" type="GLenum"/>
-        <param name="params" type="const GLvoid *"/>
-    </function>
-</category>
-
-<category name="GL_SGIX_polynomial_ffd">
-    <function name="DeformationMap3dSGIX">
-        <param name="target" type="GLenum"/>
-        <param name="u1" type="GLdouble"/>
-        <param name="u2" type="GLdouble"/>
-        <param name="ustride" type="GLint"/>
-        <param name="uorder" type="GLint"/>
-        <param name="v1" type="GLdouble"/>
-        <param name="v2" type="GLdouble"/>
-        <param name="vstride" type="GLint"/>
-        <param name="vorder" type="GLint"/>
-        <param name="w1" type="GLdouble"/>
-        <param name="w2" type="GLdouble"/>
-        <param name="wstride" type="GLint"/>
-        <param name="worder" type="GLint"/>
-        <param name="points" type="const GLdouble *"/>
-    </function>
-
-    <function name="DeformationMap3fSGIX">
-        <param name="target" type="GLenum"/>
-        <param name="u1" type="GLfloat"/>
-        <param name="u2" type="GLfloat"/>
-        <param name="ustride" type="GLint"/>
-        <param name="uorder" type="GLint"/>
-        <param name="v1" type="GLfloat"/>
-        <param name="v2" type="GLfloat"/>
-        <param name="vstride" type="GLint"/>
-        <param name="vorder" type="GLint"/>
-        <param name="w1" type="GLfloat"/>
-        <param name="w2" type="GLfloat"/>
-        <param name="wstride" type="GLint"/>
-        <param name="worder" type="GLint"/>
-        <param name="points" type="const GLfloat *"/>
-    </function>
-
-    <function name="DeformSGIX">
-        <param name="mask" type="GLenum"/>
-    </function>
-
-    <function name="LoadIdentityDeformationMapSGIX">
-        <param name="mask" type="GLenum"/>
-    </function>
-</category>
-
-</OpenGLAPI>
diff --git a/src/mesa/glapi/gl_SPARC_asm.py b/src/mesa/glapi/gl_SPARC_asm.py
deleted file mode 100644
index 33e752df38..0000000000
--- a/src/mesa/glapi/gl_SPARC_asm.py
+++ /dev/null
@@ -1,275 +0,0 @@
-#!/usr/bin/env python
-
-# (C) Copyright IBM Corporation 2004
-# All Rights Reserved.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# on the rights to use, copy, modify, merge, publish, distribute, sub
-# license, and/or sell copies of the Software, and to permit persons to whom
-# the Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
-# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-#
-# Authors:
-#    Ian Romanick <idr@us.ibm.com>
-
-import license
-import gl_XML, glX_XML
-import sys, getopt
-
-class PrintGenericStubs(gl_XML.gl_print_base):
-	def __init__(self):
-		gl_XML.gl_print_base.__init__(self)
-		self.name = "gl_SPARC_asm.py (from Mesa)"
-		self.license = license.bsd_license_template % ( \
-"""Copyright (C) 1999-2003  Brian Paul   All Rights Reserved.
-(C) Copyright IBM Corporation 2004""", "BRIAN PAUL, IBM")
-
-
-	def printRealHeader(self):
-		print '#include "glapi/glapioffsets.h"'
-		print ''
-		print '#ifdef __arch64__'
-		print '#define GL_OFF(N)\t((N) * 8)'
-		print '#define GL_LL\t\tldx'
-		print '#define GL_TIE_LD(SYM)\t%tie_ldx(SYM)'
-		print '#define GL_STACK_SIZE\t128'
-		print '#else'
-		print '#define GL_OFF(N)\t((N) * 4)'
-		print '#define GL_LL\t\tld'
-		print '#define GL_TIE_LD(SYM)\t%tie_ld(SYM)'
-		print '#define GL_STACK_SIZE\t64'
-		print '#endif'
-		print ''
-		print '#define GLOBL_FN(x) .globl x ; .type x, @function'
-		print '#define HIDDEN(x) .hidden x'
-		print ''
-		print '\t.register %g2, #scratch'
-		print '\t.register %g3, #scratch'
-		print ''
-		print '\t.text'
-		print ''
-		print '\tGLOBL_FN(__glapi_sparc_icache_flush)'
-		print '\tHIDDEN(__glapi_sparc_icache_flush)'
-		print '\t.type\t__glapi_sparc_icache_flush, @function'
-		print '__glapi_sparc_icache_flush: /* %o0 = insn_addr */'
-		print '\tflush\t%o0'
-		print '\tretl'
-		print '\t nop'
-		print ''
-		print '\t.align\t32'
-		print ''
-		print '\t.type\t__glapi_sparc_get_pc, @function'
-		print '__glapi_sparc_get_pc:'
-		print '\tretl'
-		print '\t add\t%o7, %g2, %g2'
-		print '\t.size\t__glapi_sparc_get_pc, .-__glapi_sparc_get_pc'
-		print ''
-		print '#ifdef GLX_USE_TLS'
-		print ''
-		print '\tGLOBL_FN(__glapi_sparc_get_dispatch)'
-		print '\tHIDDEN(__glapi_sparc_get_dispatch)'
-		print '__glapi_sparc_get_dispatch:'
-		print '\tmov\t%o7, %g1'
-		print '\tsethi\t%hi(_GLOBAL_OFFSET_TABLE_-4), %g2'
-		print '\tcall\t__glapi_sparc_get_pc'
-		print '\tadd\t%g2, %lo(_GLOBAL_OFFSET_TABLE_+4), %g2'
-		print '\tmov\t%g1, %o7'
-		print '\tsethi\t%tie_hi22(_glapi_tls_Dispatch), %g1'
-		print '\tadd\t%g1, %tie_lo10(_glapi_tls_Dispatch), %g1'
-		print '\tGL_LL\t[%g2 + %g1], %g2, GL_TIE_LD(_glapi_tls_Dispatch)'
-		print '\tretl'
-		print '\t mov\t%g2, %o0'
-		print ''
-		print '\t.data'
-		print '\t.align\t32'
-		print ''
-		print '\t/* --> sethi %hi(_glapi_tls_Dispatch), %g1 */'
-		print '\t/* --> or %g1, %lo(_glapi_tls_Dispatch), %g1 */'
-		print '\tGLOBL_FN(__glapi_sparc_tls_stub)'
-		print '\tHIDDEN(__glapi_sparc_tls_stub)'
-		print '__glapi_sparc_tls_stub: /* Call offset in %g3 */'
-		print '\tmov\t%o7, %g1'
-		print '\tsethi\t%hi(_GLOBAL_OFFSET_TABLE_-4), %g2'
-		print '\tcall\t__glapi_sparc_get_pc'
-		print '\tadd\t%g2, %lo(_GLOBAL_OFFSET_TABLE_+4), %g2'
-		print '\tmov\t%g1, %o7'
-		print '\tsrl\t%g3, 10, %g3'
-		print '\tsethi\t%tie_hi22(_glapi_tls_Dispatch), %g1'
-		print '\tadd\t%g1, %tie_lo10(_glapi_tls_Dispatch), %g1'
-		print '\tGL_LL\t[%g2 + %g1], %g2, GL_TIE_LD(_glapi_tls_Dispatch)'
-		print '\tGL_LL\t[%g7+%g2], %g1'
-		print '\tGL_LL\t[%g1 + %g3], %g1'
-		print '\tjmp\t%g1'
-		print '\t nop'
-		print '\t.size\t__glapi_sparc_tls_stub, .-__glapi_sparc_tls_stub'
-		print ''
-		print '#define GL_STUB(fn, off)\t\t\t\t\\'
-		print '\tGLOBL_FN(fn);\t\t\t\t\t\\'
-		print 'fn:\tba\t__glapi_sparc_tls_stub;\t\t\t\\'
-		print '\t sethi\tGL_OFF(off), %g3;\t\t\t\\'
-		print '\t.size\tfn,.-fn;'
-		print ''
-		print '#elif defined(PTHREADS)'
-		print ''
-		print '\t/* 64-bit 0x00 --> sethi %hh(_glapi_Dispatch), %g1 */'
-		print '\t/* 64-bit 0x04 --> sethi %lm(_glapi_Dispatch), %g2 */'
-		print '\t/* 64-bit 0x08 --> or %g1, %hm(_glapi_Dispatch), %g1 */'
-		print '\t/* 64-bit 0x0c --> sllx %g1, 32, %g1 */'
-		print '\t/* 64-bit 0x10 --> add %g1, %g2, %g1 */'
-		print '\t/* 64-bit 0x14 --> ldx [%g1 + %lo(_glapi_Dispatch)], %g1 */'
-		print ''
-		print '\t/* 32-bit 0x00 --> sethi %hi(_glapi_Dispatch), %g1 */'
-		print '\t/* 32-bit 0x04 --> ld [%g1 + %lo(_glapi_Dispatch)], %g1 */'
-		print ''
-		print '\t.data'
-		print '\t.align\t32'
-		print ''
-		print '\tGLOBL_FN(__glapi_sparc_pthread_stub)'
-		print '\tHIDDEN(__glapi_sparc_pthread_stub)'
-		print '__glapi_sparc_pthread_stub: /* Call offset in %g3 */'
-		print '\tmov\t%o7, %g1'
-		print '\tsethi\t%hi(_GLOBAL_OFFSET_TABLE_-4), %g2'
-		print '\tcall\t__glapi_sparc_get_pc'
-		print '\t add\t%g2, %lo(_GLOBAL_OFFSET_TABLE_+4), %g2'
-		print '\tmov\t%g1, %o7'
-		print '\tsethi\t%hi(_glapi_Dispatch), %g1'
-		print '\tor\t%g1, %lo(_glapi_Dispatch), %g1'
-		print '\tsrl\t%g3, 10, %g3'
-		print '\tGL_LL\t[%g2+%g1], %g2'
-		print '\tGL_LL\t[%g2], %g1'
-		print '\tcmp\t%g1, 0'
-		print '\tbe\t2f'
-		print '\t nop'
-		print '1:\tGL_LL\t[%g1 + %g3], %g1'
-		print '\tjmp\t%g1'
-		print '\t nop'
-		print '2:\tsave\t%sp, GL_STACK_SIZE, %sp'
-		print '\tmov\t%g3, %l0'
-		print '\tcall\t_glapi_get_dispatch'
-		print '\t nop'
-		print '\tmov\t%o0, %g1'
-		print '\tmov\t%l0, %g3'
-		print '\tba\t1b'
-		print '\t restore %g0, %g0, %g0'
-		print '\t.size\t__glapi_sparc_pthread_stub, .-__glapi_sparc_pthread_stub'
-		print ''
-		print '#define GL_STUB(fn, off)\t\t\t\\'
-		print '\tGLOBL_FN(fn);\t\t\t\t\\'
-		print 'fn:\tba\t__glapi_sparc_pthread_stub;\t\\'
-		print '\t sethi\tGL_OFF(off), %g3;\t\t\\'
-		print '\t.size\tfn,.-fn;'
-		print ''
-		print '#else /* Non-threaded version. */'
-		print ''
-		print '\t.type	__glapi_sparc_nothread_stub, @function'
-		print '__glapi_sparc_nothread_stub: /* Call offset in %g3 */'
-		print '\tmov\t%o7, %g1'
-		print '\tsethi\t%hi(_GLOBAL_OFFSET_TABLE_-4), %g2'
-		print '\tcall\t__glapi_sparc_get_pc'
-		print '\t add\t%g2, %lo(_GLOBAL_OFFSET_TABLE_+4), %g2'
-		print '\tmov\t%g1, %o7'
-		print '\tsrl\t%g3, 10, %g3'
-		print '\tsethi\t%hi(_glapi_Dispatch), %g1'
-		print '\tor\t%g1, %lo(_glapi_Dispatch), %g1'
-		print '\tGL_LL\t[%g2+%g1], %g2'
-		print '\tGL_LL\t[%g2], %g1'
-		print '\tGL_LL\t[%g1 + %g3], %g1'
-		print '\tjmp\t%g1'
-		print '\t nop'
-		print '\t.size\t__glapi_sparc_nothread_stub, .-__glapi_sparc_nothread_stub'
-		print ''
-		print '#define GL_STUB(fn, off)\t\t\t\\'
-		print '\tGLOBL_FN(fn);\t\t\t\t\\'
-		print 'fn:\tba\t__glapi_sparc_nothread_stub;\t\\'
-		print '\t sethi\tGL_OFF(off), %g3;\t\t\\'
-		print '\t.size\tfn,.-fn;'
-		print ''
-		print '#endif'
-		print ''
-		print '#define GL_STUB_ALIAS(fn, alias)		\\'
-		print '	.globl	fn;				\\'
-		print '	.set	fn, alias'
-		print ''
-		print '\t.text'
-		print '\t.align\t32'
-		print ''
-		print '\t.globl\tgl_dispatch_functions_start'
-		print '\tHIDDEN(gl_dispatch_functions_start)'
-		print 'gl_dispatch_functions_start:'
-		print ''
-		return
-
-	def printRealFooter(self):
-		print ''
-		print '\t.globl\tgl_dispatch_functions_end'
-		print '\tHIDDEN(gl_dispatch_functions_end)'
-		print 'gl_dispatch_functions_end:'
-		return
-
-	def printBody(self, api):
-		for f in api.functionIterateByOffset():
-			name = f.dispatch_name()
-
-			print '\tGL_STUB(gl%s, _gloffset_%s)' % (name, f.name)
-
-			if not f.is_static_entry_point(f.name):
-				print '\tHIDDEN(gl%s)' % (name)
-
-		for f in api.functionIterateByOffset():
-			name = f.dispatch_name()
-
-			if f.is_static_entry_point(f.name):
-				for n in f.entry_points:
-					if n != f.name:
-						text = '\tGL_STUB_ALIAS(gl%s, gl%s)' % (n, f.name)
-
-						if f.has_different_protocol(n):
-							print '#ifndef GLX_INDIRECT_RENDERING'
-							print text
-							print '#endif'
-						else:
-							print text
-
-		return
-
-
-def show_usage():
-	print "Usage: %s [-f input_file_name] [-m output_mode]" % sys.argv[0]
-	sys.exit(1)
-
-if __name__ == '__main__':
-	file_name = "gl_API.xml"
-	mode = "generic"
-
-	try:
-		(args, trail) = getopt.getopt(sys.argv[1:], "m:f:")
-	except Exception,e:
-		show_usage()
-
-	for (arg,val) in args:
-		if arg == '-m':
-			mode = val
-		elif arg == "-f":
-			file_name = val
-
-	if mode == "generic":
-		printer = PrintGenericStubs()
-	else:
-		print "ERROR: Invalid mode \"%s\" specified." % mode
-		show_usage()
-
-	api = gl_XML.parse_GL_API(file_name, glX_XML.glx_item_factory())
-	printer.Print(api)
diff --git a/src/mesa/glapi/gl_XML.py b/src/mesa/glapi/gl_XML.py
deleted file mode 100644
index a10a35e513..0000000000
--- a/src/mesa/glapi/gl_XML.py
+++ /dev/null
@@ -1,967 +0,0 @@
-#!/usr/bin/env python
-
-# (C) Copyright IBM Corporation 2004, 2005
-# All Rights Reserved.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# on the rights to use, copy, modify, merge, publish, distribute, sub
-# license, and/or sell copies of the Software, and to permit persons to whom
-# the Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
-# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-#
-# Authors:
-#    Ian Romanick <idr@us.ibm.com>
-
-import libxml2
-import re, sys, string
-import typeexpr
-
-
-def parse_GL_API( file_name, factory = None ):
-	doc = libxml2.readFile( file_name, None, libxml2.XML_PARSE_XINCLUDE + libxml2.XML_PARSE_NOBLANKS + libxml2.XML_PARSE_DTDVALID + libxml2.XML_PARSE_DTDATTR + libxml2.XML_PARSE_DTDLOAD + libxml2.XML_PARSE_NOENT )
-	ret = doc.xincludeProcess()
-
-	if not factory:
-		factory = gl_item_factory()
-
-	api = factory.create_item( "api", None, None )
-	api.process_element( doc )
-
-	# After the XML has been processed, we need to go back and assign
-	# dispatch offsets to the functions that request that their offsets
-	# be assigned by the scripts.  Typically this means all functions
-	# that are not part of the ABI.
-
-	for func in api.functionIterateByCategory():
-		if func.assign_offset:
-			func.offset = api.next_offset;
-			api.next_offset += 1
-
-	doc.freeDoc()
-
-	return api
-
-
-def is_attr_true( element, name ):
-	"""Read a name value from an element's attributes.
-	
-	The value read from the attribute list must be either 'true' or
-	'false'.  If the value is 'false', zero will be returned.  If the
-	value is 'true', non-zero will be returned.  An exception will be
-	raised for any other value."""
-
-	value = element.nsProp( name, None )
-	if value == "true":
-		return 1
-	elif value == "false":
-		return 0
-	else:
-		raise RuntimeError('Invalid value "%s" for boolean "%s".' % (value, name))
-
-
-class gl_print_base:
-	"""Base class of all API pretty-printers.
-
-	In the model-view-controller pattern, this is the view.  Any derived
-	class will want to over-ride the printBody, printRealHader, and
-	printRealFooter methods.  Some derived classes may want to over-ride
-	printHeader and printFooter, or even Print (though this is unlikely).
-	"""
-
-	def __init__(self):
-		# Name of the script that is generating the output file.
-		# Every derived class should set this to the name of its
-		# source file.
-
-		self.name = "a"
-
-
-		# License on the *generated* source file.  This may differ
-		# from the license on the script that is generating the file.
-		# Every derived class should set this to some reasonable
-		# value.
-		#
-		# See license.py for an example of a reasonable value.
-
-		self.license = "The license for this file is unspecified."
-
-		
-		# The header_tag is the name of the C preprocessor define
-		# used to prevent multiple inclusion.  Typically only
-		# generated C header files need this to be set.  Setting it
-		# causes code to be generated automatically in printHeader
-		# and printFooter.
-
-		self.header_tag = None
-
-		
-		# List of file-private defines that must be undefined at the
-		# end of the file.  This can be used in header files to define
-		# names for use in the file, then undefine them at the end of
-		# the header file.
-
-		self.undef_list = []
-		return
-
-
-	def Print(self, api):
-		self.printHeader()
-		self.printBody(api)
-		self.printFooter()
-		return
-
-
-	def printHeader(self):
-		"""Print the header associated with all files and call the printRealHeader method."""
-
-		print '/* DO NOT EDIT - This file generated automatically by %s script */' \
-			% (self.name)
-		print ''
-		print '/*'
-		print ' * ' + self.license.replace('\n', '\n * ')
-		print ' */'
-		print ''
-		if self.header_tag:
-		    print '#if !defined( %s )' % (self.header_tag)
-		    print '#  define %s' % (self.header_tag)
-		    print ''
-		self.printRealHeader();
-		return
-
-
-	def printFooter(self):
-		"""Print the header associated with all files and call the printRealFooter method."""
-
-		self.printRealFooter()
-
-		if self.undef_list:
-			print ''
-			for u in self.undef_list:
-				print "#  undef %s" % (u)
-
-		if self.header_tag:
-			print ''
-			print '#endif /* !defined( %s ) */' % (self.header_tag)
-
-
-	def printRealHeader(self):
-		"""Print the "real" header for the created file.
-
-		In the base class, this function is empty.  All derived
-		classes should over-ride this function."""
-		return
-
-
-	def printRealFooter(self):
-		"""Print the "real" footer for the created file.
-
-		In the base class, this function is empty.  All derived
-		classes should over-ride this function."""
-		return
-
-
-	def printPure(self):
-		"""Conditionally define `PURE' function attribute.
-
-		Conditionally defines a preprocessor macro `PURE' that wraps
-		GCC's `pure' function attribute.  The conditional code can be
-		easilly adapted to other compilers that support a similar
-		feature.
-
-		The name is also added to the file's undef_list.
-		"""
-		self.undef_list.append("PURE")
-		print """#  if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
-#    define PURE __attribute__((pure))
-#  else
-#    define PURE
-#  endif"""
-		return
-
-
-	def printFastcall(self):
-		"""Conditionally define `FASTCALL' function attribute.
-
-		Conditionally defines a preprocessor macro `FASTCALL' that
-		wraps GCC's `fastcall' function attribute.  The conditional
-		code can be easilly adapted to other compilers that support a
-		similar feature.
-
-		The name is also added to the file's undef_list.
-		"""
-
-		self.undef_list.append("FASTCALL")
-		print """#  if defined(__i386__) && defined(__GNUC__) && !defined(__CYGWIN__) && !defined(__MINGW32__)
-#    define FASTCALL __attribute__((fastcall))
-#  else
-#    define FASTCALL
-#  endif"""
-		return
-
-
-	def printVisibility(self, S, s):
-		"""Conditionally define visibility function attribute.
-
-		Conditionally defines a preprocessor macro name S that wraps
-		GCC's visibility function attribute.  The visibility used is
-		the parameter s.  The conditional code can be easilly adapted
-		to other compilers that support a similar feature.
-
-		The name is also added to the file's undef_list.
-		"""
-
-		self.undef_list.append(S)
-		print """#  if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))) && defined(__ELF__)
-#    define %s  __attribute__((visibility("%s")))
-#  else
-#    define %s
-#  endif""" % (S, s, S)
-		return
-
-
-	def printNoinline(self):
-		"""Conditionally define `NOINLINE' function attribute.
-
-		Conditionally defines a preprocessor macro `NOINLINE' that
-		wraps GCC's `noinline' function attribute.  The conditional
-		code can be easilly adapted to other compilers that support a
-		similar feature.
-
-		The name is also added to the file's undef_list.
-		"""
-
-		self.undef_list.append("NOINLINE")
-		print """#  if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
-#    define NOINLINE __attribute__((noinline))
-#  else
-#    define NOINLINE
-#  endif"""
-		return
-
-
-def real_function_name(element):
-	name = element.nsProp( "name", None )
-	alias = element.nsProp( "alias", None )
-	
-	if alias:
-		return alias
-	else:
-		return name
-
-
-def real_category_name(c):
-	if re.compile("[1-9][0-9]*[.][0-9]+").match(c):
-		return "GL_VERSION_" + c.replace(".", "_")
-	else:
-		return c
-
-
-def classify_category(name, number):
-	"""Based on the category name and number, select a numerical class for it.
-	
-	Categories are divided into four classes numbered 0 through 3.  The
-	classes are:
-
-		0. Core GL versions, sorted by version number.
-		1. ARB extensions, sorted by extension number.
-		2. Non-ARB extensions, sorted by extension number.
-		3. Un-numbered extensions, sorted by extension name.
-	"""
-
-	try:
-		core_version = float(name)
-	except Exception,e:
-		core_version = 0.0
-
-	if core_version > 0.0:
-		cat_type = 0
-		key = name
-	elif name.startswith("GL_ARB_") or name.startswith("GLX_ARB_") or name.startswith("WGL_ARB_"):
-		cat_type = 1
-		key = int(number)
-	else:
-		if number != None:
-			cat_type = 2
-			key = int(number)
-		else:
-			cat_type = 3
-			key = name
-
-
-	return [cat_type, key]
-
-
-def create_parameter_string(parameters, include_names):
-	"""Create a parameter string from a list of gl_parameters."""
-
-	list = []
-	for p in parameters:
-		if p.is_padding:
-			continue
-
-		if include_names:
-			list.append( p.string() )
-		else:
-			list.append( p.type_string() )
-
-	if len(list) == 0: list = ["void"]
-
-	return string.join(list, ", ")
-
-
-class gl_item:
-	def __init__(self, element, context):
-		self.context = context
-		self.name = element.nsProp( "name", None )
-		self.category = real_category_name( element.parent.nsProp( "name", None ) )
-		return
-
-
-class gl_type( gl_item ):
-	def __init__(self, element, context):
-		gl_item.__init__(self, element, context)
-		self.size = int( element.nsProp( "size", None ), 0 )
-
-		te = typeexpr.type_expression( None )
-		tn = typeexpr.type_node()
-		tn.size = int( element.nsProp( "size", None ), 0 )
-		tn.integer = not is_attr_true( element, "float" )
-		tn.unsigned = is_attr_true( element, "unsigned" )
-		tn.name = "GL" + self.name
-		te.set_base_type_node( tn )
-
-		self.type_expr = te
-		return
-	
-
-	def get_type_expression(self):
-		return self.type_expr
-
-
-class gl_enum( gl_item ):
-	def __init__(self, element, context):
-		gl_item.__init__(self, element, context)
-		self.value = int( element.nsProp( "value", None ), 0 )
-
-		temp = element.nsProp( "count", None )
-		if not temp or temp == "?":
-			self.default_count = -1
-		else:
-			try:
-				c = int(temp)
-			except Exception,e:
-				raise RuntimeError('Invalid count value "%s" for enum "%s" in function "%s" when an integer was expected.' % (temp, self.name, n))
-
-			self.default_count = c
-
-		return
-
-
-	def priority(self):
-		"""Calculate a 'priority' for this enum name.
-		
-		When an enum is looked up by number, there may be many
-		possible names, but only one is the 'prefered' name.  The
-		priority is used to select which name is the 'best'.
-
-		Highest precedence is given to core GL name.  ARB extension
-		names have the next highest, followed by EXT extension names.
-		Vendor extension names are the lowest.
-		"""
-
-		if self.name.endswith( "_BIT" ):
-			bias = 1
-		else:
-			bias = 0
-
-		if self.category.startswith( "GL_VERSION_" ):
-			priority = 0
-		elif self.category.startswith( "GL_ARB_" ):
-			priority = 2
-		elif self.category.startswith( "GL_EXT_" ):
-			priority = 4
-		else:
-			priority = 6
-
-		return priority + bias
-
-
-
-class gl_parameter:
-	def __init__(self, element, context):
-		self.name = element.nsProp( "name", None )
-
-		ts = element.nsProp( "type", None )
-		self.type_expr = typeexpr.type_expression( ts, context )
-
-		temp = element.nsProp( "variable_param", None )
-		if temp:
-			self.count_parameter_list = temp.split( ' ' )
-		else:
-			self.count_parameter_list = []
-
-		# The count tag can be either a numeric string or the name of
-		# a variable.  If it is the name of a variable, the int(c)
-		# statement will throw an exception, and the except block will
-		# take over.
-
-		c = element.nsProp( "count", None )
-		try: 
-			count = int(c)
-			self.count = count
-			self.counter = None
-		except Exception,e:
-			count = 1
-			self.count = 0
-			self.counter = c
-		
-		self.count_scale = int(element.nsProp( "count_scale", None ))
-
-		elements = (count * self.count_scale)
-		if elements == 1:
-			elements = 0
-
-		#if ts == "GLdouble":
-		#	print '/* stack size -> %s = %u (before)*/' % (self.name, self.type_expr.get_stack_size())
-		#	print '/* # elements = %u */' % (elements)
-		self.type_expr.set_elements( elements )
-		#if ts == "GLdouble":
-		#	print '/* stack size -> %s = %u (after) */' % (self.name, self.type_expr.get_stack_size())
-
-		self.is_client_only = is_attr_true( element, 'client_only' )
-		self.is_counter     = is_attr_true( element, 'counter' )
-		self.is_output      = is_attr_true( element, 'output' )
-
-
-		# Pixel data has special parameters.
-
-		self.width      = element.nsProp('img_width',  None)
-		self.height     = element.nsProp('img_height', None)
-		self.depth      = element.nsProp('img_depth',  None)
-		self.extent     = element.nsProp('img_extent', None)
-
-		self.img_xoff   = element.nsProp('img_xoff',   None)
-		self.img_yoff   = element.nsProp('img_yoff',   None)
-		self.img_zoff   = element.nsProp('img_zoff',   None)
-		self.img_woff   = element.nsProp('img_woff',   None)
-
-		self.img_format = element.nsProp('img_format', None)
-		self.img_type   = element.nsProp('img_type',   None)
-		self.img_target = element.nsProp('img_target', None)
-
-		self.img_pad_dimensions = is_attr_true( element, 'img_pad_dimensions' )
-		self.img_null_flag      = is_attr_true( element, 'img_null_flag' )
-		self.img_send_null      = is_attr_true( element, 'img_send_null' )
-
-		self.is_padding = is_attr_true( element, 'padding' )
-		return
-
-
-	def compatible(self, other):
-		return 1
-
-
-	def is_array(self):
-		return self.is_pointer()
-
-
-	def is_pointer(self):
-		return self.type_expr.is_pointer()
-
-
-	def is_image(self):
-		if self.width:
-			return 1
-		else:
-			return 0
-
-
-	def is_variable_length(self):
-		return len(self.count_parameter_list) or self.counter
-
-
-	def is_64_bit(self):
-		count = self.type_expr.get_element_count()
-		if count:
-			if (self.size() / count) == 8:
-				return 1
-		else:
-			if self.size() == 8:
-				return 1
-
-		return 0
-
-
-	def string(self):
-		return self.type_expr.original_string + " " + self.name
-
-
-	def type_string(self):
-		return self.type_expr.original_string
-
-
-	def get_base_type_string(self):
-		return self.type_expr.get_base_name()
-
-
-	def get_dimensions(self):
-		if not self.width:
-			return [ 0, "0", "0", "0", "0" ]
-
-		dim = 1
-		w = self.width
-		h = "1"
-		d = "1"
-		e = "1"
-
-		if self.height:
-			dim = 2
-			h = self.height
-
-		if self.depth:
-			dim = 3
-			d = self.depth
-
-		if self.extent:
-			dim = 4
-			e = self.extent
-
-		return [ dim, w, h, d, e ]
-
-
-	def get_stack_size(self):
-		return self.type_expr.get_stack_size()
-
-
-	def size(self):
-		if self.is_image():
-			return 0
-		else:
-			return self.type_expr.get_element_size()
-
-
-	def get_element_count(self):
-		c = self.type_expr.get_element_count()
-		if c == 0:
-			return 1
-
-		return c
-
-
-	def size_string(self, use_parens = 1):
-		s = self.size()
-		if self.counter or self.count_parameter_list:
-			list = [ "compsize" ]
-
-			if self.counter and self.count_parameter_list:
-				list.append( self.counter )
-			elif self.counter:
-				list = [ self.counter ]
-
-			if s > 1:
-				list.append( str(s) )
-
-			if len(list) > 1 and use_parens :
-				return "(%s)" % (string.join(list, " * "))
-			else:
-				return string.join(list, " * ")
-
-		elif self.is_image():
-			return "compsize"
-		else:
-			return str(s)
-
-
-	def format_string(self):
-		if self.type_expr.original_string == "GLenum":
-			return "0x%x"
-		else:
-			return self.type_expr.format_string()
-
-
-
-class gl_function( gl_item ):
-	def __init__(self, element, context):
-		self.context = context
-		self.name = None
-
-		self.entry_points = []
-		self.return_type = "void"
-		self.parameters = []
-		self.offset = -1
-		self.initialized = 0
-		self.images = []
-
-		self.assign_offset = 0
-
-		self.static_entry_points = []
-
-		# Track the parameter string (for the function prototype)
-		# for each entry-point.  This is done because some functions
-		# change their prototype slightly when promoted from extension
-		# to ARB extension to core.  glTexImage3DEXT and glTexImage3D
-		# are good examples of this.  Scripts that need to generate
-		# code for these differing aliases need to real prototype
-		# for each entry-point.  Otherwise, they may generate code
-		# that won't compile.
-
-		self.parameter_strings = {}
-
-		self.process_element( element )
-
-		return
-
-	
-	def process_element(self, element):
-		name = element.nsProp( "name", None )
-		alias = element.nsProp( "alias", None )
-
-		if is_attr_true(element, "static_dispatch"):
-			self.static_entry_points.append(name)
-
-		self.entry_points.append( name )
-		if alias:
-			true_name = alias
-		else:
-			true_name = name
-
-			# Only try to set the offset when a non-alias
-			# entry-point is being processes.
-
-			offset = element.nsProp( "offset", None )
-			if offset:
-				try:
-					o = int( offset )
-					self.offset = o
-				except Exception, e:
-					self.offset = -1
-					if offset == "assign":
-						self.assign_offset = 1
-
-
-		if not self.name:
-			self.name = true_name
-		elif self.name != true_name:
-			raise RuntimeError("Function true name redefined.  Was %s, now %s." % (self.name, true_name))
-
-
-		# There are two possible cases.  The first time an entry-point
-		# with data is seen, self.initialized will be 0.  On that
-		# pass, we just fill in the data.  The next time an
-		# entry-point with data is seen, self.initialized will be 1.
-		# On that pass we have to make that the new values match the
-		# valuse from the previous entry-point.
-
-		parameters = []
-		return_type = "void"
-		child = element.children
-		while child:
-			if child.type == "element":
-				if child.name == "return":
-					return_type = child.nsProp( "type", None )
-				elif child.name == "param":
-					param = self.context.factory.create_item( "parameter", child, self.context)
-					parameters.append( param )
-
-			child = child.next
-
-
-		if self.initialized:
-			if self.return_type != return_type:
-				raise RuntimeError( "Return type changed in %s.  Was %s, now %s." % (name, self.return_type, return_type))
-
-			if len(parameters) != len(self.parameters):
-				raise RuntimeError( "Parameter count mismatch in %s.  Was %d, now %d." % (name, len(self.parameters), len(parameters)))
-
-			for j in range(0, len(parameters)):
-				p1 = parameters[j]
-				p2 = self.parameters[j]
-				if not p1.compatible( p2 ):
-					raise RuntimeError( 'Parameter type mismatch in %s.  "%s" was "%s", now "%s".' % (name, p2.name, p2.type_expr.original_string, p1.type_expr.original_string))
-
-
-		if true_name == name or not self.initialized:
-			self.return_type = return_type
-			self.parameters = parameters
-
-			for param in self.parameters:
-				if param.is_image():
-					self.images.append( param )
-
-		if element.children:
-			self.initialized = 1
-			self.parameter_strings[name] = create_parameter_string(parameters, 1)
-		else:
-			self.parameter_strings[name] = None
-
-		return
-
-
-	def get_images(self):
-		"""Return potentially empty list of input images."""
-		return self.images
-
-
-	def parameterIterator(self):
-		return self.parameters.__iter__();
-
-
-	def get_parameter_string(self, entrypoint = None):
-		if entrypoint:
-			s = self.parameter_strings[ entrypoint ]
-			if s:
-				return s
-		
-		return create_parameter_string( self.parameters, 1 )
-
-	def get_called_parameter_string(self):
-		p_string = ""
-		comma = ""
-
-		for p in self.parameterIterator():
-			p_string = p_string + comma + p.name
-			comma = ", "
-
-		return p_string
-
-
-	def is_abi(self):
-		return (self.offset >= 0 and not self.assign_offset)
-
-	def is_static_entry_point(self, name):
-		return name in self.static_entry_points
-
-	def dispatch_name(self):
-		if self.name in self.static_entry_points:
-			return self.name
-		else:
-			return "_dispatch_stub_%u" % (self.offset)
-
-	def static_name(self, name):
-		if name in self.static_entry_points:
-			return name
-		else:
-			return "_dispatch_stub_%u" % (self.offset)
-
-
-class gl_item_factory:
-	"""Factory to create objects derived from gl_item."""
-
-	def create_item(self, item_name, element, context):
-		if item_name == "function":
-			return gl_function(element, context)
-		if item_name == "type":
-			return gl_type(element, context)
-		elif item_name == "enum":
-			return gl_enum(element, context)
-		elif item_name == "parameter":
-			return gl_parameter(element, context)
-		elif item_name == "api":
-			return gl_api(self)
-		else:
-			return None
-
-
-class gl_api:
-	def __init__(self, factory):
-		self.functions_by_name = {}
-		self.enums_by_name = {}
-		self.types_by_name = {}
-
-		self.category_dict = {}
-		self.categories = [{}, {}, {}, {}]
-
-		self.factory = factory
-
-		self.next_offset = 0
-
-		typeexpr.create_initial_types()
-		return
-
-
-	def process_element(self, doc):
-		element = doc.children
-		while element.type != "element" or element.name != "OpenGLAPI":
-			element = element.next
-
-		if element:
-			self.process_OpenGLAPI(element)
-		return
-
-
-	def process_OpenGLAPI(self, element):
-		child = element.children
-		while child:
-			if child.type == "element":
-				if child.name == "category":
-					self.process_category( child )
-				elif child.name == "OpenGLAPI":
-					self.process_OpenGLAPI( child )
-
-			child = child.next
-
-		return
-
-
-	def process_category(self, cat):
-		cat_name = cat.nsProp( "name", None )
-		cat_number = cat.nsProp( "number", None )
-
-		[cat_type, key] = classify_category(cat_name, cat_number)
-		self.categories[cat_type][key] = [cat_name, cat_number]
-
-		child = cat.children
-		while child:
-			if child.type == "element":
-				if child.name == "function":
-					func_name = real_function_name( child )
-
-					temp_name = child.nsProp( "name", None )
-					self.category_dict[ temp_name ] = [cat_name, cat_number]
-
-					if self.functions_by_name.has_key( func_name ):
-						func = self.functions_by_name[ func_name ]
-						func.process_element( child )
-					else:
-						func = self.factory.create_item( "function", child, self )
-						self.functions_by_name[ func_name ] = func
-
-					if func.offset >= self.next_offset:
-						self.next_offset = func.offset + 1
-
-
-				elif child.name == "enum":
-					enum = self.factory.create_item( "enum", child, self )
-					self.enums_by_name[ enum.name ] = enum
-				elif child.name == "type":
-					t = self.factory.create_item( "type", child, self )
-					self.types_by_name[ "GL" + t.name ] = t
-
-
-			child = child.next
-
-		return
-
-
-	def functionIterateByCategory(self, cat = None):
-		"""Iterate over functions by category.
-		
-		If cat is None, all known functions are iterated in category
-		order.  See classify_category for details of the ordering.
-		Within a category, functions are sorted by name.  If cat is
-		not None, then only functions in that category are iterated.
-		"""
-		lists = [{}, {}, {}, {}]
-
-		for func in self.functionIterateAll():
-			[cat_name, cat_number] = self.category_dict[func.name]
-
-			if (cat == None) or (cat == cat_name):
-				[func_cat_type, key] = classify_category(cat_name, cat_number)
-
-				if not lists[func_cat_type].has_key(key):
-					lists[func_cat_type][key] = {}
-
-				lists[func_cat_type][key][func.name] = func
-
-
-		functions = []
-		for func_cat_type in range(0,4):
-			keys = lists[func_cat_type].keys()
-			keys.sort()
-
-			for key in keys:
-				names = lists[func_cat_type][key].keys()
-				names.sort()
-
-				for name in names:
-					functions.append(lists[func_cat_type][key][name])
-
-		return functions.__iter__()
-
-
-	def functionIterateByOffset(self):
-		max_offset = -1
-		for func in self.functions_by_name.itervalues():
-			if func.offset > max_offset:
-				max_offset = func.offset
-
-
-		temp = [None for i in range(0, max_offset + 1)]
-		for func in self.functions_by_name.itervalues():
-			if func.offset != -1:
-				temp[ func.offset ] = func
-
-
-		list = []
-		for i in range(0, max_offset + 1):
-			if temp[i]:
-				list.append(temp[i])
-
-		return list.__iter__();
-
-
-	def functionIterateAll(self):
-		return self.functions_by_name.itervalues()
-
-
-	def enumIterateByName(self):
-		keys = self.enums_by_name.keys()
-		keys.sort()
-		
-		list = []
-		for enum in keys:
-			list.append( self.enums_by_name[ enum ] )
-
-		return list.__iter__()
-
-
-	def categoryIterate(self):
-		"""Iterate over categories.
-		
-		Iterate over all known categories in the order specified by
-		classify_category.  Each iterated value is a tuple of the
-		name and number (which may be None) of the category.
-		"""
-
-		list = []
-		for cat_type in range(0,4):
-			keys = self.categories[cat_type].keys()
-			keys.sort()
-			
-			for key in keys:
-				list.append(self.categories[cat_type][key])
-				
-		return list.__iter__()
-
-
-	def get_category_for_name( self, name ):
-		if self.category_dict.has_key(name):
-			return self.category_dict[name]
-		else:
-			return ["<unknown category>", None]
-
-
-	def typeIterate(self):
-		return self.types_by_name.itervalues()
-
-
-	def find_type( self, type_name ):
-		if type_name in self.types_by_name:
-			return self.types_by_name[ type_name ].type_expr
-		else:
-			print "Unable to find base type matching \"%s\"." % (type_name)
-			return None
diff --git a/src/mesa/glapi/gl_and_glX_API.xml b/src/mesa/glapi/gl_and_glX_API.xml
deleted file mode 100644
index 34c977e9c0..0000000000
--- a/src/mesa/glapi/gl_and_glX_API.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
-
-<OpenGLAPI>
-<xi:include href="glX_API.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
-<xi:include href="gl_API.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
-</OpenGLAPI>
\ No newline at end of file
diff --git a/src/mesa/glapi/gl_apitemp.py b/src/mesa/glapi/gl_apitemp.py
deleted file mode 100644
index 41a40fbeb6..0000000000
--- a/src/mesa/glapi/gl_apitemp.py
+++ /dev/null
@@ -1,320 +0,0 @@
-#!/usr/bin/env python
-
-# (C) Copyright IBM Corporation 2004, 2005
-# All Rights Reserved.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# on the rights to use, copy, modify, merge, publish, distribute, sub
-# license, and/or sell copies of the Software, and to permit persons to whom
-# the Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
-# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-#
-# Authors:
-#    Ian Romanick <idr@us.ibm.com>
-
-import gl_XML, glX_XML
-import license
-import sys, getopt
-
-class PrintGlOffsets(gl_XML.gl_print_base):
-	def __init__(self, es=False):
-		gl_XML.gl_print_base.__init__(self)
-
-		self.name = "gl_apitemp.py (from Mesa)"
-		self.license = license.bsd_license_template % ( \
-"""Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
-(C) Copyright IBM Corporation 2004""", "BRIAN PAUL, IBM")
-
-		self.es = es
-
-		self.undef_list.append( "KEYWORD1" )
-		self.undef_list.append( "KEYWORD1_ALT" )
-		self.undef_list.append( "KEYWORD2" )
-		self.undef_list.append( "NAME" )
-		self.undef_list.append( "DISPATCH" )
-		self.undef_list.append( "RETURN_DISPATCH" )
-		self.undef_list.append( "DISPATCH_TABLE_NAME" )
-		self.undef_list.append( "UNUSED_TABLE_NAME" )
-		self.undef_list.append( "TABLE_ENTRY" )
-
-
-	def printFunction(self, f, name):
-		p_string = ""
-		o_string = ""
-		t_string = ""
-		comma = ""
-
-		if f.is_static_entry_point(name):
-			keyword = "KEYWORD1"
-		else:
-			keyword = "KEYWORD1_ALT"
-
-		n = f.static_name(name)
-
-		for p in f.parameterIterator():
-			if p.is_padding:
-				continue
-
-			if p.is_pointer():
-				cast = "(const void *) "
-			else:
-				cast = ""
-
-			t_string = t_string + comma + p.format_string()
-			p_string = p_string + comma + p.name
-			o_string = o_string + comma + cast + p.name
-			comma = ", "
-
-
-		if f.return_type != 'void':
-			dispatch = "RETURN_DISPATCH"
-		else:
-			dispatch = "DISPATCH"
-
-		need_proto = False
-		if not f.is_static_entry_point(name):
-			need_proto = True
-		elif self.es:
-			cat, num = api.get_category_for_name(name)
-			if (cat.startswith("es") or cat.startswith("GL_OES")):
-				need_proto = True
-		if need_proto:
-			print '%s %s KEYWORD2 NAME(%s)(%s);' % (keyword, f.return_type, n, f.get_parameter_string(name))
-			print ''
-
-		print '%s %s KEYWORD2 NAME(%s)(%s)' % (keyword, f.return_type, n, f.get_parameter_string(name))
-		print '{'
-		if p_string == "":
-			print '   %s(%s, (), (F, "gl%s();\\n"));' \
-				% (dispatch, f.name, name)
-		else:
-			print '   %s(%s, (%s), (F, "gl%s(%s);\\n", %s));' \
-				% (dispatch, f.name, p_string, name, t_string, o_string)
-		print '}'
-		print ''
-		return
-
-	def printRealHeader(self):
-		print ''
-		self.printVisibility( "HIDDEN", "hidden" )
-		print """
-/*
- * This file is a template which generates the OpenGL API entry point
- * functions.  It should be included by a .c file which first defines
- * the following macros:
- *   KEYWORD1 - usually nothing, but might be __declspec(dllexport) on Win32
- *   KEYWORD2 - usually nothing, but might be __stdcall on Win32
- *   NAME(n)  - builds the final function name (usually add "gl" prefix)
- *   DISPATCH(func, args, msg) - code to do dispatch of named function.
- *                               msg is a printf-style debug message.
- *   RETURN_DISPATCH(func, args, msg) - code to do dispatch with a return value
- *
- * Here is an example which generates the usual OpenGL functions:
- *   #define KEYWORD1
- *   #define KEYWORD2
- *   #define NAME(func)  gl##func
- *   #define DISPATCH(func, args, msg)                           \\
- *          struct _glapi_table *dispatch = CurrentDispatch;     \\
- *          (*dispatch->func) args
- *   #define RETURN DISPATCH(func, args, msg)                    \\
- *          struct _glapi_table *dispatch = CurrentDispatch;     \\
- *          return (*dispatch->func) args
- *
- */
-
-
-#if defined( NAME )
-#ifndef KEYWORD1
-#define KEYWORD1
-#endif
-
-#ifndef KEYWORD1_ALT
-#define KEYWORD1_ALT HIDDEN
-#endif
-
-#ifndef KEYWORD2
-#define KEYWORD2
-#endif
-
-#ifndef DISPATCH
-#error DISPATCH must be defined
-#endif
-
-#ifndef RETURN_DISPATCH
-#error RETURN_DISPATCH must be defined
-#endif
-
-"""
-		return
-
-    
-
-	def printInitDispatch(self, api):
-		print """
-#endif /* defined( NAME ) */
-
-/*
- * This is how a dispatch table can be initialized with all the functions
- * we generated above.
- */
-#ifdef DISPATCH_TABLE_NAME
-
-#ifndef TABLE_ENTRY
-#error TABLE_ENTRY must be defined
-#endif
-
-#ifdef _GLAPI_SKIP_NORMAL_ENTRY_POINTS
-#error _GLAPI_SKIP_NORMAL_ENTRY_POINTS must not be defined
-#endif
-
-_glapi_proc DISPATCH_TABLE_NAME[] = {"""
-		for f in api.functionIterateByOffset():
-			print '   TABLE_ENTRY(%s),' % (f.dispatch_name())
-
-		print '   /* A whole bunch of no-op functions.  These might be called'
-		print '    * when someone tries to call a dynamically-registered'
-		print '    * extension function without a current rendering context.'
-		print '    */'
-		for i in range(1, 100):
-			print '   TABLE_ENTRY(Unused),'
-
-		print '};'
-		print '#endif /* DISPATCH_TABLE_NAME */'
-		print ''
-		return
-
-
-	def printAliasedTable(self, api):
-		print """
-/*
- * This is just used to silence compiler warnings.
- * We list the functions which are not otherwise used.
- */
-#ifdef UNUSED_TABLE_NAME
-_glapi_proc UNUSED_TABLE_NAME[] = {"""
-
-		normal_entries = []
-		proto_entries = []
-		for f in api.functionIterateByOffset():
-			normal_ents, proto_ents = self.classifyEntryPoints(f)
-
-			# exclude f.name
-			if f.name in normal_ents:
-				normal_ents.remove(f.name)
-			elif f.name in proto_ents:
-				proto_ents.remove(f.name)
-
-			normal_ents = [f.static_name(ent) for ent in normal_ents]
-			proto_ents = [f.static_name(ent) for ent in proto_ents]
-
-			normal_entries.extend(normal_ents)
-			proto_entries.extend(proto_ents)
-
-		print '#ifndef _GLAPI_SKIP_NORMAL_ENTRY_POINTS'
-		for ent in normal_entries:
-			print '   TABLE_ENTRY(%s),' % (ent)
-		print '#endif /* _GLAPI_SKIP_NORMAL_ENTRY_POINTS */'
-		print '#ifndef _GLAPI_SKIP_PROTO_ENTRY_POINTS'
-		for ent in proto_entries:
-			print '   TABLE_ENTRY(%s),' % (ent)
-		print '#endif /* _GLAPI_SKIP_PROTO_ENTRY_POINTS */'
-
-		print '};'
-		print '#endif /*UNUSED_TABLE_NAME*/'
-		print ''
-		return
-
-
-	def classifyEntryPoints(self, func):
-		normal_names = []
-		normal_stubs = []
-		proto_names = []
-		proto_stubs = []
-		# classify the entry points
-		for name in func.entry_points:
-			if func.has_different_protocol(name):
-				if func.is_static_entry_point(name):
-					proto_names.append(name)
-				else:
-					proto_stubs.append(name)
-			else:
-				if func.is_static_entry_point(name):
-					normal_names.append(name)
-				else:
-					normal_stubs.append(name)
-		# there can be at most one stub for a function
-		if normal_stubs:
-			normal_names.append(normal_stubs[0])
-		elif proto_stubs:
-			proto_names.append(proto_stubs[0])
-
-		return (normal_names, proto_names)
-
-	def printBody(self, api):
-		normal_entry_points = []
-		proto_entry_points = []
-		for func in api.functionIterateByOffset():
-			normal_ents, proto_ents = self.classifyEntryPoints(func)
-			normal_entry_points.append((func, normal_ents))
-			proto_entry_points.append((func, proto_ents))
-
-		print '#ifndef _GLAPI_SKIP_NORMAL_ENTRY_POINTS'
-		print ''
-		for func, ents in normal_entry_points:
-			for ent in ents:
-				self.printFunction(func, ent)
-		print ''
-		print '#endif /* _GLAPI_SKIP_NORMAL_ENTRY_POINTS */'
-		print ''
-		print '/* these entry points might require different protocols */'
-		print '#ifndef _GLAPI_SKIP_PROTO_ENTRY_POINTS'
-		print ''
-		for func, ents in proto_entry_points:
-			for ent in ents:
-				self.printFunction(func, ent)
-		print ''
-		print '#endif /* _GLAPI_SKIP_PROTO_ENTRY_POINTS */'
-		print ''
-
-		self.printInitDispatch(api)
-		self.printAliasedTable(api)
-		return
-
-
-def show_usage():
-	print "Usage: %s [-f input_file_name] [-c]" % sys.argv[0]
-	print "-c          Enable compatibility with OpenGL ES."
-	sys.exit(1)
-
-if __name__ == '__main__':
-	file_name = "gl_API.xml"
-    
-	try:
-		(args, trail) = getopt.getopt(sys.argv[1:], "f:c")
-	except Exception,e:
-		show_usage()
-
-	es = False
-	for (arg,val) in args:
-		if arg == "-f":
-			file_name = val
-		elif arg == "-c":
-			es = True
-
-	api = gl_XML.parse_GL_API(file_name, glX_XML.glx_item_factory())
-
-	printer = PrintGlOffsets(es)
-	printer.Print(api)
diff --git a/src/mesa/glapi/gl_enums.py b/src/mesa/glapi/gl_enums.py
deleted file mode 100644
index 3a9ea3c86c..0000000000
--- a/src/mesa/glapi/gl_enums.py
+++ /dev/null
@@ -1,243 +0,0 @@
-#!/usr/bin/python2
-# -*- Mode: Python; py-indent-offset: 8 -*-
-
-# (C) Copyright Zack Rusin 2005
-# All Rights Reserved.
-# 
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# on the rights to use, copy, modify, merge, publish, distribute, sub
-# license, and/or sell copies of the Software, and to permit persons to whom
-# the Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
-# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-#
-# Authors:
-#    Zack Rusin <zack@kde.org>
-
-import license
-import gl_XML
-import sys, getopt
-
-class PrintGlEnums(gl_XML.gl_print_base):
-
-	def __init__(self):
-		gl_XML.gl_print_base.__init__(self)
-
-		self.name = "gl_enums.py (from Mesa)"
-		self.license = license.bsd_license_template % ( \
-"""Copyright (C) 1999-2005 Brian Paul All Rights Reserved.""", "BRIAN PAUL")
-		self.enum_table = {}
-
-
-	def printRealHeader(self):
-		print '#include "main/glheader.h"'
-		print '#include "main/mfeatures.h"'
-		print '#include "main/enums.h"'
-		print '#include "main/imports.h"'
-		print ''
-		print 'typedef struct {'
-		print '   size_t offset;'
-		print '   int n;'
-		print '} enum_elt;'
-		print ''
-		return
-
-	def print_code(self):
-		print """
-typedef int (*cfunc)(const void *, const void *);
-
-/**
- * Compare a key name to an element in the \c all_enums array.
- *
- * \c bsearch always passes the key as the first parameter and the pointer
- * to the array element as the second parameter.  We can elimiate some
- * extra work by taking advantage of that fact.
- *
- * \param a  Pointer to the desired enum name.
- * \param b  Pointer to an element of the \c all_enums array.
- */
-static int compar_name( const char *a, const enum_elt *b )
-{
-   return strcmp( a, & enum_string_table[ b->offset ] );
-}
-
-/**
- * Compare a key enum value to an element in the \c all_enums array.
- *
- * \c bsearch always passes the key as the first parameter and the pointer
- * to the array element as the second parameter.  We can elimiate some
- * extra work by taking advantage of that fact.
- *
- * \param a  Pointer to the desired enum name.
- * \param b  Pointer to an index into the \c all_enums array.
- */
-static int compar_nr( const int *a, const unsigned *b )
-{
-   return a[0] - all_enums[*b].n;
-}
-
-
-static char token_tmp[20];
-
-const char *_mesa_lookup_enum_by_nr( int nr )
-{
-   unsigned * i;
-
-   i = (unsigned *) _mesa_bsearch(& nr, reduced_enums,
-                                  Elements(reduced_enums),
-                                  sizeof(reduced_enums[0]),
-                                  (cfunc) compar_nr);
-
-   if ( i != NULL ) {
-      return & enum_string_table[ all_enums[ *i ].offset ];
-   }
-   else {
-      /* this is not re-entrant safe, no big deal here */
-      sprintf(token_tmp, "0x%x", nr);
-      return token_tmp;
-   }
-}
-
-/* Get the name of an enum given that it is a primitive type.  Avoids
- * GL_FALSE/GL_POINTS ambiguity and others.
- */
-const char *_mesa_lookup_prim_by_nr( int nr )
-{
-   switch (nr) {
-   case GL_POINTS: return "GL_POINTS";
-   case GL_LINES: return "GL_LINES";
-   case GL_LINE_STRIP: return "GL_LINE_STRIP";
-   case GL_LINE_LOOP: return "GL_LINE_LOOP";
-   case GL_TRIANGLES: return "GL_TRIANGLES";
-   case GL_TRIANGLE_STRIP: return "GL_TRIANGLE_STRIP";
-   case GL_TRIANGLE_FAN: return "GL_TRIANGLE_FAN";
-   case GL_QUADS: return "GL_QUADS";
-   case GL_QUAD_STRIP: return "GL_QUAD_STRIP";
-   case GL_POLYGON: return "GL_POLYGON";
-   case GL_POLYGON+1: return "OUTSIDE_BEGIN_END";
-   default: return "<invalid>";
-   }
-}
-
-
-
-int _mesa_lookup_enum_by_name( const char *symbol )
-{
-   enum_elt * f = NULL;
-
-   if ( symbol != NULL ) {
-      f = (enum_elt *) _mesa_bsearch(symbol, all_enums,
-                                     Elements(all_enums),
-                                     sizeof( enum_elt ),
-                                     (cfunc) compar_name);
-   }
-
-   return (f != NULL) ? f->n : -1;
-}
-
-"""
-		return
-
-
-	def printBody(self, api):
-		self.process_enums( api )
-
-		keys = self.enum_table.keys()
-		keys.sort()
-
-		name_table = []
-		enum_table = {}
-
-		for enum in keys:
-			low_pri = 9
-			for [name, pri] in self.enum_table[ enum ]:
-				name_table.append( [name, enum] )
-
-				if pri < low_pri:
-					low_pri = pri
-					enum_table[enum] = name
-						
-
-		name_table.sort()
-
-		string_offsets = {}
-		i = 0;
-		print 'LONGSTRING static const char enum_string_table[] = '
-		for [name, enum] in name_table:
-			print '   "%s\\0"' % (name)
-			string_offsets[ name ] = i
-			i += len(name) + 1
-
-		print '   ;'
-		print ''
-
-
-		print 'static const enum_elt all_enums[%u] =' % (len(name_table))
-		print '{'
-		for [name, enum] in name_table:
-			print '   { %5u, 0x%08X }, /* %s */' % (string_offsets[name], enum, name)
-		print '};'
-		print ''
-
-		print 'static const unsigned reduced_enums[%u] =' % (len(keys))
-		print '{'
-		for enum in keys:
-			name = enum_table[ enum ]
-			if [name, enum] not in name_table:
-				print '      /* Error! %s, 0x%04x */ 0,' % (name, enum)
-			else:
-				i = name_table.index( [name, enum] )
-
-				print '      %4u, /* %s */' % (i, name)
-		print '};'
-
-
-		self.print_code()
-		return
-
-
-	def process_enums(self, api):
-		self.enum_table = {}
-		
-		for obj in api.enumIterateByName():
-			if obj.value not in self.enum_table:
-				self.enum_table[ obj.value ] = []
-
-
-			name = "GL_" + obj.name
-			priority = obj.priority()
-			self.enum_table[ obj.value ].append( [name, priority] )
-
-
-def show_usage():
-	print "Usage: %s [-f input_file_name]" % sys.argv[0]
-	sys.exit(1)
-
-if __name__ == '__main__':
-	file_name = "gl_API.xml"
-
-	try:
-		(args, trail) = getopt.getopt(sys.argv[1:], "f:")
-	except Exception,e:
-		show_usage()
-
-	for (arg,val) in args:
-		if arg == "-f":
-			file_name = val
-
-	api = gl_XML.parse_GL_API( file_name )
-
-	printer = PrintGlEnums()
-	printer.Print( api )
diff --git a/src/mesa/glapi/gl_offsets.py b/src/mesa/glapi/gl_offsets.py
deleted file mode 100644
index 54867b3463..0000000000
--- a/src/mesa/glapi/gl_offsets.py
+++ /dev/null
@@ -1,120 +0,0 @@
-#!/usr/bin/env python
-
-# (C) Copyright IBM Corporation 2004, 2005
-# All Rights Reserved.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# on the rights to use, copy, modify, merge, publish, distribute, sub
-# license, and/or sell copies of the Software, and to permit persons to whom
-# the Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
-# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-#
-# Authors:
-#    Ian Romanick <idr@us.ibm.com>
-
-import gl_XML
-import license
-import sys, getopt
-
-class PrintGlOffsets(gl_XML.gl_print_base):
-	def __init__(self, es=False):
-		gl_XML.gl_print_base.__init__(self)
-
-		self.es = es
-		self.name = "gl_offsets.py (from Mesa)"
-		self.header_tag = '_GLAPI_OFFSETS_H_'
-		self.license = license.bsd_license_template % ( \
-"""Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
-(C) Copyright IBM Corporation 2004""", "BRIAN PAUL, IBM")
-		return
-
-	def printBody(self, api):
-		print '/* this file should not be included directly in mesa */'
-		print ''
-
-		functions = []
-		abi_functions = []
-		alias_functions = []
-		count = 0
-		for f in api.functionIterateByOffset():
-			if not f.is_abi():
-				functions.append( [f, count] )
-				count += 1
-			else:
-				abi_functions.append( f )
-
-			if self.es:
-				# remember functions with aliases
-				if len(f.entry_points) > 1:
-					alias_functions.append(f)
-
-		for f in abi_functions:
-			print '#define _gloffset_%s %d' % (f.name, f.offset)
-			last_static = f.offset
-
-		print ''
-		print '#if !defined(_GLAPI_USE_REMAP_TABLE)'
-		print ''
-
-		for [f, index] in functions:
-			print '#define _gloffset_%s %d' % (f.name, f.offset)
-
-		print '#define _gloffset_FIRST_DYNAMIC %d' % (api.next_offset)
-
-		print ''
-		print '#else'
-		print ''
-
-		for [f, index] in functions:
-			print '#define _gloffset_%s driDispatchRemapTable[%s_remap_index]' % (f.name, f.name)
-
-		print ''
-		print '#endif /* !defined(_GLAPI_USE_REMAP_TABLE) */'
-
-		if alias_functions:
-			print ''
-			print '/* define aliases for compatibility */'
-			for f in alias_functions:
-				for name in f.entry_points:
-					if name != f.name:
-						print '#define _gloffset_%s _gloffset_%s' % (name, f.name)
-		return
-
-
-def show_usage():
-	print "Usage: %s [-f input_file_name] [-c]" % sys.argv[0]
-	print "    -c        Enable compatibility with OpenGL ES."
-	sys.exit(1)
-
-if __name__ == '__main__':
-	file_name = "gl_API.xml"
-    
-	try:
-		(args, trail) = getopt.getopt(sys.argv[1:], "f:c")
-	except Exception,e:
-		show_usage()
-
-	es = False
-	for (arg,val) in args:
-		if arg == "-f":
-			file_name = val
-		elif arg == "-c":
-			es = True
-
-	api = gl_XML.parse_GL_API( file_name )
-
-	printer = PrintGlOffsets(es)
-	printer.Print( api )
diff --git a/src/mesa/glapi/gl_procs.py b/src/mesa/glapi/gl_procs.py
deleted file mode 100644
index 5de61fbdfe..0000000000
--- a/src/mesa/glapi/gl_procs.py
+++ /dev/null
@@ -1,215 +0,0 @@
-#!/usr/bin/env python
-
-# (C) Copyright IBM Corporation 2004, 2005
-# All Rights Reserved.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# on the rights to use, copy, modify, merge, publish, distribute, sub
-# license, and/or sell copies of the Software, and to permit persons to whom
-# the Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
-# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-#
-# Authors:
-#    Ian Romanick <idr@us.ibm.com>
-
-import license
-import gl_XML, glX_XML
-import sys, getopt
-
-class PrintGlProcs(gl_XML.gl_print_base):
-	def __init__(self, long_strings, es=False):
-		gl_XML.gl_print_base.__init__(self)
-
-		self.es = es
-		self.long_strings = long_strings
-		self.name = "gl_procs.py (from Mesa)"
-		self.license = license.bsd_license_template % ( \
-"""Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
-(C) Copyright IBM Corporation 2004, 2006""", "BRIAN PAUL, IBM")
-
-
-	def printRealHeader(self):
-		print """
-/* This file is only included by glapi.c and is used for
- * the GetProcAddress() function
- */
-
-typedef struct {
-    GLint Name_offset;
-#if defined(NEED_FUNCTION_POINTER) || defined(GLX_INDIRECT_RENDERING)
-    _glapi_proc Address;
-#endif
-    GLuint Offset;
-} glprocs_table_t;
-
-#if   !defined(NEED_FUNCTION_POINTER) && !defined(GLX_INDIRECT_RENDERING)
-#  define NAME_FUNC_OFFSET(n,f1,f2,f3,o) { n , o }
-#elif  defined(NEED_FUNCTION_POINTER) && !defined(GLX_INDIRECT_RENDERING)
-#  define NAME_FUNC_OFFSET(n,f1,f2,f3,o) { n , (_glapi_proc) f1 , o }
-#elif  defined(NEED_FUNCTION_POINTER) &&  defined(GLX_INDIRECT_RENDERING)
-#  define NAME_FUNC_OFFSET(n,f1,f2,f3,o) { n , (_glapi_proc) f2 , o }
-#elif !defined(NEED_FUNCTION_POINTER) &&  defined(GLX_INDIRECT_RENDERING)
-#  define NAME_FUNC_OFFSET(n,f1,f2,f3,o) { n , (_glapi_proc) f3 , o }
-#endif
-
-"""
-		return
-
-	def printRealFooter(self):
-		print ''
-		print '#undef NAME_FUNC_OFFSET'
-		return
-
-	def printFunctionString(self, name):
-		if self.long_strings:
-			print '    "gl%s\\0"' % (name)
-		else:
-			print "    'g','l',",
-			for c in name:
-				print "'%s'," % (c),
-			
-			print "'\\0',"
-
-
-	def printBody(self, api):
-		print ''
-		if self.long_strings:
-			print 'static const char gl_string_table[] ='
-		else:
-			print 'static const char gl_string_table[] = {'
-
-		base_offset = 0
-		table = []
-		for func in api.functionIterateByOffset():
-			name = func.dispatch_name()
-			self.printFunctionString(func.name)
-			table.append((base_offset, "gl" + name, "gl" + name, "NULL", func.name))
-
-			# The length of the function's name, plus 2 for "gl",
-			# plus 1 for the NUL.
-
-			base_offset += len(func.name) + 3
-
-
-		for func in api.functionIterateByOffset():
-			for n in func.entry_points:
-				if n != func.name:
-					name = func.dispatch_name()
-					self.printFunctionString( n )
-					
-					if func.has_different_protocol(n):
-						alt_name = "gl" + func.static_glx_name(n)
-						table.append((base_offset, "gl" + name, alt_name, alt_name, func.name))
-					else:
-						table.append((base_offset, "gl" + name, "gl" + name, "NULL", func.name))
-
-					base_offset += len(n) + 3
-
-
-		if self.long_strings:
-			print '    ;'
-		else:
-			print '};'
-
-		print ''
-		print ''
-		print "#ifdef USE_MGL_NAMESPACE"
-		for func in api.functionIterateByOffset():
-			for n in func.entry_points:
-				if (not func.is_static_entry_point(func.name)) or (func.has_different_protocol(n) and not func.is_static_entry_point(n)):
-					print '#define gl_dispatch_stub_%u mgl_dispatch_stub_%u' % (func.offset, func.offset)
-					break
-		print "#endif /* USE_MGL_NAMESPACE */"
-		print ''
-		print ''
-		print '#if defined(NEED_FUNCTION_POINTER) || defined(GLX_INDIRECT_RENDERING)'
-		for func in api.functionIterateByOffset():
-			for n in func.entry_points:
-				if (not func.is_static_entry_point(func.name)) or (func.has_different_protocol(n) and not func.is_static_entry_point(n)):
-					print '%s GLAPIENTRY gl_dispatch_stub_%u(%s);' % (func.return_type, func.offset, func.get_parameter_string())
-					break
-
-		if self.es:
-			categories = {}
-			for func in api.functionIterateByOffset():
-				for n in func.entry_points:
-					cat, num = api.get_category_for_name(n)
-					if (cat.startswith("es") or cat.startswith("GL_OES")):
-						if not categories.has_key(cat):
-							categories[cat] = []
-						proto = 'GLAPI %s GLAPIENTRY %s(%s);' \
-								% (func.return_type, "gl" + n, func.get_parameter_string(n))
-						categories[cat].append(proto)
-			if categories:
-				print ''
-				print '/* OpenGL ES specific prototypes */'
-				print ''
-				keys = categories.keys()
-				keys.sort()
-				for key in keys:
-					print '/* category %s */' % key
-					print "\n".join(categories[key])
-				print ''
-
-		print '#endif /* defined(NEED_FUNCTION_POINTER) || defined(GLX_INDIRECT_RENDERING) */'
-
-		print ''
-		print 'static const glprocs_table_t static_functions[] = {'
-
-		for info in table:
-			print '    NAME_FUNC_OFFSET(%5u, %s, %s, %s, _gloffset_%s),' % info
-
-		print '    NAME_FUNC_OFFSET(-1, NULL, NULL, NULL, 0)'
-		print '};'
-		return
-
-
-def show_usage():
-	print "Usage: %s [-f input_file_name] [-m mode] [-c]" % sys.argv[0]
-	print "-c          Enable compatibility with OpenGL ES."
-	print "-m mode     mode can be one of:"
-	print "    long  - Create code for compilers that can handle very"
-	print "            long string constants. (default)"
-	print "    short - Create code for compilers that can only handle"
-	print "            ANSI C89 string constants."
-	sys.exit(1)
-
-if __name__ == '__main__':
-	file_name = "gl_API.xml"
-
-	try:
-		(args, trail) = getopt.getopt(sys.argv[1:], "f:m:c")
-	except Exception,e:
-		show_usage()
-
-	long_string = 1
-	es = False
-	for (arg,val) in args:
-		if arg == "-f":
-			file_name = val
-		elif arg == "-m":
-			if val == "short":
-				long_string = 0
-			elif val == "long":
-				long_string = 1
-			else:
-				show_usage()
-		elif arg == "-c":
-		    es = True
-
-	api = gl_XML.parse_GL_API(file_name, glX_XML.glx_item_factory())
-	printer = PrintGlProcs(long_string, es)
-	printer.Print(api)
diff --git a/src/mesa/glapi/gl_table.py b/src/mesa/glapi/gl_table.py
deleted file mode 100644
index 3bd7569e92..0000000000
--- a/src/mesa/glapi/gl_table.py
+++ /dev/null
@@ -1,229 +0,0 @@
-#!/usr/bin/python2
-
-# (C) Copyright IBM Corporation 2004
-# All Rights Reserved.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# on the rights to use, copy, modify, merge, publish, distribute, sub
-# license, and/or sell copies of the Software, and to permit persons to whom
-# the Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
-# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-#
-# Authors:
-#    Ian Romanick <idr@us.ibm.com>
-
-import gl_XML
-import license
-import sys, getopt
-
-class PrintGlTable(gl_XML.gl_print_base):
-	def __init__(self, es=False):
-		gl_XML.gl_print_base.__init__(self)
-
-		self.es = es
-		self.header_tag = '_GLAPI_TABLE_H_'
-		self.name = "gl_table.py (from Mesa)"
-		self.license = license.bsd_license_template % ( \
-"""Copyright (C) 1999-2003  Brian Paul   All Rights Reserved.
-(C) Copyright IBM Corporation 2004""", "BRIAN PAUL, IBM")
-		return
-
-
-	def printBody(self, api):
-		for f in api.functionIterateByOffset():
-			arg_string = f.get_parameter_string()
-			print '   %s (GLAPIENTRYP %s)(%s); /* %d */' % (f.return_type, f.name, arg_string, f.offset)
-
-
-	def printRealHeader(self):
-		print '#ifndef GLAPIENTRYP'
-		print '# ifndef GLAPIENTRY'
-		print '#  define GLAPIENTRY'
-		print '# endif'
-		print ''
-		print '# define GLAPIENTRYP GLAPIENTRY *'
-		print '#endif'
-		print ''
-		print ''
-		print 'struct _glapi_table'
-		print '{'
-		return
-
-
-	def printRealFooter(self):
-		print '};'
-		return
-
-
-class PrintRemapTable(gl_XML.gl_print_base):
-	def __init__(self, es=False):
-		gl_XML.gl_print_base.__init__(self)
-
-		self.es = es
-		self.header_tag = '_GLAPI_DISPATCH_H_'
-		self.name = "gl_table.py (from Mesa)"
-		self.license = license.bsd_license_template % ("(C) Copyright IBM Corporation 2005", "IBM")
-		return
-
-
-	def printRealHeader(self):
-		print """
-/* this file should not be included directly in mesa */
-
-/**
- * \\file glapidispatch.h
- * Macros for handling GL dispatch tables.
- *
- * For each known GL function, there are 3 macros in this file.  The first
- * macro is named CALL_FuncName and is used to call that GL function using
- * the specified dispatch table.  The other 2 macros, called GET_FuncName
- * can SET_FuncName, are used to get and set the dispatch pointer for the
- * named function in the specified dispatch table.
- */
-"""
-		
-		return
-
-	def printBody(self, api):
-		print '#define CALL_by_offset(disp, cast, offset, parameters) \\'
-		print '    (*(cast (GET_by_offset(disp, offset)))) parameters'
-		print '#define GET_by_offset(disp, offset) \\'
-		print '    (offset >= 0) ? (((_glapi_proc *)(disp))[offset]) : NULL'
-		print '#define SET_by_offset(disp, offset, fn) \\'
-		print '    do { \\'
-		print '        if ( (offset) < 0 ) { \\'
-		print '            /* fprintf( stderr, "[%s:%u] SET_by_offset(%p, %d, %s)!\\n", */ \\'
-		print '            /*         __func__, __LINE__, disp, offset, # fn); */ \\'
-		print '            /* abort(); */ \\'
-		print '        } \\'
-		print '        else { \\'
-		print '            ( (_glapi_proc *) (disp) )[offset] = (_glapi_proc) fn; \\'
-		print '        } \\'
-		print '    } while(0)'
-		print ''
-
-		functions = []
-		abi_functions = []
-		alias_functions = []
-		count = 0
-		for f in api.functionIterateByOffset():
-			if not f.is_abi():
-				functions.append( [f, count] )
-				count += 1
-			else:
-				abi_functions.append( f )
-
-			if self.es:
-				# remember functions with aliases
-				if len(f.entry_points) > 1:
-					alias_functions.append(f)
-
-
-		for f in abi_functions:
-			print '#define CALL_%s(disp, parameters) (*((disp)->%s)) parameters' % (f.name, f.name)
-			print '#define GET_%s(disp) ((disp)->%s)' % (f.name, f.name)
-			print '#define SET_%s(disp, fn) ((disp)->%s = fn)' % (f.name, f.name)
-
-
-		print ''
-		print '#if !defined(_GLAPI_USE_REMAP_TABLE)'
-		print ''
-
-		for [f, index] in functions:
-			print '#define CALL_%s(disp, parameters) (*((disp)->%s)) parameters' % (f.name, f.name)
-			print '#define GET_%s(disp) ((disp)->%s)' % (f.name, f.name)
-			print '#define SET_%s(disp, fn) ((disp)->%s = fn)' % (f.name, f.name)
-
-		print ''
-		print '#else'
-		print ''
-		print '#define driDispatchRemapTable_size %u' % (count)
-		print 'extern int driDispatchRemapTable[ driDispatchRemapTable_size ];'
-		print ''
-
-		for [f, index] in functions:
-			print '#define %s_remap_index %u' % (f.name, index)
-
-		print ''
-
-		for [f, index] in functions:
-			arg_string = gl_XML.create_parameter_string( f.parameters, 0 )
-			cast = '%s (GLAPIENTRYP)(%s)' % (f.return_type, arg_string)
-
-			print '#define CALL_%s(disp, parameters) CALL_by_offset(disp, (%s), driDispatchRemapTable[%s_remap_index], parameters)' % (f.name, cast, f.name)
-			print '#define GET_%s(disp) GET_by_offset(disp, driDispatchRemapTable[%s_remap_index])' % (f.name, f.name)
-			print '#define SET_%s(disp, fn) SET_by_offset(disp, driDispatchRemapTable[%s_remap_index], fn)' % (f.name, f.name)
-
-
-		print ''
-		print '#endif /* !defined(_GLAPI_USE_REMAP_TABLE) */'
-
-		if alias_functions:
-			print ''
-			print '/* define aliases for compatibility */'
-			for f in alias_functions:
-				for name in f.entry_points:
-					if name != f.name:
-						print '#define CALL_%s(disp, parameters) CALL_%s(disp, parameters)' % (name, f.name)
-						print '#define GET_%s(disp) GET_%s(disp)' % (name, f.name)
-						print '#define SET_%s(disp, fn) SET_%s(disp, fn)' % (name, f.name)
-			print ''
-
-			print '#if defined(_GLAPI_USE_REMAP_TABLE)'
-			for f in alias_functions:
-				for name in f.entry_points:
-					if name != f.name:
-						print '#define %s_remap_index %s_remap_index' % (name, f.name)
-			print '#endif /* defined(_GLAPI_USE_REMAP_TABLE) */'
-			print ''
-
-		return
-
-
-def show_usage():
-	print "Usage: %s [-f input_file_name] [-m mode] [-c]" % sys.argv[0]
-	print "    -m mode   Mode can be 'table' or 'remap_table'."
-	print "    -c        Enable compatibility with OpenGL ES."
-	sys.exit(1)
-
-if __name__ == '__main__':
-	file_name = "gl_API.xml"
-    
-	try:
-		(args, trail) = getopt.getopt(sys.argv[1:], "f:m:c")
-	except Exception,e:
-		show_usage()
-
-	mode = "table"
-	es = False
-	for (arg,val) in args:
-		if arg == "-f":
-			file_name = val
-		elif arg == "-m":
-			mode = val
-		elif arg == "-c":
-			es = True
-
-	if mode == "table":
-		printer = PrintGlTable(es)
-	elif mode == "remap_table":
-		printer = PrintRemapTable(es)
-	else:
-		show_usage()
-
-	api = gl_XML.parse_GL_API( file_name )
-
-	printer.Print( api )
diff --git a/src/mesa/glapi/gl_x86-64_asm.py b/src/mesa/glapi/gl_x86-64_asm.py
deleted file mode 100644
index 31c1a2b93a..0000000000
--- a/src/mesa/glapi/gl_x86-64_asm.py
+++ /dev/null
@@ -1,334 +0,0 @@
-#!/usr/bin/env python
-
-# (C) Copyright IBM Corporation 2005
-# All Rights Reserved.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# on the rights to use, copy, modify, merge, publish, distribute, sub
-# license, and/or sell copies of the Software, and to permit persons to whom
-# the Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
-# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-#
-# Authors:
-#    Ian Romanick <idr@us.ibm.com>
-
-import license
-import gl_XML, glX_XML
-import sys, getopt, copy
-
-def should_use_push(registers):
-	for [reg, offset] in registers:
-		if reg[1:4] == "xmm":
-			return 0
-
-	N = len(registers)
-	return (N & 1) != 0
-
-
-def local_size(registers):
-	# The x86-64 ABI says "the value (%rsp - 8) is always a multiple of
-	# 16 when control is transfered to the function entry point."  This
-	# means that the local stack usage must be (16*N)+8 for some value
-	# of N.  (16*N)+8 = (8*(2N))+8 = 8*(2N+1).  As long as N is odd, we
-	# meet this requirement.
-
-	N = (len(registers) | 1)
-	return 8*N
-
-
-def save_all_regs(registers):
-	adjust_stack = 0
-	if not should_use_push(registers):
-		adjust_stack = local_size(registers)
-		print '\tsubq\t$%u, %%rsp' % (adjust_stack)
-
-	for [reg, stack_offset] in registers:
-		save_reg( reg, stack_offset, adjust_stack )
-	return
-
-
-def restore_all_regs(registers):
-	adjust_stack = 0
-	if not should_use_push(registers):
-		adjust_stack = local_size(registers)
-
-	temp = copy.deepcopy(registers)
-	while len(temp):
-		[reg, stack_offset] = temp.pop()
-		restore_reg(reg, stack_offset, adjust_stack)
-
-	if adjust_stack:
-		print '\taddq\t$%u, %%rsp' % (adjust_stack)
-	return
-
-
-def save_reg(reg, offset, use_move):
-	if use_move:
-		if offset == 0:
-			print '\tmovq\t%s, (%%rsp)' % (reg)
-		else:
-			print '\tmovq\t%s, %u(%%rsp)' % (reg, offset)
-	else:
-		print '\tpushq\t%s' % (reg)
-
-	return
-
-
-def restore_reg(reg, offset, use_move):
-	if use_move:
-		if offset == 0:
-			print '\tmovq\t(%%rsp), %s' % (reg)
-		else:
-			print '\tmovq\t%u(%%rsp), %s' % (offset, reg)
-	else:
-		print '\tpopq\t%s' % (reg)
-
-	return
-
-
-class PrintGenericStubs(gl_XML.gl_print_base):
-
-	def __init__(self):
-		gl_XML.gl_print_base.__init__(self)
-
-		self.name = "gl_x86-64_asm.py (from Mesa)"
-		self.license = license.bsd_license_template % ("(C) Copyright IBM Corporation 2005", "IBM")
-		return
-
-
-	def get_stack_size(self, f):
-		size = 0
-		for p in f.parameterIterator():
-			size += p.get_stack_size()
-
-		return size
-
-
-	def printRealHeader(self):
-		print "/* If we build with gcc's -fvisibility=hidden flag, we'll need to change"
-		print " * the symbol visibility mode to 'default'."
-		print ' */'
-		print ''
-		print '#include "x86/assyntax.h"'
-		print ''
-		print '#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 303'
-		print '#  pragma GCC visibility push(default)'
-		print '#  define HIDDEN(x) .hidden x'
-		print '#else'
-		print '#  define HIDDEN(x)'
-		print '#endif'
-		print ''
-		print '# if defined(USE_MGL_NAMESPACE)'
-		print '#  define GL_PREFIX(n) GLNAME(CONCAT(mgl,n))'
-		print '#  define _glapi_Dispatch _mglapi_Dispatch'
-		print '# else'
-		print '#  define GL_PREFIX(n) GLNAME(CONCAT(gl,n))'
-		print '# endif'
-		print ''
-		print '#if defined(PTHREADS) || defined(SOLARIS_THREADS) || defined(WIN32_THREADS) || defined(BEOS_THREADS)'
-		print '#  define THREADS'
-		print '#endif'
-		print ''
-		print '\t.text'
-		print ''
-		print '#ifdef GLX_USE_TLS'
-		print ''
-		print '\t.globl _x86_64_get_get_dispatch; HIDDEN(_x86_64_get_get_dispatch)'
-		print '_x86_64_get_get_dispatch:'
-		print '\tlea\t_x86_64_get_dispatch(%rip), %rax'
-		print '\tret'
-		print ''
-		print '\t.p2align\t4,,15'
-		print '_x86_64_get_dispatch:'
-		print '\tmovq\t_glapi_tls_Dispatch@GOTTPOFF(%rip), %rax'
-		print '\tmovq\t%fs:(%rax), %rax'
-		print '\tret'
-		print '\t.size\t_x86_64_get_dispatch, .-_x86_64_get_dispatch'
-		print ''
-		print '#elif defined(PTHREADS)'
-		print ''
-		print '\t.extern\t_glapi_Dispatch'
-		print '\t.extern\t_gl_DispatchTSD'
-		print '\t.extern\tpthread_getspecific'
-		print ''
-		print '\t.p2align\t4,,15'
-		print '_x86_64_get_dispatch:'
-		print '\tmovq\t_gl_DispatchTSD(%rip), %rdi'
-		print '\tjmp\tpthread_getspecific@PLT'
-		print ''
-		print '#elif defined(THREADS)'
-		print ''
-		print '\t.extern\t_glapi_get_dispatch'
-		print ''
-		print '#endif'
-		print ''
-		return
-
-
-	def printRealFooter(self):
-		print ''
-		print '#if defined(GLX_USE_TLS) && defined(__linux__)'
-		print '	.section ".note.ABI-tag", "a"'
-		print '	.p2align 2'
-		print '	.long	1f - 0f   /* name length */'
-		print '	.long	3f - 2f   /* data length */'
-		print '	.long	1         /* note length */'
-		print '0:	.asciz "GNU"      /* vendor name */'
-		print '1:	.p2align 2'
-		print '2:	.long	0         /* note data: the ABI tag */'
-		print '	.long	2,4,20    /* Minimum kernel version w/TLS */'
-		print '3:	.p2align 2        /* pad out section */'
-		print '#endif /* GLX_USE_TLS */'
-		print ''
-		print '#if defined (__ELF__) && defined (__linux__)'
-		print '	.section .note.GNU-stack,"",%progbits'
-		print '#endif'
-		return
-
-
-	def printFunction(self, f):
-		
-		# The x86-64 ABI divides function parameters into a couple
-		# classes.  For the OpenGL interface, the only ones that are
-		# relevent are INTEGER and SSE.  Basically, the first 8
-		# GLfloat or GLdouble parameters are placed in %xmm0 - %xmm7,
-		# the first 6 non-GLfloat / non-GLdouble parameters are placed
-		# in registers listed in int_parameters.
-		#
-		# If more parameters than that are required, they are passed
-		# on the stack.  Therefore, we just have to make sure that
-		# %esp hasn't changed when we jump to the actual function.
-		# Since we're jumping to the function (and not calling it), we
-		# have to make sure of that anyway!
-
-		int_parameters = ["%rdi", "%rsi", "%rdx", "%rcx", "%r8", "%r9"]
-
-		int_class = 0
-		sse_class = 0
-		stack_offset = 0
-		registers = []
-		for p in f.parameterIterator():
-			type_name = p.get_base_type_string()
-
-			if p.is_pointer() or (type_name != "GLfloat" and type_name != "GLdouble"):
-				if int_class < 6:
-					registers.append( [int_parameters[int_class], stack_offset] )
-					int_class += 1
-					stack_offset += 8
-			else:
-				if sse_class < 8:
-					registers.append( ["%%xmm%u" % (sse_class), stack_offset] )
-					sse_class += 1
-					stack_offset += 8
-
-		if ((int_class & 1) == 0) and (sse_class == 0):
-			registers.append( ["%rbp", 0] )
-
-
-		name = f.dispatch_name()
-
-		print '\t.p2align\t4,,15'
-		print '\t.globl\tGL_PREFIX(%s)' % (name)
-		print '\t.type\tGL_PREFIX(%s), @function' % (name)
-		if not f.is_static_entry_point(f.name):
-			print '\tHIDDEN(GL_PREFIX(%s))' % (name)
-		print 'GL_PREFIX(%s):' % (name)
-		print '#if defined(GLX_USE_TLS)'
-		print '\tcall\t_x86_64_get_dispatch@PLT'
-		print '\tmovq\t%u(%%rax), %%r11' % (f.offset * 8)
-		print '\tjmp\t*%r11'
-		print '#elif defined(PTHREADS)'
-		
-		save_all_regs(registers)
-		print '\tcall\t_x86_64_get_dispatch@PLT'
-		restore_all_regs(registers)
-
-		if f.offset == 0:
-			print '\tmovq\t(%rax), %r11'
-		else:
-			print '\tmovq\t%u(%%rax), %%r11' % (f.offset * 8)
-
-		print '\tjmp\t*%r11'
-
-		print '#else'
-		print '\tmovq\t_glapi_Dispatch(%rip), %rax'
-		print '\ttestq\t%rax, %rax'
-		print '\tje\t1f'
-		print '\tmovq\t%u(%%rax), %%r11' % (f.offset * 8)
-		print '\tjmp\t*%r11'
-		print '1:'
-
-		save_all_regs(registers)
-		print '\tcall\t_glapi_get_dispatch'
-		restore_all_regs(registers)
-
-		print '\tmovq\t%u(%%rax), %%r11' % (f.offset * 8)
-		print '\tjmp\t*%r11'
-		print '#endif /* defined(GLX_USE_TLS) */'
-
-		print '\t.size\tGL_PREFIX(%s), .-GL_PREFIX(%s)' % (name, name)
-		print ''
-		return
-
-
-	def printBody(self, api):
-		for f in api.functionIterateByOffset():
-			self.printFunction(f)
-
-
-		for f in api.functionIterateByOffset():
-			dispatch = f.dispatch_name()
-			for n in f.entry_points:
-				if n != f.name:
-					if f.is_static_entry_point(n):
-						text = '\t.globl GL_PREFIX(%s) ; .set GL_PREFIX(%s), GL_PREFIX(%s)' % (n, n, dispatch)
-
-						if f.has_different_protocol(n):
-							print '#ifndef GLX_INDIRECT_RENDERING'
-							print text
-							print '#endif'
-						else:
-							print text
-
-		return
-
-def show_usage():
-	print "Usage: %s [-f input_file_name] [-m output_mode]" % sys.argv[0]
-	sys.exit(1)
-
-if __name__ == '__main__':
-	file_name = "gl_API.xml"
-	mode = "generic"
-
-	try:
-		(args, trail) = getopt.getopt(sys.argv[1:], "m:f:")
-	except Exception,e:
-		show_usage()
-
-	for (arg,val) in args:
-		if arg == '-m':
-			mode = val
-		elif arg == "-f":
-			file_name = val
-
-	if mode == "generic":
-		printer = PrintGenericStubs()
-	else:
-		print "ERROR: Invalid mode \"%s\" specified." % mode
-		show_usage()
-
-	api = gl_XML.parse_GL_API(file_name, glX_XML.glx_item_factory())
-	printer.Print(api)
diff --git a/src/mesa/glapi/gl_x86_asm.py b/src/mesa/glapi/gl_x86_asm.py
deleted file mode 100644
index d210f3a248..0000000000
--- a/src/mesa/glapi/gl_x86_asm.py
+++ /dev/null
@@ -1,270 +0,0 @@
-#!/usr/bin/env python
-
-# (C) Copyright IBM Corporation 2004, 2005
-# All Rights Reserved.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# on the rights to use, copy, modify, merge, publish, distribute, sub
-# license, and/or sell copies of the Software, and to permit persons to whom
-# the Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
-# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-#
-# Authors:
-#    Ian Romanick <idr@us.ibm.com>
-
-import license
-import gl_XML, glX_XML
-import sys, getopt
-
-class PrintGenericStubs(gl_XML.gl_print_base):
-
-	def __init__(self):
-		gl_XML.gl_print_base.__init__(self)
-
-		self.name = "gl_x86_asm.py (from Mesa)"
-		self.license = license.bsd_license_template % ( \
-"""Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
-(C) Copyright IBM Corporation 2004, 2005""", "BRIAN PAUL, IBM")
-		return
-
-
-	def get_stack_size(self, f):
-		size = 0
-		for p in f.parameterIterator():
-			if p.is_padding:
-				continue
-
-			size += p.get_stack_size()
-
-		return size
-
-
-	def printRealHeader(self):
-		print '#include "x86/assyntax.h"'
-		print '#include "glapi/glapioffsets.h"'
-		print ''
-		print '#if defined(STDCALL_API)'
-		print '# if defined(USE_MGL_NAMESPACE)'
-		print '#  define GL_PREFIX(n,n2) GLNAME(CONCAT(mgl,n2))'
-		print '# else'
-		print '#  define GL_PREFIX(n,n2) GLNAME(CONCAT(gl,n2))'
-		print '# endif'
-		print '#else'
-		print '# if defined(USE_MGL_NAMESPACE)'
-		print '#  define GL_PREFIX(n,n2) GLNAME(CONCAT(mgl,n))'
-		print '#  define _glapi_Dispatch _mglapi_Dispatch'
-		print '# else'
-		print '#  define GL_PREFIX(n,n2) GLNAME(CONCAT(gl,n))'
-		print '# endif'
-		print '#endif'
-		print ''
-		print '#define GL_OFFSET(x) CODEPTR(REGOFF(4 * x, EAX))'
-		print ''
-		print '#if defined(GNU_ASSEMBLER) && !defined(__DJGPP__) && !defined(__MINGW32__) && !defined(__APPLE__)'
-		print '#define GLOBL_FN(x) GLOBL x ; .type x, function'
-		print '#else'
-		print '#define GLOBL_FN(x) GLOBL x'
-		print '#endif'
-		print ''
-		print '#if defined(PTHREADS) || defined(SOLARIS_THREADS) || defined(WIN32_THREADS) || defined(BEOS_THREADS)'
-		print '#  define THREADS'
-		print '#endif'
-		print ''
-		print '#ifdef GLX_USE_TLS'
-		print ''
-		print '#ifdef GLX_X86_READONLY_TEXT'
-		print '# define CTX_INSNS MOV_L(GS:(EAX), EAX)'
-		print '#else'
-		print '# define CTX_INSNS NOP /* Pad for init_glapi_relocs() */'
-		print '#endif'
-		print ''
-		print '#  define GL_STUB(fn,off,fn_alt)\t\t\t\\'
-		print 'ALIGNTEXT16;\t\t\t\t\t\t\\'
-		print 'GLOBL_FN(GL_PREFIX(fn, fn_alt));\t\t\t\\'
-		print 'GL_PREFIX(fn, fn_alt):\t\t\t\t\t\\'
-		print '\tCALL(_x86_get_dispatch) ;\t\t\t\\'
-		print '\tCTX_INSNS ;					\\'
-		print '\tJMP(GL_OFFSET(off))'
-		print ''
-		print '#elif defined(PTHREADS)'
-		print '#  define GL_STUB(fn,off,fn_alt)\t\t\t\\'
-		print 'ALIGNTEXT16;\t\t\t\t\t\t\\'
-		print 'GLOBL_FN(GL_PREFIX(fn, fn_alt));\t\t\t\\'
-		print 'GL_PREFIX(fn, fn_alt):\t\t\t\t\t\\'
-		print '\tMOV_L(CONTENT(GLNAME(_glapi_Dispatch)), EAX) ;\t\\'
-		print '\tTEST_L(EAX, EAX) ;\t\t\t\t\\'
-		print '\tJE(1f) ;\t\t\t\t\t\\'
-		print '\tJMP(GL_OFFSET(off)) ;\t\t\t\t\\'
-		print '1:\tCALL(_x86_get_dispatch) ;\t\t\t\\'
-		print '\tJMP(GL_OFFSET(off))'
-		print '#elif defined(THREADS)'
-		print '#  define GL_STUB(fn,off,fn_alt)\t\t\t\\'
-		print 'ALIGNTEXT16;\t\t\t\t\t\t\\'
-		print 'GLOBL_FN(GL_PREFIX(fn, fn_alt));\t\t\t\\'
-		print 'GL_PREFIX(fn, fn_alt):\t\t\t\t\t\\'
-		print '\tMOV_L(CONTENT(GLNAME(_glapi_Dispatch)), EAX) ;\t\\'
-		print '\tTEST_L(EAX, EAX) ;\t\t\t\t\\'
-		print '\tJE(1f) ;\t\t\t\t\t\\'
-		print '\tJMP(GL_OFFSET(off)) ;\t\t\t\t\\'
-		print '1:\tCALL(_glapi_get_dispatch) ;\t\t\t\\'
-		print '\tJMP(GL_OFFSET(off))'
-		print '#else /* Non-threaded version. */'
-		print '#  define GL_STUB(fn,off,fn_alt)\t\t\t\\'
-		print 'ALIGNTEXT16;\t\t\t\t\t\t\\'
-		print 'GLOBL_FN(GL_PREFIX(fn, fn_alt));\t\t\t\\'
-		print 'GL_PREFIX(fn, fn_alt):\t\t\t\t\t\\'
-		print '\tMOV_L(CONTENT(GLNAME(_glapi_Dispatch)), EAX) ;\t\\'
-		print '\tJMP(GL_OFFSET(off))'
-		print '#endif'
-		print ''
-		print '#ifdef HAVE_ALIAS'
-		print '#  define GL_STUB_ALIAS(fn,off,fn_alt,alias,alias_alt)\t\\'
-		print '\t.globl\tGL_PREFIX(fn, fn_alt) ;\t\t\t\\'
-		print '\t.set\tGL_PREFIX(fn, fn_alt), GL_PREFIX(alias, alias_alt)'
-		print '#else'
-		print '#  define GL_STUB_ALIAS(fn,off,fn_alt,alias,alias_alt)\t\\'
-		print '    GL_STUB(fn, off, fn_alt)'
-		print '#endif'
-		print ''
-		print 'SEG_TEXT'
-		print ''
-		print '#ifdef GLX_USE_TLS'
-		print ''
-		print '\tGLOBL\tGLNAME(_x86_get_dispatch)'
-		print '\tHIDDEN(GLNAME(_x86_get_dispatch))'
-		print 'ALIGNTEXT16'
-		print 'GLNAME(_x86_get_dispatch):'
-		print '\tcall	1f'
-		print '1:\tpopl	%eax'
-		print '\taddl	$_GLOBAL_OFFSET_TABLE_+[.-1b], %eax'
-		print '\tmovl	_glapi_tls_Dispatch@GOTNTPOFF(%eax), %eax'
-		print '\tret'
-		print ''
-		print '#elif defined(PTHREADS)'
-		print 'EXTERN GLNAME(_glapi_Dispatch)'
-		print 'EXTERN GLNAME(_gl_DispatchTSD)'
-		print 'EXTERN GLNAME(pthread_getspecific)'
-		print ''
-		print 'ALIGNTEXT16'
-		print 'GLNAME(_x86_get_dispatch):'
-		print '\tSUB_L(CONST(24), ESP)'
-		print '\tPUSH_L(GLNAME(_gl_DispatchTSD))'
-		print '\tCALL(GLNAME(pthread_getspecific))'
-		print '\tADD_L(CONST(28), ESP)'
-		print '\tRET'
-		print '#elif defined(THREADS)'
-		print 'EXTERN GLNAME(_glapi_get_dispatch)'
-		print '#endif'
-		print ''
-
-		print '#if defined( GLX_USE_TLS ) && !defined( GLX_X86_READONLY_TEXT )'
-		print '\t\t.section\twtext, "awx", @progbits'
-		print '#endif /* defined( GLX_USE_TLS ) */'
-
-		print ''
-		print '\t\tALIGNTEXT16'
-		print '\t\tGLOBL GLNAME(gl_dispatch_functions_start)'
-		print '\t\tHIDDEN(GLNAME(gl_dispatch_functions_start))'
-		print 'GLNAME(gl_dispatch_functions_start):'
-		print ''
-		return
-
-
-	def printRealFooter(self):
-		print ''
-		print '\t\tGLOBL\tGLNAME(gl_dispatch_functions_end)'
-		print '\t\tHIDDEN(GLNAME(gl_dispatch_functions_end))'
-		print '\t\tALIGNTEXT16'
-		print 'GLNAME(gl_dispatch_functions_end):'
-		print ''
-		print '#if defined(GLX_USE_TLS) && defined(__linux__)'
-		print '	.section ".note.ABI-tag", "a"'
-		print '	.p2align 2'
-		print '	.long	1f - 0f   /* name length */'
-		print '	.long	3f - 2f   /* data length */'
-		print '	.long	1         /* note length */'
-		print '0:	.asciz "GNU"      /* vendor name */'
-		print '1:	.p2align 2'
-		print '2:	.long	0         /* note data: the ABI tag */'
-		print '	.long	2,4,20    /* Minimum kernel version w/TLS */'
-		print '3:	.p2align 2        /* pad out section */'
-		print '#endif /* GLX_USE_TLS */'
-		print ''
-		print '#if defined (__ELF__) && defined (__linux__)'
-		print '	.section .note.GNU-stack,"",%progbits'
-		print '#endif'
-		return
-
-
-	def printBody(self, api):
-		for f in api.functionIterateByOffset():
-			name = f.dispatch_name()
-			stack = self.get_stack_size(f)
-			alt = "%s@%u" % (name, stack)
-
-			print '\tGL_STUB(%s, _gloffset_%s, %s)' % (name, f.name, alt)
-
-			if not f.is_static_entry_point(f.name):
-				print '\tHIDDEN(GL_PREFIX(%s, %s))' % (name, alt)
-
-
-		for f in api.functionIterateByOffset():
-			name = f.dispatch_name()
-			stack = self.get_stack_size(f)
-			alt = "%s@%u" % (name, stack)
-
-			if f.is_static_entry_point(f.name):
-				for n in f.entry_points:
-					if n != f.name:
-						alt2 = "%s@%u" % (n, stack)
-						text = '\tGL_STUB_ALIAS(%s, _gloffset_%s, %s, %s, %s)' % (n, f.name, alt2, f.name, alt)
-
-						if f.has_different_protocol(n):
-							print '#ifndef GLX_INDIRECT_RENDERING'
-							print text
-							print '#endif'
-						else:
-							print text
-
-		return
-
-def show_usage():
-	print "Usage: %s [-f input_file_name] [-m output_mode]" % sys.argv[0]
-	sys.exit(1)
-
-if __name__ == '__main__':
-	file_name = "gl_API.xml"
-	mode = "generic"
-
-	try:
-		(args, trail) = getopt.getopt(sys.argv[1:], "m:f:")
-	except Exception,e:
-		show_usage()
-
-	for (arg,val) in args:
-		if arg == '-m':
-			mode = val
-		elif arg == "-f":
-			file_name = val
-
-	if mode == "generic":
-		printer = PrintGenericStubs()
-	else:
-		print "ERROR: Invalid mode \"%s\" specified." % mode
-		show_usage()
-
-	api = gl_XML.parse_GL_API(file_name, glX_XML.glx_item_factory())
-	printer.Print(api)
diff --git a/src/mesa/glapi/license.py b/src/mesa/glapi/license.py
deleted file mode 100644
index 02181648e4..0000000000
--- a/src/mesa/glapi/license.py
+++ /dev/null
@@ -1,47 +0,0 @@
-# (C) Copyright IBM Corporation 2004
-# All Rights Reserved.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# on the rights to use, copy, modify, merge, publish, distribute, sub
-# license, and/or sell copies of the Software, and to permit persons to whom
-# the Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
-# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-#
-# Authors:
-#    Ian Romanick <idr@us.ibm.com>
-
-bsd_license_template = """%s
-All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the "Software"),
-to deal in the Software without restriction, including without limitation
-the rights to use, copy, modify, merge, publish, distribute, sub license,
-and/or sell copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice (including the next
-paragraph) shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
-%s,
-AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
-OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.""" 
diff --git a/src/mesa/glapi/mesadef.py b/src/mesa/glapi/mesadef.py
deleted file mode 100644
index 38b0246ba5..0000000000
--- a/src/mesa/glapi/mesadef.py
+++ /dev/null
@@ -1,216 +0,0 @@
-#!/usr/bin/env python
-
-
-# Mesa 3-D graphics library
-# Version:  4.1
-# 
-# Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
-# 
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# the rights to use, copy, modify, merge, publish, distribute, sublicense,
-# and/or sell copies of the Software, and to permit persons to whom the
-# Software is furnished to do so, subject to the following conditions:
-# 
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-# 
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
-# BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-
-# Generate the mesa.def file for Windows.
-#
-# Usage:
-#    mesadef.py >mesa.def
-#    Then copy to src/mesa/drivers/windows/gdi
-#
-# Dependencies:
-#    The apispec file must be in the current directory.
-
-
-
-import apiparser
-import string
-
-
-def PrintHead():
-	print '; DO NOT EDIT - This file generated automatically by mesadef.py script'
-	print 'DESCRIPTION \'Mesa (OpenGL work-alike) for Win32\''
-	print 'VERSION 6.0'
-	print ';'
-	print '; Module definition file for Mesa (OPENGL32.DLL)'
-	print ';'
-	print '; Note: The OpenGL functions use the STDCALL'
-	print '; function calling convention.  Microsoft\'s'
-	print '; OPENGL32 uses this convention and so must the'
-	print '; Mesa OPENGL32 so that the Mesa DLL can be used'
-	print '; as a drop-in replacement.'
-	print ';'
-	print '; The linker exports STDCALL entry points with'
-	print '; \'decorated\' names; e.g., _glBegin@0, where the'
-	print '; trailing number is the number of bytes of '
-	print '; parameter data pushed onto the stack.  The'
-	print '; callee is responsible for popping this data'
-	print '; off the stack, usually via a RETF n instruction.'
-	print ';'
-	print '; However, the Microsoft OPENGL32.DLL does not export'
-	print '; the decorated names, even though the calling convention'
-	print '; is STDCALL.  So, this module definition file is'
-	print '; needed to force the Mesa OPENGL32.DLL to export the'
-	print '; symbols in the same manner as the Microsoft DLL.'
-	print '; Were it not for this problem, this file would not'
-	print '; be needed (for the gl* functions) since the entry'
-	print '; points are compiled with dllexport declspec.'
-	print ';'
-	print '; However, this file is still needed to export "internal"'
-	print '; Mesa symbols for the benefit of the OSMESA32.DLL.'
-	print ';'
-	print 'EXPORTS'
-	return
-#enddef
-
-
-def PrintTail():
-	print ';'
-	print '; WGL API'
-	print '\twglChoosePixelFormat'
-	print '\twglCopyContext'
-	print '\twglCreateContext'
-	print '\twglCreateLayerContext'
-	print '\twglDeleteContext'
-	print '\twglDescribeLayerPlane'
-	print '\twglDescribePixelFormat'
-	print '\twglGetCurrentContext'
-	print '\twglGetCurrentDC'
-	print '\twglGetExtensionsStringARB'
-	print '\twglGetLayerPaletteEntries'
-	print '\twglGetPixelFormat'
-	print '\twglGetProcAddress'
-	print '\twglMakeCurrent'
-	print '\twglRealizeLayerPalette'
-	print '\twglSetLayerPaletteEntries'
-	print '\twglSetPixelFormat'
-	print '\twglShareLists'
-	print '\twglSwapBuffers'
-	print '\twglSwapLayerBuffers'
-	print '\twglUseFontBitmapsA'
-	print '\twglUseFontBitmapsW'
-	print '\twglUseFontOutlinesA'
-	print '\twglUseFontOutlinesW'
-	print ';'
-	print '; Mesa internals - mostly for OSMESA'
-	print '\t_ac_CreateContext'
-	print '\t_ac_DestroyContext'
-	print '\t_ac_InvalidateState'
-	print '\t_glapi_get_context'
-	print '\t_glapi_get_proc_address'
-	print '\t_mesa_buffer_data'
-	print '\t_mesa_buffer_map'
-	print '\t_mesa_buffer_subdata'
-	print '\t_mesa_choose_tex_format'
-	print '\t_mesa_compressed_texture_size'
-	print '\t_mesa_create_framebuffer'
-	print '\t_mesa_create_visual'
-	print '\t_mesa_delete_buffer_object'
-	print '\t_mesa_delete_texture_object'
-	print '\t_mesa_destroy_framebuffer'
-	print '\t_mesa_destroy_visual'
-	print '\t_mesa_enable_1_3_extensions'
-	print '\t_mesa_enable_1_4_extensions'
-	print '\t_mesa_enable_1_5_extensions'
-	print '\t_mesa_enable_sw_extensions'
-	print '\t_mesa_error'
-	print '\t_mesa_free_context_data'
-	print '\t_mesa_get_current_context'
-	print '\t_mesa_init_default_imports'
-	print '\t_mesa_initialize_context'
-	print '\t_mesa_make_current'
-	print '\t_mesa_new_buffer_object'
-	print '\t_mesa_new_texture_object'
-	print '\t_mesa_problem'
-	print '\t_mesa_ResizeBuffersMESA'
-	print '\t_mesa_store_compressed_teximage1d'
-	print '\t_mesa_store_compressed_teximage2d'
-	print '\t_mesa_store_compressed_teximage3d'
-	print '\t_mesa_store_compressed_texsubimage1d'
-	print '\t_mesa_store_compressed_texsubimage2d'
-	print '\t_mesa_store_compressed_texsubimage3d'
-	print '\t_mesa_store_teximage1d'
-	print '\t_mesa_store_teximage2d'
-	print '\t_mesa_store_teximage3d'
-	print '\t_mesa_store_texsubimage1d'
-	print '\t_mesa_store_texsubimage2d'
-	print '\t_mesa_store_texsubimage3d'
-	print '\t_mesa_test_proxy_teximage'
-	print '\t_mesa_Viewport'
-	print '\t_mesa_meta_CopyColorSubTable'
-	print '\t_mesa_meta_CopyColorTable'
-	print '\t_mesa_meta_CopyConvolutionFilter1D'
-	print '\t_mesa_meta_CopyConvolutionFilter2D'
-	print '\t_mesa_meta_CopyTexImage1D'
-	print '\t_mesa_meta_CopyTexImage2D'
-	print '\t_mesa_meta_CopyTexSubImage1D'
-	print '\t_mesa_meta_CopyTexSubImage2D'
-	print '\t_mesa_meta_CopyTexSubImage3D'
-	print '\t_swrast_Accum'
-	print '\t_swrast_alloc_buffers'
-	print '\t_swrast_Bitmap'
-	print '\t_swrast_CopyPixels'
-	print '\t_swrast_DrawPixels'
-	print '\t_swrast_GetDeviceDriverReference'
-	print '\t_swrast_Clear'
-	print '\t_swrast_choose_line'
-	print '\t_swrast_choose_triangle'
-	print '\t_swrast_CreateContext'
-	print '\t_swrast_DestroyContext'
-	print '\t_swrast_InvalidateState'
-	print '\t_swrast_ReadPixels'
-	print '\t_swrast_zbuffer_address'
-	print '\t_swsetup_Wakeup'
-	print '\t_swsetup_CreateContext'
-	print '\t_swsetup_DestroyContext'
-	print '\t_swsetup_InvalidateState'
-	print '\t_tnl_CreateContext'
-	print '\t_tnl_DestroyContext'
-	print '\t_tnl_InvalidateState'
-	print '\t_tnl_MakeCurrent'
-	print '\t_tnl_run_pipeline'
-#enddef
-
-
-records = []
-
-def FindOffset(funcName):
-	for (name, alias, offset) in records:
-		if name == funcName:
-			return offset
-		#endif
-	#endfor
-	return -1
-#enddef
-
-
-def EmitEntry(name, returnType, argTypeList, argNameList, alias, offset):
-	if alias == '':
-		dispatchName = name
-	else:
-		dispatchName = alias
-	if offset < 0:
-		offset = FindOffset(dispatchName)
-	if offset >= 0 and string.find(name, "unused") == -1:
-		print '\tgl%s' % (name)
-		# save this info in case we need to look up an alias later
-		records.append((name, dispatchName, offset))
-
-#enddef
-
-
-PrintHead()
-apiparser.ProcessSpecFile("APIspec", EmitEntry)
-PrintTail()
diff --git a/src/mesa/glapi/next_available_offset.sh b/src/mesa/glapi/next_available_offset.sh
deleted file mode 100755
index e7d6c2f4af..0000000000
--- a/src/mesa/glapi/next_available_offset.sh
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/usr/bin/env bash
-#
-# (C) Copyright IBM Corporation 2004
-# All Rights Reserved.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# on the rights to use, copy, modify, merge, publish, distribute, sub
-# license, and/or sell copies of the Software, and to permit persons to whom
-# the Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
-# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-#
-# Authors:
-#    Ian Romanick <idr@us.ibm.com>
-
-# Trivial shell script to search the API definition file and print out the
-# next numerically available API entry-point offset.  This could probably
-# be made smarter, but it would be better to use the existin Python
-# framework to do that.  This is just a quick-and-dirty hack.
-
-num=$(grep 'offset="' gl_API.xml |\
-    sed 's/.\+ offset="//g;s/".*$//g' |\
-    grep -v '?' |\
-    sort -rn |\
-    head -1)
-    
-echo $((num + 1))
diff --git a/src/mesa/glapi/remap_helper.py b/src/mesa/glapi/remap_helper.py
deleted file mode 100644
index d93c7a4285..0000000000
--- a/src/mesa/glapi/remap_helper.py
+++ /dev/null
@@ -1,226 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2009 Chia-I Wu <olv@0xlab.org>
-# All Rights Reserved.
-#
-# This is based on extension_helper.py by Ian Romanick.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# on the rights to use, copy, modify, merge, publish, distribute, sub
-# license, and/or sell copies of the Software, and to permit persons to whom
-# the Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
-# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-import gl_XML
-import license
-import sys, getopt, string
-
-def get_function_spec(func):
-	sig = ""
-	# derive parameter signature
-	for p in func.parameterIterator():
-		if p.is_padding:
-			continue
-		# FIXME: This is a *really* ugly hack. :(
-		tn = p.type_expr.get_base_type_node()
-		if p.is_pointer():
-			sig += 'p'
-		elif tn.integer:
-			sig += 'i'
-		elif tn.size == 4:
-			sig += 'f'
-		else:
-			sig += 'd'
-
-	spec = [sig]
-	for ent in func.entry_points:
-		spec.append("gl" + ent)
-
-	# spec is terminated by an empty string
-	spec.append('')
-
-	return spec
-
-class PrintGlRemap(gl_XML.gl_print_base):
-	def __init__(self):
-		gl_XML.gl_print_base.__init__(self)
-
-		self.name = "remap_helper.py (from Mesa)"
-		self.license = license.bsd_license_template % ("Copyright (C) 2009 Chia-I Wu <olv@0xlab.org>", "Chia-I Wu")
-		return
-
-
-	def printRealHeader(self):
-		print '#include "glapi/dispatch.h"'
-		print ''
-		return
-
-
-	def printBody(self, api):
-		print 'struct gl_function_remap {'
-		print '   GLint func_index;'
-		print '   GLint dispatch_offset; /* for sanity check */'
-		print '};'
-		print ''
-
-		pool_indices = {}
-
-		print '/* this is internal to remap.c */'
-		print '#ifdef need_MESA_remap_table'
-		print ''
-		print 'static const char _mesa_function_pool[] ='
-
-		# output string pool
-		index = 0;
-		for f in api.functionIterateAll():
-			pool_indices[f] = index
-
-			spec = get_function_spec(f)
-
-			# a function has either assigned offset, fixed offset,
-			# or no offset
-			if f.assign_offset:
-				comments = "will be remapped"
-			elif f.offset > 0:
-				comments = "offset %d" % f.offset
-			else:
-				comments = "dynamic"
-
-			print '   /* _mesa_function_pool[%d]: %s (%s) */' \
-					% (index, f.name, comments)
-			for line in spec:
-				print '   "%s\\0"' % line
-				index += len(line) + 1
-		print '   ;'
-		print ''
-
-		print '/* these functions need to be remapped */'
-		print 'static const struct {'
-		print '   GLint pool_index;'
-		print '   GLint remap_index;'
-		print '} MESA_remap_table_functions[] = {'
-		# output all functions that need to be remapped
-		# iterate by offsets so that they are sorted by remap indices
-		for f in api.functionIterateByOffset():
-			if not f.assign_offset:
-				continue
-			print '   { %5d, %s_remap_index },' \
-					% (pool_indices[f], f.name)
-		print '   {    -1, -1 }'
-		print '};'
-		print ''
-
-		# collect functions by versions/extensions
-		extension_functions = {}
-		abi_extensions = []
-		for f in api.functionIterateAll():
-			for n in f.entry_points:
-				category, num = api.get_category_for_name(n)
-				# consider only GL_VERSION_X_Y or extensions
-				c = gl_XML.real_category_name(category)
-				if c.startswith("GL_"):
-					if not extension_functions.has_key(c):
-						extension_functions[c] = []
-					extension_functions[c].append(f)
-					# remember the ext names of the ABI
-					if (f.is_abi() and n == f.name and
-						c not in abi_extensions):
-						abi_extensions.append(c)
-		# ignore the ABI itself
-		for ext in abi_extensions:
-			extension_functions.pop(ext)
-
-		extensions = extension_functions.keys()
-		extensions.sort()
-
-		# output ABI functions that have alternative names (with ext suffix)
-		print '/* these functions are in the ABI, but have alternative names */'
-		print 'static const struct gl_function_remap MESA_alt_functions[] = {'
-		for ext in extensions:
-			funcs = []
-			for f in extension_functions[ext]:
-				# test if the function is in the ABI and has alt names
-				if f.is_abi() and len(f.entry_points) > 1:
-					funcs.append(f)
-			if not funcs:
-				continue
-			print '   /* from %s */' % ext
-			for f in funcs:
-				print '   { %5d, _gloffset_%s },' \
-						% (pool_indices[f], f.name)
-		print '   {    -1, -1 }'
-		print '};'
-		print ''
-
-		print '#endif /* need_MESA_remap_table */'
-		print ''
-
-		# output remap helpers for DRI drivers
-
-		for ext in extensions:
-			funcs = []
-			remapped = []
-			for f in extension_functions[ext]:
-				if f.assign_offset:
-					# these are handled above
-					remapped.append(f)
-				else:
-					# these functions are either in the
-					# abi, or have offset -1
-					funcs.append(f)
-
-			print '#if defined(need_%s)' % (ext)
-			if remapped:
-				print '/* functions defined in MESA_remap_table_functions are excluded */'
-
-			# output extension functions that need to be mapped
-			print 'static const struct gl_function_remap %s_functions[] = {' % (ext)
-			for f in funcs:
-				if f.offset >= 0:
-					print '   { %5d, _gloffset_%s },' \
-							% (pool_indices[f], f.name)
-				else:
-					print '   { %5d, -1 }, /* %s */' % \
-							(pool_indices[f], f.name)
-			print '   {    -1, -1 }'
-			print '};'
-
-			print '#endif'
-			print ''
-
-		return
-
-
-def show_usage():
-	print "Usage: %s [-f input_file_name]" % sys.argv[0]
-	sys.exit(1)
-
-if __name__ == '__main__':
-	file_name = "gl_API.xml"
-
-	try:
-		(args, trail) = getopt.getopt(sys.argv[1:], "f:")
-	except Exception,e:
-		show_usage()
-
-	for (arg,val) in args:
-		if arg == "-f":
-			file_name = val
-
-	api = gl_XML.parse_GL_API( file_name )
-
-	printer = PrintGlRemap()
-	printer.Print( api )
diff --git a/src/mesa/glapi/typeexpr.py b/src/mesa/glapi/typeexpr.py
deleted file mode 100644
index 8ba7de4862..0000000000
--- a/src/mesa/glapi/typeexpr.py
+++ /dev/null
@@ -1,292 +0,0 @@
-#!/usr/bin/env python
-
-# (C) Copyright IBM Corporation 2005
-# All Rights Reserved.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# on the rights to use, copy, modify, merge, publish, distribute, sub
-# license, and/or sell copies of the Software, and to permit persons to whom
-# the Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
-# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-#
-# Authors:
-#    Ian Romanick <idr@us.ibm.com>
-
-import string, copy
-
-class type_node:
-	def __init__(self):
-		self.pointer = 0  # bool
-		self.const = 0    # bool
-		self.signed = 1   # bool
-		self.integer = 1  # bool
-
-		# If elements is set to non-zero, then field is an array.
-		self.elements = 0
-
-		self.name = None
-		self.size = 0     # type's size in bytes
-		return
-
-
-	def string(self):
-		"""Return string representation of this type_node."""
-		s = ""
-		
-		if self.pointer:
-			s = "* "
-
-		if self.const:
-			s += "const "
-
-		if not self.pointer:
-			if self.integer:
-				if self.signed:
-					s += "signed "
-				else:
-					s += "unsigned "
-
-			if self.name:
-				s += "%s " % (self.name)
-
-		return s
-
-
-class type_table:
-	def __init__(self):
-		self.types_by_name = {}
-		return
-
-
-	def add_type(self, type_expr):
-		self.types_by_name[ type_expr.get_base_name() ] = type_expr
-		return
-
-
-	def find_type(self, name):
-		if name in self.types_by_name:
-			return self.types_by_name[ name ]
-		else:
-			return None
-
-
-def create_initial_types():
-	tt = type_table()
-
-	basic_types = [
-		("char",   1, 1),
-		("short",  2, 1),
-		("int",    4, 1),
-		("long",   4, 1),
-		("float",  4, 0),
-		("double", 8, 0),
-		("enum",   4, 1)
-	]
-
-	for (type_name, type_size, integer) in basic_types:
-		te = type_expression(None)
-		tn = type_node()
-		tn.name = type_name
-		tn.size = type_size
-		tn.integer = integer
-		te.expr.append(tn)
-		tt.add_type( te )
-
-	type_expression.built_in_types = tt
-	return
-
-
-class type_expression:
-	built_in_types = None
-
-	def __init__(self, type_string, extra_types = None):
-		self.expr = []
-
-		if not type_string:
-			return
-
-		self.original_string = type_string
-
-		if not type_expression.built_in_types:
-			raise RuntimeError("create_initial_types must be called before creating type_expression objects.")
-
-		# Replace '*' with ' * ' in type_string.  Then, split the string
-		# into tokens, separated by spaces.
-		tokens = string.split( string.replace( type_string, "*", " * " ) )
-
-		const = 0
-		t = None
-		signed = 0
-		unsigned = 0
-
-		for i in tokens:
-			if i == "const":
-				if t and t.pointer:
-					t.const = 1
-				else:
-					const = 1
-			elif i == "signed":
-				signed = 1
-			elif i == "unsigned":
-				unsigned = 1
-			elif i == "*":
-				# This is a quirky special-case because of the
-				# way the C works for types.  If 'unsigned' is
-				# specified all by itself, it is treated the
-				# same as "unsigned int".
-
-				if unsigned:
-					self.set_base_type( "int", signed, unsigned, const, extra_types )
-					const = 0
-					signed = 0
-					unsigned = 0
-
-				if not self.expr:
-					raise RuntimeError("Invalid type expression (dangling pointer)")
-
-				if signed:
-					raise RuntimeError("Invalid type expression (signed / unsigned applied to pointer)")
-
-				t = type_node()
-				t.pointer = 1
-				self.expr.append( t )
-			else:
-				if self.expr:
-					raise RuntimeError('Invalid type expression (garbage after pointer qualifier -> "%s")' % (self.original_string))
-
-				self.set_base_type( i, signed, unsigned, const, extra_types )
-				const = 0
-				signed = 0
-				unsigned = 0
-
-			if signed and unsigned:
-				raise RuntimeError("Invalid type expression (both signed and unsigned specified)")
-				
-
-		if const:
-			raise RuntimeError("Invalid type expression (dangling const)")
-
-		if unsigned:
-			raise RuntimeError("Invalid type expression (dangling signed)")
-
-		if signed:
-			raise RuntimeError("Invalid type expression (dangling unsigned)")
-
-		return
-
-
-	def set_base_type(self, type_name, signed, unsigned, const, extra_types):
-		te = type_expression.built_in_types.find_type( type_name )
-		if not te:
-			te = extra_types.find_type( type_name )
-
-		if not te:
-			raise RuntimeError('Unknown base type "%s".' % (type_name))
-
-		self.expr = copy.deepcopy(te.expr)
-
-		t = self.expr[ len(self.expr) - 1 ]
-		t.const = const
-		if signed:
-			t.signed = 1
-		elif unsigned:
-			t.signed = 0
-
-
-	def set_base_type_node(self, tn):
-		self.expr = [tn]
-		return
-
-
-	def set_elements(self, count):
-		tn = self.expr[0]
-
-		tn.elements = count
-		return
-
-
-	def string(self):
-		s = ""
-		for t in self.expr:
-			s += t.string()
-
-		return s
-
-
-	def get_base_type_node(self):
-		return self.expr[0]
-
-
-	def get_base_name(self):
-		if len(self.expr):
-			return self.expr[0].name
-		else:
-			return None
-
-
-	def get_element_size(self):
-		tn = self.expr[0]
-
-		if tn.elements:
-			return tn.elements * tn.size
-		else:
-			return tn.size
-
-
-	def get_element_count(self):
-		tn = self.expr[0]
-		return tn.elements
-
-
-	def get_stack_size(self):
-		tn = self.expr[ len(self.expr) - 1 ]
-
-		if tn.elements or tn.pointer:
-			return 4
-		elif not tn.integer:
-			return tn.size
-		else:
-			return 4
-
-
-	def is_pointer(self):
-		tn = self.expr[ len(self.expr) - 1 ]
-		return tn.pointer
-
-
-	def format_string(self):
-		tn = self.expr[ len(self.expr) - 1 ]
-		if tn.pointer:
-			return "%p"
-		elif not tn.integer:
-			return "%f"
-		else:
-			return "%d"
-
-
-
-if __name__ == '__main__':
-	
-	types_to_try = [ "int", "int *", "const int *", "int * const", "const int * const", \
-	                 "unsigned * const *", \
-			 "float", "const double", "double * const"]
-
-	create_initial_types()
-
-	for t in types_to_try:
-		print 'Trying "%s"...' % (t)
-		te = type_expression( t )
-		print 'Got "%s" (%u, %u).' % (te.string(), te.get_stack_size(), te.get_element_size())
-- 
cgit v1.2.3


From ad520aaa87d30957ba5635cede1da828a5894105 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Mon, 22 Feb 2010 22:27:48 +0200
Subject: glapi: fix code generation Makefile after mv

---
 src/mesa/glapi/gen/Makefile | 191 +++++++++++++++++++++++++++-----------------
 1 file changed, 118 insertions(+), 73 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/gen/Makefile b/src/mesa/glapi/gen/Makefile
index da679607d7..6b6b9aecaa 100644
--- a/src/mesa/glapi/gen/Makefile
+++ b/src/mesa/glapi/gen/Makefile
@@ -4,49 +4,75 @@
 # up to him/her to re-run this makefile and check in the newly generated files.
 
 
-TOP = ../../..
+TOP = ../../../..
 include $(TOP)/configs/current
 
-OUTPUTS = glprocs.h glapitemp.h glapioffsets.h glapitable.h glapidispatch.h \
-	../main/enums.c \
-	../main/remap_helper.h \
-	../x86/glapi_x86.S \
-	../x86-64/glapi_x86-64.S \
-	../sparc/glapi_sparc.S \
-	../../glx/indirect.c \
-	../../glx/indirect.h \
-	../../glx/indirect_init.c \
-	../../glx/indirect_size.h \
-	../../glx/indirect_size.c
-
-
-GLX_DIR = $(XORG_BASE)/glx
-
-SERVER_GLAPI_FILES = \
-	$(GLX_DIR)/glapi.h \
-	$(GLX_DIR)/glapi.c \
-	$(GLX_DIR)/glapi_nop.c \
-	$(GLX_DIR)/glthread.c \
-	$(GLX_DIR)/glthread.h
-
-SERVER_OUTPUTS = \
-	$(GLX_DIR)/indirect_dispatch.c \
-	$(GLX_DIR)/indirect_dispatch_swap.c \
-	$(GLX_DIR)/indirect_dispatch.h \
-	$(GLX_DIR)/indirect_reqsize.c \
-	$(GLX_DIR)/indirect_reqsize.h \
-	$(GLX_DIR)/indirect_size.h \
-	$(GLX_DIR)/indirect_size_get.c \
-	$(GLX_DIR)/indirect_size_get.h \
-	$(GLX_DIR)/indirect_table.c \
-	$(GLX_DIR)/glapitemp.h \
-	$(GLX_DIR)/glapitable.h \
-	$(GLX_DIR)/glapioffsets.h \
-	$(GLX_DIR)/glapidispatch.h \
-	$(GLX_DIR)/glprocs.h \
-	$(SERVER_GLAPI_FILES)
-
-API_XML = gl_API.xml \
+MESA_DIR = $(TOP)/src/mesa
+MESA_GLAPI_DIR = $(TOP)/src/mesa/glapi
+MESA_GLX_DIR = $(TOP)/src/glx
+
+MESA_GLAPI_OUTPUTS = \
+	$(MESA_GLAPI_DIR)/glprocs.h \
+	$(MESA_GLAPI_DIR)/glapitemp.h \
+	$(MESA_GLAPI_DIR)/glapioffsets.h \
+	$(MESA_GLAPI_DIR)/glapitable.h \
+	$(MESA_GLAPI_DIR)/glapidispatch.h
+
+MESA_GLAPI_ASM_OUTPUTS = \
+	$(MESA_DIR)/x86/glapi_x86.S \
+	$(MESA_DIR)/x86-64/glapi_x86-64.S \
+	$(MESA_DIR)/sparc/glapi_sparc.S
+
+MESA_OUTPUTS = \
+	$(MESA_GLAPI_OUTPUTS) \
+	$(MESA_GLAPI_ASM_OUTPUTS) \
+	$(MESA_DIR)/main/enums.c \
+	$(MESA_DIR)/main/remap_helper.h \
+	$(MESA_GLX_DIR)/indirect.c \
+	$(MESA_GLX_DIR)/indirect.h \
+	$(MESA_GLX_DIR)/indirect_init.c \
+	$(MESA_GLX_DIR)/indirect_size.h \
+	$(MESA_GLX_DIR)/indirect_size.c
+
+######################################################################
+
+XORG_GLX_DIR = $(XORG_BASE)/glx
+
+XORG_GLAPI_FILES = \
+	$(XORG_GLX_DIR)/glapi.h \
+	$(XORG_GLX_DIR)/glapi.c \
+	$(XORG_GLX_DIR)/glapi_getproc.c \
+	$(XORG_GLX_DIR)/glapi_nop.c \
+	$(XORG_GLX_DIR)/glthread.c \
+	$(XORG_GLX_DIR)/glthread.h
+
+XORG_GLAPI_OUTPUTS = \
+	$(XORG_GLX_DIR)/glprocs.h \
+	$(XORG_GLX_DIR)/glapitemp.h \
+	$(XORG_GLX_DIR)/glapioffsets.h \
+	$(XORG_GLX_DIR)/glapitable.h \
+	$(XORG_GLX_DIR)/glapidispatch.h
+
+# XXX sync mesa and xorg glapi, generate in mesa only and just copy in glx/glapi
+#
+#	$(XORG_GLAPI_FILES) \
+#	$(XORG_GLAPI_OUTPUTS) \
+
+XORG_OUTPUTS = \
+	$(XORG_GLX_DIR)/indirect_dispatch.c \
+	$(XORG_GLX_DIR)/indirect_dispatch_swap.c \
+	$(XORG_GLX_DIR)/indirect_dispatch.h \
+	$(XORG_GLX_DIR)/indirect_reqsize.c \
+	$(XORG_GLX_DIR)/indirect_reqsize.h \
+	$(XORG_GLX_DIR)/indirect_size.h \
+	$(XORG_GLX_DIR)/indirect_size_get.c \
+	$(XORG_GLX_DIR)/indirect_size_get.h \
+	$(XORG_GLX_DIR)/indirect_table.c
+
+######################################################################
+
+API_XML = \
+	gl_API.xml \
 	ARB_copy_buffer.xml \
 	ARB_depth_clamp.xml \
 	ARB_draw_elements_base_vertex.xml \
@@ -63,96 +89,115 @@ API_XML = gl_API.xml \
 	EXT_texture_array.xml \
 	NV_conditional_render.xml
 
-COMMON = gl_XML.py glX_XML.py license.py $(API_XML) typeexpr.py
+COMMON = $(API_XML) gl_XML.py glX_XML.py license.py typeexpr.py
+
 COMMON_GLX = $(COMMON) glX_API.xml glX_XML.py glX_proto_common.py
 
-all: check-xorg-source $(OUTPUTS) $(SERVER_OUTPUTS)
+######################################################################
+
+all: mesa xorg
+
+mesa: $(MESA_OUTPUTS)
+
+xorg: check-xorg-source $(XORG_OUTPUTS)
 
 check-xorg-source:
-	@if ! test -d $(GLX_DIR); then \
+	@if ! test -d $(XORG_GLX_DIR); then \
 		echo "ERROR: Must specify path to xserver checkout; set XORG_BASE."; \
 		exit 1; \
 	fi
 
-$(GLX_DIR)/%.c: %.c
+clean:
+	-rm -f *~ *.pyo
+	-rm -f $(MESA_OUTPUTS)
+
+######################################################################
+
+$(XORG_GLX_DIR)/%.c: %.c
 	cp $< $@
 
-$(GLX_DIR)/%.h: %.h
+$(XORG_GLX_DIR)/%.h: %.h
 	cp $< $@
 
-glprocs.h $(GLX_DIR)/glprocs.h: gl_procs.py $(COMMON)
+######################################################################
+
+$(MESA_GLAPI_DIR)/glprocs.h $(XORG_GLX_DIR)/glprocs.h: gl_procs.py $(COMMON)
 	$(PYTHON2) $(PYTHON_FLAGS) $< > $@
 
-glapitemp.h $(GLX_DIR)/glapitemp.h: gl_apitemp.py $(COMMON)
+$(MESA_GLAPI_DIR)/glapitemp.h $(XORG_GLX_DIR)/glapitemp.h: gl_apitemp.py $(COMMON)
 	$(PYTHON2) $(PYTHON_FLAGS) $< > $@
 
-glapioffsets.h $(GLX_DIR)/glapioffsets.h: gl_offsets.py $(COMMON)
+$(MESA_GLAPI_DIR)/glapioffsets.h $(XORG_GLX_DIR)/glapioffsets.h: gl_offsets.py $(COMMON)
 	$(PYTHON2) $(PYTHON_FLAGS) $< > $@
 
-glapitable.h $(GLX_DIR)/glapitable.h: gl_table.py $(COMMON)
+$(MESA_GLAPI_DIR)/glapitable.h $(XORG_GLX_DIR)/glapitable.h: gl_table.py $(COMMON)
 	$(PYTHON2) $(PYTHON_FLAGS) $< > $@
 
-glapidispatch.h $(GLX_DIR)/glapidispatch.h: gl_table.py $(COMMON)
+$(MESA_GLAPI_DIR)/glapidispatch.h $(XORG_GLX_DIR)/glapidispatch.h: gl_table.py $(COMMON)
 	$(PYTHON2) $(PYTHON_FLAGS) $< -m remap_table > $@
 
-../main/enums.c: gl_enums.py $(COMMON)
+######################################################################
+
+$(MESA_DIR)/x86/glapi_x86.S: gl_x86_asm.py $(COMMON)
 	$(PYTHON2) $(PYTHON_FLAGS) $< > $@
 
-../main/remap_helper.h: remap_helper.py $(COMMON)
+$(MESA_DIR)/x86-64/glapi_x86-64.S: gl_x86-64_asm.py $(COMMON)
 	$(PYTHON2) $(PYTHON_FLAGS) $< > $@
 
-../x86/glapi_x86.S: gl_x86_asm.py $(COMMON)
+$(MESA_DIR)/sparc/glapi_sparc.S: gl_SPARC_asm.py $(COMMON)
 	$(PYTHON2) $(PYTHON_FLAGS) $< > $@
 
-../x86-64/glapi_x86-64.S: gl_x86-64_asm.py $(COMMON)
+######################################################################
+
+$(MESA_DIR)/main/enums.c: gl_enums.py $(COMMON)
 	$(PYTHON2) $(PYTHON_FLAGS) $< > $@
 
-../sparc/glapi_sparc.S: gl_SPARC_asm.py $(COMMON)
+$(MESA_DIR)/main/remap_helper.h: remap_helper.py $(COMMON)
 	$(PYTHON2) $(PYTHON_FLAGS) $< > $@
 
-../../glx/indirect.c: glX_proto_send.py $(COMMON_GLX)
+######################################################################
+
+$(MESA_GLX_DIR)/indirect.c: glX_proto_send.py $(COMMON_GLX)
 	$(PYTHON2) $(PYTHON_FLAGS) $< -m proto | $(INDENT) $(INDENT_FLAGS) > $@
 
-../../glx/indirect.h: glX_proto_send.py $(COMMON_GLX)
+$(MESA_GLX_DIR)/indirect.h: glX_proto_send.py $(COMMON_GLX)
 	$(PYTHON2) $(PYTHON_FLAGS) $< -m init_h > $@
 
-../../glx/indirect_init.c: glX_proto_send.py $(COMMON_GLX)
+$(MESA_GLX_DIR)/indirect_init.c: glX_proto_send.py $(COMMON_GLX)
 	$(PYTHON2) $(PYTHON_FLAGS) $< -m init_c > $@
 
-../../glx/indirect_size.h $(GLX_DIR)/indirect_size.h: glX_proto_size.py $(COMMON_GLX)
+$(MESA_GLX_DIR)/indirect_size.h $(XORG_GLX_DIR)/indirect_size.h: glX_proto_size.py $(COMMON_GLX)
 	$(PYTHON2) $(PYTHON_FLAGS) $< -m size_h --only-set -h _INDIRECT_SIZE_H_ \
 	  | $(INDENT) $(INDENT_FLAGS) > $@
 
-../../glx/indirect_size.c: glX_proto_size.py $(COMMON_GLX)
+$(MESA_GLX_DIR)/indirect_size.c: glX_proto_size.py $(COMMON_GLX)
 	$(PYTHON2) $(PYTHON_FLAGS) $< -m size_c --only-set \
 	  | $(INDENT) $(INDENT_FLAGS) > $@
 
-$(GLX_DIR)/indirect_dispatch.c: glX_proto_recv.py $(COMMON_GLX)
+######################################################################
+
+$(XORG_GLX_DIR)/indirect_dispatch.c: glX_proto_recv.py $(COMMON_GLX)
 	$(PYTHON2) $(PYTHON_FLAGS) $< -m dispatch_c > $@
 
-$(GLX_DIR)/indirect_dispatch_swap.c: glX_proto_recv.py $(COMMON_GLX)
+$(XORG_GLX_DIR)/indirect_dispatch_swap.c: glX_proto_recv.py $(COMMON_GLX)
 	$(PYTHON2) $(PYTHON_FLAGS) $< -m dispatch_c -s > $@
 
-$(GLX_DIR)/indirect_dispatch.h: glX_proto_recv.py gl_and_glX_API.xml $(COMMON_GLX)
+$(XORG_GLX_DIR)/indirect_dispatch.h: glX_proto_recv.py gl_and_glX_API.xml $(COMMON_GLX)
 	$(PYTHON2) $(PYTHON_FLAGS) $< -m dispatch_h -f gl_and_glX_API.xml -s > $@
 
-$(GLX_DIR)/indirect_size_get.h: glX_proto_size.py $(COMMON_GLX)
+$(XORG_GLX_DIR)/indirect_size_get.h: glX_proto_size.py $(COMMON_GLX)
 	$(PYTHON2) $(PYTHON_FLAGS) $< -m size_h --only-get -h '_INDIRECT_SIZE_GET_H_' \
 	  | $(INDENT) $(INDENT_FLAGS) > $@
 
-$(GLX_DIR)/indirect_size_get.c: glX_proto_size.py $(COMMON_GLX)
+$(XORG_GLX_DIR)/indirect_size_get.c: glX_proto_size.py $(COMMON_GLX)
 	$(PYTHON2) $(PYTHON_FLAGS) $< -m size_c | $(INDENT) $(INDENT_FLAGS) > $@
 
-$(GLX_DIR)/indirect_reqsize.h: glX_proto_size.py $(COMMON_GLX)
+$(XORG_GLX_DIR)/indirect_reqsize.h: glX_proto_size.py $(COMMON_GLX)
 	$(PYTHON2) $(PYTHON_FLAGS) $< -m reqsize_h --only-get -h '_INDIRECT_SIZE_GET_H_' \
 	  | $(INDENT) $(INDENT_FLAGS) -l200 > $@
 
-$(GLX_DIR)/indirect_reqsize.c: glX_proto_size.py $(COMMON_GLX)
+$(XORG_GLX_DIR)/indirect_reqsize.c: glX_proto_size.py $(COMMON_GLX)
 	$(PYTHON2) $(PYTHON_FLAGS) $< -m reqsize_c | $(INDENT) $(INDENT_FLAGS) > $@
 
-$(GLX_DIR)/indirect_table.c: glX_server_table.py gl_and_glX_API.xml $(COMMON_GLX)
+$(XORG_GLX_DIR)/indirect_table.c: glX_server_table.py gl_and_glX_API.xml $(COMMON_GLX)
 	$(PYTHON2) $(PYTHON_FLAGS) $< -f gl_and_glX_API.xml > $@
-
-clean:
-	-rm -f *~ *.pyo
-	-rm -f $(OUTPUTS)
-- 
cgit v1.2.3


From 295a02549d74559831023455d1bb0ebf42bc1415 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Mon, 22 Feb 2010 22:27:49 +0200
Subject: glapi: fix es after mv

---
 Makefile                             | 6 +++---
 src/mesa/es/glapi/Makefile           | 2 +-
 src/mesa/es/glapi/base1_API.xml      | 2 +-
 src/mesa/es/glapi/base2_API.xml      | 2 +-
 src/mesa/es/glapi/es1_API.xml        | 2 +-
 src/mesa/es/glapi/es1_COMPAT.xml     | 2 +-
 src/mesa/es/glapi/es1_EXT.xml        | 2 +-
 src/mesa/es/glapi/es2_API.xml        | 2 +-
 src/mesa/es/glapi/es2_COMPAT.xml     | 2 +-
 src/mesa/es/glapi/es2_EXT.xml        | 2 +-
 src/mesa/es/glapi/es_COMPAT.xml      | 4 ++--
 src/mesa/es/glapi/es_EXT.xml         | 2 +-
 src/mesa/es/glapi/gl_compare.py      | 2 +-
 src/mesa/es/glapi/gl_parse_header.py | 2 +-
 14 files changed, 17 insertions(+), 17 deletions(-)

(limited to 'src/mesa')

diff --git a/Makefile b/Makefile
index ea5751d947..3e92e1312e 100644
--- a/Makefile
+++ b/Makefile
@@ -314,9 +314,9 @@ MAIN_FILES = \
 ES_FILES = \
 	$(DIRECTORY)/include/GLES/*.h					\
 	$(DIRECTORY)/include/GLES2/*.h					\
-	$(DIRECTORY)/src/mesa/glapi/*.xml				\
-	$(DIRECTORY)/src/mesa/glapi/*.py				\
-	$(DIRECTORY)/src/mesa/glapi/*.dtd				\
+	$(DIRECTORY)/src/mesa/glapi/gen/*.xml				\
+	$(DIRECTORY)/src/mesa/glapi/gen/*.py				\
+	$(DIRECTORY)/src/mesa/glapi/gen/*.dtd				\
 	$(DIRECTORY)/src/mesa/es/glapi/Makefile				\
 	$(DIRECTORY)/src/mesa/es/glapi/*.xml				\
 	$(DIRECTORY)/src/mesa/es/glapi/*.py				\
diff --git a/src/mesa/es/glapi/Makefile b/src/mesa/es/glapi/Makefile
index 1e32af867d..e8a9afab7c 100644
--- a/src/mesa/es/glapi/Makefile
+++ b/src/mesa/es/glapi/Makefile
@@ -1,5 +1,5 @@
 TOP = ../../../..
-GLAPI = ../../glapi
+GLAPI = ../../glapi/gen
 include $(TOP)/configs/current
 
 OUTPUTS :=			\
diff --git a/src/mesa/es/glapi/base1_API.xml b/src/mesa/es/glapi/base1_API.xml
index f5d136ccef..72e4128272 100644
--- a/src/mesa/es/glapi/base1_API.xml
+++ b/src/mesa/es/glapi/base1_API.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE OpenGLAPI SYSTEM "../../glapi/gl_API.dtd">
+<!DOCTYPE OpenGLAPI SYSTEM "../../glapi/gen/gl_API.dtd">
 
 <!-- OpenGL and OpenGL ES 1.x APIs
      This file defines the base categories that can be shared by all APIs.
diff --git a/src/mesa/es/glapi/base2_API.xml b/src/mesa/es/glapi/base2_API.xml
index 6aa43b728a..5657b8e775 100644
--- a/src/mesa/es/glapi/base2_API.xml
+++ b/src/mesa/es/glapi/base2_API.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE OpenGLAPI SYSTEM "../../glapi/gl_API.dtd">
+<!DOCTYPE OpenGLAPI SYSTEM "../../glapi/gen/gl_API.dtd">
 
 <!-- OpenGL and OpenGL ES 2.x APIs -->
 
diff --git a/src/mesa/es/glapi/es1_API.xml b/src/mesa/es/glapi/es1_API.xml
index 7ee5515f19..1ac1467458 100644
--- a/src/mesa/es/glapi/es1_API.xml
+++ b/src/mesa/es/glapi/es1_API.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE OpenGLAPI SYSTEM "../../glapi/gl_API.dtd">
+<!DOCTYPE OpenGLAPI SYSTEM "../../glapi/gen/gl_API.dtd">
 
 <!-- OpenGL ES 1.x API -->
 
diff --git a/src/mesa/es/glapi/es1_COMPAT.xml b/src/mesa/es/glapi/es1_COMPAT.xml
index 4fc9223cc0..1f45a8c0b6 100644
--- a/src/mesa/es/glapi/es1_COMPAT.xml
+++ b/src/mesa/es/glapi/es1_COMPAT.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE OpenGLAPI SYSTEM "../../glapi/gl_API.dtd">
+<!DOCTYPE OpenGLAPI SYSTEM "../../glapi/gen/gl_API.dtd">
 
 <OpenGLAPI>
 
diff --git a/src/mesa/es/glapi/es1_EXT.xml b/src/mesa/es/glapi/es1_EXT.xml
index de4868cfd4..d4abd81046 100644
--- a/src/mesa/es/glapi/es1_EXT.xml
+++ b/src/mesa/es/glapi/es1_EXT.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE OpenGLAPI SYSTEM "../../glapi/gl_API.dtd">
+<!DOCTYPE OpenGLAPI SYSTEM "../../glapi/gen/gl_API.dtd">
 
 <!-- OpenGL ES 1.x extensions -->
 
diff --git a/src/mesa/es/glapi/es2_API.xml b/src/mesa/es/glapi/es2_API.xml
index 266c07613c..b476dbe00f 100644
--- a/src/mesa/es/glapi/es2_API.xml
+++ b/src/mesa/es/glapi/es2_API.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE OpenGLAPI SYSTEM "../../glapi/gl_API.dtd">
+<!DOCTYPE OpenGLAPI SYSTEM "../../glapi/gen/gl_API.dtd">
 
 <!-- OpenGL ES 2.x API -->
 
diff --git a/src/mesa/es/glapi/es2_COMPAT.xml b/src/mesa/es/glapi/es2_COMPAT.xml
index 61f11a604e..5ecd4a1ba6 100644
--- a/src/mesa/es/glapi/es2_COMPAT.xml
+++ b/src/mesa/es/glapi/es2_COMPAT.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE OpenGLAPI SYSTEM "../../glapi/gl_API.dtd">
+<!DOCTYPE OpenGLAPI SYSTEM "../../glapi/gen/gl_API.dtd">
 
 <OpenGLAPI>
 
diff --git a/src/mesa/es/glapi/es2_EXT.xml b/src/mesa/es/glapi/es2_EXT.xml
index 3615772b56..dcf9858569 100644
--- a/src/mesa/es/glapi/es2_EXT.xml
+++ b/src/mesa/es/glapi/es2_EXT.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE OpenGLAPI SYSTEM "../../glapi/gl_API.dtd">
+<!DOCTYPE OpenGLAPI SYSTEM "../../glapi/gen/gl_API.dtd">
 
 <!-- OpenGL ES 2.x extensions -->
 
diff --git a/src/mesa/es/glapi/es_COMPAT.xml b/src/mesa/es/glapi/es_COMPAT.xml
index bb6d28db83..1bd66dad30 100644
--- a/src/mesa/es/glapi/es_COMPAT.xml
+++ b/src/mesa/es/glapi/es_COMPAT.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE OpenGLAPI SYSTEM "../../glapi/gl_API.dtd">
+<!DOCTYPE OpenGLAPI SYSTEM "../../glapi/gen/gl_API.dtd">
 
 <OpenGLAPI>
 
@@ -2641,6 +2641,6 @@
     </function>
 </category>
 
-<xi:include href="../../glapi/APPLE_vertex_array_object.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
+<xi:include href="../../glapi/gen/APPLE_vertex_array_object.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
 
 </OpenGLAPI>
diff --git a/src/mesa/es/glapi/es_EXT.xml b/src/mesa/es/glapi/es_EXT.xml
index b76cda929a..629ba90528 100644
--- a/src/mesa/es/glapi/es_EXT.xml
+++ b/src/mesa/es/glapi/es_EXT.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE OpenGLAPI SYSTEM "../../glapi/gl_API.dtd">
+<!DOCTYPE OpenGLAPI SYSTEM "../../glapi/gen/gl_API.dtd">
 
 <!-- OpenGL ES extensions -->
 
diff --git a/src/mesa/es/glapi/gl_compare.py b/src/mesa/es/glapi/gl_compare.py
index 7a2148cb1f..6b5e43bb98 100644
--- a/src/mesa/es/glapi/gl_compare.py
+++ b/src/mesa/es/glapi/gl_compare.py
@@ -25,7 +25,7 @@ import sys
 import os.path
 import getopt
 
-GLAPI = "../../glapi"
+GLAPI = "../../glapi/gen"
 sys.path.append(GLAPI)
 
 import gl_XML
diff --git a/src/mesa/es/glapi/gl_parse_header.py b/src/mesa/es/glapi/gl_parse_header.py
index 8b8d16b395..5382eba35c 100644
--- a/src/mesa/es/glapi/gl_parse_header.py
+++ b/src/mesa/es/glapi/gl_parse_header.py
@@ -26,7 +26,7 @@ import os.path
 import getopt
 import re
 
-GLAPI = "../../glapi"
+GLAPI = "../../glapi/gen"
 sys.path.append(GLAPI)
 
 class HeaderParser(object):
-- 
cgit v1.2.3


From b628950662a97452e539bcc704bd2acee70f8355 Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Tue, 23 Feb 2010 17:13:13 -0700
Subject: st/mesa: whitespace fixes

---
 src/mesa/state_tracker/st_cb_texture.c | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c
index 7e50e2ab2d..c849132e74 100644
--- a/src/mesa/state_tracker/st_cb_texture.c
+++ b/src/mesa/state_tracker/st_cb_texture.c
@@ -1717,19 +1717,16 @@ copy_image_data_to_texture(struct st_context *st,
       st_texture_image_copy(st->pipe,
                             stObj->pt, dstLevel,  /* dest texture, level */
                             stImage->pt, /* src texture */
-                            stImage->face
-                            );
+                            stImage->face);
 
       pipe_texture_reference(&stImage->pt, NULL);
    }
    else if (stImage->base.Data) {
       /* More straightforward upload.  
        */
-
       st_teximage_flush_before_map(st, stObj->pt, stImage->face, dstLevel,
 				   PIPE_TRANSFER_WRITE);
 
-
       st_texture_image_data(st,
                             stObj->pt,
                             stImage->face,
-- 
cgit v1.2.3


From db9c151d77d02729d7387213c3f4ee96c65dd0cc Mon Sep 17 00:00:00 2001
From: Kristian Høgsberg <krh@bitplanet.net>
Date: Tue, 23 Feb 2010 23:15:20 -0500
Subject: intel: Call intel_prepare_render() in intelMakeCurrent()

This restores old behaviour, where we end up doing a DRI2GetBuffers()
call from intelMakeCurrent().  The idea was that we could do this
lazily, just before we start rendering.  However, if we don't do the
DRI2GetBuffers() round-trip we don't get the drawable size and higher
level mesa ends up short-cutting a number of GL calls, such as glClear().
---
 src/mesa/drivers/dri/intel/intel_context.c | 1 +
 1 file changed, 1 insertion(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/intel/intel_context.c b/src/mesa/drivers/dri/intel/intel_context.c
index 3c36c3f4c8..de063d51c9 100644
--- a/src/mesa/drivers/dri/intel/intel_context.c
+++ b/src/mesa/drivers/dri/intel/intel_context.c
@@ -887,6 +887,7 @@ intelMakeCurrent(__DRIcontext * driContextPriv,
       intel->driDrawable = driDrawPriv;
       driContextPriv->dri2.draw_stamp = driDrawPriv->dri2.stamp - 1;
       driContextPriv->dri2.read_stamp = driReadPriv->dri2.stamp - 1;
+      intel_prepare_render(&intel->ctx);
    }
    else {
       _mesa_make_current(NULL, NULL, NULL);
-- 
cgit v1.2.3


From b75d40736997911e00cab339a7f15ec9bc86e535 Mon Sep 17 00:00:00 2001
From: Dave Airlie <airlied@redhat.com>
Date: Wed, 24 Feb 2010 17:19:09 +1000
Subject: radeon: fix bad state emission causes kernel to do bad depth clear

The kernel lets you clear depth without getting a depth offset
from userspace, mesa used to emit state before clear, but that got
lost in the refactoring, which made the kernel bug show up. Fix
mesa driver to emit the state properly now.

Signed-off-by: Dave Airlie <airlied@redhat.com>
---
 src/mesa/drivers/dri/radeon/radeon_ioctl.c | 1 +
 1 file changed, 1 insertion(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/radeon/radeon_ioctl.c b/src/mesa/drivers/dri/radeon/radeon_ioctl.c
index c7ea452156..d429f15fa5 100644
--- a/src/mesa/drivers/dri/radeon/radeon_ioctl.c
+++ b/src/mesa/drivers/dri/radeon/radeon_ioctl.c
@@ -481,6 +481,7 @@ static void radeonKernelClear(GLcontext *ctx, GLuint flags)
       }
    }
 
+   radeonEmitState(&rmesa->radeon);
    /* Send current state to the hardware */
    rcommonFlushCmdBufLocked( &rmesa->radeon, __FUNCTION__ );
 
-- 
cgit v1.2.3


From e16f0c14f353cc04ad6cbcf99e3b95ccb1d2c06b Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Wed, 24 Feb 2010 00:24:51 -0800
Subject: r600: Assert that array index is not negative.

---
 src/mesa/drivers/dri/r600/r700_assembler.c | 1 +
 1 file changed, 1 insertion(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r600/r700_assembler.c b/src/mesa/drivers/dri/r600/r700_assembler.c
index d0059fad2e..8344dd9a51 100644
--- a/src/mesa/drivers/dri/r600/r700_assembler.c
+++ b/src/mesa/drivers/dri/r600/r700_assembler.c
@@ -1250,6 +1250,7 @@ GLboolean assemble_src(r700_AssemblerBase *pAsm,
 
     if(pAsm->aArgSubst[1+src] >= 0) 
     {
+        assert(fld >= 0);
         setaddrmode_PVSSRC(&(pAsm->S[fld].src), ADDR_ABSOLUTE);
         pAsm->S[fld].src.rtype = SRC_REG_TEMPORARY;
         pAsm->S[fld].src.reg   = pAsm->aArgSubst[1+src];
-- 
cgit v1.2.3


From 3f5bac8960a5c6d1f08f0dc849676139b9d6ce5c Mon Sep 17 00:00:00 2001
From: Dave Airlie <airlied@redhat.com>
Date: Wed, 24 Feb 2010 19:13:07 +1000
Subject: radeon/r200: fix the state emission before kernel clear

this moves the emission outside the lock and adds r200 support.

Signed-off-by: Dave Airlie <airlied@redhat.com>
---
 src/mesa/drivers/dri/r200/r200_ioctl.c     | 2 ++
 src/mesa/drivers/dri/radeon/radeon_ioctl.c | 3 ++-
 2 files changed, 4 insertions(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r200/r200_ioctl.c b/src/mesa/drivers/dri/r200/r200_ioctl.c
index a1b505707e..b72f69b7f4 100644
--- a/src/mesa/drivers/dri/r200/r200_ioctl.c
+++ b/src/mesa/drivers/dri/r200/r200_ioctl.c
@@ -61,6 +61,8 @@ static void r200KernelClear(GLcontext *ctx, GLuint flags)
    GLint cx, cy, cw, ch, ret;
    GLuint i;
 
+   radeonEmitState(&rmesa->radeon);
+
    LOCK_HARDWARE( &rmesa->radeon );
 
    /* Throttle the number of clear ioctls we do.
diff --git a/src/mesa/drivers/dri/radeon/radeon_ioctl.c b/src/mesa/drivers/dri/radeon/radeon_ioctl.c
index d429f15fa5..5ac526c6de 100644
--- a/src/mesa/drivers/dri/radeon/radeon_ioctl.c
+++ b/src/mesa/drivers/dri/radeon/radeon_ioctl.c
@@ -442,6 +442,8 @@ static void radeonKernelClear(GLcontext *ctx, GLuint flags)
    GLint ret, i;
    GLint cx, cy, cw, ch;
 
+   radeonEmitState(&rmesa->radeon);
+
    LOCK_HARDWARE( &rmesa->radeon );
 
    /* compute region after locking: */
@@ -481,7 +483,6 @@ static void radeonKernelClear(GLcontext *ctx, GLuint flags)
       }
    }
 
-   radeonEmitState(&rmesa->radeon);
    /* Send current state to the hardware */
    rcommonFlushCmdBufLocked( &rmesa->radeon, __FUNCTION__ );
 
-- 
cgit v1.2.3


From 8039ee09b8c78a70c1c50207cce9a7bb4cffc675 Mon Sep 17 00:00:00 2001
From: Michal Krol <michal@vmware.com>
Date: Wed, 24 Feb 2010 15:28:41 +0100
Subject: st/mesa: Use cso context to manage clip state.

---
 src/mesa/state_tracker/st_atom_clip.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/state_tracker/st_atom_clip.c b/src/mesa/state_tracker/st_atom_clip.c
index 23d709b814..80c0e92139 100644
--- a/src/mesa/state_tracker/st_atom_clip.c
+++ b/src/mesa/state_tracker/st_atom_clip.c
@@ -35,6 +35,8 @@
 #include "pipe/p_context.h"
 #include "st_atom.h"
 
+#include "cso_cache/cso_context.h"
+
 
 /* Second state atom for user clip planes:
  */
@@ -56,7 +58,7 @@ static void update_clip( struct st_context *st )
       
    if (memcmp(&clip, &st->state.clip, sizeof(clip)) != 0) {
       st->state.clip = clip;
-      st->pipe->set_clip_state(st->pipe, &clip);
+      cso_set_clip(st->cso_context, &clip);
    }
 }
 
-- 
cgit v1.2.3


From 78f72d73ee37c1a269f010e492631503a7fc35b2 Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Wed, 24 Feb 2010 08:13:55 -0700
Subject: mesa: disable unreachable meta mipmap gen code

More work is needed to support 3D mipmap generation.  Disable unreachable
code until then.

See bug 26722.
---
 src/mesa/drivers/common/meta.c | 3 +++
 1 file changed, 3 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c
index 42ab7d4ed6..8e229bbe38 100644
--- a/src/mesa/drivers/common/meta.c
+++ b/src/mesa/drivers/common/meta.c
@@ -2131,12 +2131,15 @@ _mesa_meta_check_generate_mipmap_fallback(GLcontext *ctx, GLenum target,
                                     GL_COLOR_ATTACHMENT0_EXT,
                                     target, texObj->Name, srcLevel);
    }
+#if 0
+   /* other work is needed to enable 3D mipmap generation */
    else if (target == GL_TEXTURE_3D) {
       GLint zoffset = 0;
       _mesa_FramebufferTexture3DEXT(GL_FRAMEBUFFER_EXT,
                                     GL_COLOR_ATTACHMENT0_EXT,
                                     target, texObj->Name, srcLevel, zoffset);
    }
+#endif
    else {
       /* 2D / cube */
       _mesa_FramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT,
-- 
cgit v1.2.3


From a9aa811af01273cef8a73118abdc87313f365ad3 Mon Sep 17 00:00:00 2001
From: Michal Krol <michal@vmware.com>
Date: Wed, 24 Feb 2010 16:41:18 +0100
Subject: st/mesa: Reset clip state when clearing with quads.

---
 src/mesa/state_tracker/st_cb_clear.c | 6 +++++-
 src/mesa/state_tracker/st_context.h  | 1 +
 2 files changed, 6 insertions(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/state_tracker/st_cb_clear.c b/src/mesa/state_tracker/st_cb_clear.c
index 5edab55cca..9e66eed363 100644
--- a/src/mesa/state_tracker/st_cb_clear.c
+++ b/src/mesa/state_tracker/st_cb_clear.c
@@ -62,7 +62,8 @@ st_init_clear(struct st_context *st)
 {
    struct pipe_context *pipe = st->pipe;
 
-   memset(&st->clear.raster, 0, sizeof(st->clear.raster));
+   memset(&st->clear, 0, sizeof(st->clear));
+
    st->clear.raster.gl_rasterization_rules = 1;
 
    /* fragment shader state: color pass-through program */
@@ -209,6 +210,7 @@ clear_with_quad(GLcontext *ctx,
    cso_save_depth_stencil_alpha(st->cso_context);
    cso_save_rasterizer(st->cso_context);
    cso_save_viewport(st->cso_context);
+   cso_save_clip(st->cso_context);
    cso_save_fragment_shader(st->cso_context);
    cso_save_vertex_shader(st->cso_context);
 
@@ -279,6 +281,7 @@ clear_with_quad(GLcontext *ctx,
       cso_set_viewport(st->cso_context, &vp);
    }
 
+   cso_set_clip(st->cso_context, &st->clear.clip);
    cso_set_fragment_shader_handle(st->cso_context, st->clear.fs);
    cso_set_vertex_shader_handle(st->cso_context, st->clear.vs);
 
@@ -291,6 +294,7 @@ clear_with_quad(GLcontext *ctx,
    cso_restore_depth_stencil_alpha(st->cso_context);
    cso_restore_rasterizer(st->cso_context);
    cso_restore_viewport(st->cso_context);
+   cso_restore_clip(st->cso_context);
    cso_restore_fragment_shader(st->cso_context);
    cso_restore_vertex_shader(st->cso_context);
 }
diff --git a/src/mesa/state_tracker/st_context.h b/src/mesa/state_tracker/st_context.h
index 13b7b0e22d..045c029c30 100644
--- a/src/mesa/state_tracker/st_context.h
+++ b/src/mesa/state_tracker/st_context.h
@@ -166,6 +166,7 @@ struct st_context
    struct {
       struct pipe_rasterizer_state raster;
       struct pipe_viewport_state viewport;
+      struct pipe_clip_state clip;
       void *vs;
       void *fs;
       float vertices[4][2][4];  /**< vertex pos + color */
-- 
cgit v1.2.3


From 85434f9e3cae74c1992bb619641f97c0e4028a63 Mon Sep 17 00:00:00 2001
From: José Fonseca <jfonseca@vmware.com>
Date: Wed, 24 Feb 2010 16:10:36 +0000
Subject: mesa: Update for UTIL_FORMAT_LAYOUT_xxx changes.

---
 src/mesa/state_tracker/st_format.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/state_tracker/st_format.c b/src/mesa/state_tracker/st_format.c
index 851c16f83c..3100a4edaa 100644
--- a/src/mesa/state_tracker/st_format.c
+++ b/src/mesa/state_tracker/st_format.c
@@ -82,8 +82,7 @@ st_get_format_info(enum pipe_format format, struct pipe_format_info *pinfo)
    desc = util_format_description(format);
    assert(desc);
 
-   if (desc->layout == UTIL_FORMAT_LAYOUT_ARITH ||
-       desc->layout == UTIL_FORMAT_LAYOUT_ARRAY) {
+   if (desc->layout == UTIL_FORMAT_LAYOUT_PLAIN) {
 #if 0
       printf("%s\n", util_format_name( format ) );
 #endif
@@ -147,11 +146,16 @@ st_get_format_info(enum pipe_format format, struct pipe_format_info *pinfo)
 
       pinfo->mesa_format = st_pipe_format_to_mesa_format(format);
    }
-   else if (desc->layout == UTIL_FORMAT_LAYOUT_YUV) {
+   else if (format == PIPE_FORMAT_YCBCR) {
       pinfo->mesa_format = MESA_FORMAT_YCBCR;
       pinfo->datatype = GL_UNSIGNED_SHORT;
       pinfo->size = 2; /* two bytes per "texel" */
    }
+   else if (format == PIPE_FORMAT_YCBCR_REV) {
+      pinfo->mesa_format = MESA_FORMAT_YCBCR_REV;
+      pinfo->datatype = GL_UNSIGNED_SHORT;
+      pinfo->size = 2; /* two bytes per "texel" */
+   }
    else {
       /* compressed format? */
       assert(0);
-- 
cgit v1.2.3


From 5997501ca0d0c905025bc2a840e48e2176d64ea3 Mon Sep 17 00:00:00 2001
From: Alex Deucher <alexdeucher@gmail.com>
Date: Wed, 24 Feb 2010 11:43:33 -0500
Subject: r600: proper fix for 15601835361e2fdd34b38b265cfc3007749ee24d

PRE_EMIT_STATE_BUFSZ accounts for the start 3d, idle, cd/db flush
not for state.  The relocs for CB_COLOR0_FRAG & CB_COLOR0_TILE
are part of the render target state.
---
 src/mesa/drivers/dri/r600/r700_chip.c   | 2 +-
 src/mesa/drivers/dri/r600/r700_render.c | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r600/r700_chip.c b/src/mesa/drivers/dri/r600/r700_chip.c
index a742dbcf12..63614b160c 100644
--- a/src/mesa/drivers/dri/r600/r700_chip.c
+++ b/src/mesa/drivers/dri/r600/r700_chip.c
@@ -1349,7 +1349,7 @@ void r600InitAtoms(context_t *context)
 	ALLOC_STATE(poly, always, 10, r700SendPolyState);
 	ALLOC_STATE(cb, cb, 18, r700SendCBState);
 	ALLOC_STATE(clrcmp, always, 6, r700SendCBCLRCMPState);
-	ALLOC_STATE(cb_target, always, 25, r700SendRenderTargetState);
+	ALLOC_STATE(cb_target, always, 29, r700SendRenderTargetState);
 	ALLOC_STATE(blnd, blnd, (6 + (R700_MAX_RENDER_TARGETS * 3)), r700SendCBBlendState);
 	ALLOC_STATE(blnd_clr, always, 6, r700SendCBBlendColorState);
 	ALLOC_STATE(sx, always, 9, r700SendSXState);
diff --git a/src/mesa/drivers/dri/r600/r700_render.c b/src/mesa/drivers/dri/r600/r700_render.c
index fdd02fac23..1d7a94cbb2 100644
--- a/src/mesa/drivers/dri/r600/r700_render.c
+++ b/src/mesa/drivers/dri/r600/r700_render.c
@@ -419,7 +419,7 @@ static void r700RunRenderPrimitiveImmediate(GLcontext * ctx, int start, int end,
 }
 
 /* start 3d, idle, cb/db flush */
-#define PRE_EMIT_STATE_BUFSZ 5 + 5 + 18
+#define PRE_EMIT_STATE_BUFSZ 5 + 5 + 14
 
 static GLuint r700PredictRenderSize(GLcontext* ctx,
 				    const struct _mesa_prim *prim,
-- 
cgit v1.2.3


From 5bc62895e294ea461e8487bac1aa84c6cc4f6809 Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Wed, 24 Feb 2010 10:56:10 -0700
Subject: st/mesa: code clean-ups in st_renderbuffer_alloc_storage()

---
 src/mesa/state_tracker/st_cb_fbo.c | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c
index bfa8e21095..906eccdc09 100644
--- a/src/mesa/state_tracker/st_cb_fbo.c
+++ b/src/mesa/state_tracker/st_cb_fbo.c
@@ -83,14 +83,14 @@ st_renderbuffer_alloc_storage(GLcontext * ctx, struct gl_renderbuffer *rb,
                               GLenum internalFormat,
                               GLuint width, GLuint height)
 {
-   struct pipe_context *pipe = ctx->st->pipe;
+   struct pipe_screen *screen = ctx->st->pipe->screen;
    struct st_renderbuffer *strb = st_renderbuffer(rb);
    enum pipe_format format;
 
    if (strb->format != PIPE_FORMAT_NONE)
       format = strb->format;
    else
-      format = st_choose_renderbuffer_format(pipe->screen, internalFormat);
+      format = st_choose_renderbuffer_format(screen, internalFormat);
       
    /* init renderbuffer fields */
    strb->Base.Width  = width;
@@ -149,16 +149,15 @@ st_renderbuffer_alloc_storage(GLcontext * ctx, struct gl_renderbuffer *rb,
                        PIPE_BUFFER_USAGE_CPU_WRITE);
 #endif
 
-      strb->texture = pipe->screen->texture_create( pipe->screen,
-                                                    &template );
+      strb->texture = screen->texture_create(screen, &template);
 
       if (!strb->texture) 
          return FALSE;
 
-      strb->surface = pipe->screen->get_tex_surface( pipe->screen,
-                                                     strb->texture,
-                                                     0, 0, 0,
-                                                     surface_usage );
+      strb->surface = screen->get_tex_surface(screen,
+                                              strb->texture,
+                                              0, 0, 0,
+                                              surface_usage);
       if (strb->surface) {
          assert(strb->surface->texture);
          assert(strb->surface->format);
-- 
cgit v1.2.3


From 5d8aae55f29fe35ec3d514b54b05b6c6fc8bebe2 Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Wed, 24 Feb 2010 11:03:58 -0700
Subject: st/mesa: use util_format_get_blocksize()

---
 src/mesa/state_tracker/st_cb_drawpixels.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c b/src/mesa/state_tracker/st_cb_drawpixels.c
index e9aee6b205..ba28a224e8 100644
--- a/src/mesa/state_tracker/st_cb_drawpixels.c
+++ b/src/mesa/state_tracker/st_cb_drawpixels.c
@@ -319,7 +319,7 @@ make_texture(struct st_context *st,
 
    pipeFormat = st_mesa_format_to_pipe_format(mformat);
    assert(pipeFormat);
-   cpp = st_sizeof_format(pipeFormat);
+   cpp = util_format_get_blocksize(pipeFormat);
 
    pixels = _mesa_map_pbo_source(ctx, unpack, pixels);
    if (!pixels)
-- 
cgit v1.2.3


From 87c85347ed8f74a855532fe6862d3ef62937ccbb Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Wed, 24 Feb 2010 11:10:47 -0700
Subject: st/mesa: clean-up of format-related code

---
 src/mesa/state_tracker/st_cb_fbo.c |  9 +++---
 src/mesa/state_tracker/st_format.c | 60 ++------------------------------------
 src/mesa/state_tracker/st_format.h | 21 ++++---------
 3 files changed, 13 insertions(+), 77 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c
index 906eccdc09..0898866a73 100644
--- a/src/mesa/state_tracker/st_cb_fbo.c
+++ b/src/mesa/state_tracker/st_cb_fbo.c
@@ -57,11 +57,11 @@
 /**
  * Compute the renderbuffer's Red/Green/EtcBit fields from the pipe format.
  */
-static int
+static void
 init_renderbuffer_bits(struct st_renderbuffer *strb,
                        enum pipe_format pipeFormat)
 {
-   struct pipe_format_info info;
+   struct st_format_info info;
 
    if (!st_get_format_info( pipeFormat, &info )) {
       assert( 0 );
@@ -69,10 +69,9 @@ init_renderbuffer_bits(struct st_renderbuffer *strb,
 
    strb->Base.Format = info.mesa_format;
    strb->Base.DataType = st_format_datatype(pipeFormat);
-
-   return info.size;
 }
 
+
 /**
  * gl_renderbuffer::AllocStorage()
  * This is called to allocate the original drawing surface, and
@@ -99,7 +98,7 @@ st_renderbuffer_alloc_storage(GLcontext * ctx, struct gl_renderbuffer *rb,
 
    strb->defined = GL_FALSE;  /* undefined contents now */
 
-   if(strb->software) {
+   if (strb->software) {
       size_t size;
       
       free(strb->data);
diff --git a/src/mesa/state_tracker/st_format.c b/src/mesa/state_tracker/st_format.c
index 3100a4edaa..8789d4b750 100644
--- a/src/mesa/state_tracker/st_format.c
+++ b/src/mesa/state_tracker/st_format.c
@@ -59,23 +59,12 @@ format_max_bits(enum pipe_format format)
    return size;
 }
 
-static GLuint
-format_size(enum pipe_format format)
-{
-   return
-      util_format_get_component_bits(format, UTIL_FORMAT_COLORSPACE_RGB, 0) +
-      util_format_get_component_bits(format, UTIL_FORMAT_COLORSPACE_RGB, 1) +
-      util_format_get_component_bits(format, UTIL_FORMAT_COLORSPACE_RGB, 2) +
-      util_format_get_component_bits(format, UTIL_FORMAT_COLORSPACE_RGB, 3) +
-      util_format_get_component_bits(format, UTIL_FORMAT_COLORSPACE_ZS, 0) +
-      util_format_get_component_bits(format, UTIL_FORMAT_COLORSPACE_ZS, 1);
-}
 
 /*
  * XXX temporary here
  */
 GLboolean
-st_get_format_info(enum pipe_format format, struct pipe_format_info *pinfo)
+st_get_format_info(enum pipe_format format, struct st_format_info *pinfo)
 {
    const struct util_format_description *desc;
 
@@ -118,43 +107,15 @@ st_get_format_info(enum pipe_format format, struct pipe_format_info *pinfo)
          }
       }
 
-      /* Component bits */
-      pinfo->red_bits = util_format_get_component_bits(format, UTIL_FORMAT_COLORSPACE_RGB, 0);
-      pinfo->green_bits = util_format_get_component_bits(format, UTIL_FORMAT_COLORSPACE_RGB, 1);
-      pinfo->blue_bits = util_format_get_component_bits(format, UTIL_FORMAT_COLORSPACE_RGB, 2);
-      pinfo->alpha_bits = util_format_get_component_bits(format, UTIL_FORMAT_COLORSPACE_RGB, 3);
-      pinfo->depth_bits = util_format_get_component_bits(format, UTIL_FORMAT_COLORSPACE_ZS, 0);
-      pinfo->stencil_bits = util_format_get_component_bits(format, UTIL_FORMAT_COLORSPACE_ZS, 1);
-      pinfo->luminance_bits = 0;
-      pinfo->intensity_bits = 0;
-
-      /* Format size */
-      pinfo->size = format_size(format) / 8;
-
-      /* Luminance & Intensity bits */
-      if (desc->swizzle[0] == UTIL_FORMAT_SWIZZLE_X &&
-          desc->swizzle[1] == UTIL_FORMAT_SWIZZLE_X &&
-          desc->swizzle[2] == UTIL_FORMAT_SWIZZLE_X) {
-         if (desc->swizzle[3] == UTIL_FORMAT_SWIZZLE_X) {
-            pinfo->intensity_bits = pinfo->red_bits;
-         }
-         else {
-            pinfo->luminance_bits = pinfo->red_bits;
-         }
-         pinfo->red_bits = 0;
-      }
-
       pinfo->mesa_format = st_pipe_format_to_mesa_format(format);
    }
    else if (format == PIPE_FORMAT_YCBCR) {
       pinfo->mesa_format = MESA_FORMAT_YCBCR;
       pinfo->datatype = GL_UNSIGNED_SHORT;
-      pinfo->size = 2; /* two bytes per "texel" */
    }
    else if (format == PIPE_FORMAT_YCBCR_REV) {
       pinfo->mesa_format = MESA_FORMAT_YCBCR_REV;
       pinfo->datatype = GL_UNSIGNED_SHORT;
-      pinfo->size = 2; /* two bytes per "texel" */
    }
    else {
       /* compressed format? */
@@ -179,27 +140,12 @@ st_get_format_info(enum pipe_format format, struct pipe_format_info *pinfo)
 
 
 /**
- * Return bytes per pixel for the given format.
- */
-GLuint
-st_sizeof_format(enum pipe_format format)
-{
-   struct pipe_format_info info;
-   if (!st_get_format_info( format, &info )) {
-      assert( 0 );
-      return 0;
-   }
-   return info.size;
-}
-
-
-/**
- * Return bytes per pixel for the given format.
+ * Return basic GL datatype for the given format.
  */
 GLenum
 st_format_datatype(enum pipe_format format)
 {
-   struct pipe_format_info info;
+   struct st_format_info info;
    if (!st_get_format_info( format, &info )) {
       assert( 0 );
       return 0;
diff --git a/src/mesa/state_tracker/st_format.h b/src/mesa/state_tracker/st_format.h
index 7cddf5aa66..721c6aeb3d 100644
--- a/src/mesa/state_tracker/st_format.h
+++ b/src/mesa/state_tracker/st_format.h
@@ -31,29 +31,20 @@
 
 #include "main/formats.h"
 
-struct pipe_format_info
+
+/**
+ * Information for mapping Mesa formats to Gallium formats.
+ */
+struct st_format_info
 {
    enum pipe_format format;
    gl_format mesa_format;
    GLenum datatype;
-   GLubyte red_bits;
-   GLubyte green_bits;
-   GLubyte blue_bits;
-   GLubyte alpha_bits;
-   GLubyte luminance_bits;
-   GLubyte intensity_bits;
-   GLubyte depth_bits;
-   GLubyte stencil_bits;
-   GLubyte size;           /**< in bytes */
 };
 
 
 GLboolean
-st_get_format_info(enum pipe_format format, struct pipe_format_info *pinfo);
-
-
-extern GLuint
-st_sizeof_format(enum pipe_format format);
+st_get_format_info(enum pipe_format format, struct st_format_info *pinfo);
 
 
 extern GLenum
-- 
cgit v1.2.3


From d7de632de39888dbc955055ba0eb3623e5335992 Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Wed, 24 Feb 2010 11:17:41 -0700
Subject: st/mesa: clean-ups in FBO code

---
 src/mesa/state_tracker/st_cb_fbo.c | 27 ++++++---------------------
 1 file changed, 6 insertions(+), 21 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c
index 0898866a73..ea040bdc4f 100644
--- a/src/mesa/state_tracker/st_cb_fbo.c
+++ b/src/mesa/state_tracker/st_cb_fbo.c
@@ -54,24 +54,6 @@
 #include "util/u_inlines.h"
 
 
-/**
- * Compute the renderbuffer's Red/Green/EtcBit fields from the pipe format.
- */
-static void
-init_renderbuffer_bits(struct st_renderbuffer *strb,
-                       enum pipe_format pipeFormat)
-{
-   struct st_format_info info;
-
-   if (!st_get_format_info( pipeFormat, &info )) {
-      assert( 0 );
-   }
-
-   strb->Base.Format = info.mesa_format;
-   strb->Base.DataType = st_format_datatype(pipeFormat);
-}
-
-
 /**
  * gl_renderbuffer::AllocStorage()
  * This is called to allocate the original drawing surface, and
@@ -94,7 +76,8 @@ st_renderbuffer_alloc_storage(GLcontext * ctx, struct gl_renderbuffer *rb,
    /* init renderbuffer fields */
    strb->Base.Width  = width;
    strb->Base.Height = height;
-   init_renderbuffer_bits(strb, format);
+   strb->Base.Format = st_pipe_format_to_mesa_format(format);
+   strb->Base.DataType = st_format_datatype(format);
 
    strb->defined = GL_FALSE;  /* undefined contents now */
 
@@ -249,8 +232,9 @@ st_new_renderbuffer_fb(enum pipe_format format, int samples, boolean sw)
    _mesa_init_renderbuffer(&strb->Base, 0);
    strb->Base.ClassID = 0x4242; /* just a unique value */
    strb->Base.NumSamples = samples;
+   strb->Base.Format = st_pipe_format_to_mesa_format(format);
+   strb->Base.DataType = st_format_datatype(format);
    strb->format = format;
-   init_renderbuffer_bits(strb, format);
    strb->software = sw;
    
    switch (format) {
@@ -395,7 +379,8 @@ st_render_texture(GLcontext *ctx,
                                            PIPE_BUFFER_USAGE_GPU_READ |
                                            PIPE_BUFFER_USAGE_GPU_WRITE);
 
-   init_renderbuffer_bits(strb, pt->format);
+   strb->Base.Format = st_pipe_format_to_mesa_format(pt->format);
+   strb->Base.DataType = st_format_datatype(pt->format);
 
    /*
    printf("RENDER TO TEXTURE obj=%p pt=%p surf=%p  %d x %d\n",
-- 
cgit v1.2.3


From 7802ef6f6978c68e732ed419e88d9af9f131b380 Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Wed, 24 Feb 2010 11:23:58 -0700
Subject: st/mesa: more format code clean-up and removal

---
 src/mesa/state_tracker/st_format.c | 71 ++++++++++----------------------------
 src/mesa/state_tracker/st_format.h | 15 --------
 2 files changed, 18 insertions(+), 68 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/state_tracker/st_format.c b/src/mesa/state_tracker/st_format.c
index 8789d4b750..c414c7da61 100644
--- a/src/mesa/state_tracker/st_format.c
+++ b/src/mesa/state_tracker/st_format.c
@@ -60,11 +60,11 @@ format_max_bits(enum pipe_format format)
 }
 
 
-/*
- * XXX temporary here
+/**
+ * Return basic GL datatype for the given gallium format.
  */
-GLboolean
-st_get_format_info(enum pipe_format format, struct st_format_info *pinfo)
+GLenum
+st_format_datatype(enum pipe_format format)
 {
    const struct util_format_description *desc;
 
@@ -72,85 +72,50 @@ st_get_format_info(enum pipe_format format, struct st_format_info *pinfo)
    assert(desc);
 
    if (desc->layout == UTIL_FORMAT_LAYOUT_PLAIN) {
-#if 0
-      printf("%s\n", util_format_name( format ) );
-#endif
-
-      /* Data type */
-      if (format == PIPE_FORMAT_A1R5G5B5_UNORM || format == PIPE_FORMAT_R5G6B5_UNORM) {
-         pinfo->datatype = GL_UNSIGNED_SHORT;
+      if (format == PIPE_FORMAT_A1R5G5B5_UNORM ||
+          format == PIPE_FORMAT_R5G6B5_UNORM) {
+         return GL_UNSIGNED_SHORT;
       }
       else if (format == PIPE_FORMAT_S8Z24_UNORM ||
                format == PIPE_FORMAT_Z24S8_UNORM) {
-         pinfo->datatype = GL_UNSIGNED_INT_24_8;
+         return GL_UNSIGNED_INT_24_8;
       }
       else {
          const GLuint size = format_max_bits(format);
          if (size == 8) {
             if (desc->channel[0].type == UTIL_FORMAT_TYPE_UNSIGNED)
-               pinfo->datatype = GL_UNSIGNED_BYTE;
+               return GL_UNSIGNED_BYTE;
             else
-               pinfo->datatype = GL_BYTE;
+               return GL_BYTE;
          }
          else if (size == 16) {
             if (desc->channel[0].type == UTIL_FORMAT_TYPE_UNSIGNED)
-               pinfo->datatype = GL_UNSIGNED_SHORT;
+               return GL_UNSIGNED_SHORT;
             else
-               pinfo->datatype = GL_SHORT;
+               return GL_SHORT;
          }
          else {
             assert( size <= 32 );
             if (desc->channel[0].type == UTIL_FORMAT_TYPE_UNSIGNED)
-               pinfo->datatype = GL_UNSIGNED_INT;
+               return GL_UNSIGNED_INT;
             else
-               pinfo->datatype = GL_INT;
+               return GL_INT;
          }
       }
-
-      pinfo->mesa_format = st_pipe_format_to_mesa_format(format);
    }
    else if (format == PIPE_FORMAT_YCBCR) {
-      pinfo->mesa_format = MESA_FORMAT_YCBCR;
-      pinfo->datatype = GL_UNSIGNED_SHORT;
+      return GL_UNSIGNED_SHORT;
    }
    else if (format == PIPE_FORMAT_YCBCR_REV) {
-      pinfo->mesa_format = MESA_FORMAT_YCBCR_REV;
-      pinfo->datatype = GL_UNSIGNED_SHORT;
+      return GL_UNSIGNED_SHORT;
    }
    else {
       /* compressed format? */
       assert(0);
    }
 
-#if 0
-   printf(
-      "ST_FORMAT: R(%u), G(%u), B(%u), A(%u), Z(%u), S(%u)\n",
-      pinfo->red_bits,
-      pinfo->green_bits,
-      pinfo->blue_bits,
-      pinfo->alpha_bits,
-      pinfo->depth_bits,
-      pinfo->stencil_bits );
-#endif
-
-   pinfo->format = format;
-
-   return GL_TRUE;
-}
-
-
-/**
- * Return basic GL datatype for the given format.
- */
-GLenum
-st_format_datatype(enum pipe_format format)
-{
-   struct st_format_info info;
-   if (!st_get_format_info( format, &info )) {
-      assert( 0 );
-      return 0;
-   }
-   return info.datatype;
+   assert(0);
+   return GL_NONE;
 }
 
 
diff --git a/src/mesa/state_tracker/st_format.h b/src/mesa/state_tracker/st_format.h
index 721c6aeb3d..6cc5a15b1d 100644
--- a/src/mesa/state_tracker/st_format.h
+++ b/src/mesa/state_tracker/st_format.h
@@ -32,21 +32,6 @@
 #include "main/formats.h"
 
 
-/**
- * Information for mapping Mesa formats to Gallium formats.
- */
-struct st_format_info
-{
-   enum pipe_format format;
-   gl_format mesa_format;
-   GLenum datatype;
-};
-
-
-GLboolean
-st_get_format_info(enum pipe_format format, struct st_format_info *pinfo);
-
-
 extern GLenum
 st_format_datatype(enum pipe_format format);
 
-- 
cgit v1.2.3


From 002f9142113149cd2db8e5a6016fb5f7795ce55e Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Wed, 24 Feb 2010 11:31:33 -0700
Subject: st/mesa: consolidate redundant format conversion code

---
 src/mesa/state_tracker/st_format.c | 107 ++++++++-----------------------------
 1 file changed, 21 insertions(+), 86 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/state_tracker/st_format.c b/src/mesa/state_tracker/st_format.c
index c414c7da61..a14d9cc3a2 100644
--- a/src/mesa/state_tracker/st_format.c
+++ b/src/mesa/state_tracker/st_format.c
@@ -119,6 +119,9 @@ st_format_datatype(enum pipe_format format)
 }
 
 
+/**
+ * Translate Mesa format to Gallium format.
+ */
 enum pipe_format
 st_mesa_format_to_pipe_format(gl_format mesaFormat)
 {
@@ -192,10 +195,13 @@ st_mesa_format_to_pipe_format(gl_format mesaFormat)
 }
 
 
+/**
+ * Translate Gallium format to Mesa format.
+ */
 gl_format
-st_pipe_format_to_mesa_format(enum pipe_format pipeFormat)
+st_pipe_format_to_mesa_format(enum pipe_format format)
 {
-   switch (pipeFormat) {
+   switch (format) {
    case PIPE_FORMAT_A8R8G8B8_UNORM:
       return MESA_FORMAT_ARGB8888;
    case PIPE_FORMAT_X8R8G8B8_UNORM:
@@ -218,25 +224,29 @@ st_pipe_format_to_mesa_format(enum pipe_format pipeFormat)
       return MESA_FORMAT_L8;
    case PIPE_FORMAT_I8_UNORM:
       return MESA_FORMAT_I8;
+   case PIPE_FORMAT_S8_UNORM:
+      return MESA_FORMAT_S8;
+
+   case PIPE_FORMAT_R16G16B16A16_SNORM:
+      return MESA_FORMAT_SIGNED_RGBA_16;
+
    case PIPE_FORMAT_Z16_UNORM:
       return MESA_FORMAT_Z16;
    case PIPE_FORMAT_Z32_UNORM:
       return MESA_FORMAT_Z32;
-   case PIPE_FORMAT_Z24X8_UNORM:
-      return MESA_FORMAT_Z24_X8;
    case PIPE_FORMAT_Z24S8_UNORM:
       return MESA_FORMAT_Z24_S8;
+   case PIPE_FORMAT_Z24X8_UNORM:
+      return MESA_FORMAT_Z24_X8;
    case PIPE_FORMAT_X8Z24_UNORM:
       return MESA_FORMAT_X8_Z24;
    case PIPE_FORMAT_S8Z24_UNORM:
       return MESA_FORMAT_S8_Z24;
-   case PIPE_FORMAT_S8_UNORM:
-      return MESA_FORMAT_S8;
 
    case PIPE_FORMAT_YCBCR:
       return MESA_FORMAT_YCBCR;
-   case PIPE_FORMAT_R16G16B16A16_SNORM:
-      return MESA_FORMAT_SIGNED_RGBA_16;
+   case PIPE_FORMAT_YCBCR_REV:
+      return MESA_FORMAT_YCBCR_REV;
 
 #if FEATURE_texture_s3tc
    case PIPE_FORMAT_DXT1_RGB:
@@ -258,6 +268,7 @@ st_pipe_format_to_mesa_format(enum pipe_format pipeFormat)
       return MESA_FORMAT_SRGBA_DXT5;
 #endif
 #endif
+
 #if FEATURE_EXT_texture_sRGB
    case PIPE_FORMAT_A8L8_SRGB:
       return MESA_FORMAT_SLA8;
@@ -272,7 +283,7 @@ st_pipe_format_to_mesa_format(enum pipe_format pipeFormat)
 #endif
    default:
       assert(0);
-      return 0;
+      return MESA_FORMAT_NONE;
    }
 }
 
@@ -641,82 +652,6 @@ st_choose_renderbuffer_format(struct pipe_screen *screen,
 }
 
 
-static gl_format
-translate_gallium_format_to_mesa_format(enum pipe_format format)
-{
-   switch (format) {
-   case PIPE_FORMAT_A8R8G8B8_UNORM:
-      return MESA_FORMAT_ARGB8888;
-   case PIPE_FORMAT_X8R8G8B8_UNORM:
-      return MESA_FORMAT_XRGB8888;
-   case PIPE_FORMAT_A1R5G5B5_UNORM:
-      return MESA_FORMAT_ARGB1555;
-   case PIPE_FORMAT_A4R4G4B4_UNORM:
-      return MESA_FORMAT_ARGB4444;
-   case PIPE_FORMAT_R5G6B5_UNORM:
-      return MESA_FORMAT_RGB565;
-   case PIPE_FORMAT_A8L8_UNORM:
-      return MESA_FORMAT_AL88;
-   case PIPE_FORMAT_A8_UNORM:
-      return MESA_FORMAT_A8;
-   case PIPE_FORMAT_L8_UNORM:
-      return MESA_FORMAT_L8;
-   case PIPE_FORMAT_I8_UNORM:
-      return MESA_FORMAT_I8;
-   case PIPE_FORMAT_Z16_UNORM:
-      return MESA_FORMAT_Z16;
-   case PIPE_FORMAT_Z32_UNORM:
-      return MESA_FORMAT_Z32;
-   case PIPE_FORMAT_Z24S8_UNORM:
-      return MESA_FORMAT_Z24_S8;
-   case PIPE_FORMAT_X8Z24_UNORM:
-      return MESA_FORMAT_X8_Z24;
-   case PIPE_FORMAT_S8Z24_UNORM:
-      return MESA_FORMAT_S8_Z24;
-   case PIPE_FORMAT_YCBCR:
-      return MESA_FORMAT_YCBCR;
-   case PIPE_FORMAT_YCBCR_REV:
-      return MESA_FORMAT_YCBCR_REV;
-#if FEATURE_texture_s3tc
-   case PIPE_FORMAT_DXT1_RGB:
-      return MESA_FORMAT_RGB_DXT1;
-   case PIPE_FORMAT_DXT1_RGBA:
-      return MESA_FORMAT_RGBA_DXT1;
-   case PIPE_FORMAT_DXT3_RGBA:
-      return MESA_FORMAT_RGBA_DXT3;
-   case PIPE_FORMAT_DXT5_RGBA:
-      return MESA_FORMAT_RGBA_DXT5;
-#if FEATURE_EXT_texture_sRGB
-   case PIPE_FORMAT_DXT1_SRGB:
-      return MESA_FORMAT_SRGB_DXT1;
-   case PIPE_FORMAT_DXT1_SRGBA:
-      return MESA_FORMAT_SRGBA_DXT1;
-   case PIPE_FORMAT_DXT3_SRGBA:
-      return MESA_FORMAT_SRGBA_DXT3;
-   case PIPE_FORMAT_DXT5_SRGBA:
-      return MESA_FORMAT_SRGBA_DXT5;
-#endif
-#endif
-#if FEATURE_EXT_texture_sRGB
-   case PIPE_FORMAT_A8L8_SRGB:
-      return MESA_FORMAT_SLA8;
-   case PIPE_FORMAT_L8_SRGB:
-      return MESA_FORMAT_SL8;
-   case PIPE_FORMAT_R8G8B8_SRGB:
-      return MESA_FORMAT_SRGB8;
-   case PIPE_FORMAT_R8G8B8A8_SRGB:
-      return MESA_FORMAT_SRGBA8;
-   case PIPE_FORMAT_A8R8G8B8_SRGB:
-      return MESA_FORMAT_SARGB8;
-#endif
-   /* XXX add additional cases */
-   default:
-      assert(0);
-      return MESA_FORMAT_NONE;
-   }
-}
-
-
 /**
  * Called via ctx->Driver.chooseTextureFormat().
  */
@@ -734,7 +669,7 @@ st_ChooseTextureFormat(GLcontext *ctx, GLint internalFormat,
    if (pFormat == PIPE_FORMAT_NONE)
       return MESA_FORMAT_NONE;
 
-   return translate_gallium_format_to_mesa_format(pFormat);
+   return st_pipe_format_to_mesa_format(pFormat);
 }
 
 
-- 
cgit v1.2.3


From 517faa4f3720134a19e1834144c75cf58a68c9c8 Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Wed, 24 Feb 2010 11:33:54 -0700
Subject: st/mesa: updated comments

---
 src/mesa/state_tracker/st_format.c | 4 ++--
 src/mesa/state_tracker/st_format.h | 3 ++-
 2 files changed, 4 insertions(+), 3 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/state_tracker/st_format.c b/src/mesa/state_tracker/st_format.c
index a14d9cc3a2..c8f9ac3038 100644
--- a/src/mesa/state_tracker/st_format.c
+++ b/src/mesa/state_tracker/st_format.c
@@ -1,7 +1,7 @@
 /**************************************************************************
  * 
  * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
- * Copyright (c) 2008 VMware, Inc.
+ * Copyright (c) 2008-2010 VMware, Inc.
  * All Rights Reserved.
  * 
  * Permission is hereby granted, free of charge, to any person obtaining a
@@ -28,7 +28,7 @@
 
 
 /**
- * Texture Image-related functions.
+ * Mesa / Gallium format conversion and format selection code.
  * \author Brian Paul
  */
 
diff --git a/src/mesa/state_tracker/st_format.h b/src/mesa/state_tracker/st_format.h
index 6cc5a15b1d..a6cf7025a9 100644
--- a/src/mesa/state_tracker/st_format.h
+++ b/src/mesa/state_tracker/st_format.h
@@ -1,6 +1,7 @@
 /**************************************************************************
  * 
  * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
+ * Copyright (c) 2010 VMware, Inc.
  * All Rights Reserved.
  * 
  * Permission is hereby granted, free of charge, to any person obtaining a
@@ -61,4 +62,4 @@ extern GLboolean
 st_equal_formats(enum pipe_format pFormat, GLenum format, GLenum type);
 
 
-#endif /* ST_CB_TEXIMAGE_H */
+#endif /* ST_FORMAT_H */
-- 
cgit v1.2.3


From caa46f753835f8bb87fc16e22734f27a1d52bb27 Mon Sep 17 00:00:00 2001
From: Kristian Høgsberg <krh@bitplanet.net>
Date: Thu, 11 Feb 2010 17:36:59 -0500
Subject: glapi: Add GL_OES_EGL_image

---
 include/GL/gl.h                      | 15 +++++++++++++++
 src/mesa/glapi/gen/Makefile          |  3 ++-
 src/mesa/glapi/gen/OES_EGL_image.xml | 20 ++++++++++++++++++++
 src/mesa/glapi/gen/gl_API.xml        |  2 ++
 4 files changed, 39 insertions(+), 1 deletion(-)
 create mode 100644 src/mesa/glapi/gen/OES_EGL_image.xml

(limited to 'src/mesa')

diff --git a/include/GL/gl.h b/include/GL/gl.h
index 36153b159b..3fce3dfc0a 100644
--- a/include/GL/gl.h
+++ b/include/GL/gl.h
@@ -2196,6 +2196,21 @@ typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEATIPROC) (GLenum modeRGB, GLen
 #endif /* GL_ATI_blend_equation_separate */
 
 
+/* GL_OES_EGL_image */
+#ifndef GL_OES_EGL_image
+typedef void* GLeglImageOES;
+#endif
+
+#ifndef GL_OES_EGL_image
+#define GL_OES_EGL_image 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glEGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image);
+GLAPI void APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image);
+#endif
+typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image);
+typedef void (APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image);
+#endif
+
 
 /**
  ** NOTE!!!!!  If you add new functions to this file, or update
diff --git a/src/mesa/glapi/gen/Makefile b/src/mesa/glapi/gen/Makefile
index 6b6b9aecaa..4984da8581 100644
--- a/src/mesa/glapi/gen/Makefile
+++ b/src/mesa/glapi/gen/Makefile
@@ -87,7 +87,8 @@ API_XML = \
 	EXT_packed_depth_stencil.xml \
 	EXT_provoking_vertex.xml \
 	EXT_texture_array.xml \
-	NV_conditional_render.xml
+	NV_conditional_render.xml \
+	OES_EGL_image.xml
 
 COMMON = $(API_XML) gl_XML.py glX_XML.py license.py typeexpr.py
 
diff --git a/src/mesa/glapi/gen/OES_EGL_image.xml b/src/mesa/glapi/gen/OES_EGL_image.xml
new file mode 100644
index 0000000000..1cb43d49a4
--- /dev/null
+++ b/src/mesa/glapi/gen/OES_EGL_image.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<OpenGLAPI>
+
+<category name="GL_OES_EGL_image">
+
+    <function name="EGLImageTargetTexture2DOES" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="writeOffset" type="GLvoid *"/>
+    </function>
+
+    <function name="EGLImageTargetRenderbufferStorageOES" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="writeOffset" type="GLvoid *"/>
+    </function>
+
+</category>
+
+</OpenGLAPI>
diff --git a/src/mesa/glapi/gen/gl_API.xml b/src/mesa/glapi/gen/gl_API.xml
index fbf8b0c3e4..0b3d57baa6 100644
--- a/src/mesa/glapi/gen/gl_API.xml
+++ b/src/mesa/glapi/gen/gl_API.xml
@@ -12502,4 +12502,6 @@
     </function>
 </category>
 
+<xi:include href="OES_EGL_image.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
+
 </OpenGLAPI>
-- 
cgit v1.2.3


From 07b07b4d723394c82f7ba915c1cba620b307013d Mon Sep 17 00:00:00 2001
From: Kristian Høgsberg <krh@bitplanet.net>
Date: Thu, 11 Feb 2010 17:37:50 -0500
Subject: glapi: GL_OES_EGL_image autogenerated files

---
 src/glx/indirect.c             |    3 +-
 src/mesa/glapi/glapidispatch.h |   16 +-
 src/mesa/glapi/glapioffsets.h  |    6 +-
 src/mesa/glapi/glapitable.h    |    2 +
 src/mesa/glapi/glapitemp.h     |   12 +
 src/mesa/glapi/glprocs.h       |  608 +++++------
 src/mesa/main/remap_helper.h   | 2317 ++++++++++++++++++++--------------------
 src/mesa/sparc/glapi_sparc.S   |    2 +
 src/mesa/x86-64/glapi_x86-64.S |   74 ++
 src/mesa/x86/glapi_x86.S       |    2 +
 10 files changed, 1586 insertions(+), 1456 deletions(-)

(limited to 'src/mesa')

diff --git a/src/glx/indirect.c b/src/glx/indirect.c
index 48bae1478f..262637a947 100644
--- a/src/glx/indirect.c
+++ b/src/glx/indirect.c
@@ -30,8 +30,7 @@
 #include "indirect.h"
 #include "glxclient.h"
 #include "indirect_size.h"
-#include "glapitable.h"
-#include "glapidispatch.h"
+#include "dispatch.h"
 #include "glapi.h"
 #include "glthread.h"
 #include <GL/glxproto.h>
diff --git a/src/mesa/glapi/glapidispatch.h b/src/mesa/glapi/glapidispatch.h
index 51ae7feaf6..b7f661c535 100644
--- a/src/mesa/glapi/glapidispatch.h
+++ b/src/mesa/glapi/glapidispatch.h
@@ -2470,10 +2470,16 @@
 #define CALL_GetQueryObjectui64vEXT(disp, parameters) (*((disp)->GetQueryObjectui64vEXT)) parameters
 #define GET_GetQueryObjectui64vEXT(disp) ((disp)->GetQueryObjectui64vEXT)
 #define SET_GetQueryObjectui64vEXT(disp, fn) ((disp)->GetQueryObjectui64vEXT = fn)
+#define CALL_EGLImageTargetRenderbufferStorageOES(disp, parameters) (*((disp)->EGLImageTargetRenderbufferStorageOES)) parameters
+#define GET_EGLImageTargetRenderbufferStorageOES(disp) ((disp)->EGLImageTargetRenderbufferStorageOES)
+#define SET_EGLImageTargetRenderbufferStorageOES(disp, fn) ((disp)->EGLImageTargetRenderbufferStorageOES = fn)
+#define CALL_EGLImageTargetTexture2DOES(disp, parameters) (*((disp)->EGLImageTargetTexture2DOES)) parameters
+#define GET_EGLImageTargetTexture2DOES(disp) ((disp)->EGLImageTargetTexture2DOES)
+#define SET_EGLImageTargetTexture2DOES(disp, fn) ((disp)->EGLImageTargetTexture2DOES = fn)
 
 #else
 
-#define driDispatchRemapTable_size 395
+#define driDispatchRemapTable_size 397
 extern int driDispatchRemapTable[ driDispatchRemapTable_size ];
 
 #define AttachShader_remap_index 0
@@ -2871,6 +2877,8 @@ extern int driDispatchRemapTable[ driDispatchRemapTable_size ];
 #define ProgramLocalParameters4fvEXT_remap_index 392
 #define GetQueryObjecti64vEXT_remap_index 393
 #define GetQueryObjectui64vEXT_remap_index 394
+#define EGLImageTargetRenderbufferStorageOES_remap_index 395
+#define EGLImageTargetTexture2DOES_remap_index 396
 
 #define CALL_AttachShader(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLuint)), driDispatchRemapTable[AttachShader_remap_index], parameters)
 #define GET_AttachShader(disp) GET_by_offset(disp, driDispatchRemapTable[AttachShader_remap_index])
@@ -4057,6 +4065,12 @@ extern int driDispatchRemapTable[ driDispatchRemapTable_size ];
 #define CALL_GetQueryObjectui64vEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLuint64EXT *)), driDispatchRemapTable[GetQueryObjectui64vEXT_remap_index], parameters)
 #define GET_GetQueryObjectui64vEXT(disp) GET_by_offset(disp, driDispatchRemapTable[GetQueryObjectui64vEXT_remap_index])
 #define SET_GetQueryObjectui64vEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetQueryObjectui64vEXT_remap_index], fn)
+#define CALL_EGLImageTargetRenderbufferStorageOES(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLvoid *)), driDispatchRemapTable[EGLImageTargetRenderbufferStorageOES_remap_index], parameters)
+#define GET_EGLImageTargetRenderbufferStorageOES(disp) GET_by_offset(disp, driDispatchRemapTable[EGLImageTargetRenderbufferStorageOES_remap_index])
+#define SET_EGLImageTargetRenderbufferStorageOES(disp, fn) SET_by_offset(disp, driDispatchRemapTable[EGLImageTargetRenderbufferStorageOES_remap_index], fn)
+#define CALL_EGLImageTargetTexture2DOES(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLvoid *)), driDispatchRemapTable[EGLImageTargetTexture2DOES_remap_index], parameters)
+#define GET_EGLImageTargetTexture2DOES(disp) GET_by_offset(disp, driDispatchRemapTable[EGLImageTargetTexture2DOES_remap_index])
+#define SET_EGLImageTargetTexture2DOES(disp, fn) SET_by_offset(disp, driDispatchRemapTable[EGLImageTargetTexture2DOES_remap_index], fn)
 
 #endif /* !defined(_GLAPI_USE_REMAP_TABLE) */
 
diff --git a/src/mesa/glapi/glapioffsets.h b/src/mesa/glapi/glapioffsets.h
index c5d367f6f2..8e16e22983 100644
--- a/src/mesa/glapi/glapioffsets.h
+++ b/src/mesa/glapi/glapioffsets.h
@@ -837,7 +837,9 @@
 #define _gloffset_ProgramLocalParameters4fvEXT 800
 #define _gloffset_GetQueryObjecti64vEXT 801
 #define _gloffset_GetQueryObjectui64vEXT 802
-#define _gloffset_FIRST_DYNAMIC 803
+#define _gloffset_EGLImageTargetRenderbufferStorageOES 803
+#define _gloffset_EGLImageTargetTexture2DOES 804
+#define _gloffset_FIRST_DYNAMIC 805
 
 #else
 
@@ -1236,6 +1238,8 @@
 #define _gloffset_ProgramLocalParameters4fvEXT driDispatchRemapTable[ProgramLocalParameters4fvEXT_remap_index]
 #define _gloffset_GetQueryObjecti64vEXT driDispatchRemapTable[GetQueryObjecti64vEXT_remap_index]
 #define _gloffset_GetQueryObjectui64vEXT driDispatchRemapTable[GetQueryObjectui64vEXT_remap_index]
+#define _gloffset_EGLImageTargetRenderbufferStorageOES driDispatchRemapTable[EGLImageTargetRenderbufferStorageOES_remap_index]
+#define _gloffset_EGLImageTargetTexture2DOES driDispatchRemapTable[EGLImageTargetTexture2DOES_remap_index]
 
 #endif /* !defined(_GLAPI_USE_REMAP_TABLE) */
 
diff --git a/src/mesa/glapi/glapitable.h b/src/mesa/glapi/glapitable.h
index 0c5b46d04b..8aeb450b99 100644
--- a/src/mesa/glapi/glapitable.h
+++ b/src/mesa/glapi/glapitable.h
@@ -843,6 +843,8 @@ struct _glapi_table
    void (GLAPIENTRYP ProgramLocalParameters4fvEXT)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); /* 800 */
    void (GLAPIENTRYP GetQueryObjecti64vEXT)(GLuint id, GLenum pname, GLint64EXT * params); /* 801 */
    void (GLAPIENTRYP GetQueryObjectui64vEXT)(GLuint id, GLenum pname, GLuint64EXT * params); /* 802 */
+   void (GLAPIENTRYP EGLImageTargetRenderbufferStorageOES)(GLenum target, GLvoid * writeOffset); /* 803 */
+   void (GLAPIENTRYP EGLImageTargetTexture2DOES)(GLenum target, GLvoid * writeOffset); /* 804 */
 };
 
 #endif /* !defined( _GLAPI_TABLE_H_ ) */
diff --git a/src/mesa/glapi/glapitemp.h b/src/mesa/glapi/glapitemp.h
index 2540ef6465..2ef4728e09 100644
--- a/src/mesa/glapi/glapitemp.h
+++ b/src/mesa/glapi/glapitemp.h
@@ -5612,6 +5612,16 @@ KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_802)(GLuint id, GLenum pname, GLu
    DISPATCH(GetQueryObjectui64vEXT, (id, pname, params), (F, "glGetQueryObjectui64vEXT(%d, 0x%x, %p);\n", id, pname, (const void *) params));
 }
 
+KEYWORD1 void KEYWORD2 NAME(EGLImageTargetRenderbufferStorageOES)(GLenum target, GLvoid * writeOffset)
+{
+   DISPATCH(EGLImageTargetRenderbufferStorageOES, (target, writeOffset), (F, "glEGLImageTargetRenderbufferStorageOES(0x%x, %p);\n", target, (const void *) writeOffset));
+}
+
+KEYWORD1 void KEYWORD2 NAME(EGLImageTargetTexture2DOES)(GLenum target, GLvoid * writeOffset)
+{
+   DISPATCH(EGLImageTargetTexture2DOES, (target, writeOffset), (F, "glEGLImageTargetTexture2DOES(0x%x, %p);\n", target, (const void *) writeOffset));
+}
+
 
 #endif /* _GLAPI_SKIP_NORMAL_ENTRY_POINTS */
 
@@ -6568,6 +6578,8 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
    TABLE_ENTRY(_dispatch_stub_800),
    TABLE_ENTRY(_dispatch_stub_801),
    TABLE_ENTRY(_dispatch_stub_802),
+   TABLE_ENTRY(EGLImageTargetRenderbufferStorageOES),
+   TABLE_ENTRY(EGLImageTargetTexture2DOES),
    /* A whole bunch of no-op functions.  These might be called
     * when someone tries to call a dynamically-registered
     * extension function without a current rendering context.
diff --git a/src/mesa/glapi/glprocs.h b/src/mesa/glapi/glprocs.h
index b590a7c41d..513fa89726 100644
--- a/src/mesa/glapi/glprocs.h
+++ b/src/mesa/glapi/glprocs.h
@@ -855,6 +855,8 @@ static const char gl_string_table[] =
     "glProgramLocalParameters4fvEXT\0"
     "glGetQueryObjecti64vEXT\0"
     "glGetQueryObjectui64vEXT\0"
+    "glEGLImageTargetRenderbufferStorageOES\0"
+    "glEGLImageTargetTexture2DOES\0"
     "glArrayElementEXT\0"
     "glBindTextureEXT\0"
     "glDrawArraysEXT\0"
@@ -2071,308 +2073,310 @@ static const glprocs_table_t static_functions[] = {
     NAME_FUNC_OFFSET(14176, gl_dispatch_stub_800, gl_dispatch_stub_800, NULL, _gloffset_ProgramLocalParameters4fvEXT),
     NAME_FUNC_OFFSET(14207, gl_dispatch_stub_801, gl_dispatch_stub_801, NULL, _gloffset_GetQueryObjecti64vEXT),
     NAME_FUNC_OFFSET(14231, gl_dispatch_stub_802, gl_dispatch_stub_802, NULL, _gloffset_GetQueryObjectui64vEXT),
-    NAME_FUNC_OFFSET(14256, glArrayElement, glArrayElement, NULL, _gloffset_ArrayElement),
-    NAME_FUNC_OFFSET(14274, glBindTexture, glBindTexture, NULL, _gloffset_BindTexture),
-    NAME_FUNC_OFFSET(14291, glDrawArrays, glDrawArrays, NULL, _gloffset_DrawArrays),
-    NAME_FUNC_OFFSET(14307, glAreTexturesResident, glAreTexturesResidentEXT, glAreTexturesResidentEXT, _gloffset_AreTexturesResident),
-    NAME_FUNC_OFFSET(14332, glCopyTexImage1D, glCopyTexImage1D, NULL, _gloffset_CopyTexImage1D),
-    NAME_FUNC_OFFSET(14352, glCopyTexImage2D, glCopyTexImage2D, NULL, _gloffset_CopyTexImage2D),
-    NAME_FUNC_OFFSET(14372, glCopyTexSubImage1D, glCopyTexSubImage1D, NULL, _gloffset_CopyTexSubImage1D),
-    NAME_FUNC_OFFSET(14395, glCopyTexSubImage2D, glCopyTexSubImage2D, NULL, _gloffset_CopyTexSubImage2D),
-    NAME_FUNC_OFFSET(14418, glDeleteTextures, glDeleteTexturesEXT, glDeleteTexturesEXT, _gloffset_DeleteTextures),
-    NAME_FUNC_OFFSET(14438, glGenTextures, glGenTexturesEXT, glGenTexturesEXT, _gloffset_GenTextures),
-    NAME_FUNC_OFFSET(14455, glGetPointerv, glGetPointerv, NULL, _gloffset_GetPointerv),
-    NAME_FUNC_OFFSET(14472, glIsTexture, glIsTextureEXT, glIsTextureEXT, _gloffset_IsTexture),
-    NAME_FUNC_OFFSET(14487, glPrioritizeTextures, glPrioritizeTextures, NULL, _gloffset_PrioritizeTextures),
-    NAME_FUNC_OFFSET(14511, glTexSubImage1D, glTexSubImage1D, NULL, _gloffset_TexSubImage1D),
-    NAME_FUNC_OFFSET(14530, glTexSubImage2D, glTexSubImage2D, NULL, _gloffset_TexSubImage2D),
-    NAME_FUNC_OFFSET(14549, glBlendColor, glBlendColor, NULL, _gloffset_BlendColor),
-    NAME_FUNC_OFFSET(14565, glBlendEquation, glBlendEquation, NULL, _gloffset_BlendEquation),
-    NAME_FUNC_OFFSET(14584, glDrawRangeElements, glDrawRangeElements, NULL, _gloffset_DrawRangeElements),
-    NAME_FUNC_OFFSET(14607, glColorTable, glColorTable, NULL, _gloffset_ColorTable),
-    NAME_FUNC_OFFSET(14623, glColorTable, glColorTable, NULL, _gloffset_ColorTable),
-    NAME_FUNC_OFFSET(14639, glColorTableParameterfv, glColorTableParameterfv, NULL, _gloffset_ColorTableParameterfv),
-    NAME_FUNC_OFFSET(14666, glColorTableParameteriv, glColorTableParameteriv, NULL, _gloffset_ColorTableParameteriv),
-    NAME_FUNC_OFFSET(14693, glCopyColorTable, glCopyColorTable, NULL, _gloffset_CopyColorTable),
-    NAME_FUNC_OFFSET(14713, glGetColorTable, glGetColorTableEXT, glGetColorTableEXT, _gloffset_GetColorTable),
-    NAME_FUNC_OFFSET(14732, glGetColorTable, glGetColorTableEXT, glGetColorTableEXT, _gloffset_GetColorTable),
-    NAME_FUNC_OFFSET(14751, glGetColorTableParameterfv, glGetColorTableParameterfvEXT, glGetColorTableParameterfvEXT, _gloffset_GetColorTableParameterfv),
-    NAME_FUNC_OFFSET(14781, glGetColorTableParameterfv, glGetColorTableParameterfvEXT, glGetColorTableParameterfvEXT, _gloffset_GetColorTableParameterfv),
-    NAME_FUNC_OFFSET(14811, glGetColorTableParameteriv, glGetColorTableParameterivEXT, glGetColorTableParameterivEXT, _gloffset_GetColorTableParameteriv),
-    NAME_FUNC_OFFSET(14841, glGetColorTableParameteriv, glGetColorTableParameterivEXT, glGetColorTableParameterivEXT, _gloffset_GetColorTableParameteriv),
-    NAME_FUNC_OFFSET(14871, glColorSubTable, glColorSubTable, NULL, _gloffset_ColorSubTable),
-    NAME_FUNC_OFFSET(14890, glCopyColorSubTable, glCopyColorSubTable, NULL, _gloffset_CopyColorSubTable),
-    NAME_FUNC_OFFSET(14913, glConvolutionFilter1D, glConvolutionFilter1D, NULL, _gloffset_ConvolutionFilter1D),
-    NAME_FUNC_OFFSET(14938, glConvolutionFilter2D, glConvolutionFilter2D, NULL, _gloffset_ConvolutionFilter2D),
-    NAME_FUNC_OFFSET(14963, glConvolutionParameterf, glConvolutionParameterf, NULL, _gloffset_ConvolutionParameterf),
-    NAME_FUNC_OFFSET(14990, glConvolutionParameterfv, glConvolutionParameterfv, NULL, _gloffset_ConvolutionParameterfv),
-    NAME_FUNC_OFFSET(15018, glConvolutionParameteri, glConvolutionParameteri, NULL, _gloffset_ConvolutionParameteri),
-    NAME_FUNC_OFFSET(15045, glConvolutionParameteriv, glConvolutionParameteriv, NULL, _gloffset_ConvolutionParameteriv),
-    NAME_FUNC_OFFSET(15073, glCopyConvolutionFilter1D, glCopyConvolutionFilter1D, NULL, _gloffset_CopyConvolutionFilter1D),
-    NAME_FUNC_OFFSET(15102, glCopyConvolutionFilter2D, glCopyConvolutionFilter2D, NULL, _gloffset_CopyConvolutionFilter2D),
-    NAME_FUNC_OFFSET(15131, glGetConvolutionFilter, gl_dispatch_stub_356, gl_dispatch_stub_356, _gloffset_GetConvolutionFilter),
-    NAME_FUNC_OFFSET(15157, glGetConvolutionParameterfv, gl_dispatch_stub_357, gl_dispatch_stub_357, _gloffset_GetConvolutionParameterfv),
-    NAME_FUNC_OFFSET(15188, glGetConvolutionParameteriv, gl_dispatch_stub_358, gl_dispatch_stub_358, _gloffset_GetConvolutionParameteriv),
-    NAME_FUNC_OFFSET(15219, glGetSeparableFilter, gl_dispatch_stub_359, gl_dispatch_stub_359, _gloffset_GetSeparableFilter),
-    NAME_FUNC_OFFSET(15243, glSeparableFilter2D, glSeparableFilter2D, NULL, _gloffset_SeparableFilter2D),
-    NAME_FUNC_OFFSET(15266, glGetHistogram, gl_dispatch_stub_361, gl_dispatch_stub_361, _gloffset_GetHistogram),
-    NAME_FUNC_OFFSET(15284, glGetHistogramParameterfv, gl_dispatch_stub_362, gl_dispatch_stub_362, _gloffset_GetHistogramParameterfv),
-    NAME_FUNC_OFFSET(15313, glGetHistogramParameteriv, gl_dispatch_stub_363, gl_dispatch_stub_363, _gloffset_GetHistogramParameteriv),
-    NAME_FUNC_OFFSET(15342, glGetMinmax, gl_dispatch_stub_364, gl_dispatch_stub_364, _gloffset_GetMinmax),
-    NAME_FUNC_OFFSET(15357, glGetMinmaxParameterfv, gl_dispatch_stub_365, gl_dispatch_stub_365, _gloffset_GetMinmaxParameterfv),
-    NAME_FUNC_OFFSET(15383, glGetMinmaxParameteriv, gl_dispatch_stub_366, gl_dispatch_stub_366, _gloffset_GetMinmaxParameteriv),
-    NAME_FUNC_OFFSET(15409, glHistogram, glHistogram, NULL, _gloffset_Histogram),
-    NAME_FUNC_OFFSET(15424, glMinmax, glMinmax, NULL, _gloffset_Minmax),
-    NAME_FUNC_OFFSET(15436, glResetHistogram, glResetHistogram, NULL, _gloffset_ResetHistogram),
-    NAME_FUNC_OFFSET(15456, glResetMinmax, glResetMinmax, NULL, _gloffset_ResetMinmax),
-    NAME_FUNC_OFFSET(15473, glTexImage3D, glTexImage3D, NULL, _gloffset_TexImage3D),
-    NAME_FUNC_OFFSET(15489, glTexSubImage3D, glTexSubImage3D, NULL, _gloffset_TexSubImage3D),
-    NAME_FUNC_OFFSET(15508, glCopyTexSubImage3D, glCopyTexSubImage3D, NULL, _gloffset_CopyTexSubImage3D),
-    NAME_FUNC_OFFSET(15531, glActiveTextureARB, glActiveTextureARB, NULL, _gloffset_ActiveTextureARB),
-    NAME_FUNC_OFFSET(15547, glClientActiveTextureARB, glClientActiveTextureARB, NULL, _gloffset_ClientActiveTextureARB),
-    NAME_FUNC_OFFSET(15569, glMultiTexCoord1dARB, glMultiTexCoord1dARB, NULL, _gloffset_MultiTexCoord1dARB),
-    NAME_FUNC_OFFSET(15587, glMultiTexCoord1dvARB, glMultiTexCoord1dvARB, NULL, _gloffset_MultiTexCoord1dvARB),
-    NAME_FUNC_OFFSET(15606, glMultiTexCoord1fARB, glMultiTexCoord1fARB, NULL, _gloffset_MultiTexCoord1fARB),
-    NAME_FUNC_OFFSET(15624, glMultiTexCoord1fvARB, glMultiTexCoord1fvARB, NULL, _gloffset_MultiTexCoord1fvARB),
-    NAME_FUNC_OFFSET(15643, glMultiTexCoord1iARB, glMultiTexCoord1iARB, NULL, _gloffset_MultiTexCoord1iARB),
-    NAME_FUNC_OFFSET(15661, glMultiTexCoord1ivARB, glMultiTexCoord1ivARB, NULL, _gloffset_MultiTexCoord1ivARB),
-    NAME_FUNC_OFFSET(15680, glMultiTexCoord1sARB, glMultiTexCoord1sARB, NULL, _gloffset_MultiTexCoord1sARB),
-    NAME_FUNC_OFFSET(15698, glMultiTexCoord1svARB, glMultiTexCoord1svARB, NULL, _gloffset_MultiTexCoord1svARB),
-    NAME_FUNC_OFFSET(15717, glMultiTexCoord2dARB, glMultiTexCoord2dARB, NULL, _gloffset_MultiTexCoord2dARB),
-    NAME_FUNC_OFFSET(15735, glMultiTexCoord2dvARB, glMultiTexCoord2dvARB, NULL, _gloffset_MultiTexCoord2dvARB),
-    NAME_FUNC_OFFSET(15754, glMultiTexCoord2fARB, glMultiTexCoord2fARB, NULL, _gloffset_MultiTexCoord2fARB),
-    NAME_FUNC_OFFSET(15772, glMultiTexCoord2fvARB, glMultiTexCoord2fvARB, NULL, _gloffset_MultiTexCoord2fvARB),
-    NAME_FUNC_OFFSET(15791, glMultiTexCoord2iARB, glMultiTexCoord2iARB, NULL, _gloffset_MultiTexCoord2iARB),
-    NAME_FUNC_OFFSET(15809, glMultiTexCoord2ivARB, glMultiTexCoord2ivARB, NULL, _gloffset_MultiTexCoord2ivARB),
-    NAME_FUNC_OFFSET(15828, glMultiTexCoord2sARB, glMultiTexCoord2sARB, NULL, _gloffset_MultiTexCoord2sARB),
-    NAME_FUNC_OFFSET(15846, glMultiTexCoord2svARB, glMultiTexCoord2svARB, NULL, _gloffset_MultiTexCoord2svARB),
-    NAME_FUNC_OFFSET(15865, glMultiTexCoord3dARB, glMultiTexCoord3dARB, NULL, _gloffset_MultiTexCoord3dARB),
-    NAME_FUNC_OFFSET(15883, glMultiTexCoord3dvARB, glMultiTexCoord3dvARB, NULL, _gloffset_MultiTexCoord3dvARB),
-    NAME_FUNC_OFFSET(15902, glMultiTexCoord3fARB, glMultiTexCoord3fARB, NULL, _gloffset_MultiTexCoord3fARB),
-    NAME_FUNC_OFFSET(15920, glMultiTexCoord3fvARB, glMultiTexCoord3fvARB, NULL, _gloffset_MultiTexCoord3fvARB),
-    NAME_FUNC_OFFSET(15939, glMultiTexCoord3iARB, glMultiTexCoord3iARB, NULL, _gloffset_MultiTexCoord3iARB),
-    NAME_FUNC_OFFSET(15957, glMultiTexCoord3ivARB, glMultiTexCoord3ivARB, NULL, _gloffset_MultiTexCoord3ivARB),
-    NAME_FUNC_OFFSET(15976, glMultiTexCoord3sARB, glMultiTexCoord3sARB, NULL, _gloffset_MultiTexCoord3sARB),
-    NAME_FUNC_OFFSET(15994, glMultiTexCoord3svARB, glMultiTexCoord3svARB, NULL, _gloffset_MultiTexCoord3svARB),
-    NAME_FUNC_OFFSET(16013, glMultiTexCoord4dARB, glMultiTexCoord4dARB, NULL, _gloffset_MultiTexCoord4dARB),
-    NAME_FUNC_OFFSET(16031, glMultiTexCoord4dvARB, glMultiTexCoord4dvARB, NULL, _gloffset_MultiTexCoord4dvARB),
-    NAME_FUNC_OFFSET(16050, glMultiTexCoord4fARB, glMultiTexCoord4fARB, NULL, _gloffset_MultiTexCoord4fARB),
-    NAME_FUNC_OFFSET(16068, glMultiTexCoord4fvARB, glMultiTexCoord4fvARB, NULL, _gloffset_MultiTexCoord4fvARB),
-    NAME_FUNC_OFFSET(16087, glMultiTexCoord4iARB, glMultiTexCoord4iARB, NULL, _gloffset_MultiTexCoord4iARB),
-    NAME_FUNC_OFFSET(16105, glMultiTexCoord4ivARB, glMultiTexCoord4ivARB, NULL, _gloffset_MultiTexCoord4ivARB),
-    NAME_FUNC_OFFSET(16124, glMultiTexCoord4sARB, glMultiTexCoord4sARB, NULL, _gloffset_MultiTexCoord4sARB),
-    NAME_FUNC_OFFSET(16142, glMultiTexCoord4svARB, glMultiTexCoord4svARB, NULL, _gloffset_MultiTexCoord4svARB),
-    NAME_FUNC_OFFSET(16161, glStencilOpSeparate, glStencilOpSeparate, NULL, _gloffset_StencilOpSeparate),
-    NAME_FUNC_OFFSET(16184, glLoadTransposeMatrixdARB, glLoadTransposeMatrixdARB, NULL, _gloffset_LoadTransposeMatrixdARB),
-    NAME_FUNC_OFFSET(16207, glLoadTransposeMatrixfARB, glLoadTransposeMatrixfARB, NULL, _gloffset_LoadTransposeMatrixfARB),
-    NAME_FUNC_OFFSET(16230, glMultTransposeMatrixdARB, glMultTransposeMatrixdARB, NULL, _gloffset_MultTransposeMatrixdARB),
-    NAME_FUNC_OFFSET(16253, glMultTransposeMatrixfARB, glMultTransposeMatrixfARB, NULL, _gloffset_MultTransposeMatrixfARB),
-    NAME_FUNC_OFFSET(16276, glSampleCoverageARB, glSampleCoverageARB, NULL, _gloffset_SampleCoverageARB),
-    NAME_FUNC_OFFSET(16293, glCompressedTexImage1DARB, glCompressedTexImage1DARB, NULL, _gloffset_CompressedTexImage1DARB),
-    NAME_FUNC_OFFSET(16316, glCompressedTexImage2DARB, glCompressedTexImage2DARB, NULL, _gloffset_CompressedTexImage2DARB),
-    NAME_FUNC_OFFSET(16339, glCompressedTexImage3DARB, glCompressedTexImage3DARB, NULL, _gloffset_CompressedTexImage3DARB),
-    NAME_FUNC_OFFSET(16362, glCompressedTexSubImage1DARB, glCompressedTexSubImage1DARB, NULL, _gloffset_CompressedTexSubImage1DARB),
-    NAME_FUNC_OFFSET(16388, glCompressedTexSubImage2DARB, glCompressedTexSubImage2DARB, NULL, _gloffset_CompressedTexSubImage2DARB),
-    NAME_FUNC_OFFSET(16414, glCompressedTexSubImage3DARB, glCompressedTexSubImage3DARB, NULL, _gloffset_CompressedTexSubImage3DARB),
-    NAME_FUNC_OFFSET(16440, glGetCompressedTexImageARB, glGetCompressedTexImageARB, NULL, _gloffset_GetCompressedTexImageARB),
-    NAME_FUNC_OFFSET(16464, glDisableVertexAttribArrayARB, glDisableVertexAttribArrayARB, NULL, _gloffset_DisableVertexAttribArrayARB),
-    NAME_FUNC_OFFSET(16491, glEnableVertexAttribArrayARB, glEnableVertexAttribArrayARB, NULL, _gloffset_EnableVertexAttribArrayARB),
-    NAME_FUNC_OFFSET(16517, glGetVertexAttribdvARB, glGetVertexAttribdvARB, NULL, _gloffset_GetVertexAttribdvARB),
-    NAME_FUNC_OFFSET(16537, glGetVertexAttribfvARB, glGetVertexAttribfvARB, NULL, _gloffset_GetVertexAttribfvARB),
-    NAME_FUNC_OFFSET(16557, glGetVertexAttribivARB, glGetVertexAttribivARB, NULL, _gloffset_GetVertexAttribivARB),
-    NAME_FUNC_OFFSET(16577, glProgramEnvParameter4dARB, glProgramEnvParameter4dARB, NULL, _gloffset_ProgramEnvParameter4dARB),
-    NAME_FUNC_OFFSET(16600, glProgramEnvParameter4dvARB, glProgramEnvParameter4dvARB, NULL, _gloffset_ProgramEnvParameter4dvARB),
-    NAME_FUNC_OFFSET(16624, glProgramEnvParameter4fARB, glProgramEnvParameter4fARB, NULL, _gloffset_ProgramEnvParameter4fARB),
-    NAME_FUNC_OFFSET(16647, glProgramEnvParameter4fvARB, glProgramEnvParameter4fvARB, NULL, _gloffset_ProgramEnvParameter4fvARB),
-    NAME_FUNC_OFFSET(16671, glVertexAttrib1dARB, glVertexAttrib1dARB, NULL, _gloffset_VertexAttrib1dARB),
-    NAME_FUNC_OFFSET(16688, glVertexAttrib1dvARB, glVertexAttrib1dvARB, NULL, _gloffset_VertexAttrib1dvARB),
-    NAME_FUNC_OFFSET(16706, glVertexAttrib1fARB, glVertexAttrib1fARB, NULL, _gloffset_VertexAttrib1fARB),
-    NAME_FUNC_OFFSET(16723, glVertexAttrib1fvARB, glVertexAttrib1fvARB, NULL, _gloffset_VertexAttrib1fvARB),
-    NAME_FUNC_OFFSET(16741, glVertexAttrib1sARB, glVertexAttrib1sARB, NULL, _gloffset_VertexAttrib1sARB),
-    NAME_FUNC_OFFSET(16758, glVertexAttrib1svARB, glVertexAttrib1svARB, NULL, _gloffset_VertexAttrib1svARB),
-    NAME_FUNC_OFFSET(16776, glVertexAttrib2dARB, glVertexAttrib2dARB, NULL, _gloffset_VertexAttrib2dARB),
-    NAME_FUNC_OFFSET(16793, glVertexAttrib2dvARB, glVertexAttrib2dvARB, NULL, _gloffset_VertexAttrib2dvARB),
-    NAME_FUNC_OFFSET(16811, glVertexAttrib2fARB, glVertexAttrib2fARB, NULL, _gloffset_VertexAttrib2fARB),
-    NAME_FUNC_OFFSET(16828, glVertexAttrib2fvARB, glVertexAttrib2fvARB, NULL, _gloffset_VertexAttrib2fvARB),
-    NAME_FUNC_OFFSET(16846, glVertexAttrib2sARB, glVertexAttrib2sARB, NULL, _gloffset_VertexAttrib2sARB),
-    NAME_FUNC_OFFSET(16863, glVertexAttrib2svARB, glVertexAttrib2svARB, NULL, _gloffset_VertexAttrib2svARB),
-    NAME_FUNC_OFFSET(16881, glVertexAttrib3dARB, glVertexAttrib3dARB, NULL, _gloffset_VertexAttrib3dARB),
-    NAME_FUNC_OFFSET(16898, glVertexAttrib3dvARB, glVertexAttrib3dvARB, NULL, _gloffset_VertexAttrib3dvARB),
-    NAME_FUNC_OFFSET(16916, glVertexAttrib3fARB, glVertexAttrib3fARB, NULL, _gloffset_VertexAttrib3fARB),
-    NAME_FUNC_OFFSET(16933, glVertexAttrib3fvARB, glVertexAttrib3fvARB, NULL, _gloffset_VertexAttrib3fvARB),
-    NAME_FUNC_OFFSET(16951, glVertexAttrib3sARB, glVertexAttrib3sARB, NULL, _gloffset_VertexAttrib3sARB),
-    NAME_FUNC_OFFSET(16968, glVertexAttrib3svARB, glVertexAttrib3svARB, NULL, _gloffset_VertexAttrib3svARB),
-    NAME_FUNC_OFFSET(16986, glVertexAttrib4NbvARB, glVertexAttrib4NbvARB, NULL, _gloffset_VertexAttrib4NbvARB),
-    NAME_FUNC_OFFSET(17005, glVertexAttrib4NivARB, glVertexAttrib4NivARB, NULL, _gloffset_VertexAttrib4NivARB),
-    NAME_FUNC_OFFSET(17024, glVertexAttrib4NsvARB, glVertexAttrib4NsvARB, NULL, _gloffset_VertexAttrib4NsvARB),
-    NAME_FUNC_OFFSET(17043, glVertexAttrib4NubARB, glVertexAttrib4NubARB, NULL, _gloffset_VertexAttrib4NubARB),
-    NAME_FUNC_OFFSET(17062, glVertexAttrib4NubvARB, glVertexAttrib4NubvARB, NULL, _gloffset_VertexAttrib4NubvARB),
-    NAME_FUNC_OFFSET(17082, glVertexAttrib4NuivARB, glVertexAttrib4NuivARB, NULL, _gloffset_VertexAttrib4NuivARB),
-    NAME_FUNC_OFFSET(17102, glVertexAttrib4NusvARB, glVertexAttrib4NusvARB, NULL, _gloffset_VertexAttrib4NusvARB),
-    NAME_FUNC_OFFSET(17122, glVertexAttrib4bvARB, glVertexAttrib4bvARB, NULL, _gloffset_VertexAttrib4bvARB),
-    NAME_FUNC_OFFSET(17140, glVertexAttrib4dARB, glVertexAttrib4dARB, NULL, _gloffset_VertexAttrib4dARB),
-    NAME_FUNC_OFFSET(17157, glVertexAttrib4dvARB, glVertexAttrib4dvARB, NULL, _gloffset_VertexAttrib4dvARB),
-    NAME_FUNC_OFFSET(17175, glVertexAttrib4fARB, glVertexAttrib4fARB, NULL, _gloffset_VertexAttrib4fARB),
-    NAME_FUNC_OFFSET(17192, glVertexAttrib4fvARB, glVertexAttrib4fvARB, NULL, _gloffset_VertexAttrib4fvARB),
-    NAME_FUNC_OFFSET(17210, glVertexAttrib4ivARB, glVertexAttrib4ivARB, NULL, _gloffset_VertexAttrib4ivARB),
-    NAME_FUNC_OFFSET(17228, glVertexAttrib4sARB, glVertexAttrib4sARB, NULL, _gloffset_VertexAttrib4sARB),
-    NAME_FUNC_OFFSET(17245, glVertexAttrib4svARB, glVertexAttrib4svARB, NULL, _gloffset_VertexAttrib4svARB),
-    NAME_FUNC_OFFSET(17263, glVertexAttrib4ubvARB, glVertexAttrib4ubvARB, NULL, _gloffset_VertexAttrib4ubvARB),
-    NAME_FUNC_OFFSET(17282, glVertexAttrib4uivARB, glVertexAttrib4uivARB, NULL, _gloffset_VertexAttrib4uivARB),
-    NAME_FUNC_OFFSET(17301, glVertexAttrib4usvARB, glVertexAttrib4usvARB, NULL, _gloffset_VertexAttrib4usvARB),
-    NAME_FUNC_OFFSET(17320, glVertexAttribPointerARB, glVertexAttribPointerARB, NULL, _gloffset_VertexAttribPointerARB),
-    NAME_FUNC_OFFSET(17342, glBindBufferARB, glBindBufferARB, NULL, _gloffset_BindBufferARB),
-    NAME_FUNC_OFFSET(17355, glBufferDataARB, glBufferDataARB, NULL, _gloffset_BufferDataARB),
-    NAME_FUNC_OFFSET(17368, glBufferSubDataARB, glBufferSubDataARB, NULL, _gloffset_BufferSubDataARB),
-    NAME_FUNC_OFFSET(17384, glDeleteBuffersARB, glDeleteBuffersARB, NULL, _gloffset_DeleteBuffersARB),
-    NAME_FUNC_OFFSET(17400, glGenBuffersARB, glGenBuffersARB, NULL, _gloffset_GenBuffersARB),
-    NAME_FUNC_OFFSET(17413, glGetBufferParameterivARB, glGetBufferParameterivARB, NULL, _gloffset_GetBufferParameterivARB),
-    NAME_FUNC_OFFSET(17436, glGetBufferPointervARB, glGetBufferPointervARB, NULL, _gloffset_GetBufferPointervARB),
-    NAME_FUNC_OFFSET(17456, glGetBufferSubDataARB, glGetBufferSubDataARB, NULL, _gloffset_GetBufferSubDataARB),
-    NAME_FUNC_OFFSET(17475, glIsBufferARB, glIsBufferARB, NULL, _gloffset_IsBufferARB),
-    NAME_FUNC_OFFSET(17486, glMapBufferARB, glMapBufferARB, NULL, _gloffset_MapBufferARB),
-    NAME_FUNC_OFFSET(17498, glUnmapBufferARB, glUnmapBufferARB, NULL, _gloffset_UnmapBufferARB),
-    NAME_FUNC_OFFSET(17512, glBeginQueryARB, glBeginQueryARB, NULL, _gloffset_BeginQueryARB),
-    NAME_FUNC_OFFSET(17525, glDeleteQueriesARB, glDeleteQueriesARB, NULL, _gloffset_DeleteQueriesARB),
-    NAME_FUNC_OFFSET(17541, glEndQueryARB, glEndQueryARB, NULL, _gloffset_EndQueryARB),
-    NAME_FUNC_OFFSET(17552, glGenQueriesARB, glGenQueriesARB, NULL, _gloffset_GenQueriesARB),
-    NAME_FUNC_OFFSET(17565, glGetQueryObjectivARB, glGetQueryObjectivARB, NULL, _gloffset_GetQueryObjectivARB),
-    NAME_FUNC_OFFSET(17584, glGetQueryObjectuivARB, glGetQueryObjectuivARB, NULL, _gloffset_GetQueryObjectuivARB),
-    NAME_FUNC_OFFSET(17604, glGetQueryivARB, glGetQueryivARB, NULL, _gloffset_GetQueryivARB),
-    NAME_FUNC_OFFSET(17617, glIsQueryARB, glIsQueryARB, NULL, _gloffset_IsQueryARB),
-    NAME_FUNC_OFFSET(17627, glCompileShaderARB, glCompileShaderARB, NULL, _gloffset_CompileShaderARB),
-    NAME_FUNC_OFFSET(17643, glGetActiveUniformARB, glGetActiveUniformARB, NULL, _gloffset_GetActiveUniformARB),
-    NAME_FUNC_OFFSET(17662, glGetShaderSourceARB, glGetShaderSourceARB, NULL, _gloffset_GetShaderSourceARB),
-    NAME_FUNC_OFFSET(17680, glGetUniformLocationARB, glGetUniformLocationARB, NULL, _gloffset_GetUniformLocationARB),
-    NAME_FUNC_OFFSET(17701, glGetUniformfvARB, glGetUniformfvARB, NULL, _gloffset_GetUniformfvARB),
-    NAME_FUNC_OFFSET(17716, glGetUniformivARB, glGetUniformivARB, NULL, _gloffset_GetUniformivARB),
-    NAME_FUNC_OFFSET(17731, glLinkProgramARB, glLinkProgramARB, NULL, _gloffset_LinkProgramARB),
-    NAME_FUNC_OFFSET(17745, glShaderSourceARB, glShaderSourceARB, NULL, _gloffset_ShaderSourceARB),
-    NAME_FUNC_OFFSET(17760, glUniform1fARB, glUniform1fARB, NULL, _gloffset_Uniform1fARB),
-    NAME_FUNC_OFFSET(17772, glUniform1fvARB, glUniform1fvARB, NULL, _gloffset_Uniform1fvARB),
-    NAME_FUNC_OFFSET(17785, glUniform1iARB, glUniform1iARB, NULL, _gloffset_Uniform1iARB),
-    NAME_FUNC_OFFSET(17797, glUniform1ivARB, glUniform1ivARB, NULL, _gloffset_Uniform1ivARB),
-    NAME_FUNC_OFFSET(17810, glUniform2fARB, glUniform2fARB, NULL, _gloffset_Uniform2fARB),
-    NAME_FUNC_OFFSET(17822, glUniform2fvARB, glUniform2fvARB, NULL, _gloffset_Uniform2fvARB),
-    NAME_FUNC_OFFSET(17835, glUniform2iARB, glUniform2iARB, NULL, _gloffset_Uniform2iARB),
-    NAME_FUNC_OFFSET(17847, glUniform2ivARB, glUniform2ivARB, NULL, _gloffset_Uniform2ivARB),
-    NAME_FUNC_OFFSET(17860, glUniform3fARB, glUniform3fARB, NULL, _gloffset_Uniform3fARB),
-    NAME_FUNC_OFFSET(17872, glUniform3fvARB, glUniform3fvARB, NULL, _gloffset_Uniform3fvARB),
-    NAME_FUNC_OFFSET(17885, glUniform3iARB, glUniform3iARB, NULL, _gloffset_Uniform3iARB),
-    NAME_FUNC_OFFSET(17897, glUniform3ivARB, glUniform3ivARB, NULL, _gloffset_Uniform3ivARB),
-    NAME_FUNC_OFFSET(17910, glUniform4fARB, glUniform4fARB, NULL, _gloffset_Uniform4fARB),
-    NAME_FUNC_OFFSET(17922, glUniform4fvARB, glUniform4fvARB, NULL, _gloffset_Uniform4fvARB),
-    NAME_FUNC_OFFSET(17935, glUniform4iARB, glUniform4iARB, NULL, _gloffset_Uniform4iARB),
-    NAME_FUNC_OFFSET(17947, glUniform4ivARB, glUniform4ivARB, NULL, _gloffset_Uniform4ivARB),
-    NAME_FUNC_OFFSET(17960, glUniformMatrix2fvARB, glUniformMatrix2fvARB, NULL, _gloffset_UniformMatrix2fvARB),
-    NAME_FUNC_OFFSET(17979, glUniformMatrix3fvARB, glUniformMatrix3fvARB, NULL, _gloffset_UniformMatrix3fvARB),
-    NAME_FUNC_OFFSET(17998, glUniformMatrix4fvARB, glUniformMatrix4fvARB, NULL, _gloffset_UniformMatrix4fvARB),
-    NAME_FUNC_OFFSET(18017, glUseProgramObjectARB, glUseProgramObjectARB, NULL, _gloffset_UseProgramObjectARB),
-    NAME_FUNC_OFFSET(18030, glValidateProgramARB, glValidateProgramARB, NULL, _gloffset_ValidateProgramARB),
-    NAME_FUNC_OFFSET(18048, glBindAttribLocationARB, glBindAttribLocationARB, NULL, _gloffset_BindAttribLocationARB),
-    NAME_FUNC_OFFSET(18069, glGetActiveAttribARB, glGetActiveAttribARB, NULL, _gloffset_GetActiveAttribARB),
-    NAME_FUNC_OFFSET(18087, glGetAttribLocationARB, glGetAttribLocationARB, NULL, _gloffset_GetAttribLocationARB),
-    NAME_FUNC_OFFSET(18107, glDrawBuffersARB, glDrawBuffersARB, NULL, _gloffset_DrawBuffersARB),
-    NAME_FUNC_OFFSET(18121, glDrawBuffersARB, glDrawBuffersARB, NULL, _gloffset_DrawBuffersARB),
-    NAME_FUNC_OFFSET(18138, glRenderbufferStorageMultisample, glRenderbufferStorageMultisample, NULL, _gloffset_RenderbufferStorageMultisample),
-    NAME_FUNC_OFFSET(18174, gl_dispatch_stub_584, gl_dispatch_stub_584, NULL, _gloffset_SampleMaskSGIS),
-    NAME_FUNC_OFFSET(18190, gl_dispatch_stub_585, gl_dispatch_stub_585, NULL, _gloffset_SamplePatternSGIS),
-    NAME_FUNC_OFFSET(18209, glPointParameterfEXT, glPointParameterfEXT, NULL, _gloffset_PointParameterfEXT),
-    NAME_FUNC_OFFSET(18227, glPointParameterfEXT, glPointParameterfEXT, NULL, _gloffset_PointParameterfEXT),
-    NAME_FUNC_OFFSET(18248, glPointParameterfEXT, glPointParameterfEXT, NULL, _gloffset_PointParameterfEXT),
-    NAME_FUNC_OFFSET(18270, glPointParameterfvEXT, glPointParameterfvEXT, NULL, _gloffset_PointParameterfvEXT),
-    NAME_FUNC_OFFSET(18289, glPointParameterfvEXT, glPointParameterfvEXT, NULL, _gloffset_PointParameterfvEXT),
-    NAME_FUNC_OFFSET(18311, glPointParameterfvEXT, glPointParameterfvEXT, NULL, _gloffset_PointParameterfvEXT),
-    NAME_FUNC_OFFSET(18334, glSecondaryColor3bEXT, glSecondaryColor3bEXT, NULL, _gloffset_SecondaryColor3bEXT),
-    NAME_FUNC_OFFSET(18353, glSecondaryColor3bvEXT, glSecondaryColor3bvEXT, NULL, _gloffset_SecondaryColor3bvEXT),
-    NAME_FUNC_OFFSET(18373, glSecondaryColor3dEXT, glSecondaryColor3dEXT, NULL, _gloffset_SecondaryColor3dEXT),
-    NAME_FUNC_OFFSET(18392, glSecondaryColor3dvEXT, glSecondaryColor3dvEXT, NULL, _gloffset_SecondaryColor3dvEXT),
-    NAME_FUNC_OFFSET(18412, glSecondaryColor3fEXT, glSecondaryColor3fEXT, NULL, _gloffset_SecondaryColor3fEXT),
-    NAME_FUNC_OFFSET(18431, glSecondaryColor3fvEXT, glSecondaryColor3fvEXT, NULL, _gloffset_SecondaryColor3fvEXT),
-    NAME_FUNC_OFFSET(18451, glSecondaryColor3iEXT, glSecondaryColor3iEXT, NULL, _gloffset_SecondaryColor3iEXT),
-    NAME_FUNC_OFFSET(18470, glSecondaryColor3ivEXT, glSecondaryColor3ivEXT, NULL, _gloffset_SecondaryColor3ivEXT),
-    NAME_FUNC_OFFSET(18490, glSecondaryColor3sEXT, glSecondaryColor3sEXT, NULL, _gloffset_SecondaryColor3sEXT),
-    NAME_FUNC_OFFSET(18509, glSecondaryColor3svEXT, glSecondaryColor3svEXT, NULL, _gloffset_SecondaryColor3svEXT),
-    NAME_FUNC_OFFSET(18529, glSecondaryColor3ubEXT, glSecondaryColor3ubEXT, NULL, _gloffset_SecondaryColor3ubEXT),
-    NAME_FUNC_OFFSET(18549, glSecondaryColor3ubvEXT, glSecondaryColor3ubvEXT, NULL, _gloffset_SecondaryColor3ubvEXT),
-    NAME_FUNC_OFFSET(18570, glSecondaryColor3uiEXT, glSecondaryColor3uiEXT, NULL, _gloffset_SecondaryColor3uiEXT),
-    NAME_FUNC_OFFSET(18590, glSecondaryColor3uivEXT, glSecondaryColor3uivEXT, NULL, _gloffset_SecondaryColor3uivEXT),
-    NAME_FUNC_OFFSET(18611, glSecondaryColor3usEXT, glSecondaryColor3usEXT, NULL, _gloffset_SecondaryColor3usEXT),
-    NAME_FUNC_OFFSET(18631, glSecondaryColor3usvEXT, glSecondaryColor3usvEXT, NULL, _gloffset_SecondaryColor3usvEXT),
-    NAME_FUNC_OFFSET(18652, glSecondaryColorPointerEXT, glSecondaryColorPointerEXT, NULL, _gloffset_SecondaryColorPointerEXT),
-    NAME_FUNC_OFFSET(18676, glMultiDrawArraysEXT, glMultiDrawArraysEXT, NULL, _gloffset_MultiDrawArraysEXT),
-    NAME_FUNC_OFFSET(18694, glMultiDrawElementsEXT, glMultiDrawElementsEXT, NULL, _gloffset_MultiDrawElementsEXT),
-    NAME_FUNC_OFFSET(18714, glFogCoordPointerEXT, glFogCoordPointerEXT, NULL, _gloffset_FogCoordPointerEXT),
-    NAME_FUNC_OFFSET(18732, glFogCoorddEXT, glFogCoorddEXT, NULL, _gloffset_FogCoorddEXT),
-    NAME_FUNC_OFFSET(18744, glFogCoorddvEXT, glFogCoorddvEXT, NULL, _gloffset_FogCoorddvEXT),
-    NAME_FUNC_OFFSET(18757, glFogCoordfEXT, glFogCoordfEXT, NULL, _gloffset_FogCoordfEXT),
-    NAME_FUNC_OFFSET(18769, glFogCoordfvEXT, glFogCoordfvEXT, NULL, _gloffset_FogCoordfvEXT),
-    NAME_FUNC_OFFSET(18782, glBlendFuncSeparateEXT, glBlendFuncSeparateEXT, NULL, _gloffset_BlendFuncSeparateEXT),
-    NAME_FUNC_OFFSET(18802, glBlendFuncSeparateEXT, glBlendFuncSeparateEXT, NULL, _gloffset_BlendFuncSeparateEXT),
-    NAME_FUNC_OFFSET(18826, glWindowPos2dMESA, glWindowPos2dMESA, NULL, _gloffset_WindowPos2dMESA),
-    NAME_FUNC_OFFSET(18840, glWindowPos2dMESA, glWindowPos2dMESA, NULL, _gloffset_WindowPos2dMESA),
-    NAME_FUNC_OFFSET(18857, glWindowPos2dvMESA, glWindowPos2dvMESA, NULL, _gloffset_WindowPos2dvMESA),
-    NAME_FUNC_OFFSET(18872, glWindowPos2dvMESA, glWindowPos2dvMESA, NULL, _gloffset_WindowPos2dvMESA),
-    NAME_FUNC_OFFSET(18890, glWindowPos2fMESA, glWindowPos2fMESA, NULL, _gloffset_WindowPos2fMESA),
-    NAME_FUNC_OFFSET(18904, glWindowPos2fMESA, glWindowPos2fMESA, NULL, _gloffset_WindowPos2fMESA),
-    NAME_FUNC_OFFSET(18921, glWindowPos2fvMESA, glWindowPos2fvMESA, NULL, _gloffset_WindowPos2fvMESA),
-    NAME_FUNC_OFFSET(18936, glWindowPos2fvMESA, glWindowPos2fvMESA, NULL, _gloffset_WindowPos2fvMESA),
-    NAME_FUNC_OFFSET(18954, glWindowPos2iMESA, glWindowPos2iMESA, NULL, _gloffset_WindowPos2iMESA),
-    NAME_FUNC_OFFSET(18968, glWindowPos2iMESA, glWindowPos2iMESA, NULL, _gloffset_WindowPos2iMESA),
-    NAME_FUNC_OFFSET(18985, glWindowPos2ivMESA, glWindowPos2ivMESA, NULL, _gloffset_WindowPos2ivMESA),
-    NAME_FUNC_OFFSET(19000, glWindowPos2ivMESA, glWindowPos2ivMESA, NULL, _gloffset_WindowPos2ivMESA),
-    NAME_FUNC_OFFSET(19018, glWindowPos2sMESA, glWindowPos2sMESA, NULL, _gloffset_WindowPos2sMESA),
-    NAME_FUNC_OFFSET(19032, glWindowPos2sMESA, glWindowPos2sMESA, NULL, _gloffset_WindowPos2sMESA),
-    NAME_FUNC_OFFSET(19049, glWindowPos2svMESA, glWindowPos2svMESA, NULL, _gloffset_WindowPos2svMESA),
-    NAME_FUNC_OFFSET(19064, glWindowPos2svMESA, glWindowPos2svMESA, NULL, _gloffset_WindowPos2svMESA),
-    NAME_FUNC_OFFSET(19082, glWindowPos3dMESA, glWindowPos3dMESA, NULL, _gloffset_WindowPos3dMESA),
-    NAME_FUNC_OFFSET(19096, glWindowPos3dMESA, glWindowPos3dMESA, NULL, _gloffset_WindowPos3dMESA),
-    NAME_FUNC_OFFSET(19113, glWindowPos3dvMESA, glWindowPos3dvMESA, NULL, _gloffset_WindowPos3dvMESA),
-    NAME_FUNC_OFFSET(19128, glWindowPos3dvMESA, glWindowPos3dvMESA, NULL, _gloffset_WindowPos3dvMESA),
-    NAME_FUNC_OFFSET(19146, glWindowPos3fMESA, glWindowPos3fMESA, NULL, _gloffset_WindowPos3fMESA),
-    NAME_FUNC_OFFSET(19160, glWindowPos3fMESA, glWindowPos3fMESA, NULL, _gloffset_WindowPos3fMESA),
-    NAME_FUNC_OFFSET(19177, glWindowPos3fvMESA, glWindowPos3fvMESA, NULL, _gloffset_WindowPos3fvMESA),
-    NAME_FUNC_OFFSET(19192, glWindowPos3fvMESA, glWindowPos3fvMESA, NULL, _gloffset_WindowPos3fvMESA),
-    NAME_FUNC_OFFSET(19210, glWindowPos3iMESA, glWindowPos3iMESA, NULL, _gloffset_WindowPos3iMESA),
-    NAME_FUNC_OFFSET(19224, glWindowPos3iMESA, glWindowPos3iMESA, NULL, _gloffset_WindowPos3iMESA),
-    NAME_FUNC_OFFSET(19241, glWindowPos3ivMESA, glWindowPos3ivMESA, NULL, _gloffset_WindowPos3ivMESA),
-    NAME_FUNC_OFFSET(19256, glWindowPos3ivMESA, glWindowPos3ivMESA, NULL, _gloffset_WindowPos3ivMESA),
-    NAME_FUNC_OFFSET(19274, glWindowPos3sMESA, glWindowPos3sMESA, NULL, _gloffset_WindowPos3sMESA),
-    NAME_FUNC_OFFSET(19288, glWindowPos3sMESA, glWindowPos3sMESA, NULL, _gloffset_WindowPos3sMESA),
-    NAME_FUNC_OFFSET(19305, glWindowPos3svMESA, glWindowPos3svMESA, NULL, _gloffset_WindowPos3svMESA),
-    NAME_FUNC_OFFSET(19320, glWindowPos3svMESA, glWindowPos3svMESA, NULL, _gloffset_WindowPos3svMESA),
-    NAME_FUNC_OFFSET(19338, glBindProgramNV, glBindProgramNV, NULL, _gloffset_BindProgramNV),
-    NAME_FUNC_OFFSET(19355, glDeleteProgramsNV, glDeleteProgramsNV, NULL, _gloffset_DeleteProgramsNV),
-    NAME_FUNC_OFFSET(19375, glGenProgramsNV, glGenProgramsNV, NULL, _gloffset_GenProgramsNV),
-    NAME_FUNC_OFFSET(19392, glGetVertexAttribPointervNV, glGetVertexAttribPointervNV, NULL, _gloffset_GetVertexAttribPointervNV),
-    NAME_FUNC_OFFSET(19418, glGetVertexAttribPointervNV, glGetVertexAttribPointervNV, NULL, _gloffset_GetVertexAttribPointervNV),
-    NAME_FUNC_OFFSET(19447, glIsProgramNV, glIsProgramNV, NULL, _gloffset_IsProgramNV),
-    NAME_FUNC_OFFSET(19462, glPointParameteriNV, glPointParameteriNV, NULL, _gloffset_PointParameteriNV),
-    NAME_FUNC_OFFSET(19480, glPointParameterivNV, glPointParameterivNV, NULL, _gloffset_PointParameterivNV),
-    NAME_FUNC_OFFSET(19499, gl_dispatch_stub_755, gl_dispatch_stub_755, NULL, _gloffset_DeleteVertexArraysAPPLE),
-    NAME_FUNC_OFFSET(19520, gl_dispatch_stub_757, gl_dispatch_stub_757, NULL, _gloffset_IsVertexArrayAPPLE),
-    NAME_FUNC_OFFSET(19536, gl_dispatch_stub_765, gl_dispatch_stub_765, NULL, _gloffset_BlendEquationSeparateEXT),
-    NAME_FUNC_OFFSET(19560, gl_dispatch_stub_765, gl_dispatch_stub_765, NULL, _gloffset_BlendEquationSeparateEXT),
-    NAME_FUNC_OFFSET(19587, glBindFramebufferEXT, glBindFramebufferEXT, NULL, _gloffset_BindFramebufferEXT),
-    NAME_FUNC_OFFSET(19605, glBindRenderbufferEXT, glBindRenderbufferEXT, NULL, _gloffset_BindRenderbufferEXT),
-    NAME_FUNC_OFFSET(19624, glCheckFramebufferStatusEXT, glCheckFramebufferStatusEXT, NULL, _gloffset_CheckFramebufferStatusEXT),
-    NAME_FUNC_OFFSET(19649, glDeleteFramebuffersEXT, glDeleteFramebuffersEXT, NULL, _gloffset_DeleteFramebuffersEXT),
-    NAME_FUNC_OFFSET(19670, glDeleteRenderbuffersEXT, glDeleteRenderbuffersEXT, NULL, _gloffset_DeleteRenderbuffersEXT),
-    NAME_FUNC_OFFSET(19692, glFramebufferRenderbufferEXT, glFramebufferRenderbufferEXT, NULL, _gloffset_FramebufferRenderbufferEXT),
-    NAME_FUNC_OFFSET(19718, glFramebufferTexture1DEXT, glFramebufferTexture1DEXT, NULL, _gloffset_FramebufferTexture1DEXT),
-    NAME_FUNC_OFFSET(19741, glFramebufferTexture2DEXT, glFramebufferTexture2DEXT, NULL, _gloffset_FramebufferTexture2DEXT),
-    NAME_FUNC_OFFSET(19764, glFramebufferTexture3DEXT, glFramebufferTexture3DEXT, NULL, _gloffset_FramebufferTexture3DEXT),
-    NAME_FUNC_OFFSET(19787, glGenFramebuffersEXT, glGenFramebuffersEXT, NULL, _gloffset_GenFramebuffersEXT),
-    NAME_FUNC_OFFSET(19805, glGenRenderbuffersEXT, glGenRenderbuffersEXT, NULL, _gloffset_GenRenderbuffersEXT),
-    NAME_FUNC_OFFSET(19824, glGenerateMipmapEXT, glGenerateMipmapEXT, NULL, _gloffset_GenerateMipmapEXT),
-    NAME_FUNC_OFFSET(19841, glGetFramebufferAttachmentParameterivEXT, glGetFramebufferAttachmentParameterivEXT, NULL, _gloffset_GetFramebufferAttachmentParameterivEXT),
-    NAME_FUNC_OFFSET(19879, glGetRenderbufferParameterivEXT, glGetRenderbufferParameterivEXT, NULL, _gloffset_GetRenderbufferParameterivEXT),
-    NAME_FUNC_OFFSET(19908, glIsFramebufferEXT, glIsFramebufferEXT, NULL, _gloffset_IsFramebufferEXT),
-    NAME_FUNC_OFFSET(19924, glIsRenderbufferEXT, glIsRenderbufferEXT, NULL, _gloffset_IsRenderbufferEXT),
-    NAME_FUNC_OFFSET(19941, glRenderbufferStorageEXT, glRenderbufferStorageEXT, NULL, _gloffset_RenderbufferStorageEXT),
-    NAME_FUNC_OFFSET(19963, gl_dispatch_stub_783, gl_dispatch_stub_783, NULL, _gloffset_BlitFramebufferEXT),
-    NAME_FUNC_OFFSET(19981, glFramebufferTextureLayerEXT, glFramebufferTextureLayerEXT, NULL, _gloffset_FramebufferTextureLayerEXT),
-    NAME_FUNC_OFFSET(20007, glProvokingVertexEXT, glProvokingVertexEXT, NULL, _gloffset_ProvokingVertexEXT),
+    NAME_FUNC_OFFSET(14256, glEGLImageTargetRenderbufferStorageOES, glEGLImageTargetRenderbufferStorageOES, NULL, _gloffset_EGLImageTargetRenderbufferStorageOES),
+    NAME_FUNC_OFFSET(14295, glEGLImageTargetTexture2DOES, glEGLImageTargetTexture2DOES, NULL, _gloffset_EGLImageTargetTexture2DOES),
+    NAME_FUNC_OFFSET(14324, glArrayElement, glArrayElement, NULL, _gloffset_ArrayElement),
+    NAME_FUNC_OFFSET(14342, glBindTexture, glBindTexture, NULL, _gloffset_BindTexture),
+    NAME_FUNC_OFFSET(14359, glDrawArrays, glDrawArrays, NULL, _gloffset_DrawArrays),
+    NAME_FUNC_OFFSET(14375, glAreTexturesResident, glAreTexturesResidentEXT, glAreTexturesResidentEXT, _gloffset_AreTexturesResident),
+    NAME_FUNC_OFFSET(14400, glCopyTexImage1D, glCopyTexImage1D, NULL, _gloffset_CopyTexImage1D),
+    NAME_FUNC_OFFSET(14420, glCopyTexImage2D, glCopyTexImage2D, NULL, _gloffset_CopyTexImage2D),
+    NAME_FUNC_OFFSET(14440, glCopyTexSubImage1D, glCopyTexSubImage1D, NULL, _gloffset_CopyTexSubImage1D),
+    NAME_FUNC_OFFSET(14463, glCopyTexSubImage2D, glCopyTexSubImage2D, NULL, _gloffset_CopyTexSubImage2D),
+    NAME_FUNC_OFFSET(14486, glDeleteTextures, glDeleteTexturesEXT, glDeleteTexturesEXT, _gloffset_DeleteTextures),
+    NAME_FUNC_OFFSET(14506, glGenTextures, glGenTexturesEXT, glGenTexturesEXT, _gloffset_GenTextures),
+    NAME_FUNC_OFFSET(14523, glGetPointerv, glGetPointerv, NULL, _gloffset_GetPointerv),
+    NAME_FUNC_OFFSET(14540, glIsTexture, glIsTextureEXT, glIsTextureEXT, _gloffset_IsTexture),
+    NAME_FUNC_OFFSET(14555, glPrioritizeTextures, glPrioritizeTextures, NULL, _gloffset_PrioritizeTextures),
+    NAME_FUNC_OFFSET(14579, glTexSubImage1D, glTexSubImage1D, NULL, _gloffset_TexSubImage1D),
+    NAME_FUNC_OFFSET(14598, glTexSubImage2D, glTexSubImage2D, NULL, _gloffset_TexSubImage2D),
+    NAME_FUNC_OFFSET(14617, glBlendColor, glBlendColor, NULL, _gloffset_BlendColor),
+    NAME_FUNC_OFFSET(14633, glBlendEquation, glBlendEquation, NULL, _gloffset_BlendEquation),
+    NAME_FUNC_OFFSET(14652, glDrawRangeElements, glDrawRangeElements, NULL, _gloffset_DrawRangeElements),
+    NAME_FUNC_OFFSET(14675, glColorTable, glColorTable, NULL, _gloffset_ColorTable),
+    NAME_FUNC_OFFSET(14691, glColorTable, glColorTable, NULL, _gloffset_ColorTable),
+    NAME_FUNC_OFFSET(14707, glColorTableParameterfv, glColorTableParameterfv, NULL, _gloffset_ColorTableParameterfv),
+    NAME_FUNC_OFFSET(14734, glColorTableParameteriv, glColorTableParameteriv, NULL, _gloffset_ColorTableParameteriv),
+    NAME_FUNC_OFFSET(14761, glCopyColorTable, glCopyColorTable, NULL, _gloffset_CopyColorTable),
+    NAME_FUNC_OFFSET(14781, glGetColorTable, glGetColorTableEXT, glGetColorTableEXT, _gloffset_GetColorTable),
+    NAME_FUNC_OFFSET(14800, glGetColorTable, glGetColorTableEXT, glGetColorTableEXT, _gloffset_GetColorTable),
+    NAME_FUNC_OFFSET(14819, glGetColorTableParameterfv, glGetColorTableParameterfvEXT, glGetColorTableParameterfvEXT, _gloffset_GetColorTableParameterfv),
+    NAME_FUNC_OFFSET(14849, glGetColorTableParameterfv, glGetColorTableParameterfvEXT, glGetColorTableParameterfvEXT, _gloffset_GetColorTableParameterfv),
+    NAME_FUNC_OFFSET(14879, glGetColorTableParameteriv, glGetColorTableParameterivEXT, glGetColorTableParameterivEXT, _gloffset_GetColorTableParameteriv),
+    NAME_FUNC_OFFSET(14909, glGetColorTableParameteriv, glGetColorTableParameterivEXT, glGetColorTableParameterivEXT, _gloffset_GetColorTableParameteriv),
+    NAME_FUNC_OFFSET(14939, glColorSubTable, glColorSubTable, NULL, _gloffset_ColorSubTable),
+    NAME_FUNC_OFFSET(14958, glCopyColorSubTable, glCopyColorSubTable, NULL, _gloffset_CopyColorSubTable),
+    NAME_FUNC_OFFSET(14981, glConvolutionFilter1D, glConvolutionFilter1D, NULL, _gloffset_ConvolutionFilter1D),
+    NAME_FUNC_OFFSET(15006, glConvolutionFilter2D, glConvolutionFilter2D, NULL, _gloffset_ConvolutionFilter2D),
+    NAME_FUNC_OFFSET(15031, glConvolutionParameterf, glConvolutionParameterf, NULL, _gloffset_ConvolutionParameterf),
+    NAME_FUNC_OFFSET(15058, glConvolutionParameterfv, glConvolutionParameterfv, NULL, _gloffset_ConvolutionParameterfv),
+    NAME_FUNC_OFFSET(15086, glConvolutionParameteri, glConvolutionParameteri, NULL, _gloffset_ConvolutionParameteri),
+    NAME_FUNC_OFFSET(15113, glConvolutionParameteriv, glConvolutionParameteriv, NULL, _gloffset_ConvolutionParameteriv),
+    NAME_FUNC_OFFSET(15141, glCopyConvolutionFilter1D, glCopyConvolutionFilter1D, NULL, _gloffset_CopyConvolutionFilter1D),
+    NAME_FUNC_OFFSET(15170, glCopyConvolutionFilter2D, glCopyConvolutionFilter2D, NULL, _gloffset_CopyConvolutionFilter2D),
+    NAME_FUNC_OFFSET(15199, glGetConvolutionFilter, gl_dispatch_stub_356, gl_dispatch_stub_356, _gloffset_GetConvolutionFilter),
+    NAME_FUNC_OFFSET(15225, glGetConvolutionParameterfv, gl_dispatch_stub_357, gl_dispatch_stub_357, _gloffset_GetConvolutionParameterfv),
+    NAME_FUNC_OFFSET(15256, glGetConvolutionParameteriv, gl_dispatch_stub_358, gl_dispatch_stub_358, _gloffset_GetConvolutionParameteriv),
+    NAME_FUNC_OFFSET(15287, glGetSeparableFilter, gl_dispatch_stub_359, gl_dispatch_stub_359, _gloffset_GetSeparableFilter),
+    NAME_FUNC_OFFSET(15311, glSeparableFilter2D, glSeparableFilter2D, NULL, _gloffset_SeparableFilter2D),
+    NAME_FUNC_OFFSET(15334, glGetHistogram, gl_dispatch_stub_361, gl_dispatch_stub_361, _gloffset_GetHistogram),
+    NAME_FUNC_OFFSET(15352, glGetHistogramParameterfv, gl_dispatch_stub_362, gl_dispatch_stub_362, _gloffset_GetHistogramParameterfv),
+    NAME_FUNC_OFFSET(15381, glGetHistogramParameteriv, gl_dispatch_stub_363, gl_dispatch_stub_363, _gloffset_GetHistogramParameteriv),
+    NAME_FUNC_OFFSET(15410, glGetMinmax, gl_dispatch_stub_364, gl_dispatch_stub_364, _gloffset_GetMinmax),
+    NAME_FUNC_OFFSET(15425, glGetMinmaxParameterfv, gl_dispatch_stub_365, gl_dispatch_stub_365, _gloffset_GetMinmaxParameterfv),
+    NAME_FUNC_OFFSET(15451, glGetMinmaxParameteriv, gl_dispatch_stub_366, gl_dispatch_stub_366, _gloffset_GetMinmaxParameteriv),
+    NAME_FUNC_OFFSET(15477, glHistogram, glHistogram, NULL, _gloffset_Histogram),
+    NAME_FUNC_OFFSET(15492, glMinmax, glMinmax, NULL, _gloffset_Minmax),
+    NAME_FUNC_OFFSET(15504, glResetHistogram, glResetHistogram, NULL, _gloffset_ResetHistogram),
+    NAME_FUNC_OFFSET(15524, glResetMinmax, glResetMinmax, NULL, _gloffset_ResetMinmax),
+    NAME_FUNC_OFFSET(15541, glTexImage3D, glTexImage3D, NULL, _gloffset_TexImage3D),
+    NAME_FUNC_OFFSET(15557, glTexSubImage3D, glTexSubImage3D, NULL, _gloffset_TexSubImage3D),
+    NAME_FUNC_OFFSET(15576, glCopyTexSubImage3D, glCopyTexSubImage3D, NULL, _gloffset_CopyTexSubImage3D),
+    NAME_FUNC_OFFSET(15599, glActiveTextureARB, glActiveTextureARB, NULL, _gloffset_ActiveTextureARB),
+    NAME_FUNC_OFFSET(15615, glClientActiveTextureARB, glClientActiveTextureARB, NULL, _gloffset_ClientActiveTextureARB),
+    NAME_FUNC_OFFSET(15637, glMultiTexCoord1dARB, glMultiTexCoord1dARB, NULL, _gloffset_MultiTexCoord1dARB),
+    NAME_FUNC_OFFSET(15655, glMultiTexCoord1dvARB, glMultiTexCoord1dvARB, NULL, _gloffset_MultiTexCoord1dvARB),
+    NAME_FUNC_OFFSET(15674, glMultiTexCoord1fARB, glMultiTexCoord1fARB, NULL, _gloffset_MultiTexCoord1fARB),
+    NAME_FUNC_OFFSET(15692, glMultiTexCoord1fvARB, glMultiTexCoord1fvARB, NULL, _gloffset_MultiTexCoord1fvARB),
+    NAME_FUNC_OFFSET(15711, glMultiTexCoord1iARB, glMultiTexCoord1iARB, NULL, _gloffset_MultiTexCoord1iARB),
+    NAME_FUNC_OFFSET(15729, glMultiTexCoord1ivARB, glMultiTexCoord1ivARB, NULL, _gloffset_MultiTexCoord1ivARB),
+    NAME_FUNC_OFFSET(15748, glMultiTexCoord1sARB, glMultiTexCoord1sARB, NULL, _gloffset_MultiTexCoord1sARB),
+    NAME_FUNC_OFFSET(15766, glMultiTexCoord1svARB, glMultiTexCoord1svARB, NULL, _gloffset_MultiTexCoord1svARB),
+    NAME_FUNC_OFFSET(15785, glMultiTexCoord2dARB, glMultiTexCoord2dARB, NULL, _gloffset_MultiTexCoord2dARB),
+    NAME_FUNC_OFFSET(15803, glMultiTexCoord2dvARB, glMultiTexCoord2dvARB, NULL, _gloffset_MultiTexCoord2dvARB),
+    NAME_FUNC_OFFSET(15822, glMultiTexCoord2fARB, glMultiTexCoord2fARB, NULL, _gloffset_MultiTexCoord2fARB),
+    NAME_FUNC_OFFSET(15840, glMultiTexCoord2fvARB, glMultiTexCoord2fvARB, NULL, _gloffset_MultiTexCoord2fvARB),
+    NAME_FUNC_OFFSET(15859, glMultiTexCoord2iARB, glMultiTexCoord2iARB, NULL, _gloffset_MultiTexCoord2iARB),
+    NAME_FUNC_OFFSET(15877, glMultiTexCoord2ivARB, glMultiTexCoord2ivARB, NULL, _gloffset_MultiTexCoord2ivARB),
+    NAME_FUNC_OFFSET(15896, glMultiTexCoord2sARB, glMultiTexCoord2sARB, NULL, _gloffset_MultiTexCoord2sARB),
+    NAME_FUNC_OFFSET(15914, glMultiTexCoord2svARB, glMultiTexCoord2svARB, NULL, _gloffset_MultiTexCoord2svARB),
+    NAME_FUNC_OFFSET(15933, glMultiTexCoord3dARB, glMultiTexCoord3dARB, NULL, _gloffset_MultiTexCoord3dARB),
+    NAME_FUNC_OFFSET(15951, glMultiTexCoord3dvARB, glMultiTexCoord3dvARB, NULL, _gloffset_MultiTexCoord3dvARB),
+    NAME_FUNC_OFFSET(15970, glMultiTexCoord3fARB, glMultiTexCoord3fARB, NULL, _gloffset_MultiTexCoord3fARB),
+    NAME_FUNC_OFFSET(15988, glMultiTexCoord3fvARB, glMultiTexCoord3fvARB, NULL, _gloffset_MultiTexCoord3fvARB),
+    NAME_FUNC_OFFSET(16007, glMultiTexCoord3iARB, glMultiTexCoord3iARB, NULL, _gloffset_MultiTexCoord3iARB),
+    NAME_FUNC_OFFSET(16025, glMultiTexCoord3ivARB, glMultiTexCoord3ivARB, NULL, _gloffset_MultiTexCoord3ivARB),
+    NAME_FUNC_OFFSET(16044, glMultiTexCoord3sARB, glMultiTexCoord3sARB, NULL, _gloffset_MultiTexCoord3sARB),
+    NAME_FUNC_OFFSET(16062, glMultiTexCoord3svARB, glMultiTexCoord3svARB, NULL, _gloffset_MultiTexCoord3svARB),
+    NAME_FUNC_OFFSET(16081, glMultiTexCoord4dARB, glMultiTexCoord4dARB, NULL, _gloffset_MultiTexCoord4dARB),
+    NAME_FUNC_OFFSET(16099, glMultiTexCoord4dvARB, glMultiTexCoord4dvARB, NULL, _gloffset_MultiTexCoord4dvARB),
+    NAME_FUNC_OFFSET(16118, glMultiTexCoord4fARB, glMultiTexCoord4fARB, NULL, _gloffset_MultiTexCoord4fARB),
+    NAME_FUNC_OFFSET(16136, glMultiTexCoord4fvARB, glMultiTexCoord4fvARB, NULL, _gloffset_MultiTexCoord4fvARB),
+    NAME_FUNC_OFFSET(16155, glMultiTexCoord4iARB, glMultiTexCoord4iARB, NULL, _gloffset_MultiTexCoord4iARB),
+    NAME_FUNC_OFFSET(16173, glMultiTexCoord4ivARB, glMultiTexCoord4ivARB, NULL, _gloffset_MultiTexCoord4ivARB),
+    NAME_FUNC_OFFSET(16192, glMultiTexCoord4sARB, glMultiTexCoord4sARB, NULL, _gloffset_MultiTexCoord4sARB),
+    NAME_FUNC_OFFSET(16210, glMultiTexCoord4svARB, glMultiTexCoord4svARB, NULL, _gloffset_MultiTexCoord4svARB),
+    NAME_FUNC_OFFSET(16229, glStencilOpSeparate, glStencilOpSeparate, NULL, _gloffset_StencilOpSeparate),
+    NAME_FUNC_OFFSET(16252, glLoadTransposeMatrixdARB, glLoadTransposeMatrixdARB, NULL, _gloffset_LoadTransposeMatrixdARB),
+    NAME_FUNC_OFFSET(16275, glLoadTransposeMatrixfARB, glLoadTransposeMatrixfARB, NULL, _gloffset_LoadTransposeMatrixfARB),
+    NAME_FUNC_OFFSET(16298, glMultTransposeMatrixdARB, glMultTransposeMatrixdARB, NULL, _gloffset_MultTransposeMatrixdARB),
+    NAME_FUNC_OFFSET(16321, glMultTransposeMatrixfARB, glMultTransposeMatrixfARB, NULL, _gloffset_MultTransposeMatrixfARB),
+    NAME_FUNC_OFFSET(16344, glSampleCoverageARB, glSampleCoverageARB, NULL, _gloffset_SampleCoverageARB),
+    NAME_FUNC_OFFSET(16361, glCompressedTexImage1DARB, glCompressedTexImage1DARB, NULL, _gloffset_CompressedTexImage1DARB),
+    NAME_FUNC_OFFSET(16384, glCompressedTexImage2DARB, glCompressedTexImage2DARB, NULL, _gloffset_CompressedTexImage2DARB),
+    NAME_FUNC_OFFSET(16407, glCompressedTexImage3DARB, glCompressedTexImage3DARB, NULL, _gloffset_CompressedTexImage3DARB),
+    NAME_FUNC_OFFSET(16430, glCompressedTexSubImage1DARB, glCompressedTexSubImage1DARB, NULL, _gloffset_CompressedTexSubImage1DARB),
+    NAME_FUNC_OFFSET(16456, glCompressedTexSubImage2DARB, glCompressedTexSubImage2DARB, NULL, _gloffset_CompressedTexSubImage2DARB),
+    NAME_FUNC_OFFSET(16482, glCompressedTexSubImage3DARB, glCompressedTexSubImage3DARB, NULL, _gloffset_CompressedTexSubImage3DARB),
+    NAME_FUNC_OFFSET(16508, glGetCompressedTexImageARB, glGetCompressedTexImageARB, NULL, _gloffset_GetCompressedTexImageARB),
+    NAME_FUNC_OFFSET(16532, glDisableVertexAttribArrayARB, glDisableVertexAttribArrayARB, NULL, _gloffset_DisableVertexAttribArrayARB),
+    NAME_FUNC_OFFSET(16559, glEnableVertexAttribArrayARB, glEnableVertexAttribArrayARB, NULL, _gloffset_EnableVertexAttribArrayARB),
+    NAME_FUNC_OFFSET(16585, glGetVertexAttribdvARB, glGetVertexAttribdvARB, NULL, _gloffset_GetVertexAttribdvARB),
+    NAME_FUNC_OFFSET(16605, glGetVertexAttribfvARB, glGetVertexAttribfvARB, NULL, _gloffset_GetVertexAttribfvARB),
+    NAME_FUNC_OFFSET(16625, glGetVertexAttribivARB, glGetVertexAttribivARB, NULL, _gloffset_GetVertexAttribivARB),
+    NAME_FUNC_OFFSET(16645, glProgramEnvParameter4dARB, glProgramEnvParameter4dARB, NULL, _gloffset_ProgramEnvParameter4dARB),
+    NAME_FUNC_OFFSET(16668, glProgramEnvParameter4dvARB, glProgramEnvParameter4dvARB, NULL, _gloffset_ProgramEnvParameter4dvARB),
+    NAME_FUNC_OFFSET(16692, glProgramEnvParameter4fARB, glProgramEnvParameter4fARB, NULL, _gloffset_ProgramEnvParameter4fARB),
+    NAME_FUNC_OFFSET(16715, glProgramEnvParameter4fvARB, glProgramEnvParameter4fvARB, NULL, _gloffset_ProgramEnvParameter4fvARB),
+    NAME_FUNC_OFFSET(16739, glVertexAttrib1dARB, glVertexAttrib1dARB, NULL, _gloffset_VertexAttrib1dARB),
+    NAME_FUNC_OFFSET(16756, glVertexAttrib1dvARB, glVertexAttrib1dvARB, NULL, _gloffset_VertexAttrib1dvARB),
+    NAME_FUNC_OFFSET(16774, glVertexAttrib1fARB, glVertexAttrib1fARB, NULL, _gloffset_VertexAttrib1fARB),
+    NAME_FUNC_OFFSET(16791, glVertexAttrib1fvARB, glVertexAttrib1fvARB, NULL, _gloffset_VertexAttrib1fvARB),
+    NAME_FUNC_OFFSET(16809, glVertexAttrib1sARB, glVertexAttrib1sARB, NULL, _gloffset_VertexAttrib1sARB),
+    NAME_FUNC_OFFSET(16826, glVertexAttrib1svARB, glVertexAttrib1svARB, NULL, _gloffset_VertexAttrib1svARB),
+    NAME_FUNC_OFFSET(16844, glVertexAttrib2dARB, glVertexAttrib2dARB, NULL, _gloffset_VertexAttrib2dARB),
+    NAME_FUNC_OFFSET(16861, glVertexAttrib2dvARB, glVertexAttrib2dvARB, NULL, _gloffset_VertexAttrib2dvARB),
+    NAME_FUNC_OFFSET(16879, glVertexAttrib2fARB, glVertexAttrib2fARB, NULL, _gloffset_VertexAttrib2fARB),
+    NAME_FUNC_OFFSET(16896, glVertexAttrib2fvARB, glVertexAttrib2fvARB, NULL, _gloffset_VertexAttrib2fvARB),
+    NAME_FUNC_OFFSET(16914, glVertexAttrib2sARB, glVertexAttrib2sARB, NULL, _gloffset_VertexAttrib2sARB),
+    NAME_FUNC_OFFSET(16931, glVertexAttrib2svARB, glVertexAttrib2svARB, NULL, _gloffset_VertexAttrib2svARB),
+    NAME_FUNC_OFFSET(16949, glVertexAttrib3dARB, glVertexAttrib3dARB, NULL, _gloffset_VertexAttrib3dARB),
+    NAME_FUNC_OFFSET(16966, glVertexAttrib3dvARB, glVertexAttrib3dvARB, NULL, _gloffset_VertexAttrib3dvARB),
+    NAME_FUNC_OFFSET(16984, glVertexAttrib3fARB, glVertexAttrib3fARB, NULL, _gloffset_VertexAttrib3fARB),
+    NAME_FUNC_OFFSET(17001, glVertexAttrib3fvARB, glVertexAttrib3fvARB, NULL, _gloffset_VertexAttrib3fvARB),
+    NAME_FUNC_OFFSET(17019, glVertexAttrib3sARB, glVertexAttrib3sARB, NULL, _gloffset_VertexAttrib3sARB),
+    NAME_FUNC_OFFSET(17036, glVertexAttrib3svARB, glVertexAttrib3svARB, NULL, _gloffset_VertexAttrib3svARB),
+    NAME_FUNC_OFFSET(17054, glVertexAttrib4NbvARB, glVertexAttrib4NbvARB, NULL, _gloffset_VertexAttrib4NbvARB),
+    NAME_FUNC_OFFSET(17073, glVertexAttrib4NivARB, glVertexAttrib4NivARB, NULL, _gloffset_VertexAttrib4NivARB),
+    NAME_FUNC_OFFSET(17092, glVertexAttrib4NsvARB, glVertexAttrib4NsvARB, NULL, _gloffset_VertexAttrib4NsvARB),
+    NAME_FUNC_OFFSET(17111, glVertexAttrib4NubARB, glVertexAttrib4NubARB, NULL, _gloffset_VertexAttrib4NubARB),
+    NAME_FUNC_OFFSET(17130, glVertexAttrib4NubvARB, glVertexAttrib4NubvARB, NULL, _gloffset_VertexAttrib4NubvARB),
+    NAME_FUNC_OFFSET(17150, glVertexAttrib4NuivARB, glVertexAttrib4NuivARB, NULL, _gloffset_VertexAttrib4NuivARB),
+    NAME_FUNC_OFFSET(17170, glVertexAttrib4NusvARB, glVertexAttrib4NusvARB, NULL, _gloffset_VertexAttrib4NusvARB),
+    NAME_FUNC_OFFSET(17190, glVertexAttrib4bvARB, glVertexAttrib4bvARB, NULL, _gloffset_VertexAttrib4bvARB),
+    NAME_FUNC_OFFSET(17208, glVertexAttrib4dARB, glVertexAttrib4dARB, NULL, _gloffset_VertexAttrib4dARB),
+    NAME_FUNC_OFFSET(17225, glVertexAttrib4dvARB, glVertexAttrib4dvARB, NULL, _gloffset_VertexAttrib4dvARB),
+    NAME_FUNC_OFFSET(17243, glVertexAttrib4fARB, glVertexAttrib4fARB, NULL, _gloffset_VertexAttrib4fARB),
+    NAME_FUNC_OFFSET(17260, glVertexAttrib4fvARB, glVertexAttrib4fvARB, NULL, _gloffset_VertexAttrib4fvARB),
+    NAME_FUNC_OFFSET(17278, glVertexAttrib4ivARB, glVertexAttrib4ivARB, NULL, _gloffset_VertexAttrib4ivARB),
+    NAME_FUNC_OFFSET(17296, glVertexAttrib4sARB, glVertexAttrib4sARB, NULL, _gloffset_VertexAttrib4sARB),
+    NAME_FUNC_OFFSET(17313, glVertexAttrib4svARB, glVertexAttrib4svARB, NULL, _gloffset_VertexAttrib4svARB),
+    NAME_FUNC_OFFSET(17331, glVertexAttrib4ubvARB, glVertexAttrib4ubvARB, NULL, _gloffset_VertexAttrib4ubvARB),
+    NAME_FUNC_OFFSET(17350, glVertexAttrib4uivARB, glVertexAttrib4uivARB, NULL, _gloffset_VertexAttrib4uivARB),
+    NAME_FUNC_OFFSET(17369, glVertexAttrib4usvARB, glVertexAttrib4usvARB, NULL, _gloffset_VertexAttrib4usvARB),
+    NAME_FUNC_OFFSET(17388, glVertexAttribPointerARB, glVertexAttribPointerARB, NULL, _gloffset_VertexAttribPointerARB),
+    NAME_FUNC_OFFSET(17410, glBindBufferARB, glBindBufferARB, NULL, _gloffset_BindBufferARB),
+    NAME_FUNC_OFFSET(17423, glBufferDataARB, glBufferDataARB, NULL, _gloffset_BufferDataARB),
+    NAME_FUNC_OFFSET(17436, glBufferSubDataARB, glBufferSubDataARB, NULL, _gloffset_BufferSubDataARB),
+    NAME_FUNC_OFFSET(17452, glDeleteBuffersARB, glDeleteBuffersARB, NULL, _gloffset_DeleteBuffersARB),
+    NAME_FUNC_OFFSET(17468, glGenBuffersARB, glGenBuffersARB, NULL, _gloffset_GenBuffersARB),
+    NAME_FUNC_OFFSET(17481, glGetBufferParameterivARB, glGetBufferParameterivARB, NULL, _gloffset_GetBufferParameterivARB),
+    NAME_FUNC_OFFSET(17504, glGetBufferPointervARB, glGetBufferPointervARB, NULL, _gloffset_GetBufferPointervARB),
+    NAME_FUNC_OFFSET(17524, glGetBufferSubDataARB, glGetBufferSubDataARB, NULL, _gloffset_GetBufferSubDataARB),
+    NAME_FUNC_OFFSET(17543, glIsBufferARB, glIsBufferARB, NULL, _gloffset_IsBufferARB),
+    NAME_FUNC_OFFSET(17554, glMapBufferARB, glMapBufferARB, NULL, _gloffset_MapBufferARB),
+    NAME_FUNC_OFFSET(17566, glUnmapBufferARB, glUnmapBufferARB, NULL, _gloffset_UnmapBufferARB),
+    NAME_FUNC_OFFSET(17580, glBeginQueryARB, glBeginQueryARB, NULL, _gloffset_BeginQueryARB),
+    NAME_FUNC_OFFSET(17593, glDeleteQueriesARB, glDeleteQueriesARB, NULL, _gloffset_DeleteQueriesARB),
+    NAME_FUNC_OFFSET(17609, glEndQueryARB, glEndQueryARB, NULL, _gloffset_EndQueryARB),
+    NAME_FUNC_OFFSET(17620, glGenQueriesARB, glGenQueriesARB, NULL, _gloffset_GenQueriesARB),
+    NAME_FUNC_OFFSET(17633, glGetQueryObjectivARB, glGetQueryObjectivARB, NULL, _gloffset_GetQueryObjectivARB),
+    NAME_FUNC_OFFSET(17652, glGetQueryObjectuivARB, glGetQueryObjectuivARB, NULL, _gloffset_GetQueryObjectuivARB),
+    NAME_FUNC_OFFSET(17672, glGetQueryivARB, glGetQueryivARB, NULL, _gloffset_GetQueryivARB),
+    NAME_FUNC_OFFSET(17685, glIsQueryARB, glIsQueryARB, NULL, _gloffset_IsQueryARB),
+    NAME_FUNC_OFFSET(17695, glCompileShaderARB, glCompileShaderARB, NULL, _gloffset_CompileShaderARB),
+    NAME_FUNC_OFFSET(17711, glGetActiveUniformARB, glGetActiveUniformARB, NULL, _gloffset_GetActiveUniformARB),
+    NAME_FUNC_OFFSET(17730, glGetShaderSourceARB, glGetShaderSourceARB, NULL, _gloffset_GetShaderSourceARB),
+    NAME_FUNC_OFFSET(17748, glGetUniformLocationARB, glGetUniformLocationARB, NULL, _gloffset_GetUniformLocationARB),
+    NAME_FUNC_OFFSET(17769, glGetUniformfvARB, glGetUniformfvARB, NULL, _gloffset_GetUniformfvARB),
+    NAME_FUNC_OFFSET(17784, glGetUniformivARB, glGetUniformivARB, NULL, _gloffset_GetUniformivARB),
+    NAME_FUNC_OFFSET(17799, glLinkProgramARB, glLinkProgramARB, NULL, _gloffset_LinkProgramARB),
+    NAME_FUNC_OFFSET(17813, glShaderSourceARB, glShaderSourceARB, NULL, _gloffset_ShaderSourceARB),
+    NAME_FUNC_OFFSET(17828, glUniform1fARB, glUniform1fARB, NULL, _gloffset_Uniform1fARB),
+    NAME_FUNC_OFFSET(17840, glUniform1fvARB, glUniform1fvARB, NULL, _gloffset_Uniform1fvARB),
+    NAME_FUNC_OFFSET(17853, glUniform1iARB, glUniform1iARB, NULL, _gloffset_Uniform1iARB),
+    NAME_FUNC_OFFSET(17865, glUniform1ivARB, glUniform1ivARB, NULL, _gloffset_Uniform1ivARB),
+    NAME_FUNC_OFFSET(17878, glUniform2fARB, glUniform2fARB, NULL, _gloffset_Uniform2fARB),
+    NAME_FUNC_OFFSET(17890, glUniform2fvARB, glUniform2fvARB, NULL, _gloffset_Uniform2fvARB),
+    NAME_FUNC_OFFSET(17903, glUniform2iARB, glUniform2iARB, NULL, _gloffset_Uniform2iARB),
+    NAME_FUNC_OFFSET(17915, glUniform2ivARB, glUniform2ivARB, NULL, _gloffset_Uniform2ivARB),
+    NAME_FUNC_OFFSET(17928, glUniform3fARB, glUniform3fARB, NULL, _gloffset_Uniform3fARB),
+    NAME_FUNC_OFFSET(17940, glUniform3fvARB, glUniform3fvARB, NULL, _gloffset_Uniform3fvARB),
+    NAME_FUNC_OFFSET(17953, glUniform3iARB, glUniform3iARB, NULL, _gloffset_Uniform3iARB),
+    NAME_FUNC_OFFSET(17965, glUniform3ivARB, glUniform3ivARB, NULL, _gloffset_Uniform3ivARB),
+    NAME_FUNC_OFFSET(17978, glUniform4fARB, glUniform4fARB, NULL, _gloffset_Uniform4fARB),
+    NAME_FUNC_OFFSET(17990, glUniform4fvARB, glUniform4fvARB, NULL, _gloffset_Uniform4fvARB),
+    NAME_FUNC_OFFSET(18003, glUniform4iARB, glUniform4iARB, NULL, _gloffset_Uniform4iARB),
+    NAME_FUNC_OFFSET(18015, glUniform4ivARB, glUniform4ivARB, NULL, _gloffset_Uniform4ivARB),
+    NAME_FUNC_OFFSET(18028, glUniformMatrix2fvARB, glUniformMatrix2fvARB, NULL, _gloffset_UniformMatrix2fvARB),
+    NAME_FUNC_OFFSET(18047, glUniformMatrix3fvARB, glUniformMatrix3fvARB, NULL, _gloffset_UniformMatrix3fvARB),
+    NAME_FUNC_OFFSET(18066, glUniformMatrix4fvARB, glUniformMatrix4fvARB, NULL, _gloffset_UniformMatrix4fvARB),
+    NAME_FUNC_OFFSET(18085, glUseProgramObjectARB, glUseProgramObjectARB, NULL, _gloffset_UseProgramObjectARB),
+    NAME_FUNC_OFFSET(18098, glValidateProgramARB, glValidateProgramARB, NULL, _gloffset_ValidateProgramARB),
+    NAME_FUNC_OFFSET(18116, glBindAttribLocationARB, glBindAttribLocationARB, NULL, _gloffset_BindAttribLocationARB),
+    NAME_FUNC_OFFSET(18137, glGetActiveAttribARB, glGetActiveAttribARB, NULL, _gloffset_GetActiveAttribARB),
+    NAME_FUNC_OFFSET(18155, glGetAttribLocationARB, glGetAttribLocationARB, NULL, _gloffset_GetAttribLocationARB),
+    NAME_FUNC_OFFSET(18175, glDrawBuffersARB, glDrawBuffersARB, NULL, _gloffset_DrawBuffersARB),
+    NAME_FUNC_OFFSET(18189, glDrawBuffersARB, glDrawBuffersARB, NULL, _gloffset_DrawBuffersARB),
+    NAME_FUNC_OFFSET(18206, glRenderbufferStorageMultisample, glRenderbufferStorageMultisample, NULL, _gloffset_RenderbufferStorageMultisample),
+    NAME_FUNC_OFFSET(18242, gl_dispatch_stub_584, gl_dispatch_stub_584, NULL, _gloffset_SampleMaskSGIS),
+    NAME_FUNC_OFFSET(18258, gl_dispatch_stub_585, gl_dispatch_stub_585, NULL, _gloffset_SamplePatternSGIS),
+    NAME_FUNC_OFFSET(18277, glPointParameterfEXT, glPointParameterfEXT, NULL, _gloffset_PointParameterfEXT),
+    NAME_FUNC_OFFSET(18295, glPointParameterfEXT, glPointParameterfEXT, NULL, _gloffset_PointParameterfEXT),
+    NAME_FUNC_OFFSET(18316, glPointParameterfEXT, glPointParameterfEXT, NULL, _gloffset_PointParameterfEXT),
+    NAME_FUNC_OFFSET(18338, glPointParameterfvEXT, glPointParameterfvEXT, NULL, _gloffset_PointParameterfvEXT),
+    NAME_FUNC_OFFSET(18357, glPointParameterfvEXT, glPointParameterfvEXT, NULL, _gloffset_PointParameterfvEXT),
+    NAME_FUNC_OFFSET(18379, glPointParameterfvEXT, glPointParameterfvEXT, NULL, _gloffset_PointParameterfvEXT),
+    NAME_FUNC_OFFSET(18402, glSecondaryColor3bEXT, glSecondaryColor3bEXT, NULL, _gloffset_SecondaryColor3bEXT),
+    NAME_FUNC_OFFSET(18421, glSecondaryColor3bvEXT, glSecondaryColor3bvEXT, NULL, _gloffset_SecondaryColor3bvEXT),
+    NAME_FUNC_OFFSET(18441, glSecondaryColor3dEXT, glSecondaryColor3dEXT, NULL, _gloffset_SecondaryColor3dEXT),
+    NAME_FUNC_OFFSET(18460, glSecondaryColor3dvEXT, glSecondaryColor3dvEXT, NULL, _gloffset_SecondaryColor3dvEXT),
+    NAME_FUNC_OFFSET(18480, glSecondaryColor3fEXT, glSecondaryColor3fEXT, NULL, _gloffset_SecondaryColor3fEXT),
+    NAME_FUNC_OFFSET(18499, glSecondaryColor3fvEXT, glSecondaryColor3fvEXT, NULL, _gloffset_SecondaryColor3fvEXT),
+    NAME_FUNC_OFFSET(18519, glSecondaryColor3iEXT, glSecondaryColor3iEXT, NULL, _gloffset_SecondaryColor3iEXT),
+    NAME_FUNC_OFFSET(18538, glSecondaryColor3ivEXT, glSecondaryColor3ivEXT, NULL, _gloffset_SecondaryColor3ivEXT),
+    NAME_FUNC_OFFSET(18558, glSecondaryColor3sEXT, glSecondaryColor3sEXT, NULL, _gloffset_SecondaryColor3sEXT),
+    NAME_FUNC_OFFSET(18577, glSecondaryColor3svEXT, glSecondaryColor3svEXT, NULL, _gloffset_SecondaryColor3svEXT),
+    NAME_FUNC_OFFSET(18597, glSecondaryColor3ubEXT, glSecondaryColor3ubEXT, NULL, _gloffset_SecondaryColor3ubEXT),
+    NAME_FUNC_OFFSET(18617, glSecondaryColor3ubvEXT, glSecondaryColor3ubvEXT, NULL, _gloffset_SecondaryColor3ubvEXT),
+    NAME_FUNC_OFFSET(18638, glSecondaryColor3uiEXT, glSecondaryColor3uiEXT, NULL, _gloffset_SecondaryColor3uiEXT),
+    NAME_FUNC_OFFSET(18658, glSecondaryColor3uivEXT, glSecondaryColor3uivEXT, NULL, _gloffset_SecondaryColor3uivEXT),
+    NAME_FUNC_OFFSET(18679, glSecondaryColor3usEXT, glSecondaryColor3usEXT, NULL, _gloffset_SecondaryColor3usEXT),
+    NAME_FUNC_OFFSET(18699, glSecondaryColor3usvEXT, glSecondaryColor3usvEXT, NULL, _gloffset_SecondaryColor3usvEXT),
+    NAME_FUNC_OFFSET(18720, glSecondaryColorPointerEXT, glSecondaryColorPointerEXT, NULL, _gloffset_SecondaryColorPointerEXT),
+    NAME_FUNC_OFFSET(18744, glMultiDrawArraysEXT, glMultiDrawArraysEXT, NULL, _gloffset_MultiDrawArraysEXT),
+    NAME_FUNC_OFFSET(18762, glMultiDrawElementsEXT, glMultiDrawElementsEXT, NULL, _gloffset_MultiDrawElementsEXT),
+    NAME_FUNC_OFFSET(18782, glFogCoordPointerEXT, glFogCoordPointerEXT, NULL, _gloffset_FogCoordPointerEXT),
+    NAME_FUNC_OFFSET(18800, glFogCoorddEXT, glFogCoorddEXT, NULL, _gloffset_FogCoorddEXT),
+    NAME_FUNC_OFFSET(18812, glFogCoorddvEXT, glFogCoorddvEXT, NULL, _gloffset_FogCoorddvEXT),
+    NAME_FUNC_OFFSET(18825, glFogCoordfEXT, glFogCoordfEXT, NULL, _gloffset_FogCoordfEXT),
+    NAME_FUNC_OFFSET(18837, glFogCoordfvEXT, glFogCoordfvEXT, NULL, _gloffset_FogCoordfvEXT),
+    NAME_FUNC_OFFSET(18850, glBlendFuncSeparateEXT, glBlendFuncSeparateEXT, NULL, _gloffset_BlendFuncSeparateEXT),
+    NAME_FUNC_OFFSET(18870, glBlendFuncSeparateEXT, glBlendFuncSeparateEXT, NULL, _gloffset_BlendFuncSeparateEXT),
+    NAME_FUNC_OFFSET(18894, glWindowPos2dMESA, glWindowPos2dMESA, NULL, _gloffset_WindowPos2dMESA),
+    NAME_FUNC_OFFSET(18908, glWindowPos2dMESA, glWindowPos2dMESA, NULL, _gloffset_WindowPos2dMESA),
+    NAME_FUNC_OFFSET(18925, glWindowPos2dvMESA, glWindowPos2dvMESA, NULL, _gloffset_WindowPos2dvMESA),
+    NAME_FUNC_OFFSET(18940, glWindowPos2dvMESA, glWindowPos2dvMESA, NULL, _gloffset_WindowPos2dvMESA),
+    NAME_FUNC_OFFSET(18958, glWindowPos2fMESA, glWindowPos2fMESA, NULL, _gloffset_WindowPos2fMESA),
+    NAME_FUNC_OFFSET(18972, glWindowPos2fMESA, glWindowPos2fMESA, NULL, _gloffset_WindowPos2fMESA),
+    NAME_FUNC_OFFSET(18989, glWindowPos2fvMESA, glWindowPos2fvMESA, NULL, _gloffset_WindowPos2fvMESA),
+    NAME_FUNC_OFFSET(19004, glWindowPos2fvMESA, glWindowPos2fvMESA, NULL, _gloffset_WindowPos2fvMESA),
+    NAME_FUNC_OFFSET(19022, glWindowPos2iMESA, glWindowPos2iMESA, NULL, _gloffset_WindowPos2iMESA),
+    NAME_FUNC_OFFSET(19036, glWindowPos2iMESA, glWindowPos2iMESA, NULL, _gloffset_WindowPos2iMESA),
+    NAME_FUNC_OFFSET(19053, glWindowPos2ivMESA, glWindowPos2ivMESA, NULL, _gloffset_WindowPos2ivMESA),
+    NAME_FUNC_OFFSET(19068, glWindowPos2ivMESA, glWindowPos2ivMESA, NULL, _gloffset_WindowPos2ivMESA),
+    NAME_FUNC_OFFSET(19086, glWindowPos2sMESA, glWindowPos2sMESA, NULL, _gloffset_WindowPos2sMESA),
+    NAME_FUNC_OFFSET(19100, glWindowPos2sMESA, glWindowPos2sMESA, NULL, _gloffset_WindowPos2sMESA),
+    NAME_FUNC_OFFSET(19117, glWindowPos2svMESA, glWindowPos2svMESA, NULL, _gloffset_WindowPos2svMESA),
+    NAME_FUNC_OFFSET(19132, glWindowPos2svMESA, glWindowPos2svMESA, NULL, _gloffset_WindowPos2svMESA),
+    NAME_FUNC_OFFSET(19150, glWindowPos3dMESA, glWindowPos3dMESA, NULL, _gloffset_WindowPos3dMESA),
+    NAME_FUNC_OFFSET(19164, glWindowPos3dMESA, glWindowPos3dMESA, NULL, _gloffset_WindowPos3dMESA),
+    NAME_FUNC_OFFSET(19181, glWindowPos3dvMESA, glWindowPos3dvMESA, NULL, _gloffset_WindowPos3dvMESA),
+    NAME_FUNC_OFFSET(19196, glWindowPos3dvMESA, glWindowPos3dvMESA, NULL, _gloffset_WindowPos3dvMESA),
+    NAME_FUNC_OFFSET(19214, glWindowPos3fMESA, glWindowPos3fMESA, NULL, _gloffset_WindowPos3fMESA),
+    NAME_FUNC_OFFSET(19228, glWindowPos3fMESA, glWindowPos3fMESA, NULL, _gloffset_WindowPos3fMESA),
+    NAME_FUNC_OFFSET(19245, glWindowPos3fvMESA, glWindowPos3fvMESA, NULL, _gloffset_WindowPos3fvMESA),
+    NAME_FUNC_OFFSET(19260, glWindowPos3fvMESA, glWindowPos3fvMESA, NULL, _gloffset_WindowPos3fvMESA),
+    NAME_FUNC_OFFSET(19278, glWindowPos3iMESA, glWindowPos3iMESA, NULL, _gloffset_WindowPos3iMESA),
+    NAME_FUNC_OFFSET(19292, glWindowPos3iMESA, glWindowPos3iMESA, NULL, _gloffset_WindowPos3iMESA),
+    NAME_FUNC_OFFSET(19309, glWindowPos3ivMESA, glWindowPos3ivMESA, NULL, _gloffset_WindowPos3ivMESA),
+    NAME_FUNC_OFFSET(19324, glWindowPos3ivMESA, glWindowPos3ivMESA, NULL, _gloffset_WindowPos3ivMESA),
+    NAME_FUNC_OFFSET(19342, glWindowPos3sMESA, glWindowPos3sMESA, NULL, _gloffset_WindowPos3sMESA),
+    NAME_FUNC_OFFSET(19356, glWindowPos3sMESA, glWindowPos3sMESA, NULL, _gloffset_WindowPos3sMESA),
+    NAME_FUNC_OFFSET(19373, glWindowPos3svMESA, glWindowPos3svMESA, NULL, _gloffset_WindowPos3svMESA),
+    NAME_FUNC_OFFSET(19388, glWindowPos3svMESA, glWindowPos3svMESA, NULL, _gloffset_WindowPos3svMESA),
+    NAME_FUNC_OFFSET(19406, glBindProgramNV, glBindProgramNV, NULL, _gloffset_BindProgramNV),
+    NAME_FUNC_OFFSET(19423, glDeleteProgramsNV, glDeleteProgramsNV, NULL, _gloffset_DeleteProgramsNV),
+    NAME_FUNC_OFFSET(19443, glGenProgramsNV, glGenProgramsNV, NULL, _gloffset_GenProgramsNV),
+    NAME_FUNC_OFFSET(19460, glGetVertexAttribPointervNV, glGetVertexAttribPointervNV, NULL, _gloffset_GetVertexAttribPointervNV),
+    NAME_FUNC_OFFSET(19486, glGetVertexAttribPointervNV, glGetVertexAttribPointervNV, NULL, _gloffset_GetVertexAttribPointervNV),
+    NAME_FUNC_OFFSET(19515, glIsProgramNV, glIsProgramNV, NULL, _gloffset_IsProgramNV),
+    NAME_FUNC_OFFSET(19530, glPointParameteriNV, glPointParameteriNV, NULL, _gloffset_PointParameteriNV),
+    NAME_FUNC_OFFSET(19548, glPointParameterivNV, glPointParameterivNV, NULL, _gloffset_PointParameterivNV),
+    NAME_FUNC_OFFSET(19567, gl_dispatch_stub_755, gl_dispatch_stub_755, NULL, _gloffset_DeleteVertexArraysAPPLE),
+    NAME_FUNC_OFFSET(19588, gl_dispatch_stub_757, gl_dispatch_stub_757, NULL, _gloffset_IsVertexArrayAPPLE),
+    NAME_FUNC_OFFSET(19604, gl_dispatch_stub_765, gl_dispatch_stub_765, NULL, _gloffset_BlendEquationSeparateEXT),
+    NAME_FUNC_OFFSET(19628, gl_dispatch_stub_765, gl_dispatch_stub_765, NULL, _gloffset_BlendEquationSeparateEXT),
+    NAME_FUNC_OFFSET(19655, glBindFramebufferEXT, glBindFramebufferEXT, NULL, _gloffset_BindFramebufferEXT),
+    NAME_FUNC_OFFSET(19673, glBindRenderbufferEXT, glBindRenderbufferEXT, NULL, _gloffset_BindRenderbufferEXT),
+    NAME_FUNC_OFFSET(19692, glCheckFramebufferStatusEXT, glCheckFramebufferStatusEXT, NULL, _gloffset_CheckFramebufferStatusEXT),
+    NAME_FUNC_OFFSET(19717, glDeleteFramebuffersEXT, glDeleteFramebuffersEXT, NULL, _gloffset_DeleteFramebuffersEXT),
+    NAME_FUNC_OFFSET(19738, glDeleteRenderbuffersEXT, glDeleteRenderbuffersEXT, NULL, _gloffset_DeleteRenderbuffersEXT),
+    NAME_FUNC_OFFSET(19760, glFramebufferRenderbufferEXT, glFramebufferRenderbufferEXT, NULL, _gloffset_FramebufferRenderbufferEXT),
+    NAME_FUNC_OFFSET(19786, glFramebufferTexture1DEXT, glFramebufferTexture1DEXT, NULL, _gloffset_FramebufferTexture1DEXT),
+    NAME_FUNC_OFFSET(19809, glFramebufferTexture2DEXT, glFramebufferTexture2DEXT, NULL, _gloffset_FramebufferTexture2DEXT),
+    NAME_FUNC_OFFSET(19832, glFramebufferTexture3DEXT, glFramebufferTexture3DEXT, NULL, _gloffset_FramebufferTexture3DEXT),
+    NAME_FUNC_OFFSET(19855, glGenFramebuffersEXT, glGenFramebuffersEXT, NULL, _gloffset_GenFramebuffersEXT),
+    NAME_FUNC_OFFSET(19873, glGenRenderbuffersEXT, glGenRenderbuffersEXT, NULL, _gloffset_GenRenderbuffersEXT),
+    NAME_FUNC_OFFSET(19892, glGenerateMipmapEXT, glGenerateMipmapEXT, NULL, _gloffset_GenerateMipmapEXT),
+    NAME_FUNC_OFFSET(19909, glGetFramebufferAttachmentParameterivEXT, glGetFramebufferAttachmentParameterivEXT, NULL, _gloffset_GetFramebufferAttachmentParameterivEXT),
+    NAME_FUNC_OFFSET(19947, glGetRenderbufferParameterivEXT, glGetRenderbufferParameterivEXT, NULL, _gloffset_GetRenderbufferParameterivEXT),
+    NAME_FUNC_OFFSET(19976, glIsFramebufferEXT, glIsFramebufferEXT, NULL, _gloffset_IsFramebufferEXT),
+    NAME_FUNC_OFFSET(19992, glIsRenderbufferEXT, glIsRenderbufferEXT, NULL, _gloffset_IsRenderbufferEXT),
+    NAME_FUNC_OFFSET(20009, glRenderbufferStorageEXT, glRenderbufferStorageEXT, NULL, _gloffset_RenderbufferStorageEXT),
+    NAME_FUNC_OFFSET(20031, gl_dispatch_stub_783, gl_dispatch_stub_783, NULL, _gloffset_BlitFramebufferEXT),
+    NAME_FUNC_OFFSET(20049, glFramebufferTextureLayerEXT, glFramebufferTextureLayerEXT, NULL, _gloffset_FramebufferTextureLayerEXT),
+    NAME_FUNC_OFFSET(20075, glProvokingVertexEXT, glProvokingVertexEXT, NULL, _gloffset_ProvokingVertexEXT),
     NAME_FUNC_OFFSET(-1, NULL, NULL, NULL, 0)
 };
 
diff --git a/src/mesa/main/remap_helper.h b/src/mesa/main/remap_helper.h
index fe2bebd96c..2c8f0de467 100644
--- a/src/mesa/main/remap_helper.h
+++ b/src/mesa/main/remap_helper.h
@@ -1587,2772 +1587,2780 @@ static const char _mesa_function_pool[] =
    "i\0"
    "glIndexi\0"
    "\0"
-   /* _mesa_function_pool[10753]: EndQueryARB (will be remapped) */
+   /* _mesa_function_pool[10753]: EGLImageTargetTexture2DOES (will be remapped) */
+   "ip\0"
+   "glEGLImageTargetTexture2DOES\0"
+   "\0"
+   /* _mesa_function_pool[10786]: EndQueryARB (will be remapped) */
    "i\0"
    "glEndQuery\0"
    "glEndQueryARB\0"
    "\0"
-   /* _mesa_function_pool[10781]: DeleteFencesNV (will be remapped) */
+   /* _mesa_function_pool[10814]: DeleteFencesNV (will be remapped) */
    "ip\0"
    "glDeleteFencesNV\0"
    "\0"
-   /* _mesa_function_pool[10802]: DeformationMap3dSGIX (dynamic) */
+   /* _mesa_function_pool[10835]: DeformationMap3dSGIX (dynamic) */
    "iddiiddiiddiip\0"
    "glDeformationMap3dSGIX\0"
    "\0"
-   /* _mesa_function_pool[10841]: DepthMask (offset 211) */
+   /* _mesa_function_pool[10874]: DepthMask (offset 211) */
    "i\0"
    "glDepthMask\0"
    "\0"
-   /* _mesa_function_pool[10856]: IsShader (will be remapped) */
+   /* _mesa_function_pool[10889]: IsShader (will be remapped) */
    "i\0"
    "glIsShader\0"
    "\0"
-   /* _mesa_function_pool[10870]: Indexf (offset 46) */
+   /* _mesa_function_pool[10903]: Indexf (offset 46) */
    "f\0"
    "glIndexf\0"
    "\0"
-   /* _mesa_function_pool[10882]: GetImageTransformParameterivHP (dynamic) */
+   /* _mesa_function_pool[10915]: GetImageTransformParameterivHP (dynamic) */
    "iip\0"
    "glGetImageTransformParameterivHP\0"
    "\0"
-   /* _mesa_function_pool[10920]: Indexd (offset 44) */
+   /* _mesa_function_pool[10953]: Indexd (offset 44) */
    "d\0"
    "glIndexd\0"
    "\0"
-   /* _mesa_function_pool[10932]: GetMaterialiv (offset 270) */
+   /* _mesa_function_pool[10965]: GetMaterialiv (offset 270) */
    "iip\0"
    "glGetMaterialiv\0"
    "\0"
-   /* _mesa_function_pool[10953]: StencilOp (offset 244) */
+   /* _mesa_function_pool[10986]: StencilOp (offset 244) */
    "iii\0"
    "glStencilOp\0"
    "\0"
-   /* _mesa_function_pool[10970]: WindowPos4ivMESA (will be remapped) */
+   /* _mesa_function_pool[11003]: WindowPos4ivMESA (will be remapped) */
    "p\0"
    "glWindowPos4ivMESA\0"
    "\0"
-   /* _mesa_function_pool[10992]: MultiTexCoord3svARB (offset 399) */
+   /* _mesa_function_pool[11025]: MultiTexCoord3svARB (offset 399) */
    "ip\0"
    "glMultiTexCoord3sv\0"
    "glMultiTexCoord3svARB\0"
    "\0"
-   /* _mesa_function_pool[11037]: TexEnvfv (offset 185) */
+   /* _mesa_function_pool[11070]: TexEnvfv (offset 185) */
    "iip\0"
    "glTexEnvfv\0"
    "\0"
-   /* _mesa_function_pool[11053]: MultiTexCoord4iARB (offset 404) */
+   /* _mesa_function_pool[11086]: MultiTexCoord4iARB (offset 404) */
    "iiiii\0"
    "glMultiTexCoord4i\0"
    "glMultiTexCoord4iARB\0"
    "\0"
-   /* _mesa_function_pool[11099]: Indexs (offset 50) */
+   /* _mesa_function_pool[11132]: Indexs (offset 50) */
    "i\0"
    "glIndexs\0"
    "\0"
-   /* _mesa_function_pool[11111]: Binormal3ivEXT (dynamic) */
+   /* _mesa_function_pool[11144]: Binormal3ivEXT (dynamic) */
    "p\0"
    "glBinormal3ivEXT\0"
    "\0"
-   /* _mesa_function_pool[11131]: ResizeBuffersMESA (will be remapped) */
+   /* _mesa_function_pool[11164]: ResizeBuffersMESA (will be remapped) */
    "\0"
    "glResizeBuffersMESA\0"
    "\0"
-   /* _mesa_function_pool[11153]: GetUniformivARB (will be remapped) */
+   /* _mesa_function_pool[11186]: GetUniformivARB (will be remapped) */
    "iip\0"
    "glGetUniformiv\0"
    "glGetUniformivARB\0"
    "\0"
-   /* _mesa_function_pool[11191]: PixelTexGenParameteriSGIS (will be remapped) */
+   /* _mesa_function_pool[11224]: PixelTexGenParameteriSGIS (will be remapped) */
    "ii\0"
    "glPixelTexGenParameteriSGIS\0"
    "\0"
-   /* _mesa_function_pool[11223]: VertexPointervINTEL (dynamic) */
+   /* _mesa_function_pool[11256]: VertexPointervINTEL (dynamic) */
    "iip\0"
    "glVertexPointervINTEL\0"
    "\0"
-   /* _mesa_function_pool[11250]: Vertex2i (offset 130) */
+   /* _mesa_function_pool[11283]: Vertex2i (offset 130) */
    "ii\0"
    "glVertex2i\0"
    "\0"
-   /* _mesa_function_pool[11265]: LoadMatrixf (offset 291) */
+   /* _mesa_function_pool[11298]: LoadMatrixf (offset 291) */
    "p\0"
    "glLoadMatrixf\0"
    "\0"
-   /* _mesa_function_pool[11282]: Vertex2f (offset 128) */
+   /* _mesa_function_pool[11315]: Vertex2f (offset 128) */
    "ff\0"
    "glVertex2f\0"
    "\0"
-   /* _mesa_function_pool[11297]: ReplacementCodeuiColor4fNormal3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[11330]: ReplacementCodeuiColor4fNormal3fVertex3fvSUN (dynamic) */
    "pppp\0"
    "glReplacementCodeuiColor4fNormal3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[11350]: Color4bv (offset 26) */
+   /* _mesa_function_pool[11383]: Color4bv (offset 26) */
    "p\0"
    "glColor4bv\0"
    "\0"
-   /* _mesa_function_pool[11364]: VertexPointer (offset 321) */
+   /* _mesa_function_pool[11397]: VertexPointer (offset 321) */
    "iiip\0"
    "glVertexPointer\0"
    "\0"
-   /* _mesa_function_pool[11386]: SecondaryColor3uiEXT (will be remapped) */
+   /* _mesa_function_pool[11419]: SecondaryColor3uiEXT (will be remapped) */
    "iii\0"
    "glSecondaryColor3ui\0"
    "glSecondaryColor3uiEXT\0"
    "\0"
-   /* _mesa_function_pool[11434]: StartInstrumentsSGIX (dynamic) */
+   /* _mesa_function_pool[11467]: StartInstrumentsSGIX (dynamic) */
    "\0"
    "glStartInstrumentsSGIX\0"
    "\0"
-   /* _mesa_function_pool[11459]: SecondaryColor3usvEXT (will be remapped) */
+   /* _mesa_function_pool[11492]: SecondaryColor3usvEXT (will be remapped) */
    "p\0"
    "glSecondaryColor3usv\0"
    "glSecondaryColor3usvEXT\0"
    "\0"
-   /* _mesa_function_pool[11507]: VertexAttrib2fvNV (will be remapped) */
+   /* _mesa_function_pool[11540]: VertexAttrib2fvNV (will be remapped) */
    "ip\0"
    "glVertexAttrib2fvNV\0"
    "\0"
-   /* _mesa_function_pool[11531]: ProgramLocalParameter4dvARB (will be remapped) */
+   /* _mesa_function_pool[11564]: ProgramLocalParameter4dvARB (will be remapped) */
    "iip\0"
    "glProgramLocalParameter4dvARB\0"
    "\0"
-   /* _mesa_function_pool[11566]: DeleteLists (offset 4) */
+   /* _mesa_function_pool[11599]: DeleteLists (offset 4) */
    "ii\0"
    "glDeleteLists\0"
    "\0"
-   /* _mesa_function_pool[11584]: LogicOp (offset 242) */
+   /* _mesa_function_pool[11617]: LogicOp (offset 242) */
    "i\0"
    "glLogicOp\0"
    "\0"
-   /* _mesa_function_pool[11597]: MatrixIndexuivARB (dynamic) */
+   /* _mesa_function_pool[11630]: MatrixIndexuivARB (dynamic) */
    "ip\0"
    "glMatrixIndexuivARB\0"
    "\0"
-   /* _mesa_function_pool[11621]: Vertex2s (offset 132) */
+   /* _mesa_function_pool[11654]: Vertex2s (offset 132) */
    "ii\0"
    "glVertex2s\0"
    "\0"
-   /* _mesa_function_pool[11636]: RenderbufferStorageMultisample (will be remapped) */
+   /* _mesa_function_pool[11669]: RenderbufferStorageMultisample (will be remapped) */
    "iiiii\0"
    "glRenderbufferStorageMultisample\0"
    "glRenderbufferStorageMultisampleEXT\0"
    "\0"
-   /* _mesa_function_pool[11712]: TexCoord4fv (offset 121) */
+   /* _mesa_function_pool[11745]: TexCoord4fv (offset 121) */
    "p\0"
    "glTexCoord4fv\0"
    "\0"
-   /* _mesa_function_pool[11729]: Tangent3sEXT (dynamic) */
+   /* _mesa_function_pool[11762]: Tangent3sEXT (dynamic) */
    "iii\0"
    "glTangent3sEXT\0"
    "\0"
-   /* _mesa_function_pool[11749]: GlobalAlphaFactorfSUN (dynamic) */
+   /* _mesa_function_pool[11782]: GlobalAlphaFactorfSUN (dynamic) */
    "f\0"
    "glGlobalAlphaFactorfSUN\0"
    "\0"
-   /* _mesa_function_pool[11776]: MultiTexCoord3iARB (offset 396) */
+   /* _mesa_function_pool[11809]: MultiTexCoord3iARB (offset 396) */
    "iiii\0"
    "glMultiTexCoord3i\0"
    "glMultiTexCoord3iARB\0"
    "\0"
-   /* _mesa_function_pool[11821]: IsProgram (will be remapped) */
+   /* _mesa_function_pool[11854]: IsProgram (will be remapped) */
    "i\0"
    "glIsProgram\0"
    "\0"
-   /* _mesa_function_pool[11836]: TexCoordPointerListIBM (dynamic) */
+   /* _mesa_function_pool[11869]: TexCoordPointerListIBM (dynamic) */
    "iiipi\0"
    "glTexCoordPointerListIBM\0"
    "\0"
-   /* _mesa_function_pool[11868]: GlobalAlphaFactorusSUN (dynamic) */
+   /* _mesa_function_pool[11901]: GlobalAlphaFactorusSUN (dynamic) */
    "i\0"
    "glGlobalAlphaFactorusSUN\0"
    "\0"
-   /* _mesa_function_pool[11896]: VertexAttrib2dvNV (will be remapped) */
+   /* _mesa_function_pool[11929]: VertexAttrib2dvNV (will be remapped) */
    "ip\0"
    "glVertexAttrib2dvNV\0"
    "\0"
-   /* _mesa_function_pool[11920]: FramebufferRenderbufferEXT (will be remapped) */
+   /* _mesa_function_pool[11953]: FramebufferRenderbufferEXT (will be remapped) */
    "iiii\0"
    "glFramebufferRenderbuffer\0"
    "glFramebufferRenderbufferEXT\0"
    "\0"
-   /* _mesa_function_pool[11981]: VertexAttrib1dvNV (will be remapped) */
+   /* _mesa_function_pool[12014]: VertexAttrib1dvNV (will be remapped) */
    "ip\0"
    "glVertexAttrib1dvNV\0"
    "\0"
-   /* _mesa_function_pool[12005]: GenTextures (offset 328) */
+   /* _mesa_function_pool[12038]: GenTextures (offset 328) */
    "ip\0"
    "glGenTextures\0"
    "glGenTexturesEXT\0"
    "\0"
-   /* _mesa_function_pool[12040]: SetFenceNV (will be remapped) */
+   /* _mesa_function_pool[12073]: SetFenceNV (will be remapped) */
    "ii\0"
    "glSetFenceNV\0"
    "\0"
-   /* _mesa_function_pool[12057]: FramebufferTexture1DEXT (will be remapped) */
+   /* _mesa_function_pool[12090]: FramebufferTexture1DEXT (will be remapped) */
    "iiiii\0"
    "glFramebufferTexture1D\0"
    "glFramebufferTexture1DEXT\0"
    "\0"
-   /* _mesa_function_pool[12113]: GetCombinerOutputParameterivNV (will be remapped) */
+   /* _mesa_function_pool[12146]: GetCombinerOutputParameterivNV (will be remapped) */
    "iiip\0"
    "glGetCombinerOutputParameterivNV\0"
    "\0"
-   /* _mesa_function_pool[12152]: PixelTexGenParameterivSGIS (will be remapped) */
+   /* _mesa_function_pool[12185]: PixelTexGenParameterivSGIS (will be remapped) */
    "ip\0"
    "glPixelTexGenParameterivSGIS\0"
    "\0"
-   /* _mesa_function_pool[12185]: TextureNormalEXT (dynamic) */
+   /* _mesa_function_pool[12218]: TextureNormalEXT (dynamic) */
    "i\0"
    "glTextureNormalEXT\0"
    "\0"
-   /* _mesa_function_pool[12207]: IndexPointerListIBM (dynamic) */
+   /* _mesa_function_pool[12240]: IndexPointerListIBM (dynamic) */
    "iipi\0"
    "glIndexPointerListIBM\0"
    "\0"
-   /* _mesa_function_pool[12235]: WeightfvARB (dynamic) */
+   /* _mesa_function_pool[12268]: WeightfvARB (dynamic) */
    "ip\0"
    "glWeightfvARB\0"
    "\0"
-   /* _mesa_function_pool[12253]: RasterPos2sv (offset 69) */
+   /* _mesa_function_pool[12286]: RasterPos2sv (offset 69) */
    "p\0"
    "glRasterPos2sv\0"
    "\0"
-   /* _mesa_function_pool[12271]: Color4ubv (offset 36) */
+   /* _mesa_function_pool[12304]: Color4ubv (offset 36) */
    "p\0"
    "glColor4ubv\0"
    "\0"
-   /* _mesa_function_pool[12286]: DrawBuffer (offset 202) */
+   /* _mesa_function_pool[12319]: DrawBuffer (offset 202) */
    "i\0"
    "glDrawBuffer\0"
    "\0"
-   /* _mesa_function_pool[12302]: TexCoord2fv (offset 105) */
+   /* _mesa_function_pool[12335]: TexCoord2fv (offset 105) */
    "p\0"
    "glTexCoord2fv\0"
    "\0"
-   /* _mesa_function_pool[12319]: WindowPos4fMESA (will be remapped) */
+   /* _mesa_function_pool[12352]: WindowPos4fMESA (will be remapped) */
    "ffff\0"
    "glWindowPos4fMESA\0"
    "\0"
-   /* _mesa_function_pool[12343]: TexCoord1sv (offset 101) */
+   /* _mesa_function_pool[12376]: TexCoord1sv (offset 101) */
    "p\0"
    "glTexCoord1sv\0"
    "\0"
-   /* _mesa_function_pool[12360]: WindowPos3dvMESA (will be remapped) */
+   /* _mesa_function_pool[12393]: WindowPos3dvMESA (will be remapped) */
    "p\0"
    "glWindowPos3dv\0"
    "glWindowPos3dvARB\0"
    "glWindowPos3dvMESA\0"
    "\0"
-   /* _mesa_function_pool[12415]: DepthFunc (offset 245) */
+   /* _mesa_function_pool[12448]: DepthFunc (offset 245) */
    "i\0"
    "glDepthFunc\0"
    "\0"
-   /* _mesa_function_pool[12430]: PixelMapusv (offset 253) */
+   /* _mesa_function_pool[12463]: PixelMapusv (offset 253) */
    "iip\0"
    "glPixelMapusv\0"
    "\0"
-   /* _mesa_function_pool[12449]: GetQueryObjecti64vEXT (will be remapped) */
+   /* _mesa_function_pool[12482]: GetQueryObjecti64vEXT (will be remapped) */
    "iip\0"
    "glGetQueryObjecti64vEXT\0"
    "\0"
-   /* _mesa_function_pool[12478]: MultiTexCoord1dARB (offset 376) */
+   /* _mesa_function_pool[12511]: MultiTexCoord1dARB (offset 376) */
    "id\0"
    "glMultiTexCoord1d\0"
    "glMultiTexCoord1dARB\0"
    "\0"
-   /* _mesa_function_pool[12521]: PointParameterivNV (will be remapped) */
+   /* _mesa_function_pool[12554]: PointParameterivNV (will be remapped) */
    "ip\0"
    "glPointParameteriv\0"
    "glPointParameterivNV\0"
    "\0"
-   /* _mesa_function_pool[12565]: BlendFunc (offset 241) */
+   /* _mesa_function_pool[12598]: BlendFunc (offset 241) */
    "ii\0"
    "glBlendFunc\0"
    "\0"
-   /* _mesa_function_pool[12581]: Uniform2fvARB (will be remapped) */
+   /* _mesa_function_pool[12614]: Uniform2fvARB (will be remapped) */
    "iip\0"
    "glUniform2fv\0"
    "glUniform2fvARB\0"
    "\0"
-   /* _mesa_function_pool[12615]: BufferParameteriAPPLE (will be remapped) */
+   /* _mesa_function_pool[12648]: BufferParameteriAPPLE (will be remapped) */
    "iii\0"
    "glBufferParameteriAPPLE\0"
    "\0"
-   /* _mesa_function_pool[12644]: MultiTexCoord3dvARB (offset 393) */
+   /* _mesa_function_pool[12677]: MultiTexCoord3dvARB (offset 393) */
    "ip\0"
    "glMultiTexCoord3dv\0"
    "glMultiTexCoord3dvARB\0"
    "\0"
-   /* _mesa_function_pool[12689]: ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[12722]: ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (dynamic) */
    "pppp\0"
    "glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[12745]: DeleteObjectARB (will be remapped) */
+   /* _mesa_function_pool[12778]: DeleteObjectARB (will be remapped) */
    "i\0"
    "glDeleteObjectARB\0"
    "\0"
-   /* _mesa_function_pool[12766]: MatrixIndexPointerARB (dynamic) */
+   /* _mesa_function_pool[12799]: MatrixIndexPointerARB (dynamic) */
    "iiip\0"
    "glMatrixIndexPointerARB\0"
    "\0"
-   /* _mesa_function_pool[12796]: ProgramNamedParameter4dvNV (will be remapped) */
+   /* _mesa_function_pool[12829]: ProgramNamedParameter4dvNV (will be remapped) */
    "iipp\0"
    "glProgramNamedParameter4dvNV\0"
    "\0"
-   /* _mesa_function_pool[12831]: Tangent3fvEXT (dynamic) */
+   /* _mesa_function_pool[12864]: Tangent3fvEXT (dynamic) */
    "p\0"
    "glTangent3fvEXT\0"
    "\0"
-   /* _mesa_function_pool[12850]: Flush (offset 217) */
+   /* _mesa_function_pool[12883]: Flush (offset 217) */
    "\0"
    "glFlush\0"
    "\0"
-   /* _mesa_function_pool[12860]: Color4uiv (offset 38) */
+   /* _mesa_function_pool[12893]: Color4uiv (offset 38) */
    "p\0"
    "glColor4uiv\0"
    "\0"
-   /* _mesa_function_pool[12875]: GenVertexArrays (will be remapped) */
+   /* _mesa_function_pool[12908]: GenVertexArrays (will be remapped) */
    "ip\0"
    "glGenVertexArrays\0"
    "\0"
-   /* _mesa_function_pool[12897]: RasterPos3sv (offset 77) */
+   /* _mesa_function_pool[12930]: RasterPos3sv (offset 77) */
    "p\0"
    "glRasterPos3sv\0"
    "\0"
-   /* _mesa_function_pool[12915]: BindFramebufferEXT (will be remapped) */
+   /* _mesa_function_pool[12948]: BindFramebufferEXT (will be remapped) */
    "ii\0"
    "glBindFramebuffer\0"
    "glBindFramebufferEXT\0"
    "\0"
-   /* _mesa_function_pool[12958]: ReferencePlaneSGIX (dynamic) */
+   /* _mesa_function_pool[12991]: ReferencePlaneSGIX (dynamic) */
    "p\0"
    "glReferencePlaneSGIX\0"
    "\0"
-   /* _mesa_function_pool[12982]: PushAttrib (offset 219) */
+   /* _mesa_function_pool[13015]: PushAttrib (offset 219) */
    "i\0"
    "glPushAttrib\0"
    "\0"
-   /* _mesa_function_pool[12998]: RasterPos2i (offset 66) */
+   /* _mesa_function_pool[13031]: RasterPos2i (offset 66) */
    "ii\0"
    "glRasterPos2i\0"
    "\0"
-   /* _mesa_function_pool[13016]: ValidateProgramARB (will be remapped) */
+   /* _mesa_function_pool[13049]: ValidateProgramARB (will be remapped) */
    "i\0"
    "glValidateProgram\0"
    "glValidateProgramARB\0"
    "\0"
-   /* _mesa_function_pool[13058]: TexParameteriv (offset 181) */
+   /* _mesa_function_pool[13091]: TexParameteriv (offset 181) */
    "iip\0"
    "glTexParameteriv\0"
    "\0"
-   /* _mesa_function_pool[13080]: UnlockArraysEXT (will be remapped) */
+   /* _mesa_function_pool[13113]: UnlockArraysEXT (will be remapped) */
    "\0"
    "glUnlockArraysEXT\0"
    "\0"
-   /* _mesa_function_pool[13100]: TexCoord2fColor3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[13133]: TexCoord2fColor3fVertex3fSUN (dynamic) */
    "ffffffff\0"
    "glTexCoord2fColor3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[13141]: WindowPos3fvMESA (will be remapped) */
+   /* _mesa_function_pool[13174]: WindowPos3fvMESA (will be remapped) */
    "p\0"
    "glWindowPos3fv\0"
    "glWindowPos3fvARB\0"
    "glWindowPos3fvMESA\0"
    "\0"
-   /* _mesa_function_pool[13196]: RasterPos2f (offset 64) */
+   /* _mesa_function_pool[13229]: RasterPos2f (offset 64) */
    "ff\0"
    "glRasterPos2f\0"
    "\0"
-   /* _mesa_function_pool[13214]: VertexAttrib1svNV (will be remapped) */
+   /* _mesa_function_pool[13247]: VertexAttrib1svNV (will be remapped) */
    "ip\0"
    "glVertexAttrib1svNV\0"
    "\0"
-   /* _mesa_function_pool[13238]: RasterPos2d (offset 62) */
+   /* _mesa_function_pool[13271]: RasterPos2d (offset 62) */
    "dd\0"
    "glRasterPos2d\0"
    "\0"
-   /* _mesa_function_pool[13256]: RasterPos3fv (offset 73) */
+   /* _mesa_function_pool[13289]: RasterPos3fv (offset 73) */
    "p\0"
    "glRasterPos3fv\0"
    "\0"
-   /* _mesa_function_pool[13274]: CopyTexSubImage3D (offset 373) */
+   /* _mesa_function_pool[13307]: CopyTexSubImage3D (offset 373) */
    "iiiiiiiii\0"
    "glCopyTexSubImage3D\0"
    "glCopyTexSubImage3DEXT\0"
    "\0"
-   /* _mesa_function_pool[13328]: VertexAttrib2dARB (will be remapped) */
+   /* _mesa_function_pool[13361]: VertexAttrib2dARB (will be remapped) */
    "idd\0"
    "glVertexAttrib2d\0"
    "glVertexAttrib2dARB\0"
    "\0"
-   /* _mesa_function_pool[13370]: Color4ub (offset 35) */
+   /* _mesa_function_pool[13403]: Color4ub (offset 35) */
    "iiii\0"
    "glColor4ub\0"
    "\0"
-   /* _mesa_function_pool[13387]: GetInteger64v (will be remapped) */
+   /* _mesa_function_pool[13420]: GetInteger64v (will be remapped) */
    "ip\0"
    "glGetInteger64v\0"
    "\0"
-   /* _mesa_function_pool[13407]: TextureColorMaskSGIS (dynamic) */
+   /* _mesa_function_pool[13440]: TextureColorMaskSGIS (dynamic) */
    "iiii\0"
    "glTextureColorMaskSGIS\0"
    "\0"
-   /* _mesa_function_pool[13436]: RasterPos2s (offset 68) */
+   /* _mesa_function_pool[13469]: RasterPos2s (offset 68) */
    "ii\0"
    "glRasterPos2s\0"
    "\0"
-   /* _mesa_function_pool[13454]: GetColorTable (offset 343) */
+   /* _mesa_function_pool[13487]: GetColorTable (offset 343) */
    "iiip\0"
    "glGetColorTable\0"
    "glGetColorTableSGI\0"
    "glGetColorTableEXT\0"
    "\0"
-   /* _mesa_function_pool[13514]: SelectBuffer (offset 195) */
+   /* _mesa_function_pool[13547]: SelectBuffer (offset 195) */
    "ip\0"
    "glSelectBuffer\0"
    "\0"
-   /* _mesa_function_pool[13533]: Indexiv (offset 49) */
+   /* _mesa_function_pool[13566]: Indexiv (offset 49) */
    "p\0"
    "glIndexiv\0"
    "\0"
-   /* _mesa_function_pool[13546]: TexCoord3i (offset 114) */
+   /* _mesa_function_pool[13579]: TexCoord3i (offset 114) */
    "iii\0"
    "glTexCoord3i\0"
    "\0"
-   /* _mesa_function_pool[13564]: CopyColorTable (offset 342) */
+   /* _mesa_function_pool[13597]: CopyColorTable (offset 342) */
    "iiiii\0"
    "glCopyColorTable\0"
    "glCopyColorTableSGI\0"
    "\0"
-   /* _mesa_function_pool[13608]: GetHistogramParameterfv (offset 362) */
+   /* _mesa_function_pool[13641]: GetHistogramParameterfv (offset 362) */
    "iip\0"
    "glGetHistogramParameterfv\0"
    "glGetHistogramParameterfvEXT\0"
    "\0"
-   /* _mesa_function_pool[13668]: Frustum (offset 289) */
+   /* _mesa_function_pool[13701]: Frustum (offset 289) */
    "dddddd\0"
    "glFrustum\0"
    "\0"
-   /* _mesa_function_pool[13686]: GetString (offset 275) */
+   /* _mesa_function_pool[13719]: GetString (offset 275) */
    "i\0"
    "glGetString\0"
    "\0"
-   /* _mesa_function_pool[13701]: ColorPointervINTEL (dynamic) */
+   /* _mesa_function_pool[13734]: ColorPointervINTEL (dynamic) */
    "iip\0"
    "glColorPointervINTEL\0"
    "\0"
-   /* _mesa_function_pool[13727]: TexEnvf (offset 184) */
+   /* _mesa_function_pool[13760]: TexEnvf (offset 184) */
    "iif\0"
    "glTexEnvf\0"
    "\0"
-   /* _mesa_function_pool[13742]: TexCoord3d (offset 110) */
+   /* _mesa_function_pool[13775]: TexCoord3d (offset 110) */
    "ddd\0"
    "glTexCoord3d\0"
    "\0"
-   /* _mesa_function_pool[13760]: AlphaFragmentOp1ATI (will be remapped) */
+   /* _mesa_function_pool[13793]: AlphaFragmentOp1ATI (will be remapped) */
    "iiiiii\0"
    "glAlphaFragmentOp1ATI\0"
    "\0"
-   /* _mesa_function_pool[13790]: TexCoord3f (offset 112) */
+   /* _mesa_function_pool[13823]: TexCoord3f (offset 112) */
    "fff\0"
    "glTexCoord3f\0"
    "\0"
-   /* _mesa_function_pool[13808]: MultiTexCoord3ivARB (offset 397) */
+   /* _mesa_function_pool[13841]: MultiTexCoord3ivARB (offset 397) */
    "ip\0"
    "glMultiTexCoord3iv\0"
    "glMultiTexCoord3ivARB\0"
    "\0"
-   /* _mesa_function_pool[13853]: MultiTexCoord2sARB (offset 390) */
+   /* _mesa_function_pool[13886]: MultiTexCoord2sARB (offset 390) */
    "iii\0"
    "glMultiTexCoord2s\0"
    "glMultiTexCoord2sARB\0"
    "\0"
-   /* _mesa_function_pool[13897]: VertexAttrib1dvARB (will be remapped) */
+   /* _mesa_function_pool[13930]: VertexAttrib1dvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib1dv\0"
    "glVertexAttrib1dvARB\0"
    "\0"
-   /* _mesa_function_pool[13940]: DeleteTextures (offset 327) */
+   /* _mesa_function_pool[13973]: DeleteTextures (offset 327) */
    "ip\0"
    "glDeleteTextures\0"
    "glDeleteTexturesEXT\0"
    "\0"
-   /* _mesa_function_pool[13981]: TexCoordPointerEXT (will be remapped) */
+   /* _mesa_function_pool[14014]: TexCoordPointerEXT (will be remapped) */
    "iiiip\0"
    "glTexCoordPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[14009]: TexSubImage4DSGIS (dynamic) */
+   /* _mesa_function_pool[14042]: TexSubImage4DSGIS (dynamic) */
    "iiiiiiiiiiiip\0"
    "glTexSubImage4DSGIS\0"
    "\0"
-   /* _mesa_function_pool[14044]: TexCoord3s (offset 116) */
+   /* _mesa_function_pool[14077]: TexCoord3s (offset 116) */
    "iii\0"
    "glTexCoord3s\0"
    "\0"
-   /* _mesa_function_pool[14062]: GetTexLevelParameteriv (offset 285) */
+   /* _mesa_function_pool[14095]: GetTexLevelParameteriv (offset 285) */
    "iiip\0"
    "glGetTexLevelParameteriv\0"
    "\0"
-   /* _mesa_function_pool[14093]: CombinerStageParameterfvNV (dynamic) */
+   /* _mesa_function_pool[14126]: CombinerStageParameterfvNV (dynamic) */
    "iip\0"
    "glCombinerStageParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[14127]: StopInstrumentsSGIX (dynamic) */
+   /* _mesa_function_pool[14160]: StopInstrumentsSGIX (dynamic) */
    "i\0"
    "glStopInstrumentsSGIX\0"
    "\0"
-   /* _mesa_function_pool[14152]: TexCoord4fColor4fNormal3fVertex4fSUN (dynamic) */
+   /* _mesa_function_pool[14185]: TexCoord4fColor4fNormal3fVertex4fSUN (dynamic) */
    "fffffffffffffff\0"
    "glTexCoord4fColor4fNormal3fVertex4fSUN\0"
    "\0"
-   /* _mesa_function_pool[14208]: ClearAccum (offset 204) */
+   /* _mesa_function_pool[14241]: ClearAccum (offset 204) */
    "ffff\0"
    "glClearAccum\0"
    "\0"
-   /* _mesa_function_pool[14227]: DeformSGIX (dynamic) */
+   /* _mesa_function_pool[14260]: DeformSGIX (dynamic) */
    "i\0"
    "glDeformSGIX\0"
    "\0"
-   /* _mesa_function_pool[14243]: GetVertexAttribfvARB (will be remapped) */
+   /* _mesa_function_pool[14276]: GetVertexAttribfvARB (will be remapped) */
    "iip\0"
    "glGetVertexAttribfv\0"
    "glGetVertexAttribfvARB\0"
    "\0"
-   /* _mesa_function_pool[14291]: SecondaryColor3ivEXT (will be remapped) */
+   /* _mesa_function_pool[14324]: SecondaryColor3ivEXT (will be remapped) */
    "p\0"
    "glSecondaryColor3iv\0"
    "glSecondaryColor3ivEXT\0"
    "\0"
-   /* _mesa_function_pool[14337]: TexCoord4iv (offset 123) */
+   /* _mesa_function_pool[14370]: TexCoord4iv (offset 123) */
    "p\0"
    "glTexCoord4iv\0"
    "\0"
-   /* _mesa_function_pool[14354]: UniformMatrix4x2fv (will be remapped) */
+   /* _mesa_function_pool[14387]: UniformMatrix4x2fv (will be remapped) */
    "iiip\0"
    "glUniformMatrix4x2fv\0"
    "\0"
-   /* _mesa_function_pool[14381]: GetDetailTexFuncSGIS (dynamic) */
+   /* _mesa_function_pool[14414]: GetDetailTexFuncSGIS (dynamic) */
    "ip\0"
    "glGetDetailTexFuncSGIS\0"
    "\0"
-   /* _mesa_function_pool[14408]: GetCombinerStageParameterfvNV (dynamic) */
+   /* _mesa_function_pool[14441]: GetCombinerStageParameterfvNV (dynamic) */
    "iip\0"
    "glGetCombinerStageParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[14445]: PolygonOffset (offset 319) */
+   /* _mesa_function_pool[14478]: PolygonOffset (offset 319) */
    "ff\0"
    "glPolygonOffset\0"
    "\0"
-   /* _mesa_function_pool[14465]: BindVertexArray (will be remapped) */
+   /* _mesa_function_pool[14498]: BindVertexArray (will be remapped) */
    "i\0"
    "glBindVertexArray\0"
    "\0"
-   /* _mesa_function_pool[14486]: Color4ubVertex2fvSUN (dynamic) */
+   /* _mesa_function_pool[14519]: Color4ubVertex2fvSUN (dynamic) */
    "pp\0"
    "glColor4ubVertex2fvSUN\0"
    "\0"
-   /* _mesa_function_pool[14513]: Rectd (offset 86) */
+   /* _mesa_function_pool[14546]: Rectd (offset 86) */
    "dddd\0"
    "glRectd\0"
    "\0"
-   /* _mesa_function_pool[14527]: TexFilterFuncSGIS (dynamic) */
+   /* _mesa_function_pool[14560]: TexFilterFuncSGIS (dynamic) */
    "iiip\0"
    "glTexFilterFuncSGIS\0"
    "\0"
-   /* _mesa_function_pool[14553]: SampleMaskSGIS (will be remapped) */
+   /* _mesa_function_pool[14586]: SampleMaskSGIS (will be remapped) */
    "fi\0"
    "glSampleMaskSGIS\0"
    "glSampleMaskEXT\0"
    "\0"
-   /* _mesa_function_pool[14590]: GetAttribLocationARB (will be remapped) */
+   /* _mesa_function_pool[14623]: GetAttribLocationARB (will be remapped) */
    "ip\0"
    "glGetAttribLocation\0"
    "glGetAttribLocationARB\0"
    "\0"
-   /* _mesa_function_pool[14637]: RasterPos3i (offset 74) */
+   /* _mesa_function_pool[14670]: RasterPos3i (offset 74) */
    "iii\0"
    "glRasterPos3i\0"
    "\0"
-   /* _mesa_function_pool[14656]: VertexAttrib4ubvARB (will be remapped) */
+   /* _mesa_function_pool[14689]: VertexAttrib4ubvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4ubv\0"
    "glVertexAttrib4ubvARB\0"
    "\0"
-   /* _mesa_function_pool[14701]: DetailTexFuncSGIS (dynamic) */
+   /* _mesa_function_pool[14734]: DetailTexFuncSGIS (dynamic) */
    "iip\0"
    "glDetailTexFuncSGIS\0"
    "\0"
-   /* _mesa_function_pool[14726]: Normal3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[14759]: Normal3fVertex3fSUN (dynamic) */
    "ffffff\0"
    "glNormal3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[14756]: CopyTexImage2D (offset 324) */
+   /* _mesa_function_pool[14789]: CopyTexImage2D (offset 324) */
    "iiiiiiii\0"
    "glCopyTexImage2D\0"
    "glCopyTexImage2DEXT\0"
    "\0"
-   /* _mesa_function_pool[14803]: GetBufferPointervARB (will be remapped) */
+   /* _mesa_function_pool[14836]: GetBufferPointervARB (will be remapped) */
    "iip\0"
    "glGetBufferPointerv\0"
    "glGetBufferPointervARB\0"
    "\0"
-   /* _mesa_function_pool[14851]: ProgramEnvParameter4fARB (will be remapped) */
+   /* _mesa_function_pool[14884]: ProgramEnvParameter4fARB (will be remapped) */
    "iiffff\0"
    "glProgramEnvParameter4fARB\0"
    "glProgramParameter4fNV\0"
    "\0"
-   /* _mesa_function_pool[14909]: Uniform3ivARB (will be remapped) */
+   /* _mesa_function_pool[14942]: Uniform3ivARB (will be remapped) */
    "iip\0"
    "glUniform3iv\0"
    "glUniform3ivARB\0"
    "\0"
-   /* _mesa_function_pool[14943]: Lightfv (offset 160) */
+   /* _mesa_function_pool[14976]: Lightfv (offset 160) */
    "iip\0"
    "glLightfv\0"
    "\0"
-   /* _mesa_function_pool[14958]: ClearDepth (offset 208) */
+   /* _mesa_function_pool[14991]: ClearDepth (offset 208) */
    "d\0"
    "glClearDepth\0"
    "\0"
-   /* _mesa_function_pool[14974]: GetFenceivNV (will be remapped) */
+   /* _mesa_function_pool[15007]: GetFenceivNV (will be remapped) */
    "iip\0"
    "glGetFenceivNV\0"
    "\0"
-   /* _mesa_function_pool[14994]: WindowPos4dvMESA (will be remapped) */
+   /* _mesa_function_pool[15027]: WindowPos4dvMESA (will be remapped) */
    "p\0"
    "glWindowPos4dvMESA\0"
    "\0"
-   /* _mesa_function_pool[15016]: ColorSubTable (offset 346) */
+   /* _mesa_function_pool[15049]: ColorSubTable (offset 346) */
    "iiiiip\0"
    "glColorSubTable\0"
    "glColorSubTableEXT\0"
    "\0"
-   /* _mesa_function_pool[15059]: Color4fv (offset 30) */
+   /* _mesa_function_pool[15092]: Color4fv (offset 30) */
    "p\0"
    "glColor4fv\0"
    "\0"
-   /* _mesa_function_pool[15073]: MultiTexCoord4ivARB (offset 405) */
+   /* _mesa_function_pool[15106]: MultiTexCoord4ivARB (offset 405) */
    "ip\0"
    "glMultiTexCoord4iv\0"
    "glMultiTexCoord4ivARB\0"
    "\0"
-   /* _mesa_function_pool[15118]: ProgramLocalParameters4fvEXT (will be remapped) */
+   /* _mesa_function_pool[15151]: ProgramLocalParameters4fvEXT (will be remapped) */
    "iiip\0"
    "glProgramLocalParameters4fvEXT\0"
    "\0"
-   /* _mesa_function_pool[15155]: ColorPointer (offset 308) */
+   /* _mesa_function_pool[15188]: ColorPointer (offset 308) */
    "iiip\0"
    "glColorPointer\0"
    "\0"
-   /* _mesa_function_pool[15176]: Rects (offset 92) */
+   /* _mesa_function_pool[15209]: Rects (offset 92) */
    "iiii\0"
    "glRects\0"
    "\0"
-   /* _mesa_function_pool[15190]: GetMapAttribParameterfvNV (dynamic) */
+   /* _mesa_function_pool[15223]: GetMapAttribParameterfvNV (dynamic) */
    "iiip\0"
    "glGetMapAttribParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[15224]: Lightiv (offset 162) */
+   /* _mesa_function_pool[15257]: Lightiv (offset 162) */
    "iip\0"
    "glLightiv\0"
    "\0"
-   /* _mesa_function_pool[15239]: VertexAttrib4sARB (will be remapped) */
+   /* _mesa_function_pool[15272]: VertexAttrib4sARB (will be remapped) */
    "iiiii\0"
    "glVertexAttrib4s\0"
    "glVertexAttrib4sARB\0"
    "\0"
-   /* _mesa_function_pool[15283]: GetQueryObjectuivARB (will be remapped) */
+   /* _mesa_function_pool[15316]: GetQueryObjectuivARB (will be remapped) */
    "iip\0"
    "glGetQueryObjectuiv\0"
    "glGetQueryObjectuivARB\0"
    "\0"
-   /* _mesa_function_pool[15331]: GetTexParameteriv (offset 283) */
+   /* _mesa_function_pool[15364]: GetTexParameteriv (offset 283) */
    "iip\0"
    "glGetTexParameteriv\0"
    "\0"
-   /* _mesa_function_pool[15356]: MapParameterivNV (dynamic) */
+   /* _mesa_function_pool[15389]: MapParameterivNV (dynamic) */
    "iip\0"
    "glMapParameterivNV\0"
    "\0"
-   /* _mesa_function_pool[15380]: GenRenderbuffersEXT (will be remapped) */
+   /* _mesa_function_pool[15413]: GenRenderbuffersEXT (will be remapped) */
    "ip\0"
    "glGenRenderbuffers\0"
    "glGenRenderbuffersEXT\0"
    "\0"
-   /* _mesa_function_pool[15425]: VertexAttrib2dvARB (will be remapped) */
+   /* _mesa_function_pool[15458]: VertexAttrib2dvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib2dv\0"
    "glVertexAttrib2dvARB\0"
    "\0"
-   /* _mesa_function_pool[15468]: EdgeFlagPointerEXT (will be remapped) */
+   /* _mesa_function_pool[15501]: EdgeFlagPointerEXT (will be remapped) */
    "iip\0"
    "glEdgeFlagPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[15494]: VertexAttribs2svNV (will be remapped) */
+   /* _mesa_function_pool[15527]: VertexAttribs2svNV (will be remapped) */
    "iip\0"
    "glVertexAttribs2svNV\0"
    "\0"
-   /* _mesa_function_pool[15520]: WeightbvARB (dynamic) */
+   /* _mesa_function_pool[15553]: WeightbvARB (dynamic) */
    "ip\0"
    "glWeightbvARB\0"
    "\0"
-   /* _mesa_function_pool[15538]: VertexAttrib2fvARB (will be remapped) */
+   /* _mesa_function_pool[15571]: VertexAttrib2fvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib2fv\0"
    "glVertexAttrib2fvARB\0"
    "\0"
-   /* _mesa_function_pool[15581]: GetBufferParameterivARB (will be remapped) */
+   /* _mesa_function_pool[15614]: GetBufferParameterivARB (will be remapped) */
    "iip\0"
    "glGetBufferParameteriv\0"
    "glGetBufferParameterivARB\0"
    "\0"
-   /* _mesa_function_pool[15635]: Rectdv (offset 87) */
+   /* _mesa_function_pool[15668]: Rectdv (offset 87) */
    "pp\0"
    "glRectdv\0"
    "\0"
-   /* _mesa_function_pool[15648]: ListParameteriSGIX (dynamic) */
+   /* _mesa_function_pool[15681]: ListParameteriSGIX (dynamic) */
    "iii\0"
    "glListParameteriSGIX\0"
    "\0"
-   /* _mesa_function_pool[15674]: ReplacementCodeuiColor4fNormal3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[15707]: ReplacementCodeuiColor4fNormal3fVertex3fSUN (dynamic) */
    "iffffffffff\0"
    "glReplacementCodeuiColor4fNormal3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[15733]: InstrumentsBufferSGIX (dynamic) */
+   /* _mesa_function_pool[15766]: InstrumentsBufferSGIX (dynamic) */
    "ip\0"
    "glInstrumentsBufferSGIX\0"
    "\0"
-   /* _mesa_function_pool[15761]: VertexAttrib4NivARB (will be remapped) */
+   /* _mesa_function_pool[15794]: VertexAttrib4NivARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4Niv\0"
    "glVertexAttrib4NivARB\0"
    "\0"
-   /* _mesa_function_pool[15806]: GetAttachedShaders (will be remapped) */
+   /* _mesa_function_pool[15839]: GetAttachedShaders (will be remapped) */
    "iipp\0"
    "glGetAttachedShaders\0"
    "\0"
-   /* _mesa_function_pool[15833]: GenVertexArraysAPPLE (will be remapped) */
+   /* _mesa_function_pool[15866]: GenVertexArraysAPPLE (will be remapped) */
    "ip\0"
    "glGenVertexArraysAPPLE\0"
    "\0"
-   /* _mesa_function_pool[15860]: Materialiv (offset 172) */
+   /* _mesa_function_pool[15893]: Materialiv (offset 172) */
    "iip\0"
    "glMaterialiv\0"
    "\0"
-   /* _mesa_function_pool[15878]: PushClientAttrib (offset 335) */
+   /* _mesa_function_pool[15911]: PushClientAttrib (offset 335) */
    "i\0"
    "glPushClientAttrib\0"
    "\0"
-   /* _mesa_function_pool[15900]: ProgramEnvParameters4fvEXT (will be remapped) */
+   /* _mesa_function_pool[15933]: ProgramEnvParameters4fvEXT (will be remapped) */
    "iiip\0"
    "glProgramEnvParameters4fvEXT\0"
    "\0"
-   /* _mesa_function_pool[15935]: TexCoord2fColor4fNormal3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[15968]: TexCoord2fColor4fNormal3fVertex3fvSUN (dynamic) */
    "pppp\0"
    "glTexCoord2fColor4fNormal3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[15981]: WindowPos2iMESA (will be remapped) */
+   /* _mesa_function_pool[16014]: WindowPos2iMESA (will be remapped) */
    "ii\0"
    "glWindowPos2i\0"
    "glWindowPos2iARB\0"
    "glWindowPos2iMESA\0"
    "\0"
-   /* _mesa_function_pool[16034]: SecondaryColor3fvEXT (will be remapped) */
+   /* _mesa_function_pool[16067]: SecondaryColor3fvEXT (will be remapped) */
    "p\0"
    "glSecondaryColor3fv\0"
    "glSecondaryColor3fvEXT\0"
    "\0"
-   /* _mesa_function_pool[16080]: PolygonMode (offset 174) */
+   /* _mesa_function_pool[16113]: PolygonMode (offset 174) */
    "ii\0"
    "glPolygonMode\0"
    "\0"
-   /* _mesa_function_pool[16098]: CompressedTexSubImage1DARB (will be remapped) */
+   /* _mesa_function_pool[16131]: CompressedTexSubImage1DARB (will be remapped) */
    "iiiiiip\0"
    "glCompressedTexSubImage1D\0"
    "glCompressedTexSubImage1DARB\0"
    "\0"
-   /* _mesa_function_pool[16162]: GetVertexAttribivNV (will be remapped) */
+   /* _mesa_function_pool[16195]: GetVertexAttribivNV (will be remapped) */
    "iip\0"
    "glGetVertexAttribivNV\0"
    "\0"
-   /* _mesa_function_pool[16189]: GetProgramStringARB (will be remapped) */
+   /* _mesa_function_pool[16222]: GetProgramStringARB (will be remapped) */
    "iip\0"
    "glGetProgramStringARB\0"
    "\0"
-   /* _mesa_function_pool[16216]: TexBumpParameterfvATI (will be remapped) */
+   /* _mesa_function_pool[16249]: TexBumpParameterfvATI (will be remapped) */
    "ip\0"
    "glTexBumpParameterfvATI\0"
    "\0"
-   /* _mesa_function_pool[16244]: CompileShaderARB (will be remapped) */
+   /* _mesa_function_pool[16277]: CompileShaderARB (will be remapped) */
    "i\0"
    "glCompileShader\0"
    "glCompileShaderARB\0"
    "\0"
-   /* _mesa_function_pool[16282]: DeleteShader (will be remapped) */
+   /* _mesa_function_pool[16315]: DeleteShader (will be remapped) */
    "i\0"
    "glDeleteShader\0"
    "\0"
-   /* _mesa_function_pool[16300]: DisableClientState (offset 309) */
+   /* _mesa_function_pool[16333]: DisableClientState (offset 309) */
    "i\0"
    "glDisableClientState\0"
    "\0"
-   /* _mesa_function_pool[16324]: TexGeni (offset 192) */
+   /* _mesa_function_pool[16357]: TexGeni (offset 192) */
    "iii\0"
    "glTexGeni\0"
    "\0"
-   /* _mesa_function_pool[16339]: TexGenf (offset 190) */
+   /* _mesa_function_pool[16372]: TexGenf (offset 190) */
    "iif\0"
    "glTexGenf\0"
    "\0"
-   /* _mesa_function_pool[16354]: Uniform3fARB (will be remapped) */
+   /* _mesa_function_pool[16387]: Uniform3fARB (will be remapped) */
    "ifff\0"
    "glUniform3f\0"
    "glUniform3fARB\0"
    "\0"
-   /* _mesa_function_pool[16387]: TexGend (offset 188) */
+   /* _mesa_function_pool[16420]: TexGend (offset 188) */
    "iid\0"
    "glTexGend\0"
    "\0"
-   /* _mesa_function_pool[16402]: ListParameterfvSGIX (dynamic) */
+   /* _mesa_function_pool[16435]: ListParameterfvSGIX (dynamic) */
    "iip\0"
    "glListParameterfvSGIX\0"
    "\0"
-   /* _mesa_function_pool[16429]: GetPolygonStipple (offset 274) */
+   /* _mesa_function_pool[16462]: GetPolygonStipple (offset 274) */
    "p\0"
    "glGetPolygonStipple\0"
    "\0"
-   /* _mesa_function_pool[16452]: Tangent3dvEXT (dynamic) */
+   /* _mesa_function_pool[16485]: Tangent3dvEXT (dynamic) */
    "p\0"
    "glTangent3dvEXT\0"
    "\0"
-   /* _mesa_function_pool[16471]: GetVertexAttribfvNV (will be remapped) */
+   /* _mesa_function_pool[16504]: GetVertexAttribfvNV (will be remapped) */
    "iip\0"
    "glGetVertexAttribfvNV\0"
    "\0"
-   /* _mesa_function_pool[16498]: WindowPos3sMESA (will be remapped) */
+   /* _mesa_function_pool[16531]: WindowPos3sMESA (will be remapped) */
    "iii\0"
    "glWindowPos3s\0"
    "glWindowPos3sARB\0"
    "glWindowPos3sMESA\0"
    "\0"
-   /* _mesa_function_pool[16552]: VertexAttrib2svNV (will be remapped) */
+   /* _mesa_function_pool[16585]: VertexAttrib2svNV (will be remapped) */
    "ip\0"
    "glVertexAttrib2svNV\0"
    "\0"
-   /* _mesa_function_pool[16576]: VertexAttribs1fvNV (will be remapped) */
+   /* _mesa_function_pool[16609]: VertexAttribs1fvNV (will be remapped) */
    "iip\0"
    "glVertexAttribs1fvNV\0"
    "\0"
-   /* _mesa_function_pool[16602]: TexCoord2fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[16635]: TexCoord2fVertex3fvSUN (dynamic) */
    "pp\0"
    "glTexCoord2fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[16631]: WindowPos4sMESA (will be remapped) */
+   /* _mesa_function_pool[16664]: WindowPos4sMESA (will be remapped) */
    "iiii\0"
    "glWindowPos4sMESA\0"
    "\0"
-   /* _mesa_function_pool[16655]: VertexAttrib4NuivARB (will be remapped) */
+   /* _mesa_function_pool[16688]: VertexAttrib4NuivARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4Nuiv\0"
    "glVertexAttrib4NuivARB\0"
    "\0"
-   /* _mesa_function_pool[16702]: ClientActiveTextureARB (offset 375) */
+   /* _mesa_function_pool[16735]: ClientActiveTextureARB (offset 375) */
    "i\0"
    "glClientActiveTexture\0"
    "glClientActiveTextureARB\0"
    "\0"
-   /* _mesa_function_pool[16752]: PixelTexGenSGIX (will be remapped) */
+   /* _mesa_function_pool[16785]: PixelTexGenSGIX (will be remapped) */
    "i\0"
    "glPixelTexGenSGIX\0"
    "\0"
-   /* _mesa_function_pool[16773]: ReplacementCodeusvSUN (dynamic) */
+   /* _mesa_function_pool[16806]: ReplacementCodeusvSUN (dynamic) */
    "p\0"
    "glReplacementCodeusvSUN\0"
    "\0"
-   /* _mesa_function_pool[16800]: Uniform4fARB (will be remapped) */
+   /* _mesa_function_pool[16833]: Uniform4fARB (will be remapped) */
    "iffff\0"
    "glUniform4f\0"
    "glUniform4fARB\0"
    "\0"
-   /* _mesa_function_pool[16834]: Color4sv (offset 34) */
+   /* _mesa_function_pool[16867]: Color4sv (offset 34) */
    "p\0"
    "glColor4sv\0"
    "\0"
-   /* _mesa_function_pool[16848]: FlushMappedBufferRange (will be remapped) */
+   /* _mesa_function_pool[16881]: FlushMappedBufferRange (will be remapped) */
    "iii\0"
    "glFlushMappedBufferRange\0"
    "\0"
-   /* _mesa_function_pool[16878]: IsProgramNV (will be remapped) */
+   /* _mesa_function_pool[16911]: IsProgramNV (will be remapped) */
    "i\0"
    "glIsProgramARB\0"
    "glIsProgramNV\0"
    "\0"
-   /* _mesa_function_pool[16910]: FlushMappedBufferRangeAPPLE (will be remapped) */
+   /* _mesa_function_pool[16943]: FlushMappedBufferRangeAPPLE (will be remapped) */
    "iii\0"
    "glFlushMappedBufferRangeAPPLE\0"
    "\0"
-   /* _mesa_function_pool[16945]: PixelZoom (offset 246) */
+   /* _mesa_function_pool[16978]: PixelZoom (offset 246) */
    "ff\0"
    "glPixelZoom\0"
    "\0"
-   /* _mesa_function_pool[16961]: ReplacementCodePointerSUN (dynamic) */
+   /* _mesa_function_pool[16994]: ReplacementCodePointerSUN (dynamic) */
    "iip\0"
    "glReplacementCodePointerSUN\0"
    "\0"
-   /* _mesa_function_pool[16994]: ProgramEnvParameter4dARB (will be remapped) */
+   /* _mesa_function_pool[17027]: ProgramEnvParameter4dARB (will be remapped) */
    "iidddd\0"
    "glProgramEnvParameter4dARB\0"
    "glProgramParameter4dNV\0"
    "\0"
-   /* _mesa_function_pool[17052]: ColorTableParameterfv (offset 340) */
+   /* _mesa_function_pool[17085]: ColorTableParameterfv (offset 340) */
    "iip\0"
    "glColorTableParameterfv\0"
    "glColorTableParameterfvSGI\0"
    "\0"
-   /* _mesa_function_pool[17108]: FragmentLightModelfSGIX (dynamic) */
+   /* _mesa_function_pool[17141]: FragmentLightModelfSGIX (dynamic) */
    "if\0"
    "glFragmentLightModelfSGIX\0"
    "\0"
-   /* _mesa_function_pool[17138]: Binormal3bvEXT (dynamic) */
+   /* _mesa_function_pool[17171]: Binormal3bvEXT (dynamic) */
    "p\0"
    "glBinormal3bvEXT\0"
    "\0"
-   /* _mesa_function_pool[17158]: PixelMapuiv (offset 252) */
+   /* _mesa_function_pool[17191]: PixelMapuiv (offset 252) */
    "iip\0"
    "glPixelMapuiv\0"
    "\0"
-   /* _mesa_function_pool[17177]: Color3dv (offset 12) */
+   /* _mesa_function_pool[17210]: Color3dv (offset 12) */
    "p\0"
    "glColor3dv\0"
    "\0"
-   /* _mesa_function_pool[17191]: IsTexture (offset 330) */
+   /* _mesa_function_pool[17224]: IsTexture (offset 330) */
    "i\0"
    "glIsTexture\0"
    "glIsTextureEXT\0"
    "\0"
-   /* _mesa_function_pool[17221]: VertexWeightfvEXT (dynamic) */
+   /* _mesa_function_pool[17254]: VertexWeightfvEXT (dynamic) */
    "p\0"
    "glVertexWeightfvEXT\0"
    "\0"
-   /* _mesa_function_pool[17244]: VertexAttrib1dARB (will be remapped) */
+   /* _mesa_function_pool[17277]: VertexAttrib1dARB (will be remapped) */
    "id\0"
    "glVertexAttrib1d\0"
    "glVertexAttrib1dARB\0"
    "\0"
-   /* _mesa_function_pool[17285]: ImageTransformParameterivHP (dynamic) */
+   /* _mesa_function_pool[17318]: ImageTransformParameterivHP (dynamic) */
    "iip\0"
    "glImageTransformParameterivHP\0"
    "\0"
-   /* _mesa_function_pool[17320]: TexCoord4i (offset 122) */
+   /* _mesa_function_pool[17353]: TexCoord4i (offset 122) */
    "iiii\0"
    "glTexCoord4i\0"
    "\0"
-   /* _mesa_function_pool[17339]: DeleteQueriesARB (will be remapped) */
+   /* _mesa_function_pool[17372]: DeleteQueriesARB (will be remapped) */
    "ip\0"
    "glDeleteQueries\0"
    "glDeleteQueriesARB\0"
    "\0"
-   /* _mesa_function_pool[17378]: Color4ubVertex2fSUN (dynamic) */
+   /* _mesa_function_pool[17411]: Color4ubVertex2fSUN (dynamic) */
    "iiiiff\0"
    "glColor4ubVertex2fSUN\0"
    "\0"
-   /* _mesa_function_pool[17408]: FragmentColorMaterialSGIX (dynamic) */
+   /* _mesa_function_pool[17441]: FragmentColorMaterialSGIX (dynamic) */
    "ii\0"
    "glFragmentColorMaterialSGIX\0"
    "\0"
-   /* _mesa_function_pool[17440]: CurrentPaletteMatrixARB (dynamic) */
+   /* _mesa_function_pool[17473]: CurrentPaletteMatrixARB (dynamic) */
    "i\0"
    "glCurrentPaletteMatrixARB\0"
    "\0"
-   /* _mesa_function_pool[17469]: GetMapdv (offset 266) */
+   /* _mesa_function_pool[17502]: GetMapdv (offset 266) */
    "iip\0"
    "glGetMapdv\0"
    "\0"
-   /* _mesa_function_pool[17485]: SamplePatternSGIS (will be remapped) */
+   /* _mesa_function_pool[17518]: SamplePatternSGIS (will be remapped) */
    "i\0"
    "glSamplePatternSGIS\0"
    "glSamplePatternEXT\0"
    "\0"
-   /* _mesa_function_pool[17527]: PixelStoref (offset 249) */
+   /* _mesa_function_pool[17560]: PixelStoref (offset 249) */
    "if\0"
    "glPixelStoref\0"
    "\0"
-   /* _mesa_function_pool[17545]: IsQueryARB (will be remapped) */
+   /* _mesa_function_pool[17578]: IsQueryARB (will be remapped) */
    "i\0"
    "glIsQuery\0"
    "glIsQueryARB\0"
    "\0"
-   /* _mesa_function_pool[17571]: ReplacementCodeuiColor4ubVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[17604]: ReplacementCodeuiColor4ubVertex3fSUN (dynamic) */
    "iiiiifff\0"
    "glReplacementCodeuiColor4ubVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[17620]: PixelStorei (offset 250) */
+   /* _mesa_function_pool[17653]: PixelStorei (offset 250) */
    "ii\0"
    "glPixelStorei\0"
    "\0"
-   /* _mesa_function_pool[17638]: VertexAttrib4usvARB (will be remapped) */
+   /* _mesa_function_pool[17671]: VertexAttrib4usvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4usv\0"
    "glVertexAttrib4usvARB\0"
    "\0"
-   /* _mesa_function_pool[17683]: LinkProgramARB (will be remapped) */
+   /* _mesa_function_pool[17716]: LinkProgramARB (will be remapped) */
    "i\0"
    "glLinkProgram\0"
    "glLinkProgramARB\0"
    "\0"
-   /* _mesa_function_pool[17717]: VertexAttrib2fNV (will be remapped) */
+   /* _mesa_function_pool[17750]: VertexAttrib2fNV (will be remapped) */
    "iff\0"
    "glVertexAttrib2fNV\0"
    "\0"
-   /* _mesa_function_pool[17741]: ShaderSourceARB (will be remapped) */
+   /* _mesa_function_pool[17774]: ShaderSourceARB (will be remapped) */
    "iipp\0"
    "glShaderSource\0"
    "glShaderSourceARB\0"
    "\0"
-   /* _mesa_function_pool[17780]: FragmentMaterialiSGIX (dynamic) */
+   /* _mesa_function_pool[17813]: FragmentMaterialiSGIX (dynamic) */
    "iii\0"
    "glFragmentMaterialiSGIX\0"
    "\0"
-   /* _mesa_function_pool[17809]: EvalCoord2dv (offset 233) */
+   /* _mesa_function_pool[17842]: EvalCoord2dv (offset 233) */
    "p\0"
    "glEvalCoord2dv\0"
    "\0"
-   /* _mesa_function_pool[17827]: VertexAttrib3svARB (will be remapped) */
+   /* _mesa_function_pool[17860]: VertexAttrib3svARB (will be remapped) */
    "ip\0"
    "glVertexAttrib3sv\0"
    "glVertexAttrib3svARB\0"
    "\0"
-   /* _mesa_function_pool[17870]: ColorMaterial (offset 151) */
+   /* _mesa_function_pool[17903]: ColorMaterial (offset 151) */
    "ii\0"
    "glColorMaterial\0"
    "\0"
-   /* _mesa_function_pool[17890]: CompressedTexSubImage3DARB (will be remapped) */
+   /* _mesa_function_pool[17923]: CompressedTexSubImage3DARB (will be remapped) */
    "iiiiiiiiiip\0"
    "glCompressedTexSubImage3D\0"
    "glCompressedTexSubImage3DARB\0"
    "\0"
-   /* _mesa_function_pool[17958]: WindowPos2ivMESA (will be remapped) */
+   /* _mesa_function_pool[17991]: WindowPos2ivMESA (will be remapped) */
    "p\0"
    "glWindowPos2iv\0"
    "glWindowPos2ivARB\0"
    "glWindowPos2ivMESA\0"
    "\0"
-   /* _mesa_function_pool[18013]: IsFramebufferEXT (will be remapped) */
+   /* _mesa_function_pool[18046]: IsFramebufferEXT (will be remapped) */
    "i\0"
    "glIsFramebuffer\0"
    "glIsFramebufferEXT\0"
    "\0"
-   /* _mesa_function_pool[18051]: Uniform4ivARB (will be remapped) */
+   /* _mesa_function_pool[18084]: Uniform4ivARB (will be remapped) */
    "iip\0"
    "glUniform4iv\0"
    "glUniform4ivARB\0"
    "\0"
-   /* _mesa_function_pool[18085]: GetVertexAttribdvARB (will be remapped) */
+   /* _mesa_function_pool[18118]: GetVertexAttribdvARB (will be remapped) */
    "iip\0"
    "glGetVertexAttribdv\0"
    "glGetVertexAttribdvARB\0"
    "\0"
-   /* _mesa_function_pool[18133]: TexBumpParameterivATI (will be remapped) */
+   /* _mesa_function_pool[18166]: TexBumpParameterivATI (will be remapped) */
    "ip\0"
    "glTexBumpParameterivATI\0"
    "\0"
-   /* _mesa_function_pool[18161]: GetSeparableFilter (offset 359) */
+   /* _mesa_function_pool[18194]: GetSeparableFilter (offset 359) */
    "iiippp\0"
    "glGetSeparableFilter\0"
    "glGetSeparableFilterEXT\0"
    "\0"
-   /* _mesa_function_pool[18214]: Binormal3dEXT (dynamic) */
+   /* _mesa_function_pool[18247]: Binormal3dEXT (dynamic) */
    "ddd\0"
    "glBinormal3dEXT\0"
    "\0"
-   /* _mesa_function_pool[18235]: SpriteParameteriSGIX (dynamic) */
+   /* _mesa_function_pool[18268]: SpriteParameteriSGIX (dynamic) */
    "ii\0"
    "glSpriteParameteriSGIX\0"
    "\0"
-   /* _mesa_function_pool[18262]: RequestResidentProgramsNV (will be remapped) */
+   /* _mesa_function_pool[18295]: RequestResidentProgramsNV (will be remapped) */
    "ip\0"
    "glRequestResidentProgramsNV\0"
    "\0"
-   /* _mesa_function_pool[18294]: TagSampleBufferSGIX (dynamic) */
+   /* _mesa_function_pool[18327]: TagSampleBufferSGIX (dynamic) */
    "\0"
    "glTagSampleBufferSGIX\0"
    "\0"
-   /* _mesa_function_pool[18318]: ReplacementCodeusSUN (dynamic) */
+   /* _mesa_function_pool[18351]: ReplacementCodeusSUN (dynamic) */
    "i\0"
    "glReplacementCodeusSUN\0"
    "\0"
-   /* _mesa_function_pool[18344]: FeedbackBuffer (offset 194) */
+   /* _mesa_function_pool[18377]: FeedbackBuffer (offset 194) */
    "iip\0"
    "glFeedbackBuffer\0"
    "\0"
-   /* _mesa_function_pool[18366]: RasterPos2iv (offset 67) */
+   /* _mesa_function_pool[18399]: RasterPos2iv (offset 67) */
    "p\0"
    "glRasterPos2iv\0"
    "\0"
-   /* _mesa_function_pool[18384]: TexImage1D (offset 182) */
+   /* _mesa_function_pool[18417]: TexImage1D (offset 182) */
    "iiiiiiip\0"
    "glTexImage1D\0"
    "\0"
-   /* _mesa_function_pool[18407]: ListParameterivSGIX (dynamic) */
+   /* _mesa_function_pool[18440]: ListParameterivSGIX (dynamic) */
    "iip\0"
    "glListParameterivSGIX\0"
    "\0"
-   /* _mesa_function_pool[18434]: MultiDrawElementsEXT (will be remapped) */
+   /* _mesa_function_pool[18467]: MultiDrawElementsEXT (will be remapped) */
    "ipipi\0"
    "glMultiDrawElements\0"
    "glMultiDrawElementsEXT\0"
    "\0"
-   /* _mesa_function_pool[18484]: Color3s (offset 17) */
+   /* _mesa_function_pool[18517]: Color3s (offset 17) */
    "iii\0"
    "glColor3s\0"
    "\0"
-   /* _mesa_function_pool[18499]: Uniform1ivARB (will be remapped) */
+   /* _mesa_function_pool[18532]: Uniform1ivARB (will be remapped) */
    "iip\0"
    "glUniform1iv\0"
    "glUniform1ivARB\0"
    "\0"
-   /* _mesa_function_pool[18533]: WindowPos2sMESA (will be remapped) */
+   /* _mesa_function_pool[18566]: WindowPos2sMESA (will be remapped) */
    "ii\0"
    "glWindowPos2s\0"
    "glWindowPos2sARB\0"
    "glWindowPos2sMESA\0"
    "\0"
-   /* _mesa_function_pool[18586]: WeightusvARB (dynamic) */
+   /* _mesa_function_pool[18619]: WeightusvARB (dynamic) */
    "ip\0"
    "glWeightusvARB\0"
    "\0"
-   /* _mesa_function_pool[18605]: TexCoordPointer (offset 320) */
+   /* _mesa_function_pool[18638]: TexCoordPointer (offset 320) */
    "iiip\0"
    "glTexCoordPointer\0"
    "\0"
-   /* _mesa_function_pool[18629]: FogCoordPointerEXT (will be remapped) */
+   /* _mesa_function_pool[18662]: FogCoordPointerEXT (will be remapped) */
    "iip\0"
    "glFogCoordPointer\0"
    "glFogCoordPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[18673]: IndexMaterialEXT (dynamic) */
+   /* _mesa_function_pool[18706]: IndexMaterialEXT (dynamic) */
    "ii\0"
    "glIndexMaterialEXT\0"
    "\0"
-   /* _mesa_function_pool[18696]: Color3i (offset 15) */
+   /* _mesa_function_pool[18729]: Color3i (offset 15) */
    "iii\0"
    "glColor3i\0"
    "\0"
-   /* _mesa_function_pool[18711]: FrontFace (offset 157) */
+   /* _mesa_function_pool[18744]: FrontFace (offset 157) */
    "i\0"
    "glFrontFace\0"
    "\0"
-   /* _mesa_function_pool[18726]: EvalCoord2d (offset 232) */
+   /* _mesa_function_pool[18759]: EvalCoord2d (offset 232) */
    "dd\0"
    "glEvalCoord2d\0"
    "\0"
-   /* _mesa_function_pool[18744]: SecondaryColor3ubvEXT (will be remapped) */
+   /* _mesa_function_pool[18777]: SecondaryColor3ubvEXT (will be remapped) */
    "p\0"
    "glSecondaryColor3ubv\0"
    "glSecondaryColor3ubvEXT\0"
    "\0"
-   /* _mesa_function_pool[18792]: EvalCoord2f (offset 234) */
+   /* _mesa_function_pool[18825]: EvalCoord2f (offset 234) */
    "ff\0"
    "glEvalCoord2f\0"
    "\0"
-   /* _mesa_function_pool[18810]: VertexAttrib4dvARB (will be remapped) */
+   /* _mesa_function_pool[18843]: VertexAttrib4dvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4dv\0"
    "glVertexAttrib4dvARB\0"
    "\0"
-   /* _mesa_function_pool[18853]: BindAttribLocationARB (will be remapped) */
+   /* _mesa_function_pool[18886]: BindAttribLocationARB (will be remapped) */
    "iip\0"
    "glBindAttribLocation\0"
    "glBindAttribLocationARB\0"
    "\0"
-   /* _mesa_function_pool[18903]: Color3b (offset 9) */
+   /* _mesa_function_pool[18936]: Color3b (offset 9) */
    "iii\0"
    "glColor3b\0"
    "\0"
-   /* _mesa_function_pool[18918]: MultiTexCoord2dARB (offset 384) */
+   /* _mesa_function_pool[18951]: MultiTexCoord2dARB (offset 384) */
    "idd\0"
    "glMultiTexCoord2d\0"
    "glMultiTexCoord2dARB\0"
    "\0"
-   /* _mesa_function_pool[18962]: ExecuteProgramNV (will be remapped) */
+   /* _mesa_function_pool[18995]: ExecuteProgramNV (will be remapped) */
    "iip\0"
    "glExecuteProgramNV\0"
    "\0"
-   /* _mesa_function_pool[18986]: Color3f (offset 13) */
+   /* _mesa_function_pool[19019]: Color3f (offset 13) */
    "fff\0"
    "glColor3f\0"
    "\0"
-   /* _mesa_function_pool[19001]: LightEnviSGIX (dynamic) */
+   /* _mesa_function_pool[19034]: LightEnviSGIX (dynamic) */
    "ii\0"
    "glLightEnviSGIX\0"
    "\0"
-   /* _mesa_function_pool[19021]: Color3d (offset 11) */
+   /* _mesa_function_pool[19054]: Color3d (offset 11) */
    "ddd\0"
    "glColor3d\0"
    "\0"
-   /* _mesa_function_pool[19036]: Normal3dv (offset 55) */
+   /* _mesa_function_pool[19069]: Normal3dv (offset 55) */
    "p\0"
    "glNormal3dv\0"
    "\0"
-   /* _mesa_function_pool[19051]: Lightf (offset 159) */
+   /* _mesa_function_pool[19084]: Lightf (offset 159) */
    "iif\0"
    "glLightf\0"
    "\0"
-   /* _mesa_function_pool[19065]: ReplacementCodeuiSUN (dynamic) */
+   /* _mesa_function_pool[19098]: ReplacementCodeuiSUN (dynamic) */
    "i\0"
    "glReplacementCodeuiSUN\0"
    "\0"
-   /* _mesa_function_pool[19091]: MatrixMode (offset 293) */
+   /* _mesa_function_pool[19124]: MatrixMode (offset 293) */
    "i\0"
    "glMatrixMode\0"
    "\0"
-   /* _mesa_function_pool[19107]: GetPixelMapusv (offset 273) */
+   /* _mesa_function_pool[19140]: GetPixelMapusv (offset 273) */
    "ip\0"
    "glGetPixelMapusv\0"
    "\0"
-   /* _mesa_function_pool[19128]: Lighti (offset 161) */
+   /* _mesa_function_pool[19161]: Lighti (offset 161) */
    "iii\0"
    "glLighti\0"
    "\0"
-   /* _mesa_function_pool[19142]: VertexAttribPointerNV (will be remapped) */
+   /* _mesa_function_pool[19175]: VertexAttribPointerNV (will be remapped) */
    "iiiip\0"
    "glVertexAttribPointerNV\0"
    "\0"
-   /* _mesa_function_pool[19173]: GetBooleanIndexedvEXT (will be remapped) */
+   /* _mesa_function_pool[19206]: GetBooleanIndexedvEXT (will be remapped) */
    "iip\0"
    "glGetBooleanIndexedvEXT\0"
    "\0"
-   /* _mesa_function_pool[19202]: GetFramebufferAttachmentParameterivEXT (will be remapped) */
+   /* _mesa_function_pool[19235]: GetFramebufferAttachmentParameterivEXT (will be remapped) */
    "iiip\0"
    "glGetFramebufferAttachmentParameteriv\0"
    "glGetFramebufferAttachmentParameterivEXT\0"
    "\0"
-   /* _mesa_function_pool[19287]: PixelTransformParameterfEXT (dynamic) */
+   /* _mesa_function_pool[19320]: PixelTransformParameterfEXT (dynamic) */
    "iif\0"
    "glPixelTransformParameterfEXT\0"
    "\0"
-   /* _mesa_function_pool[19322]: MultiTexCoord4dvARB (offset 401) */
+   /* _mesa_function_pool[19355]: MultiTexCoord4dvARB (offset 401) */
    "ip\0"
    "glMultiTexCoord4dv\0"
    "glMultiTexCoord4dvARB\0"
    "\0"
-   /* _mesa_function_pool[19367]: PixelTransformParameteriEXT (dynamic) */
+   /* _mesa_function_pool[19400]: PixelTransformParameteriEXT (dynamic) */
    "iii\0"
    "glPixelTransformParameteriEXT\0"
    "\0"
-   /* _mesa_function_pool[19402]: GetDoublev (offset 260) */
+   /* _mesa_function_pool[19435]: GetDoublev (offset 260) */
    "ip\0"
    "glGetDoublev\0"
    "\0"
-   /* _mesa_function_pool[19419]: MultMatrixd (offset 295) */
+   /* _mesa_function_pool[19452]: MultMatrixd (offset 295) */
    "p\0"
    "glMultMatrixd\0"
    "\0"
-   /* _mesa_function_pool[19436]: MultMatrixf (offset 294) */
+   /* _mesa_function_pool[19469]: MultMatrixf (offset 294) */
    "p\0"
    "glMultMatrixf\0"
    "\0"
-   /* _mesa_function_pool[19453]: TexCoord2fColor4ubVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[19486]: TexCoord2fColor4ubVertex3fSUN (dynamic) */
    "ffiiiifff\0"
    "glTexCoord2fColor4ubVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[19496]: Uniform1iARB (will be remapped) */
+   /* _mesa_function_pool[19529]: Uniform1iARB (will be remapped) */
    "ii\0"
    "glUniform1i\0"
    "glUniform1iARB\0"
    "\0"
-   /* _mesa_function_pool[19527]: VertexAttribPointerARB (will be remapped) */
+   /* _mesa_function_pool[19560]: VertexAttribPointerARB (will be remapped) */
    "iiiiip\0"
    "glVertexAttribPointer\0"
    "glVertexAttribPointerARB\0"
    "\0"
-   /* _mesa_function_pool[19582]: SharpenTexFuncSGIS (dynamic) */
+   /* _mesa_function_pool[19615]: SharpenTexFuncSGIS (dynamic) */
    "iip\0"
    "glSharpenTexFuncSGIS\0"
    "\0"
-   /* _mesa_function_pool[19608]: MultiTexCoord4fvARB (offset 403) */
+   /* _mesa_function_pool[19641]: MultiTexCoord4fvARB (offset 403) */
    "ip\0"
    "glMultiTexCoord4fv\0"
    "glMultiTexCoord4fvARB\0"
    "\0"
-   /* _mesa_function_pool[19653]: UniformMatrix2x3fv (will be remapped) */
+   /* _mesa_function_pool[19686]: UniformMatrix2x3fv (will be remapped) */
    "iiip\0"
    "glUniformMatrix2x3fv\0"
    "\0"
-   /* _mesa_function_pool[19680]: TrackMatrixNV (will be remapped) */
+   /* _mesa_function_pool[19713]: TrackMatrixNV (will be remapped) */
    "iiii\0"
    "glTrackMatrixNV\0"
    "\0"
-   /* _mesa_function_pool[19702]: CombinerParameteriNV (will be remapped) */
+   /* _mesa_function_pool[19735]: CombinerParameteriNV (will be remapped) */
    "ii\0"
    "glCombinerParameteriNV\0"
    "\0"
-   /* _mesa_function_pool[19729]: DeleteAsyncMarkersSGIX (dynamic) */
+   /* _mesa_function_pool[19762]: DeleteAsyncMarkersSGIX (dynamic) */
    "ii\0"
    "glDeleteAsyncMarkersSGIX\0"
    "\0"
-   /* _mesa_function_pool[19758]: IsAsyncMarkerSGIX (dynamic) */
+   /* _mesa_function_pool[19791]: IsAsyncMarkerSGIX (dynamic) */
    "i\0"
    "glIsAsyncMarkerSGIX\0"
    "\0"
-   /* _mesa_function_pool[19781]: FrameZoomSGIX (dynamic) */
+   /* _mesa_function_pool[19814]: FrameZoomSGIX (dynamic) */
    "i\0"
    "glFrameZoomSGIX\0"
    "\0"
-   /* _mesa_function_pool[19800]: Normal3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[19833]: Normal3fVertex3fvSUN (dynamic) */
    "pp\0"
    "glNormal3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[19827]: RasterPos4sv (offset 85) */
+   /* _mesa_function_pool[19860]: RasterPos4sv (offset 85) */
    "p\0"
    "glRasterPos4sv\0"
    "\0"
-   /* _mesa_function_pool[19845]: VertexAttrib4NsvARB (will be remapped) */
+   /* _mesa_function_pool[19878]: VertexAttrib4NsvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4Nsv\0"
    "glVertexAttrib4NsvARB\0"
    "\0"
-   /* _mesa_function_pool[19890]: VertexAttrib3fvARB (will be remapped) */
+   /* _mesa_function_pool[19923]: VertexAttrib3fvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib3fv\0"
    "glVertexAttrib3fvARB\0"
    "\0"
-   /* _mesa_function_pool[19933]: ClearColor (offset 206) */
+   /* _mesa_function_pool[19966]: ClearColor (offset 206) */
    "ffff\0"
    "glClearColor\0"
    "\0"
-   /* _mesa_function_pool[19952]: GetSynciv (will be remapped) */
+   /* _mesa_function_pool[19985]: GetSynciv (will be remapped) */
    "iiipp\0"
    "glGetSynciv\0"
    "\0"
-   /* _mesa_function_pool[19971]: DeleteFramebuffersEXT (will be remapped) */
+   /* _mesa_function_pool[20004]: DeleteFramebuffersEXT (will be remapped) */
    "ip\0"
    "glDeleteFramebuffers\0"
    "glDeleteFramebuffersEXT\0"
    "\0"
-   /* _mesa_function_pool[20020]: GlobalAlphaFactorsSUN (dynamic) */
+   /* _mesa_function_pool[20053]: GlobalAlphaFactorsSUN (dynamic) */
    "i\0"
    "glGlobalAlphaFactorsSUN\0"
    "\0"
-   /* _mesa_function_pool[20047]: IsEnabledIndexedEXT (will be remapped) */
+   /* _mesa_function_pool[20080]: IsEnabledIndexedEXT (will be remapped) */
    "ii\0"
    "glIsEnabledIndexedEXT\0"
    "\0"
-   /* _mesa_function_pool[20073]: TexEnviv (offset 187) */
+   /* _mesa_function_pool[20106]: TexEnviv (offset 187) */
    "iip\0"
    "glTexEnviv\0"
    "\0"
-   /* _mesa_function_pool[20089]: TexSubImage3D (offset 372) */
+   /* _mesa_function_pool[20122]: TexSubImage3D (offset 372) */
    "iiiiiiiiiip\0"
    "glTexSubImage3D\0"
    "glTexSubImage3DEXT\0"
    "\0"
-   /* _mesa_function_pool[20137]: Tangent3fEXT (dynamic) */
+   /* _mesa_function_pool[20170]: Tangent3fEXT (dynamic) */
    "fff\0"
    "glTangent3fEXT\0"
    "\0"
-   /* _mesa_function_pool[20157]: SecondaryColor3uivEXT (will be remapped) */
+   /* _mesa_function_pool[20190]: SecondaryColor3uivEXT (will be remapped) */
    "p\0"
    "glSecondaryColor3uiv\0"
    "glSecondaryColor3uivEXT\0"
    "\0"
-   /* _mesa_function_pool[20205]: MatrixIndexubvARB (dynamic) */
+   /* _mesa_function_pool[20238]: MatrixIndexubvARB (dynamic) */
    "ip\0"
    "glMatrixIndexubvARB\0"
    "\0"
-   /* _mesa_function_pool[20229]: Color4fNormal3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[20262]: Color4fNormal3fVertex3fSUN (dynamic) */
    "ffffffffff\0"
    "glColor4fNormal3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[20270]: PixelTexGenParameterfSGIS (will be remapped) */
+   /* _mesa_function_pool[20303]: PixelTexGenParameterfSGIS (will be remapped) */
    "if\0"
    "glPixelTexGenParameterfSGIS\0"
    "\0"
-   /* _mesa_function_pool[20302]: CreateShader (will be remapped) */
+   /* _mesa_function_pool[20335]: CreateShader (will be remapped) */
    "i\0"
    "glCreateShader\0"
    "\0"
-   /* _mesa_function_pool[20320]: GetColorTableParameterfv (offset 344) */
+   /* _mesa_function_pool[20353]: GetColorTableParameterfv (offset 344) */
    "iip\0"
    "glGetColorTableParameterfv\0"
    "glGetColorTableParameterfvSGI\0"
    "glGetColorTableParameterfvEXT\0"
    "\0"
-   /* _mesa_function_pool[20412]: FragmentLightModelfvSGIX (dynamic) */
+   /* _mesa_function_pool[20445]: FragmentLightModelfvSGIX (dynamic) */
    "ip\0"
    "glFragmentLightModelfvSGIX\0"
    "\0"
-   /* _mesa_function_pool[20443]: Bitmap (offset 8) */
+   /* _mesa_function_pool[20476]: Bitmap (offset 8) */
    "iiffffp\0"
    "glBitmap\0"
    "\0"
-   /* _mesa_function_pool[20461]: MultiTexCoord3fARB (offset 394) */
+   /* _mesa_function_pool[20494]: MultiTexCoord3fARB (offset 394) */
    "ifff\0"
    "glMultiTexCoord3f\0"
    "glMultiTexCoord3fARB\0"
    "\0"
-   /* _mesa_function_pool[20506]: GetTexLevelParameterfv (offset 284) */
+   /* _mesa_function_pool[20539]: GetTexLevelParameterfv (offset 284) */
    "iiip\0"
    "glGetTexLevelParameterfv\0"
    "\0"
-   /* _mesa_function_pool[20537]: GetPixelTexGenParameterfvSGIS (will be remapped) */
+   /* _mesa_function_pool[20570]: GetPixelTexGenParameterfvSGIS (will be remapped) */
    "ip\0"
    "glGetPixelTexGenParameterfvSGIS\0"
    "\0"
-   /* _mesa_function_pool[20573]: GenFramebuffersEXT (will be remapped) */
+   /* _mesa_function_pool[20606]: GenFramebuffersEXT (will be remapped) */
    "ip\0"
    "glGenFramebuffers\0"
    "glGenFramebuffersEXT\0"
    "\0"
-   /* _mesa_function_pool[20616]: GetProgramParameterdvNV (will be remapped) */
+   /* _mesa_function_pool[20649]: GetProgramParameterdvNV (will be remapped) */
    "iiip\0"
    "glGetProgramParameterdvNV\0"
    "\0"
-   /* _mesa_function_pool[20648]: Vertex2sv (offset 133) */
+   /* _mesa_function_pool[20681]: Vertex2sv (offset 133) */
    "p\0"
    "glVertex2sv\0"
    "\0"
-   /* _mesa_function_pool[20663]: GetIntegerv (offset 263) */
+   /* _mesa_function_pool[20696]: GetIntegerv (offset 263) */
    "ip\0"
    "glGetIntegerv\0"
    "\0"
-   /* _mesa_function_pool[20681]: IsVertexArrayAPPLE (will be remapped) */
+   /* _mesa_function_pool[20714]: IsVertexArrayAPPLE (will be remapped) */
    "i\0"
    "glIsVertexArray\0"
    "glIsVertexArrayAPPLE\0"
    "\0"
-   /* _mesa_function_pool[20721]: FragmentLightfvSGIX (dynamic) */
+   /* _mesa_function_pool[20754]: FragmentLightfvSGIX (dynamic) */
    "iip\0"
    "glFragmentLightfvSGIX\0"
    "\0"
-   /* _mesa_function_pool[20748]: DetachShader (will be remapped) */
+   /* _mesa_function_pool[20781]: DetachShader (will be remapped) */
    "ii\0"
    "glDetachShader\0"
    "\0"
-   /* _mesa_function_pool[20767]: VertexAttrib4NubARB (will be remapped) */
+   /* _mesa_function_pool[20800]: VertexAttrib4NubARB (will be remapped) */
    "iiiii\0"
    "glVertexAttrib4Nub\0"
    "glVertexAttrib4NubARB\0"
    "\0"
-   /* _mesa_function_pool[20815]: GetProgramEnvParameterfvARB (will be remapped) */
+   /* _mesa_function_pool[20848]: GetProgramEnvParameterfvARB (will be remapped) */
    "iip\0"
    "glGetProgramEnvParameterfvARB\0"
    "\0"
-   /* _mesa_function_pool[20850]: GetTrackMatrixivNV (will be remapped) */
+   /* _mesa_function_pool[20883]: GetTrackMatrixivNV (will be remapped) */
    "iiip\0"
    "glGetTrackMatrixivNV\0"
    "\0"
-   /* _mesa_function_pool[20877]: VertexAttrib3svNV (will be remapped) */
+   /* _mesa_function_pool[20910]: VertexAttrib3svNV (will be remapped) */
    "ip\0"
    "glVertexAttrib3svNV\0"
    "\0"
-   /* _mesa_function_pool[20901]: Uniform4fvARB (will be remapped) */
+   /* _mesa_function_pool[20934]: Uniform4fvARB (will be remapped) */
    "iip\0"
    "glUniform4fv\0"
    "glUniform4fvARB\0"
    "\0"
-   /* _mesa_function_pool[20935]: MultTransposeMatrixfARB (will be remapped) */
+   /* _mesa_function_pool[20968]: MultTransposeMatrixfARB (will be remapped) */
    "p\0"
    "glMultTransposeMatrixf\0"
    "glMultTransposeMatrixfARB\0"
    "\0"
-   /* _mesa_function_pool[20987]: GetTexEnviv (offset 277) */
+   /* _mesa_function_pool[21020]: GetTexEnviv (offset 277) */
    "iip\0"
    "glGetTexEnviv\0"
    "\0"
-   /* _mesa_function_pool[21006]: ColorFragmentOp1ATI (will be remapped) */
+   /* _mesa_function_pool[21039]: ColorFragmentOp1ATI (will be remapped) */
    "iiiiiii\0"
    "glColorFragmentOp1ATI\0"
    "\0"
-   /* _mesa_function_pool[21037]: GetUniformfvARB (will be remapped) */
+   /* _mesa_function_pool[21070]: GetUniformfvARB (will be remapped) */
    "iip\0"
    "glGetUniformfv\0"
    "glGetUniformfvARB\0"
    "\0"
-   /* _mesa_function_pool[21075]: PopClientAttrib (offset 334) */
+   /* _mesa_function_pool[21108]: EGLImageTargetRenderbufferStorageOES (will be remapped) */
+   "ip\0"
+   "glEGLImageTargetRenderbufferStorageOES\0"
+   "\0"
+   /* _mesa_function_pool[21151]: PopClientAttrib (offset 334) */
    "\0"
    "glPopClientAttrib\0"
    "\0"
-   /* _mesa_function_pool[21095]: ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[21171]: ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (dynamic) */
    "iffffffffffff\0"
    "glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[21166]: DetachObjectARB (will be remapped) */
+   /* _mesa_function_pool[21242]: DetachObjectARB (will be remapped) */
    "ii\0"
    "glDetachObjectARB\0"
    "\0"
-   /* _mesa_function_pool[21188]: VertexBlendARB (dynamic) */
+   /* _mesa_function_pool[21264]: VertexBlendARB (dynamic) */
    "i\0"
    "glVertexBlendARB\0"
    "\0"
-   /* _mesa_function_pool[21208]: WindowPos3iMESA (will be remapped) */
+   /* _mesa_function_pool[21284]: WindowPos3iMESA (will be remapped) */
    "iii\0"
    "glWindowPos3i\0"
    "glWindowPos3iARB\0"
    "glWindowPos3iMESA\0"
    "\0"
-   /* _mesa_function_pool[21262]: SeparableFilter2D (offset 360) */
+   /* _mesa_function_pool[21338]: SeparableFilter2D (offset 360) */
    "iiiiiipp\0"
    "glSeparableFilter2D\0"
    "glSeparableFilter2DEXT\0"
    "\0"
-   /* _mesa_function_pool[21315]: ReplacementCodeuiColor4ubVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[21391]: ReplacementCodeuiColor4ubVertex3fvSUN (dynamic) */
    "ppp\0"
    "glReplacementCodeuiColor4ubVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[21360]: Map1d (offset 220) */
+   /* _mesa_function_pool[21436]: Map1d (offset 220) */
    "iddiip\0"
    "glMap1d\0"
    "\0"
-   /* _mesa_function_pool[21376]: Map1f (offset 221) */
+   /* _mesa_function_pool[21452]: Map1f (offset 221) */
    "iffiip\0"
    "glMap1f\0"
    "\0"
-   /* _mesa_function_pool[21392]: CompressedTexImage2DARB (will be remapped) */
+   /* _mesa_function_pool[21468]: CompressedTexImage2DARB (will be remapped) */
    "iiiiiiip\0"
    "glCompressedTexImage2D\0"
    "glCompressedTexImage2DARB\0"
    "\0"
-   /* _mesa_function_pool[21451]: ArrayElement (offset 306) */
+   /* _mesa_function_pool[21527]: ArrayElement (offset 306) */
    "i\0"
    "glArrayElement\0"
    "glArrayElementEXT\0"
    "\0"
-   /* _mesa_function_pool[21487]: TexImage2D (offset 183) */
+   /* _mesa_function_pool[21563]: TexImage2D (offset 183) */
    "iiiiiiiip\0"
    "glTexImage2D\0"
    "\0"
-   /* _mesa_function_pool[21511]: DepthBoundsEXT (will be remapped) */
+   /* _mesa_function_pool[21587]: DepthBoundsEXT (will be remapped) */
    "dd\0"
    "glDepthBoundsEXT\0"
    "\0"
-   /* _mesa_function_pool[21532]: ProgramParameters4fvNV (will be remapped) */
+   /* _mesa_function_pool[21608]: ProgramParameters4fvNV (will be remapped) */
    "iiip\0"
    "glProgramParameters4fvNV\0"
    "\0"
-   /* _mesa_function_pool[21563]: DeformationMap3fSGIX (dynamic) */
+   /* _mesa_function_pool[21639]: DeformationMap3fSGIX (dynamic) */
    "iffiiffiiffiip\0"
    "glDeformationMap3fSGIX\0"
    "\0"
-   /* _mesa_function_pool[21602]: GetProgramivNV (will be remapped) */
+   /* _mesa_function_pool[21678]: GetProgramivNV (will be remapped) */
    "iip\0"
    "glGetProgramivNV\0"
    "\0"
-   /* _mesa_function_pool[21624]: GetMinmaxParameteriv (offset 366) */
+   /* _mesa_function_pool[21700]: GetMinmaxParameteriv (offset 366) */
    "iip\0"
    "glGetMinmaxParameteriv\0"
    "glGetMinmaxParameterivEXT\0"
    "\0"
-   /* _mesa_function_pool[21678]: PixelTransferf (offset 247) */
+   /* _mesa_function_pool[21754]: PixelTransferf (offset 247) */
    "if\0"
    "glPixelTransferf\0"
    "\0"
-   /* _mesa_function_pool[21699]: CopyTexImage1D (offset 323) */
+   /* _mesa_function_pool[21775]: CopyTexImage1D (offset 323) */
    "iiiiiii\0"
    "glCopyTexImage1D\0"
    "glCopyTexImage1DEXT\0"
    "\0"
-   /* _mesa_function_pool[21745]: PushMatrix (offset 298) */
+   /* _mesa_function_pool[21821]: PushMatrix (offset 298) */
    "\0"
    "glPushMatrix\0"
    "\0"
-   /* _mesa_function_pool[21760]: Fogiv (offset 156) */
+   /* _mesa_function_pool[21836]: Fogiv (offset 156) */
    "ip\0"
    "glFogiv\0"
    "\0"
-   /* _mesa_function_pool[21772]: TexCoord1dv (offset 95) */
+   /* _mesa_function_pool[21848]: TexCoord1dv (offset 95) */
    "p\0"
    "glTexCoord1dv\0"
    "\0"
-   /* _mesa_function_pool[21789]: AlphaFragmentOp3ATI (will be remapped) */
+   /* _mesa_function_pool[21865]: AlphaFragmentOp3ATI (will be remapped) */
    "iiiiiiiiiiii\0"
    "glAlphaFragmentOp3ATI\0"
    "\0"
-   /* _mesa_function_pool[21825]: PixelTransferi (offset 248) */
+   /* _mesa_function_pool[21901]: PixelTransferi (offset 248) */
    "ii\0"
    "glPixelTransferi\0"
    "\0"
-   /* _mesa_function_pool[21846]: GetVertexAttribdvNV (will be remapped) */
+   /* _mesa_function_pool[21922]: GetVertexAttribdvNV (will be remapped) */
    "iip\0"
    "glGetVertexAttribdvNV\0"
    "\0"
-   /* _mesa_function_pool[21873]: VertexAttrib3fvNV (will be remapped) */
+   /* _mesa_function_pool[21949]: VertexAttrib3fvNV (will be remapped) */
    "ip\0"
    "glVertexAttrib3fvNV\0"
    "\0"
-   /* _mesa_function_pool[21897]: Rotatef (offset 300) */
+   /* _mesa_function_pool[21973]: Rotatef (offset 300) */
    "ffff\0"
    "glRotatef\0"
    "\0"
-   /* _mesa_function_pool[21913]: GetFinalCombinerInputParameterivNV (will be remapped) */
+   /* _mesa_function_pool[21989]: GetFinalCombinerInputParameterivNV (will be remapped) */
    "iip\0"
    "glGetFinalCombinerInputParameterivNV\0"
    "\0"
-   /* _mesa_function_pool[21955]: Vertex3i (offset 138) */
+   /* _mesa_function_pool[22031]: Vertex3i (offset 138) */
    "iii\0"
    "glVertex3i\0"
    "\0"
-   /* _mesa_function_pool[21971]: Vertex3f (offset 136) */
+   /* _mesa_function_pool[22047]: Vertex3f (offset 136) */
    "fff\0"
    "glVertex3f\0"
    "\0"
-   /* _mesa_function_pool[21987]: Clear (offset 203) */
+   /* _mesa_function_pool[22063]: Clear (offset 203) */
    "i\0"
    "glClear\0"
    "\0"
-   /* _mesa_function_pool[21998]: Vertex3d (offset 134) */
+   /* _mesa_function_pool[22074]: Vertex3d (offset 134) */
    "ddd\0"
    "glVertex3d\0"
    "\0"
-   /* _mesa_function_pool[22014]: GetMapParameterivNV (dynamic) */
+   /* _mesa_function_pool[22090]: GetMapParameterivNV (dynamic) */
    "iip\0"
    "glGetMapParameterivNV\0"
    "\0"
-   /* _mesa_function_pool[22041]: Uniform4iARB (will be remapped) */
+   /* _mesa_function_pool[22117]: Uniform4iARB (will be remapped) */
    "iiiii\0"
    "glUniform4i\0"
    "glUniform4iARB\0"
    "\0"
-   /* _mesa_function_pool[22075]: ReadBuffer (offset 254) */
+   /* _mesa_function_pool[22151]: ReadBuffer (offset 254) */
    "i\0"
    "glReadBuffer\0"
    "\0"
-   /* _mesa_function_pool[22091]: ConvolutionParameteri (offset 352) */
+   /* _mesa_function_pool[22167]: ConvolutionParameteri (offset 352) */
    "iii\0"
    "glConvolutionParameteri\0"
    "glConvolutionParameteriEXT\0"
    "\0"
-   /* _mesa_function_pool[22147]: Ortho (offset 296) */
+   /* _mesa_function_pool[22223]: Ortho (offset 296) */
    "dddddd\0"
    "glOrtho\0"
    "\0"
-   /* _mesa_function_pool[22163]: Binormal3sEXT (dynamic) */
+   /* _mesa_function_pool[22239]: Binormal3sEXT (dynamic) */
    "iii\0"
    "glBinormal3sEXT\0"
    "\0"
-   /* _mesa_function_pool[22184]: ListBase (offset 6) */
+   /* _mesa_function_pool[22260]: ListBase (offset 6) */
    "i\0"
    "glListBase\0"
    "\0"
-   /* _mesa_function_pool[22198]: Vertex3s (offset 140) */
+   /* _mesa_function_pool[22274]: Vertex3s (offset 140) */
    "iii\0"
    "glVertex3s\0"
    "\0"
-   /* _mesa_function_pool[22214]: ConvolutionParameterf (offset 350) */
+   /* _mesa_function_pool[22290]: ConvolutionParameterf (offset 350) */
    "iif\0"
    "glConvolutionParameterf\0"
    "glConvolutionParameterfEXT\0"
    "\0"
-   /* _mesa_function_pool[22270]: GetColorTableParameteriv (offset 345) */
+   /* _mesa_function_pool[22346]: GetColorTableParameteriv (offset 345) */
    "iip\0"
    "glGetColorTableParameteriv\0"
    "glGetColorTableParameterivSGI\0"
    "glGetColorTableParameterivEXT\0"
    "\0"
-   /* _mesa_function_pool[22362]: ProgramEnvParameter4dvARB (will be remapped) */
+   /* _mesa_function_pool[22438]: ProgramEnvParameter4dvARB (will be remapped) */
    "iip\0"
    "glProgramEnvParameter4dvARB\0"
    "glProgramParameter4dvNV\0"
    "\0"
-   /* _mesa_function_pool[22419]: ShadeModel (offset 177) */
+   /* _mesa_function_pool[22495]: ShadeModel (offset 177) */
    "i\0"
    "glShadeModel\0"
    "\0"
-   /* _mesa_function_pool[22435]: VertexAttribs2fvNV (will be remapped) */
+   /* _mesa_function_pool[22511]: VertexAttribs2fvNV (will be remapped) */
    "iip\0"
    "glVertexAttribs2fvNV\0"
    "\0"
-   /* _mesa_function_pool[22461]: Rectiv (offset 91) */
+   /* _mesa_function_pool[22537]: Rectiv (offset 91) */
    "pp\0"
    "glRectiv\0"
    "\0"
-   /* _mesa_function_pool[22474]: UseProgramObjectARB (will be remapped) */
+   /* _mesa_function_pool[22550]: UseProgramObjectARB (will be remapped) */
    "i\0"
    "glUseProgram\0"
    "glUseProgramObjectARB\0"
    "\0"
-   /* _mesa_function_pool[22512]: GetMapParameterfvNV (dynamic) */
+   /* _mesa_function_pool[22588]: GetMapParameterfvNV (dynamic) */
    "iip\0"
    "glGetMapParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[22539]: EndConditionalRenderNV (will be remapped) */
+   /* _mesa_function_pool[22615]: EndConditionalRenderNV (will be remapped) */
    "\0"
    "glEndConditionalRenderNV\0"
    "\0"
-   /* _mesa_function_pool[22566]: PassTexCoordATI (will be remapped) */
+   /* _mesa_function_pool[22642]: PassTexCoordATI (will be remapped) */
    "iii\0"
    "glPassTexCoordATI\0"
    "\0"
-   /* _mesa_function_pool[22589]: DeleteProgram (will be remapped) */
+   /* _mesa_function_pool[22665]: DeleteProgram (will be remapped) */
    "i\0"
    "glDeleteProgram\0"
    "\0"
-   /* _mesa_function_pool[22608]: Tangent3ivEXT (dynamic) */
+   /* _mesa_function_pool[22684]: Tangent3ivEXT (dynamic) */
    "p\0"
    "glTangent3ivEXT\0"
    "\0"
-   /* _mesa_function_pool[22627]: Tangent3dEXT (dynamic) */
+   /* _mesa_function_pool[22703]: Tangent3dEXT (dynamic) */
    "ddd\0"
    "glTangent3dEXT\0"
    "\0"
-   /* _mesa_function_pool[22647]: SecondaryColor3dvEXT (will be remapped) */
+   /* _mesa_function_pool[22723]: SecondaryColor3dvEXT (will be remapped) */
    "p\0"
    "glSecondaryColor3dv\0"
    "glSecondaryColor3dvEXT\0"
    "\0"
-   /* _mesa_function_pool[22693]: Vertex2fv (offset 129) */
+   /* _mesa_function_pool[22769]: Vertex2fv (offset 129) */
    "p\0"
    "glVertex2fv\0"
    "\0"
-   /* _mesa_function_pool[22708]: MultiDrawArraysEXT (will be remapped) */
+   /* _mesa_function_pool[22784]: MultiDrawArraysEXT (will be remapped) */
    "ippi\0"
    "glMultiDrawArrays\0"
    "glMultiDrawArraysEXT\0"
    "\0"
-   /* _mesa_function_pool[22753]: BindRenderbufferEXT (will be remapped) */
+   /* _mesa_function_pool[22829]: BindRenderbufferEXT (will be remapped) */
    "ii\0"
    "glBindRenderbuffer\0"
    "glBindRenderbufferEXT\0"
    "\0"
-   /* _mesa_function_pool[22798]: MultiTexCoord4dARB (offset 400) */
+   /* _mesa_function_pool[22874]: MultiTexCoord4dARB (offset 400) */
    "idddd\0"
    "glMultiTexCoord4d\0"
    "glMultiTexCoord4dARB\0"
    "\0"
-   /* _mesa_function_pool[22844]: Vertex3sv (offset 141) */
+   /* _mesa_function_pool[22920]: Vertex3sv (offset 141) */
    "p\0"
    "glVertex3sv\0"
    "\0"
-   /* _mesa_function_pool[22859]: SecondaryColor3usEXT (will be remapped) */
+   /* _mesa_function_pool[22935]: SecondaryColor3usEXT (will be remapped) */
    "iii\0"
    "glSecondaryColor3us\0"
    "glSecondaryColor3usEXT\0"
    "\0"
-   /* _mesa_function_pool[22907]: ProgramLocalParameter4fvARB (will be remapped) */
+   /* _mesa_function_pool[22983]: ProgramLocalParameter4fvARB (will be remapped) */
    "iip\0"
    "glProgramLocalParameter4fvARB\0"
    "\0"
-   /* _mesa_function_pool[22942]: DeleteProgramsNV (will be remapped) */
+   /* _mesa_function_pool[23018]: DeleteProgramsNV (will be remapped) */
    "ip\0"
    "glDeleteProgramsARB\0"
    "glDeleteProgramsNV\0"
    "\0"
-   /* _mesa_function_pool[22985]: EvalMesh1 (offset 236) */
+   /* _mesa_function_pool[23061]: EvalMesh1 (offset 236) */
    "iii\0"
    "glEvalMesh1\0"
    "\0"
-   /* _mesa_function_pool[23002]: MultiTexCoord1sARB (offset 382) */
+   /* _mesa_function_pool[23078]: MultiTexCoord1sARB (offset 382) */
    "ii\0"
    "glMultiTexCoord1s\0"
    "glMultiTexCoord1sARB\0"
    "\0"
-   /* _mesa_function_pool[23045]: ReplacementCodeuiColor3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[23121]: ReplacementCodeuiColor3fVertex3fSUN (dynamic) */
    "iffffff\0"
    "glReplacementCodeuiColor3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[23092]: GetVertexAttribPointervNV (will be remapped) */
+   /* _mesa_function_pool[23168]: GetVertexAttribPointervNV (will be remapped) */
    "iip\0"
    "glGetVertexAttribPointerv\0"
    "glGetVertexAttribPointervARB\0"
    "glGetVertexAttribPointervNV\0"
    "\0"
-   /* _mesa_function_pool[23180]: DisableIndexedEXT (will be remapped) */
+   /* _mesa_function_pool[23256]: DisableIndexedEXT (will be remapped) */
    "ii\0"
    "glDisableIndexedEXT\0"
    "\0"
-   /* _mesa_function_pool[23204]: MultiTexCoord1dvARB (offset 377) */
+   /* _mesa_function_pool[23280]: MultiTexCoord1dvARB (offset 377) */
    "ip\0"
    "glMultiTexCoord1dv\0"
    "glMultiTexCoord1dvARB\0"
    "\0"
-   /* _mesa_function_pool[23249]: Uniform2iARB (will be remapped) */
+   /* _mesa_function_pool[23325]: Uniform2iARB (will be remapped) */
    "iii\0"
    "glUniform2i\0"
    "glUniform2iARB\0"
    "\0"
-   /* _mesa_function_pool[23281]: Vertex2iv (offset 131) */
+   /* _mesa_function_pool[23357]: Vertex2iv (offset 131) */
    "p\0"
    "glVertex2iv\0"
    "\0"
-   /* _mesa_function_pool[23296]: GetProgramStringNV (will be remapped) */
+   /* _mesa_function_pool[23372]: GetProgramStringNV (will be remapped) */
    "iip\0"
    "glGetProgramStringNV\0"
    "\0"
-   /* _mesa_function_pool[23322]: ColorPointerEXT (will be remapped) */
+   /* _mesa_function_pool[23398]: ColorPointerEXT (will be remapped) */
    "iiiip\0"
    "glColorPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[23347]: LineWidth (offset 168) */
+   /* _mesa_function_pool[23423]: LineWidth (offset 168) */
    "f\0"
    "glLineWidth\0"
    "\0"
-   /* _mesa_function_pool[23362]: MapBufferARB (will be remapped) */
+   /* _mesa_function_pool[23438]: MapBufferARB (will be remapped) */
    "ii\0"
    "glMapBuffer\0"
    "glMapBufferARB\0"
    "\0"
-   /* _mesa_function_pool[23393]: MultiDrawElementsBaseVertex (will be remapped) */
+   /* _mesa_function_pool[23469]: MultiDrawElementsBaseVertex (will be remapped) */
    "ipipip\0"
    "glMultiDrawElementsBaseVertex\0"
    "\0"
-   /* _mesa_function_pool[23431]: Binormal3svEXT (dynamic) */
+   /* _mesa_function_pool[23507]: Binormal3svEXT (dynamic) */
    "p\0"
    "glBinormal3svEXT\0"
    "\0"
-   /* _mesa_function_pool[23451]: ApplyTextureEXT (dynamic) */
+   /* _mesa_function_pool[23527]: ApplyTextureEXT (dynamic) */
    "i\0"
    "glApplyTextureEXT\0"
    "\0"
-   /* _mesa_function_pool[23472]: TexGendv (offset 189) */
+   /* _mesa_function_pool[23548]: TexGendv (offset 189) */
    "iip\0"
    "glTexGendv\0"
    "\0"
-   /* _mesa_function_pool[23488]: EnableIndexedEXT (will be remapped) */
+   /* _mesa_function_pool[23564]: EnableIndexedEXT (will be remapped) */
    "ii\0"
    "glEnableIndexedEXT\0"
    "\0"
-   /* _mesa_function_pool[23511]: TextureMaterialEXT (dynamic) */
+   /* _mesa_function_pool[23587]: TextureMaterialEXT (dynamic) */
    "ii\0"
    "glTextureMaterialEXT\0"
    "\0"
-   /* _mesa_function_pool[23536]: TextureLightEXT (dynamic) */
+   /* _mesa_function_pool[23612]: TextureLightEXT (dynamic) */
    "i\0"
    "glTextureLightEXT\0"
    "\0"
-   /* _mesa_function_pool[23557]: ResetMinmax (offset 370) */
+   /* _mesa_function_pool[23633]: ResetMinmax (offset 370) */
    "i\0"
    "glResetMinmax\0"
    "glResetMinmaxEXT\0"
    "\0"
-   /* _mesa_function_pool[23591]: SpriteParameterfSGIX (dynamic) */
+   /* _mesa_function_pool[23667]: SpriteParameterfSGIX (dynamic) */
    "if\0"
    "glSpriteParameterfSGIX\0"
    "\0"
-   /* _mesa_function_pool[23618]: EnableClientState (offset 313) */
+   /* _mesa_function_pool[23694]: EnableClientState (offset 313) */
    "i\0"
    "glEnableClientState\0"
    "\0"
-   /* _mesa_function_pool[23641]: VertexAttrib4sNV (will be remapped) */
+   /* _mesa_function_pool[23717]: VertexAttrib4sNV (will be remapped) */
    "iiiii\0"
    "glVertexAttrib4sNV\0"
    "\0"
-   /* _mesa_function_pool[23667]: GetConvolutionParameterfv (offset 357) */
+   /* _mesa_function_pool[23743]: GetConvolutionParameterfv (offset 357) */
    "iip\0"
    "glGetConvolutionParameterfv\0"
    "glGetConvolutionParameterfvEXT\0"
    "\0"
-   /* _mesa_function_pool[23731]: VertexAttribs4dvNV (will be remapped) */
+   /* _mesa_function_pool[23807]: VertexAttribs4dvNV (will be remapped) */
    "iip\0"
    "glVertexAttribs4dvNV\0"
    "\0"
-   /* _mesa_function_pool[23757]: MultiModeDrawArraysIBM (will be remapped) */
+   /* _mesa_function_pool[23833]: MultiModeDrawArraysIBM (will be remapped) */
    "pppii\0"
    "glMultiModeDrawArraysIBM\0"
    "\0"
-   /* _mesa_function_pool[23789]: VertexAttrib4dARB (will be remapped) */
+   /* _mesa_function_pool[23865]: VertexAttrib4dARB (will be remapped) */
    "idddd\0"
    "glVertexAttrib4d\0"
    "glVertexAttrib4dARB\0"
    "\0"
-   /* _mesa_function_pool[23833]: GetTexBumpParameterfvATI (will be remapped) */
+   /* _mesa_function_pool[23909]: GetTexBumpParameterfvATI (will be remapped) */
    "ip\0"
    "glGetTexBumpParameterfvATI\0"
    "\0"
-   /* _mesa_function_pool[23864]: ProgramNamedParameter4dNV (will be remapped) */
+   /* _mesa_function_pool[23940]: ProgramNamedParameter4dNV (will be remapped) */
    "iipdddd\0"
    "glProgramNamedParameter4dNV\0"
    "\0"
-   /* _mesa_function_pool[23901]: GetMaterialfv (offset 269) */
+   /* _mesa_function_pool[23977]: GetMaterialfv (offset 269) */
    "iip\0"
    "glGetMaterialfv\0"
    "\0"
-   /* _mesa_function_pool[23922]: VertexWeightfEXT (dynamic) */
+   /* _mesa_function_pool[23998]: VertexWeightfEXT (dynamic) */
    "f\0"
    "glVertexWeightfEXT\0"
    "\0"
-   /* _mesa_function_pool[23944]: Binormal3fEXT (dynamic) */
+   /* _mesa_function_pool[24020]: Binormal3fEXT (dynamic) */
    "fff\0"
    "glBinormal3fEXT\0"
    "\0"
-   /* _mesa_function_pool[23965]: CallList (offset 2) */
+   /* _mesa_function_pool[24041]: CallList (offset 2) */
    "i\0"
    "glCallList\0"
    "\0"
-   /* _mesa_function_pool[23979]: Materialfv (offset 170) */
+   /* _mesa_function_pool[24055]: Materialfv (offset 170) */
    "iip\0"
    "glMaterialfv\0"
    "\0"
-   /* _mesa_function_pool[23997]: TexCoord3fv (offset 113) */
+   /* _mesa_function_pool[24073]: TexCoord3fv (offset 113) */
    "p\0"
    "glTexCoord3fv\0"
    "\0"
-   /* _mesa_function_pool[24014]: FogCoordfvEXT (will be remapped) */
+   /* _mesa_function_pool[24090]: FogCoordfvEXT (will be remapped) */
    "p\0"
    "glFogCoordfv\0"
    "glFogCoordfvEXT\0"
    "\0"
-   /* _mesa_function_pool[24046]: MultiTexCoord1ivARB (offset 381) */
+   /* _mesa_function_pool[24122]: MultiTexCoord1ivARB (offset 381) */
    "ip\0"
    "glMultiTexCoord1iv\0"
    "glMultiTexCoord1ivARB\0"
    "\0"
-   /* _mesa_function_pool[24091]: SecondaryColor3ubEXT (will be remapped) */
+   /* _mesa_function_pool[24167]: SecondaryColor3ubEXT (will be remapped) */
    "iii\0"
    "glSecondaryColor3ub\0"
    "glSecondaryColor3ubEXT\0"
    "\0"
-   /* _mesa_function_pool[24139]: MultiTexCoord2ivARB (offset 389) */
+   /* _mesa_function_pool[24215]: MultiTexCoord2ivARB (offset 389) */
    "ip\0"
    "glMultiTexCoord2iv\0"
    "glMultiTexCoord2ivARB\0"
    "\0"
-   /* _mesa_function_pool[24184]: FogFuncSGIS (dynamic) */
+   /* _mesa_function_pool[24260]: FogFuncSGIS (dynamic) */
    "ip\0"
    "glFogFuncSGIS\0"
    "\0"
-   /* _mesa_function_pool[24202]: CopyTexSubImage2D (offset 326) */
+   /* _mesa_function_pool[24278]: CopyTexSubImage2D (offset 326) */
    "iiiiiiii\0"
    "glCopyTexSubImage2D\0"
    "glCopyTexSubImage2DEXT\0"
    "\0"
-   /* _mesa_function_pool[24255]: GetObjectParameterivARB (will be remapped) */
+   /* _mesa_function_pool[24331]: GetObjectParameterivARB (will be remapped) */
    "iip\0"
    "glGetObjectParameterivARB\0"
    "\0"
-   /* _mesa_function_pool[24286]: Color3iv (offset 16) */
+   /* _mesa_function_pool[24362]: Color3iv (offset 16) */
    "p\0"
    "glColor3iv\0"
    "\0"
-   /* _mesa_function_pool[24300]: TexCoord4fVertex4fSUN (dynamic) */
+   /* _mesa_function_pool[24376]: TexCoord4fVertex4fSUN (dynamic) */
    "ffffffff\0"
    "glTexCoord4fVertex4fSUN\0"
    "\0"
-   /* _mesa_function_pool[24334]: DrawElements (offset 311) */
+   /* _mesa_function_pool[24410]: DrawElements (offset 311) */
    "iiip\0"
    "glDrawElements\0"
    "\0"
-   /* _mesa_function_pool[24355]: BindVertexArrayAPPLE (will be remapped) */
+   /* _mesa_function_pool[24431]: BindVertexArrayAPPLE (will be remapped) */
    "i\0"
    "glBindVertexArrayAPPLE\0"
    "\0"
-   /* _mesa_function_pool[24381]: GetProgramLocalParameterdvARB (will be remapped) */
+   /* _mesa_function_pool[24457]: GetProgramLocalParameterdvARB (will be remapped) */
    "iip\0"
    "glGetProgramLocalParameterdvARB\0"
    "\0"
-   /* _mesa_function_pool[24418]: GetHistogramParameteriv (offset 363) */
+   /* _mesa_function_pool[24494]: GetHistogramParameteriv (offset 363) */
    "iip\0"
    "glGetHistogramParameteriv\0"
    "glGetHistogramParameterivEXT\0"
    "\0"
-   /* _mesa_function_pool[24478]: MultiTexCoord1iARB (offset 380) */
+   /* _mesa_function_pool[24554]: MultiTexCoord1iARB (offset 380) */
    "ii\0"
    "glMultiTexCoord1i\0"
    "glMultiTexCoord1iARB\0"
    "\0"
-   /* _mesa_function_pool[24521]: GetConvolutionFilter (offset 356) */
+   /* _mesa_function_pool[24597]: GetConvolutionFilter (offset 356) */
    "iiip\0"
    "glGetConvolutionFilter\0"
    "glGetConvolutionFilterEXT\0"
    "\0"
-   /* _mesa_function_pool[24576]: GetProgramivARB (will be remapped) */
+   /* _mesa_function_pool[24652]: GetProgramivARB (will be remapped) */
    "iip\0"
    "glGetProgramivARB\0"
    "\0"
-   /* _mesa_function_pool[24599]: BlendFuncSeparateEXT (will be remapped) */
+   /* _mesa_function_pool[24675]: BlendFuncSeparateEXT (will be remapped) */
    "iiii\0"
    "glBlendFuncSeparate\0"
    "glBlendFuncSeparateEXT\0"
    "glBlendFuncSeparateINGR\0"
    "\0"
-   /* _mesa_function_pool[24672]: MapBufferRange (will be remapped) */
+   /* _mesa_function_pool[24748]: MapBufferRange (will be remapped) */
    "iiii\0"
    "glMapBufferRange\0"
    "\0"
-   /* _mesa_function_pool[24695]: ProgramParameters4dvNV (will be remapped) */
+   /* _mesa_function_pool[24771]: ProgramParameters4dvNV (will be remapped) */
    "iiip\0"
    "glProgramParameters4dvNV\0"
    "\0"
-   /* _mesa_function_pool[24726]: TexCoord2fColor3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[24802]: TexCoord2fColor3fVertex3fvSUN (dynamic) */
    "ppp\0"
    "glTexCoord2fColor3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[24763]: EvalPoint2 (offset 239) */
+   /* _mesa_function_pool[24839]: EvalPoint2 (offset 239) */
    "ii\0"
    "glEvalPoint2\0"
    "\0"
-   /* _mesa_function_pool[24780]: EvalPoint1 (offset 237) */
+   /* _mesa_function_pool[24856]: EvalPoint1 (offset 237) */
    "i\0"
    "glEvalPoint1\0"
    "\0"
-   /* _mesa_function_pool[24796]: Binormal3dvEXT (dynamic) */
+   /* _mesa_function_pool[24872]: Binormal3dvEXT (dynamic) */
    "p\0"
    "glBinormal3dvEXT\0"
    "\0"
-   /* _mesa_function_pool[24816]: PopMatrix (offset 297) */
+   /* _mesa_function_pool[24892]: PopMatrix (offset 297) */
    "\0"
    "glPopMatrix\0"
    "\0"
-   /* _mesa_function_pool[24830]: FinishFenceNV (will be remapped) */
+   /* _mesa_function_pool[24906]: FinishFenceNV (will be remapped) */
    "i\0"
    "glFinishFenceNV\0"
    "\0"
-   /* _mesa_function_pool[24849]: GetFogFuncSGIS (dynamic) */
+   /* _mesa_function_pool[24925]: GetFogFuncSGIS (dynamic) */
    "p\0"
    "glGetFogFuncSGIS\0"
    "\0"
-   /* _mesa_function_pool[24869]: GetUniformLocationARB (will be remapped) */
+   /* _mesa_function_pool[24945]: GetUniformLocationARB (will be remapped) */
    "ip\0"
    "glGetUniformLocation\0"
    "glGetUniformLocationARB\0"
    "\0"
-   /* _mesa_function_pool[24918]: SecondaryColor3fEXT (will be remapped) */
+   /* _mesa_function_pool[24994]: SecondaryColor3fEXT (will be remapped) */
    "fff\0"
    "glSecondaryColor3f\0"
    "glSecondaryColor3fEXT\0"
    "\0"
-   /* _mesa_function_pool[24964]: GetTexGeniv (offset 280) */
+   /* _mesa_function_pool[25040]: GetTexGeniv (offset 280) */
    "iip\0"
    "glGetTexGeniv\0"
    "\0"
-   /* _mesa_function_pool[24983]: CombinerInputNV (will be remapped) */
+   /* _mesa_function_pool[25059]: CombinerInputNV (will be remapped) */
    "iiiiii\0"
    "glCombinerInputNV\0"
    "\0"
-   /* _mesa_function_pool[25009]: VertexAttrib3sARB (will be remapped) */
+   /* _mesa_function_pool[25085]: VertexAttrib3sARB (will be remapped) */
    "iiii\0"
    "glVertexAttrib3s\0"
    "glVertexAttrib3sARB\0"
    "\0"
-   /* _mesa_function_pool[25052]: ReplacementCodeuiNormal3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[25128]: ReplacementCodeuiNormal3fVertex3fvSUN (dynamic) */
    "ppp\0"
    "glReplacementCodeuiNormal3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[25097]: Map2d (offset 222) */
+   /* _mesa_function_pool[25173]: Map2d (offset 222) */
    "iddiiddiip\0"
    "glMap2d\0"
    "\0"
-   /* _mesa_function_pool[25117]: Map2f (offset 223) */
+   /* _mesa_function_pool[25193]: Map2f (offset 223) */
    "iffiiffiip\0"
    "glMap2f\0"
    "\0"
-   /* _mesa_function_pool[25137]: ProgramStringARB (will be remapped) */
+   /* _mesa_function_pool[25213]: ProgramStringARB (will be remapped) */
    "iiip\0"
    "glProgramStringARB\0"
    "\0"
-   /* _mesa_function_pool[25162]: Vertex4s (offset 148) */
+   /* _mesa_function_pool[25238]: Vertex4s (offset 148) */
    "iiii\0"
    "glVertex4s\0"
    "\0"
-   /* _mesa_function_pool[25179]: TexCoord4fVertex4fvSUN (dynamic) */
+   /* _mesa_function_pool[25255]: TexCoord4fVertex4fvSUN (dynamic) */
    "pp\0"
    "glTexCoord4fVertex4fvSUN\0"
    "\0"
-   /* _mesa_function_pool[25208]: VertexAttrib3sNV (will be remapped) */
+   /* _mesa_function_pool[25284]: VertexAttrib3sNV (will be remapped) */
    "iiii\0"
    "glVertexAttrib3sNV\0"
    "\0"
-   /* _mesa_function_pool[25233]: VertexAttrib1fNV (will be remapped) */
+   /* _mesa_function_pool[25309]: VertexAttrib1fNV (will be remapped) */
    "if\0"
    "glVertexAttrib1fNV\0"
    "\0"
-   /* _mesa_function_pool[25256]: Vertex4f (offset 144) */
+   /* _mesa_function_pool[25332]: Vertex4f (offset 144) */
    "ffff\0"
    "glVertex4f\0"
    "\0"
-   /* _mesa_function_pool[25273]: EvalCoord1d (offset 228) */
+   /* _mesa_function_pool[25349]: EvalCoord1d (offset 228) */
    "d\0"
    "glEvalCoord1d\0"
    "\0"
-   /* _mesa_function_pool[25290]: Vertex4d (offset 142) */
+   /* _mesa_function_pool[25366]: Vertex4d (offset 142) */
    "dddd\0"
    "glVertex4d\0"
    "\0"
-   /* _mesa_function_pool[25307]: RasterPos4dv (offset 79) */
+   /* _mesa_function_pool[25383]: RasterPos4dv (offset 79) */
    "p\0"
    "glRasterPos4dv\0"
    "\0"
-   /* _mesa_function_pool[25325]: FragmentLightfSGIX (dynamic) */
+   /* _mesa_function_pool[25401]: FragmentLightfSGIX (dynamic) */
    "iif\0"
    "glFragmentLightfSGIX\0"
    "\0"
-   /* _mesa_function_pool[25351]: GetCompressedTexImageARB (will be remapped) */
+   /* _mesa_function_pool[25427]: GetCompressedTexImageARB (will be remapped) */
    "iip\0"
    "glGetCompressedTexImage\0"
    "glGetCompressedTexImageARB\0"
    "\0"
-   /* _mesa_function_pool[25407]: GetTexGenfv (offset 279) */
+   /* _mesa_function_pool[25483]: GetTexGenfv (offset 279) */
    "iip\0"
    "glGetTexGenfv\0"
    "\0"
-   /* _mesa_function_pool[25426]: Vertex4i (offset 146) */
+   /* _mesa_function_pool[25502]: Vertex4i (offset 146) */
    "iiii\0"
    "glVertex4i\0"
    "\0"
-   /* _mesa_function_pool[25443]: VertexWeightPointerEXT (dynamic) */
+   /* _mesa_function_pool[25519]: VertexWeightPointerEXT (dynamic) */
    "iiip\0"
    "glVertexWeightPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[25474]: GetHistogram (offset 361) */
+   /* _mesa_function_pool[25550]: GetHistogram (offset 361) */
    "iiiip\0"
    "glGetHistogram\0"
    "glGetHistogramEXT\0"
    "\0"
-   /* _mesa_function_pool[25514]: ActiveStencilFaceEXT (will be remapped) */
+   /* _mesa_function_pool[25590]: ActiveStencilFaceEXT (will be remapped) */
    "i\0"
    "glActiveStencilFaceEXT\0"
    "\0"
-   /* _mesa_function_pool[25540]: StencilFuncSeparateATI (will be remapped) */
+   /* _mesa_function_pool[25616]: StencilFuncSeparateATI (will be remapped) */
    "iiii\0"
    "glStencilFuncSeparateATI\0"
    "\0"
-   /* _mesa_function_pool[25571]: Materialf (offset 169) */
+   /* _mesa_function_pool[25647]: Materialf (offset 169) */
    "iif\0"
    "glMaterialf\0"
    "\0"
-   /* _mesa_function_pool[25588]: GetShaderSourceARB (will be remapped) */
+   /* _mesa_function_pool[25664]: GetShaderSourceARB (will be remapped) */
    "iipp\0"
    "glGetShaderSource\0"
    "glGetShaderSourceARB\0"
    "\0"
-   /* _mesa_function_pool[25633]: IglooInterfaceSGIX (dynamic) */
+   /* _mesa_function_pool[25709]: IglooInterfaceSGIX (dynamic) */
    "ip\0"
    "glIglooInterfaceSGIX\0"
    "\0"
-   /* _mesa_function_pool[25658]: Materiali (offset 171) */
+   /* _mesa_function_pool[25734]: Materiali (offset 171) */
    "iii\0"
    "glMateriali\0"
    "\0"
-   /* _mesa_function_pool[25675]: VertexAttrib4dNV (will be remapped) */
+   /* _mesa_function_pool[25751]: VertexAttrib4dNV (will be remapped) */
    "idddd\0"
    "glVertexAttrib4dNV\0"
    "\0"
-   /* _mesa_function_pool[25701]: MultiModeDrawElementsIBM (will be remapped) */
+   /* _mesa_function_pool[25777]: MultiModeDrawElementsIBM (will be remapped) */
    "ppipii\0"
    "glMultiModeDrawElementsIBM\0"
    "\0"
-   /* _mesa_function_pool[25736]: Indexsv (offset 51) */
+   /* _mesa_function_pool[25812]: Indexsv (offset 51) */
    "p\0"
    "glIndexsv\0"
    "\0"
-   /* _mesa_function_pool[25749]: MultiTexCoord4svARB (offset 407) */
+   /* _mesa_function_pool[25825]: MultiTexCoord4svARB (offset 407) */
    "ip\0"
    "glMultiTexCoord4sv\0"
    "glMultiTexCoord4svARB\0"
    "\0"
-   /* _mesa_function_pool[25794]: LightModelfv (offset 164) */
+   /* _mesa_function_pool[25870]: LightModelfv (offset 164) */
    "ip\0"
    "glLightModelfv\0"
    "\0"
-   /* _mesa_function_pool[25813]: TexCoord2dv (offset 103) */
+   /* _mesa_function_pool[25889]: TexCoord2dv (offset 103) */
    "p\0"
    "glTexCoord2dv\0"
    "\0"
-   /* _mesa_function_pool[25830]: GenQueriesARB (will be remapped) */
+   /* _mesa_function_pool[25906]: GenQueriesARB (will be remapped) */
    "ip\0"
    "glGenQueries\0"
    "glGenQueriesARB\0"
    "\0"
-   /* _mesa_function_pool[25863]: EvalCoord1dv (offset 229) */
+   /* _mesa_function_pool[25939]: EvalCoord1dv (offset 229) */
    "p\0"
    "glEvalCoord1dv\0"
    "\0"
-   /* _mesa_function_pool[25881]: ReplacementCodeuiVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[25957]: ReplacementCodeuiVertex3fSUN (dynamic) */
    "ifff\0"
    "glReplacementCodeuiVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[25918]: Translated (offset 303) */
+   /* _mesa_function_pool[25994]: Translated (offset 303) */
    "ddd\0"
    "glTranslated\0"
    "\0"
-   /* _mesa_function_pool[25936]: Translatef (offset 304) */
+   /* _mesa_function_pool[26012]: Translatef (offset 304) */
    "fff\0"
    "glTranslatef\0"
    "\0"
-   /* _mesa_function_pool[25954]: StencilMask (offset 209) */
+   /* _mesa_function_pool[26030]: StencilMask (offset 209) */
    "i\0"
    "glStencilMask\0"
    "\0"
-   /* _mesa_function_pool[25971]: Tangent3iEXT (dynamic) */
+   /* _mesa_function_pool[26047]: Tangent3iEXT (dynamic) */
    "iii\0"
    "glTangent3iEXT\0"
    "\0"
-   /* _mesa_function_pool[25991]: GetLightiv (offset 265) */
+   /* _mesa_function_pool[26067]: GetLightiv (offset 265) */
    "iip\0"
    "glGetLightiv\0"
    "\0"
-   /* _mesa_function_pool[26009]: DrawMeshArraysSUN (dynamic) */
+   /* _mesa_function_pool[26085]: DrawMeshArraysSUN (dynamic) */
    "iiii\0"
    "glDrawMeshArraysSUN\0"
    "\0"
-   /* _mesa_function_pool[26035]: IsList (offset 287) */
+   /* _mesa_function_pool[26111]: IsList (offset 287) */
    "i\0"
    "glIsList\0"
    "\0"
-   /* _mesa_function_pool[26047]: IsSync (will be remapped) */
+   /* _mesa_function_pool[26123]: IsSync (will be remapped) */
    "i\0"
    "glIsSync\0"
    "\0"
-   /* _mesa_function_pool[26059]: RenderMode (offset 196) */
+   /* _mesa_function_pool[26135]: RenderMode (offset 196) */
    "i\0"
    "glRenderMode\0"
    "\0"
-   /* _mesa_function_pool[26075]: GetMapControlPointsNV (dynamic) */
+   /* _mesa_function_pool[26151]: GetMapControlPointsNV (dynamic) */
    "iiiiiip\0"
    "glGetMapControlPointsNV\0"
    "\0"
-   /* _mesa_function_pool[26108]: DrawBuffersARB (will be remapped) */
+   /* _mesa_function_pool[26184]: DrawBuffersARB (will be remapped) */
    "ip\0"
    "glDrawBuffers\0"
    "glDrawBuffersARB\0"
    "glDrawBuffersATI\0"
    "\0"
-   /* _mesa_function_pool[26160]: ProgramLocalParameter4fARB (will be remapped) */
+   /* _mesa_function_pool[26236]: ProgramLocalParameter4fARB (will be remapped) */
    "iiffff\0"
    "glProgramLocalParameter4fARB\0"
    "\0"
-   /* _mesa_function_pool[26197]: SpriteParameterivSGIX (dynamic) */
+   /* _mesa_function_pool[26273]: SpriteParameterivSGIX (dynamic) */
    "ip\0"
    "glSpriteParameterivSGIX\0"
    "\0"
-   /* _mesa_function_pool[26225]: ProvokingVertexEXT (will be remapped) */
+   /* _mesa_function_pool[26301]: ProvokingVertexEXT (will be remapped) */
    "i\0"
    "glProvokingVertexEXT\0"
    "glProvokingVertex\0"
    "\0"
-   /* _mesa_function_pool[26267]: MultiTexCoord1fARB (offset 378) */
+   /* _mesa_function_pool[26343]: MultiTexCoord1fARB (offset 378) */
    "if\0"
    "glMultiTexCoord1f\0"
    "glMultiTexCoord1fARB\0"
    "\0"
-   /* _mesa_function_pool[26310]: LoadName (offset 198) */
+   /* _mesa_function_pool[26386]: LoadName (offset 198) */
    "i\0"
    "glLoadName\0"
    "\0"
-   /* _mesa_function_pool[26324]: VertexAttribs4ubvNV (will be remapped) */
+   /* _mesa_function_pool[26400]: VertexAttribs4ubvNV (will be remapped) */
    "iip\0"
    "glVertexAttribs4ubvNV\0"
    "\0"
-   /* _mesa_function_pool[26351]: WeightsvARB (dynamic) */
+   /* _mesa_function_pool[26427]: WeightsvARB (dynamic) */
    "ip\0"
    "glWeightsvARB\0"
    "\0"
-   /* _mesa_function_pool[26369]: Uniform1fvARB (will be remapped) */
+   /* _mesa_function_pool[26445]: Uniform1fvARB (will be remapped) */
    "iip\0"
    "glUniform1fv\0"
    "glUniform1fvARB\0"
    "\0"
-   /* _mesa_function_pool[26403]: CopyTexSubImage1D (offset 325) */
+   /* _mesa_function_pool[26479]: CopyTexSubImage1D (offset 325) */
    "iiiiii\0"
    "glCopyTexSubImage1D\0"
    "glCopyTexSubImage1DEXT\0"
    "\0"
-   /* _mesa_function_pool[26454]: CullFace (offset 152) */
+   /* _mesa_function_pool[26530]: CullFace (offset 152) */
    "i\0"
    "glCullFace\0"
    "\0"
-   /* _mesa_function_pool[26468]: BindTexture (offset 307) */
+   /* _mesa_function_pool[26544]: BindTexture (offset 307) */
    "ii\0"
    "glBindTexture\0"
    "glBindTextureEXT\0"
    "\0"
-   /* _mesa_function_pool[26503]: BeginFragmentShaderATI (will be remapped) */
+   /* _mesa_function_pool[26579]: BeginFragmentShaderATI (will be remapped) */
    "\0"
    "glBeginFragmentShaderATI\0"
    "\0"
-   /* _mesa_function_pool[26530]: MultiTexCoord4fARB (offset 402) */
+   /* _mesa_function_pool[26606]: MultiTexCoord4fARB (offset 402) */
    "iffff\0"
    "glMultiTexCoord4f\0"
    "glMultiTexCoord4fARB\0"
    "\0"
-   /* _mesa_function_pool[26576]: VertexAttribs3svNV (will be remapped) */
+   /* _mesa_function_pool[26652]: VertexAttribs3svNV (will be remapped) */
    "iip\0"
    "glVertexAttribs3svNV\0"
    "\0"
-   /* _mesa_function_pool[26602]: StencilFunc (offset 243) */
+   /* _mesa_function_pool[26678]: StencilFunc (offset 243) */
    "iii\0"
    "glStencilFunc\0"
    "\0"
-   /* _mesa_function_pool[26621]: CopyPixels (offset 255) */
+   /* _mesa_function_pool[26697]: CopyPixels (offset 255) */
    "iiiii\0"
    "glCopyPixels\0"
    "\0"
-   /* _mesa_function_pool[26641]: Rectsv (offset 93) */
+   /* _mesa_function_pool[26717]: Rectsv (offset 93) */
    "pp\0"
    "glRectsv\0"
    "\0"
-   /* _mesa_function_pool[26654]: ReplacementCodeuivSUN (dynamic) */
+   /* _mesa_function_pool[26730]: ReplacementCodeuivSUN (dynamic) */
    "p\0"
    "glReplacementCodeuivSUN\0"
    "\0"
-   /* _mesa_function_pool[26681]: EnableVertexAttribArrayARB (will be remapped) */
+   /* _mesa_function_pool[26757]: EnableVertexAttribArrayARB (will be remapped) */
    "i\0"
    "glEnableVertexAttribArray\0"
    "glEnableVertexAttribArrayARB\0"
    "\0"
-   /* _mesa_function_pool[26739]: NormalPointervINTEL (dynamic) */
+   /* _mesa_function_pool[26815]: NormalPointervINTEL (dynamic) */
    "ip\0"
    "glNormalPointervINTEL\0"
    "\0"
-   /* _mesa_function_pool[26765]: CopyConvolutionFilter2D (offset 355) */
+   /* _mesa_function_pool[26841]: CopyConvolutionFilter2D (offset 355) */
    "iiiiii\0"
    "glCopyConvolutionFilter2D\0"
    "glCopyConvolutionFilter2DEXT\0"
    "\0"
-   /* _mesa_function_pool[26828]: WindowPos3ivMESA (will be remapped) */
+   /* _mesa_function_pool[26904]: WindowPos3ivMESA (will be remapped) */
    "p\0"
    "glWindowPos3iv\0"
    "glWindowPos3ivARB\0"
    "glWindowPos3ivMESA\0"
    "\0"
-   /* _mesa_function_pool[26883]: CopyBufferSubData (will be remapped) */
+   /* _mesa_function_pool[26959]: CopyBufferSubData (will be remapped) */
    "iiiii\0"
    "glCopyBufferSubData\0"
    "\0"
-   /* _mesa_function_pool[26910]: NormalPointer (offset 318) */
+   /* _mesa_function_pool[26986]: NormalPointer (offset 318) */
    "iip\0"
    "glNormalPointer\0"
    "\0"
-   /* _mesa_function_pool[26931]: TexParameterfv (offset 179) */
+   /* _mesa_function_pool[27007]: TexParameterfv (offset 179) */
    "iip\0"
    "glTexParameterfv\0"
    "\0"
-   /* _mesa_function_pool[26953]: IsBufferARB (will be remapped) */
+   /* _mesa_function_pool[27029]: IsBufferARB (will be remapped) */
    "i\0"
    "glIsBuffer\0"
    "glIsBufferARB\0"
    "\0"
-   /* _mesa_function_pool[26981]: WindowPos4iMESA (will be remapped) */
+   /* _mesa_function_pool[27057]: WindowPos4iMESA (will be remapped) */
    "iiii\0"
    "glWindowPos4iMESA\0"
    "\0"
-   /* _mesa_function_pool[27005]: VertexAttrib4uivARB (will be remapped) */
+   /* _mesa_function_pool[27081]: VertexAttrib4uivARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4uiv\0"
    "glVertexAttrib4uivARB\0"
    "\0"
-   /* _mesa_function_pool[27050]: Tangent3bvEXT (dynamic) */
+   /* _mesa_function_pool[27126]: Tangent3bvEXT (dynamic) */
    "p\0"
    "glTangent3bvEXT\0"
    "\0"
-   /* _mesa_function_pool[27069]: UniformMatrix3x4fv (will be remapped) */
+   /* _mesa_function_pool[27145]: UniformMatrix3x4fv (will be remapped) */
    "iiip\0"
    "glUniformMatrix3x4fv\0"
    "\0"
-   /* _mesa_function_pool[27096]: ClipPlane (offset 150) */
+   /* _mesa_function_pool[27172]: ClipPlane (offset 150) */
    "ip\0"
    "glClipPlane\0"
    "\0"
-   /* _mesa_function_pool[27112]: Recti (offset 90) */
+   /* _mesa_function_pool[27188]: Recti (offset 90) */
    "iiii\0"
    "glRecti\0"
    "\0"
-   /* _mesa_function_pool[27126]: DrawRangeElementsBaseVertex (will be remapped) */
+   /* _mesa_function_pool[27202]: DrawRangeElementsBaseVertex (will be remapped) */
    "iiiiipi\0"
    "glDrawRangeElementsBaseVertex\0"
    "\0"
-   /* _mesa_function_pool[27165]: TexCoordPointervINTEL (dynamic) */
+   /* _mesa_function_pool[27241]: TexCoordPointervINTEL (dynamic) */
    "iip\0"
    "glTexCoordPointervINTEL\0"
    "\0"
-   /* _mesa_function_pool[27194]: DeleteBuffersARB (will be remapped) */
+   /* _mesa_function_pool[27270]: DeleteBuffersARB (will be remapped) */
    "ip\0"
    "glDeleteBuffers\0"
    "glDeleteBuffersARB\0"
    "\0"
-   /* _mesa_function_pool[27233]: WindowPos4fvMESA (will be remapped) */
+   /* _mesa_function_pool[27309]: WindowPos4fvMESA (will be remapped) */
    "p\0"
    "glWindowPos4fvMESA\0"
    "\0"
-   /* _mesa_function_pool[27255]: GetPixelMapuiv (offset 272) */
+   /* _mesa_function_pool[27331]: GetPixelMapuiv (offset 272) */
    "ip\0"
    "glGetPixelMapuiv\0"
    "\0"
-   /* _mesa_function_pool[27276]: Rectf (offset 88) */
+   /* _mesa_function_pool[27352]: Rectf (offset 88) */
    "ffff\0"
    "glRectf\0"
    "\0"
-   /* _mesa_function_pool[27290]: VertexAttrib1sNV (will be remapped) */
+   /* _mesa_function_pool[27366]: VertexAttrib1sNV (will be remapped) */
    "ii\0"
    "glVertexAttrib1sNV\0"
    "\0"
-   /* _mesa_function_pool[27313]: Indexfv (offset 47) */
+   /* _mesa_function_pool[27389]: Indexfv (offset 47) */
    "p\0"
    "glIndexfv\0"
    "\0"
-   /* _mesa_function_pool[27326]: SecondaryColor3svEXT (will be remapped) */
+   /* _mesa_function_pool[27402]: SecondaryColor3svEXT (will be remapped) */
    "p\0"
    "glSecondaryColor3sv\0"
    "glSecondaryColor3svEXT\0"
    "\0"
-   /* _mesa_function_pool[27372]: LoadTransposeMatrixfARB (will be remapped) */
+   /* _mesa_function_pool[27448]: LoadTransposeMatrixfARB (will be remapped) */
    "p\0"
    "glLoadTransposeMatrixf\0"
    "glLoadTransposeMatrixfARB\0"
    "\0"
-   /* _mesa_function_pool[27424]: GetPointerv (offset 329) */
+   /* _mesa_function_pool[27500]: GetPointerv (offset 329) */
    "ip\0"
    "glGetPointerv\0"
    "glGetPointervEXT\0"
    "\0"
-   /* _mesa_function_pool[27459]: Tangent3bEXT (dynamic) */
+   /* _mesa_function_pool[27535]: Tangent3bEXT (dynamic) */
    "iii\0"
    "glTangent3bEXT\0"
    "\0"
-   /* _mesa_function_pool[27479]: CombinerParameterfNV (will be remapped) */
+   /* _mesa_function_pool[27555]: CombinerParameterfNV (will be remapped) */
    "if\0"
    "glCombinerParameterfNV\0"
    "\0"
-   /* _mesa_function_pool[27506]: IndexMask (offset 212) */
+   /* _mesa_function_pool[27582]: IndexMask (offset 212) */
    "i\0"
    "glIndexMask\0"
    "\0"
-   /* _mesa_function_pool[27521]: BindProgramNV (will be remapped) */
+   /* _mesa_function_pool[27597]: BindProgramNV (will be remapped) */
    "ii\0"
    "glBindProgramARB\0"
    "glBindProgramNV\0"
    "\0"
-   /* _mesa_function_pool[27558]: VertexAttrib4svARB (will be remapped) */
+   /* _mesa_function_pool[27634]: VertexAttrib4svARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4sv\0"
    "glVertexAttrib4svARB\0"
    "\0"
-   /* _mesa_function_pool[27601]: GetFloatv (offset 262) */
+   /* _mesa_function_pool[27677]: GetFloatv (offset 262) */
    "ip\0"
    "glGetFloatv\0"
    "\0"
-   /* _mesa_function_pool[27617]: CreateDebugObjectMESA (dynamic) */
+   /* _mesa_function_pool[27693]: CreateDebugObjectMESA (dynamic) */
    "\0"
    "glCreateDebugObjectMESA\0"
    "\0"
-   /* _mesa_function_pool[27643]: GetShaderiv (will be remapped) */
+   /* _mesa_function_pool[27719]: GetShaderiv (will be remapped) */
    "iip\0"
    "glGetShaderiv\0"
    "\0"
-   /* _mesa_function_pool[27662]: ClientWaitSync (will be remapped) */
+   /* _mesa_function_pool[27738]: ClientWaitSync (will be remapped) */
    "iii\0"
    "glClientWaitSync\0"
    "\0"
-   /* _mesa_function_pool[27684]: TexCoord4s (offset 124) */
+   /* _mesa_function_pool[27760]: TexCoord4s (offset 124) */
    "iiii\0"
    "glTexCoord4s\0"
    "\0"
-   /* _mesa_function_pool[27703]: TexCoord3sv (offset 117) */
+   /* _mesa_function_pool[27779]: TexCoord3sv (offset 117) */
    "p\0"
    "glTexCoord3sv\0"
    "\0"
-   /* _mesa_function_pool[27720]: BindFragmentShaderATI (will be remapped) */
+   /* _mesa_function_pool[27796]: BindFragmentShaderATI (will be remapped) */
    "i\0"
    "glBindFragmentShaderATI\0"
    "\0"
-   /* _mesa_function_pool[27747]: PopAttrib (offset 218) */
+   /* _mesa_function_pool[27823]: PopAttrib (offset 218) */
    "\0"
    "glPopAttrib\0"
    "\0"
-   /* _mesa_function_pool[27761]: Fogfv (offset 154) */
+   /* _mesa_function_pool[27837]: Fogfv (offset 154) */
    "ip\0"
    "glFogfv\0"
    "\0"
-   /* _mesa_function_pool[27773]: UnmapBufferARB (will be remapped) */
+   /* _mesa_function_pool[27849]: UnmapBufferARB (will be remapped) */
    "i\0"
    "glUnmapBuffer\0"
    "glUnmapBufferARB\0"
    "\0"
-   /* _mesa_function_pool[27807]: InitNames (offset 197) */
+   /* _mesa_function_pool[27883]: InitNames (offset 197) */
    "\0"
    "glInitNames\0"
    "\0"
-   /* _mesa_function_pool[27821]: Normal3sv (offset 61) */
+   /* _mesa_function_pool[27897]: Normal3sv (offset 61) */
    "p\0"
    "glNormal3sv\0"
    "\0"
-   /* _mesa_function_pool[27836]: Minmax (offset 368) */
+   /* _mesa_function_pool[27912]: Minmax (offset 368) */
    "iii\0"
    "glMinmax\0"
    "glMinmaxEXT\0"
    "\0"
-   /* _mesa_function_pool[27862]: TexCoord4d (offset 118) */
+   /* _mesa_function_pool[27938]: TexCoord4d (offset 118) */
    "dddd\0"
    "glTexCoord4d\0"
    "\0"
-   /* _mesa_function_pool[27881]: TexCoord4f (offset 120) */
+   /* _mesa_function_pool[27957]: TexCoord4f (offset 120) */
    "ffff\0"
    "glTexCoord4f\0"
    "\0"
-   /* _mesa_function_pool[27900]: FogCoorddvEXT (will be remapped) */
+   /* _mesa_function_pool[27976]: FogCoorddvEXT (will be remapped) */
    "p\0"
    "glFogCoorddv\0"
    "glFogCoorddvEXT\0"
    "\0"
-   /* _mesa_function_pool[27932]: FinishTextureSUNX (dynamic) */
+   /* _mesa_function_pool[28008]: FinishTextureSUNX (dynamic) */
    "\0"
    "glFinishTextureSUNX\0"
    "\0"
-   /* _mesa_function_pool[27954]: GetFragmentLightfvSGIX (dynamic) */
+   /* _mesa_function_pool[28030]: GetFragmentLightfvSGIX (dynamic) */
    "iip\0"
    "glGetFragmentLightfvSGIX\0"
    "\0"
-   /* _mesa_function_pool[27984]: Binormal3fvEXT (dynamic) */
+   /* _mesa_function_pool[28060]: Binormal3fvEXT (dynamic) */
    "p\0"
    "glBinormal3fvEXT\0"
    "\0"
-   /* _mesa_function_pool[28004]: GetBooleanv (offset 258) */
+   /* _mesa_function_pool[28080]: GetBooleanv (offset 258) */
    "ip\0"
    "glGetBooleanv\0"
    "\0"
-   /* _mesa_function_pool[28022]: ColorFragmentOp3ATI (will be remapped) */
+   /* _mesa_function_pool[28098]: ColorFragmentOp3ATI (will be remapped) */
    "iiiiiiiiiiiii\0"
    "glColorFragmentOp3ATI\0"
    "\0"
-   /* _mesa_function_pool[28059]: Hint (offset 158) */
+   /* _mesa_function_pool[28135]: Hint (offset 158) */
    "ii\0"
    "glHint\0"
    "\0"
-   /* _mesa_function_pool[28070]: Color4dv (offset 28) */
+   /* _mesa_function_pool[28146]: Color4dv (offset 28) */
    "p\0"
    "glColor4dv\0"
    "\0"
-   /* _mesa_function_pool[28084]: VertexAttrib2svARB (will be remapped) */
+   /* _mesa_function_pool[28160]: VertexAttrib2svARB (will be remapped) */
    "ip\0"
    "glVertexAttrib2sv\0"
    "glVertexAttrib2svARB\0"
    "\0"
-   /* _mesa_function_pool[28127]: AreProgramsResidentNV (will be remapped) */
+   /* _mesa_function_pool[28203]: AreProgramsResidentNV (will be remapped) */
    "ipp\0"
    "glAreProgramsResidentNV\0"
    "\0"
-   /* _mesa_function_pool[28156]: WindowPos3svMESA (will be remapped) */
+   /* _mesa_function_pool[28232]: WindowPos3svMESA (will be remapped) */
    "p\0"
    "glWindowPos3sv\0"
    "glWindowPos3svARB\0"
    "glWindowPos3svMESA\0"
    "\0"
-   /* _mesa_function_pool[28211]: CopyColorSubTable (offset 347) */
+   /* _mesa_function_pool[28287]: CopyColorSubTable (offset 347) */
    "iiiii\0"
    "glCopyColorSubTable\0"
    "glCopyColorSubTableEXT\0"
    "\0"
-   /* _mesa_function_pool[28261]: WeightdvARB (dynamic) */
+   /* _mesa_function_pool[28337]: WeightdvARB (dynamic) */
    "ip\0"
    "glWeightdvARB\0"
    "\0"
-   /* _mesa_function_pool[28279]: DeleteRenderbuffersEXT (will be remapped) */
+   /* _mesa_function_pool[28355]: DeleteRenderbuffersEXT (will be remapped) */
    "ip\0"
    "glDeleteRenderbuffers\0"
    "glDeleteRenderbuffersEXT\0"
    "\0"
-   /* _mesa_function_pool[28330]: VertexAttrib4NubvARB (will be remapped) */
+   /* _mesa_function_pool[28406]: VertexAttrib4NubvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4Nubv\0"
    "glVertexAttrib4NubvARB\0"
    "\0"
-   /* _mesa_function_pool[28377]: VertexAttrib3dvNV (will be remapped) */
+   /* _mesa_function_pool[28453]: VertexAttrib3dvNV (will be remapped) */
    "ip\0"
    "glVertexAttrib3dvNV\0"
    "\0"
-   /* _mesa_function_pool[28401]: GetObjectParameterfvARB (will be remapped) */
+   /* _mesa_function_pool[28477]: GetObjectParameterfvARB (will be remapped) */
    "iip\0"
    "glGetObjectParameterfvARB\0"
    "\0"
-   /* _mesa_function_pool[28432]: Vertex4iv (offset 147) */
+   /* _mesa_function_pool[28508]: Vertex4iv (offset 147) */
    "p\0"
    "glVertex4iv\0"
    "\0"
-   /* _mesa_function_pool[28447]: GetProgramEnvParameterdvARB (will be remapped) */
+   /* _mesa_function_pool[28523]: GetProgramEnvParameterdvARB (will be remapped) */
    "iip\0"
    "glGetProgramEnvParameterdvARB\0"
    "\0"
-   /* _mesa_function_pool[28482]: TexCoord4dv (offset 119) */
+   /* _mesa_function_pool[28558]: TexCoord4dv (offset 119) */
    "p\0"
    "glTexCoord4dv\0"
    "\0"
-   /* _mesa_function_pool[28499]: LockArraysEXT (will be remapped) */
+   /* _mesa_function_pool[28575]: LockArraysEXT (will be remapped) */
    "ii\0"
    "glLockArraysEXT\0"
    "\0"
-   /* _mesa_function_pool[28519]: Begin (offset 7) */
+   /* _mesa_function_pool[28595]: Begin (offset 7) */
    "i\0"
    "glBegin\0"
    "\0"
-   /* _mesa_function_pool[28530]: LightModeli (offset 165) */
+   /* _mesa_function_pool[28606]: LightModeli (offset 165) */
    "ii\0"
    "glLightModeli\0"
    "\0"
-   /* _mesa_function_pool[28548]: Rectfv (offset 89) */
+   /* _mesa_function_pool[28624]: Rectfv (offset 89) */
    "pp\0"
    "glRectfv\0"
    "\0"
-   /* _mesa_function_pool[28561]: LightModelf (offset 163) */
+   /* _mesa_function_pool[28637]: LightModelf (offset 163) */
    "if\0"
    "glLightModelf\0"
    "\0"
-   /* _mesa_function_pool[28579]: GetTexParameterfv (offset 282) */
+   /* _mesa_function_pool[28655]: GetTexParameterfv (offset 282) */
    "iip\0"
    "glGetTexParameterfv\0"
    "\0"
-   /* _mesa_function_pool[28604]: GetLightfv (offset 264) */
+   /* _mesa_function_pool[28680]: GetLightfv (offset 264) */
    "iip\0"
    "glGetLightfv\0"
    "\0"
-   /* _mesa_function_pool[28622]: PixelTransformParameterivEXT (dynamic) */
+   /* _mesa_function_pool[28698]: PixelTransformParameterivEXT (dynamic) */
    "iip\0"
    "glPixelTransformParameterivEXT\0"
    "\0"
-   /* _mesa_function_pool[28658]: BinormalPointerEXT (dynamic) */
+   /* _mesa_function_pool[28734]: BinormalPointerEXT (dynamic) */
    "iip\0"
    "glBinormalPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[28684]: VertexAttrib1dNV (will be remapped) */
+   /* _mesa_function_pool[28760]: VertexAttrib1dNV (will be remapped) */
    "id\0"
    "glVertexAttrib1dNV\0"
    "\0"
-   /* _mesa_function_pool[28707]: GetCombinerInputParameterivNV (will be remapped) */
+   /* _mesa_function_pool[28783]: GetCombinerInputParameterivNV (will be remapped) */
    "iiiip\0"
    "glGetCombinerInputParameterivNV\0"
    "\0"
-   /* _mesa_function_pool[28746]: Disable (offset 214) */
+   /* _mesa_function_pool[28822]: Disable (offset 214) */
    "i\0"
    "glDisable\0"
    "\0"
-   /* _mesa_function_pool[28759]: MultiTexCoord2fvARB (offset 387) */
+   /* _mesa_function_pool[28835]: MultiTexCoord2fvARB (offset 387) */
    "ip\0"
    "glMultiTexCoord2fv\0"
    "glMultiTexCoord2fvARB\0"
    "\0"
-   /* _mesa_function_pool[28804]: GetRenderbufferParameterivEXT (will be remapped) */
+   /* _mesa_function_pool[28880]: GetRenderbufferParameterivEXT (will be remapped) */
    "iip\0"
    "glGetRenderbufferParameteriv\0"
    "glGetRenderbufferParameterivEXT\0"
    "\0"
-   /* _mesa_function_pool[28870]: CombinerParameterivNV (will be remapped) */
+   /* _mesa_function_pool[28946]: CombinerParameterivNV (will be remapped) */
    "ip\0"
    "glCombinerParameterivNV\0"
    "\0"
-   /* _mesa_function_pool[28898]: GenFragmentShadersATI (will be remapped) */
+   /* _mesa_function_pool[28974]: GenFragmentShadersATI (will be remapped) */
    "i\0"
    "glGenFragmentShadersATI\0"
    "\0"
-   /* _mesa_function_pool[28925]: DrawArrays (offset 310) */
+   /* _mesa_function_pool[29001]: DrawArrays (offset 310) */
    "iii\0"
    "glDrawArrays\0"
    "glDrawArraysEXT\0"
    "\0"
-   /* _mesa_function_pool[28959]: WeightuivARB (dynamic) */
+   /* _mesa_function_pool[29035]: WeightuivARB (dynamic) */
    "ip\0"
    "glWeightuivARB\0"
    "\0"
-   /* _mesa_function_pool[28978]: VertexAttrib2sARB (will be remapped) */
+   /* _mesa_function_pool[29054]: VertexAttrib2sARB (will be remapped) */
    "iii\0"
    "glVertexAttrib2s\0"
    "glVertexAttrib2sARB\0"
    "\0"
-   /* _mesa_function_pool[29020]: ColorMask (offset 210) */
+   /* _mesa_function_pool[29096]: ColorMask (offset 210) */
    "iiii\0"
    "glColorMask\0"
    "\0"
-   /* _mesa_function_pool[29038]: GenAsyncMarkersSGIX (dynamic) */
+   /* _mesa_function_pool[29114]: GenAsyncMarkersSGIX (dynamic) */
    "i\0"
    "glGenAsyncMarkersSGIX\0"
    "\0"
-   /* _mesa_function_pool[29063]: Tangent3svEXT (dynamic) */
+   /* _mesa_function_pool[29139]: Tangent3svEXT (dynamic) */
    "p\0"
    "glTangent3svEXT\0"
    "\0"
-   /* _mesa_function_pool[29082]: GetListParameterivSGIX (dynamic) */
+   /* _mesa_function_pool[29158]: GetListParameterivSGIX (dynamic) */
    "iip\0"
    "glGetListParameterivSGIX\0"
    "\0"
-   /* _mesa_function_pool[29112]: BindBufferARB (will be remapped) */
+   /* _mesa_function_pool[29188]: BindBufferARB (will be remapped) */
    "ii\0"
    "glBindBuffer\0"
    "glBindBufferARB\0"
    "\0"
-   /* _mesa_function_pool[29145]: GetInfoLogARB (will be remapped) */
+   /* _mesa_function_pool[29221]: GetInfoLogARB (will be remapped) */
    "iipp\0"
    "glGetInfoLogARB\0"
    "\0"
-   /* _mesa_function_pool[29167]: RasterPos4iv (offset 83) */
+   /* _mesa_function_pool[29243]: RasterPos4iv (offset 83) */
    "p\0"
    "glRasterPos4iv\0"
    "\0"
-   /* _mesa_function_pool[29185]: Enable (offset 215) */
+   /* _mesa_function_pool[29261]: Enable (offset 215) */
    "i\0"
    "glEnable\0"
    "\0"
-   /* _mesa_function_pool[29197]: LineStipple (offset 167) */
+   /* _mesa_function_pool[29273]: LineStipple (offset 167) */
    "ii\0"
    "glLineStipple\0"
    "\0"
-   /* _mesa_function_pool[29215]: VertexAttribs4svNV (will be remapped) */
+   /* _mesa_function_pool[29291]: VertexAttribs4svNV (will be remapped) */
    "iip\0"
    "glVertexAttribs4svNV\0"
    "\0"
-   /* _mesa_function_pool[29241]: EdgeFlagPointerListIBM (dynamic) */
+   /* _mesa_function_pool[29317]: EdgeFlagPointerListIBM (dynamic) */
    "ipi\0"
    "glEdgeFlagPointerListIBM\0"
    "\0"
-   /* _mesa_function_pool[29271]: UniformMatrix3x2fv (will be remapped) */
+   /* _mesa_function_pool[29347]: UniformMatrix3x2fv (will be remapped) */
    "iiip\0"
    "glUniformMatrix3x2fv\0"
    "\0"
-   /* _mesa_function_pool[29298]: GetMinmaxParameterfv (offset 365) */
+   /* _mesa_function_pool[29374]: GetMinmaxParameterfv (offset 365) */
    "iip\0"
    "glGetMinmaxParameterfv\0"
    "glGetMinmaxParameterfvEXT\0"
    "\0"
-   /* _mesa_function_pool[29352]: VertexAttrib1fvARB (will be remapped) */
+   /* _mesa_function_pool[29428]: VertexAttrib1fvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib1fv\0"
    "glVertexAttrib1fvARB\0"
    "\0"
-   /* _mesa_function_pool[29395]: GenBuffersARB (will be remapped) */
+   /* _mesa_function_pool[29471]: GenBuffersARB (will be remapped) */
    "ip\0"
    "glGenBuffers\0"
    "glGenBuffersARB\0"
    "\0"
-   /* _mesa_function_pool[29428]: VertexAttribs1svNV (will be remapped) */
+   /* _mesa_function_pool[29504]: VertexAttribs1svNV (will be remapped) */
    "iip\0"
    "glVertexAttribs1svNV\0"
    "\0"
-   /* _mesa_function_pool[29454]: Vertex3fv (offset 137) */
+   /* _mesa_function_pool[29530]: Vertex3fv (offset 137) */
    "p\0"
    "glVertex3fv\0"
    "\0"
-   /* _mesa_function_pool[29469]: GetTexBumpParameterivATI (will be remapped) */
+   /* _mesa_function_pool[29545]: GetTexBumpParameterivATI (will be remapped) */
    "ip\0"
    "glGetTexBumpParameterivATI\0"
    "\0"
-   /* _mesa_function_pool[29500]: Binormal3bEXT (dynamic) */
+   /* _mesa_function_pool[29576]: Binormal3bEXT (dynamic) */
    "iii\0"
    "glBinormal3bEXT\0"
    "\0"
-   /* _mesa_function_pool[29521]: FragmentMaterialivSGIX (dynamic) */
+   /* _mesa_function_pool[29597]: FragmentMaterialivSGIX (dynamic) */
    "iip\0"
    "glFragmentMaterialivSGIX\0"
    "\0"
-   /* _mesa_function_pool[29551]: IsRenderbufferEXT (will be remapped) */
+   /* _mesa_function_pool[29627]: IsRenderbufferEXT (will be remapped) */
    "i\0"
    "glIsRenderbuffer\0"
    "glIsRenderbufferEXT\0"
    "\0"
-   /* _mesa_function_pool[29591]: GenProgramsNV (will be remapped) */
+   /* _mesa_function_pool[29667]: GenProgramsNV (will be remapped) */
    "ip\0"
    "glGenProgramsARB\0"
    "glGenProgramsNV\0"
    "\0"
-   /* _mesa_function_pool[29628]: VertexAttrib4dvNV (will be remapped) */
+   /* _mesa_function_pool[29704]: VertexAttrib4dvNV (will be remapped) */
    "ip\0"
    "glVertexAttrib4dvNV\0"
    "\0"
-   /* _mesa_function_pool[29652]: EndFragmentShaderATI (will be remapped) */
+   /* _mesa_function_pool[29728]: EndFragmentShaderATI (will be remapped) */
    "\0"
    "glEndFragmentShaderATI\0"
    "\0"
-   /* _mesa_function_pool[29677]: Binormal3iEXT (dynamic) */
+   /* _mesa_function_pool[29753]: Binormal3iEXT (dynamic) */
    "iii\0"
    "glBinormal3iEXT\0"
    "\0"
-   /* _mesa_function_pool[29698]: WindowPos2fMESA (will be remapped) */
+   /* _mesa_function_pool[29774]: WindowPos2fMESA (will be remapped) */
    "ff\0"
    "glWindowPos2f\0"
    "glWindowPos2fARB\0"
@@ -4367,399 +4375,401 @@ static const struct {
 } MESA_remap_table_functions[] = {
    {  1461, AttachShader_remap_index },
    {  8764, CreateProgram_remap_index },
-   { 20302, CreateShader_remap_index },
-   { 22589, DeleteProgram_remap_index },
-   { 16282, DeleteShader_remap_index },
-   { 20748, DetachShader_remap_index },
-   { 15806, GetAttachedShaders_remap_index },
+   { 20335, CreateShader_remap_index },
+   { 22665, DeleteProgram_remap_index },
+   { 16315, DeleteShader_remap_index },
+   { 20781, DetachShader_remap_index },
+   { 15839, GetAttachedShaders_remap_index },
    {  4275, GetProgramInfoLog_remap_index },
    {   361, GetProgramiv_remap_index },
    {  5578, GetShaderInfoLog_remap_index },
-   { 27643, GetShaderiv_remap_index },
-   { 11821, IsProgram_remap_index },
-   { 10856, IsShader_remap_index },
+   { 27719, GetShaderiv_remap_index },
+   { 11854, IsProgram_remap_index },
+   { 10889, IsShader_remap_index },
    {  8868, StencilFuncSeparate_remap_index },
    {  3487, StencilMaskSeparate_remap_index },
    {  6654, StencilOpSeparate_remap_index },
-   { 19653, UniformMatrix2x3fv_remap_index },
+   { 19686, UniformMatrix2x3fv_remap_index },
    {  2615, UniformMatrix2x4fv_remap_index },
-   { 29271, UniformMatrix3x2fv_remap_index },
-   { 27069, UniformMatrix3x4fv_remap_index },
-   { 14354, UniformMatrix4x2fv_remap_index },
+   { 29347, UniformMatrix3x2fv_remap_index },
+   { 27145, UniformMatrix3x4fv_remap_index },
+   { 14387, UniformMatrix4x2fv_remap_index },
    {  2937, UniformMatrix4x3fv_remap_index },
    {  8782, LoadTransposeMatrixdARB_remap_index },
-   { 27372, LoadTransposeMatrixfARB_remap_index },
+   { 27448, LoadTransposeMatrixfARB_remap_index },
    {  4848, MultTransposeMatrixdARB_remap_index },
-   { 20935, MultTransposeMatrixfARB_remap_index },
+   { 20968, MultTransposeMatrixfARB_remap_index },
    {   172, SampleCoverageARB_remap_index },
    {  5002, CompressedTexImage1DARB_remap_index },
-   { 21392, CompressedTexImage2DARB_remap_index },
+   { 21468, CompressedTexImage2DARB_remap_index },
    {  3550, CompressedTexImage3DARB_remap_index },
-   { 16098, CompressedTexSubImage1DARB_remap_index },
+   { 16131, CompressedTexSubImage1DARB_remap_index },
    {  1880, CompressedTexSubImage2DARB_remap_index },
-   { 17890, CompressedTexSubImage3DARB_remap_index },
-   { 25351, GetCompressedTexImageARB_remap_index },
+   { 17923, CompressedTexSubImage3DARB_remap_index },
+   { 25427, GetCompressedTexImageARB_remap_index },
    {  3395, DisableVertexAttribArrayARB_remap_index },
-   { 26681, EnableVertexAttribArrayARB_remap_index },
-   { 28447, GetProgramEnvParameterdvARB_remap_index },
-   { 20815, GetProgramEnvParameterfvARB_remap_index },
-   { 24381, GetProgramLocalParameterdvARB_remap_index },
+   { 26757, EnableVertexAttribArrayARB_remap_index },
+   { 28523, GetProgramEnvParameterdvARB_remap_index },
+   { 20848, GetProgramEnvParameterfvARB_remap_index },
+   { 24457, GetProgramLocalParameterdvARB_remap_index },
    {  7096, GetProgramLocalParameterfvARB_remap_index },
-   { 16189, GetProgramStringARB_remap_index },
-   { 24576, GetProgramivARB_remap_index },
-   { 18085, GetVertexAttribdvARB_remap_index },
-   { 14243, GetVertexAttribfvARB_remap_index },
+   { 16222, GetProgramStringARB_remap_index },
+   { 24652, GetProgramivARB_remap_index },
+   { 18118, GetVertexAttribdvARB_remap_index },
+   { 14276, GetVertexAttribfvARB_remap_index },
    {  8677, GetVertexAttribivARB_remap_index },
-   { 16994, ProgramEnvParameter4dARB_remap_index },
-   { 22362, ProgramEnvParameter4dvARB_remap_index },
-   { 14851, ProgramEnvParameter4fARB_remap_index },
+   { 17027, ProgramEnvParameter4dARB_remap_index },
+   { 22438, ProgramEnvParameter4dvARB_remap_index },
+   { 14884, ProgramEnvParameter4fARB_remap_index },
    {  7959, ProgramEnvParameter4fvARB_remap_index },
    {  3513, ProgramLocalParameter4dARB_remap_index },
-   { 11531, ProgramLocalParameter4dvARB_remap_index },
-   { 26160, ProgramLocalParameter4fARB_remap_index },
-   { 22907, ProgramLocalParameter4fvARB_remap_index },
-   { 25137, ProgramStringARB_remap_index },
-   { 17244, VertexAttrib1dARB_remap_index },
-   { 13897, VertexAttrib1dvARB_remap_index },
+   { 11564, ProgramLocalParameter4dvARB_remap_index },
+   { 26236, ProgramLocalParameter4fARB_remap_index },
+   { 22983, ProgramLocalParameter4fvARB_remap_index },
+   { 25213, ProgramStringARB_remap_index },
+   { 17277, VertexAttrib1dARB_remap_index },
+   { 13930, VertexAttrib1dvARB_remap_index },
    {  3688, VertexAttrib1fARB_remap_index },
-   { 29352, VertexAttrib1fvARB_remap_index },
+   { 29428, VertexAttrib1fvARB_remap_index },
    {  6180, VertexAttrib1sARB_remap_index },
    {  2054, VertexAttrib1svARB_remap_index },
-   { 13328, VertexAttrib2dARB_remap_index },
-   { 15425, VertexAttrib2dvARB_remap_index },
+   { 13361, VertexAttrib2dARB_remap_index },
+   { 15458, VertexAttrib2dvARB_remap_index },
    {  1480, VertexAttrib2fARB_remap_index },
-   { 15538, VertexAttrib2fvARB_remap_index },
-   { 28978, VertexAttrib2sARB_remap_index },
-   { 28084, VertexAttrib2svARB_remap_index },
+   { 15571, VertexAttrib2fvARB_remap_index },
+   { 29054, VertexAttrib2sARB_remap_index },
+   { 28160, VertexAttrib2svARB_remap_index },
    { 10015, VertexAttrib3dARB_remap_index },
    {  7662, VertexAttrib3dvARB_remap_index },
    {  1567, VertexAttrib3fARB_remap_index },
-   { 19890, VertexAttrib3fvARB_remap_index },
-   { 25009, VertexAttrib3sARB_remap_index },
-   { 17827, VertexAttrib3svARB_remap_index },
+   { 19923, VertexAttrib3fvARB_remap_index },
+   { 25085, VertexAttrib3sARB_remap_index },
+   { 17860, VertexAttrib3svARB_remap_index },
    {  4301, VertexAttrib4NbvARB_remap_index },
-   { 15761, VertexAttrib4NivARB_remap_index },
-   { 19845, VertexAttrib4NsvARB_remap_index },
-   { 20767, VertexAttrib4NubARB_remap_index },
-   { 28330, VertexAttrib4NubvARB_remap_index },
-   { 16655, VertexAttrib4NuivARB_remap_index },
+   { 15794, VertexAttrib4NivARB_remap_index },
+   { 19878, VertexAttrib4NsvARB_remap_index },
+   { 20800, VertexAttrib4NubARB_remap_index },
+   { 28406, VertexAttrib4NubvARB_remap_index },
+   { 16688, VertexAttrib4NuivARB_remap_index },
    {  2810, VertexAttrib4NusvARB_remap_index },
    {  9609, VertexAttrib4bvARB_remap_index },
-   { 23789, VertexAttrib4dARB_remap_index },
-   { 18810, VertexAttrib4dvARB_remap_index },
+   { 23865, VertexAttrib4dARB_remap_index },
+   { 18843, VertexAttrib4dvARB_remap_index },
    { 10122, VertexAttrib4fARB_remap_index },
    { 10492, VertexAttrib4fvARB_remap_index },
    {  9061, VertexAttrib4ivARB_remap_index },
-   { 15239, VertexAttrib4sARB_remap_index },
-   { 27558, VertexAttrib4svARB_remap_index },
-   { 14656, VertexAttrib4ubvARB_remap_index },
-   { 27005, VertexAttrib4uivARB_remap_index },
-   { 17638, VertexAttrib4usvARB_remap_index },
-   { 19527, VertexAttribPointerARB_remap_index },
-   { 29112, BindBufferARB_remap_index },
+   { 15272, VertexAttrib4sARB_remap_index },
+   { 27634, VertexAttrib4svARB_remap_index },
+   { 14689, VertexAttrib4ubvARB_remap_index },
+   { 27081, VertexAttrib4uivARB_remap_index },
+   { 17671, VertexAttrib4usvARB_remap_index },
+   { 19560, VertexAttribPointerARB_remap_index },
+   { 29188, BindBufferARB_remap_index },
    {  5893, BufferDataARB_remap_index },
    {  1382, BufferSubDataARB_remap_index },
-   { 27194, DeleteBuffersARB_remap_index },
-   { 29395, GenBuffersARB_remap_index },
-   { 15581, GetBufferParameterivARB_remap_index },
-   { 14803, GetBufferPointervARB_remap_index },
+   { 27270, DeleteBuffersARB_remap_index },
+   { 29471, GenBuffersARB_remap_index },
+   { 15614, GetBufferParameterivARB_remap_index },
+   { 14836, GetBufferPointervARB_remap_index },
    {  1335, GetBufferSubDataARB_remap_index },
-   { 26953, IsBufferARB_remap_index },
-   { 23362, MapBufferARB_remap_index },
-   { 27773, UnmapBufferARB_remap_index },
+   { 27029, IsBufferARB_remap_index },
+   { 23438, MapBufferARB_remap_index },
+   { 27849, UnmapBufferARB_remap_index },
    {   268, BeginQueryARB_remap_index },
-   { 17339, DeleteQueriesARB_remap_index },
-   { 10753, EndQueryARB_remap_index },
-   { 25830, GenQueriesARB_remap_index },
+   { 17372, DeleteQueriesARB_remap_index },
+   { 10786, EndQueryARB_remap_index },
+   { 25906, GenQueriesARB_remap_index },
    {  1772, GetQueryObjectivARB_remap_index },
-   { 15283, GetQueryObjectuivARB_remap_index },
+   { 15316, GetQueryObjectuivARB_remap_index },
    {  1624, GetQueryivARB_remap_index },
-   { 17545, IsQueryARB_remap_index },
+   { 17578, IsQueryARB_remap_index },
    {  7272, AttachObjectARB_remap_index },
-   { 16244, CompileShaderARB_remap_index },
+   { 16277, CompileShaderARB_remap_index },
    {  2879, CreateProgramObjectARB_remap_index },
    {  5838, CreateShaderObjectARB_remap_index },
-   { 12745, DeleteObjectARB_remap_index },
-   { 21166, DetachObjectARB_remap_index },
+   { 12778, DeleteObjectARB_remap_index },
+   { 21242, DetachObjectARB_remap_index },
    { 10564, GetActiveUniformARB_remap_index },
    {  8380, GetAttachedObjectsARB_remap_index },
    {  8659, GetHandleARB_remap_index },
-   { 29145, GetInfoLogARB_remap_index },
-   { 28401, GetObjectParameterfvARB_remap_index },
-   { 24255, GetObjectParameterivARB_remap_index },
-   { 25588, GetShaderSourceARB_remap_index },
-   { 24869, GetUniformLocationARB_remap_index },
-   { 21037, GetUniformfvARB_remap_index },
-   { 11153, GetUniformivARB_remap_index },
-   { 17683, LinkProgramARB_remap_index },
-   { 17741, ShaderSourceARB_remap_index },
+   { 29221, GetInfoLogARB_remap_index },
+   { 28477, GetObjectParameterfvARB_remap_index },
+   { 24331, GetObjectParameterivARB_remap_index },
+   { 25664, GetShaderSourceARB_remap_index },
+   { 24945, GetUniformLocationARB_remap_index },
+   { 21070, GetUniformfvARB_remap_index },
+   { 11186, GetUniformivARB_remap_index },
+   { 17716, LinkProgramARB_remap_index },
+   { 17774, ShaderSourceARB_remap_index },
    {  6554, Uniform1fARB_remap_index },
-   { 26369, Uniform1fvARB_remap_index },
-   { 19496, Uniform1iARB_remap_index },
-   { 18499, Uniform1ivARB_remap_index },
+   { 26445, Uniform1fvARB_remap_index },
+   { 19529, Uniform1iARB_remap_index },
+   { 18532, Uniform1ivARB_remap_index },
    {  2003, Uniform2fARB_remap_index },
-   { 12581, Uniform2fvARB_remap_index },
-   { 23249, Uniform2iARB_remap_index },
+   { 12614, Uniform2fvARB_remap_index },
+   { 23325, Uniform2iARB_remap_index },
    {  2123, Uniform2ivARB_remap_index },
-   { 16354, Uniform3fARB_remap_index },
+   { 16387, Uniform3fARB_remap_index },
    {  8410, Uniform3fvARB_remap_index },
    {  5512, Uniform3iARB_remap_index },
-   { 14909, Uniform3ivARB_remap_index },
-   { 16800, Uniform4fARB_remap_index },
-   { 20901, Uniform4fvARB_remap_index },
-   { 22041, Uniform4iARB_remap_index },
-   { 18051, Uniform4ivARB_remap_index },
+   { 14942, Uniform3ivARB_remap_index },
+   { 16833, Uniform4fARB_remap_index },
+   { 20934, Uniform4fvARB_remap_index },
+   { 22117, Uniform4iARB_remap_index },
+   { 18084, Uniform4ivARB_remap_index },
    {  7324, UniformMatrix2fvARB_remap_index },
    {    17, UniformMatrix3fvARB_remap_index },
    {  2475, UniformMatrix4fvARB_remap_index },
-   { 22474, UseProgramObjectARB_remap_index },
-   { 13016, ValidateProgramARB_remap_index },
-   { 18853, BindAttribLocationARB_remap_index },
+   { 22550, UseProgramObjectARB_remap_index },
+   { 13049, ValidateProgramARB_remap_index },
+   { 18886, BindAttribLocationARB_remap_index },
    {  4346, GetActiveAttribARB_remap_index },
-   { 14590, GetAttribLocationARB_remap_index },
-   { 26108, DrawBuffersARB_remap_index },
-   { 11636, RenderbufferStorageMultisample_remap_index },
-   { 16848, FlushMappedBufferRange_remap_index },
-   { 24672, MapBufferRange_remap_index },
-   { 14465, BindVertexArray_remap_index },
-   { 12875, GenVertexArrays_remap_index },
-   { 26883, CopyBufferSubData_remap_index },
-   { 27662, ClientWaitSync_remap_index },
+   { 14623, GetAttribLocationARB_remap_index },
+   { 26184, DrawBuffersARB_remap_index },
+   { 11669, RenderbufferStorageMultisample_remap_index },
+   { 16881, FlushMappedBufferRange_remap_index },
+   { 24748, MapBufferRange_remap_index },
+   { 14498, BindVertexArray_remap_index },
+   { 12908, GenVertexArrays_remap_index },
+   { 26959, CopyBufferSubData_remap_index },
+   { 27738, ClientWaitSync_remap_index },
    {  2394, DeleteSync_remap_index },
    {  6221, FenceSync_remap_index },
-   { 13387, GetInteger64v_remap_index },
-   { 19952, GetSynciv_remap_index },
-   { 26047, IsSync_remap_index },
+   { 13420, GetInteger64v_remap_index },
+   { 19985, GetSynciv_remap_index },
+   { 26123, IsSync_remap_index },
    {  8328, WaitSync_remap_index },
    {  3363, DrawElementsBaseVertex_remap_index },
-   { 27126, DrawRangeElementsBaseVertex_remap_index },
-   { 23393, MultiDrawElementsBaseVertex_remap_index },
+   { 27202, DrawRangeElementsBaseVertex_remap_index },
+   { 23469, MultiDrawElementsBaseVertex_remap_index },
    {  4711, PolygonOffsetEXT_remap_index },
-   { 20537, GetPixelTexGenParameterfvSGIS_remap_index },
+   { 20570, GetPixelTexGenParameterfvSGIS_remap_index },
    {  3895, GetPixelTexGenParameterivSGIS_remap_index },
-   { 20270, PixelTexGenParameterfSGIS_remap_index },
+   { 20303, PixelTexGenParameterfSGIS_remap_index },
    {   580, PixelTexGenParameterfvSGIS_remap_index },
-   { 11191, PixelTexGenParameteriSGIS_remap_index },
-   { 12152, PixelTexGenParameterivSGIS_remap_index },
-   { 14553, SampleMaskSGIS_remap_index },
-   { 17485, SamplePatternSGIS_remap_index },
-   { 23322, ColorPointerEXT_remap_index },
-   { 15468, EdgeFlagPointerEXT_remap_index },
+   { 11224, PixelTexGenParameteriSGIS_remap_index },
+   { 12185, PixelTexGenParameterivSGIS_remap_index },
+   { 14586, SampleMaskSGIS_remap_index },
+   { 17518, SamplePatternSGIS_remap_index },
+   { 23398, ColorPointerEXT_remap_index },
+   { 15501, EdgeFlagPointerEXT_remap_index },
    {  5166, IndexPointerEXT_remap_index },
    {  5246, NormalPointerEXT_remap_index },
-   { 13981, TexCoordPointerEXT_remap_index },
+   { 14014, TexCoordPointerEXT_remap_index },
    {  6016, VertexPointerEXT_remap_index },
    {  3165, PointParameterfEXT_remap_index },
    {  6861, PointParameterfvEXT_remap_index },
-   { 28499, LockArraysEXT_remap_index },
-   { 13080, UnlockArraysEXT_remap_index },
+   { 28575, LockArraysEXT_remap_index },
+   { 13113, UnlockArraysEXT_remap_index },
    {  7868, CullParameterdvEXT_remap_index },
    { 10359, CullParameterfvEXT_remap_index },
    {  1151, SecondaryColor3bEXT_remap_index },
    {  7020, SecondaryColor3bvEXT_remap_index },
    {  9238, SecondaryColor3dEXT_remap_index },
-   { 22647, SecondaryColor3dvEXT_remap_index },
-   { 24918, SecondaryColor3fEXT_remap_index },
-   { 16034, SecondaryColor3fvEXT_remap_index },
+   { 22723, SecondaryColor3dvEXT_remap_index },
+   { 24994, SecondaryColor3fEXT_remap_index },
+   { 16067, SecondaryColor3fvEXT_remap_index },
    {   426, SecondaryColor3iEXT_remap_index },
-   { 14291, SecondaryColor3ivEXT_remap_index },
+   { 14324, SecondaryColor3ivEXT_remap_index },
    {  8896, SecondaryColor3sEXT_remap_index },
-   { 27326, SecondaryColor3svEXT_remap_index },
-   { 24091, SecondaryColor3ubEXT_remap_index },
-   { 18744, SecondaryColor3ubvEXT_remap_index },
-   { 11386, SecondaryColor3uiEXT_remap_index },
-   { 20157, SecondaryColor3uivEXT_remap_index },
-   { 22859, SecondaryColor3usEXT_remap_index },
-   { 11459, SecondaryColor3usvEXT_remap_index },
+   { 27402, SecondaryColor3svEXT_remap_index },
+   { 24167, SecondaryColor3ubEXT_remap_index },
+   { 18777, SecondaryColor3ubvEXT_remap_index },
+   { 11419, SecondaryColor3uiEXT_remap_index },
+   { 20190, SecondaryColor3uivEXT_remap_index },
+   { 22935, SecondaryColor3usEXT_remap_index },
+   { 11492, SecondaryColor3usvEXT_remap_index },
    { 10435, SecondaryColorPointerEXT_remap_index },
-   { 22708, MultiDrawArraysEXT_remap_index },
-   { 18434, MultiDrawElementsEXT_remap_index },
-   { 18629, FogCoordPointerEXT_remap_index },
+   { 22784, MultiDrawArraysEXT_remap_index },
+   { 18467, MultiDrawElementsEXT_remap_index },
+   { 18662, FogCoordPointerEXT_remap_index },
    {  4044, FogCoorddEXT_remap_index },
-   { 27900, FogCoorddvEXT_remap_index },
+   { 27976, FogCoorddvEXT_remap_index },
    {  4136, FogCoordfEXT_remap_index },
-   { 24014, FogCoordfvEXT_remap_index },
-   { 16752, PixelTexGenSGIX_remap_index },
-   { 24599, BlendFuncSeparateEXT_remap_index },
+   { 24090, FogCoordfvEXT_remap_index },
+   { 16785, PixelTexGenSGIX_remap_index },
+   { 24675, BlendFuncSeparateEXT_remap_index },
    {  5928, FlushVertexArrayRangeNV_remap_index },
    {  4660, VertexArrayRangeNV_remap_index },
-   { 24983, CombinerInputNV_remap_index },
+   { 25059, CombinerInputNV_remap_index },
    {  1946, CombinerOutputNV_remap_index },
-   { 27479, CombinerParameterfNV_remap_index },
+   { 27555, CombinerParameterfNV_remap_index },
    {  4580, CombinerParameterfvNV_remap_index },
-   { 19702, CombinerParameteriNV_remap_index },
-   { 28870, CombinerParameterivNV_remap_index },
+   { 19735, CombinerParameteriNV_remap_index },
+   { 28946, CombinerParameterivNV_remap_index },
    {  6298, FinalCombinerInputNV_remap_index },
    {  8725, GetCombinerInputParameterfvNV_remap_index },
-   { 28707, GetCombinerInputParameterivNV_remap_index },
+   { 28783, GetCombinerInputParameterivNV_remap_index },
    {  6097, GetCombinerOutputParameterfvNV_remap_index },
-   { 12113, GetCombinerOutputParameterivNV_remap_index },
+   { 12146, GetCombinerOutputParameterivNV_remap_index },
    {  5673, GetFinalCombinerInputParameterfvNV_remap_index },
-   { 21913, GetFinalCombinerInputParameterivNV_remap_index },
-   { 11131, ResizeBuffersMESA_remap_index },
+   { 21989, GetFinalCombinerInputParameterivNV_remap_index },
+   { 11164, ResizeBuffersMESA_remap_index },
    {  9842, WindowPos2dMESA_remap_index },
    {   944, WindowPos2dvMESA_remap_index },
-   { 29698, WindowPos2fMESA_remap_index },
+   { 29774, WindowPos2fMESA_remap_index },
    {  6965, WindowPos2fvMESA_remap_index },
-   { 15981, WindowPos2iMESA_remap_index },
-   { 17958, WindowPos2ivMESA_remap_index },
-   { 18533, WindowPos2sMESA_remap_index },
+   { 16014, WindowPos2iMESA_remap_index },
+   { 17991, WindowPos2ivMESA_remap_index },
+   { 18566, WindowPos2sMESA_remap_index },
    {  4916, WindowPos2svMESA_remap_index },
    {  6790, WindowPos3dMESA_remap_index },
-   { 12360, WindowPos3dvMESA_remap_index },
+   { 12393, WindowPos3dvMESA_remap_index },
    {   472, WindowPos3fMESA_remap_index },
-   { 13141, WindowPos3fvMESA_remap_index },
-   { 21208, WindowPos3iMESA_remap_index },
-   { 26828, WindowPos3ivMESA_remap_index },
-   { 16498, WindowPos3sMESA_remap_index },
-   { 28156, WindowPos3svMESA_remap_index },
+   { 13174, WindowPos3fvMESA_remap_index },
+   { 21284, WindowPos3iMESA_remap_index },
+   { 26904, WindowPos3ivMESA_remap_index },
+   { 16531, WindowPos3sMESA_remap_index },
+   { 28232, WindowPos3svMESA_remap_index },
    {  9793, WindowPos4dMESA_remap_index },
-   { 14994, WindowPos4dvMESA_remap_index },
-   { 12319, WindowPos4fMESA_remap_index },
-   { 27233, WindowPos4fvMESA_remap_index },
-   { 26981, WindowPos4iMESA_remap_index },
-   { 10970, WindowPos4ivMESA_remap_index },
-   { 16631, WindowPos4sMESA_remap_index },
+   { 15027, WindowPos4dvMESA_remap_index },
+   { 12352, WindowPos4fMESA_remap_index },
+   { 27309, WindowPos4fvMESA_remap_index },
+   { 27057, WindowPos4iMESA_remap_index },
+   { 11003, WindowPos4ivMESA_remap_index },
+   { 16664, WindowPos4sMESA_remap_index },
    {  2857, WindowPos4svMESA_remap_index },
-   { 23757, MultiModeDrawArraysIBM_remap_index },
-   { 25701, MultiModeDrawElementsIBM_remap_index },
-   { 10781, DeleteFencesNV_remap_index },
-   { 24830, FinishFenceNV_remap_index },
+   { 23833, MultiModeDrawArraysIBM_remap_index },
+   { 25777, MultiModeDrawElementsIBM_remap_index },
+   { 10814, DeleteFencesNV_remap_index },
+   { 24906, FinishFenceNV_remap_index },
    {  3287, GenFencesNV_remap_index },
-   { 14974, GetFenceivNV_remap_index },
+   { 15007, GetFenceivNV_remap_index },
    {  7257, IsFenceNV_remap_index },
-   { 12040, SetFenceNV_remap_index },
+   { 12073, SetFenceNV_remap_index },
    {  3744, TestFenceNV_remap_index },
-   { 28127, AreProgramsResidentNV_remap_index },
-   { 27521, BindProgramNV_remap_index },
-   { 22942, DeleteProgramsNV_remap_index },
-   { 18962, ExecuteProgramNV_remap_index },
-   { 29591, GenProgramsNV_remap_index },
-   { 20616, GetProgramParameterdvNV_remap_index },
+   { 28203, AreProgramsResidentNV_remap_index },
+   { 27597, BindProgramNV_remap_index },
+   { 23018, DeleteProgramsNV_remap_index },
+   { 18995, ExecuteProgramNV_remap_index },
+   { 29667, GenProgramsNV_remap_index },
+   { 20649, GetProgramParameterdvNV_remap_index },
    {  9300, GetProgramParameterfvNV_remap_index },
-   { 23296, GetProgramStringNV_remap_index },
-   { 21602, GetProgramivNV_remap_index },
-   { 20850, GetTrackMatrixivNV_remap_index },
-   { 23092, GetVertexAttribPointervNV_remap_index },
-   { 21846, GetVertexAttribdvNV_remap_index },
-   { 16471, GetVertexAttribfvNV_remap_index },
-   { 16162, GetVertexAttribivNV_remap_index },
-   { 16878, IsProgramNV_remap_index },
+   { 23372, GetProgramStringNV_remap_index },
+   { 21678, GetProgramivNV_remap_index },
+   { 20883, GetTrackMatrixivNV_remap_index },
+   { 23168, GetVertexAttribPointervNV_remap_index },
+   { 21922, GetVertexAttribdvNV_remap_index },
+   { 16504, GetVertexAttribfvNV_remap_index },
+   { 16195, GetVertexAttribivNV_remap_index },
+   { 16911, IsProgramNV_remap_index },
    {  8306, LoadProgramNV_remap_index },
-   { 24695, ProgramParameters4dvNV_remap_index },
-   { 21532, ProgramParameters4fvNV_remap_index },
-   { 18262, RequestResidentProgramsNV_remap_index },
-   { 19680, TrackMatrixNV_remap_index },
-   { 28684, VertexAttrib1dNV_remap_index },
-   { 11981, VertexAttrib1dvNV_remap_index },
-   { 25233, VertexAttrib1fNV_remap_index },
+   { 24771, ProgramParameters4dvNV_remap_index },
+   { 21608, ProgramParameters4fvNV_remap_index },
+   { 18295, RequestResidentProgramsNV_remap_index },
+   { 19713, TrackMatrixNV_remap_index },
+   { 28760, VertexAttrib1dNV_remap_index },
+   { 12014, VertexAttrib1dvNV_remap_index },
+   { 25309, VertexAttrib1fNV_remap_index },
    {  2245, VertexAttrib1fvNV_remap_index },
-   { 27290, VertexAttrib1sNV_remap_index },
-   { 13214, VertexAttrib1svNV_remap_index },
+   { 27366, VertexAttrib1sNV_remap_index },
+   { 13247, VertexAttrib1svNV_remap_index },
    {  4251, VertexAttrib2dNV_remap_index },
-   { 11896, VertexAttrib2dvNV_remap_index },
-   { 17717, VertexAttrib2fNV_remap_index },
-   { 11507, VertexAttrib2fvNV_remap_index },
+   { 11929, VertexAttrib2dvNV_remap_index },
+   { 17750, VertexAttrib2fNV_remap_index },
+   { 11540, VertexAttrib2fvNV_remap_index },
    {  5076, VertexAttrib2sNV_remap_index },
-   { 16552, VertexAttrib2svNV_remap_index },
+   { 16585, VertexAttrib2svNV_remap_index },
    {  9990, VertexAttrib3dNV_remap_index },
-   { 28377, VertexAttrib3dvNV_remap_index },
+   { 28453, VertexAttrib3dvNV_remap_index },
    {  9112, VertexAttrib3fNV_remap_index },
-   { 21873, VertexAttrib3fvNV_remap_index },
-   { 25208, VertexAttrib3sNV_remap_index },
-   { 20877, VertexAttrib3svNV_remap_index },
-   { 25675, VertexAttrib4dNV_remap_index },
-   { 29628, VertexAttrib4dvNV_remap_index },
+   { 21949, VertexAttrib3fvNV_remap_index },
+   { 25284, VertexAttrib3sNV_remap_index },
+   { 20910, VertexAttrib3svNV_remap_index },
+   { 25751, VertexAttrib4dNV_remap_index },
+   { 29704, VertexAttrib4dvNV_remap_index },
    {  3945, VertexAttrib4fNV_remap_index },
    {  8356, VertexAttrib4fvNV_remap_index },
-   { 23641, VertexAttrib4sNV_remap_index },
+   { 23717, VertexAttrib4sNV_remap_index },
    {  1293, VertexAttrib4svNV_remap_index },
    {  4409, VertexAttrib4ubNV_remap_index },
    {   734, VertexAttrib4ubvNV_remap_index },
-   { 19142, VertexAttribPointerNV_remap_index },
+   { 19175, VertexAttribPointerNV_remap_index },
    {  2097, VertexAttribs1dvNV_remap_index },
-   { 16576, VertexAttribs1fvNV_remap_index },
-   { 29428, VertexAttribs1svNV_remap_index },
+   { 16609, VertexAttribs1fvNV_remap_index },
+   { 29504, VertexAttribs1svNV_remap_index },
    {  9137, VertexAttribs2dvNV_remap_index },
-   { 22435, VertexAttribs2fvNV_remap_index },
-   { 15494, VertexAttribs2svNV_remap_index },
+   { 22511, VertexAttribs2fvNV_remap_index },
+   { 15527, VertexAttribs2svNV_remap_index },
    {  4608, VertexAttribs3dvNV_remap_index },
    {  1977, VertexAttribs3fvNV_remap_index },
-   { 26576, VertexAttribs3svNV_remap_index },
-   { 23731, VertexAttribs4dvNV_remap_index },
+   { 26652, VertexAttribs3svNV_remap_index },
+   { 23807, VertexAttribs4dvNV_remap_index },
    {  4634, VertexAttribs4fvNV_remap_index },
-   { 29215, VertexAttribs4svNV_remap_index },
-   { 26324, VertexAttribs4ubvNV_remap_index },
-   { 23833, GetTexBumpParameterfvATI_remap_index },
-   { 29469, GetTexBumpParameterivATI_remap_index },
-   { 16216, TexBumpParameterfvATI_remap_index },
-   { 18133, TexBumpParameterivATI_remap_index },
-   { 13760, AlphaFragmentOp1ATI_remap_index },
+   { 29291, VertexAttribs4svNV_remap_index },
+   { 26400, VertexAttribs4ubvNV_remap_index },
+   { 23909, GetTexBumpParameterfvATI_remap_index },
+   { 29545, GetTexBumpParameterivATI_remap_index },
+   { 16249, TexBumpParameterfvATI_remap_index },
+   { 18166, TexBumpParameterivATI_remap_index },
+   { 13793, AlphaFragmentOp1ATI_remap_index },
    {  9652, AlphaFragmentOp2ATI_remap_index },
-   { 21789, AlphaFragmentOp3ATI_remap_index },
-   { 26503, BeginFragmentShaderATI_remap_index },
-   { 27720, BindFragmentShaderATI_remap_index },
-   { 21006, ColorFragmentOp1ATI_remap_index },
+   { 21865, AlphaFragmentOp3ATI_remap_index },
+   { 26579, BeginFragmentShaderATI_remap_index },
+   { 27796, BindFragmentShaderATI_remap_index },
+   { 21039, ColorFragmentOp1ATI_remap_index },
    {  3823, ColorFragmentOp2ATI_remap_index },
-   { 28022, ColorFragmentOp3ATI_remap_index },
+   { 28098, ColorFragmentOp3ATI_remap_index },
    {  4753, DeleteFragmentShaderATI_remap_index },
-   { 29652, EndFragmentShaderATI_remap_index },
-   { 28898, GenFragmentShadersATI_remap_index },
-   { 22566, PassTexCoordATI_remap_index },
+   { 29728, EndFragmentShaderATI_remap_index },
+   { 28974, GenFragmentShadersATI_remap_index },
+   { 22642, PassTexCoordATI_remap_index },
    {  5996, SampleMapATI_remap_index },
    {  5769, SetFragmentShaderConstantATI_remap_index },
    {   319, PointParameteriNV_remap_index },
-   { 12521, PointParameterivNV_remap_index },
-   { 25514, ActiveStencilFaceEXT_remap_index },
-   { 24355, BindVertexArrayAPPLE_remap_index },
+   { 12554, PointParameterivNV_remap_index },
+   { 25590, ActiveStencilFaceEXT_remap_index },
+   { 24431, BindVertexArrayAPPLE_remap_index },
    {  2522, DeleteVertexArraysAPPLE_remap_index },
-   { 15833, GenVertexArraysAPPLE_remap_index },
-   { 20681, IsVertexArrayAPPLE_remap_index },
+   { 15866, GenVertexArraysAPPLE_remap_index },
+   { 20714, IsVertexArrayAPPLE_remap_index },
    {   775, GetProgramNamedParameterdvNV_remap_index },
    {  3128, GetProgramNamedParameterfvNV_remap_index },
-   { 23864, ProgramNamedParameter4dNV_remap_index },
-   { 12796, ProgramNamedParameter4dvNV_remap_index },
+   { 23940, ProgramNamedParameter4dNV_remap_index },
+   { 12829, ProgramNamedParameter4dvNV_remap_index },
    {  7893, ProgramNamedParameter4fNV_remap_index },
    { 10400, ProgramNamedParameter4fvNV_remap_index },
-   { 21511, DepthBoundsEXT_remap_index },
+   { 21587, DepthBoundsEXT_remap_index },
    {  1043, BlendEquationSeparateEXT_remap_index },
-   { 12915, BindFramebufferEXT_remap_index },
-   { 22753, BindRenderbufferEXT_remap_index },
+   { 12948, BindFramebufferEXT_remap_index },
+   { 22829, BindRenderbufferEXT_remap_index },
    {  8575, CheckFramebufferStatusEXT_remap_index },
-   { 19971, DeleteFramebuffersEXT_remap_index },
-   { 28279, DeleteRenderbuffersEXT_remap_index },
-   { 11920, FramebufferRenderbufferEXT_remap_index },
-   { 12057, FramebufferTexture1DEXT_remap_index },
+   { 20004, DeleteFramebuffersEXT_remap_index },
+   { 28355, DeleteRenderbuffersEXT_remap_index },
+   { 11953, FramebufferRenderbufferEXT_remap_index },
+   { 12090, FramebufferTexture1DEXT_remap_index },
    { 10228, FramebufferTexture2DEXT_remap_index },
    {  9895, FramebufferTexture3DEXT_remap_index },
-   { 20573, GenFramebuffersEXT_remap_index },
-   { 15380, GenRenderbuffersEXT_remap_index },
+   { 20606, GenFramebuffersEXT_remap_index },
+   { 15413, GenRenderbuffersEXT_remap_index },
    {  5715, GenerateMipmapEXT_remap_index },
-   { 19202, GetFramebufferAttachmentParameterivEXT_remap_index },
-   { 28804, GetRenderbufferParameterivEXT_remap_index },
-   { 18013, IsFramebufferEXT_remap_index },
-   { 29551, IsRenderbufferEXT_remap_index },
+   { 19235, GetFramebufferAttachmentParameterivEXT_remap_index },
+   { 28880, GetRenderbufferParameterivEXT_remap_index },
+   { 18046, IsFramebufferEXT_remap_index },
+   { 29627, IsRenderbufferEXT_remap_index },
    {  7204, RenderbufferStorageEXT_remap_index },
    {   651, BlitFramebufferEXT_remap_index },
-   { 12615, BufferParameteriAPPLE_remap_index },
-   { 16910, FlushMappedBufferRangeAPPLE_remap_index },
+   { 12648, BufferParameteriAPPLE_remap_index },
+   { 16943, FlushMappedBufferRangeAPPLE_remap_index },
    {  2701, FramebufferTextureLayerEXT_remap_index },
    {  8277, ColorMaskIndexedEXT_remap_index },
-   { 23180, DisableIndexedEXT_remap_index },
-   { 23488, EnableIndexedEXT_remap_index },
-   { 19173, GetBooleanIndexedvEXT_remap_index },
+   { 23256, DisableIndexedEXT_remap_index },
+   { 23564, EnableIndexedEXT_remap_index },
+   { 19206, GetBooleanIndexedvEXT_remap_index },
    {  9685, GetIntegerIndexedvEXT_remap_index },
-   { 20047, IsEnabledIndexedEXT_remap_index },
+   { 20080, IsEnabledIndexedEXT_remap_index },
    {  4074, BeginConditionalRenderNV_remap_index },
-   { 22539, EndConditionalRenderNV_remap_index },
-   { 26225, ProvokingVertexEXT_remap_index },
+   { 22615, EndConditionalRenderNV_remap_index },
+   { 26301, ProvokingVertexEXT_remap_index },
    {  9521, GetTexParameterPointervAPPLE_remap_index },
    {  4436, TextureRangeAPPLE_remap_index },
-   { 25540, StencilFuncSeparateATI_remap_index },
-   { 15900, ProgramEnvParameters4fvEXT_remap_index },
-   { 15118, ProgramLocalParameters4fvEXT_remap_index },
-   { 12449, GetQueryObjecti64vEXT_remap_index },
+   { 25616, StencilFuncSeparateATI_remap_index },
+   { 15933, ProgramEnvParameters4fvEXT_remap_index },
+   { 15151, ProgramLocalParameters4fvEXT_remap_index },
+   { 12482, GetQueryObjecti64vEXT_remap_index },
    {  9163, GetQueryObjectui64vEXT_remap_index },
+   { 21108, EGLImageTargetRenderbufferStorageOES_remap_index },
+   { 10753, EGLImageTargetTexture2DOES_remap_index },
    {    -1, -1 }
 };
 
@@ -4770,8 +4780,8 @@ static const struct gl_function_remap MESA_alt_functions[] = {
    /* from GL_EXT_blend_minmax */
    {  9952, _gloffset_BlendEquation },
    /* from GL_EXT_color_subtable */
-   { 15016, _gloffset_ColorSubTable },
-   { 28211, _gloffset_CopyColorSubTable },
+   { 15049, _gloffset_ColorSubTable },
+   { 28287, _gloffset_CopyColorSubTable },
    /* from GL_EXT_convolution */
    {   213, _gloffset_ConvolutionFilter1D },
    {  2284, _gloffset_CopyConvolutionFilter1D },
@@ -4779,62 +4789,62 @@ static const struct gl_function_remap MESA_alt_functions[] = {
    {  7553, _gloffset_ConvolutionFilter2D },
    {  7719, _gloffset_ConvolutionParameteriv },
    {  8179, _gloffset_ConvolutionParameterfv },
-   { 18161, _gloffset_GetSeparableFilter },
-   { 21262, _gloffset_SeparableFilter2D },
-   { 22091, _gloffset_ConvolutionParameteri },
-   { 22214, _gloffset_ConvolutionParameterf },
-   { 23667, _gloffset_GetConvolutionParameterfv },
-   { 24521, _gloffset_GetConvolutionFilter },
-   { 26765, _gloffset_CopyConvolutionFilter2D },
+   { 18194, _gloffset_GetSeparableFilter },
+   { 21338, _gloffset_SeparableFilter2D },
+   { 22167, _gloffset_ConvolutionParameteri },
+   { 22290, _gloffset_ConvolutionParameterf },
+   { 23743, _gloffset_GetConvolutionParameterfv },
+   { 24597, _gloffset_GetConvolutionFilter },
+   { 26841, _gloffset_CopyConvolutionFilter2D },
    /* from GL_EXT_copy_texture */
-   { 13274, _gloffset_CopyTexSubImage3D },
-   { 14756, _gloffset_CopyTexImage2D },
-   { 21699, _gloffset_CopyTexImage1D },
-   { 24202, _gloffset_CopyTexSubImage2D },
-   { 26403, _gloffset_CopyTexSubImage1D },
+   { 13307, _gloffset_CopyTexSubImage3D },
+   { 14789, _gloffset_CopyTexImage2D },
+   { 21775, _gloffset_CopyTexImage1D },
+   { 24278, _gloffset_CopyTexSubImage2D },
+   { 26479, _gloffset_CopyTexSubImage1D },
    /* from GL_EXT_draw_range_elements */
    {  8462, _gloffset_DrawRangeElements },
    /* from GL_EXT_histogram */
    {   812, _gloffset_Histogram },
    {  3088, _gloffset_ResetHistogram },
    {  8834, _gloffset_GetMinmax },
-   { 13608, _gloffset_GetHistogramParameterfv },
-   { 21624, _gloffset_GetMinmaxParameteriv },
-   { 23557, _gloffset_ResetMinmax },
-   { 24418, _gloffset_GetHistogramParameteriv },
-   { 25474, _gloffset_GetHistogram },
-   { 27836, _gloffset_Minmax },
-   { 29298, _gloffset_GetMinmaxParameterfv },
+   { 13641, _gloffset_GetHistogramParameterfv },
+   { 21700, _gloffset_GetMinmaxParameteriv },
+   { 23633, _gloffset_ResetMinmax },
+   { 24494, _gloffset_GetHistogramParameteriv },
+   { 25550, _gloffset_GetHistogram },
+   { 27912, _gloffset_Minmax },
+   { 29374, _gloffset_GetMinmaxParameterfv },
    /* from GL_EXT_paletted_texture */
    {  7415, _gloffset_ColorTable },
-   { 13454, _gloffset_GetColorTable },
-   { 20320, _gloffset_GetColorTableParameterfv },
-   { 22270, _gloffset_GetColorTableParameteriv },
+   { 13487, _gloffset_GetColorTable },
+   { 20353, _gloffset_GetColorTableParameterfv },
+   { 22346, _gloffset_GetColorTableParameteriv },
    /* from GL_EXT_subtexture */
    {  6136, _gloffset_TexSubImage1D },
    {  9448, _gloffset_TexSubImage2D },
    /* from GL_EXT_texture3D */
    {  1658, _gloffset_TexImage3D },
-   { 20089, _gloffset_TexSubImage3D },
+   { 20122, _gloffset_TexSubImage3D },
    /* from GL_EXT_texture_object */
    {  2964, _gloffset_PrioritizeTextures },
    {  6585, _gloffset_AreTexturesResident },
-   { 12005, _gloffset_GenTextures },
-   { 13940, _gloffset_DeleteTextures },
-   { 17191, _gloffset_IsTexture },
-   { 26468, _gloffset_BindTexture },
+   { 12038, _gloffset_GenTextures },
+   { 13973, _gloffset_DeleteTextures },
+   { 17224, _gloffset_IsTexture },
+   { 26544, _gloffset_BindTexture },
    /* from GL_EXT_vertex_array */
-   { 21451, _gloffset_ArrayElement },
-   { 27424, _gloffset_GetPointerv },
-   { 28925, _gloffset_DrawArrays },
+   { 21527, _gloffset_ArrayElement },
+   { 27500, _gloffset_GetPointerv },
+   { 29001, _gloffset_DrawArrays },
    /* from GL_SGI_color_table */
    {  6703, _gloffset_ColorTableParameteriv },
    {  7415, _gloffset_ColorTable },
-   { 13454, _gloffset_GetColorTable },
-   { 13564, _gloffset_CopyColorTable },
-   { 17052, _gloffset_ColorTableParameterfv },
-   { 20320, _gloffset_GetColorTableParameterfv },
-   { 22270, _gloffset_GetColorTableParameteriv },
+   { 13487, _gloffset_GetColorTable },
+   { 13597, _gloffset_CopyColorTable },
+   { 17085, _gloffset_ColorTableParameterfv },
+   { 20353, _gloffset_GetColorTableParameterfv },
+   { 22346, _gloffset_GetColorTableParameteriv },
    /* from GL_VERSION_1_3 */
    {   381, _gloffset_MultiTexCoord3sARB },
    {   613, _gloffset_ActiveTextureARB },
@@ -4847,29 +4857,29 @@ static const struct gl_function_remap MESA_alt_functions[] = {
    {  9714, _gloffset_MultiTexCoord4sARB },
    { 10314, _gloffset_MultiTexCoord2dvARB },
    { 10696, _gloffset_MultiTexCoord1svARB },
-   { 10992, _gloffset_MultiTexCoord3svARB },
-   { 11053, _gloffset_MultiTexCoord4iARB },
-   { 11776, _gloffset_MultiTexCoord3iARB },
-   { 12478, _gloffset_MultiTexCoord1dARB },
-   { 12644, _gloffset_MultiTexCoord3dvARB },
-   { 13808, _gloffset_MultiTexCoord3ivARB },
-   { 13853, _gloffset_MultiTexCoord2sARB },
-   { 15073, _gloffset_MultiTexCoord4ivARB },
-   { 16702, _gloffset_ClientActiveTextureARB },
-   { 18918, _gloffset_MultiTexCoord2dARB },
-   { 19322, _gloffset_MultiTexCoord4dvARB },
-   { 19608, _gloffset_MultiTexCoord4fvARB },
-   { 20461, _gloffset_MultiTexCoord3fARB },
-   { 22798, _gloffset_MultiTexCoord4dARB },
-   { 23002, _gloffset_MultiTexCoord1sARB },
-   { 23204, _gloffset_MultiTexCoord1dvARB },
-   { 24046, _gloffset_MultiTexCoord1ivARB },
-   { 24139, _gloffset_MultiTexCoord2ivARB },
-   { 24478, _gloffset_MultiTexCoord1iARB },
-   { 25749, _gloffset_MultiTexCoord4svARB },
-   { 26267, _gloffset_MultiTexCoord1fARB },
-   { 26530, _gloffset_MultiTexCoord4fARB },
-   { 28759, _gloffset_MultiTexCoord2fvARB },
+   { 11025, _gloffset_MultiTexCoord3svARB },
+   { 11086, _gloffset_MultiTexCoord4iARB },
+   { 11809, _gloffset_MultiTexCoord3iARB },
+   { 12511, _gloffset_MultiTexCoord1dARB },
+   { 12677, _gloffset_MultiTexCoord3dvARB },
+   { 13841, _gloffset_MultiTexCoord3ivARB },
+   { 13886, _gloffset_MultiTexCoord2sARB },
+   { 15106, _gloffset_MultiTexCoord4ivARB },
+   { 16735, _gloffset_ClientActiveTextureARB },
+   { 18951, _gloffset_MultiTexCoord2dARB },
+   { 19355, _gloffset_MultiTexCoord4dvARB },
+   { 19641, _gloffset_MultiTexCoord4fvARB },
+   { 20494, _gloffset_MultiTexCoord3fARB },
+   { 22874, _gloffset_MultiTexCoord4dARB },
+   { 23078, _gloffset_MultiTexCoord1sARB },
+   { 23280, _gloffset_MultiTexCoord1dvARB },
+   { 24122, _gloffset_MultiTexCoord1ivARB },
+   { 24215, _gloffset_MultiTexCoord2ivARB },
+   { 24554, _gloffset_MultiTexCoord1iARB },
+   { 25825, _gloffset_MultiTexCoord4svARB },
+   { 26343, _gloffset_MultiTexCoord1fARB },
+   { 26606, _gloffset_MultiTexCoord4fARB },
+   { 28835, _gloffset_MultiTexCoord2fvARB },
    {    -1, -1 }
 };
 
@@ -4941,10 +4951,10 @@ static const struct gl_function_remap GL_ARB_map_buffer_range_functions[] = {
 #if defined(need_GL_ARB_matrix_palette)
 static const struct gl_function_remap GL_ARB_matrix_palette_functions[] = {
    {  3339, -1 }, /* MatrixIndexusvARB */
-   { 11597, -1 }, /* MatrixIndexuivARB */
-   { 12766, -1 }, /* MatrixIndexPointerARB */
-   { 17440, -1 }, /* CurrentPaletteMatrixARB */
-   { 20205, -1 }, /* MatrixIndexubvARB */
+   { 11630, -1 }, /* MatrixIndexuivARB */
+   { 12799, -1 }, /* MatrixIndexPointerARB */
+   { 17473, -1 }, /* CurrentPaletteMatrixARB */
+   { 20238, -1 }, /* MatrixIndexubvARB */
    {    -1, -1 }
 };
 #endif
@@ -5017,13 +5027,13 @@ static const struct gl_function_remap GL_ARB_vertex_blend_functions[] = {
    {  2226, -1 }, /* WeightubvARB */
    {  5603, -1 }, /* WeightivARB */
    {  9817, -1 }, /* WeightPointerARB */
-   { 12235, -1 }, /* WeightfvARB */
-   { 15520, -1 }, /* WeightbvARB */
-   { 18586, -1 }, /* WeightusvARB */
-   { 21188, -1 }, /* VertexBlendARB */
-   { 26351, -1 }, /* WeightsvARB */
-   { 28261, -1 }, /* WeightdvARB */
-   { 28959, -1 }, /* WeightuivARB */
+   { 12268, -1 }, /* WeightfvARB */
+   { 15553, -1 }, /* WeightbvARB */
+   { 18619, -1 }, /* WeightusvARB */
+   { 21264, -1 }, /* VertexBlendARB */
+   { 26427, -1 }, /* WeightsvARB */
+   { 28337, -1 }, /* WeightdvARB */
+   { 29035, -1 }, /* WeightuivARB */
    {    -1, -1 }
 };
 #endif
@@ -5121,8 +5131,8 @@ static const struct gl_function_remap GL_EXT_blend_minmax_functions[] = {
 
 #if defined(need_GL_EXT_color_subtable)
 static const struct gl_function_remap GL_EXT_color_subtable_functions[] = {
-   { 15016, _gloffset_ColorSubTable },
-   { 28211, _gloffset_CopyColorSubTable },
+   { 15049, _gloffset_ColorSubTable },
+   { 28287, _gloffset_CopyColorSubTable },
    {    -1, -1 }
 };
 #endif
@@ -5142,13 +5152,13 @@ static const struct gl_function_remap GL_EXT_convolution_functions[] = {
    {  7553, _gloffset_ConvolutionFilter2D },
    {  7719, _gloffset_ConvolutionParameteriv },
    {  8179, _gloffset_ConvolutionParameterfv },
-   { 18161, _gloffset_GetSeparableFilter },
-   { 21262, _gloffset_SeparableFilter2D },
-   { 22091, _gloffset_ConvolutionParameteri },
-   { 22214, _gloffset_ConvolutionParameterf },
-   { 23667, _gloffset_GetConvolutionParameterfv },
-   { 24521, _gloffset_GetConvolutionFilter },
-   { 26765, _gloffset_CopyConvolutionFilter2D },
+   { 18194, _gloffset_GetSeparableFilter },
+   { 21338, _gloffset_SeparableFilter2D },
+   { 22167, _gloffset_ConvolutionParameteri },
+   { 22290, _gloffset_ConvolutionParameterf },
+   { 23743, _gloffset_GetConvolutionParameterfv },
+   { 24597, _gloffset_GetConvolutionFilter },
+   { 26841, _gloffset_CopyConvolutionFilter2D },
    {    -1, -1 }
 };
 #endif
@@ -5156,38 +5166,38 @@ static const struct gl_function_remap GL_EXT_convolution_functions[] = {
 #if defined(need_GL_EXT_coordinate_frame)
 static const struct gl_function_remap GL_EXT_coordinate_frame_functions[] = {
    {  9332, -1 }, /* TangentPointerEXT */
-   { 11111, -1 }, /* Binormal3ivEXT */
-   { 11729, -1 }, /* Tangent3sEXT */
-   { 12831, -1 }, /* Tangent3fvEXT */
-   { 16452, -1 }, /* Tangent3dvEXT */
-   { 17138, -1 }, /* Binormal3bvEXT */
-   { 18214, -1 }, /* Binormal3dEXT */
-   { 20137, -1 }, /* Tangent3fEXT */
-   { 22163, -1 }, /* Binormal3sEXT */
-   { 22608, -1 }, /* Tangent3ivEXT */
-   { 22627, -1 }, /* Tangent3dEXT */
-   { 23431, -1 }, /* Binormal3svEXT */
-   { 23944, -1 }, /* Binormal3fEXT */
-   { 24796, -1 }, /* Binormal3dvEXT */
-   { 25971, -1 }, /* Tangent3iEXT */
-   { 27050, -1 }, /* Tangent3bvEXT */
-   { 27459, -1 }, /* Tangent3bEXT */
-   { 27984, -1 }, /* Binormal3fvEXT */
-   { 28658, -1 }, /* BinormalPointerEXT */
-   { 29063, -1 }, /* Tangent3svEXT */
-   { 29500, -1 }, /* Binormal3bEXT */
-   { 29677, -1 }, /* Binormal3iEXT */
+   { 11144, -1 }, /* Binormal3ivEXT */
+   { 11762, -1 }, /* Tangent3sEXT */
+   { 12864, -1 }, /* Tangent3fvEXT */
+   { 16485, -1 }, /* Tangent3dvEXT */
+   { 17171, -1 }, /* Binormal3bvEXT */
+   { 18247, -1 }, /* Binormal3dEXT */
+   { 20170, -1 }, /* Tangent3fEXT */
+   { 22239, -1 }, /* Binormal3sEXT */
+   { 22684, -1 }, /* Tangent3ivEXT */
+   { 22703, -1 }, /* Tangent3dEXT */
+   { 23507, -1 }, /* Binormal3svEXT */
+   { 24020, -1 }, /* Binormal3fEXT */
+   { 24872, -1 }, /* Binormal3dvEXT */
+   { 26047, -1 }, /* Tangent3iEXT */
+   { 27126, -1 }, /* Tangent3bvEXT */
+   { 27535, -1 }, /* Tangent3bEXT */
+   { 28060, -1 }, /* Binormal3fvEXT */
+   { 28734, -1 }, /* BinormalPointerEXT */
+   { 29139, -1 }, /* Tangent3svEXT */
+   { 29576, -1 }, /* Binormal3bEXT */
+   { 29753, -1 }, /* Binormal3iEXT */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_EXT_copy_texture)
 static const struct gl_function_remap GL_EXT_copy_texture_functions[] = {
-   { 13274, _gloffset_CopyTexSubImage3D },
-   { 14756, _gloffset_CopyTexImage2D },
-   { 21699, _gloffset_CopyTexImage1D },
-   { 24202, _gloffset_CopyTexSubImage2D },
-   { 26403, _gloffset_CopyTexSubImage1D },
+   { 13307, _gloffset_CopyTexSubImage3D },
+   { 14789, _gloffset_CopyTexImage2D },
+   { 21775, _gloffset_CopyTexImage1D },
+   { 24278, _gloffset_CopyTexSubImage2D },
+   { 26479, _gloffset_CopyTexSubImage1D },
    {    -1, -1 }
 };
 #endif
@@ -5260,13 +5270,13 @@ static const struct gl_function_remap GL_EXT_histogram_functions[] = {
    {   812, _gloffset_Histogram },
    {  3088, _gloffset_ResetHistogram },
    {  8834, _gloffset_GetMinmax },
-   { 13608, _gloffset_GetHistogramParameterfv },
-   { 21624, _gloffset_GetMinmaxParameteriv },
-   { 23557, _gloffset_ResetMinmax },
-   { 24418, _gloffset_GetHistogramParameteriv },
-   { 25474, _gloffset_GetHistogram },
-   { 27836, _gloffset_Minmax },
-   { 29298, _gloffset_GetMinmaxParameterfv },
+   { 13641, _gloffset_GetHistogramParameterfv },
+   { 21700, _gloffset_GetMinmaxParameteriv },
+   { 23633, _gloffset_ResetMinmax },
+   { 24494, _gloffset_GetHistogramParameteriv },
+   { 25550, _gloffset_GetHistogram },
+   { 27912, _gloffset_Minmax },
+   { 29374, _gloffset_GetMinmaxParameterfv },
    {    -1, -1 }
 };
 #endif
@@ -5280,16 +5290,16 @@ static const struct gl_function_remap GL_EXT_index_func_functions[] = {
 
 #if defined(need_GL_EXT_index_material)
 static const struct gl_function_remap GL_EXT_index_material_functions[] = {
-   { 18673, -1 }, /* IndexMaterialEXT */
+   { 18706, -1 }, /* IndexMaterialEXT */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_EXT_light_texture)
 static const struct gl_function_remap GL_EXT_light_texture_functions[] = {
-   { 23451, -1 }, /* ApplyTextureEXT */
-   { 23511, -1 }, /* TextureMaterialEXT */
-   { 23536, -1 }, /* TextureLightEXT */
+   { 23527, -1 }, /* ApplyTextureEXT */
+   { 23587, -1 }, /* TextureMaterialEXT */
+   { 23612, -1 }, /* TextureLightEXT */
    {    -1, -1 }
 };
 #endif
@@ -5311,9 +5321,9 @@ static const struct gl_function_remap GL_EXT_multisample_functions[] = {
 #if defined(need_GL_EXT_paletted_texture)
 static const struct gl_function_remap GL_EXT_paletted_texture_functions[] = {
    {  7415, _gloffset_ColorTable },
-   { 13454, _gloffset_GetColorTable },
-   { 20320, _gloffset_GetColorTableParameterfv },
-   { 22270, _gloffset_GetColorTableParameteriv },
+   { 13487, _gloffset_GetColorTable },
+   { 20353, _gloffset_GetColorTableParameterfv },
+   { 22346, _gloffset_GetColorTableParameteriv },
    {    -1, -1 }
 };
 #endif
@@ -5321,9 +5331,9 @@ static const struct gl_function_remap GL_EXT_paletted_texture_functions[] = {
 #if defined(need_GL_EXT_pixel_transform)
 static const struct gl_function_remap GL_EXT_pixel_transform_functions[] = {
    {  9573, -1 }, /* PixelTransformParameterfvEXT */
-   { 19287, -1 }, /* PixelTransformParameterfEXT */
-   { 19367, -1 }, /* PixelTransformParameteriEXT */
-   { 28622, -1 }, /* PixelTransformParameterivEXT */
+   { 19320, -1 }, /* PixelTransformParameterfEXT */
+   { 19400, -1 }, /* PixelTransformParameteriEXT */
+   { 28698, -1 }, /* PixelTransformParameterivEXT */
    {    -1, -1 }
 };
 #endif
@@ -5374,7 +5384,7 @@ static const struct gl_function_remap GL_EXT_subtexture_functions[] = {
 #if defined(need_GL_EXT_texture3D)
 static const struct gl_function_remap GL_EXT_texture3D_functions[] = {
    {  1658, _gloffset_TexImage3D },
-   { 20089, _gloffset_TexSubImage3D },
+   { 20122, _gloffset_TexSubImage3D },
    {    -1, -1 }
 };
 #endif
@@ -5390,17 +5400,17 @@ static const struct gl_function_remap GL_EXT_texture_array_functions[] = {
 static const struct gl_function_remap GL_EXT_texture_object_functions[] = {
    {  2964, _gloffset_PrioritizeTextures },
    {  6585, _gloffset_AreTexturesResident },
-   { 12005, _gloffset_GenTextures },
-   { 13940, _gloffset_DeleteTextures },
-   { 17191, _gloffset_IsTexture },
-   { 26468, _gloffset_BindTexture },
+   { 12038, _gloffset_GenTextures },
+   { 13973, _gloffset_DeleteTextures },
+   { 17224, _gloffset_IsTexture },
+   { 26544, _gloffset_BindTexture },
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_EXT_texture_perturb_normal)
 static const struct gl_function_remap GL_EXT_texture_perturb_normal_functions[] = {
-   { 12185, -1 }, /* TextureNormalEXT */
+   { 12218, -1 }, /* TextureNormalEXT */
    {    -1, -1 }
 };
 #endif
@@ -5415,18 +5425,18 @@ static const struct gl_function_remap GL_EXT_timer_query_functions[] = {
 #if defined(need_GL_EXT_vertex_array)
 /* functions defined in MESA_remap_table_functions are excluded */
 static const struct gl_function_remap GL_EXT_vertex_array_functions[] = {
-   { 21451, _gloffset_ArrayElement },
-   { 27424, _gloffset_GetPointerv },
-   { 28925, _gloffset_DrawArrays },
+   { 21527, _gloffset_ArrayElement },
+   { 27500, _gloffset_GetPointerv },
+   { 29001, _gloffset_DrawArrays },
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_EXT_vertex_weighting)
 static const struct gl_function_remap GL_EXT_vertex_weighting_functions[] = {
-   { 17221, -1 }, /* VertexWeightfvEXT */
-   { 23922, -1 }, /* VertexWeightfEXT */
-   { 25443, -1 }, /* VertexWeightPointerEXT */
+   { 17254, -1 }, /* VertexWeightfvEXT */
+   { 23998, -1 }, /* VertexWeightfEXT */
+   { 25519, -1 }, /* VertexWeightPointerEXT */
    {    -1, -1 }
 };
 #endif
@@ -5437,8 +5447,8 @@ static const struct gl_function_remap GL_HP_image_transform_functions[] = {
    {  3305, -1 }, /* ImageTransformParameterfHP */
    {  9026, -1 }, /* ImageTransformParameterfvHP */
    { 10614, -1 }, /* ImageTransformParameteriHP */
-   { 10882, -1 }, /* GetImageTransformParameterivHP */
-   { 17285, -1 }, /* ImageTransformParameterivHP */
+   { 10915, -1 }, /* GetImageTransformParameterivHP */
+   { 17318, -1 }, /* ImageTransformParameterivHP */
    {    -1, -1 }
 };
 #endif
@@ -5457,9 +5467,9 @@ static const struct gl_function_remap GL_IBM_vertex_array_lists_functions[] = {
    {  6759, -1 }, /* FogCoordPointerListIBM */
    {  7066, -1 }, /* VertexPointerListIBM */
    { 10535, -1 }, /* ColorPointerListIBM */
-   { 11836, -1 }, /* TexCoordPointerListIBM */
-   { 12207, -1 }, /* IndexPointerListIBM */
-   { 29241, -1 }, /* EdgeFlagPointerListIBM */
+   { 11869, -1 }, /* TexCoordPointerListIBM */
+   { 12240, -1 }, /* IndexPointerListIBM */
+   { 29317, -1 }, /* EdgeFlagPointerListIBM */
    {    -1, -1 }
 };
 #endif
@@ -5473,10 +5483,10 @@ static const struct gl_function_remap GL_INGR_blend_func_separate_functions[] =
 
 #if defined(need_GL_INTEL_parallel_arrays)
 static const struct gl_function_remap GL_INTEL_parallel_arrays_functions[] = {
-   { 11223, -1 }, /* VertexPointervINTEL */
-   { 13701, -1 }, /* ColorPointervINTEL */
-   { 26739, -1 }, /* NormalPointervINTEL */
-   { 27165, -1 }, /* TexCoordPointervINTEL */
+   { 11256, -1 }, /* VertexPointervINTEL */
+   { 13734, -1 }, /* ColorPointervINTEL */
+   { 26815, -1 }, /* NormalPointervINTEL */
+   { 27241, -1 }, /* TexCoordPointervINTEL */
    {    -1, -1 }
 };
 #endif
@@ -5493,7 +5503,7 @@ static const struct gl_function_remap GL_MESA_shader_debug_functions[] = {
    {  1522, -1 }, /* GetDebugLogLengthMESA */
    {  3063, -1 }, /* ClearDebugLogMESA */
    {  4018, -1 }, /* GetDebugLogMESA */
-   { 27617, -1 }, /* CreateDebugObjectMESA */
+   { 27693, -1 }, /* CreateDebugObjectMESA */
    {    -1, -1 }
 };
 #endif
@@ -5518,11 +5528,11 @@ static const struct gl_function_remap GL_NV_evaluators_functions[] = {
    {  7521, -1 }, /* MapControlPointsNV */
    {  7620, -1 }, /* MapParameterfvNV */
    {  9431, -1 }, /* EvalMapsNV */
-   { 15190, -1 }, /* GetMapAttribParameterfvNV */
-   { 15356, -1 }, /* MapParameterivNV */
-   { 22014, -1 }, /* GetMapParameterivNV */
-   { 22512, -1 }, /* GetMapParameterfvNV */
-   { 26075, -1 }, /* GetMapControlPointsNV */
+   { 15223, -1 }, /* GetMapAttribParameterfvNV */
+   { 15389, -1 }, /* MapParameterivNV */
+   { 22090, -1 }, /* GetMapParameterivNV */
+   { 22588, -1 }, /* GetMapParameterfvNV */
+   { 26151, -1 }, /* GetMapControlPointsNV */
    {    -1, -1 }
 };
 #endif
@@ -5557,8 +5567,8 @@ static const struct gl_function_remap GL_NV_register_combiners_functions[] = {
 
 #if defined(need_GL_NV_register_combiners2)
 static const struct gl_function_remap GL_NV_register_combiners2_functions[] = {
-   { 14093, -1 }, /* CombinerStageParameterfvNV */
-   { 14408, -1 }, /* GetCombinerStageParameterfvNV */
+   { 14126, -1 }, /* CombinerStageParameterfvNV */
+   { 14441, -1 }, /* GetCombinerStageParameterfvNV */
    {    -1, -1 }
 };
 #endif
@@ -5577,6 +5587,13 @@ static const struct gl_function_remap GL_NV_vertex_program_functions[] = {
 };
 #endif
 
+#if defined(need_GL_OES_EGL_image)
+/* functions defined in MESA_remap_table_functions are excluded */
+static const struct gl_function_remap GL_OES_EGL_image_functions[] = {
+   {    -1, -1 }
+};
+#endif
+
 #if defined(need_GL_PGI_misc_hints)
 static const struct gl_function_remap GL_PGI_misc_hints_functions[] = {
    {  7705, -1 }, /* HintPGI */
@@ -5586,16 +5603,16 @@ static const struct gl_function_remap GL_PGI_misc_hints_functions[] = {
 
 #if defined(need_GL_SGIS_detail_texture)
 static const struct gl_function_remap GL_SGIS_detail_texture_functions[] = {
-   { 14381, -1 }, /* GetDetailTexFuncSGIS */
-   { 14701, -1 }, /* DetailTexFuncSGIS */
+   { 14414, -1 }, /* GetDetailTexFuncSGIS */
+   { 14734, -1 }, /* DetailTexFuncSGIS */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIS_fog_function)
 static const struct gl_function_remap GL_SGIS_fog_function_functions[] = {
-   { 24184, -1 }, /* FogFuncSGIS */
-   { 24849, -1 }, /* GetFogFuncSGIS */
+   { 24260, -1 }, /* FogFuncSGIS */
+   { 24925, -1 }, /* GetFogFuncSGIS */
    {    -1, -1 }
 };
 #endif
@@ -5624,7 +5641,7 @@ static const struct gl_function_remap GL_SGIS_point_parameters_functions[] = {
 #if defined(need_GL_SGIS_sharpen_texture)
 static const struct gl_function_remap GL_SGIS_sharpen_texture_functions[] = {
    {  5865, -1 }, /* GetSharpenTexFuncSGIS */
-   { 19582, -1 }, /* SharpenTexFuncSGIS */
+   { 19615, -1 }, /* SharpenTexFuncSGIS */
    {    -1, -1 }
 };
 #endif
@@ -5632,14 +5649,14 @@ static const struct gl_function_remap GL_SGIS_sharpen_texture_functions[] = {
 #if defined(need_GL_SGIS_texture4D)
 static const struct gl_function_remap GL_SGIS_texture4D_functions[] = {
    {   894, -1 }, /* TexImage4DSGIS */
-   { 14009, -1 }, /* TexSubImage4DSGIS */
+   { 14042, -1 }, /* TexSubImage4DSGIS */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIS_texture_color_mask)
 static const struct gl_function_remap GL_SGIS_texture_color_mask_functions[] = {
-   { 13407, -1 }, /* TextureColorMaskSGIS */
+   { 13440, -1 }, /* TextureColorMaskSGIS */
    {    -1, -1 }
 };
 #endif
@@ -5647,7 +5664,7 @@ static const struct gl_function_remap GL_SGIS_texture_color_mask_functions[] = {
 #if defined(need_GL_SGIS_texture_filter4)
 static const struct gl_function_remap GL_SGIS_texture_filter4_functions[] = {
    {  6042, -1 }, /* GetTexFilterFuncSGIS */
-   { 14527, -1 }, /* TexFilterFuncSGIS */
+   { 14560, -1 }, /* TexFilterFuncSGIS */
    {    -1, -1 }
 };
 #endif
@@ -5657,9 +5674,9 @@ static const struct gl_function_remap GL_SGIX_async_functions[] = {
    {  3014, -1 }, /* AsyncMarkerSGIX */
    {  3997, -1 }, /* FinishAsyncSGIX */
    {  4734, -1 }, /* PollAsyncSGIX */
-   { 19729, -1 }, /* DeleteAsyncMarkersSGIX */
-   { 19758, -1 }, /* IsAsyncMarkerSGIX */
-   { 29038, -1 }, /* GenAsyncMarkersSGIX */
+   { 19762, -1 }, /* DeleteAsyncMarkersSGIX */
+   { 19791, -1 }, /* IsAsyncMarkerSGIX */
+   { 29114, -1 }, /* GenAsyncMarkersSGIX */
    {    -1, -1 }
 };
 #endif
@@ -5682,29 +5699,29 @@ static const struct gl_function_remap GL_SGIX_fragment_lighting_functions[] = {
    {  8131, -1 }, /* FragmentLightModeliSGIX */
    {  9494, -1 }, /* FragmentLightivSGIX */
    {  9760, -1 }, /* GetFragmentMaterialivSGIX */
-   { 17108, -1 }, /* FragmentLightModelfSGIX */
-   { 17408, -1 }, /* FragmentColorMaterialSGIX */
-   { 17780, -1 }, /* FragmentMaterialiSGIX */
-   { 19001, -1 }, /* LightEnviSGIX */
-   { 20412, -1 }, /* FragmentLightModelfvSGIX */
-   { 20721, -1 }, /* FragmentLightfvSGIX */
-   { 25325, -1 }, /* FragmentLightfSGIX */
-   { 27954, -1 }, /* GetFragmentLightfvSGIX */
-   { 29521, -1 }, /* FragmentMaterialivSGIX */
+   { 17141, -1 }, /* FragmentLightModelfSGIX */
+   { 17441, -1 }, /* FragmentColorMaterialSGIX */
+   { 17813, -1 }, /* FragmentMaterialiSGIX */
+   { 19034, -1 }, /* LightEnviSGIX */
+   { 20445, -1 }, /* FragmentLightModelfvSGIX */
+   { 20754, -1 }, /* FragmentLightfvSGIX */
+   { 25401, -1 }, /* FragmentLightfSGIX */
+   { 28030, -1 }, /* GetFragmentLightfvSGIX */
+   { 29597, -1 }, /* FragmentMaterialivSGIX */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIX_framezoom)
 static const struct gl_function_remap GL_SGIX_framezoom_functions[] = {
-   { 19781, -1 }, /* FrameZoomSGIX */
+   { 19814, -1 }, /* FrameZoomSGIX */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIX_igloo_interface)
 static const struct gl_function_remap GL_SGIX_igloo_interface_functions[] = {
-   { 25633, -1 }, /* IglooInterfaceSGIX */
+   { 25709, -1 }, /* IglooInterfaceSGIX */
    {    -1, -1 }
 };
 #endif
@@ -5714,9 +5731,9 @@ static const struct gl_function_remap GL_SGIX_instruments_functions[] = {
    {  2573, -1 }, /* ReadInstrumentsSGIX */
    {  5621, -1 }, /* PollInstrumentsSGIX */
    {  9392, -1 }, /* GetInstrumentsSGIX */
-   { 11434, -1 }, /* StartInstrumentsSGIX */
-   { 14127, -1 }, /* StopInstrumentsSGIX */
-   { 15733, -1 }, /* InstrumentsBufferSGIX */
+   { 11467, -1 }, /* StartInstrumentsSGIX */
+   { 14160, -1 }, /* StopInstrumentsSGIX */
+   { 15766, -1 }, /* InstrumentsBufferSGIX */
    {    -1, -1 }
 };
 #endif
@@ -5725,10 +5742,10 @@ static const struct gl_function_remap GL_SGIX_instruments_functions[] = {
 static const struct gl_function_remap GL_SGIX_list_priority_functions[] = {
    {  1125, -1 }, /* ListParameterfSGIX */
    {  2763, -1 }, /* GetListParameterfvSGIX */
-   { 15648, -1 }, /* ListParameteriSGIX */
-   { 16402, -1 }, /* ListParameterfvSGIX */
-   { 18407, -1 }, /* ListParameterivSGIX */
-   { 29082, -1 }, /* GetListParameterivSGIX */
+   { 15681, -1 }, /* ListParameteriSGIX */
+   { 16435, -1 }, /* ListParameterfvSGIX */
+   { 18440, -1 }, /* ListParameterivSGIX */
+   { 29158, -1 }, /* GetListParameterivSGIX */
    {    -1, -1 }
 };
 #endif
@@ -5743,16 +5760,16 @@ static const struct gl_function_remap GL_SGIX_pixel_texture_functions[] = {
 #if defined(need_GL_SGIX_polynomial_ffd)
 static const struct gl_function_remap GL_SGIX_polynomial_ffd_functions[] = {
    {  3251, -1 }, /* LoadIdentityDeformationMapSGIX */
-   { 10802, -1 }, /* DeformationMap3dSGIX */
-   { 14227, -1 }, /* DeformSGIX */
-   { 21563, -1 }, /* DeformationMap3fSGIX */
+   { 10835, -1 }, /* DeformationMap3dSGIX */
+   { 14260, -1 }, /* DeformSGIX */
+   { 21639, -1 }, /* DeformationMap3fSGIX */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIX_reference_plane)
 static const struct gl_function_remap GL_SGIX_reference_plane_functions[] = {
-   { 12958, -1 }, /* ReferencePlaneSGIX */
+   { 12991, -1 }, /* ReferencePlaneSGIX */
    {    -1, -1 }
 };
 #endif
@@ -5760,16 +5777,16 @@ static const struct gl_function_remap GL_SGIX_reference_plane_functions[] = {
 #if defined(need_GL_SGIX_sprite)
 static const struct gl_function_remap GL_SGIX_sprite_functions[] = {
    {  8547, -1 }, /* SpriteParameterfvSGIX */
-   { 18235, -1 }, /* SpriteParameteriSGIX */
-   { 23591, -1 }, /* SpriteParameterfSGIX */
-   { 26197, -1 }, /* SpriteParameterivSGIX */
+   { 18268, -1 }, /* SpriteParameteriSGIX */
+   { 23667, -1 }, /* SpriteParameterfSGIX */
+   { 26273, -1 }, /* SpriteParameterivSGIX */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIX_tag_sample_buffer)
 static const struct gl_function_remap GL_SGIX_tag_sample_buffer_functions[] = {
-   { 18294, -1 }, /* TagSampleBufferSGIX */
+   { 18327, -1 }, /* TagSampleBufferSGIX */
    {    -1, -1 }
 };
 #endif
@@ -5778,18 +5795,18 @@ static const struct gl_function_remap GL_SGIX_tag_sample_buffer_functions[] = {
 static const struct gl_function_remap GL_SGI_color_table_functions[] = {
    {  6703, _gloffset_ColorTableParameteriv },
    {  7415, _gloffset_ColorTable },
-   { 13454, _gloffset_GetColorTable },
-   { 13564, _gloffset_CopyColorTable },
-   { 17052, _gloffset_ColorTableParameterfv },
-   { 20320, _gloffset_GetColorTableParameterfv },
-   { 22270, _gloffset_GetColorTableParameteriv },
+   { 13487, _gloffset_GetColorTable },
+   { 13597, _gloffset_CopyColorTable },
+   { 17085, _gloffset_ColorTableParameterfv },
+   { 20353, _gloffset_GetColorTableParameterfv },
+   { 22346, _gloffset_GetColorTableParameteriv },
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SUNX_constant_data)
 static const struct gl_function_remap GL_SUNX_constant_data_functions[] = {
-   { 27932, -1 }, /* FinishTextureSUNX */
+   { 28008, -1 }, /* FinishTextureSUNX */
    {    -1, -1 }
 };
 #endif
@@ -5801,16 +5818,16 @@ static const struct gl_function_remap GL_SUN_global_alpha_functions[] = {
    {  5646, -1 }, /* GlobalAlphaFactordSUN */
    {  8631, -1 }, /* GlobalAlphaFactoruiSUN */
    {  8983, -1 }, /* GlobalAlphaFactorbSUN */
-   { 11749, -1 }, /* GlobalAlphaFactorfSUN */
-   { 11868, -1 }, /* GlobalAlphaFactorusSUN */
-   { 20020, -1 }, /* GlobalAlphaFactorsSUN */
+   { 11782, -1 }, /* GlobalAlphaFactorfSUN */
+   { 11901, -1 }, /* GlobalAlphaFactorusSUN */
+   { 20053, -1 }, /* GlobalAlphaFactorsSUN */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SUN_mesh_array)
 static const struct gl_function_remap GL_SUN_mesh_array_functions[] = {
-   { 26009, -1 }, /* DrawMeshArraysSUN */
+   { 26085, -1 }, /* DrawMeshArraysSUN */
    {    -1, -1 }
 };
 #endif
@@ -5819,11 +5836,11 @@ static const struct gl_function_remap GL_SUN_mesh_array_functions[] = {
 static const struct gl_function_remap GL_SUN_triangle_list_functions[] = {
    {  3971, -1 }, /* ReplacementCodeubSUN */
    {  5485, -1 }, /* ReplacementCodeubvSUN */
-   { 16773, -1 }, /* ReplacementCodeusvSUN */
-   { 16961, -1 }, /* ReplacementCodePointerSUN */
-   { 18318, -1 }, /* ReplacementCodeusSUN */
-   { 19065, -1 }, /* ReplacementCodeuiSUN */
-   { 26654, -1 }, /* ReplacementCodeuivSUN */
+   { 16806, -1 }, /* ReplacementCodeusvSUN */
+   { 16994, -1 }, /* ReplacementCodePointerSUN */
+   { 18351, -1 }, /* ReplacementCodeusSUN */
+   { 19098, -1 }, /* ReplacementCodeuiSUN */
+   { 26730, -1 }, /* ReplacementCodeuivSUN */
    {    -1, -1 }
 };
 #endif
@@ -5848,28 +5865,28 @@ static const struct gl_function_remap GL_SUN_vertex_functions[] = {
    {  8942, -1 }, /* Color3fVertex3fvSUN */
    {  9357, -1 }, /* Color4fNormal3fVertex3fvSUN */
    { 10058, -1 }, /* ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN */
-   { 11297, -1 }, /* ReplacementCodeuiColor4fNormal3fVertex3fvSUN */
-   { 12689, -1 }, /* ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN */
-   { 13100, -1 }, /* TexCoord2fColor3fVertex3fSUN */
-   { 14152, -1 }, /* TexCoord4fColor4fNormal3fVertex4fSUN */
-   { 14486, -1 }, /* Color4ubVertex2fvSUN */
-   { 14726, -1 }, /* Normal3fVertex3fSUN */
-   { 15674, -1 }, /* ReplacementCodeuiColor4fNormal3fVertex3fSUN */
-   { 15935, -1 }, /* TexCoord2fColor4fNormal3fVertex3fvSUN */
-   { 16602, -1 }, /* TexCoord2fVertex3fvSUN */
-   { 17378, -1 }, /* Color4ubVertex2fSUN */
-   { 17571, -1 }, /* ReplacementCodeuiColor4ubVertex3fSUN */
-   { 19453, -1 }, /* TexCoord2fColor4ubVertex3fSUN */
-   { 19800, -1 }, /* Normal3fVertex3fvSUN */
-   { 20229, -1 }, /* Color4fNormal3fVertex3fSUN */
-   { 21095, -1 }, /* ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN */
-   { 21315, -1 }, /* ReplacementCodeuiColor4ubVertex3fvSUN */
-   { 23045, -1 }, /* ReplacementCodeuiColor3fVertex3fSUN */
-   { 24300, -1 }, /* TexCoord4fVertex4fSUN */
-   { 24726, -1 }, /* TexCoord2fColor3fVertex3fvSUN */
-   { 25052, -1 }, /* ReplacementCodeuiNormal3fVertex3fvSUN */
-   { 25179, -1 }, /* TexCoord4fVertex4fvSUN */
-   { 25881, -1 }, /* ReplacementCodeuiVertex3fSUN */
+   { 11330, -1 }, /* ReplacementCodeuiColor4fNormal3fVertex3fvSUN */
+   { 12722, -1 }, /* ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN */
+   { 13133, -1 }, /* TexCoord2fColor3fVertex3fSUN */
+   { 14185, -1 }, /* TexCoord4fColor4fNormal3fVertex4fSUN */
+   { 14519, -1 }, /* Color4ubVertex2fvSUN */
+   { 14759, -1 }, /* Normal3fVertex3fSUN */
+   { 15707, -1 }, /* ReplacementCodeuiColor4fNormal3fVertex3fSUN */
+   { 15968, -1 }, /* TexCoord2fColor4fNormal3fVertex3fvSUN */
+   { 16635, -1 }, /* TexCoord2fVertex3fvSUN */
+   { 17411, -1 }, /* Color4ubVertex2fSUN */
+   { 17604, -1 }, /* ReplacementCodeuiColor4ubVertex3fSUN */
+   { 19486, -1 }, /* TexCoord2fColor4ubVertex3fSUN */
+   { 19833, -1 }, /* Normal3fVertex3fvSUN */
+   { 20262, -1 }, /* Color4fNormal3fVertex3fSUN */
+   { 21171, -1 }, /* ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN */
+   { 21391, -1 }, /* ReplacementCodeuiColor4ubVertex3fvSUN */
+   { 23121, -1 }, /* ReplacementCodeuiColor3fVertex3fSUN */
+   { 24376, -1 }, /* TexCoord4fVertex4fSUN */
+   { 24802, -1 }, /* TexCoord2fColor3fVertex3fvSUN */
+   { 25128, -1 }, /* ReplacementCodeuiNormal3fVertex3fvSUN */
+   { 25255, -1 }, /* TexCoord4fVertex4fvSUN */
+   { 25957, -1 }, /* ReplacementCodeuiVertex3fSUN */
    {    -1, -1 }
 };
 #endif
@@ -5888,29 +5905,29 @@ static const struct gl_function_remap GL_VERSION_1_3_functions[] = {
    {  9714, _gloffset_MultiTexCoord4sARB },
    { 10314, _gloffset_MultiTexCoord2dvARB },
    { 10696, _gloffset_MultiTexCoord1svARB },
-   { 10992, _gloffset_MultiTexCoord3svARB },
-   { 11053, _gloffset_MultiTexCoord4iARB },
-   { 11776, _gloffset_MultiTexCoord3iARB },
-   { 12478, _gloffset_MultiTexCoord1dARB },
-   { 12644, _gloffset_MultiTexCoord3dvARB },
-   { 13808, _gloffset_MultiTexCoord3ivARB },
-   { 13853, _gloffset_MultiTexCoord2sARB },
-   { 15073, _gloffset_MultiTexCoord4ivARB },
-   { 16702, _gloffset_ClientActiveTextureARB },
-   { 18918, _gloffset_MultiTexCoord2dARB },
-   { 19322, _gloffset_MultiTexCoord4dvARB },
-   { 19608, _gloffset_MultiTexCoord4fvARB },
-   { 20461, _gloffset_MultiTexCoord3fARB },
-   { 22798, _gloffset_MultiTexCoord4dARB },
-   { 23002, _gloffset_MultiTexCoord1sARB },
-   { 23204, _gloffset_MultiTexCoord1dvARB },
-   { 24046, _gloffset_MultiTexCoord1ivARB },
-   { 24139, _gloffset_MultiTexCoord2ivARB },
-   { 24478, _gloffset_MultiTexCoord1iARB },
-   { 25749, _gloffset_MultiTexCoord4svARB },
-   { 26267, _gloffset_MultiTexCoord1fARB },
-   { 26530, _gloffset_MultiTexCoord4fARB },
-   { 28759, _gloffset_MultiTexCoord2fvARB },
+   { 11025, _gloffset_MultiTexCoord3svARB },
+   { 11086, _gloffset_MultiTexCoord4iARB },
+   { 11809, _gloffset_MultiTexCoord3iARB },
+   { 12511, _gloffset_MultiTexCoord1dARB },
+   { 12677, _gloffset_MultiTexCoord3dvARB },
+   { 13841, _gloffset_MultiTexCoord3ivARB },
+   { 13886, _gloffset_MultiTexCoord2sARB },
+   { 15106, _gloffset_MultiTexCoord4ivARB },
+   { 16735, _gloffset_ClientActiveTextureARB },
+   { 18951, _gloffset_MultiTexCoord2dARB },
+   { 19355, _gloffset_MultiTexCoord4dvARB },
+   { 19641, _gloffset_MultiTexCoord4fvARB },
+   { 20494, _gloffset_MultiTexCoord3fARB },
+   { 22874, _gloffset_MultiTexCoord4dARB },
+   { 23078, _gloffset_MultiTexCoord1sARB },
+   { 23280, _gloffset_MultiTexCoord1dvARB },
+   { 24122, _gloffset_MultiTexCoord1ivARB },
+   { 24215, _gloffset_MultiTexCoord2ivARB },
+   { 24554, _gloffset_MultiTexCoord1iARB },
+   { 25825, _gloffset_MultiTexCoord4svARB },
+   { 26343, _gloffset_MultiTexCoord1fARB },
+   { 26606, _gloffset_MultiTexCoord4fARB },
+   { 28835, _gloffset_MultiTexCoord2fvARB },
    {    -1, -1 }
 };
 #endif
diff --git a/src/mesa/sparc/glapi_sparc.S b/src/mesa/sparc/glapi_sparc.S
index 9b0f8027eb..3fbdb4abb3 100644
--- a/src/mesa/sparc/glapi_sparc.S
+++ b/src/mesa/sparc/glapi_sparc.S
@@ -1037,6 +1037,8 @@ gl_dispatch_functions_start:
 	HIDDEN(gl_dispatch_stub_801)
 	GL_STUB(gl_dispatch_stub_802, _gloffset_GetQueryObjectui64vEXT)
 	HIDDEN(gl_dispatch_stub_802)
+	GL_STUB(glEGLImageTargetRenderbufferStorageOES, _gloffset_EGLImageTargetRenderbufferStorageOES)
+	GL_STUB(glEGLImageTargetTexture2DOES, _gloffset_EGLImageTargetTexture2DOES)
 	GL_STUB_ALIAS(glArrayElementEXT, glArrayElement)
 	GL_STUB_ALIAS(glBindTextureEXT, glBindTexture)
 	GL_STUB_ALIAS(glDrawArraysEXT, glDrawArrays)
diff --git a/src/mesa/x86-64/glapi_x86-64.S b/src/mesa/x86-64/glapi_x86-64.S
index 8edb69bf84..4c9eab882b 100644
--- a/src/mesa/x86-64/glapi_x86-64.S
+++ b/src/mesa/x86-64/glapi_x86-64.S
@@ -30414,6 +30414,80 @@ GL_PREFIX(_dispatch_stub_802):
 #endif /* defined(GLX_USE_TLS) */
 	.size	GL_PREFIX(_dispatch_stub_802), .-GL_PREFIX(_dispatch_stub_802)
 
+	.p2align	4,,15
+	.globl	GL_PREFIX(EGLImageTargetRenderbufferStorageOES)
+	.type	GL_PREFIX(EGLImageTargetRenderbufferStorageOES), @function
+GL_PREFIX(EGLImageTargetRenderbufferStorageOES):
+#if defined(GLX_USE_TLS)
+	call	_x86_64_get_dispatch@PLT
+	movq	6424(%rax), %r11
+	jmp	*%r11
+#elif defined(PTHREADS)
+	pushq	%rdi
+	pushq	%rsi
+	pushq	%rbp
+	call	_x86_64_get_dispatch@PLT
+	popq	%rbp
+	popq	%rsi
+	popq	%rdi
+	movq	6424(%rax), %r11
+	jmp	*%r11
+#else
+	movq	_glapi_Dispatch(%rip), %rax
+	testq	%rax, %rax
+	je	1f
+	movq	6424(%rax), %r11
+	jmp	*%r11
+1:
+	pushq	%rdi
+	pushq	%rsi
+	pushq	%rbp
+	call	_glapi_get_dispatch
+	popq	%rbp
+	popq	%rsi
+	popq	%rdi
+	movq	6424(%rax), %r11
+	jmp	*%r11
+#endif /* defined(GLX_USE_TLS) */
+	.size	GL_PREFIX(EGLImageTargetRenderbufferStorageOES), .-GL_PREFIX(EGLImageTargetRenderbufferStorageOES)
+
+	.p2align	4,,15
+	.globl	GL_PREFIX(EGLImageTargetTexture2DOES)
+	.type	GL_PREFIX(EGLImageTargetTexture2DOES), @function
+GL_PREFIX(EGLImageTargetTexture2DOES):
+#if defined(GLX_USE_TLS)
+	call	_x86_64_get_dispatch@PLT
+	movq	6432(%rax), %r11
+	jmp	*%r11
+#elif defined(PTHREADS)
+	pushq	%rdi
+	pushq	%rsi
+	pushq	%rbp
+	call	_x86_64_get_dispatch@PLT
+	popq	%rbp
+	popq	%rsi
+	popq	%rdi
+	movq	6432(%rax), %r11
+	jmp	*%r11
+#else
+	movq	_glapi_Dispatch(%rip), %rax
+	testq	%rax, %rax
+	je	1f
+	movq	6432(%rax), %r11
+	jmp	*%r11
+1:
+	pushq	%rdi
+	pushq	%rsi
+	pushq	%rbp
+	call	_glapi_get_dispatch
+	popq	%rbp
+	popq	%rsi
+	popq	%rdi
+	movq	6432(%rax), %r11
+	jmp	*%r11
+#endif /* defined(GLX_USE_TLS) */
+	.size	GL_PREFIX(EGLImageTargetTexture2DOES), .-GL_PREFIX(EGLImageTargetTexture2DOES)
+
 	.globl GL_PREFIX(ArrayElementEXT) ; .set GL_PREFIX(ArrayElementEXT), GL_PREFIX(ArrayElement)
 	.globl GL_PREFIX(BindTextureEXT) ; .set GL_PREFIX(BindTextureEXT), GL_PREFIX(BindTexture)
 	.globl GL_PREFIX(DrawArraysEXT) ; .set GL_PREFIX(DrawArraysEXT), GL_PREFIX(DrawArrays)
diff --git a/src/mesa/x86/glapi_x86.S b/src/mesa/x86/glapi_x86.S
index 8030fdf90b..13270ef35d 100644
--- a/src/mesa/x86/glapi_x86.S
+++ b/src/mesa/x86/glapi_x86.S
@@ -991,6 +991,8 @@ GLNAME(gl_dispatch_functions_start):
 	HIDDEN(GL_PREFIX(_dispatch_stub_801, _dispatch_stub_801@12))
 	GL_STUB(_dispatch_stub_802, _gloffset_GetQueryObjectui64vEXT, _dispatch_stub_802@12)
 	HIDDEN(GL_PREFIX(_dispatch_stub_802, _dispatch_stub_802@12))
+	GL_STUB(EGLImageTargetRenderbufferStorageOES, _gloffset_EGLImageTargetRenderbufferStorageOES, EGLImageTargetRenderbufferStorageOES@8)
+	GL_STUB(EGLImageTargetTexture2DOES, _gloffset_EGLImageTargetTexture2DOES, EGLImageTargetTexture2DOES@8)
 	GL_STUB_ALIAS(ArrayElementEXT, _gloffset_ArrayElement, ArrayElementEXT@4, ArrayElement, ArrayElement@4)
 	GL_STUB_ALIAS(BindTextureEXT, _gloffset_BindTexture, BindTextureEXT@8, BindTexture, BindTexture@8)
 	GL_STUB_ALIAS(DrawArraysEXT, _gloffset_DrawArrays, DrawArraysEXT@12, DrawArrays, DrawArrays@12)
-- 
cgit v1.2.3


From d1dc5b124e133379be5bb57b68733c09c0e04f71 Mon Sep 17 00:00:00 2001
From: Kristian Høgsberg <krh@bitplanet.net>
Date: Thu, 11 Feb 2010 17:42:30 -0500
Subject: core: Implement GL_OES_EGL_image entry points

---
 src/mesa/main/dd.h        | 11 +++++++++++
 src/mesa/main/fbobject.c  | 24 ++++++++++++++++++++++++
 src/mesa/main/fbobject.h  |  3 +++
 src/mesa/main/mfeatures.h |  2 ++
 src/mesa/main/teximage.c  | 41 +++++++++++++++++++++++++++++++++++++++++
 src/mesa/main/teximage.h  |  2 ++
 6 files changed, 83 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h
index d98a14e09c..079e44bb95 100644
--- a/src/mesa/main/dd.h
+++ b/src/mesa/main/dd.h
@@ -1035,6 +1035,17 @@ struct dd_function_table {
                    GLfloat width, GLfloat height);
    /*@}*/
 #endif
+
+#if FEATURE_OES_EGL_image
+   void (*EGLImageTargetTexture2D)(GLcontext *ctx, GLenum target,
+				   struct gl_texture_object *texObj,
+				   struct gl_texture_image *texImage,
+				   GLeglImageOES image_handle);
+   void (*EGLImageTargetRenderbufferStorage)(GLcontext *ctx,
+					     struct gl_renderbuffer *rb,
+					     void *image_handle);
+#endif
+
 };
 
 
diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
index 04ea3b4ed7..8fbe0830c7 100644
--- a/src/mesa/main/fbobject.c
+++ b/src/mesa/main/fbobject.c
@@ -1008,6 +1008,30 @@ renderbuffer_storage(GLenum target, GLenum internalFormat,
     */
 }
 
+#if FEATURE_OES_EGL_image
+void GLAPIENTRY
+_mesa_EGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   ASSERT_OUTSIDE_BEGIN_END(ctx);
+   struct gl_renderbuffer *rb;
+
+   if (target != GL_RENDERBUFFER) {
+      _mesa_error(ctx, GL_INVALID_ENUM, "EGLImageTargetRenderbufferStorageOES");
+      return;
+   }
+
+   rb = ctx->CurrentRenderbuffer;
+   if (!rb) {
+      _mesa_error(ctx, GL_INVALID_OPERATION, "EGLImageTargetRenderbufferStorageOES");
+      return;
+   }
+
+   FLUSH_VERTICES(ctx, _NEW_BUFFERS);
+
+   ctx->Driver.EGLImageTargetRenderbufferStorage(ctx, rb, image);
+}
+#endif
 
 /**
  * Helper function for _mesa_GetRenderbufferParameterivEXT() and
diff --git a/src/mesa/main/fbobject.h b/src/mesa/main/fbobject.h
index 5409394073..28f75dfca7 100644
--- a/src/mesa/main/fbobject.h
+++ b/src/mesa/main/fbobject.h
@@ -88,6 +88,9 @@ _mesa_RenderbufferStorageMultisample(GLenum target, GLsizei samples,
                                      GLenum internalformat,
                                      GLsizei width, GLsizei height);
 
+extern void GLAPIENTRY
+_mesa_EGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image);
+
 extern void GLAPIENTRY
 _mesa_GetRenderbufferParameterivEXT(GLenum target, GLenum pname,
                                     GLint *params);
diff --git a/src/mesa/main/mfeatures.h b/src/mesa/main/mfeatures.h
index 4e68bc15d8..f0896ee626 100644
--- a/src/mesa/main/mfeatures.h
+++ b/src/mesa/main/mfeatures.h
@@ -122,5 +122,7 @@
 #define FEATURE_NV_fragment_program  _HAVE_FULL_GL
 #define FEATURE_NV_vertex_program  _HAVE_FULL_GL
 
+#define FEATURE_OES_EGL_image _HAVE_FULL_GL
+
 
 #endif /* FEATURES_H */
diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
index 00329c755d..40ebff76c6 100644
--- a/src/mesa/main/teximage.c
+++ b/src/mesa/main/teximage.c
@@ -2448,6 +2448,47 @@ _mesa_TexImage3DEXT( GLenum target, GLint level, GLenum internalFormat,
 }
 
 
+#if FEATURE_OES_EGL_image
+void GLAPIENTRY
+_mesa_EGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
+   struct gl_texture_object *texObj;
+   struct gl_texture_image *texImage;
+
+   if (target != GL_TEXTURE_2D) {
+      _mesa_error(ctx, GL_INVALID_ENUM,
+		  "glEGLImageTargetTexture2D(target=%d)", target);
+      return;
+   }
+
+   if (ctx->NewState & _MESA_NEW_TRANSFER_STATE)
+      _mesa_update_state(ctx);
+
+   texObj = _mesa_get_current_tex_object(ctx, target);
+   _mesa_lock_texture(ctx, texObj);
+
+   texImage = _mesa_get_tex_image(ctx, texObj, target, 0);
+   if (!texImage) {
+      _mesa_error(ctx, GL_OUT_OF_MEMORY, "glEGLImageTargetTexture2D");
+   } else {
+      if (texImage->Data)
+	 ctx->Driver.FreeTexImageData( ctx, texImage );
+
+      ASSERT(texImage->Data == NULL);
+      ctx->Driver.EGLImageTargetTexture2D(ctx, target,
+					  texObj, texImage, image);
+
+      /* state update */
+      texObj->_Complete = GL_FALSE;
+      ctx->NewState |= _NEW_TEXTURE;
+   }
+   _mesa_unlock_texture(ctx, texObj);
+
+}
+#endif
+
 
 void GLAPIENTRY
 _mesa_TexSubImage1D( GLenum target, GLint level,
diff --git a/src/mesa/main/teximage.h b/src/mesa/main/teximage.h
index 97c9018319..d82cc98521 100644
--- a/src/mesa/main/teximage.h
+++ b/src/mesa/main/teximage.h
@@ -165,6 +165,8 @@ _mesa_TexImage3DEXT( GLenum target, GLint level, GLenum internalformat,
                      GLint border, GLenum format, GLenum type,
                      const GLvoid *pixels );
 
+extern void GLAPIENTRY
+_mesa_EGLImageTargetTexture2DOES( GLenum target, GLeglImageOES image );
 
 extern void GLAPIENTRY
 _mesa_TexSubImage1D( GLenum target, GLint level, GLint xoffset,
-- 
cgit v1.2.3


From 51b799288a405be3f4cdbfc7221221399512992a Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Wed, 24 Feb 2010 11:57:26 -0700
Subject: mesa: put declaration before code

---
 src/mesa/main/fbobject.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
index 8fbe0830c7..4ce3998812 100644
--- a/src/mesa/main/fbobject.c
+++ b/src/mesa/main/fbobject.c
@@ -1012,9 +1012,9 @@ renderbuffer_storage(GLenum target, GLenum internalFormat,
 void GLAPIENTRY
 _mesa_EGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image)
 {
+   struct gl_renderbuffer *rb;
    GET_CURRENT_CONTEXT(ctx);
    ASSERT_OUTSIDE_BEGIN_END(ctx);
-   struct gl_renderbuffer *rb;
 
    if (target != GL_RENDERBUFFER) {
       _mesa_error(ctx, GL_INVALID_ENUM, "EGLImageTargetRenderbufferStorageOES");
-- 
cgit v1.2.3


From c26247100bfd453a7ec013f630abe366c12fbd8b Mon Sep 17 00:00:00 2001
From: Kristian Høgsberg <krh@bitplanet.net>
Date: Thu, 11 Feb 2010 18:59:40 -0500
Subject: intel: Implement DRI image extension

---
 src/mesa/drivers/dri/common/dri_util.c     |  2 +
 src/mesa/drivers/dri/common/dri_util.h     |  1 +
 src/mesa/drivers/dri/intel/intel_regions.h |  8 +++
 src/mesa/drivers/dri/intel/intel_screen.c  | 93 ++++++++++++++++++++++++++++++
 4 files changed, 104 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/common/dri_util.c b/src/mesa/drivers/dri/common/dri_util.c
index 9142dd72f5..b80b608f4b 100644
--- a/src/mesa/drivers/dri/common/dri_util.c
+++ b/src/mesa/drivers/dri/common/dri_util.c
@@ -675,6 +675,8 @@ setupLoaderExtensions(__DRIscreen *psp,
 	    psp->systemTime = (__DRIsystemTimeExtension *) extensions[i];
 	if (strcmp(extensions[i]->name, __DRI_DRI2_LOADER) == 0)
 	    psp->dri2.loader = (__DRIdri2LoaderExtension *) extensions[i];
+	if (strcmp(extensions[i]->name, __DRI_IMAGE_LOOKUP) == 0)
+	    psp->dri2.image = (__DRIimageLookupExtension *) extensions[i];
     }
 }
 
diff --git a/src/mesa/drivers/dri/common/dri_util.h b/src/mesa/drivers/dri/common/dri_util.h
index 2eadb9ac8c..99c0f1e442 100644
--- a/src/mesa/drivers/dri/common/dri_util.h
+++ b/src/mesa/drivers/dri/common/dri_util.h
@@ -544,6 +544,7 @@ struct __DRIscreenRec {
 	 * fields will not be valid or initializaed in that case. */
 	int enabled;
 	__DRIdri2LoaderExtension *loader;
+	__DRIimageLookupExtension *image;
     } dri2;
 
     /* The lock actually in use, old sarea or DRI2 */
diff --git a/src/mesa/drivers/dri/intel/intel_regions.h b/src/mesa/drivers/dri/intel/intel_regions.h
index 6d36f3d88a..7ee6a988ea 100644
--- a/src/mesa/drivers/dri/intel/intel_regions.h
+++ b/src/mesa/drivers/dri/intel/intel_regions.h
@@ -148,4 +148,12 @@ void _mesa_copy_rect(GLubyte * dst,
                 const GLubyte * src,
                 GLuint src_pitch, GLuint src_x, GLuint src_y);
 
+struct __DRIimageRec {
+   struct intel_region *region;
+   GLenum internal_format;
+   GLuint format;
+   GLenum data_type;
+   void *data;
+};
+
 #endif
diff --git a/src/mesa/drivers/dri/intel/intel_screen.c b/src/mesa/drivers/dri/intel/intel_screen.c
index 5e23aa8a1d..f19e2ee81d 100644
--- a/src/mesa/drivers/dri/intel/intel_screen.c
+++ b/src/mesa/drivers/dri/intel/intel_screen.c
@@ -41,6 +41,7 @@
 #include "intel_fbo.h"
 #include "intel_screen.h"
 #include "intel_tex.h"
+#include "intel_regions.h"
 
 #include "i915_drm.h"
 
@@ -137,11 +138,103 @@ static const struct __DRI2flushExtensionRec intelFlushExtension = {
     intelDRI2Invalidate,
 };
 
+static __DRIimage *
+intel_create_image_from_name(__DRIcontext *context,
+			     int width, int height, int format,
+			     int name, int pitch, void *loaderPrivate)
+{
+    __DRIimage *image;
+    struct intel_context *intel = context->driverPrivate;
+    int cpp;
+
+    image = CALLOC(sizeof *image);
+    if (image == NULL)
+	return NULL;
+
+    switch (format) {
+    case __DRI_IMAGE_FORMAT_RGB565:
+       image->format = MESA_FORMAT_RGB565;
+       image->internal_format = GL_RGB;
+       image->data_type = GL_UNSIGNED_BYTE;
+       break;
+    case __DRI_IMAGE_FORMAT_XRGB8888:
+       image->format = MESA_FORMAT_XRGB8888;
+       image->internal_format = GL_RGB;
+       image->data_type = GL_UNSIGNED_BYTE;
+       break;
+    case __DRI_IMAGE_FORMAT_ARGB8888:
+       image->format = MESA_FORMAT_ARGB8888;
+       image->internal_format = GL_RGBA;
+       image->data_type = GL_UNSIGNED_BYTE;
+       break;
+    default:
+       free(image);
+       return NULL;
+    }
+
+    image->data = loaderPrivate;
+    cpp = _mesa_get_format_bytes(image->format);
+
+    image->region = intel_region_alloc_for_handle(intel, cpp, width, height,
+						  pitch, name, "image");
+    if (image->region == NULL) {
+       FREE(image);
+       return NULL;
+    }
+
+    return image;	
+}
+
+static __DRIimage *
+intel_create_image_from_renderbuffer(__DRIcontext *context,
+				     int renderbuffer, void *loaderPrivate)
+{
+   __DRIimage *image;
+   struct intel_context *intel = context->driverPrivate;
+   struct gl_renderbuffer *rb;
+   struct intel_renderbuffer *irb;
+
+   rb = intel->ctx.CurrentRenderbuffer;
+   if (!rb) {
+      _mesa_error(&intel->ctx,
+		  GL_INVALID_OPERATION, "glRenderbufferExternalMESA");
+      return NULL;
+   }
+
+   irb = intel_renderbuffer(rb);
+   image = CALLOC(sizeof *image);
+   if (image == NULL)
+      return NULL;
+
+   image->internal_format = rb->InternalFormat;
+   image->format = rb->Format;
+   image->data_type = rb->DataType;
+   image->data = loaderPrivate;
+   intel_region_reference(&image->region, irb->region);
+
+   return image;
+}
+
+static void
+intel_destroy_image(__DRIimage *image)
+{
+    intel_region_release(&image->region);
+    FREE(image);
+}
+
+static struct __DRIimageExtensionRec intelImageExtension = {
+    { __DRI_IMAGE, __DRI_IMAGE_VERSION },
+    intel_create_image_from_name,
+    intel_create_image_from_renderbuffer,
+    intel_destroy_image,
+};
+
 static const __DRIextension *intelScreenExtensions[] = {
     &driReadDrawableExtension,
     &intelTexOffsetExtension.base,
     &intelTexBufferExtension.base,
     &intelFlushExtension.base,
+    &intelImageExtension.base,
     NULL
 };
 
-- 
cgit v1.2.3


From 10e79627414bc2bbc72d68ed25fb9999948a294f Mon Sep 17 00:00:00 2001
From: Kristian Høgsberg <krh@bitplanet.net>
Date: Thu, 11 Feb 2010 19:04:02 -0500
Subject: intel: Implement GL_OES_EGL_image entrypoints

---
 src/mesa/drivers/dri/intel/intel_fbo.c       | 36 +++++++++++++++++++
 src/mesa/drivers/dri/intel/intel_tex_image.c | 52 ++++++++++++++++++++++++++++
 2 files changed, 88 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/intel/intel_fbo.c b/src/mesa/drivers/dri/intel/intel_fbo.c
index e154bd4087..82c7b19eef 100644
--- a/src/mesa/drivers/dri/intel/intel_fbo.c
+++ b/src/mesa/drivers/dri/intel/intel_fbo.c
@@ -200,6 +200,37 @@ intel_alloc_renderbuffer_storage(GLcontext * ctx, struct gl_renderbuffer *rb,
 }
 
 
+#if FEATURE_OES_EGL_image
+static void
+intel_image_target_renderbuffer_storage(GLcontext *ctx,
+					struct gl_renderbuffer *rb,
+					void *image_handle)
+{
+   struct intel_context *intel = intel_context(ctx);
+   struct intel_renderbuffer *irb;
+   __DRIscreen *screen;
+   __DRIimage *image;
+
+   screen = intel->intelScreen->driScrnPriv;
+   image = screen->dri2.image->lookupEGLImage(intel->driContext, image_handle,
+					      intel->driContext->loaderPrivate);
+   if (image == NULL)
+      return;
+
+   irb = intel_renderbuffer(rb);
+   if (irb->region)
+      intel_region_release(&irb->region);
+   intel_region_reference(&irb->region, image->region);
+
+   rb->Width = image->region->width;
+   rb->Height = image->region->height;
+   rb->Format = image->format;
+   rb->DataType = image->data_type;
+   rb->_BaseFormat = _mesa_base_fbo_format(&intel->ctx,
+					   image->internal_format);
+}
+#endif
+
 /**
  * Called for each hardware renderbuffer when a _window_ is resized.
  * Just update fields.
@@ -651,4 +682,9 @@ intel_fbo_init(struct intel_context *intel)
    intel->ctx.Driver.ResizeBuffers = intel_resize_buffers;
    intel->ctx.Driver.ValidateFramebuffer = intel_validate_framebuffer;
    intel->ctx.Driver.BlitFramebuffer = _mesa_meta_BlitFramebuffer;
+
+#if FEATURE_OES_EGL_image
+   intel->ctx.Driver.EGLImageTargetRenderbufferStorage =
+      intel_image_target_renderbuffer_storage;
+#endif   
 }
diff --git a/src/mesa/drivers/dri/intel/intel_tex_image.c b/src/mesa/drivers/dri/intel/intel_tex_image.c
index aefd0b97d0..f586aee992 100644
--- a/src/mesa/drivers/dri/intel/intel_tex_image.c
+++ b/src/mesa/drivers/dri/intel/intel_tex_image.c
@@ -814,6 +814,54 @@ intelSetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPriv)
    intelSetTexBuffer2(pDRICtx, target, __DRI_TEXTURE_FORMAT_RGBA, dPriv);
 }
 
+#if FEATURE_OES_EGL_image
+static void
+intel_image_target_texture_2d(GLcontext *ctx, GLenum target,
+			      struct gl_texture_object *texObj,
+			      struct gl_texture_image *texImage,
+			      GLeglImageOES image_handle)
+{
+   struct intel_context *intel = intel_context(ctx);
+   struct intel_texture_object *intelObj = intel_texture_object(texObj);
+   struct intel_texture_image *intelImage = intel_texture_image(texImage);
+   struct intel_mipmap_tree *mt;
+   __DRIscreen *screen;
+   __DRIimage *image;
+
+   screen = intel->intelScreen->driScrnPriv;
+   image = screen->dri2.image->lookupEGLImage(intel->driContext, image_handle,
+					      intel->driContext->loaderPrivate);
+   if (image == NULL)
+      return;
+
+   mt = intel_miptree_create_for_region(intel, target,
+					image->internal_format,
+					0, 0, image->region, 1, 0);
+   if (mt == NULL)
+       return;
+
+   if (intelImage->mt) {
+      intel_miptree_release(intel, &intelImage->mt);
+      assert(!texImage->Data);
+   }
+   if (intelObj->mt)
+      intel_miptree_release(intel, &intelObj->mt);
+
+   intelObj->mt = mt;
+   _mesa_init_teximage_fields(&intel->ctx, target, texImage,
+			      image->region->width, image->region->height, 1,
+			      0, image->internal_format);
+
+   intelImage->face = target_to_face(target);
+   intelImage->level = 0;
+   texImage->TexFormat = image->format;
+   texImage->RowStride = image->region->pitch;
+   intel_miptree_reference(&intelImage->mt, intelObj->mt);
+
+   if (!intel_miptree_match_image(intelObj->mt, &intelImage->base))
+      fprintf(stderr, "miptree doesn't match image\n");
+}
+#endif
 
 void
 intelInitTextureImageFuncs(struct dd_function_table *functions)
@@ -825,4 +873,8 @@ intelInitTextureImageFuncs(struct dd_function_table *functions)
 
    functions->CompressedTexImage2D = intelCompressedTexImage2D;
    functions->GetCompressedTexImage = intelGetCompressedTexImage;
+
+#if FEATURE_OES_EGL_image
+   functions->EGLImageTargetTexture2D = intel_image_target_texture_2d;
+#endif
 }
-- 
cgit v1.2.3


From f393d95ff2de0a87d188099f97bf6cc781ae9e54 Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Wed, 24 Feb 2010 14:06:52 -0700
Subject: dri: remove old assertion (see bug 26734)

(cherry picked from commit 293f4d51b473783d5c5ab773a1c438e0a2fe46f2)
---
 src/mesa/drivers/dri/common/drirenderbuffer.c | 8 --------
 1 file changed, 8 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/common/drirenderbuffer.c b/src/mesa/drivers/dri/common/drirenderbuffer.c
index 48a2c66229..c9ce6e3cb6 100644
--- a/src/mesa/drivers/dri/common/drirenderbuffer.c
+++ b/src/mesa/drivers/dri/common/drirenderbuffer.c
@@ -59,14 +59,6 @@ driNewRenderbuffer(gl_format format, GLvoid *addr,
 {
    driRenderbuffer *drb;
 
-   assert(format == GL_RGBA ||
-          format == GL_RGB5 ||
-          format == GL_RGBA8 ||
-          format == GL_DEPTH_COMPONENT16 ||
-          format == GL_DEPTH_COMPONENT24 ||
-          format == GL_DEPTH_COMPONENT32 ||
-          format == GL_STENCIL_INDEX8_EXT);
-
    assert(cpp > 0);
    assert(pitch > 0);
 
-- 
cgit v1.2.3


From 17efc8c05c6931a4638ee9f6138794f2b2b29540 Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Wed, 24 Feb 2010 14:00:30 -0800
Subject: mesa: Fix SCons build.

---
 src/mesa/main/teximage.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
index 40ebff76c6..d72e91b3a3 100644
--- a/src/mesa/main/teximage.c
+++ b/src/mesa/main/teximage.c
@@ -2452,10 +2452,10 @@ _mesa_TexImage3DEXT( GLenum target, GLint level, GLenum internalFormat,
 void GLAPIENTRY
 _mesa_EGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image)
 {
-   GET_CURRENT_CONTEXT(ctx);
-   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
    struct gl_texture_object *texObj;
    struct gl_texture_image *texImage;
+   GET_CURRENT_CONTEXT(ctx);
+   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
 
    if (target != GL_TEXTURE_2D) {
       _mesa_error(ctx, GL_INVALID_ENUM,
-- 
cgit v1.2.3


From 072aeb57bd20b5fc39cf9d46a693a1a9aa9de11e Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Wed, 24 Feb 2010 16:13:46 -0700
Subject: vbo: remove dead code

---
 src/mesa/vbo/vbo_context.c | 38 +++-----------------------------------
 1 file changed, 3 insertions(+), 35 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/vbo/vbo_context.c b/src/mesa/vbo/vbo_context.c
index a5b0070bd3..e3be39a342 100644
--- a/src/mesa/vbo/vbo_context.c
+++ b/src/mesa/vbo/vbo_context.c
@@ -33,24 +33,13 @@
 #include "vbo.h"
 #include "vbo_context.h"
 
-#if 0
-/* Reach out and grab this to use as the default:
- */
-extern void _tnl_draw_prims( GLcontext *ctx,
-			     const struct gl_client_array *arrays[],
-			     const struct _mesa_prim *prims,
-			     GLuint nr_prims,
-			     const struct _mesa_index_buffer *ib,
-			     GLuint min_index,
-			     GLuint max_index );
-#endif
-
 
 
 #define NR_LEGACY_ATTRIBS 16
 #define NR_GENERIC_ATTRIBS 16
 #define NR_MAT_ATTRIBS 12
 
+
 static GLuint check_size( const GLfloat *attr )
 {
    if (attr[3] != 1.0) return 4;
@@ -59,6 +48,7 @@ static GLuint check_size( const GLfloat *attr )
    return 1;		
 }
 
+
 static void init_legacy_currval(GLcontext *ctx)
 {
    struct vbo_context *vbo = vbo_context(ctx);
@@ -158,23 +148,6 @@ static void init_mat_currval(GLcontext *ctx)
    }
 }
 
-#if 0
-
-static void vbo_exec_current_init( struct vbo_exec_context *exec ) 
-{
-   GLcontext *ctx = exec->ctx;
-   GLint i;
-
-   /* setup the pointers for the typical 16 vertex attributes */
-   for (i = 0; i < VBO_ATTRIB_FIRST_MATERIAL; i++) 
-      exec->vtx.current[i] = ctx->Current.Attrib[i];
-
-   /* setup pointers for the 12 material attributes */
-   for (i = 0; i < MAT_ATTRIB_MAX; i++)
-      exec->vtx.current[VBO_ATTRIB_FIRST_MATERIAL + i] = 
-	 ctx->Light.Material.Attrib[i];
-}
-#endif
 
 GLboolean _vbo_CreateContext( GLcontext *ctx )
 {
@@ -220,12 +193,6 @@ GLboolean _vbo_CreateContext( GLcontext *ctx )
    }
 
 
-   /* By default: 
-    */
-#if 0 /* dead - see vbo_set_draw_func() */
-   vbo->draw_prims = _tnl_draw_prims;
-#endif
-
    /* Hook our functions into exec and compile dispatch tables.  These
     * will pretty much be permanently installed, which means that the
     * vtxfmt mechanism can be removed now.
@@ -240,6 +207,7 @@ GLboolean _vbo_CreateContext( GLcontext *ctx )
    return GL_TRUE;
 }
 
+
 void _vbo_InvalidateState( GLcontext *ctx, GLuint new_state )
 {
    _ae_invalidate_state(ctx, new_state);
-- 
cgit v1.2.3


From d553479cc48d512fc5055c166a699bcfff494a24 Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Thu, 25 Feb 2010 02:26:18 -0800
Subject: mesa: Remove dead error condition.

---
 src/mesa/main/pixel.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/main/pixel.c b/src/mesa/main/pixel.c
index f6c316a580..e2e3854fc8 100644
--- a/src/mesa/main/pixel.c
+++ b/src/mesa/main/pixel.c
@@ -427,7 +427,7 @@ _mesa_GetPixelMapusv( GLenum map, GLushort *values )
       _mesa_error(ctx, GL_INVALID_ENUM, "glGetPixelMapusv(map)");
       return;
    }
-   mapsize = pm ? pm->Size : 0;
+   mapsize = pm->Size;
 
    if (!validate_pbo_access(ctx, &ctx->Pack, mapsize,
                             GL_INTENSITY, GL_UNSIGNED_SHORT, values)) {
-- 
cgit v1.2.3


From 2be1fcaafef8af672434553c4bdca73a9db6934d Mon Sep 17 00:00:00 2001
From: Chia-I Wu <olv@lunarg.com>
Date: Wed, 24 Feb 2010 11:17:16 +0800
Subject: mesa: Remove unused Makefile.{ugl,win}.

---
 src/mesa/main/Makefile.ugl | 364 ---------------------------------------------
 src/mesa/main/Makefile.win | 208 --------------------------
 2 files changed, 572 deletions(-)
 delete mode 100644 src/mesa/main/Makefile.ugl
 delete mode 100644 src/mesa/main/Makefile.win

(limited to 'src/mesa')

diff --git a/src/mesa/main/Makefile.ugl b/src/mesa/main/Makefile.ugl
deleted file mode 100644
index b440e13643..0000000000
--- a/src/mesa/main/Makefile.ugl
+++ /dev/null
@@ -1,364 +0,0 @@
-# Mesa 3-D graphics library
-# Version:  4.1
-#
-# Copyright (C) 2001 Wind River Systems, Inc
-
-# The MIT License
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# the rights to use, copy, modify, merge, publish, distribute, sublicense,
-# and/or sell copies of the Software, and to permit persons to whom the
-# Software is furnished to do so, subject to the following conditions:
-# 
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-# 
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
-# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
-# DEALINGS IN THE SOFTWARE.
-
-# Makefile for core library
-
-# This makefile can moved all objects files in MESA_OBJ for use with
-# ld in windShell or create a library from objects files in their
-# associated .c folder.
-#
-# For an easy inclusion of lib$(CPU)$(TOOL)GL.a in vxworks image, this
-# makefile collects together all .o in an only file
-# (obj$(CPU)$(TOOL)GL.o). This operation is unnecessary for
-# lib$(CPU)$(TOOL)OSMesa.a and lib$(CPU)$(TOOL)UglMesa.a because they
-# already contain only one file.
-#
-##### MACROS #####
-MESA_MAJOR=4
-MESA_MINOR=1
-MESA_TINY=0
-VERSION=$(MESA_MAJOR).$(MESA_MINOR)
-
-GL_MAJOR = 1
-GL_MINOR = 2
-GL_TINY = 0$(MESA_MAJOR)0$(MESA_MINOR)0$(MESA_TINY)
-
-##### RULES #####
-
-include ..\rules.windml
-
-#### GL #####
-
-GL_SOURCES = \
-	api_arrayelt.c \
-	api_loopback.c \
-	api_noop.c \
-	api_validate.c \
-	accum.c \
-	arbprogram.c \
-	attrib.c \
-	blend.c \
-	bufferobj.c \
-	buffers.c \
-	clip.c \
-	colortab.c \
-	context.c \
-	convolve.c \
-	debug.c \
-	depth.c \
-	dispatch.c \
-	dlist.c \
-	drawpix.c \
-	enable.c \
-	enums.c \
-	eval.c \
-	extensions.c \
-	feedback.c \
-	fog.c \
-	get.c \
-	glapi.c \
-	glthread.c \
-	hash.c \
-	hint.c \
-	histogram.c \
-	image.c \
-	imports.c \
-	light.c \
-	lines.c \
-	matrix.c \
-	pixel.c \
-	points.c \
-	polygon.c \
-	rastpos.c \
-	state.c \
-	stencil.c \
-	texcompress.c \
-	texformat.c \
-	teximage.c \
-	texobj.c \
-	texstate.c \
-	texstore.c \
-	texutil.c \
-	varray.c \
-	vtxfmt.c \
-	X86/x86.c \
-	X86/common_x86.c \
-	X86/3dnow.c \
-	X86/sse.c \
-	math/m_debug_clip.c \
-	math/m_debug_norm.c \
-	math/m_debug_vertex.c \
-	math/m_debug_xform.c \
-	math/m_eval.c \
-	math/m_matrix.c \
-	math/m_translate.c \
-	math/m_vector.c \
-	math/m_vertices.c \
-	math/m_xform.c \
-	array_cache/ac_context.c \
-	array_cache/ac_import.c \
-	swrast/s_aaline.c \
-	swrast/s_aatriangle.c \
-	swrast/s_accum.c \
-	swrast/s_alpha.c \
-	swrast/s_alphabuf.c \
-	swrast/s_bitmap.c \
-	swrast/s_blend.c \
-	swrast/s_buffers.c \
-	swrast/s_copypix.c \
-	swrast/s_context.c \
-	swrast/s_depth.c \
-	swrast/s_drawpix.c \
-	swrast/s_feedback.c \
-	swrast/s_fog.c \
-	swrast/s_imaging.c \
-	swrast/s_lines.c \
-	swrast/s_logic.c \
-	swrast/s_masking.c \
-	swrast/s_pixeltex.c \
-	swrast/s_points.c \
-	swrast/s_readpix.c \
-	swrast/s_span.c \
-	swrast/s_stencil.c \
-	swrast/s_texture.c \
-	swrast/s_texstore.c \
-	swrast/s_triangle.c \
-	swrast/s_zoom.c \
-	swrast_setup/ss_context.c \
-	swrast_setup/ss_triangle.c \
-	swrast_setup/ss_vb.c \
-	tnl/t_array_api.c \
-	tnl/t_array_import.c \
-	tnl/t_context.c \
-	tnl/t_eval_api.c \
-	tnl/t_imm_alloc.c \
-	tnl/t_imm_api.c \
-	tnl/t_imm_debug.c \
-	tnl/t_imm_dlist.c \
-	tnl/t_imm_elt.c \
-	tnl/t_imm_eval.c \
-	tnl/t_imm_exec.c \
-	tnl/t_imm_fixup.c \
-	tnl/t_pipeline.c \
-	tnl/t_vb_fog.c \
-	tnl/t_vb_light.c \
-	tnl/t_vb_normals.c \
-	tnl/t_vb_points.c \
-	tnl/t_vb_render.c \
-	tnl/t_vb_texgen.c \
-	tnl/t_vb_texmat.c \
-	tnl/t_vb_vertex.c
-
-GL_OBJECTS = $(GL_SOURCES:.c=.o)
-GL_OBJNAME = $(MESA_LIBDIR)/objMesaGL.o
-
-#### X86 #####
-
-x86_files = \
-	X86/common_x86_asm.S \
-	X86/glapi_x86.S \
-	X86/x86_cliptest.S \
-	X86/x86_vertex.S \
-	X86/x86_xform2.S \
-	X86/x86_xform3.S \
-	X86/x86_xform4.S \
-
-x3dnow_files = \
-	X86/3dnow_normal.S \
-	X86/3dnow_vertex.S \
-	X86/3dnow_xform1.S \
-	X86/3dnow_xform2.S \
-	X86/3dnow_xform3.S \
-	X86/3dnow_xform4.S
-
-sse_files = \
-	X86/sse_normal.S \
-	X86/sse_vertex.S \
-	X86/sse_xform1.S \
-	X86/sse_xform2.S \
-	X86/sse_xform3.S \
-	X86/sse_xform4.S
-
-mmx_files = X86/mmx_blend.S
-
-X86_OBJNAME = $(MESA_LIBDIR)/objMesaX86.o
-
-##### UGL #####
-
-UGL_SOURCES = \
-	windml/ugl_api.c \
-	windml/ugl_dd.c \
-	windml/ugl_span.c \
-	windml/ugl_line.c \
-	windml/ugl_tri.c \
-	windml/tornado/torMesaUGLInit.c
-
-UGL_OBJECTS = $(UGL_SOURCES:.c=.o)
-UGL_OBJNAME = $(MESA_LIBDIR)/objMesaUGL.o
-
-##### OS #####
-
-OS_SOURCES = OSmesa/osmesa.c windml/tornado/torMesaOSInit.c
-OS_OBJECTS = $(OS_SOURCES:.c=.o)
-OS_OBJNAME = $(MESA_LIBDIR)/objMesaOS.o
-
-##### GLUTSHAPES #####
-
-GLUTSHAPES_SOURCES = \
-	windml/ugl_glutshapes.c \
-	windml/tornado/torGLUTShapesInit.c
-
-GLUTSHAPES_OBJECTS = $(GLUTSHAPES_SOURCES:.c=.o)
-GLUTSHAPES_OBJNAME = $(MESA_LIBDIR)/objGLUTShapes.o
-
-SOURCES = $(GL_SOURCES) $(UGL_SOURCES) $(OS_SOURCES) \
-	$(GLUTSHAPES_SOURCES)
-
-##### TARGETS #####
-
-all: depend.$(CPU)$(TOOL) cfgX86 $(X86_OBJNAME) $(GL_OBJNAME)\
-$(UGL_OBJNAME) $(OS_OBJNAME) $(GLUTSHAPES_OBJNAME)
-
-#histogram.o:
-#	$(CC) $(CFLAGS) -O1 $(OPTION_OBJECT_ONLY) $(OPTION_OBJECT_NAME)$@ $<
-
-#image.o:
-#	$(CC) $(CFLAGS) -O1 $(OPTION_OBJECT_ONLY) $(OPTION_OBJECT_NAME)$@ $<
-
-cfgX86:
-ifdef HAVE_3DNOW
-x3dnow_sources = $(x3dnow_files)
-CFLAGS_3DNOW = -DUSE_3DNOW_ASM
-HAVE_X86 = 1
-endif
-ifdef HAVE_SSE
-sse_sources = $(sse_files)
-CFLAGS_SSE = -DUSE_SSE_ASM
-HAVE_X86 = 1
-endif
-ifdef HAVE_MMX
-mmx_sources = $(mmx_files)
-CFLAGS_MMX = -DUSE_MMX_ASM
-HAVE_X86 = 1
-endif
-ifdef HAVE_X86
-x86_sources = $(x86_files)
-CFLAGS_X86 = -DUSE_X86_ASM
-endif
-X86_SOURCES = $(x86_sources) $(mmx_sources) \
-	$(x3dnow_sources) $(sse_sources)
-X86_OBJECTS = $(X86_SOURCES:.S=.o)
-CFLAGS_USE_X86 = $(CFLAGS_3DNOW) $(CFLAGS_SSE) $(CFLAGS_MMX) $(CFLAGS_X86)
-
-#X86/matypes.h: mtypes.h tnl/t_context.h X86/gen_matypes.c
-#	$(CC) -I ./ X86/gen_matypes.c -o X86/gen_matypes
-#	./X86/gen_matypes > X86/matypes.h
-#	$(RM) X86/gen_matypes
-#	$(RM) X86/gen_matypes.o
-
-# Make the Mesax86 library
-$(X86_OBJNAME): $(X86_OBJECTS)
-ifdef HAVE_X86
-#	$(LD) -r $(X86_OBJECTS) -o $(MESA_OBJNAME)
-	$(LD) -r $(X86_OBJECTS) -o $(X86_OBJNAME)
-#	$(AR) rus $(MESA_LIBNAME) $(X86_OBJNAME)
-#	$(RM) $(X86_OBJNAME)
-endif
-
-# Make the GL library
-$(GL_OBJNAME): $(GL_OBJECTS)
-#	$(LD) -r $(GL_OBJECTS) -o $(MESA_OBJNAME)
-	$(LD) -r $(GL_OBJECTS) -o $(GL_OBJNAME)
-#	$(AR) rus $(MESA_LIBNAME) $(GL_OBJNAME)
-#	$(AR) rus $(VX_LIBNAME) $(GL_OBJNAME)
-#	$(RM) $(GL_OBJNAME)
-
-# Make the UGLMesa library
-$(UGL_OBJNAME): $(UGL_OBJECTS)
-#	$(LD) -r $(UGL_OBJECTS) -o $(MESA_OBJNAME)
-	$(LD) -r $(UGL_OBJECTS) -o $(UGL_OBJNAME)
-#	$(AR) rus $(MESA_LIBNAME) $(UGL_OBJNAME)
-#	$(AR) rus $(VX_LIBNAME) $(UGL_OBJNAME)
-#	$(RM) $(UGL_OBJNAME)
-
-# Make the OSMesa library
-$(OS_OBJNAME): $(OS_OBJECTS)
-#	$(LD) -r $(OS_OBJECTS) -o $(MESA_OBJNAME)
-	$(LD) -r $(OS_OBJECTS) -o $(OS_OBJNAME)
-#	$(AR) rus $(MESA_LIBNAME) $(OS_OBJNAME)
-#	$(AR) rus $(VX_LIBNAME) $(OS_OBJNAME)
-#	$(RM) $(OS_OBJNAME)
-
-# Make the GLUT Shapes library
-$(GLUTSHAPES_OBJNAME): $(GLUTSHAPES_OBJECTS)
-#	$(LD) -r $(GLUTSHAPES_OBJECTS) -o $(MESA_OBJNAME)
-	$(LD) -r $(GLUTSHAPES_OBJECTS) -o $(GLUTSHAPES_OBJNAME)
-#	$(AR) rus $(MESA_LIBNAME) $(GLUTSHAPES_OBJNAME)
-#	$(AR) rus $(VX_LIBNAME) $(GLUTSHAPES_OBJNAME)
-#	$(RM) $(GLUTSHAPES_OBJNAME)
-
-depend.$(CPU)$(TOOL):
-ifeq ($(WIND_HOST_TYPE),x86-win32)
-	@ $(RM) $@
-	@ $(ECHO) Creating depend.$(CPU)$(TOOL)
-ifneq ($(SOURCES),)
-	@ for %f in ($(SOURCES)) do \
-	$(CC) -MM $(CFLAGS) %f >>$@ 
-endif
-else
-Makefile
-	@ $(RM) $@
-	@ $(ECHO) "Creating depend.$(CPU)$(TOOL)"
-ifneq ($(SOURCES),)
-	@ for FILE in $(filter-out $(NODEPENDOBJS), $(SOURCES)); \
-	do \
-	$(CC) -MM $(CFLAGS) $$FILE  \
-	| $(TCL) $(BIN_DIR)/depend.tcl $(TGT_DIR) >>$@; \
-	done	
-endif
-endif
-
-.PHONY = clean
-
-clean:
-# 	$(AR) d $(MESA_LIBNAME) $(GL_OBJNAME)
-# 	$(AR) d $(MESA_LIBNAME) $(UGL_OBJNAME)
-# 	$(AR) d $(MESA_LIBNAME) $(OS_OBJNAME)
-# 	$(AR) d $(MESA_LIBNAME) $(GLUTSHAPES_OBJNAME)
-# 	$(AR) d $(VX_LIBNAME) $(GL_OBJNAME)
-# 	$(AR) d $(VX_LIBNAME) $(UGL_OBJNAME)
-# 	$(AR) d $(VX_LIBNAME) $(OS_OBJNAME)
-# 	$(AR) d $(VX_LIBNAME) $(GLUTSHAPES_OBJNAME)
-	$(RM) $(GL_OBJECTS)
-	$(RM) $(UGL_OBJECTS)
-	$(RM) $(OS_OBJECTS)
-	$(RM) $(GLUTSHAPES_OBJECTS)
-	$(RM) $(GL_OBJNAME)
-	$(RM) $(UGL_OBJNAME)
-	$(RM) $(OS_OBJNAME)
-	$(RM) $(GLUTSHAPES_OBJNAME)
-	$(RM) depend.$(CPU)$(TOOL)
-
-include depend.$(CPU)$(TOOL)
-
diff --git a/src/mesa/main/Makefile.win b/src/mesa/main/Makefile.win
deleted file mode 100644
index a27f44c112..0000000000
--- a/src/mesa/main/Makefile.win
+++ /dev/null
@@ -1,208 +0,0 @@
-# Makefile for Win32
-#
-#  NOTE: the install target may overwrite important files in the system dirs
-#  Check first, before making the install target.
-#
-#  This builds both the osmesa and Windows drivers.
-#
-
-!include <win32.mak>
-
-TOP = ..
-SUBDIRS = osmesa.dir
-
-CORE_SRCS = \
-	api_loopback.c \
-	api_noop.c \
-	api_validate.c \
-	accum.c \
-	arbprogram.c \
-	attrib.c \
-	blend.c \
-	bufferobj.c \
-	buffers.c \
-	clip.c \
-	colortab.c \
-	context.c \
-	convolve.c \
-	debug.c \
-	depth.c \
-	dispatch.c \
-	dlist.c \
-	drawpix.c \
-	enable.c \
-	enums.c \
-	eval.c \
-	extensions.c \
-	feedback.c \
-	fog.c \
-	get.c \
-	glapi.c \
-	glthread.c \
-	hash.c \
-	hint.c \
-	histogram.c \
-	image.c \
-	imports.c \
-	light.c \
-	lines.c \
-	matrix.c \
-	nvprogram.c \
-	nvfragparse.c \
-	nvvertexec.c \
-	nvvertparse.c \
-	pixel.c \
-	points.c \
-	polygon.c \
-	rastpos.c \
-	state.c \
-	stencil.c \
-	texcompress.c \
-	texcompress_fxt1.c \
-	texcompress_s3tc.c \
-	teximage.c \
-	texformat.c \
-	texobj.c \
-	texstate.c \
-	texstore.c \
-	varray.c \
-	vtxfmt.c \
-#	X86\x86.c \
-#	X86\common_x86.c \
-#	X86\3dnow.c \
-#	X86\sse.c \
-	math\m_debug_norm.c \
-	math\m_debug_xform.c \
-	math\m_eval.c \
-	math\m_matrix.c \
-	math\m_translate.c \
-	math\m_vector.c \
-	math\m_xform.c \
-	array_cache\ac_context.c \
-	array_cache\ac_import.c \
-	swrast\s_aaline.c \
-	swrast\s_aatriangle.c \
-	swrast\s_accum.c \
-	swrast\s_alpha.c \
-	swrast\s_alphabuf.c \
-	swrast\s_bitmap.c \
-	swrast\s_blend.c \
-	swrast\s_buffers.c \
-	swrast\s_copypix.c \
-	swrast\s_context.c \
-	swrast\s_depth.c \
-	swrast\s_drawpix.c \
-	swrast\s_feedback.c \
-	swrast\s_fog.c \
-	swrast\s_imaging.c \
-	swrast\s_lines.c \
-	swrast\s_logic.c \
-	swrast\s_masking.c \
-	swrast\s_nvfragprog.c \
-	swrast\s_pixeltex.c \
-	swrast\s_points.c \
-	swrast\s_readpix.c \
-	swrast\s_span.c \
-	swrast\s_stencil.c \
-	swrast\s_texstore.c \
-	swrast\s_texture.c \
-	swrast\s_triangle.c \
-	swrast\s_zoom.c \
-	swrast_setup\ss_context.c \
-	swrast_setup\ss_triangle.c \
-	swrast_setup\ss_vb.c \
-	tnl\t_array_api.c \
-	tnl\t_array_import.c \
-	tnl\t_context.c \
-	tnl\t_eval_api.c \
-	tnl\t_imm_alloc.c \
-	tnl\t_imm_api.c \
-	tnl\t_imm_debug.c \
-	tnl\t_imm_dlist.c \
-	tnl\t_imm_elt.c \
-	tnl\t_imm_eval.c \
-	tnl\t_imm_exec.c \
-	tnl\t_imm_fixup.c \
-	tnl\t_pipeline.c \
-	tnl\t_vb_fog.c \
-	tnl\t_vb_light.c \
-	tnl\t_vb_normals.c \
-	tnl\t_vb_points.c \
-	tnl\t_vb_program.c \
-	tnl\t_vb_render.c \
-	tnl\t_vb_texgen.c \
-	tnl\t_vb_texmat.c \
-	tnl\t_vb_vertex.c
-
-DRIVER_SRCS = \
-	Trace\tr_context.c \
-	Trace\tr_control.c \
-	Trace\tr_error.c \
-	Trace\tr_support.c \
-	Trace\tr_wrapper.c \
-	Trace\tr_write.c \
-	Windows\wgl.c \
-	Windows\wmesa.c
-
-ASM_SRCS =
-
-SRCS	= $(CORE_SRCS) $(DRIVER_SRCS)
-
-all	: mesadll $(SUBDIRS)
-
-!include "$(TOP)/mesawin32.mak"
-
-mesadll	: $(MESADLL)
-
-CFLAGS	= $(cvarsdll) $(CFLAGS) -D_OPENGL32_ -DBUILD_GL32 -DNO_PARALLEL -DNO_STEREO
-!IFNDEF NODEBUG
-CFLAGS = $(CFLAGS) -DMESA_DEBUG
-!ENDIF
-LFLAGS	= $(dlllflags) $(lcommon) $(LFLAGS)
-
-OBJS	= $(ASM_SRCS:.S=.obj) $(CORE_SRCS:.c=.obj) $(DRIVER_SRCS:.c=.obj)
-LIBS	= winmm.lib $(guilibsdll)
-
-$(MESADLL)	: $(OBJS) mesa.def
-	$(link) $(LFLAGS) -out:$(MESADLL) -def:mesa.def $(OBJS) $(LIBS)
-	@echo "copying Mesa dynamic link library to lib directory..."
-	-copy $(MESADLL) ..\lib
-	@echo "copying Mesa import library to lib directory..."
-	-copy $(MESALIB) ..\lib
-
-$(SUBDIRS)	:
-	@echo.
-	@echo Making in $* directory
-	@cd $*
-	@nmake -f Makefile.win -nologo
-	@cd ..
-
-install	: $(MESADLL)
-	@echo.
-	@echo "copying Mesa dynamic link library to system directory..."
-	-copy $(MESADLL) $(DLLINSTALL)
-	@echo "copying Mesa header files to include directory..."
-	-copy ..\..\include\GL\gl.h $(INCLUDEINSTALL)
-	-copy ..\..\include\GL\glext.h $(INCLUDEINSTALL)
-	@echo "copying Mesa import library to library directory..."
-	-copy $(MESALIB) $(LIBINSTALL)
-
-clean	::
-	@del /f tnl\*.obj
-	@del /f swrast_setup\*.obj
-	@del /f math\*.obj
-	@del /f array_cache\*.obj
-	@del /f swrast\*.obj
-	@del /f Trace\*.obj
-	@del /f osmesa\*.obj
-	@del /f Windows\*.obj
-
-clobber	::
-	@del /f OSmesa\*.lib
-	@del /f OSmesa\*.exp
-	@del /f OSmesa\*.dll
-
-# override default inference rule with one that writes the object to
-# the same subdir that the c file is in.
-.c.obj	:
-	$(cc) $(CFLAGS) -I. $< /Fo$*.obj
-- 
cgit v1.2.3


From 4cb13b433cfdaa1295e5df048d7ef614545f6e16 Mon Sep 17 00:00:00 2001
From: Chia-I Wu <olv@lunarg.com>
Date: Wed, 24 Feb 2010 12:04:58 +0800
Subject: glapi: Generated GLX sources should use glapidispatch.h.

Fix glX_proto_recv.py and glX_proto_send.py, and regenerate the sources.
---
 src/glx/indirect.c                   | 2 +-
 src/mesa/glapi/gen/glX_proto_recv.py | 2 +-
 src/mesa/glapi/gen/glX_proto_send.py | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

(limited to 'src/mesa')

diff --git a/src/glx/indirect.c b/src/glx/indirect.c
index 262637a947..4a571a230b 100644
--- a/src/glx/indirect.c
+++ b/src/glx/indirect.c
@@ -30,7 +30,7 @@
 #include "indirect.h"
 #include "glxclient.h"
 #include "indirect_size.h"
-#include "dispatch.h"
+#include "glapidispatch.h"
 #include "glapi.h"
 #include "glthread.h"
 #include <GL/glxproto.h>
diff --git a/src/mesa/glapi/gen/glX_proto_recv.py b/src/mesa/glapi/gen/glX_proto_recv.py
index f423c6db08..31745fcef7 100644
--- a/src/mesa/glapi/gen/glX_proto_recv.py
+++ b/src/mesa/glapi/gen/glX_proto_recv.py
@@ -92,7 +92,7 @@ class PrintGlxDispatchFunctions(glX_proto_common.glx_print_proto):
 		print '#include "glapi.h"'
 		print '#include "glapitable.h"'
 		print '#include "glthread.h"'
-		print '#include "dispatch.h"'
+		print '#include "glapidispatch.h"'
 		print ''
 		print '#define __GLX_PAD(x)  (((x) + 3) & ~3)'
 		print ''
diff --git a/src/mesa/glapi/gen/glX_proto_send.py b/src/mesa/glapi/gen/glX_proto_send.py
index daca1b767a..4d484c833a 100644
--- a/src/mesa/glapi/gen/glX_proto_send.py
+++ b/src/mesa/glapi/gen/glX_proto_send.py
@@ -166,7 +166,7 @@ class PrintGlxProtoStubs(glX_proto_common.glx_print_proto):
 		print '#include "indirect.h"'
 		print '#include "glxclient.h"'
 		print '#include "indirect_size.h"'
-		print '#include "dispatch.h"'
+		print '#include "glapidispatch.h"'
 		print '#include "glapi.h"'
 		print '#include "glthread.h"'
 		print '#include <GL/glxproto.h>'
-- 
cgit v1.2.3


From 27d260b41038e0c19c8f24b8bdb2c004c1eb7aa2 Mon Sep 17 00:00:00 2001
From: Chia-I Wu <olv@lunarg.com>
Date: Wed, 24 Feb 2010 11:20:14 +0800
Subject: glapi: Move src/mesa/main/dispatch.c to glapi and rename.

main/dispatch.c is a glapi source file.  It is part of GLAPI_SOURCES in
sources.mak and part of glapi_sources in SConscript.  This commit moves
it to glapi/ and renames it to glapi_dispatch.c.
---
 docs/devinfo.html                 |  2 +-
 docs/dispatch.html                |  4 +-
 src/mesa/Makefile.mgw             |  2 +-
 src/mesa/SConscript               |  2 +-
 src/mesa/glapi/glapi_dispatch.c   | 96 +++++++++++++++++++++++++++++++++++++++
 src/mesa/main/descrip.mms         |  3 --
 src/mesa/main/dispatch.c          | 96 ---------------------------------------
 src/mesa/sources.mak              |  2 +-
 windows/VC7/mesa/mesa/mesa.vcproj |  6 +--
 windows/VC8/mesa/mesa/mesa.vcproj |  8 ++--
 10 files changed, 109 insertions(+), 112 deletions(-)
 create mode 100644 src/mesa/glapi/glapi_dispatch.c
 delete mode 100644 src/mesa/main/dispatch.c

(limited to 'src/mesa')

diff --git a/docs/devinfo.html b/docs/devinfo.html
index 0fb816749e..df0e726524 100644
--- a/docs/devinfo.html
+++ b/docs/devinfo.html
@@ -107,7 +107,7 @@ Global variables are not allowed.
 Function name examples:
 </p>
 <pre>
-	glFooBar()       - a public GL entry point (in dispatch.c)
+	glFooBar()       - a public GL entry point (in glapi_dispatch.c)
 	_mesa_FooBar()   - the internal immediate mode function
 	save_FooBar()    - retained mode (display list) function in dlist.c
 	foo_bar()        - a static (private) function
diff --git a/docs/dispatch.html b/docs/dispatch.html
index bcab74c707..0c54a84675 100644
--- a/docs/dispatch.html
+++ b/docs/dispatch.html
@@ -244,8 +244,8 @@ isn't a significant problem.</p>
 system.  There are two steps to this.  The file must first be added to
 <tt>src/mesa/sources</tt>.  That gets the file built and linked.  The second
 step is to add the correct <tt>#ifdef</tt> magic to
-<tt>src/mesa/main/dispatch.c</tt> to prevent the C version of the dispatch
-functions from being built.</p>
+<tt>src/mesa/glapi/glapi_dispatch.c</tt> to prevent the C version of the
+dispatch functions from being built.</p>
 
 <A NAME="fixedsize"/>
 <H3>3.4. Fixed-Length Dispatch Stubs</H3>
diff --git a/src/mesa/Makefile.mgw b/src/mesa/Makefile.mgw
index e894c6277d..b90384d04a 100644
--- a/src/mesa/Makefile.mgw
+++ b/src/mesa/Makefile.mgw
@@ -200,7 +200,7 @@ ifeq (1,1)
 x86/glapi_x86.o: x86/glapi_x86.S
 	$(CC) -o $@ $(CFLAGS) -DSTDCALL_API -c $<
 else
-main/dispatch.o: main/dispatch.c
+glapi/glapi_dispatch.o: glapi/glapi_dispatch.c
 	$(CC) -o $@ $(CFLAGS) -UUSE_X86_ASM -c $<
 glapi/glapi.o: glapi/glapi.c
 	$(CC) -o $@ $(CFLAGS) -UUSE_X86_ASM -c $<
diff --git a/src/mesa/SConscript b/src/mesa/SConscript
index 0726fcb1a7..0a25dccde5 100644
--- a/src/mesa/SConscript
+++ b/src/mesa/SConscript
@@ -247,8 +247,8 @@ if env['platform'] != 'winddk':
 	)
 
 	glapi_sources = [
-		'main/dispatch.c',
 		'glapi/glapi.c',
+		'glapi/glapi_dispatch.c',
 		'glapi/glapi_getproc.c',
 		'glapi/glapi_nop.c',
 		'glapi/glthread.c',
diff --git a/src/mesa/glapi/glapi_dispatch.c b/src/mesa/glapi/glapi_dispatch.c
new file mode 100644
index 0000000000..4cb43f4505
--- /dev/null
+++ b/src/mesa/glapi/glapi_dispatch.c
@@ -0,0 +1,96 @@
+/*
+ * Mesa 3-D graphics library
+ * Version:  6.3
+ *
+ * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+
+/**
+ * \file glapi_dispatch.c
+ *
+ * This file generates all the gl* function entrypoints.  This code is not
+ * used if optimized assembly stubs are available (e.g., using x86/glapi_x86.S
+ * on IA32 or sparc/glapi_sparc.S on SPARC).
+ *
+ * \note
+ * This file is also used to build the client-side libGL that loads DRI-based
+ * device drivers.  At build-time it is symlinked to src/glx.
+ *
+ * \author Brian Paul <brian@precisioninsight.com>
+ */
+
+#include "main/glheader.h"
+#include "main/compiler.h"
+#include "glapi/glapi.h"
+#include "glapi/glapitable.h"
+#include "glapi/glapidispatch.h"
+#include "glapi/glthread.h"
+
+
+#if !(defined(USE_X86_ASM) || defined(USE_X86_64_ASM) || defined(USE_SPARC_ASM))
+
+#if defined(WIN32)
+#define KEYWORD1 GLAPI
+#else
+#define KEYWORD1 PUBLIC
+#endif
+
+#define KEYWORD2 GLAPIENTRY
+
+#if defined(USE_MGL_NAMESPACE)
+#define NAME(func)  mgl##func
+#else
+#define NAME(func)  gl##func
+#endif
+
+#if 0  /* Use this to log GL calls to stdout (for DEBUG only!) */
+
+#define F stdout
+#define DISPATCH(FUNC, ARGS, MESSAGE)		\
+   fprintf MESSAGE;				\
+   CALL_ ## FUNC(GET_DISPATCH(), ARGS);
+
+#define RETURN_DISPATCH(FUNC, ARGS, MESSAGE) 	\
+   fprintf MESSAGE;				\
+   return CALL_ ## FUNC(GET_DISPATCH(), ARGS);
+
+#else
+
+#define DISPATCH(FUNC, ARGS, MESSAGE)		\
+   CALL_ ## FUNC(GET_DISPATCH(), ARGS);
+
+#define RETURN_DISPATCH(FUNC, ARGS, MESSAGE) 	\
+   return CALL_ ## FUNC(GET_DISPATCH(), ARGS);
+
+#endif /* logging */
+
+
+#ifndef GLAPIENTRY
+#define GLAPIENTRY
+#endif
+
+#ifdef GLX_INDIRECT_RENDERING
+/* those link to libglapi.a should provide the entry points */
+#define _GLAPI_SKIP_PROTO_ENTRY_POINTS
+#endif
+#include "glapi/glapitemp.h"
+
+#endif /* USE_X86_ASM */
diff --git a/src/mesa/main/descrip.mms b/src/mesa/main/descrip.mms
index e49ec65d42..70bc263726 100644
--- a/src/mesa/main/descrip.mms
+++ b/src/mesa/main/descrip.mms
@@ -38,7 +38,6 @@ SOURCES =accum.c \
 	debug.c \
 	depth.c \
 	depthstencil.c \
-	dispatch.c \
 	dlist.c \
 	drawpix.c \
 	enable.c \
@@ -113,7 +112,6 @@ convolve.obj,\
 debug.obj,\
 depth.obj,\
 depthstencil.obj,\
-dispatch.obj,\
 dlist.obj,\
 drawpix.obj,\
 enable.obj,\
@@ -198,7 +196,6 @@ convolve.obj : convolve.c
 debug.obj : debug.c
 depth.obj : depth.c
 depthstencil.obj : depthstencil.c
-dispatch.obj : dispatch.c
 dlist.obj : dlist.c
 drawpix.obj : drawpix.c
 enable.obj : enable.c
diff --git a/src/mesa/main/dispatch.c b/src/mesa/main/dispatch.c
deleted file mode 100644
index b9b726b001..0000000000
--- a/src/mesa/main/dispatch.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  6.3
- *
- * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-/**
- * \file dispatch.c
- *
- * This file generates all the gl* function entrypoints.  This code is not
- * used if optimized assembly stubs are available (e.g., using x86/glapi_x86.S
- * on IA32 or sparc/glapi_sparc.S on SPARC).
- *
- * \note
- * This file is also used to build the client-side libGL that loads DRI-based
- * device drivers.  At build-time it is symlinked to src/glx.
- *
- * \author Brian Paul <brian@precisioninsight.com>
- */
-
-#include "main/glheader.h"
-#include "main/compiler.h"
-#include "glapi/glapi.h"
-#include "glapi/glapitable.h"
-#include "glapi/glapidispatch.h"
-#include "glapi/glthread.h"
-
-
-#if !(defined(USE_X86_ASM) || defined(USE_X86_64_ASM) || defined(USE_SPARC_ASM))
-
-#if defined(WIN32)
-#define KEYWORD1 GLAPI
-#else
-#define KEYWORD1 PUBLIC
-#endif
-
-#define KEYWORD2 GLAPIENTRY
-
-#if defined(USE_MGL_NAMESPACE)
-#define NAME(func)  mgl##func
-#else
-#define NAME(func)  gl##func
-#endif
-
-#if 0  /* Use this to log GL calls to stdout (for DEBUG only!) */
-
-#define F stdout
-#define DISPATCH(FUNC, ARGS, MESSAGE)		\
-   fprintf MESSAGE;				\
-   CALL_ ## FUNC(GET_DISPATCH(), ARGS);
-
-#define RETURN_DISPATCH(FUNC, ARGS, MESSAGE) 	\
-   fprintf MESSAGE;				\
-   return CALL_ ## FUNC(GET_DISPATCH(), ARGS);
-
-#else
-
-#define DISPATCH(FUNC, ARGS, MESSAGE)		\
-   CALL_ ## FUNC(GET_DISPATCH(), ARGS);
-
-#define RETURN_DISPATCH(FUNC, ARGS, MESSAGE) 	\
-   return CALL_ ## FUNC(GET_DISPATCH(), ARGS);
-
-#endif /* logging */
-
-
-#ifndef GLAPIENTRY
-#define GLAPIENTRY
-#endif
-
-#ifdef GLX_INDIRECT_RENDERING
-/* those link to libglapi.a should provide the entry points */
-#define _GLAPI_SKIP_PROTO_ENTRY_POINTS
-#endif
-#include "glapi/glapitemp.h"
-
-#endif /* USE_X86_ASM */
diff --git a/src/mesa/sources.mak b/src/mesa/sources.mak
index 354331955a..9f2e4e5157 100644
--- a/src/mesa/sources.mak
+++ b/src/mesa/sources.mak
@@ -86,8 +86,8 @@ MAIN_SOURCES = \
 	main/vtxfmt.c
 
 GLAPI_SOURCES = \
-	main/dispatch.c \
 	glapi/glapi.c \
+	glapi/glapi_dispatch.c \
 	glapi/glapi_getproc.c \
 	glapi/glapi_nop.c \
 	glapi/glthread.c
diff --git a/windows/VC7/mesa/mesa/mesa.vcproj b/windows/VC7/mesa/mesa/mesa.vcproj
index caee6c0ca6..623e001c74 100644
--- a/windows/VC7/mesa/mesa/mesa.vcproj
+++ b/windows/VC7/mesa/mesa/mesa.vcproj
@@ -181,9 +181,6 @@
 			<File
 				RelativePath="..\..\..\..\src\mesa\main\depthstencil.c">
 			</File>
-			<File
-				RelativePath="..\..\..\..\src\mesa\main\dispatch.c">
-			</File>
 			<File
 				RelativePath="..\..\..\..\src\mesa\main\dlist.c">
 			</File>
@@ -226,6 +223,9 @@
 			<File
 				RelativePath="..\..\..\..\src\mesa\glapi\glapi.c">
 			</File>
+			<File
+				RelativePath="..\..\..\..\src\mesa\glapi\glapi_dispatch.c">
+			</File>
 			<File
 				RelativePath="..\..\..\..\src\mesa\glapi\glthread.c">
 			</File>
diff --git a/windows/VC8/mesa/mesa/mesa.vcproj b/windows/VC8/mesa/mesa/mesa.vcproj
index 15ad229328..8795746916 100644
--- a/windows/VC8/mesa/mesa/mesa.vcproj
+++ b/windows/VC8/mesa/mesa/mesa.vcproj
@@ -422,10 +422,6 @@
 				RelativePath="..\..\..\..\src\mesa\main\depthstencil.c"
 				>
 			</File>
-			<File
-				RelativePath="..\..\..\..\src\mesa\main\dispatch.c"
-				>
-			</File>
 			<File
 				RelativePath="..\..\..\..\src\mesa\main\dlist.c"
 				>
@@ -494,6 +490,10 @@
 				RelativePath="..\..\..\..\src\mesa\glapi\glapi.c"
 				>
 			</File>
+			<File
+				RelativePath="..\..\..\..\src\mesa\glapi\glapi_dispatch.c"
+				>
+			</File>
 			<File
 				RelativePath="..\..\..\..\src\mesa\glapi\glapi_getproc.c"
 				>
-- 
cgit v1.2.3


From 2cf44390d1e819f23e1d7ceb3199276c9148c647 Mon Sep 17 00:00:00 2001
From: Chia-I Wu <olv@lunarg.com>
Date: Wed, 24 Feb 2010 12:01:14 +0800
Subject: mesa: Move src/mesa/glapi/dispatch.h to mesa.

glapi/dispatch.h is a core Mesa header file.  Move the header file to
main/ to make this clear.  It also becomes clear after this change that
IN_DRI_DRIVER is only used in core Mesa to enable the remap table.
---
 src/mesa/es/main/drawtex.c             |  2 +-
 src/mesa/es/main/es_generator.py       |  2 +-
 src/mesa/glapi/dispatch.h              | 37 ----------------------------------
 src/mesa/glapi/gen/extension_helper.py |  2 +-
 src/mesa/glapi/gen/remap_helper.py     |  2 +-
 src/mesa/main/accum.c                  |  2 +-
 src/mesa/main/api_arrayelt.c           |  2 +-
 src/mesa/main/api_exec.c               |  2 +-
 src/mesa/main/api_loopback.c           |  2 +-
 src/mesa/main/api_noop.c               |  2 +-
 src/mesa/main/arrayobj.c               |  2 +-
 src/mesa/main/attrib.c                 |  2 +-
 src/mesa/main/colortab.c               |  2 +-
 src/mesa/main/convolve.c               |  2 +-
 src/mesa/main/dispatch.h               | 37 ++++++++++++++++++++++++++++++++++
 src/mesa/main/dlist.c                  |  2 +-
 src/mesa/main/drawpix.c                |  2 +-
 src/mesa/main/eval.c                   |  2 +-
 src/mesa/main/feedback.c               |  2 +-
 src/mesa/main/histogram.c              |  2 +-
 src/mesa/main/pixel.c                  |  2 +-
 src/mesa/main/queryobj.c               |  2 +-
 src/mesa/main/rastpos.c                |  2 +-
 src/mesa/main/remap.c                  |  4 ++--
 src/mesa/main/remap_helper.h           |  2 +-
 src/mesa/main/texgen.c                 |  2 +-
 src/mesa/main/varray.c                 |  2 +-
 src/mesa/main/vtxfmt_tmp.h             |  2 +-
 src/mesa/shader/shader_api.c           |  2 +-
 src/mesa/vbo/vbo_exec_api.c            |  2 +-
 src/mesa/vbo/vbo_exec_eval.c           |  2 +-
 src/mesa/vbo/vbo_save_api.c            |  2 +-
 src/mesa/vbo/vbo_save_loopback.c       |  2 +-
 33 files changed, 69 insertions(+), 69 deletions(-)
 delete mode 100644 src/mesa/glapi/dispatch.h
 create mode 100644 src/mesa/main/dispatch.h

(limited to 'src/mesa')

diff --git a/src/mesa/es/main/drawtex.c b/src/mesa/es/main/drawtex.c
index cbd41ca975..42f4409397 100644
--- a/src/mesa/es/main/drawtex.c
+++ b/src/mesa/es/main/drawtex.c
@@ -25,7 +25,7 @@
 #include "main/state.h"
 #include "main/imports.h"
 
-#include "glapi/dispatch.h"
+#include "main/dispatch.h"
 
 
 #if FEATURE_OES_draw_texture
diff --git a/src/mesa/es/main/es_generator.py b/src/mesa/es/main/es_generator.py
index 590f5940a7..f736792dec 100644
--- a/src/mesa/es/main/es_generator.py
+++ b/src/mesa/es/main/es_generator.py
@@ -207,7 +207,7 @@ extern void _mesa_error(void *ctx, GLenum error, const char *fmtString, ... );
 #include "main/compiler.h"
 #include "main/api_exec.h"
 
-#include "glapi/dispatch.h"
+#include "main/dispatch.h"
 
 typedef void (*_glapi_proc)(void); /* generic function pointer */
 """
diff --git a/src/mesa/glapi/dispatch.h b/src/mesa/glapi/dispatch.h
deleted file mode 100644
index 27f80a5062..0000000000
--- a/src/mesa/glapi/dispatch.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * (C) Copyright IBM Corporation 2005
- * All Rights Reserved.
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sub license,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
- * IBM,
- * AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
- * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-#ifndef _DISPATCH_H
-#define _DISPATCH_H
-
-#ifdef IN_DRI_DRIVER
-#define _GLAPI_USE_REMAP_TABLE
-#endif
-
-#include "glapi/glapitable.h"
-#include "glapi/glapioffsets.h"
-#include "glapi/glapidispatch.h"
-
-#endif /* _DISPATCH_H */
diff --git a/src/mesa/glapi/gen/extension_helper.py b/src/mesa/glapi/gen/extension_helper.py
index 83471d89f5..2c83b4e0d1 100644
--- a/src/mesa/glapi/gen/extension_helper.py
+++ b/src/mesa/glapi/gen/extension_helper.py
@@ -151,7 +151,7 @@ class PrintGlExtensionGlue(gl_XML.gl_print_base):
 
 	def printRealHeader(self):
 		print '#include "utils.h"'
-		print '#include "glapi/dispatch.h"'
+		print '#include "main/dispatch.h"'
 		print ''
 		return
 
diff --git a/src/mesa/glapi/gen/remap_helper.py b/src/mesa/glapi/gen/remap_helper.py
index d93c7a4285..8b50526d2b 100644
--- a/src/mesa/glapi/gen/remap_helper.py
+++ b/src/mesa/glapi/gen/remap_helper.py
@@ -64,7 +64,7 @@ class PrintGlRemap(gl_XML.gl_print_base):
 
 
 	def printRealHeader(self):
-		print '#include "glapi/dispatch.h"'
+		print '#include "main/dispatch.h"'
 		print ''
 		return
 
diff --git a/src/mesa/main/accum.c b/src/mesa/main/accum.c
index 032e13b96e..2012d00fd5 100644
--- a/src/mesa/main/accum.c
+++ b/src/mesa/main/accum.c
@@ -29,7 +29,7 @@
 #include "macros.h"
 #include "state.h"
 #include "mtypes.h"
-#include "glapi/dispatch.h"
+#include "main/dispatch.h"
 
 
 #if FEATURE_accum
diff --git a/src/mesa/main/api_arrayelt.c b/src/mesa/main/api_arrayelt.c
index 469b4529f9..ffcd194240 100644
--- a/src/mesa/main/api_arrayelt.c
+++ b/src/mesa/main/api_arrayelt.c
@@ -32,7 +32,7 @@
 #include "context.h"
 #include "imports.h"
 #include "macros.h"
-#include "glapi/dispatch.h"
+#include "main/dispatch.h"
 
 typedef void (GLAPIENTRY *array_func)( const void * );
 
diff --git a/src/mesa/main/api_exec.c b/src/mesa/main/api_exec.c
index e62c7aa572..f8e004af3f 100644
--- a/src/mesa/main/api_exec.c
+++ b/src/mesa/main/api_exec.c
@@ -104,7 +104,7 @@
 #if FEATURE_ARB_sync
 #include "syncobj.h"
 #endif
-#include "glapi/dispatch.h"
+#include "main/dispatch.h"
 
 
 
diff --git a/src/mesa/main/api_loopback.c b/src/mesa/main/api_loopback.c
index 3d466ac44a..aedc509fb2 100644
--- a/src/mesa/main/api_loopback.c
+++ b/src/mesa/main/api_loopback.c
@@ -36,7 +36,7 @@
 #include "glapi/glapi.h"
 #include "glapi/glapitable.h"
 #include "glapi/glthread.h"
-#include "glapi/dispatch.h"
+#include "main/dispatch.h"
 
 /* KW: A set of functions to convert unusual Color/Normal/Vertex/etc
  * calls to a smaller set of driver-provided formats.  Currently just
diff --git a/src/mesa/main/api_noop.c b/src/mesa/main/api_noop.c
index f72f957300..9a36394d65 100644
--- a/src/mesa/main/api_noop.c
+++ b/src/mesa/main/api_noop.c
@@ -32,7 +32,7 @@
 #include "macros.h"
 #include "dlist.h"
 #include "eval.h"
-#include "glapi/dispatch.h"
+#include "main/dispatch.h"
 
 
 /**
diff --git a/src/mesa/main/arrayobj.c b/src/mesa/main/arrayobj.c
index 7feaee316d..0069cd3dcf 100644
--- a/src/mesa/main/arrayobj.c
+++ b/src/mesa/main/arrayobj.c
@@ -48,7 +48,7 @@
 #endif
 #include "arrayobj.h"
 #include "macros.h"
-#include "glapi/dispatch.h"
+#include "main/dispatch.h"
 
 
 /**
diff --git a/src/mesa/main/attrib.c b/src/mesa/main/attrib.c
index 9a32bc335d..92fb8d289d 100644
--- a/src/mesa/main/attrib.c
+++ b/src/mesa/main/attrib.c
@@ -56,7 +56,7 @@
 #include "varray.h"
 #include "viewport.h"
 #include "mtypes.h"
-#include "glapi/dispatch.h"
+#include "main/dispatch.h"
 
 
 /**
diff --git a/src/mesa/main/colortab.c b/src/mesa/main/colortab.c
index 785813166c..52d5badf39 100644
--- a/src/mesa/main/colortab.c
+++ b/src/mesa/main/colortab.c
@@ -32,7 +32,7 @@
 #include "state.h"
 #include "teximage.h"
 #include "texstate.h"
-#include "glapi/dispatch.h"
+#include "main/dispatch.h"
 
 
 #if FEATURE_colortable
diff --git a/src/mesa/main/convolve.c b/src/mesa/main/convolve.c
index 5ed93e0c60..15e8dffc23 100644
--- a/src/mesa/main/convolve.c
+++ b/src/mesa/main/convolve.c
@@ -39,7 +39,7 @@
 #include "image.h"
 #include "mtypes.h"
 #include "state.h"
-#include "glapi/dispatch.h"
+#include "main/dispatch.h"
 
 
 #if FEATURE_convolve
diff --git a/src/mesa/main/dispatch.h b/src/mesa/main/dispatch.h
new file mode 100644
index 0000000000..27f80a5062
--- /dev/null
+++ b/src/mesa/main/dispatch.h
@@ -0,0 +1,37 @@
+/*
+ * (C) Copyright IBM Corporation 2005
+ * All Rights Reserved.
+ * 
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sub license,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ * 
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
+ * IBM,
+ * AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef _DISPATCH_H
+#define _DISPATCH_H
+
+#ifdef IN_DRI_DRIVER
+#define _GLAPI_USE_REMAP_TABLE
+#endif
+
+#include "glapi/glapitable.h"
+#include "glapi/glapioffsets.h"
+#include "glapi/glapidispatch.h"
+
+#endif /* _DISPATCH_H */
diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c
index 9ef7fcae90..673db30f25 100644
--- a/src/mesa/main/dlist.c
+++ b/src/mesa/main/dlist.c
@@ -66,7 +66,7 @@
 
 #include "math/m_matrix.h"
 
-#include "glapi/dispatch.h"
+#include "main/dispatch.h"
 
 
 
diff --git a/src/mesa/main/drawpix.c b/src/mesa/main/drawpix.c
index 0afd47b797..84cb78612b 100644
--- a/src/mesa/main/drawpix.c
+++ b/src/mesa/main/drawpix.c
@@ -32,7 +32,7 @@
 #include "framebuffer.h"
 #include "readpix.h"
 #include "state.h"
-#include "glapi/dispatch.h"
+#include "main/dispatch.h"
 
 
 #if FEATURE_drawpix
diff --git a/src/mesa/main/eval.c b/src/mesa/main/eval.c
index 58eb59b13c..bd2e1177fd 100644
--- a/src/mesa/main/eval.c
+++ b/src/mesa/main/eval.c
@@ -44,7 +44,7 @@
 #include "eval.h"
 #include "macros.h"
 #include "mtypes.h"
-#include "glapi/dispatch.h"
+#include "main/dispatch.h"
 
 
 #if FEATURE_evaluators
diff --git a/src/mesa/main/feedback.c b/src/mesa/main/feedback.c
index fcdbb75fc4..e20456fa75 100644
--- a/src/mesa/main/feedback.c
+++ b/src/mesa/main/feedback.c
@@ -36,7 +36,7 @@
 #include "feedback.h"
 #include "macros.h"
 #include "mtypes.h"
-#include "glapi/dispatch.h"
+#include "main/dispatch.h"
 
 
 #if FEATURE_feedback
diff --git a/src/mesa/main/histogram.c b/src/mesa/main/histogram.c
index c7304e8dd7..3a65bb1926 100644
--- a/src/mesa/main/histogram.c
+++ b/src/mesa/main/histogram.c
@@ -29,7 +29,7 @@
 #include "context.h"
 #include "image.h"
 #include "histogram.h"
-#include "glapi/dispatch.h"
+#include "main/dispatch.h"
 
 
 #if FEATURE_histogram
diff --git a/src/mesa/main/pixel.c b/src/mesa/main/pixel.c
index e2e3854fc8..675e933ca6 100644
--- a/src/mesa/main/pixel.c
+++ b/src/mesa/main/pixel.c
@@ -35,7 +35,7 @@
 #include "macros.h"
 #include "pixel.h"
 #include "mtypes.h"
-#include "glapi/dispatch.h"
+#include "main/dispatch.h"
 
 
 #if FEATURE_pixel_transfer
diff --git a/src/mesa/main/queryobj.c b/src/mesa/main/queryobj.c
index 471352f472..e14511a388 100644
--- a/src/mesa/main/queryobj.c
+++ b/src/mesa/main/queryobj.c
@@ -29,7 +29,7 @@
 #include "imports.h"
 #include "queryobj.h"
 #include "mtypes.h"
-#include "glapi/dispatch.h"
+#include "main/dispatch.h"
 
 
 #if FEATURE_queryobj
diff --git a/src/mesa/main/rastpos.c b/src/mesa/main/rastpos.c
index be61dc265d..d72b846c36 100644
--- a/src/mesa/main/rastpos.c
+++ b/src/mesa/main/rastpos.c
@@ -34,7 +34,7 @@
 #include "macros.h"
 #include "rastpos.h"
 #include "state.h"
-#include "glapi/dispatch.h"
+#include "main/dispatch.h"
 
 
 #if FEATURE_rastpos
diff --git a/src/mesa/main/remap.c b/src/mesa/main/remap.c
index 5f32a48258..8d9df6b830 100644
--- a/src/mesa/main/remap.c
+++ b/src/mesa/main/remap.c
@@ -38,7 +38,7 @@
 #include "remap.h"
 #include "imports.h"
 
-#include "glapi/dispatch.h"
+#include "main/dispatch.h"
 
 
 #if FEATURE_remap_table
@@ -183,7 +183,7 @@ _mesa_map_static_functions(void)
 /**
  * Initialize the remap table.  This is called in one_time_init().
  * The remap table needs to be initialized before calling the
- * CALL/GET/SET macros defined in glapi/dispatch.h.
+ * CALL/GET/SET macros defined in main/dispatch.h.
  */
 void
 _mesa_init_remap_table(void)
diff --git a/src/mesa/main/remap_helper.h b/src/mesa/main/remap_helper.h
index 2c8f0de467..0a5b629688 100644
--- a/src/mesa/main/remap_helper.h
+++ b/src/mesa/main/remap_helper.h
@@ -25,7 +25,7 @@
  * SOFTWARE.
  */
 
-#include "glapi/dispatch.h"
+#include "main/dispatch.h"
 
 struct gl_function_remap {
    GLint func_index;
diff --git a/src/mesa/main/texgen.c b/src/mesa/main/texgen.c
index 2ae839b2a6..e70ea30290 100644
--- a/src/mesa/main/texgen.c
+++ b/src/mesa/main/texgen.c
@@ -37,7 +37,7 @@
 #include "main/texgen.h"
 #include "main/texstate.h"
 #include "math/m_matrix.h"
-#include "glapi/dispatch.h"
+#include "main/dispatch.h"
 
 
 #if FEATURE_texgen
diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c
index 86878d6a8a..b4128f84d8 100644
--- a/src/mesa/main/varray.c
+++ b/src/mesa/main/varray.c
@@ -34,7 +34,7 @@
 #include "mtypes.h"
 #include "varray.h"
 #include "arrayobj.h"
-#include "glapi/dispatch.h"
+#include "main/dispatch.h"
 
 
 /**
diff --git a/src/mesa/main/vtxfmt_tmp.h b/src/mesa/main/vtxfmt_tmp.h
index ae636fb24f..037c4b1888 100644
--- a/src/mesa/main/vtxfmt_tmp.h
+++ b/src/mesa/main/vtxfmt_tmp.h
@@ -29,7 +29,7 @@
 #define PRE_LOOPBACK( FUNC )
 #endif
 
-#include "glapi/dispatch.h"
+#include "main/dispatch.h"
 
 static void GLAPIENTRY TAG(ArrayElement)( GLint i )
 {
diff --git a/src/mesa/shader/shader_api.c b/src/mesa/shader/shader_api.c
index 129a973cf1..d0d0575b0b 100644
--- a/src/mesa/shader/shader_api.c
+++ b/src/mesa/shader/shader_api.c
@@ -46,7 +46,7 @@
 #include "shader/shader_api.h"
 #include "shader/slang/slang_compile.h"
 #include "shader/slang/slang_link.h"
-#include "glapi/dispatch.h"
+#include "main/dispatch.h"
 
 
 /**
diff --git a/src/mesa/vbo/vbo_exec_api.c b/src/mesa/vbo/vbo_exec_api.c
index 3dde982371..e40f5f9dc4 100644
--- a/src/mesa/vbo/vbo_exec_api.c
+++ b/src/mesa/vbo/vbo_exec_api.c
@@ -41,7 +41,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "main/light.h"
 #include "main/api_arrayelt.h"
 #include "main/api_noop.h"
-#include "glapi/dispatch.h"
+#include "main/dispatch.h"
 
 #include "vbo_context.h"
 
diff --git a/src/mesa/vbo/vbo_exec_eval.c b/src/mesa/vbo/vbo_exec_eval.c
index a7846213d0..23ad12608f 100644
--- a/src/mesa/vbo/vbo_exec_eval.c
+++ b/src/mesa/vbo/vbo_exec_eval.c
@@ -29,7 +29,7 @@
 #include "main/context.h"
 #include "main/macros.h"
 #include "math/m_eval.h"
-#include "glapi/dispatch.h"
+#include "main/dispatch.h"
 #include "vbo_exec.h"
 
 
diff --git a/src/mesa/vbo/vbo_save_api.c b/src/mesa/vbo/vbo_save_api.c
index 3a64c0cf01..a5d027982f 100644
--- a/src/mesa/vbo/vbo_save_api.c
+++ b/src/mesa/vbo/vbo_save_api.c
@@ -78,7 +78,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "main/api_validate.h"
 #include "main/api_arrayelt.h"
 #include "main/vtxfmt.h"
-#include "glapi/dispatch.h"
+#include "main/dispatch.h"
 
 #include "vbo_context.h"
 
diff --git a/src/mesa/vbo/vbo_save_loopback.c b/src/mesa/vbo/vbo_save_loopback.c
index 8d9ae307d6..f253c854d2 100644
--- a/src/mesa/vbo/vbo_save_loopback.c
+++ b/src/mesa/vbo/vbo_save_loopback.c
@@ -30,7 +30,7 @@
 #include "main/enums.h"
 #include "main/imports.h"
 #include "main/mtypes.h"
-#include "glapi/dispatch.h"
+#include "main/dispatch.h"
 #include "glapi/glapi.h"
 
 #include "vbo_context.h"
-- 
cgit v1.2.3


From ec91810147425f4123ec80117109925e054cc66d Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Thu, 25 Feb 2010 17:52:04 +0200
Subject: glapi: minor ugliness to be able to copy to xorg

---
 src/mesa/glapi/glapi.c          | 13 +------------
 src/mesa/glapi/glapi_dispatch.c |  6 ++++++
 src/mesa/glapi/glapi_getproc.c  |  8 ++++++--
 src/mesa/glapi/glapi_nop.c      |  6 ++++++
 src/mesa/glapi/glthread.c       |  4 +++-
 5 files changed, 22 insertions(+), 15 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glapi.c b/src/mesa/glapi/glapi.c
index 469523d57c..631ffba3c7 100644
--- a/src/mesa/glapi/glapi.c
+++ b/src/mesa/glapi/glapi.c
@@ -51,22 +51,11 @@
 
 
 #ifdef HAVE_DIX_CONFIG_H
-
 #include <dix-config.h>
-#define PUBLIC
-
+#include "glapi/mesa.h"
 #else
-
 #include "main/glheader.h"
-
-#endif
-
 #include "main/compiler.h"
-
-#include <stdlib.h>
-#include <string.h>
-#ifdef DEBUG
-#include <assert.h>
 #endif
 
 #include "glapi/glapi.h"
diff --git a/src/mesa/glapi/glapi_dispatch.c b/src/mesa/glapi/glapi_dispatch.c
index 4cb43f4505..32b9535e3f 100644
--- a/src/mesa/glapi/glapi_dispatch.c
+++ b/src/mesa/glapi/glapi_dispatch.c
@@ -37,8 +37,14 @@
  * \author Brian Paul <brian@precisioninsight.com>
  */
 
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#include "glapi/mesa.h"
+#else
 #include "main/glheader.h"
 #include "main/compiler.h"
+#endif
+
 #include "glapi/glapi.h"
 #include "glapi/glapitable.h"
 #include "glapi/glapidispatch.h"
diff --git a/src/mesa/glapi/glapi_getproc.c b/src/mesa/glapi/glapi_getproc.c
index eecfb9c1ae..69eb42c79e 100644
--- a/src/mesa/glapi/glapi_getproc.c
+++ b/src/mesa/glapi/glapi_getproc.c
@@ -30,10 +30,14 @@
  */
 
 
-#include <stdlib.h>
-#include <string.h>
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#include "glapi/mesa.h"
+#else
 #include "main/glheader.h"
 #include "main/compiler.h"
+#endif
+
 #include "glapi/glapi.h"
 #include "glapi/glapioffsets.h"
 #include "glapi/glapitable.h"
diff --git a/src/mesa/glapi/glapi_nop.c b/src/mesa/glapi/glapi_nop.c
index aa84b9a169..b1a718a5f0 100644
--- a/src/mesa/glapi/glapi_nop.c
+++ b/src/mesa/glapi/glapi_nop.c
@@ -38,8 +38,14 @@
 
 
 
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#include "glapi/mesa.h"
+#else
 #include "main/compiler.h"
 #include "main/glheader.h"
+#endif
+
 #include "glapi/glapi.h"
 
 #ifdef DEBUG
diff --git a/src/mesa/glapi/glthread.c b/src/mesa/glapi/glthread.c
index 1c2c386571..be4e2f754d 100644
--- a/src/mesa/glapi/glthread.c
+++ b/src/mesa/glapi/glthread.c
@@ -30,9 +30,11 @@
 
 #ifdef HAVE_DIX_CONFIG_H
 #include <dix-config.h>
+#include "glapi/mesa.h"
+#else
+#include "main/compiler.h"
 #endif
 
-#include "main/compiler.h"
 #include "glapi/glthread.h"
 
 
-- 
cgit v1.2.3


From f1f33f929366e452046de27429fc730a83d11c4b Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Thu, 25 Feb 2010 17:52:05 +0200
Subject: glapi: EXTRA_DEBUG is never defined, make this explicit

---
 src/mesa/glapi/glapi.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glapi.c b/src/mesa/glapi/glapi.c
index 631ffba3c7..2fa673d307 100644
--- a/src/mesa/glapi/glapi.c
+++ b/src/mesa/glapi/glapi.c
@@ -490,7 +490,7 @@ _glapi_get_dispatch_table_size(void)
 void
 _glapi_check_table(const struct _glapi_table *table)
 {
-#ifdef EXTRA_DEBUG
+#if 0 /* Enable this for extra DEBUG */
    const GLuint entries = _glapi_get_dispatch_table_size();
    const void **tab = (const void **) table;
    GLuint i;
-- 
cgit v1.2.3


From fec2a67e405607b8527261add7e5842e9a75c921 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Thu, 25 Feb 2010 17:52:05 +0200
Subject: glapi/gen: just copy in glx/glapi

---
 src/mesa/glapi/gen/Makefile | 44 +++++++++++++++++++++-----------------------
 1 file changed, 21 insertions(+), 23 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/gen/Makefile b/src/mesa/glapi/gen/Makefile
index 4984da8581..8e9c909f31 100644
--- a/src/mesa/glapi/gen/Makefile
+++ b/src/mesa/glapi/gen/Makefile
@@ -37,28 +37,26 @@ MESA_OUTPUTS = \
 ######################################################################
 
 XORG_GLX_DIR = $(XORG_BASE)/glx
+XORG_GLAPI_DIR = $(XORG_BASE)/glx/glapi
 
 XORG_GLAPI_FILES = \
-	$(XORG_GLX_DIR)/glapi.h \
-	$(XORG_GLX_DIR)/glapi.c \
-	$(XORG_GLX_DIR)/glapi_getproc.c \
-	$(XORG_GLX_DIR)/glapi_nop.c \
-	$(XORG_GLX_DIR)/glthread.c \
-	$(XORG_GLX_DIR)/glthread.h
+	$(XORG_GLAPI_DIR)/glapi.h \
+	$(XORG_GLAPI_DIR)/glapi.c \
+	$(XORG_GLAPI_DIR)/glapi_getproc.c \
+	$(XORG_GLAPI_DIR)/glapi_nop.c \
+	$(XORG_GLAPI_DIR)/glthread.c \
+	$(XORG_GLAPI_DIR)/glthread.h
 
 XORG_GLAPI_OUTPUTS = \
-	$(XORG_GLX_DIR)/glprocs.h \
-	$(XORG_GLX_DIR)/glapitemp.h \
-	$(XORG_GLX_DIR)/glapioffsets.h \
-	$(XORG_GLX_DIR)/glapitable.h \
-	$(XORG_GLX_DIR)/glapidispatch.h
-
-# XXX sync mesa and xorg glapi, generate in mesa only and just copy in glx/glapi
-#
-#	$(XORG_GLAPI_FILES) \
-#	$(XORG_GLAPI_OUTPUTS) \
+	$(XORG_GLAPI_DIR)/glprocs.h \
+	$(XORG_GLAPI_DIR)/glapitemp.h \
+	$(XORG_GLAPI_DIR)/glapioffsets.h \
+	$(XORG_GLAPI_DIR)/glapitable.h \
+	$(XORG_GLAPI_DIR)/glapidispatch.h
 
 XORG_OUTPUTS = \
+	$(XORG_GLAPI_FILES) \
+	$(XORG_GLAPI_OUTPUTS) \
 	$(XORG_GLX_DIR)/indirect_dispatch.c \
 	$(XORG_GLX_DIR)/indirect_dispatch_swap.c \
 	$(XORG_GLX_DIR)/indirect_dispatch.h \
@@ -114,27 +112,27 @@ clean:
 
 ######################################################################
 
-$(XORG_GLX_DIR)/%.c: %.c
+$(XORG_GLAPI_DIR)/%.c: $(MESA_GLAPI_DIR)/%.c
 	cp $< $@
 
-$(XORG_GLX_DIR)/%.h: %.h
+$(XORG_GLAPI_DIR)/%.h: $(MESA_GLAPI_DIR)/%.h
 	cp $< $@
 
 ######################################################################
 
-$(MESA_GLAPI_DIR)/glprocs.h $(XORG_GLX_DIR)/glprocs.h: gl_procs.py $(COMMON)
+$(MESA_GLAPI_DIR)/glprocs.h: gl_procs.py $(COMMON)
 	$(PYTHON2) $(PYTHON_FLAGS) $< > $@
 
-$(MESA_GLAPI_DIR)/glapitemp.h $(XORG_GLX_DIR)/glapitemp.h: gl_apitemp.py $(COMMON)
+$(MESA_GLAPI_DIR)/glapitemp.h: gl_apitemp.py $(COMMON)
 	$(PYTHON2) $(PYTHON_FLAGS) $< > $@
 
-$(MESA_GLAPI_DIR)/glapioffsets.h $(XORG_GLX_DIR)/glapioffsets.h: gl_offsets.py $(COMMON)
+$(MESA_GLAPI_DIR)/glapioffsets.h: gl_offsets.py $(COMMON)
 	$(PYTHON2) $(PYTHON_FLAGS) $< > $@
 
-$(MESA_GLAPI_DIR)/glapitable.h $(XORG_GLX_DIR)/glapitable.h: gl_table.py $(COMMON)
+$(MESA_GLAPI_DIR)/glapitable.h: gl_table.py $(COMMON)
 	$(PYTHON2) $(PYTHON_FLAGS) $< > $@
 
-$(MESA_GLAPI_DIR)/glapidispatch.h $(XORG_GLX_DIR)/glapidispatch.h: gl_table.py $(COMMON)
+$(MESA_GLAPI_DIR)/glapidispatch.h: gl_table.py $(COMMON)
 	$(PYTHON2) $(PYTHON_FLAGS) $< -m remap_table > $@
 
 ######################################################################
-- 
cgit v1.2.3


From 91af398b32f0f63a1560fe023651be0861c08f8a Mon Sep 17 00:00:00 2001
From: Francisco Jerez <currojerez@riseup.net>
Date: Sun, 21 Feb 2010 14:28:17 +0100
Subject: dri/nouveau: Fix stencil mask handling on glClear().

---
 src/mesa/drivers/dri/nouveau/nouveau_driver.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_driver.c b/src/mesa/drivers/dri/nouveau/nouveau_driver.c
index bf0e20ca81..afaa8de5b3 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_driver.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_driver.c
@@ -112,8 +112,8 @@ nouveau_clear(GLcontext *ctx, GLbitfield buffers)
 			mask = pack_zs_i(s->format,
 					 (buffers & BUFFER_BIT_DEPTH &&
 					  ctx->Depth.Mask) ? ~0 : 0,
-					 (buffers & BUFFER_BIT_STENCIL &&
-					  ctx->Stencil.WriteMask[0]) ? ~0 : 0);
+					 (buffers & BUFFER_BIT_STENCIL ?
+					  ctx->Stencil.WriteMask[0] : 0));
 			value = pack_zs_f(s->format,
 					  ctx->Depth.Clear,
 					  ctx->Stencil.Clear);
-- 
cgit v1.2.3


From 9a8e374c46079d40ef577842cbf917af1c131dc0 Mon Sep 17 00:00:00 2001
From: Francisco Jerez <currojerez@riseup.net>
Date: Sun, 21 Feb 2010 14:30:31 +0100
Subject: dri/nouveau: Set _BaseFormat correctly for z24s8 renderbuffers.

---
 src/mesa/drivers/dri/nouveau/nouveau_fbo.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_fbo.c b/src/mesa/drivers/dri/nouveau/nouveau_fbo.c
index 91eade8d63..c5fb0151b3 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_fbo.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_fbo.c
@@ -70,7 +70,7 @@ set_renderbuffer_format(struct gl_renderbuffer *rb, GLenum internalFormat)
 	case GL_DEPTH_COMPONENT24:
 	case GL_STENCIL_INDEX8_EXT:
 	case GL_DEPTH24_STENCIL8_EXT:
-		rb->_BaseFormat  = GL_DEPTH_COMPONENT;
+		rb->_BaseFormat  = GL_DEPTH_STENCIL;
 		rb->Format = MESA_FORMAT_Z24_S8;
 		rb->DataType = GL_UNSIGNED_INT;
 		s->cpp = 4;
-- 
cgit v1.2.3


From 1e4c0618a8e5f251b68e98af498a2a8ff787cc61 Mon Sep 17 00:00:00 2001
From: Francisco Jerez <currojerez@riseup.net>
Date: Sun, 21 Feb 2010 14:35:56 +0100
Subject: dri/nouveau: Avoid mask overflow on nv04_surface_fill.

---
 src/mesa/drivers/dri/nouveau/nv04_surface.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/nouveau/nv04_surface.c b/src/mesa/drivers/dri/nouveau/nv04_surface.c
index 86fa1dcd7a..a219779b86 100644
--- a/src/mesa/drivers/dri/nouveau/nv04_surface.c
+++ b/src/mesa/drivers/dri/nouveau/nv04_surface.c
@@ -369,7 +369,7 @@ nv04_surface_fill(GLcontext *ctx,
 	BEGIN_RING(chan, patt, NV04_IMAGE_PATTERN_COLOR_FORMAT, 1);
 	OUT_RING  (chan, rect_format(dst->format));
 	BEGIN_RING(chan, patt, NV04_IMAGE_PATTERN_MONOCHROME_COLOR1, 1);
-	OUT_RING  (chan, mask | ~0 << (8 * dst->cpp));
+	OUT_RING  (chan, mask | ~0ll << (8 * dst->cpp));
 
 	BEGIN_RING(chan, rect, NV04_GDI_RECTANGLE_TEXT_COLOR_FORMAT, 1);
 	OUT_RING  (chan, rect_format(dst->format));
-- 
cgit v1.2.3


From e59e5e3388c9561d58aa02bab20baca99ba86d15 Mon Sep 17 00:00:00 2001
From: Francisco Jerez <currojerez@riseup.net>
Date: Mon, 22 Feb 2010 01:50:04 +0100
Subject: dri/nouveau: Clean up the nv04 surface code a bit.

---
 src/mesa/drivers/dri/nouveau/nv04_surface.c | 36 ++++++++---------------------
 1 file changed, 10 insertions(+), 26 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/nouveau/nv04_surface.c b/src/mesa/drivers/dri/nouveau/nv04_surface.c
index a219779b86..e8a5409fbd 100644
--- a/src/mesa/drivers/dri/nouveau/nv04_surface.c
+++ b/src/mesa/drivers/dri/nouveau/nv04_surface.c
@@ -216,8 +216,8 @@ nv04_surface_copy_swizzle(GLcontext *ctx,
 
         /* If area is too large to copy in one shot we must copy it in
 	 * POT chunks to meet alignment requirements */
-	assert(sub_w == w || _mesa_is_pow_two(sub_w));
-	assert(sub_h == h || _mesa_is_pow_two(sub_h));
+	assert(sub_w == w || _mesa_is_pow_two(w));
+	assert(sub_h == h || _mesa_is_pow_two(h));
 
 	nouveau_bo_marko(bctx, sifm, NV03_SCALED_IMAGE_FROM_MEMORY_DMA_IMAGE,
 			 src->bo, bo_flags | NOUVEAU_BO_RD);
@@ -239,8 +239,6 @@ nv04_surface_copy_swizzle(GLcontext *ctx,
 
 		for (x = 0; x < w; x += sub_w) {
 			sub_w = MIN2(sub_w, w - x);
-			/* Must be 64-byte aligned */
-			assert(!(dst->offset & 63));
 
 			MARK_RING(chan, 15, 1);
 
@@ -277,10 +275,10 @@ nv04_surface_copy_swizzle(GLcontext *ctx,
 
 static void
 nv04_surface_copy_m2mf(GLcontext *ctx,
-			  struct nouveau_surface *dst,
-			  struct nouveau_surface *src,
-			  int dx, int dy, int sx, int sy,
-			  int w, int h)
+		       struct nouveau_surface *dst,
+		       struct nouveau_surface *src,
+		       int dx, int dy, int sx, int sy,
+		       int w, int h)
 {
 	struct nouveau_channel *chan = context_chan(ctx);
 	struct nouveau_hw_state *hw = &to_nouveau_context(ctx)->hw;
@@ -484,34 +482,20 @@ nv04_surface_init(GLcontext *ctx)
 	OUT_RING  (chan, NV04_GDI_RECTANGLE_TEXT_MONOCHROME_FORMAT_LE);
 
 	/* Swizzled surface. */
-	switch (context_chipset(ctx) & 0xf0) {
-	case 0x00:
-	case 0x10:
+	if (context_chipset(ctx) < 0x20)
 		class = NV04_SWIZZLED_SURFACE;
-		break;
-	case 0x20:
+	else
 		class = NV20_SWIZZLED_SURFACE;
-		break;
-	default:
-		/* Famous last words: this really can't happen.. */
-		assert(0);
-		break;
-	}
 
 	ret = nouveau_grobj_alloc(chan, handle++, class, &hw->swzsurf);
 	if (ret)
 		goto fail;
 
 	/* Scaled image from memory. */
-	switch (context_chipset(ctx) & 0xf0) {
-	case 0x00:
+	if  (context_chipset(ctx) < 0x10)
 		class = NV04_SCALED_IMAGE_FROM_MEMORY;
-		break;
-	case 0x10:
-	case 0x20:
+	else
 		class = NV10_SCALED_IMAGE_FROM_MEMORY;
-		break;
-	}
 
 	ret = nouveau_grobj_alloc(chan, handle++, class, &hw->sifm);
 	if (ret)
-- 
cgit v1.2.3


From 44602bb23ca7b67d4db586d9194c75cfe4a60962 Mon Sep 17 00:00:00 2001
From: Francisco Jerez <currojerez@riseup.net>
Date: Mon, 22 Feb 2010 01:53:23 +0100
Subject: dri/nouveau: Swizzle using the CPU when we hit a limitation of SIFM.

---
 src/mesa/drivers/dri/nouveau/nv04_surface.c | 96 ++++++++++++++++++++++++++---
 1 file changed, 89 insertions(+), 7 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/nouveau/nv04_surface.c b/src/mesa/drivers/dri/nouveau/nv04_surface.c
index e8a5409fbd..e3febf7d2f 100644
--- a/src/mesa/drivers/dri/nouveau/nv04_surface.c
+++ b/src/mesa/drivers/dri/nouveau/nv04_surface.c
@@ -321,6 +321,82 @@ nv04_surface_copy_m2mf(GLcontext *ctx,
 		FIRE_RING(chan);
 }
 
+typedef unsigned (*get_offset_t)(struct nouveau_surface *s,
+				 unsigned x, unsigned y);
+
+static unsigned
+get_linear_offset(struct nouveau_surface *s, unsigned x, unsigned y)
+{
+	return x * s->cpp + y * s->pitch;
+}
+
+static unsigned
+get_swizzled_offset(struct nouveau_surface *s, unsigned x, unsigned y)
+{
+	unsigned k = log2i(MIN2(s->width, s->height));
+
+	unsigned u = (x & 0x001) << 0 |
+		(x & 0x002) << 1 |
+		(x & 0x004) << 2 |
+		(x & 0x008) << 3 |
+		(x & 0x010) << 4 |
+		(x & 0x020) << 5 |
+		(x & 0x040) << 6 |
+		(x & 0x080) << 7 |
+		(x & 0x100) << 8 |
+		(x & 0x200) << 9 |
+		(x & 0x400) << 10 |
+		(x & 0x800) << 11;
+
+	unsigned v = (y & 0x001) << 1 |
+		(y & 0x002) << 2 |
+		(y & 0x004) << 3 |
+		(y & 0x008) << 4 |
+		(y & 0x010) << 5 |
+		(y & 0x020) << 6 |
+		(y & 0x040) << 7 |
+		(y & 0x080) << 8 |
+		(y & 0x100) << 9 |
+		(y & 0x200) << 10 |
+		(y & 0x400) << 11 |
+		(y & 0x800) << 12;
+
+	return s->cpp * (((u | v) & ~(~0 << 2*k)) |
+			 (x & (~0 << k)) << k |
+			 (y & (~0 << k)) << k);
+}
+
+static void
+nv04_surface_copy_cpu(GLcontext *ctx,
+		      struct nouveau_surface *dst,
+		      struct nouveau_surface *src,
+		      int dx, int dy, int sx, int sy,
+		      int w, int h)
+{
+	int x, y;
+	get_offset_t get_dst = (dst->layout == SWIZZLED ?
+				get_swizzled_offset : get_linear_offset);
+	get_offset_t get_src = (src->layout == SWIZZLED ?
+				get_swizzled_offset : get_linear_offset);
+	void *dp, *sp;
+
+	nouveau_bo_map(dst->bo, NOUVEAU_BO_WR);
+	nouveau_bo_map(src->bo, NOUVEAU_BO_RD);
+
+	dp = dst->bo->map + dst->offset;
+	sp = src->bo->map + src->offset;
+
+	for (y = 0; y < h; y++) {
+		for (x = 0; x < w; x++) {
+			memcpy(dp + get_dst(dst, dx + x, dy + y),
+			       sp + get_src(src, sx + x, sy + y), dst->cpp);
+		}
+	}
+
+	nouveau_bo_unmap(src->bo);
+	nouveau_bo_unmap(dst->bo);
+}
+
 void
 nv04_surface_copy(GLcontext *ctx,
 		  struct nouveau_surface *dst,
@@ -328,16 +404,22 @@ nv04_surface_copy(GLcontext *ctx,
 		  int dx, int dy, int sx, int sy,
 		  int w, int h)
 {
-	/* Setup transfer to swizzle the texture to vram if needed */
-        if (src->layout != SWIZZLED &&
-	    dst->layout == SWIZZLED &&
-	    dst->width > 2 && dst->height > 1) {
-		nv04_surface_copy_swizzle(ctx, dst, src,
-					  dx, dy, sx, sy, w, h);
+	/* Linear texture copy. */
+	if ((src->layout == LINEAR && dst->layout == LINEAR) ||
+	    dst->width <= 2 || dst->height <= 1) {
+		nv04_surface_copy_m2mf(ctx, dst, src, dx, dy, sx, sy, w, h);
+		return;
+	}
+
+	/* Swizzle using sifm+swzsurf. */
+        if (src->layout == LINEAR && dst->layout == SWIZZLED &&
+	    dst->cpp != 1 && !(dst->offset & 63)) {
+		nv04_surface_copy_swizzle(ctx, dst, src, dx, dy, sx, sy, w, h);
 		return;
 	}
 
-	nv04_surface_copy_m2mf(ctx, dst, src, dx, dy, sx, sy, w, h);
+	/* Fallback to CPU copy. */
+	nv04_surface_copy_cpu(ctx, dst, src, dx, dy, sx, sy, w, h);
 }
 
 void
-- 
cgit v1.2.3


From 323e6bbb052f37f91c7340e16c2352bb780a43d8 Mon Sep 17 00:00:00 2001
From: Francisco Jerez <currojerez@riseup.net>
Date: Mon, 22 Feb 2010 02:03:42 +0100
Subject: dri/nouveau: Try to validate textures earlier.

---
 src/mesa/drivers/dri/nouveau/nouveau_state.c   |   4 +-
 src/mesa/drivers/dri/nouveau/nouveau_texture.c | 284 ++++++++++++++++---------
 src/mesa/drivers/dri/nouveau/nouveau_texture.h |   5 +-
 src/mesa/drivers/dri/nouveau/nv04_state_tex.c  |   4 +-
 src/mesa/drivers/dri/nouveau/nv10_state_tex.c  |   3 +-
 src/mesa/drivers/dri/nouveau/nv20_state_tex.c  |   3 +-
 6 files changed, 191 insertions(+), 112 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_state.c b/src/mesa/drivers/dri/nouveau/nouveau_state.c
index d727822175..5d593ed4dd 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_state.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_state.c
@@ -396,7 +396,6 @@ nouveau_tex_parameter(GLcontext *ctx, GLenum target,
 		      const GLfloat *params)
 {
 	switch (pname) {
-	case GL_TEXTURE_MIN_FILTER:
 	case GL_TEXTURE_MAG_FILTER:
 	case GL_TEXTURE_WRAP_S:
 	case GL_TEXTURE_WRAP_T:
@@ -408,9 +407,10 @@ nouveau_tex_parameter(GLcontext *ctx, GLenum target,
 		context_dirty_i(ctx, TEX_OBJ, ctx->Texture.CurrentUnit);
 		break;
 
+	case GL_TEXTURE_MIN_FILTER:
 	case GL_TEXTURE_BASE_LEVEL:
 	case GL_TEXTURE_MAX_LEVEL:
-		texture_dirty(t);
+		nouveau_texture_reallocate(ctx, t);
 		context_dirty_i(ctx, TEX_OBJ, ctx->Texture.CurrentUnit);
 		break;
 	}
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_texture.c b/src/mesa/drivers/dri/nouveau/nouveau_texture.c
index ab6e93cceb..32603ab66d 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_texture.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_texture.c
@@ -171,6 +171,148 @@ nouveau_choose_tex_format(GLcontext *ctx, GLint internalFormat,
 	}
 }
 
+static GLboolean
+teximage_fits(struct gl_texture_object *t, int level,
+	      struct gl_texture_image *ti)
+{
+	struct nouveau_surface *s = &to_nouveau_texture(t)->surfaces[level];
+
+	return s->bo && s->width == ti->Width &&
+		s->height == ti->Height &&
+		s->format == ti->TexFormat;
+}
+
+static GLboolean
+validate_teximage(GLcontext *ctx, struct gl_texture_object *t,
+		  int level, int x, int y, int z,
+		  int width, int height, int depth)
+{
+	struct gl_texture_image *ti = t->Image[0][level];
+
+	if (ti && teximage_fits(t, level, ti)) {
+		struct nouveau_surface *ss = to_nouveau_texture(t)->surfaces;
+		struct nouveau_surface *s = &to_nouveau_teximage(ti)->surface;
+
+		context_drv(ctx)->surface_copy(ctx, &ss[level], s,
+					       x, y, x, y,
+					       width, height);
+
+		return GL_TRUE;
+	}
+
+	return GL_FALSE;
+}
+
+static int
+get_last_level(struct gl_texture_object *t)
+{
+	struct gl_texture_image *base = t->Image[0][t->BaseLevel];
+
+	if (t->MinFilter == GL_NEAREST ||
+	    t->MinFilter == GL_LINEAR || !base)
+		return t->BaseLevel;
+	else
+		return MIN2(t->BaseLevel + base->MaxLog2, t->MaxLevel);
+}
+
+static void
+relayout_texture(GLcontext *ctx, struct gl_texture_object *t)
+{
+	struct gl_texture_image *base = t->Image[0][t->BaseLevel];
+
+	if (base) {
+		struct nouveau_surface *ss = to_nouveau_texture(t)->surfaces;
+		struct nouveau_surface *s = &to_nouveau_teximage(base)->surface;
+		int i, ret, last = get_last_level(t);
+		unsigned size, offset = 0,
+			width = s->width,
+			height = s->height;
+
+		/* Deallocate the old storage. */
+		for (i = 0; i < MAX_TEXTURE_LEVELS; i++)
+			nouveau_bo_ref(NULL, &ss[i].bo);
+
+		/* Relayout the mipmap tree. */
+		for (i = t->BaseLevel; i <= last; i++) {
+			size = width * height * s->cpp;
+
+			/* Images larger than 16B have to be aligned. */
+			if (size > 16)
+				offset = align(offset, 64);
+
+			ss[i] = (struct nouveau_surface) {
+				.offset = offset,
+				.layout = SWIZZLED,
+				.format = s->format,
+				.width = width,
+				.height = height,
+				.cpp = s->cpp,
+				.pitch = width * s->cpp,
+			};
+
+			offset += size;
+			width = MAX2(1, width / 2);
+			height = MAX2(1, height / 2);
+		}
+
+		/* Get new storage. */
+		size = align(offset, 64);
+
+		ret = nouveau_bo_new(context_dev(ctx), NOUVEAU_BO_MAP |
+				     NOUVEAU_BO_GART | NOUVEAU_BO_VRAM,
+				     0, size, &ss[last].bo);
+		assert(!ret);
+
+		for (i = t->BaseLevel; i < last; i++)
+			nouveau_bo_ref(ss[last].bo, &ss[i].bo);
+	}
+}
+
+GLboolean
+nouveau_texture_validate(GLcontext *ctx, struct gl_texture_object *t)
+{
+	struct nouveau_texture *nt = to_nouveau_texture(t);
+	int i, last = get_last_level(t);
+
+	if (!nt->surfaces[last].bo)
+		return GL_FALSE;
+
+	if (nt->dirty) {
+		nt->dirty = GL_FALSE;
+
+		/* Copy the teximages to the actual miptree. */
+		for (i = t->BaseLevel; i <= last; i++) {
+			struct nouveau_surface *s = &nt->surfaces[i];
+
+			validate_teximage(ctx, t, i, 0, 0, 0,
+					  s->width, s->height, 1);
+		}
+	}
+
+	return GL_TRUE;
+}
+
+void
+nouveau_texture_reallocate(GLcontext *ctx, struct gl_texture_object *t)
+{
+	texture_dirty(t);
+	relayout_texture(ctx, t);
+	nouveau_texture_validate(ctx, t);
+}
+
+static unsigned
+get_teximage_placement(struct gl_texture_image *ti)
+{
+	if (ti->TexFormat == MESA_FORMAT_A8 ||
+	    ti->TexFormat == MESA_FORMAT_L8 ||
+	    ti->TexFormat == MESA_FORMAT_I8)
+		/* 1 cpp formats will have to be swizzled by the CPU,
+		 * so leave them in system RAM for now. */
+		return NOUVEAU_BO_MAP;
+	else
+		return NOUVEAU_BO_GART | NOUVEAU_BO_MAP;
+}
+
 static void
 nouveau_teximage(GLcontext *ctx, GLint dims, GLenum target, GLint level,
 		 GLint internalFormat,
@@ -181,37 +323,45 @@ nouveau_teximage(GLcontext *ctx, GLint dims, GLenum target, GLint level,
 		 struct gl_texture_image *ti)
 {
 	struct nouveau_surface *s = &to_nouveau_teximage(ti)->surface;
-	unsigned bo_flags = NOUVEAU_BO_GART | NOUVEAU_BO_RDWR | NOUVEAU_BO_MAP;
 	int ret;
 
 	/* Allocate a new bo for the image. */
-	nouveau_surface_alloc(ctx, s, LINEAR, bo_flags, ti->TexFormat,
-			      width, height);
+	nouveau_surface_alloc(ctx, s, LINEAR, get_teximage_placement(ti),
+			      ti->TexFormat, width, height);
 	ti->RowStride = s->pitch / s->cpp;
 
 	pixels = _mesa_validate_pbo_teximage(ctx, dims, width, height, depth,
 					     format, type, pixels, packing,
 					     "glTexImage");
-	if (!pixels)
-		return;
-
-	/* Store the pixel data. */
-	nouveau_teximage_map(ctx, ti);
-
-	ret = _mesa_texstore(ctx, dims, ti->_BaseFormat,
-			     ti->TexFormat, ti->Data,
-			     0, 0, 0, s->pitch,
-			     ti->ImageOffsets,
-			     width, height, depth,
-			     format, type, pixels, packing);
-	assert(ret);
+	if (pixels) {
+		/* Store the pixel data. */
+		nouveau_teximage_map(ctx, ti);
+
+		ret = _mesa_texstore(ctx, dims, ti->_BaseFormat,
+				     ti->TexFormat, ti->Data,
+				     0, 0, 0, s->pitch,
+				     ti->ImageOffsets,
+				     width, height, depth,
+				     format, type, pixels, packing);
+		assert(ret);
+
+		nouveau_teximage_unmap(ctx, ti);
+		_mesa_unmap_teximage_pbo(ctx, packing);
+
+		if (!validate_teximage(ctx, t, level, 0, 0, 0,
+				       width, height, depth))
+			/* It doesn't fit, mark it as dirty. */
+			texture_dirty(t);
+	}
 
-	nouveau_teximage_unmap(ctx, ti);
-	_mesa_unmap_teximage_pbo(ctx, packing);
+	if (level == t->BaseLevel) {
+		if (!teximage_fits(t, level, ti))
+			relayout_texture(ctx, t);
+		nouveau_texture_validate(ctx, t);
+	}
 
 	context_dirty_i(ctx, TEX_OBJ, ctx->Texture.CurrentUnit);
 	context_dirty_i(ctx, TEX_ENV, ctx->Texture.CurrentUnit);
-	texture_dirty(t);
 }
 
 static void
@@ -271,8 +421,9 @@ nouveau_texsubimage_3d(GLcontext *ctx, GLenum target, GLint level,
 				  packing, t, ti);
 	nouveau_teximage_unmap(ctx, ti);
 
-	context_dirty_i(ctx, TEX_OBJ, ctx->Texture.CurrentUnit);
-	texture_dirty(t);
+	if (!to_nouveau_texture(t)->dirty)
+		validate_teximage(ctx, t, level, xoffset, yoffset, zoffset,
+				  width, height, depth);
 }
 
 static void
@@ -290,8 +441,9 @@ nouveau_texsubimage_2d(GLcontext *ctx, GLenum target, GLint level,
 				  packing, t, ti);
 	nouveau_teximage_unmap(ctx, ti);
 
-	context_dirty_i(ctx, TEX_OBJ, ctx->Texture.CurrentUnit);
-	texture_dirty(t);
+	if (!to_nouveau_texture(t)->dirty)
+		validate_teximage(ctx, t, level, xoffset, yoffset, 0,
+				  width, height, 1);
 }
 
 static void
@@ -308,8 +460,9 @@ nouveau_texsubimage_1d(GLcontext *ctx, GLenum target, GLint level,
 				  packing, t, ti);
 	nouveau_teximage_unmap(ctx, ti);
 
-	context_dirty_i(ctx, TEX_OBJ, ctx->Texture.CurrentUnit);
-	texture_dirty(t);
+	if (!to_nouveau_texture(t)->dirty)
+		validate_teximage(ctx, t, level, xoffset, 0, 0,
+				  width, 1, 1);
 }
 
 static void
@@ -354,87 +507,6 @@ nouveau_texture_unmap(GLcontext *ctx, struct gl_texture_object *t)
 	}
 }
 
-static void
-relayout_miptree(GLcontext *ctx, struct gl_texture_object *t)
-{
-	struct nouveau_surface *ss = to_nouveau_texture(t)->surfaces;
-	unsigned last_level, offset = 0;
-	unsigned size;
-	int i, ret;
-
-	if (t->MinFilter == GL_NEAREST ||
-	    t->MinFilter == GL_LINEAR)
-		last_level = t->BaseLevel;
-	else
-		last_level = t->_MaxLevel;
-
-	/* Deallocate the old storage. */
-	for (i = 0; i < MAX_TEXTURE_LEVELS; i++)
-		nouveau_bo_ref(NULL, &ss[i].bo);
-
-	/* Relayout the mipmap tree. */
-	for (i = t->BaseLevel; i <= last_level; i++) {
-		struct nouveau_surface *s =
-			&to_nouveau_teximage(t->Image[0][i])->surface;
-
-		size = s->width * s->height * s->cpp;
-
-		/* Images larger than 16B have to be aligned. */
-		if (size > 16)
-			offset = align(offset, 64);
-
-		ss[i] = (struct nouveau_surface) {
-			.offset = offset,
-			.layout = SWIZZLED,
-			.format = s->format,
-			.width = s->width,
-			.height = s->height,
-			.cpp = s->cpp,
-			.pitch = s->width * s->cpp,
-		};
-
-		offset += size;
-	}
-
-	/* Get new storage. */
-	size = align(offset, 64);
-
-	ret = nouveau_bo_new(context_dev(ctx),
-			     NOUVEAU_BO_GART | NOUVEAU_BO_VRAM,
-			     0, size, &ss[last_level].bo);
-	assert(!ret);
-
-	for (i = t->BaseLevel; i < last_level; i++)
-		nouveau_bo_ref(ss[last_level].bo, &ss[i].bo);
-}
-
-void
-nouveau_texture_validate(GLcontext *ctx, struct gl_texture_object *t)
-{
-	struct nouveau_texture *nt = to_nouveau_texture(t);
-	int i;
-
-	if (!nt->dirty)
-		return;
-
-	nt->dirty = GL_FALSE;
-
-	relayout_miptree(ctx, t);
-
-	/* Copy the teximages to the actual swizzled miptree. */
-	for (i = t->BaseLevel; i < MAX_TEXTURE_LEVELS; i++) {
-		struct gl_texture_image *ti = t->Image[0][i];
-		struct nouveau_surface *s = &to_nouveau_teximage(ti)->surface;
-
-		if (!nt->surfaces[i].bo)
-			break;
-
-		context_drv(ctx)->surface_copy(ctx, &nt->surfaces[i], s,
-					       0, 0, 0, 0,
-					       s->width, s->height);
-	}
-}
-
 void
 nouveau_texture_functions_init(struct dd_function_table *functions)
 {
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_texture.h b/src/mesa/drivers/dri/nouveau/nouveau_texture.h
index 695c0897b5..75d8190e88 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_texture.h
+++ b/src/mesa/drivers/dri/nouveau/nouveau_texture.h
@@ -43,7 +43,10 @@ struct nouveau_texture {
 #define texture_dirty(t) \
 	to_nouveau_texture(t)->dirty = GL_TRUE;
 
-void
+GLboolean
 nouveau_texture_validate(GLcontext *ctx, struct gl_texture_object *t);
 
+void
+nouveau_texture_reallocate(GLcontext *ctx, struct gl_texture_object *t);
+
 #endif
diff --git a/src/mesa/drivers/dri/nouveau/nv04_state_tex.c b/src/mesa/drivers/dri/nouveau/nv04_state_tex.c
index 99ea310c65..684a19e703 100644
--- a/src/mesa/drivers/dri/nouveau/nv04_state_tex.c
+++ b/src/mesa/drivers/dri/nouveau/nv04_state_tex.c
@@ -89,7 +89,9 @@ nv04_emit_tex_obj(GLcontext *ctx, int emit)
 		struct gl_texture_image *ti = t->Image[0][t->BaseLevel];
 		int lod_max = 1, lod_bias = 0;
 
-		nouveau_texture_validate(ctx, t);
+		if (!nouveau_texture_validate(ctx, t))
+			return;
+
 		s = &to_nouveau_texture(t)->surfaces[t->BaseLevel];
 
 		if (t->MinFilter != GL_NEAREST &&
diff --git a/src/mesa/drivers/dri/nouveau/nv10_state_tex.c b/src/mesa/drivers/dri/nouveau/nv10_state_tex.c
index e5d4f3d18d..d732a5335b 100644
--- a/src/mesa/drivers/dri/nouveau/nv10_state_tex.c
+++ b/src/mesa/drivers/dri/nouveau/nv10_state_tex.c
@@ -90,7 +90,8 @@ nv10_emit_tex_obj(GLcontext *ctx, int emit)
 	s = &to_nouveau_texture(t)->surfaces[t->BaseLevel];
 	ti = t->Image[0][t->BaseLevel];
 
-	nouveau_texture_validate(ctx, t);
+	if (!nouveau_texture_validate(ctx, t))
+		return;
 
 	/* Recompute the texturing registers. */
 	tx_format = nvgl_wrap_mode(t->WrapT) << 28
diff --git a/src/mesa/drivers/dri/nouveau/nv20_state_tex.c b/src/mesa/drivers/dri/nouveau/nv20_state_tex.c
index d01e91f8ee..2bf760d3b0 100644
--- a/src/mesa/drivers/dri/nouveau/nv20_state_tex.c
+++ b/src/mesa/drivers/dri/nouveau/nv20_state_tex.c
@@ -87,7 +87,8 @@ nv20_emit_tex_obj(GLcontext *ctx, int emit)
 	s = &to_nouveau_texture(t)->surfaces[t->BaseLevel];
 	ti = t->Image[0][t->BaseLevel];
 
-	nouveau_texture_validate(ctx, t);
+	if (!nouveau_texture_validate(ctx, t))
+		return;
 
 	/* Recompute the texturing registers. */
 	tx_format = ti->DepthLog2 << 28
-- 
cgit v1.2.3


From 7269a30b86745a29bb575ce3545ab82e6514ce2a Mon Sep 17 00:00:00 2001
From: Francisco Jerez <currojerez@riseup.net>
Date: Tue, 23 Feb 2010 16:15:14 +0100
Subject: dri/nouveau: Restructure the nv[12]0 regcombiner code, and fake A8/L8
 support.

---
 src/mesa/drivers/dri/nouveau/Makefile          |   1 +
 src/mesa/drivers/dri/nouveau/nouveau_util.h    |  18 ++
 src/mesa/drivers/dri/nouveau/nv10_driver.h     |   8 +
 src/mesa/drivers/dri/nouveau/nv10_state_frag.c | 233 ++++++++++++-------------
 src/mesa/drivers/dri/nouveau/nv20_context.c    |  10 +-
 src/mesa/drivers/dri/nouveau/nv20_driver.h     |   7 +
 src/mesa/drivers/dri/nouveau/nv20_state_frag.c |  73 ++++++++
 7 files changed, 221 insertions(+), 129 deletions(-)
 create mode 100644 src/mesa/drivers/dri/nouveau/nv20_state_frag.c

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/nouveau/Makefile b/src/mesa/drivers/dri/nouveau/Makefile
index 43bc9f9516..49e8933561 100644
--- a/src/mesa/drivers/dri/nouveau/Makefile
+++ b/src/mesa/drivers/dri/nouveau/Makefile
@@ -42,6 +42,7 @@ DRIVER_SOURCES = \
 	nv20_state_polygon.c \
 	nv20_state_raster.c \
 	nv20_state_tex.c \
+	nv20_state_frag.c \
 	nv20_state_tnl.c
 
 C_SOURCES = \
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_util.h b/src/mesa/drivers/dri/nouveau/nouveau_util.h
index 076f225fed..d6007aba2b 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_util.h
+++ b/src/mesa/drivers/dri/nouveau/nouveau_util.h
@@ -173,4 +173,22 @@ OUT_RINGm(struct nouveau_channel *chan, float m[16])
 			OUT_RINGf(chan, m[4*j + i]);
 }
 
+static inline GLboolean
+is_color_operand(int op)
+{
+	return op == GL_SRC_COLOR || op == GL_ONE_MINUS_SRC_COLOR;
+}
+
+static inline GLboolean
+is_negative_operand(int op)
+{
+	return op == GL_ONE_MINUS_SRC_COLOR || op == GL_ONE_MINUS_SRC_ALPHA;
+}
+
+static inline GLboolean
+is_texture_source(int s)
+{
+	return s == GL_TEXTURE || (s >= GL_TEXTURE0 && s <= GL_TEXTURE31);
+}
+
 #endif
diff --git a/src/mesa/drivers/dri/nouveau/nv10_driver.h b/src/mesa/drivers/dri/nouveau/nv10_driver.h
index 4c220b0373..b5ab19b3bc 100644
--- a/src/mesa/drivers/dri/nouveau/nv10_driver.h
+++ b/src/mesa/drivers/dri/nouveau/nv10_driver.h
@@ -118,6 +118,14 @@ void
 nv10_emit_stencil_op(GLcontext *ctx, int emit);
 
 /* nv10_state_frag.c */
+void
+nv10_get_general_combiner(GLcontext *ctx, int i,
+			  uint32_t *a_in, uint32_t *a_out,
+			  uint32_t *c_in, uint32_t *c_out, uint32_t *k);
+
+void
+nv10_get_final_combiner(GLcontext *ctx, uint64_t *in, int *n);
+
 void
 nv10_emit_tex_env(GLcontext *ctx, int emit);
 
diff --git a/src/mesa/drivers/dri/nouveau/nv10_state_frag.c b/src/mesa/drivers/dri/nouveau/nv10_state_frag.c
index c1df26ecce..b56b4ff02c 100644
--- a/src/mesa/drivers/dri/nouveau/nv10_state_frag.c
+++ b/src/mesa/drivers/dri/nouveau/nv10_state_frag.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2009 Francisco Jerez.
+ * Copyright (C) 2009-2010 Francisco Jerez.
  * All Rights Reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining
@@ -90,11 +90,11 @@ struct combiner_state {
 	} while (0)
 
 /* Get the RC input source for the specified EXT_texture_env_combine
- * argument. */
+ * source. */
 static uint32_t
-get_input_source(struct combiner_state *rc, int arg)
+get_input_source(struct combiner_state *rc, int source)
 {
-	switch (rc->source[arg]) {
+	switch (source) {
 	case GL_TEXTURE:
 		return RC_IN_SOURCE(TEXTURE0) + rc->unit;
 
@@ -127,52 +127,69 @@ get_input_source(struct combiner_state *rc, int arg)
 	}
 }
 
-/* Get the RC input mapping for the specified argument, possibly
- * inverted or biased. */
+/* Get the RC input mapping for the specified texture_env_combine
+ * operand, possibly inverted or biased. */
 #define INVERT 0x1
 #define HALF_BIAS 0x2
 
 static uint32_t
-get_input_mapping(struct combiner_state *rc, int arg, int flags)
+get_input_mapping(struct combiner_state *rc, int operand, int flags)
 {
 	int map = 0;
 
-	switch (rc->operand[arg]) {
-	case GL_SRC_COLOR:
-	case GL_ONE_MINUS_SRC_COLOR:
+	if (is_color_operand(operand))
 		map |= RC_IN_USAGE(RGB);
-		break;
-
-	case GL_SRC_ALPHA:
-	case GL_ONE_MINUS_SRC_ALPHA:
+	else
 		map |= RC_IN_USAGE(ALPHA);
-		break;
-	}
 
-	switch (rc->operand[arg]) {
-	case GL_SRC_COLOR:
-	case GL_SRC_ALPHA:
-		map |= (flags & INVERT ? RC_IN_MAPPING(UNSIGNED_INVERT) :
-			flags & HALF_BIAS ? RC_IN_MAPPING(HALF_BIAS_NORMAL) :
-			RC_IN_MAPPING(UNSIGNED_IDENTITY));
-		break;
+	if (is_negative_operand(operand) == !(flags & INVERT))
+		map |= flags & HALF_BIAS ?
+			RC_IN_MAPPING(HALF_BIAS_NEGATE) :
+			RC_IN_MAPPING(UNSIGNED_INVERT);
+	else
+		map |= flags & HALF_BIAS ?
+			RC_IN_MAPPING(HALF_BIAS_NORMAL) :
+			RC_IN_MAPPING(UNSIGNED_IDENTITY);
 
-	case GL_ONE_MINUS_SRC_COLOR:
-	case GL_ONE_MINUS_SRC_ALPHA:
-		map |= (flags & INVERT ? RC_IN_MAPPING(UNSIGNED_IDENTITY) :
-			flags & HALF_BIAS ? RC_IN_MAPPING(HALF_BIAS_NEGATE) :
-			RC_IN_MAPPING(UNSIGNED_INVERT));
-		break;
+	return map;
+}
+
+static uint32_t
+get_input_arg(struct combiner_state *rc, int arg, int flags)
+{
+	int source = rc->source[arg];
+	int operand = rc->operand[arg];
+
+	/* Fake several unsupported texture formats. */
+	if (is_texture_source(source)) {
+		int i = (source == GL_TEXTURE ?
+			 rc->unit : source - GL_TEXTURE0);
+		struct gl_texture_object *t = rc->ctx->Texture.Unit[i]._Current;
+		gl_format format = t->Image[0][t->BaseLevel]->TexFormat;
+
+		if (format == MESA_FORMAT_A8) {
+			/* Emulated using I8. */
+			if (is_color_operand(operand))
+				return RC_IN_SOURCE(ZERO) |
+					get_input_mapping(rc, operand, flags);
+
+		} else if (format == MESA_FORMAT_L8) {
+			/* Sometimes emulated using I8. */
+			if (!is_color_operand(operand))
+				return RC_IN_SOURCE(ZERO) |
+					get_input_mapping(rc, operand,
+							  flags ^ INVERT);
+		}
 	}
 
-	return map;
+	return get_input_source(rc, source) |
+		get_input_mapping(rc, operand, flags);
 }
 
 /* Bind the RC input variable <var> to the EXT_texture_env_combine
  * argument <arg>, possibly inverted or biased. */
 #define INPUT_ARG(rc, var, arg, flags)					\
-	(rc)->in |= (get_input_mapping(rc, arg, flags) |		\
-		     get_input_source(rc, arg)) << RC_IN_SHIFT_##var
+	(rc)->in |= get_input_arg(rc, arg, flags) << RC_IN_SHIFT_##var
 
 /* Bind the RC input variable <var> to the RC source <src>. */
 #define INPUT_SRC(rc, var, src, chan)					\
@@ -268,86 +285,13 @@ setup_combiner(struct combiner_state *rc)
 	}
 }
 
-/* Write the register combiner state out to the hardware. */
-static void
-nv10_load_combiner(GLcontext *ctx, int i, struct combiner_state *rc_a,
-		   struct combiner_state *rc_c, uint32_t rc_const)
-{
-	struct nouveau_channel *chan = context_chan(ctx);
-	struct nouveau_grobj *celsius = context_eng3d(ctx);
-
-	/* Enable the combiners we're going to need. */
-	if (i == 1) {
-		if (rc_c->out || rc_a->out)
-			rc_c->out |= 0x5 << 27;
-		else
-			rc_c->out |= 0x3 << 27;
-	}
-
-	BEGIN_RING(chan, celsius, NV10TCL_RC_IN_ALPHA(i), 1);
-	OUT_RING(chan, rc_a->in);
-	BEGIN_RING(chan, celsius, NV10TCL_RC_IN_RGB(i), 1);
-	OUT_RING(chan, rc_c->in);
-	BEGIN_RING(chan, celsius, NV10TCL_RC_COLOR(i), 1);
-	OUT_RING(chan, rc_const);
-	BEGIN_RING(chan, celsius, NV10TCL_RC_OUT_ALPHA(i), 1);
-	OUT_RING(chan, rc_a->out);
-	BEGIN_RING(chan, celsius, NV10TCL_RC_OUT_RGB(i), 1);
-	OUT_RING(chan, rc_c->out);
-}
-
-static void
-nv10_load_final(GLcontext *ctx, struct combiner_state *rc, int n)
-{
-	struct nouveau_channel *chan = context_chan(ctx);
-	struct nouveau_grobj *celsius = context_eng3d(ctx);
-
-	BEGIN_RING(chan, celsius, NV10TCL_RC_FINAL0, 2);
-	OUT_RING(chan, rc->in);
-	OUT_RING(chan, rc->in >> 32);
-}
-
-static void
-nv20_load_combiner(GLcontext *ctx, int i, struct combiner_state *rc_a,
-		   struct combiner_state *rc_c, uint32_t rc_const)
-{
-	struct nouveau_channel *chan = context_chan(ctx);
-	struct nouveau_grobj *kelvin = context_eng3d(ctx);
-
-	BEGIN_RING(chan, kelvin, NV20TCL_RC_IN_ALPHA(i), 1);
-	OUT_RING(chan, rc_a->in);
-	BEGIN_RING(chan, kelvin, NV20TCL_RC_OUT_ALPHA(i), 1);
-	OUT_RING(chan, rc_a->out);
-	BEGIN_RING(chan, kelvin, NV20TCL_RC_IN_RGB(i), 1);
-	OUT_RING(chan, rc_c->in);
-	BEGIN_RING(chan, kelvin, NV20TCL_RC_OUT_RGB(i), 1);
-	OUT_RING(chan, rc_c->out);
-	BEGIN_RING(chan, kelvin, NV20TCL_RC_CONSTANT_COLOR0(i), 1);
-	OUT_RING(chan, rc_const);
-}
-
-static void
-nv20_load_final(GLcontext *ctx, struct combiner_state *rc, int n)
-{
-	struct nouveau_channel *chan = context_chan(ctx);
-	struct nouveau_grobj *kelvin = context_eng3d(ctx);
-
-	BEGIN_RING(chan, kelvin, NV20TCL_RC_FINAL0, 2);
-	OUT_RING(chan, rc->in);
-	OUT_RING(chan, rc->in >> 32);
-
-	BEGIN_RING(chan, kelvin, NV20TCL_RC_ENABLE, 1);
-	OUT_RING(chan, n);
-}
-
 void
-nv10_emit_tex_env(GLcontext *ctx, int emit)
+nv10_get_general_combiner(GLcontext *ctx, int i,
+			  uint32_t *a_in, uint32_t *a_out,
+			  uint32_t *c_in, uint32_t *c_out, uint32_t *k)
 {
-	const int i = emit - NOUVEAU_STATE_TEX_ENV0;
 	struct combiner_state rc_a, rc_c;
-	uint32_t rc_const;
 
-	/* Compute the new combiner state. */
 	if (ctx->Texture.Unit[i]._ReallyEnabled) {
 		INIT_COMBINER(RGB, ctx, &rc_c, i);
 
@@ -359,26 +303,22 @@ nv10_emit_tex_env(GLcontext *ctx, int emit)
 		setup_combiner(&rc_c);
 		setup_combiner(&rc_a);
 
-		rc_const = pack_rgba_f(MESA_FORMAT_ARGB8888,
-				       ctx->Texture.Unit[i].EnvColor);
-
 	} else {
-		rc_a.in = rc_a.out = rc_c.in = rc_c.out = rc_const = 0;
+		rc_a.in = rc_a.out = rc_c.in = rc_c.out = 0;
 	}
 
-	if (context_chipset(ctx) >= 0x20)
-		nv20_load_combiner(ctx, i, &rc_a, &rc_c, rc_const);
-	else
-		nv10_load_combiner(ctx, i, &rc_a, &rc_c, rc_const);
-
-	context_dirty(ctx, FRAG);
+	*k = pack_rgba_f(MESA_FORMAT_ARGB8888,
+			 ctx->Texture.Unit[i].EnvColor);
+	*a_in = rc_a.in;
+	*a_out = rc_a.out;
+	*c_in = rc_c.in;
+	*c_out = rc_c.out;
 }
 
 void
-nv10_emit_frag(GLcontext *ctx, int emit)
+nv10_get_final_combiner(GLcontext *ctx, uint64_t *in, int *n)
 {
 	struct combiner_state rc = {};
-	int n = log2i(ctx->Texture._EnabledUnits) + 1;
 
 	/*
 	 * The final fragment value equation is something like:
@@ -409,8 +349,53 @@ nv10_emit_frag(GLcontext *ctx, int emit)
 		INPUT_SRC(&rc, G, PRIMARY_COLOR, ALPHA);
 	}
 
-	if (context_chipset(ctx) >= 0x20)
-		nv20_load_final(ctx, &rc, n);
-	else
-		nv10_load_final(ctx, &rc, n);
+	*in = rc.in;
+	*n = log2i(ctx->Texture._EnabledUnits) + 1;
+}
+
+void
+nv10_emit_tex_env(GLcontext *ctx, int emit)
+{
+	const int i = emit - NOUVEAU_STATE_TEX_ENV0;
+	struct nouveau_channel *chan = context_chan(ctx);
+	struct nouveau_grobj *celsius = context_eng3d(ctx);
+	uint32_t a_in, a_out, c_in, c_out, k;
+
+	nv10_get_general_combiner(ctx, i, &a_in, &a_out, &c_in, &c_out, &k);
+
+	/* Enable the combiners we're going to need. */
+	if (i == 1) {
+		if (c_out || a_out)
+			c_out |= 0x5 << 27;
+		else
+			c_out |= 0x3 << 27;
+	}
+
+	BEGIN_RING(chan, celsius, NV10TCL_RC_IN_ALPHA(i), 1);
+	OUT_RING(chan, a_in);
+	BEGIN_RING(chan, celsius, NV10TCL_RC_IN_RGB(i), 1);
+	OUT_RING(chan, c_in);
+	BEGIN_RING(chan, celsius, NV10TCL_RC_COLOR(i), 1);
+	OUT_RING(chan, k);
+	BEGIN_RING(chan, celsius, NV10TCL_RC_OUT_ALPHA(i), 1);
+	OUT_RING(chan, a_out);
+	BEGIN_RING(chan, celsius, NV10TCL_RC_OUT_RGB(i), 1);
+	OUT_RING(chan, c_out);
+
+	context_dirty(ctx, FRAG);
+}
+
+void
+nv10_emit_frag(GLcontext *ctx, int emit)
+{
+	struct nouveau_channel *chan = context_chan(ctx);
+	struct nouveau_grobj *celsius = context_eng3d(ctx);
+	uint64_t in;
+	int n;
+
+	nv10_get_final_combiner(ctx, &in, &n);
+
+	BEGIN_RING(chan, celsius, NV10TCL_RC_FINAL0, 2);
+	OUT_RING(chan, in);
+	OUT_RING(chan, in >> 32);
 }
diff --git a/src/mesa/drivers/dri/nouveau/nv20_context.c b/src/mesa/drivers/dri/nouveau/nv20_context.c
index 82a13fb6ff..a80062f5f1 100644
--- a/src/mesa/drivers/dri/nouveau/nv20_context.c
+++ b/src/mesa/drivers/dri/nouveau/nv20_context.c
@@ -449,7 +449,7 @@ const struct nouveau_driver nv20_driver = {
 		nv10_emit_front_face,
 		nv10_emit_depth,
 		nv10_emit_dither,
-		nv10_emit_frag,
+		nv20_emit_frag,
 		nv20_emit_framebuffer,
 		nv20_emit_fog,
 		nv10_emit_index_mask,
@@ -487,10 +487,10 @@ const struct nouveau_driver nv20_driver = {
 		nv10_emit_stencil_func,
 		nv10_emit_stencil_mask,
 		nv10_emit_stencil_op,
-		nv10_emit_tex_env,
-		nv10_emit_tex_env,
-		nv10_emit_tex_env,
-		nv10_emit_tex_env,
+		nv20_emit_tex_env,
+		nv20_emit_tex_env,
+		nv20_emit_tex_env,
+		nv20_emit_tex_env,
 		nv10_emit_tex_gen,
 		nv10_emit_tex_gen,
 		nv10_emit_tex_gen,
diff --git a/src/mesa/drivers/dri/nouveau/nv20_driver.h b/src/mesa/drivers/dri/nouveau/nv20_driver.h
index f82a292cf7..18574e9be6 100644
--- a/src/mesa/drivers/dri/nouveau/nv20_driver.h
+++ b/src/mesa/drivers/dri/nouveau/nv20_driver.h
@@ -59,6 +59,13 @@ nv20_emit_point_mode(GLcontext *ctx, int emit);
 void
 nv20_emit_logic_opcode(GLcontext *ctx, int emit);
 
+/* nv20_state_frag.c */
+void
+nv20_emit_tex_env(GLcontext *ctx, int emit);
+
+void
+nv20_emit_frag(GLcontext *ctx, int emit);
+
 /* nv20_state_tex.c */
 void
 nv20_emit_tex_obj(GLcontext *ctx, int emit);
diff --git a/src/mesa/drivers/dri/nouveau/nv20_state_frag.c b/src/mesa/drivers/dri/nouveau/nv20_state_frag.c
new file mode 100644
index 0000000000..74803d2ae8
--- /dev/null
+++ b/src/mesa/drivers/dri/nouveau/nv20_state_frag.c
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2009-2010 Francisco Jerez.
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#include "nouveau_driver.h"
+#include "nouveau_context.h"
+#include "nouveau_class.h"
+#include "nv10_driver.h"
+#include "nv20_driver.h"
+
+void
+nv20_emit_tex_env(GLcontext *ctx, int emit)
+{
+	const int i = emit - NOUVEAU_STATE_TEX_ENV0;
+	struct nouveau_channel *chan = context_chan(ctx);
+	struct nouveau_grobj *kelvin = context_eng3d(ctx);
+	uint32_t a_in, a_out, c_in, c_out, k;
+
+	nv10_get_general_combiner(ctx, i, &a_in, &a_out, &c_in, &c_out, &k);
+
+	BEGIN_RING(chan, kelvin, NV20TCL_RC_IN_ALPHA(i), 1);
+	OUT_RING(chan, a_in);
+	BEGIN_RING(chan, kelvin, NV20TCL_RC_OUT_ALPHA(i), 1);
+	OUT_RING(chan, a_out);
+	BEGIN_RING(chan, kelvin, NV20TCL_RC_IN_RGB(i), 1);
+	OUT_RING(chan, c_in);
+	BEGIN_RING(chan, kelvin, NV20TCL_RC_OUT_RGB(i), 1);
+	OUT_RING(chan, c_out);
+	BEGIN_RING(chan, kelvin, NV20TCL_RC_CONSTANT_COLOR0(i), 1);
+	OUT_RING(chan, k);
+
+	context_dirty(ctx, FRAG);
+}
+
+void
+nv20_emit_frag(GLcontext *ctx, int emit)
+{
+	struct nouveau_channel *chan = context_chan(ctx);
+	struct nouveau_grobj *kelvin = context_eng3d(ctx);
+	uint64_t in;
+	int n;
+
+	nv10_get_final_combiner(ctx, &in, &n);
+
+	BEGIN_RING(chan, kelvin, NV20TCL_RC_FINAL0, 2);
+	OUT_RING(chan, in);
+	OUT_RING(chan, in >> 32);
+
+	BEGIN_RING(chan, kelvin, NV20TCL_RC_ENABLE, 1);
+	OUT_RING(chan, n);
+}
-- 
cgit v1.2.3


From 3ccfce85e243e83afc1bb582d7424d9238a64f42 Mon Sep 17 00:00:00 2001
From: Francisco Jerez <currojerez@riseup.net>
Date: Tue, 23 Feb 2010 16:57:06 +0100
Subject: dri/nouveau: Fake A8 and L8 texture support on nv04.

---
 src/mesa/drivers/dri/nouveau/nv04_state_frag.c | 76 ++++++++++++++++----------
 1 file changed, 46 insertions(+), 30 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/nouveau/nv04_state_frag.c b/src/mesa/drivers/dri/nouveau/nv04_state_frag.c
index 34ee296202..d7c86d4178 100644
--- a/src/mesa/drivers/dri/nouveau/nv04_state_frag.c
+++ b/src/mesa/drivers/dri/nouveau/nv04_state_frag.c
@@ -41,6 +41,7 @@
 	NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ALPHA0
 
 struct combiner_state {
+	GLcontext *ctx;
 	int unit;
 	GLboolean alpha;
 
@@ -59,11 +60,12 @@ struct combiner_state {
 
 /* Initialize a combiner_state struct from the texture unit
  * context. */
-#define INIT_COMBINER(chan, rc, i) do {				\
+#define INIT_COMBINER(chan, ctx, rc, i) do {			\
 		struct gl_tex_env_combine_state *c =		\
 			ctx->Texture.Unit[i]._CurrentCombine;	\
-		(rc)->alpha = __INIT_COMBINER_ALPHA_##chan;	\
+		(rc)->ctx = ctx;				\
 		(rc)->unit = i;					\
+		(rc)->alpha = __INIT_COMBINER_ALPHA_##chan;	\
 		(rc)->mode = c->Mode##chan;			\
 		(rc)->source = c->Source##chan;			\
 		(rc)->operand = c->Operand##chan;		\
@@ -72,11 +74,11 @@ struct combiner_state {
 	} while (0)
 
 /* Get the combiner source for the specified EXT_texture_env_combine
- * argument. */
+ * source. */
 static uint32_t
-get_arg_source(struct combiner_state *rc, int arg)
+get_input_source(struct combiner_state *rc, int source)
 {
-	switch (rc->source[arg]) {
+	switch (source) {
 	case GL_TEXTURE:
 		return rc->unit ? COMBINER_SOURCE(TEXTURE1) :
 			COMBINER_SOURCE(TEXTURE0);
@@ -103,38 +105,53 @@ get_arg_source(struct combiner_state *rc, int arg)
 }
 
 /* Get the (possibly inverted) combiner input mapping for the
- * specified argument. */
+ * specified EXT_texture_env_combine operand. */
 #define INVERT 0x1
 
 static uint32_t
-get_arg_mapping(struct combiner_state *rc, int arg, int flags)
+get_input_mapping(struct combiner_state *rc, int operand, int flags)
 {
 	int map = 0;
 
-	switch (rc->operand[arg]) {
-	case GL_SRC_COLOR:
-	case GL_ONE_MINUS_SRC_COLOR:
-		break;
+	if (!is_color_operand(operand) && !rc->alpha)
+		map |= COMBINER_ALPHA;
 
-	case GL_SRC_ALPHA:
-	case GL_ONE_MINUS_SRC_ALPHA:
-		map |= rc->alpha ? 0 : COMBINER_ALPHA;
-		break;
-	}
+	if (is_negative_operand(operand) == !(flags & INVERT))
+		map |= COMBINER_INVERT;
 
-	switch (rc->operand[arg]) {
-	case GL_SRC_COLOR:
-	case GL_SRC_ALPHA:
-		map |= flags & INVERT ? COMBINER_INVERT : 0;
-		break;
+	return map;
+}
 
-	case GL_ONE_MINUS_SRC_COLOR:
-	case GL_ONE_MINUS_SRC_ALPHA:
-		map |= flags & INVERT ? 0 : COMBINER_INVERT;
-		break;
+static uint32_t
+get_input_arg(struct combiner_state *rc, int arg, int flags)
+{
+	int source = rc->source[arg];
+	int operand = rc->operand[arg];
+
+	/* Fake several unsupported texture formats. */
+	if (is_texture_source(source)) {
+		int i = (source == GL_TEXTURE ?
+			 rc->unit : source - GL_TEXTURE0);
+		struct gl_texture_object *t = rc->ctx->Texture.Unit[i]._Current;
+		gl_format format = t->Image[0][t->BaseLevel]->TexFormat;
+
+		if (format == MESA_FORMAT_A8) {
+			/* Emulated using I8. */
+			if (is_color_operand(operand))
+				return COMBINER_SOURCE(ZERO) |
+					get_input_mapping(rc, operand, flags);
+
+		} else if (format == MESA_FORMAT_L8) {
+			/* Emulated using I8. */
+			if (!is_color_operand(operand))
+				return COMBINER_SOURCE(ZERO) |
+					get_input_mapping(rc, operand,
+							  flags ^ INVERT);
+		}
 	}
 
-	return map;
+	return get_input_source(rc, source) |
+		get_input_mapping(rc, operand, flags);
 }
 
 /* Bind the combiner input <in> to the combiner source <src>,
@@ -146,8 +163,7 @@ get_arg_mapping(struct combiner_state *rc, int arg, int flags)
 /* Bind the combiner input <in> to the EXT_texture_env_combine
  * argument <arg>, possibly inverted. */
 #define INPUT_ARG(rc, in, arg, flags)					\
-	(rc)->hw |= (get_arg_source(rc, arg) |				\
-		     get_arg_mapping(rc, arg, flags)) << COMBINER_SHIFT(in)
+	(rc)->hw |= get_input_arg(rc, arg, flags) << COMBINER_SHIFT(in)
 
 #define UNSIGNED_OP(rc)							\
 	(rc)->hw |= ((rc)->logscale ?					\
@@ -222,10 +238,10 @@ nv04_emit_tex_env(GLcontext *ctx, int emit)
 
 	/* Compute the new combiner state. */
 	if (ctx->Texture.Unit[i]._ReallyEnabled) {
-		INIT_COMBINER(A, &rc_a, i);
+		INIT_COMBINER(A, ctx, &rc_a, i);
 		setup_combiner(&rc_a);
 
-		INIT_COMBINER(RGB, &rc_c, i);
+		INIT_COMBINER(RGB, ctx, &rc_c, i);
 		setup_combiner(&rc_c);
 
 	} else {
-- 
cgit v1.2.3


From 35041ec151fa6af71966d86869c38bc6b2f7606f Mon Sep 17 00:00:00 2001
From: Francisco Jerez <currojerez@riseup.net>
Date: Tue, 23 Feb 2010 16:30:48 +0100
Subject: dri/nouveau: Add some RGB888 span functions.

---
 src/mesa/drivers/dri/nouveau/nouveau_span.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_span.c b/src/mesa/drivers/dri/nouveau/nouveau_span.c
index dbbbf15b09..f1a56dd03a 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_span.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_span.c
@@ -61,6 +61,15 @@
 
 #include "spantmp2.h"
 
+/* RGB888 span functions */
+#define SPANTMP_PIXEL_FMT GL_BGR
+#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_INT_8_8_8_8_REV
+#define TAG(x) nouveau_##x##_rgb888
+#define TAG2(x, y) nouveau_##x##_rgb888##y
+#define GET_PTR(x, y) (s->bo->map + (y)*s->pitch + (x)*s->cpp)
+
+#include "spantmp2.h"
+
 /* ARGB8888 span functions */
 #define SPANTMP_PIXEL_FMT GL_BGRA
 #define SPANTMP_PIXEL_TYPE GL_UNSIGNED_INT_8_8_8_8_REV
@@ -101,6 +110,8 @@ renderbuffer_map_unmap(struct gl_renderbuffer *rb, GLboolean map)
 			nouveau_InitPointers_rgb565(rb);
 			break;
 		case MESA_FORMAT_XRGB8888:
+			nouveau_InitPointers_rgb888(rb);
+			break;
 		case MESA_FORMAT_ARGB8888:
 			nouveau_InitPointers_argb8888(rb);
 			break;
-- 
cgit v1.2.3


From 7432ffbdfa52b51b720bdde5cd50c497862b8806 Mon Sep 17 00:00:00 2001
From: Francisco Jerez <currojerez@riseup.net>
Date: Tue, 23 Feb 2010 16:31:42 +0100
Subject: dri/nouveau: Don't try to map a non-existent teximage.

---
 src/mesa/drivers/dri/nouveau/nouveau_texture.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_texture.c b/src/mesa/drivers/dri/nouveau/nouveau_texture.c
index 32603ab66d..5b78804295 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_texture.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_texture.c
@@ -81,10 +81,12 @@ nouveau_teximage_map(GLcontext *ctx, struct gl_texture_image *ti)
 	struct nouveau_surface *s = &to_nouveau_teximage(ti)->surface;
 	int ret;
 
-	ret = nouveau_bo_map(s->bo, NOUVEAU_BO_RDWR);
-	assert(!ret);
+	if (s->bo) {
+		ret = nouveau_bo_map(s->bo, NOUVEAU_BO_RDWR);
+		assert(!ret);
 
-	ti->Data = s->bo->map;
+		ti->Data = s->bo->map;
+	}
 }
 
 static void
@@ -92,7 +94,8 @@ nouveau_teximage_unmap(GLcontext *ctx, struct gl_texture_image *ti)
 {
 	struct nouveau_surface *s = &to_nouveau_teximage(ti)->surface;
 
-	nouveau_bo_unmap(s->bo);
+	if (s->bo)
+		nouveau_bo_unmap(s->bo);
 	ti->Data = NULL;
 }
 
-- 
cgit v1.2.3


From a7b8d105a6efe4056633f7129f80aac1f13cc246 Mon Sep 17 00:00:00 2001
From: Francisco Jerez <currojerez@riseup.net>
Date: Thu, 25 Feb 2010 02:15:54 +0100
Subject: dri/nouveau: Support rectangle textures.

---
 src/mesa/drivers/dri/nouveau/nouveau_texture.c | 21 +++++++------
 src/mesa/drivers/dri/nouveau/nv10_context.c    |  7 +++++
 src/mesa/drivers/dri/nouveau/nv10_state_tex.c  | 37 +++++++++++++++++++++--
 src/mesa/drivers/dri/nouveau/nv20_context.c    |  7 +++++
 src/mesa/drivers/dri/nouveau/nv20_state_tex.c  | 42 ++++++++++++++++++++++++--
 5 files changed, 100 insertions(+), 14 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_texture.c b/src/mesa/drivers/dri/nouveau/nouveau_texture.c
index 5b78804295..840bd6fe83 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_texture.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_texture.c
@@ -118,9 +118,6 @@ nouveau_choose_tex_format(GLcontext *ctx, GLint internalFormat,
 		return MESA_FORMAT_ARGB8888;
 	case GL_RGB5_A1:
 		return MESA_FORMAT_ARGB1555;
-	case GL_RGBA2:
-	case GL_RGBA4:
-		return MESA_FORMAT_ARGB4444;
 
 	case 3:
 	case GL_R3_G3_B2:
@@ -180,9 +177,10 @@ teximage_fits(struct gl_texture_object *t, int level,
 {
 	struct nouveau_surface *s = &to_nouveau_texture(t)->surfaces[level];
 
-	return s->bo && s->width == ti->Width &&
-		s->height == ti->Height &&
-		s->format == ti->TexFormat;
+	return t->Target == GL_TEXTURE_RECTANGLE ||
+		(s->bo && s->width == ti->Width &&
+		 s->height == ti->Height &&
+		 s->format == ti->TexFormat);
 }
 
 static GLboolean
@@ -196,9 +194,12 @@ validate_teximage(GLcontext *ctx, struct gl_texture_object *t,
 		struct nouveau_surface *ss = to_nouveau_texture(t)->surfaces;
 		struct nouveau_surface *s = &to_nouveau_teximage(ti)->surface;
 
-		context_drv(ctx)->surface_copy(ctx, &ss[level], s,
-					       x, y, x, y,
-					       width, height);
+		if (t->Target == GL_TEXTURE_RECTANGLE)
+			nouveau_surface_ref(s, &ss[level]);
+		else
+			context_drv(ctx)->surface_copy(ctx, &ss[level], s,
+						       x, y, x, y,
+						       width, height);
 
 		return GL_TRUE;
 	}
@@ -223,7 +224,7 @@ relayout_texture(GLcontext *ctx, struct gl_texture_object *t)
 {
 	struct gl_texture_image *base = t->Image[0][t->BaseLevel];
 
-	if (base) {
+	if (base && t->Target != GL_TEXTURE_RECTANGLE) {
 		struct nouveau_surface *ss = to_nouveau_texture(t)->surfaces;
 		struct nouveau_surface *s = &to_nouveau_teximage(base)->surface;
 		int i, ret, last = get_last_level(t);
diff --git a/src/mesa/drivers/dri/nouveau/nv10_context.c b/src/mesa/drivers/dri/nouveau/nv10_context.c
index d80d99caa8..8e70c419ed 100644
--- a/src/mesa/drivers/dri/nouveau/nv10_context.c
+++ b/src/mesa/drivers/dri/nouveau/nv10_context.c
@@ -32,6 +32,11 @@
 #include "nv04_driver.h"
 #include "nv10_driver.h"
 
+static const struct dri_extension nv10_extensions[] = {
+	{ "GL_EXT_texture_rectangle",	NULL },
+	{ NULL,				NULL }
+};
+
 static void
 nv10_clear(GLcontext *ctx, GLbitfield buffers)
 {
@@ -301,6 +306,8 @@ nv10_context_create(struct nouveau_screen *screen, const GLvisual *visual,
 	if (!nouveau_context_init(ctx, screen, visual, share_ctx))
 		goto fail;
 
+	driInitExtensions(ctx, nv10_extensions, GL_FALSE);
+
 	/* GL constants. */
 	ctx->Const.MaxTextureLevels = 12;
 	ctx->Const.MaxTextureCoordUnits = NV10_TEXTURE_UNITS;
diff --git a/src/mesa/drivers/dri/nouveau/nv10_state_tex.c b/src/mesa/drivers/dri/nouveau/nv10_state_tex.c
index d732a5335b..f45f6c949e 100644
--- a/src/mesa/drivers/dri/nouveau/nv10_state_tex.c
+++ b/src/mesa/drivers/dri/nouveau/nv10_state_tex.c
@@ -38,7 +38,7 @@ nv10_emit_tex_gen(GLcontext *ctx, int emit)
 }
 
 static uint32_t
-get_tex_format(struct gl_texture_image *ti)
+get_tex_format_pot(struct gl_texture_image *ti)
 {
 	switch (ti->TexFormat) {
 	case MESA_FORMAT_ARGB8888:
@@ -67,6 +67,29 @@ get_tex_format(struct gl_texture_image *ti)
 	}
 }
 
+static uint32_t
+get_tex_format_rect(struct gl_texture_image *ti)
+{
+	switch (ti->TexFormat) {
+	case MESA_FORMAT_ARGB1555:
+		return NV10TCL_TX_FORMAT_FORMAT_A1R5G5B5_RECT;
+
+	case MESA_FORMAT_RGB565:
+		return NV10TCL_TX_FORMAT_FORMAT_R5G6B5_RECT;
+
+	case MESA_FORMAT_ARGB8888:
+		return NV10TCL_TX_FORMAT_FORMAT_A8R8G8B8_RECT;
+
+	case MESA_FORMAT_A8:
+	case MESA_FORMAT_L8:
+	case MESA_FORMAT_I8:
+		return NV10TCL_TX_FORMAT_FORMAT_A8_RECT;
+
+	default:
+		assert(0);
+	}
+}
+
 void
 nv10_emit_tex_obj(GLcontext *ctx, int emit)
 {
@@ -98,7 +121,6 @@ nv10_emit_tex_obj(GLcontext *ctx, int emit)
 		| nvgl_wrap_mode(t->WrapS) << 24
 		| ti->HeightLog2 << 20
 		| ti->WidthLog2 << 16
-		| get_tex_format(ti)
 		| 5 << 4 | 1 << 12;
 
 	tx_filter = nvgl_filter_mode(t->MagFilter) << 28
@@ -107,6 +129,17 @@ nv10_emit_tex_obj(GLcontext *ctx, int emit)
 	tx_enable = NV10TCL_TX_ENABLE_ENABLE
 		| log2i(t->MaxAnisotropy) << 4;
 
+	if (t->Target == GL_TEXTURE_RECTANGLE) {
+		BEGIN_RING(chan, celsius, NV10TCL_TX_NPOT_PITCH(i), 1);
+		OUT_RING(chan, s->pitch << 16);
+		BEGIN_RING(chan, celsius, NV10TCL_TX_NPOT_SIZE(i), 1);
+		OUT_RING(chan, align(s->width, 2) << 16 | s->height);
+
+		tx_format |= get_tex_format_rect(ti);
+	} else {
+		tx_format |= get_tex_format_pot(ti);
+	}
+
 	if (t->MinFilter != GL_NEAREST &&
 	    t->MinFilter != GL_LINEAR) {
 		int lod_min = t->MinLod;
diff --git a/src/mesa/drivers/dri/nouveau/nv20_context.c b/src/mesa/drivers/dri/nouveau/nv20_context.c
index a80062f5f1..635b5c0996 100644
--- a/src/mesa/drivers/dri/nouveau/nv20_context.c
+++ b/src/mesa/drivers/dri/nouveau/nv20_context.c
@@ -31,6 +31,11 @@
 #include "nv10_driver.h"
 #include "nv20_driver.h"
 
+static const struct dri_extension nv20_extensions[] = {
+	{ "GL_EXT_texture_rectangle",	NULL },
+	{ NULL,				NULL }
+};
+
 static void
 nv20_hwctx_init(GLcontext *ctx)
 {
@@ -394,6 +399,8 @@ nv20_context_create(struct nouveau_screen *screen, const GLvisual *visual,
 	if (!nouveau_context_init(ctx, screen, visual, share_ctx))
 		goto fail;
 
+	driInitExtensions(ctx, nv20_extensions, GL_FALSE);
+
 	/* GL constants. */
 	ctx->Const.MaxTextureCoordUnits = NV20_TEXTURE_UNITS;
 	ctx->Const.MaxTextureImageUnits = NV20_TEXTURE_UNITS;
diff --git a/src/mesa/drivers/dri/nouveau/nv20_state_tex.c b/src/mesa/drivers/dri/nouveau/nv20_state_tex.c
index 2bf760d3b0..4627799809 100644
--- a/src/mesa/drivers/dri/nouveau/nv20_state_tex.c
+++ b/src/mesa/drivers/dri/nouveau/nv20_state_tex.c
@@ -33,7 +33,7 @@
 #include "nv20_driver.h"
 
 static uint32_t
-get_tex_format(struct gl_texture_image *ti)
+get_tex_format_pot(struct gl_texture_image *ti)
 {
 	switch (ti->TexFormat) {
 	case MESA_FORMAT_ARGB8888:
@@ -62,6 +62,34 @@ get_tex_format(struct gl_texture_image *ti)
 	}
 }
 
+static uint32_t
+get_tex_format_rect(struct gl_texture_image *ti)
+{
+	switch (ti->TexFormat) {
+	case MESA_FORMAT_ARGB1555:
+		return NV20TCL_TX_FORMAT_FORMAT_A1R5G5B5_RECT;
+
+	case MESA_FORMAT_RGB565:
+		return NV20TCL_TX_FORMAT_FORMAT_R5G6B5_RECT;
+
+	case MESA_FORMAT_ARGB8888:
+		return NV20TCL_TX_FORMAT_FORMAT_A8R8G8B8_RECT;
+
+	case MESA_FORMAT_L8:
+		return NV20TCL_TX_FORMAT_FORMAT_L8_RECT;
+
+	case MESA_FORMAT_A8:
+	case MESA_FORMAT_I8:
+		return NV20TCL_TX_FORMAT_FORMAT_A8_RECT;
+
+	case MESA_FORMAT_ARGB4444:
+		return NV20TCL_TX_FORMAT_FORMAT_A4R4G4B4_RECT;
+
+	default:
+		assert(0);
+	}
+}
+
 void
 nv20_emit_tex_obj(GLcontext *ctx, int emit)
 {
@@ -94,7 +122,6 @@ nv20_emit_tex_obj(GLcontext *ctx, int emit)
 	tx_format = ti->DepthLog2 << 28
 		| ti->HeightLog2 << 24
 		| ti->WidthLog2 << 20
-		| get_tex_format(ti)
 		| NV20TCL_TX_FORMAT_DIMS_2D
 		| NV20TCL_TX_FORMAT_NO_BORDER
 		| 1 << 16;
@@ -109,6 +136,17 @@ nv20_emit_tex_obj(GLcontext *ctx, int emit)
 	tx_enable = NV20TCL_TX_ENABLE_ENABLE
 		| log2i(t->MaxAnisotropy) << 4;
 
+	if (t->Target == GL_TEXTURE_RECTANGLE) {
+		BEGIN_RING(chan, kelvin, NV20TCL_TX_NPOT_PITCH(i), 1);
+		OUT_RING(chan, s->pitch << 16);
+		BEGIN_RING(chan, kelvin, NV20TCL_TX_NPOT_SIZE(i), 1);
+		OUT_RING(chan, s->width << 16 | s->height);
+
+		tx_format |= get_tex_format_rect(ti);
+	} else {
+		tx_format |= get_tex_format_pot(ti);
+	}
+
 	if (t->MinFilter != GL_NEAREST &&
 	    t->MinFilter != GL_LINEAR) {
 		int lod_min = t->MinLod;
-- 
cgit v1.2.3


From 4a7e9b5df453055ed6eedce1ea5c1d4a2f810fa7 Mon Sep 17 00:00:00 2001
From: Francisco Jerez <currojerez@riseup.net>
Date: Sun, 21 Feb 2010 14:23:40 +0100
Subject: dri/nouveau: Implement EXT_texture_from_pixmap.

---
 src/mesa/drivers/dri/nouveau/nouveau_context.c | 91 +++++++++++++-------------
 src/mesa/drivers/dri/nouveau/nouveau_context.h | 13 ++--
 src/mesa/drivers/dri/nouveau/nouveau_driver.c  |  2 -
 src/mesa/drivers/dri/nouveau/nouveau_fbo.c     |  1 -
 src/mesa/drivers/dri/nouveau/nouveau_screen.c  |  8 +++
 src/mesa/drivers/dri/nouveau/nouveau_texture.c | 53 +++++++++++++++
 src/mesa/drivers/dri/nouveau/nouveau_texture.h |  5 ++
 7 files changed, 116 insertions(+), 57 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_context.c b/src/mesa/drivers/dri/nouveau/nouveau_context.c
index b1b0e81643..2629733273 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_context.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_context.c
@@ -168,19 +168,19 @@ nouveau_context_destroy(__DRIcontext *dri_ctx)
 	context_drv(ctx)->context_destroy(ctx);
 }
 
-static void
-nouveau_update_renderbuffers(__DRIcontext *context, __DRIdrawable *drawable,
-			     unsigned int *stamp)
+void
+nouveau_update_renderbuffers(__DRIcontext *dri_ctx, __DRIdrawable *draw)
 {
-	struct nouveau_context *nctx = context->driverPrivate;
-	GLcontext *ctx = &nctx->base;
-	__DRIscreen *screen = context->driScreenPriv;
-	struct gl_framebuffer *fb = drawable->driverPrivate;
+	GLcontext *ctx = dri_ctx->driverPrivate;
+	__DRIscreen *screen = dri_ctx->driScreenPriv;
+	struct gl_framebuffer *fb = draw->driverPrivate;
 	unsigned int attachments[10];
 	__DRIbuffer *buffers = NULL;
 	int i = 0, count, ret;
 
-	*stamp = *drawable->pStamp;
+	if (draw->lastStamp == *draw->pStamp)
+		return;
+	draw->lastStamp = *draw->pStamp;
 
 	attachments[i++] = __DRI_BUFFER_FRONT_LEFT;
 	if (fb->Visual.doubleBufferMode)
@@ -192,10 +192,9 @@ nouveau_update_renderbuffers(__DRIcontext *context, __DRIdrawable *drawable,
 	else if (fb->Visual.haveStencilBuffer)
 		attachments[i++] = __DRI_BUFFER_STENCIL;
 
-	buffers = (*screen->dri2.loader->getBuffers)(drawable,
-						     &drawable->w, &drawable->h,
+	buffers = (*screen->dri2.loader->getBuffers)(draw, &draw->w, &draw->h,
 						     attachments, i, &count,
-						     drawable->loaderPrivate);
+						     draw->loaderPrivate);
 	if (buffers == NULL)
 		return;
 
@@ -227,8 +226,8 @@ nouveau_update_renderbuffers(__DRIcontext *context, __DRIdrawable *drawable,
 		rb = fb->Attachment[index].Renderbuffer;
 		s = &to_nouveau_renderbuffer(rb)->surface;
 
-		s->width = drawable->w;
-		s->height = drawable->h;
+		s->width = draw->w;
+		s->height = draw->h;
 		s->pitch = buffers[i].pitch;
 		s->cpp = buffers[i].cpp;
 
@@ -244,12 +243,25 @@ nouveau_update_renderbuffers(__DRIcontext *context, __DRIdrawable *drawable,
 			ret = nouveau_bo_handle_ref(context_dev(ctx),
 						    buffers[i].name, &s->bo);
 			assert(!ret);
-
-			context_dirty(ctx, FRAMEBUFFER);
 		}
 	}
 
-	_mesa_resize_framebuffer(ctx, fb, drawable->w, drawable->h);
+	_mesa_resize_framebuffer(NULL, fb, draw->w, draw->h);
+}
+
+static void
+update_framebuffer(__DRIcontext *dri_ctx, __DRIdrawable *draw,
+		   int *stamp)
+{
+	GLcontext *ctx = dri_ctx->driverPrivate;
+	struct gl_framebuffer *fb = draw->driverPrivate;
+
+	*stamp = *draw->pStamp;
+
+	nouveau_update_renderbuffers(dri_ctx, draw);
+	_mesa_resize_framebuffer(ctx, fb, draw->w, draw->h);
+
+	context_dirty(ctx, FRAMEBUFFER);
 }
 
 GLboolean
@@ -260,16 +272,15 @@ nouveau_context_make_current(__DRIcontext *dri_ctx, __DRIdrawable *dri_draw,
 		struct nouveau_context *nctx = dri_ctx->driverPrivate;
 		GLcontext *ctx = &nctx->base;
 
-		if (dri_draw->driverPrivate == ctx->WinSysDrawBuffer &&
-		    dri_read->driverPrivate == ctx->WinSysReadBuffer)
-			return GL_TRUE;
-
 		/* Ask the X server for new renderbuffers. */
-		nouveau_update_renderbuffers(dri_ctx, dri_draw,
-					     &nctx->drawable.d_stamp);
-		if (dri_draw != dri_read)
-			nouveau_update_renderbuffers(dri_ctx, dri_read,
-						     &nctx->drawable.r_stamp);
+		if (dri_draw->driverPrivate != ctx->WinSysDrawBuffer)
+			update_framebuffer(dri_ctx, dri_draw,
+					   &dri_ctx->dri2.draw_stamp);
+
+		if (dri_draw != dri_read &&
+		    dri_read->driverPrivate != ctx->WinSysReadBuffer)
+			update_framebuffer(dri_ctx, dri_read,
+					   &dri_ctx->dri2.read_stamp);
 
 		/* Pass it down to mesa. */
 		_mesa_make_current(ctx, dri_draw->driverPrivate,
@@ -307,30 +318,20 @@ nouveau_fallback(GLcontext *ctx, enum nouveau_fallback mode)
 void
 nouveau_validate_framebuffer(GLcontext *ctx)
 {
-	struct nouveau_context *nctx = to_nouveau_context(ctx);
 	__DRIcontext *dri_ctx = to_nouveau_context(ctx)->dri_context;
 	__DRIdrawable *dri_draw = dri_ctx->driDrawablePriv;
 	__DRIdrawable *dri_read = dri_ctx->driReadablePriv;
 
-	if ((ctx->DrawBuffer->Name == 0 &&
-	     nctx->drawable.d_stamp != *dri_draw->pStamp) ||
-	    (dri_draw != dri_read &&
-	     ctx->ReadBuffer->Name == 0 &&
-	     nctx->drawable.r_stamp != *dri_read->pStamp)) {
-		if (nctx->drawable.dirty)
-			ctx->Driver.Flush(ctx);
+	if (ctx->DrawBuffer->Name == 0 &&
+	    dri_ctx->dri2.draw_stamp != *dri_draw->pStamp)
+		update_framebuffer(dri_ctx, dri_draw,
+				   &dri_ctx->dri2.draw_stamp);
 
-		/* Ask the X server for new renderbuffers. */
-		nouveau_update_renderbuffers(dri_ctx, dri_draw,
-					     &nctx->drawable.d_stamp);
-		if (dri_draw != dri_read)
-			nouveau_update_renderbuffers(dri_ctx, dri_read,
-						     &nctx->drawable.r_stamp);
-
-		if (nouveau_next_dirty_state(ctx) >= 0)
-			FIRE_RING(context_chan(ctx));
-	}
+	if (ctx->ReadBuffer->Name == 0 && dri_draw != dri_read &&
+	    dri_ctx->dri2.read_stamp != *dri_read->pStamp)
+		update_framebuffer(dri_ctx, dri_read,
+				   &dri_ctx->dri2.read_stamp);
 
-	/* Someone's planning to draw something really soon. */
-	nctx->drawable.dirty = GL_TRUE;
+	if (nouveau_next_dirty_state(ctx) >= 0)
+		FIRE_RING(context_chan(ctx));
 }
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_context.h b/src/mesa/drivers/dri/nouveau/nouveau_context.h
index efe3e5148b..682f8a414e 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_context.h
+++ b/src/mesa/drivers/dri/nouveau/nouveau_context.h
@@ -56,12 +56,6 @@ struct nouveau_hw_state {
 	struct nouveau_grobj *sifm;
 };
 
-struct nouveau_drawable_state {
-	GLboolean dirty;
-	unsigned int d_stamp;
-	unsigned int r_stamp;
-};
-
 struct nouveau_context {
 	GLcontext base;
 	__DRIcontext *dri_context;
@@ -73,7 +67,6 @@ struct nouveau_context {
 	struct nouveau_hw_state hw;
 	struct nouveau_bo_state bo;
 	struct nouveau_render_state render;
-	struct nouveau_drawable_state drawable;
 };
 
 #define to_nouveau_context(ctx)	((struct nouveau_context *)(ctx))
@@ -107,9 +100,11 @@ nouveau_context_deinit(GLcontext *ctx);
 void
 nouveau_context_destroy(__DRIcontext *dri_ctx);
 
+void
+nouveau_update_renderbuffers(__DRIcontext *dri_ctx, __DRIdrawable *draw);
+
 GLboolean
-nouveau_context_make_current(__DRIcontext *dri_ctx,
-			     __DRIdrawable *ddraw,
+nouveau_context_make_current(__DRIcontext *dri_ctx, __DRIdrawable *ddraw,
 			     __DRIdrawable *rdraw);
 
 GLboolean
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_driver.c b/src/mesa/drivers/dri/nouveau/nouveau_driver.c
index afaa8de5b3..1d12f43741 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_driver.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_driver.c
@@ -67,8 +67,6 @@ nouveau_flush(GLcontext *ctx)
 
 		dri2->flushFrontBuffer(drawable, drawable->loaderPrivate);
 	}
-
-	nctx->drawable.dirty = GL_FALSE;
 }
 
 static void
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_fbo.c b/src/mesa/drivers/dri/nouveau/nouveau_fbo.c
index c5fb0151b3..1db8c5dd8d 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_fbo.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_fbo.c
@@ -142,7 +142,6 @@ nouveau_renderbuffer_dri_storage(GLcontext *ctx, struct gl_renderbuffer *rb,
 	rb->Width = width;
 	rb->Height = height;
 
-	context_dirty(ctx, FRAMEBUFFER);
 	return GL_TRUE;
 }
 
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_screen.c b/src/mesa/drivers/dri/nouveau/nouveau_screen.c
index 71e57e17e6..18db12f626 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_screen.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_screen.c
@@ -27,6 +27,7 @@
 #include "nouveau_driver.h"
 #include "nouveau_context.h"
 #include "nouveau_fbo.h"
+#include "nouveau_texture.h"
 #include "nouveau_drmif.h"
 #include "nv04_driver.h"
 #include "nv10_driver.h"
@@ -226,8 +227,15 @@ static const struct __DRI2flushExtensionRec nouveau_flush_extension = {
     dri2InvalidateDrawable,
 };
 
+static const struct __DRItexBufferExtensionRec nouveau_texbuffer_extension = {
+    { __DRI_TEX_BUFFER, __DRI_TEX_BUFFER_VERSION },
+    NULL,
+    nouveau_set_texbuffer,
+};
+
 static const __DRIextension *nouveau_screen_extensions[] = {
     &nouveau_flush_extension.base,
+    &nouveau_texbuffer_extension.base,
     NULL
 };
 
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_texture.c b/src/mesa/drivers/dri/nouveau/nouveau_texture.c
index 840bd6fe83..c1b0ddae7b 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_texture.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_texture.c
@@ -27,6 +27,7 @@
 #include "nouveau_driver.h"
 #include "nouveau_context.h"
 #include "nouveau_texture.h"
+#include "nouveau_fbo.h"
 #include "nouveau_util.h"
 
 #include "main/texobj.h"
@@ -36,6 +37,7 @@
 #include "main/texgetimage.h"
 #include "main/mipmap.h"
 #include "main/texfetch.h"
+#include "main/teximage.h"
 
 static struct gl_texture_object *
 nouveau_texture_new(GLcontext *ctx, GLuint name, GLenum target)
@@ -489,6 +491,57 @@ nouveau_bind_texture(GLcontext *ctx, GLenum target,
 	context_dirty_i(ctx, TEX_ENV, ctx->Texture.CurrentUnit);
 }
 
+static gl_format
+get_texbuffer_format(struct gl_renderbuffer *rb, GLint format)
+{
+	struct nouveau_surface *s = &to_nouveau_renderbuffer(rb)->surface;
+
+	if (s->cpp < 4)
+		return s->format;
+	else if (format == __DRI_TEXTURE_FORMAT_RGBA)
+		return MESA_FORMAT_ARGB8888;
+	else
+		return MESA_FORMAT_XRGB8888;
+}
+
+void
+nouveau_set_texbuffer(__DRIcontext *dri_ctx,
+		      GLint target, GLint format,
+		      __DRIdrawable *draw)
+{
+	struct nouveau_context *nctx = dri_ctx->driverPrivate;
+	GLcontext *ctx = &nctx->base;
+	struct gl_framebuffer *fb = draw->driverPrivate;
+	struct gl_renderbuffer *rb =
+		fb->Attachment[BUFFER_FRONT_LEFT].Renderbuffer;
+	struct gl_texture_object *t = _mesa_get_current_tex_object(ctx, target);
+	struct gl_texture_image *ti;
+	struct nouveau_surface *s;
+
+	_mesa_lock_texture(ctx, t);
+	ti = _mesa_get_tex_image(ctx, t, target, 0);
+	s = &to_nouveau_teximage(ti)->surface;
+
+	/* Update the texture surface with the given drawable. */
+	nouveau_update_renderbuffers(dri_ctx, draw);
+	nouveau_surface_ref(&to_nouveau_renderbuffer(rb)->surface, s);
+
+	/* Update the image fields. */
+	_mesa_init_teximage_fields(ctx, target, ti, s->width, s->height,
+				   1, 0, s->cpp);
+	ti->RowStride = s->pitch / s->cpp;
+	ti->TexFormat = s->format = get_texbuffer_format(rb, format);
+
+	/* Try to validate it. */
+	if (!validate_teximage(ctx, t, 0, 0, 0, 0, s->width, s->height, 1))
+		nouveau_texture_reallocate(ctx, t);
+
+	context_dirty_i(ctx, TEX_OBJ, ctx->Texture.CurrentUnit);
+	context_dirty_i(ctx, TEX_ENV, ctx->Texture.CurrentUnit);
+
+	_mesa_unlock_texture(ctx, t);
+}
+
 static void
 nouveau_texture_map(GLcontext *ctx, struct gl_texture_object *t)
 {
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_texture.h b/src/mesa/drivers/dri/nouveau/nouveau_texture.h
index 75d8190e88..b91facbdeb 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_texture.h
+++ b/src/mesa/drivers/dri/nouveau/nouveau_texture.h
@@ -43,6 +43,11 @@ struct nouveau_texture {
 #define texture_dirty(t) \
 	to_nouveau_texture(t)->dirty = GL_TRUE;
 
+void
+nouveau_set_texbuffer(__DRIcontext *dri_ctx,
+		      GLint target, GLint format,
+		      __DRIdrawable *draw);
+
 GLboolean
 nouveau_texture_validate(GLcontext *ctx, struct gl_texture_object *t);
 
-- 
cgit v1.2.3


From 59ddf8ca635465dea1d455c384f5905b65dc6979 Mon Sep 17 00:00:00 2001
From: Francisco Jerez <currojerez@riseup.net>
Date: Tue, 23 Feb 2010 16:39:26 +0100
Subject: dri/nouveau: Use the hardware I8 format for intensity textures.

---
 src/mesa/drivers/dri/nouveau/nouveau_texture.c | 2 +-
 src/mesa/drivers/dri/nouveau/nv04_state_tex.c  | 1 +
 src/mesa/drivers/dri/nouveau/nv10_state_tex.c  | 1 +
 src/mesa/drivers/dri/nouveau/nv20_state_tex.c  | 1 +
 4 files changed, 4 insertions(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_texture.c b/src/mesa/drivers/dri/nouveau/nouveau_texture.c
index c1b0ddae7b..0947a2a95b 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_texture.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_texture.c
@@ -157,7 +157,7 @@ nouveau_choose_tex_format(GLcontext *ctx, GLint internalFormat,
 	case GL_INTENSITY12:
 	case GL_INTENSITY16:
 	case GL_INTENSITY8:
-		return MESA_FORMAT_ARGB8888;
+		return MESA_FORMAT_I8;
 
 	case GL_COLOR_INDEX:
 	case GL_COLOR_INDEX1_EXT:
diff --git a/src/mesa/drivers/dri/nouveau/nv04_state_tex.c b/src/mesa/drivers/dri/nouveau/nv04_state_tex.c
index 684a19e703..facd41cff6 100644
--- a/src/mesa/drivers/dri/nouveau/nv04_state_tex.c
+++ b/src/mesa/drivers/dri/nouveau/nv04_state_tex.c
@@ -38,6 +38,7 @@ get_tex_format(struct gl_texture_image *ti)
 	switch (ti->TexFormat) {
 	case MESA_FORMAT_A8:
 	case MESA_FORMAT_L8:
+	case MESA_FORMAT_I8:
 		return NV04_TEXTURED_TRIANGLE_FORMAT_COLOR_Y8;
 	case MESA_FORMAT_ARGB1555:
 		return NV04_TEXTURED_TRIANGLE_FORMAT_COLOR_A1R5G5B5;
diff --git a/src/mesa/drivers/dri/nouveau/nv10_state_tex.c b/src/mesa/drivers/dri/nouveau/nv10_state_tex.c
index f45f6c949e..7fe27317b2 100644
--- a/src/mesa/drivers/dri/nouveau/nv10_state_tex.c
+++ b/src/mesa/drivers/dri/nouveau/nv10_state_tex.c
@@ -54,6 +54,7 @@ get_tex_format_pot(struct gl_texture_image *ti)
 		return NV10TCL_TX_FORMAT_FORMAT_R5G6B5;
 
 	case MESA_FORMAT_A8:
+	case MESA_FORMAT_I8:
 		return NV10TCL_TX_FORMAT_FORMAT_A8;
 
 	case MESA_FORMAT_L8:
diff --git a/src/mesa/drivers/dri/nouveau/nv20_state_tex.c b/src/mesa/drivers/dri/nouveau/nv20_state_tex.c
index 4627799809..7a5914d9b7 100644
--- a/src/mesa/drivers/dri/nouveau/nv20_state_tex.c
+++ b/src/mesa/drivers/dri/nouveau/nv20_state_tex.c
@@ -49,6 +49,7 @@ get_tex_format_pot(struct gl_texture_image *ti)
 		return NV20TCL_TX_FORMAT_FORMAT_R5G6B5;
 
 	case MESA_FORMAT_A8:
+	case MESA_FORMAT_I8:
 		return NV20TCL_TX_FORMAT_FORMAT_A8;
 
 	case MESA_FORMAT_L8:
-- 
cgit v1.2.3


From 51e8a66fa197de7e17fb94d901a4cf26f0812670 Mon Sep 17 00:00:00 2001
From: Francisco Jerez <currojerez@riseup.net>
Date: Thu, 25 Feb 2010 01:55:13 +0100
Subject: dri/nouveau: Use the XRGB8888 hardware texture format.

---
 src/mesa/drivers/dri/nouveau/nouveau_texture.c | 45 ++++++++++++++------------
 src/mesa/drivers/dri/nouveau/nv04_state_tex.c  |  2 ++
 src/mesa/drivers/dri/nouveau/nv10_state_frag.c |  7 ++++
 src/mesa/drivers/dri/nouveau/nv10_state_tex.c  |  4 +++
 src/mesa/drivers/dri/nouveau/nv20_state_tex.c  | 18 +++++++----
 5 files changed, 49 insertions(+), 27 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_texture.c b/src/mesa/drivers/dri/nouveau/nouveau_texture.c
index 0947a2a95b..bf365bfca3 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_texture.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_texture.c
@@ -108,40 +108,28 @@ nouveau_choose_tex_format(GLcontext *ctx, GLint internalFormat,
 	switch (internalFormat) {
 	case 4:
 	case GL_RGBA:
-	case GL_RGB10_A2:
+	case GL_RGBA2:
+	case GL_RGBA4:
+	case GL_RGBA8:
 	case GL_RGBA12:
 	case GL_RGBA16:
-	case GL_RGBA8:
+	case GL_RGB10_A2:
+		return MESA_FORMAT_ARGB8888;
+	case GL_RGB5_A1:
+		return MESA_FORMAT_ARGB1555;
+
 	case GL_RGB:
 	case GL_RGB8:
 	case GL_RGB10:
 	case GL_RGB12:
 	case GL_RGB16:
-		return MESA_FORMAT_ARGB8888;
-	case GL_RGB5_A1:
-		return MESA_FORMAT_ARGB1555;
-
+		return MESA_FORMAT_XRGB8888;
 	case 3:
 	case GL_R3_G3_B2:
 	case GL_RGB4:
 	case GL_RGB5:
 		return MESA_FORMAT_RGB565;
 
-	case GL_ALPHA:
-	case GL_ALPHA4:
-	case GL_ALPHA12:
-	case GL_ALPHA16:
-	case GL_ALPHA8:
-		return MESA_FORMAT_A8;
-
-	case 1:
-	case GL_LUMINANCE:
-	case GL_LUMINANCE4:
-	case GL_LUMINANCE12:
-	case GL_LUMINANCE16:
-	case GL_LUMINANCE8:
-		return MESA_FORMAT_L8;
-
 	case 2:
 	case GL_LUMINANCE_ALPHA:
 	case GL_LUMINANCE4_ALPHA4:
@@ -152,6 +140,21 @@ nouveau_choose_tex_format(GLcontext *ctx, GLint internalFormat,
 	case GL_LUMINANCE8_ALPHA8:
 		return MESA_FORMAT_ARGB8888;
 
+	case 1:
+	case GL_LUMINANCE:
+	case GL_LUMINANCE4:
+	case GL_LUMINANCE12:
+	case GL_LUMINANCE16:
+	case GL_LUMINANCE8:
+		return MESA_FORMAT_L8;
+
+	case GL_ALPHA:
+	case GL_ALPHA4:
+	case GL_ALPHA12:
+	case GL_ALPHA16:
+	case GL_ALPHA8:
+		return MESA_FORMAT_A8;
+
 	case GL_INTENSITY:
 	case GL_INTENSITY4:
 	case GL_INTENSITY12:
diff --git a/src/mesa/drivers/dri/nouveau/nv04_state_tex.c b/src/mesa/drivers/dri/nouveau/nv04_state_tex.c
index facd41cff6..6d8762b7d1 100644
--- a/src/mesa/drivers/dri/nouveau/nv04_state_tex.c
+++ b/src/mesa/drivers/dri/nouveau/nv04_state_tex.c
@@ -48,6 +48,8 @@ get_tex_format(struct gl_texture_image *ti)
 		return NV04_TEXTURED_TRIANGLE_FORMAT_COLOR_R5G6B5;
 	case MESA_FORMAT_ARGB8888:
 		return NV04_TEXTURED_TRIANGLE_FORMAT_COLOR_A8R8G8B8;
+	case MESA_FORMAT_XRGB8888:
+		return NV04_TEXTURED_TRIANGLE_FORMAT_COLOR_X8R8G8B8;
 	default:
 		assert(0);
 	}
diff --git a/src/mesa/drivers/dri/nouveau/nv10_state_frag.c b/src/mesa/drivers/dri/nouveau/nv10_state_frag.c
index b56b4ff02c..76b95fdd51 100644
--- a/src/mesa/drivers/dri/nouveau/nv10_state_frag.c
+++ b/src/mesa/drivers/dri/nouveau/nv10_state_frag.c
@@ -179,6 +179,13 @@ get_input_arg(struct combiner_state *rc, int arg, int flags)
 				return RC_IN_SOURCE(ZERO) |
 					get_input_mapping(rc, operand,
 							  flags ^ INVERT);
+
+		} else if (format == MESA_FORMAT_XRGB8888) {
+			/* Sometimes emulated using ARGB8888. */
+			if (!is_color_operand(operand))
+				return RC_IN_SOURCE(ZERO) |
+					get_input_mapping(rc, operand,
+							  flags ^ INVERT);
 		}
 	}
 
diff --git a/src/mesa/drivers/dri/nouveau/nv10_state_tex.c b/src/mesa/drivers/dri/nouveau/nv10_state_tex.c
index 7fe27317b2..02a5ca797a 100644
--- a/src/mesa/drivers/dri/nouveau/nv10_state_tex.c
+++ b/src/mesa/drivers/dri/nouveau/nv10_state_tex.c
@@ -44,6 +44,9 @@ get_tex_format_pot(struct gl_texture_image *ti)
 	case MESA_FORMAT_ARGB8888:
 		return NV10TCL_TX_FORMAT_FORMAT_A8R8G8B8;
 
+	case MESA_FORMAT_XRGB8888:
+		return NV10TCL_TX_FORMAT_FORMAT_X8R8G8B8;
+
 	case MESA_FORMAT_ARGB1555:
 		return NV10TCL_TX_FORMAT_FORMAT_A1R5G5B5;
 
@@ -79,6 +82,7 @@ get_tex_format_rect(struct gl_texture_image *ti)
 		return NV10TCL_TX_FORMAT_FORMAT_R5G6B5_RECT;
 
 	case MESA_FORMAT_ARGB8888:
+	case MESA_FORMAT_XRGB8888:
 		return NV10TCL_TX_FORMAT_FORMAT_A8R8G8B8_RECT;
 
 	case MESA_FORMAT_A8:
diff --git a/src/mesa/drivers/dri/nouveau/nv20_state_tex.c b/src/mesa/drivers/dri/nouveau/nv20_state_tex.c
index 7a5914d9b7..92870105f9 100644
--- a/src/mesa/drivers/dri/nouveau/nv20_state_tex.c
+++ b/src/mesa/drivers/dri/nouveau/nv20_state_tex.c
@@ -45,6 +45,9 @@ get_tex_format_pot(struct gl_texture_image *ti)
 	case MESA_FORMAT_ARGB4444:
 		return NV20TCL_TX_FORMAT_FORMAT_A4R4G4B4;
 
+	case MESA_FORMAT_XRGB8888:
+		return NV20TCL_TX_FORMAT_FORMAT_X8R8G8B8;
+
 	case MESA_FORMAT_RGB565:
 		return NV20TCL_TX_FORMAT_FORMAT_R5G6B5;
 
@@ -67,15 +70,21 @@ static uint32_t
 get_tex_format_rect(struct gl_texture_image *ti)
 {
 	switch (ti->TexFormat) {
+	case MESA_FORMAT_ARGB8888:
+		return NV20TCL_TX_FORMAT_FORMAT_A8R8G8B8_RECT;
+
 	case MESA_FORMAT_ARGB1555:
 		return NV20TCL_TX_FORMAT_FORMAT_A1R5G5B5_RECT;
 
+	case MESA_FORMAT_ARGB4444:
+		return NV20TCL_TX_FORMAT_FORMAT_A4R4G4B4_RECT;
+
+	case MESA_FORMAT_XRGB8888:
+		return NV20TCL_TX_FORMAT_FORMAT_R8G8B8_RECT;
+
 	case MESA_FORMAT_RGB565:
 		return NV20TCL_TX_FORMAT_FORMAT_R5G6B5_RECT;
 
-	case MESA_FORMAT_ARGB8888:
-		return NV20TCL_TX_FORMAT_FORMAT_A8R8G8B8_RECT;
-
 	case MESA_FORMAT_L8:
 		return NV20TCL_TX_FORMAT_FORMAT_L8_RECT;
 
@@ -83,9 +92,6 @@ get_tex_format_rect(struct gl_texture_image *ti)
 	case MESA_FORMAT_I8:
 		return NV20TCL_TX_FORMAT_FORMAT_A8_RECT;
 
-	case MESA_FORMAT_ARGB4444:
-		return NV20TCL_TX_FORMAT_FORMAT_A4R4G4B4_RECT;
-
 	default:
 		assert(0);
 	}
-- 
cgit v1.2.3


From 554a8f4026459406e7d3ed4e7017a88a57492ddf Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Tue, 3 Nov 2009 11:28:47 -0800
Subject: intel: Start adding defines and some bits for sandybridge bringup.

---
 src/mesa/drivers/dri/i965/brw_draw.c         |  4 ++
 src/mesa/drivers/dri/i965/brw_state_upload.c | 96 ++++++++++++++++++++++++++--
 src/mesa/drivers/dri/intel/intel_blit.c      | 14 ++++
 src/mesa/drivers/dri/intel/intel_chipset.h   | 14 +++-
 src/mesa/drivers/dri/intel/intel_clear.c     |  6 ++
 src/mesa/drivers/dri/intel/intel_context.c   |  4 +-
 6 files changed, 130 insertions(+), 8 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_draw.c b/src/mesa/drivers/dri/i965/brw_draw.c
index e348d4686b..106cd31632 100644
--- a/src/mesa/drivers/dri/i965/brw_draw.c
+++ b/src/mesa/drivers/dri/i965/brw_draw.c
@@ -124,6 +124,10 @@ static void brw_emit_prim(struct brw_context *brw,
    struct brw_3d_primitive prim_packet;
    struct intel_context *intel = &brw->intel;
 
+   /* Last thing to hook up in the pipeline when brw_state_upload.c is done. */
+   if (IS_GEN6(intel->intelScreen->deviceID))
+      return;
+
    if (INTEL_DEBUG & DEBUG_PRIMS)
       printf("PRIM: %s %d %d\n", _mesa_lookup_enum_by_nr(prim->mode), 
 		   prim->start, prim->count);
diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c b/src/mesa/drivers/dri/i965/brw_state_upload.c
index 4f477cfc6b..1ee4f4ab80 100644
--- a/src/mesa/drivers/dri/i965/brw_state_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_state_upload.c
@@ -35,8 +35,15 @@
 #include "brw_state.h"
 #include "intel_batchbuffer.h"
 #include "intel_buffers.h"
+#include "intel_chipset.h"
 
-static const struct brw_tracked_state *atoms[] =
+/* This is used to initialize brw->state.atoms[].  We could use this
+ * list directly except for a single atom, brw_constant_buffer, which
+ * has a .dirty value which changes according to the parameters of the
+ * current fragment and vertex programs, and so cannot be a static
+ * value.
+ */
+static const struct brw_tracked_state *gen4_atoms[] =
 {
    &brw_check_fallback,
 
@@ -95,6 +102,66 @@ static const struct brw_tracked_state *atoms[] =
    &brw_constant_buffer
 };
 
+const struct brw_tracked_state *gen6_atoms[] =
+{
+   &brw_check_fallback,
+
+#if 0
+   &brw_wm_input_sizes,
+   &brw_vs_prog,
+   &brw_gs_prog,
+   &brw_clip_prog,
+   &brw_sf_prog,
+   &brw_wm_prog,
+
+   /* Once all the programs are done, we know how large urb entry
+    * sizes need to be and can decide if we need to change the urb
+    * layout.
+    */
+   &brw_curbe_offsets,
+   &brw_recalculate_urb_fence,
+
+   &brw_cc_vp,
+   &brw_cc_unit,
+
+   &brw_vs_surfaces,		/* must do before unit */
+   &brw_wm_constant_surface,	/* must do before wm surfaces/bind bo */
+   &brw_wm_surfaces,		/* must do before samplers and unit */
+   &brw_wm_samplers,
+
+   &brw_wm_unit,
+   &brw_sf_vp,
+   &brw_sf_unit,
+   &brw_vs_unit,		/* always required, enabled or not */
+   &brw_clip_unit,
+   &brw_gs_unit,
+
+   /* Command packets:
+    */
+   &brw_invarient_state,
+   &brw_state_base_address,
+
+   &brw_binding_table_pointers,
+   &brw_blend_constant_color,
+
+   &brw_depthbuffer,
+
+   &brw_polygon_stipple,
+   &brw_polygon_stipple_offset,
+
+   &brw_line_stipple,
+   &brw_aa_line_parameters,
+
+   &brw_psp_urb_cbs,
+
+   &brw_drawing_rect,
+   &brw_indices,
+   &brw_index_buffer,
+   &brw_vertices,
+
+   &brw_constant_buffer
+#endif
+};
 
 void brw_init_state( struct brw_context *brw )
 {
@@ -270,6 +337,8 @@ void brw_validate_state( struct brw_context *brw )
    struct intel_context *intel = &brw->intel;
    struct brw_state_flags *state = &brw->state.dirty;
    GLuint i;
+   const struct brw_tracked_state **atoms;
+   int num_atoms;
 
    brw_clear_validated_bos(brw);
 
@@ -278,6 +347,14 @@ void brw_validate_state( struct brw_context *brw )
 
    brw_add_validated_bo(brw, intel->batch->buf);
 
+   if (IS_GEN6(intel->intelScreen->deviceID)) {
+      atoms = gen6_atoms;
+      num_atoms = ARRAY_SIZE(gen6_atoms);
+   } else {
+      atoms = gen4_atoms;
+      num_atoms = ARRAY_SIZE(gen4_atoms);
+   }
+
    if (brw->emit_state_always) {
       state->mesa |= ~0;
       state->brw |= ~0;
@@ -305,7 +382,7 @@ void brw_validate_state( struct brw_context *brw )
    brw->intel.Fallback = GL_FALSE; /* boolean, not bitfield */
 
    /* do prepare stage for all atoms */
-   for (i = 0; i < Elements(atoms); i++) {
+   for (i = 0; i < num_atoms; i++) {
       const struct brw_tracked_state *atom = atoms[i];
 
       if (brw->intel.Fallback)
@@ -337,9 +414,20 @@ void brw_validate_state( struct brw_context *brw )
 
 void brw_upload_state(struct brw_context *brw)
 {
+   struct intel_context *intel = &brw->intel;
    struct brw_state_flags *state = &brw->state.dirty;
    int i;
    static int dirty_count = 0;
+   const struct brw_tracked_state **atoms;
+   int num_atoms;
+
+   if (IS_GEN6(intel->intelScreen->deviceID)) {
+      atoms = gen6_atoms;
+      num_atoms = ARRAY_SIZE(gen6_atoms);
+   } else {
+      atoms = gen4_atoms;
+      num_atoms = ARRAY_SIZE(gen4_atoms);
+   }
 
    brw_clear_validated_bos(brw);
 
@@ -352,7 +440,7 @@ void brw_upload_state(struct brw_context *brw)
       memset(&examined, 0, sizeof(examined));
       prev = *state;
 
-      for (i = 0; i < Elements(atoms); i++) {	 
+      for (i = 0; i < num_atoms; i++) {
 	 const struct brw_tracked_state *atom = atoms[i];
 	 struct brw_state_flags generated;
 
@@ -381,7 +469,7 @@ void brw_upload_state(struct brw_context *brw)
       }
    }
    else {
-      for (i = 0; i < Elements(atoms); i++) {	 
+      for (i = 0; i < num_atoms; i++) {
 	 const struct brw_tracked_state *atom = atoms[i];
 
 	 if (brw->intel.Fallback)
diff --git a/src/mesa/drivers/dri/intel/intel_blit.c b/src/mesa/drivers/dri/intel/intel_blit.c
index 5a60a17500..196a64a47a 100644
--- a/src/mesa/drivers/dri/intel/intel_blit.c
+++ b/src/mesa/drivers/dri/intel/intel_blit.c
@@ -89,6 +89,10 @@ intelEmitCopyBlit(struct intel_context *intel,
    dri_bo *aper_array[3];
    BATCH_LOCALS;
 
+   /* Blits are in a different ringbuffer so we don't use them. */
+   if (intel->gen >= 6)
+      return GL_FALSE;
+
    if (dst_tiling != I915_TILING_NONE) {
       if (dst_offset & 4095)
 	 return GL_FALSE;
@@ -218,6 +222,9 @@ intelClearWithBlit(GLcontext *ctx, GLbitfield mask)
    GLint cx, cy, cw, ch;
    BATCH_LOCALS;
 
+   /* Blits are in a different ringbuffer so we don't use them. */
+   assert(intel->gen < 6);
+
    /*
     * Compute values for clearing the buffers.
     */
@@ -388,6 +395,10 @@ intelEmitImmediateColorExpandBlit(struct intel_context *intel,
    int dwords = ALIGN(src_size, 8) / 4;
    uint32_t opcode, br13, blit_cmd;
 
+   /* Blits are in a different ringbuffer so we don't use them. */
+   if (intel->gen >= 6)
+      return GL_FALSE;
+
    if (dst_tiling != I915_TILING_NONE) {
       if (dst_offset & 4095)
 	 return GL_FALSE;
@@ -473,6 +484,9 @@ intel_emit_linear_blit(struct intel_context *intel,
 {
    GLuint pitch, height;
 
+   /* Blits are in a different ringbuffer so we don't use them. */
+   assert(intel->gen < 6);
+
    /* The pitch is a signed value. */
    pitch = MIN2(size, (1 << 15) - 1);
    height = size / pitch;
diff --git a/src/mesa/drivers/dri/intel/intel_chipset.h b/src/mesa/drivers/dri/intel/intel_chipset.h
index 3dc8653a73..a0b2266925 100644
--- a/src/mesa/drivers/dri/intel/intel_chipset.h
+++ b/src/mesa/drivers/dri/intel/intel_chipset.h
@@ -1,4 +1,4 @@
-/*
+ /*
  * Copyright © 2007 Intel Corporation
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
@@ -71,6 +71,8 @@
 #define PCI_CHIP_ILD_G                  0x0042
 #define PCI_CHIP_ILM_G                  0x0046
 
+#define PCI_CHIP_SANDYBRIDGE		0x0102
+
 #define IS_MOBILE(devid)	(devid == PCI_CHIP_I855_GM || \
 				 devid == PCI_CHIP_I915_GM || \
 				 devid == PCI_CHIP_I945_GM || \
@@ -104,14 +106,20 @@
 				 devid == PCI_CHIP_Q33_G || \
 				 devid == PCI_CHIP_Q35_G || IS_IGD(devid))
 
-#define IS_965(devid)		(devid == PCI_CHIP_I965_G || \
+#define IS_GEN4(devid)		(devid == PCI_CHIP_I965_G || \
 				 devid == PCI_CHIP_I965_Q || \
 				 devid == PCI_CHIP_I965_G_1 || \
 				 devid == PCI_CHIP_I965_GM || \
 				 devid == PCI_CHIP_I965_GME || \
 				 devid == PCI_CHIP_I946_GZ || \
+				 IS_G4X(devid))
+
+#define IS_GEN6(devid)		(devid == PCI_CHIP_SANDYBRIDGE)
+
+#define IS_965(devid)		(IS_GEN4(devid) || \
 				 IS_G4X(devid) || \
-				 IS_IGDNG(devid))
+				 IS_IGDNG(devid) || \
+				 IS_GEN6(devid))
 
 #define IS_9XX(devid)		(IS_915(devid) || \
 				 IS_945(devid) || \
diff --git a/src/mesa/drivers/dri/intel/intel_clear.c b/src/mesa/drivers/dri/intel/intel_clear.c
index ca78681538..03b24e2b51 100644
--- a/src/mesa/drivers/dri/intel/intel_clear.c
+++ b/src/mesa/drivers/dri/intel/intel_clear.c
@@ -133,6 +133,12 @@ intelClear(GLcontext *ctx, GLbitfield mask)
       }
    }
 
+   if (intel->gen >= 6) {
+      /* Blits are in a different ringbuffer so we don't use them. */
+      tri_mask |= blit_mask;
+      blit_mask = 0;
+   }
+
    /* SW fallback clearing */
    swrast_mask = mask & ~tri_mask & ~blit_mask;
 
diff --git a/src/mesa/drivers/dri/intel/intel_context.c b/src/mesa/drivers/dri/intel/intel_context.c
index de063d51c9..8af7a23385 100644
--- a/src/mesa/drivers/dri/intel/intel_context.c
+++ b/src/mesa/drivers/dri/intel/intel_context.c
@@ -610,7 +610,9 @@ intelInitContext(struct intel_context *intel,
    intel->driContext = driContextPriv;
    intel->driFd = sPriv->fd;
 
-   if (IS_965(intel->intelScreen->deviceID)) {
+   if (IS_GEN6(intel->intelScreen->deviceID)) {
+      intel->gen = 6;
+   } else if (IS_965(intel->intelScreen->deviceID)) {
       intel->gen = 4;
    } else if (IS_9XX(intel->intelScreen->deviceID)) {
       intel->gen = 3;
-- 
cgit v1.2.3


From 719f2b1d8570aa58b970bd28941221ee6c34af9b Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Tue, 3 Nov 2009 13:19:30 -0800
Subject: i965: Set up sandybridge depthbuffer.

---
 src/mesa/drivers/dri/i965/brw_misc_state.c   | 21 ++++++++++++++++++---
 src/mesa/drivers/dri/i965/brw_state_upload.c |  2 ++
 src/mesa/drivers/dri/intel/intel_decode.c    |  4 +++-
 3 files changed, 23 insertions(+), 4 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_misc_state.c b/src/mesa/drivers/dri/i965/brw_misc_state.c
index f708ee0063..d6eb6162df 100644
--- a/src/mesa/drivers/dri/i965/brw_misc_state.c
+++ b/src/mesa/drivers/dri/i965/brw_misc_state.c
@@ -209,7 +209,14 @@ static void emit_depthbuffer(struct brw_context *brw)
 {
    struct intel_context *intel = &brw->intel;
    struct intel_region *region = brw->state.depth_region;
-   unsigned int len = (intel->is_g4x || intel->is_ironlake) ? 6 : 5;
+   unsigned int len;
+
+   if (intel->gen >= 6)
+      len = 7;
+   else if (intel->is_g4x || intel->is_ironlake)
+      len = 6;
+   else
+      len = 5;
 
    if (region == NULL) {
       BEGIN_BATCH(len);
@@ -220,9 +227,12 @@ static void emit_depthbuffer(struct brw_context *brw)
       OUT_BATCH(0);
       OUT_BATCH(0);
 
-      if (intel->is_g4x || intel->is_ironlake)
+      if (intel->is_g4x || intel->is_ironlake || intel->gen >= 6)
          OUT_BATCH(0);
 
+      if (intel->gen >= 6)
+	 OUT_BATCH(0);
+
       ADVANCE_BATCH();
    } else {
       unsigned int format;
@@ -243,6 +253,8 @@ static void emit_depthbuffer(struct brw_context *brw)
       }
 
       assert(region->tiling != I915_TILING_X);
+      if (IS_GEN6(intel->intelScreen->deviceID))
+	 assert(region->tiling != I915_TILING_NONE);
 
       BEGIN_BATCH(len);
       OUT_BATCH(CMD_DEPTH_BUFFER << 16 | (len - 2));
@@ -259,9 +271,12 @@ static void emit_depthbuffer(struct brw_context *brw)
 		((region->height - 1) << 19));
       OUT_BATCH(0);
 
-      if (intel->is_g4x || intel->is_ironlake)
+      if (intel->is_g4x || intel->is_ironlake || intel->gen >= 6)
          OUT_BATCH(0);
 
+      if (intel->gen >= 6)
+	 OUT_BATCH(0);
+
       ADVANCE_BATCH();
    }
 }
diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c b/src/mesa/drivers/dri/i965/brw_state_upload.c
index 1ee4f4ab80..4c12e68c0e 100644
--- a/src/mesa/drivers/dri/i965/brw_state_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_state_upload.c
@@ -143,9 +143,11 @@ const struct brw_tracked_state *gen6_atoms[] =
 
    &brw_binding_table_pointers,
    &brw_blend_constant_color,
+#endif
 
    &brw_depthbuffer,
 
+#if 0
    &brw_polygon_stipple,
    &brw_polygon_stipple_offset,
 
diff --git a/src/mesa/drivers/dri/intel/intel_decode.c b/src/mesa/drivers/dri/intel/intel_decode.c
index a9dfe281cb..c3112d980a 100644
--- a/src/mesa/drivers/dri/intel/intel_decode.c
+++ b/src/mesa/drivers/dri/intel/intel_decode.c
@@ -1592,7 +1592,7 @@ decode_3d_965(uint32_t *data, int count, uint32_t hw_offset, int *failures)
 	return len;
 
     case 0x7905:
-	if (len != 5 && len != 6)
+	if (len < 5 || len > 7)
 	    fprintf(out, "Bad count in 3DSTATE_DEPTH_BUFFER\n");
 	if (count < len)
 	    BUFFER_FAIL(count, len, "3DSTATE_DEPTH_BUFFER");
@@ -1611,6 +1611,8 @@ decode_3d_965(uint32_t *data, int count, uint32_t hw_offset, int *failures)
 	instr_out(data, hw_offset, 4, "volume depth\n");
 	if (len == 6)
 	    instr_out(data, hw_offset, 5, "\n");
+	if (len == 7)
+	    instr_out(data, hw_offset, 6, "render target view extent\n");
 
 	return len;
 
-- 
cgit v1.2.3


From 0b9932ffde3f7228288717302b43aa01df0b5fa0 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Tue, 3 Nov 2009 13:41:22 -0800
Subject: i965: Update WM surface state setup for sandybridge's new
 BLEND_STATE.

---
 src/mesa/drivers/dri/i965/brw_state_upload.c     |  2 ++
 src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 39 +++++++++++++-----------
 2 files changed, 24 insertions(+), 17 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c b/src/mesa/drivers/dri/i965/brw_state_upload.c
index 4c12e68c0e..afa940962f 100644
--- a/src/mesa/drivers/dri/i965/brw_state_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_state_upload.c
@@ -124,9 +124,11 @@ const struct brw_tracked_state *gen6_atoms[] =
    &brw_cc_vp,
    &brw_cc_unit,
 
+#endif
    &brw_vs_surfaces,		/* must do before unit */
    &brw_wm_constant_surface,	/* must do before wm surfaces/bind bo */
    &brw_wm_surfaces,		/* must do before samplers and unit */
+#if 0
    &brw_wm_samplers,
 
    &brw_wm_unit,
diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
index 1db438ae7b..a42067611c 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
@@ -509,7 +509,7 @@ brw_update_renderbuffer_surface(struct brw_context *brw,
 				struct gl_renderbuffer *rb,
 				unsigned int unit)
 {
-   struct intel_context *intel = &brw->intel;;
+   struct intel_context *intel = &brw->intel;
    GLcontext *ctx = &intel->ctx;
    dri_bo *region_bo = NULL;
    struct intel_renderbuffer *irb = intel_renderbuffer(rb);
@@ -576,18 +576,21 @@ brw_update_renderbuffer_surface(struct brw_context *brw,
       key.draw_x = 0;
       key.draw_y = 0;
    }
-   /* _NEW_COLOR */
-   memcpy(key.color_mask, ctx->Color.ColorMask[unit],
-	  sizeof(key.color_mask));
 
-   /* As mentioned above, disable writes to the alpha component when the
-    * renderbuffer is XRGB.
-    */
-   if (ctx->DrawBuffer->Visual.alphaBits == 0)
-     key.color_mask[3] = GL_FALSE;
+   if (intel->gen < 6) {
+      /* _NEW_COLOR */
+      memcpy(key.color_mask, ctx->Color.ColorMask[unit],
+	     sizeof(key.color_mask));
+
+      /* As mentioned above, disable writes to the alpha component when the
+       * renderbuffer is XRGB.
+       */
+      if (ctx->DrawBuffer->Visual.alphaBits == 0)
+	 key.color_mask[3] = GL_FALSE;
 
-   key.color_blend = (!ctx->Color._LogicOpEnabled &&
-		      (ctx->Color.BlendEnabled & (1 << unit)));
+      key.color_blend = (!ctx->Color._LogicOpEnabled &&
+			 (ctx->Color.BlendEnabled & (1 << unit)));
+   }
 
    dri_bo_unreference(brw->wm.surf_bo[unit]);
    brw->wm.surf_bo[unit] = brw_search_cache(&brw->surface_cache,
@@ -639,12 +642,14 @@ brw_update_renderbuffer_surface(struct brw_context *brw,
       brw_set_surface_tiling(&surf, key.tiling);
       surf.ss3.pitch = (key.pitch * key.cpp) - 1;
 
-      /* _NEW_COLOR */
-      surf.ss0.color_blend = key.color_blend;
-      surf.ss0.writedisable_red =   !key.color_mask[0];
-      surf.ss0.writedisable_green = !key.color_mask[1];
-      surf.ss0.writedisable_blue =  !key.color_mask[2];
-      surf.ss0.writedisable_alpha = !key.color_mask[3];
+      if (intel->gen < 6) {
+	 /* _NEW_COLOR */
+	 surf.ss0.color_blend = key.color_blend;
+	 surf.ss0.writedisable_red =   !key.color_mask[0];
+	 surf.ss0.writedisable_green = !key.color_mask[1];
+	 surf.ss0.writedisable_blue =  !key.color_mask[2];
+	 surf.ss0.writedisable_alpha = !key.color_mask[3];
+      }
 
       /* Key size will never match key size for textures, so we're safe. */
       brw->wm.surf_bo[unit] = brw_upload_cache(&brw->surface_cache,
-- 
cgit v1.2.3


From 9dce60f35b25f4f5605b22d75447bac5d9f55515 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Tue, 3 Nov 2009 14:02:24 -0800
Subject: i965: Set up sandybridge binding table pointers but don't enable it
 yet.

It hangs the GPU at the clipper stage, presumably because we're lacking
other setup.
---
 src/mesa/drivers/dri/i965/brw_defines.h    |  3 +++
 src/mesa/drivers/dri/i965/brw_misc_state.c | 35 ++++++++++++++++++++++++++++++
 src/mesa/drivers/dri/i965/brw_state.h      |  1 +
 3 files changed, 39 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h
index ea0d7e05d4..afdc5a1d85 100644
--- a/src/mesa/drivers/dri/i965/brw_defines.h
+++ b/src/mesa/drivers/dri/i965/brw_defines.h
@@ -778,6 +778,9 @@
 
 #define CMD_PIPELINED_STATE_POINTERS  0x7800
 #define CMD_BINDING_TABLE_PTRS        0x7801
+# define GEN6_BINDING_TABLE_MODIFY_VS	(1 << 8)
+# define GEN6_BINDING_TABLE_MODIFY_GS	(1 << 9)
+# define GEN6_BINDING_TABLE_MODIFY_PS	(1 << 10)
 
 #define CMD_VERTEX_BUFFER             0x7808
 # define BRW_VB0_INDEX_SHIFT		27
diff --git a/src/mesa/drivers/dri/i965/brw_misc_state.c b/src/mesa/drivers/dri/i965/brw_misc_state.c
index d6eb6162df..7d9e793ff2 100644
--- a/src/mesa/drivers/dri/i965/brw_misc_state.c
+++ b/src/mesa/drivers/dri/i965/brw_misc_state.c
@@ -136,6 +136,41 @@ const struct brw_tracked_state brw_binding_table_pointers = {
    .emit = upload_binding_table_pointers,
 };
 
+/**
+ * Upload the binding table pointers, which point each stage's array of surface
+ * state pointers.
+ *
+ * The binding table pointers are relative to the surface state base address,
+ * which is 0.
+ */
+static void upload_gen6_binding_table_pointers(struct brw_context *brw)
+{
+   struct intel_context *intel = &brw->intel;
+
+   BEGIN_BATCH(4);
+   OUT_BATCH(CMD_BINDING_TABLE_PTRS << 16 |
+	     GEN6_BINDING_TABLE_MODIFY_VS |
+	     GEN6_BINDING_TABLE_MODIFY_GS |
+	     GEN6_BINDING_TABLE_MODIFY_PS |
+	     (4 - 2));
+   if (brw->vs.bind_bo != NULL)
+      OUT_RELOC(brw->vs.bind_bo, I915_GEM_DOMAIN_SAMPLER, 0, 0); /* vs */
+   else
+      OUT_BATCH(0);
+   OUT_BATCH(0); /* gs */
+   OUT_RELOC(brw->wm.bind_bo, I915_GEM_DOMAIN_SAMPLER, 0, 0); /* wm/ps */
+   ADVANCE_BATCH();
+}
+
+const struct brw_tracked_state gen6_binding_table_pointers = {
+   .dirty = {
+      .mesa = 0,
+      .brw = BRW_NEW_BATCH,
+      .cache = CACHE_NEW_SURF_BIND,
+   },
+   .prepare = prepare_binding_table_pointers,
+   .emit = upload_gen6_binding_table_pointers,
+};
 
 /**
  * Upload pointers to the per-stage state.
diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h
index 536fe8b249..a24a02100c 100644
--- a/src/mesa/drivers/dri/i965/brw_state.h
+++ b/src/mesa/drivers/dri/i965/brw_state.h
@@ -90,6 +90,7 @@ const struct brw_tracked_state brw_drawing_rect;
 const struct brw_tracked_state brw_indices;
 const struct brw_tracked_state brw_vertices;
 const struct brw_tracked_state brw_index_buffer;
+const struct brw_tracked_state gen6_binding_table_pointers;
 
 /**
  * Use same key for WM and VS surfaces.
-- 
cgit v1.2.3


From 7ee590424c974cb10882e9c4664a6024595fc9de Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Fri, 29 Jan 2010 11:18:26 -0800
Subject: i965: Start adding support for the Sandybridge CC unit.

---
 src/mesa/drivers/dri/i965/Makefile            |   4 +-
 src/mesa/drivers/dri/i965/brw_context.h       |  15 +-
 src/mesa/drivers/dri/i965/brw_defines.h       |   1 +
 src/mesa/drivers/dri/i965/brw_state.h         |   4 +
 src/mesa/drivers/dri/i965/brw_state_cache.c   |   1 +
 src/mesa/drivers/dri/i965/brw_state_upload.c  |   7 +-
 src/mesa/drivers/dri/i965/brw_structs.h       | 100 ++++++++-
 src/mesa/drivers/dri/i965/gen6_cc.c           | 296 ++++++++++++++++++++++++++
 src/mesa/drivers/dri/i965/gen6_depthstencil.c | 169 +++++++++++++++
 9 files changed, 592 insertions(+), 5 deletions(-)
 create mode 100644 src/mesa/drivers/dri/i965/gen6_cc.c
 create mode 100644 src/mesa/drivers/dri/i965/gen6_depthstencil.c

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/Makefile b/src/mesa/drivers/dri/i965/Makefile
index 7758a792fd..7ce794d3aa 100644
--- a/src/mesa/drivers/dri/i965/Makefile
+++ b/src/mesa/drivers/dri/i965/Makefile
@@ -84,7 +84,9 @@ DRIVER_SOURCES = \
 	brw_wm_pass2.c \
 	brw_wm_sampler_state.c \
 	brw_wm_state.c \
-	brw_wm_surface_state.c 
+	brw_wm_surface_state.c \
+	gen6_cc.c \
+	gen6_depthstencil.c
 
 C_SOURCES = \
 	$(COMMON_SOURCES) \
diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h
index 21c4cd38a7..ea89d4f6fa 100644
--- a/src/mesa/drivers/dri/i965/brw_context.h
+++ b/src/mesa/drivers/dri/i965/brw_context.h
@@ -282,6 +282,9 @@ struct brw_vs_ouput_sizes {
 
 
 enum brw_cache_id {
+   BRW_BLEND_STATE,
+   BRW_DEPTH_STENCIL_STATE,
+   BRW_COLOR_CALC_STATE,
    BRW_CC_VP,
    BRW_CC_UNIT,
    BRW_WM_PROG,
@@ -354,6 +357,9 @@ struct brw_tracked_state {
 
 /* Flags for brw->state.cache.
  */
+#define CACHE_NEW_BLEND_STATE            (1<<BRW_BLEND_STATE)
+#define CACHE_NEW_DEPTH_STENCIL_STATE    (1<<BRW_DEPTH_STENCIL_STATE)
+#define CACHE_NEW_COLOR_CALC_STATE       (1<<BRW_COLOR_CALC_STATE)
 #define CACHE_NEW_CC_VP                  (1<<BRW_CC_VP)
 #define CACHE_NEW_CC_UNIT                (1<<BRW_CC_UNIT)
 #define CACHE_NEW_WM_PROG                (1<<BRW_WM_PROG)
@@ -643,9 +649,16 @@ struct brw_context
 
 
    struct {
+      /* gen4 */
       dri_bo *prog_bo;
-      dri_bo *state_bo;
       dri_bo *vp_bo;
+
+      /* gen6 */
+      dri_bo *blend_state_bo;
+      dri_bo *depth_stencil_state_bo;
+      dri_bo *color_calc_state_bo;
+
+      dri_bo *state_bo;
    } cc;
 
    struct {
diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h
index afdc5a1d85..5d3b0a8b7a 100644
--- a/src/mesa/drivers/dri/i965/brw_defines.h
+++ b/src/mesa/drivers/dri/i965/brw_defines.h
@@ -807,6 +807,7 @@
 # define BRW_VE1_COMPONENT_3_SHIFT	16
 # define BRW_VE1_DST_OFFSET_SHIFT	0
 
+#define CMD_3D_CC_STATE_POINTERS      0x780e /* GEN6+ */
 #define CMD_INDEX_BUFFER              0x780a
 #define CMD_VF_STATISTICS_965         0x780b
 #define CMD_VF_STATISTICS_GM45        0x680b
diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h
index a24a02100c..5112cd8016 100644
--- a/src/mesa/drivers/dri/i965/brw_state.h
+++ b/src/mesa/drivers/dri/i965/brw_state.h
@@ -91,6 +91,10 @@ const struct brw_tracked_state brw_indices;
 const struct brw_tracked_state brw_vertices;
 const struct brw_tracked_state brw_index_buffer;
 const struct brw_tracked_state gen6_binding_table_pointers;
+const struct brw_tracked_state gen6_blend_state;
+const struct brw_tracked_state gen6_cc_state_pointers;
+const struct brw_tracked_state gen6_color_calc_state;
+const struct brw_tracked_state gen6_depth_stencil_state;
 
 /**
  * Use same key for WM and VS surfaces.
diff --git a/src/mesa/drivers/dri/i965/brw_state_cache.c b/src/mesa/drivers/dri/i965/brw_state_cache.c
index 4bb98d8d5d..c08cb45b75 100644
--- a/src/mesa/drivers/dri/i965/brw_state_cache.c
+++ b/src/mesa/drivers/dri/i965/brw_state_cache.c
@@ -390,6 +390,7 @@ brw_init_non_surface_cache(struct brw_context *brw)
    brw_init_cache_id(cache, "GS_UNIT", BRW_GS_UNIT);
 
    brw_init_cache_id(cache, "GS_PROG", BRW_GS_PROG);
+   brw_init_cache_id(cache, "BLEND_STATE", BRW_BLEND_STATE);
 }
 
 
diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c b/src/mesa/drivers/dri/i965/brw_state_upload.c
index afa940962f..ed9e18f33c 100644
--- a/src/mesa/drivers/dri/i965/brw_state_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_state_upload.c
@@ -122,9 +122,13 @@ const struct brw_tracked_state *gen6_atoms[] =
    &brw_recalculate_urb_fence,
 
    &brw_cc_vp,
-   &brw_cc_unit,
 
 #endif
+   &gen6_blend_state,		/* must do before cc unit */
+   &gen6_color_calc_state,	/* must do before cc unit */
+   &gen6_depth_stencil_state,	/* must do before cc unit */
+   &gen6_cc_state_pointers,
+
    &brw_vs_surfaces,		/* must do before unit */
    &brw_wm_constant_surface,	/* must do before wm surfaces/bind bo */
    &brw_wm_surfaces,		/* must do before samplers and unit */
@@ -282,6 +286,7 @@ static struct dirty_bit_map brw_bits[] = {
 };
 
 static struct dirty_bit_map cache_bits[] = {
+   DEFINE_BIT(CACHE_NEW_BLEND_STATE),
    DEFINE_BIT(CACHE_NEW_CC_VP),
    DEFINE_BIT(CACHE_NEW_CC_UNIT),
    DEFINE_BIT(CACHE_NEW_WM_PROG),
diff --git a/src/mesa/drivers/dri/i965/brw_structs.h b/src/mesa/drivers/dri/i965/brw_structs.h
index 66d4127271..10c0c62202 100644
--- a/src/mesa/drivers/dri/i965/brw_structs.h
+++ b/src/mesa/drivers/dri/i965/brw_structs.h
@@ -658,7 +658,105 @@ struct brw_clip_unit_state
    GLfloat viewport_ymax;  
 };
 
+struct gen6_blend_state
+{
+   struct {
+      GLuint dest_blend_factor:5;
+      GLuint source_blend_factor:5;
+      GLuint pad3:1;
+      GLuint blend_func:3;
+      GLuint pad2:1;
+      GLuint ia_dest_blend_factor:5;
+      GLuint ia_source_blend_factor:5;
+      GLuint pad1:1;
+      GLuint ia_blend_func:3;
+      GLuint pad0:1;
+      GLuint ia_blend_enable:1;
+      GLuint blend_enable:1;
+   } blend0;
+
+   struct {
+      GLuint post_blend_clamp_enable:1;
+      GLuint pre_blend_clamp_enable:1;
+      GLuint clamp_range:2;
+      GLuint pad0:4;
+      GLuint x_dither_offset:2;
+      GLuint y_dither_offset:2;
+      GLuint dither_enable:1;
+      GLuint alpha_test_func:3;
+      GLuint alpha_test_enable:1;
+      GLuint pad1:1;
+      GLuint logic_op_func:4;
+      GLuint logic_op_enable:1;
+      GLuint pad2:1;
+      GLuint write_disable_b:1;
+      GLuint write_disable_g:1;
+      GLuint write_disable_r:1;
+      GLuint write_disable_a:1;
+      GLuint pad3:1;
+      GLuint alpha_to_coverage_dither:1;
+      GLuint alpha_to_one:1;
+      GLuint alpha_to_coverage:1;
+   } blend1;
+};
 
+struct gen6_color_calc_state
+{
+   struct {
+      GLuint alpha_test_format:1;
+      GLuint pad0:14;
+      GLuint round_disable:1;
+      GLuint bf_stencil_ref:8;
+      GLuint stencil_ref:8;
+   } cc0;
+
+   union {
+      GLfloat alpha_ref_f;
+      struct {
+	 GLuint ui:8;
+	 GLuint pad0:24;
+      } alpha_ref_fi;
+   } cc1;
+
+   GLfloat constant_r;
+   GLfloat constant_g;
+   GLfloat constant_b;
+   GLfloat constant_a;
+};
+
+struct gen6_depth_stencil_state
+{
+   struct {
+      GLuint pad0:3;
+      GLuint bf_stencil_pass_depth_pass_op:3;
+      GLuint bf_stencil_pass_depth_fail_op:3;
+      GLuint bf_stencil_fail_op:3;
+      GLuint bf_stencil_func:3;
+      GLuint bf_stencil_enable:1;
+      GLuint pad1:2;
+      GLuint stencil_write_enable:1;
+      GLuint stencil_pass_depth_pass_op:3;
+      GLuint stencil_pass_depth_fail_op:3;
+      GLuint stencil_fail_op:3;
+      GLuint stencil_func:3;
+      GLuint stencil_enable:1;
+   } ds0;
+
+   struct {
+      GLuint bf_stencil_write_mask:8;
+      GLuint bf_stencil_test_mask:8;
+      GLuint stencil_write_mask:8;
+      GLuint stencil_test_mask:8;
+   } ds1;
+
+   struct {
+      GLuint pad0:25;
+      GLuint depth_write_enable:1;
+      GLuint depth_test_func:3;
+      GLuint pad1:1;
+      GLuint depth_test_enable:1;
+   } ds2;
+};
 
 struct brw_cc_unit_state
 {
@@ -752,8 +850,6 @@ struct brw_cc_unit_state
    } cc7;
 };
 
-
-
 struct brw_sf_unit_state
 {
    struct thread0 thread0;
diff --git a/src/mesa/drivers/dri/i965/gen6_cc.c b/src/mesa/drivers/dri/i965/gen6_cc.c
new file mode 100644
index 0000000000..b1b6dc7db3
--- /dev/null
+++ b/src/mesa/drivers/dri/i965/gen6_cc.c
@@ -0,0 +1,296 @@
+/*
+ * Copyright © 2009 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ * Authors:
+ *    Eric Anholt <eric@anholt.net>
+ *
+ */
+
+#include "brw_context.h"
+#include "brw_state.h"
+#include "brw_defines.h"
+#include "brw_util.h"
+#include "intel_batchbuffer.h"
+#include "main/macros.h"
+#include "main/enums.h"
+
+struct brw_blend_state_key {
+   GLboolean color_blend, alpha_enabled;
+
+   GLenum logic_op;
+
+   GLenum blend_eq_rgb, blend_eq_a;
+   GLenum blend_src_rgb, blend_src_a;
+   GLenum blend_dst_rgb, blend_dst_a;
+
+   GLenum alpha_func;
+
+   GLboolean dither;
+};
+
+static void
+blend_state_populate_key(struct brw_context *brw,
+			 struct brw_blend_state_key *key)
+{
+   GLcontext *ctx = &brw->intel.ctx;
+
+   memset(key, 0, sizeof(*key));
+
+   /* _NEW_COLOR */
+   if (ctx->Color._LogicOpEnabled)
+      key->logic_op = ctx->Color.LogicOp;
+   else
+      key->logic_op = GL_COPY;
+
+   /* _NEW_COLOR */
+   key->color_blend = ctx->Color.BlendEnabled;
+   if (key->color_blend) {
+      key->blend_eq_rgb = ctx->Color.BlendEquationRGB;
+      key->blend_eq_a = ctx->Color.BlendEquationA;
+      key->blend_src_rgb = ctx->Color.BlendSrcRGB;
+      key->blend_dst_rgb = ctx->Color.BlendDstRGB;
+      key->blend_src_a = ctx->Color.BlendSrcA;
+      key->blend_dst_a = ctx->Color.BlendDstA;
+   }
+
+   /* _NEW_COLOR */
+   key->alpha_enabled = ctx->Color.AlphaEnabled;
+   if (key->alpha_enabled) {
+      key->alpha_func = ctx->Color.AlphaFunc;
+   }
+
+   /* _NEW_COLOR */
+   key->dither = ctx->Color.DitherFlag;
+}
+
+/**
+ * Creates the state cache entry for the given CC unit key.
+ */
+static drm_intel_bo *
+blend_state_create_from_key(struct brw_context *brw,
+			    struct brw_blend_state_key *key)
+{
+   struct gen6_blend_state blend;
+   drm_intel_bo *bo;
+
+   memset(&blend, 0, sizeof(blend));
+
+   if (key->logic_op != GL_COPY) {
+      blend.blend1.logic_op_enable = 1;
+      blend.blend1.logic_op_func = intel_translate_logic_op(key->logic_op);
+   } else if (key->color_blend) {
+      GLenum eqRGB = key->blend_eq_rgb;
+      GLenum eqA = key->blend_eq_a;
+      GLenum srcRGB = key->blend_src_rgb;
+      GLenum dstRGB = key->blend_dst_rgb;
+      GLenum srcA = key->blend_src_a;
+      GLenum dstA = key->blend_dst_a;
+
+      if (eqRGB == GL_MIN || eqRGB == GL_MAX) {
+	 srcRGB = dstRGB = GL_ONE;
+      }
+
+      if (eqA == GL_MIN || eqA == GL_MAX) {
+	 srcA = dstA = GL_ONE;
+      }
+
+      blend.blend0.dest_blend_factor = brw_translate_blend_factor(dstRGB);
+      blend.blend0.source_blend_factor = brw_translate_blend_factor(srcRGB);
+      blend.blend0.blend_func = brw_translate_blend_equation(eqRGB);
+
+      blend.blend0.ia_dest_blend_factor = brw_translate_blend_factor(dstA);
+      blend.blend0.ia_source_blend_factor = brw_translate_blend_factor(srcA);
+      blend.blend0.ia_blend_func = brw_translate_blend_equation(eqA);
+
+      blend.blend0.blend_enable = 1;
+      blend.blend0.ia_blend_enable = (srcA != srcRGB ||
+				      dstA != dstRGB ||
+				      eqA != eqRGB);
+   }
+
+   if (key->alpha_enabled) {
+      blend.blend1.alpha_test_enable = 1;
+      blend.blend1.alpha_test_func = intel_translate_compare_func(key->alpha_func);
+
+   }
+
+   if (key->dither) {
+      blend.blend1.dither_enable = 1;
+      blend.blend1.y_dither_offset = 0;
+      blend.blend1.x_dither_offset = 0;
+   }
+
+   bo = brw_upload_cache(&brw->cache, BRW_BLEND_STATE,
+			 key, sizeof(*key),
+			 NULL, 0,
+			 &blend, sizeof(blend));
+
+   return bo;
+}
+
+static void
+prepare_blend_state(struct brw_context *brw)
+{
+   struct brw_blend_state_key key;
+
+   blend_state_populate_key(brw, &key);
+
+   drm_intel_bo_unreference(brw->cc.blend_state_bo);
+   brw->cc.blend_state_bo = brw_search_cache(&brw->cache, BRW_BLEND_STATE,
+					     &key, sizeof(key),
+					     NULL, 0,
+					     NULL);
+
+   if (brw->cc.blend_state_bo == NULL)
+      brw->cc.blend_state_bo = blend_state_create_from_key(brw, &key);
+}
+
+const struct brw_tracked_state gen6_blend_state = {
+   .dirty = {
+      .mesa = _NEW_COLOR,
+      .brw = 0,
+      .cache = 0,
+   },
+   .prepare = prepare_blend_state,
+};
+
+struct brw_color_calc_state_key {
+   GLubyte blend_constant_color[4];
+   GLclampf alpha_ref;
+   GLubyte stencil_ref[2];
+};
+
+static void
+color_calc_state_populate_key(struct brw_context *brw,
+			      struct brw_color_calc_state_key *key)
+{
+   GLcontext *ctx = &brw->intel.ctx;
+
+   memset(key, 0, sizeof(*key));
+
+   /* _NEW_STENCIL */
+   if (ctx->Stencil._Enabled) {
+      const unsigned back = ctx->Stencil._BackFace;
+
+      key->stencil_ref[0] = ctx->Stencil.Ref[0];
+      if (ctx->Stencil._TestTwoSide)
+	 key->stencil_ref[1] = ctx->Stencil.Ref[back];
+   }
+
+   /* _NEW_COLOR */
+   if (ctx->Color.AlphaEnabled)
+      key->alpha_ref = ctx->Color.AlphaRef;
+
+   key->blend_constant_color[0] = ctx->Color.BlendColor[0];
+   key->blend_constant_color[1] = ctx->Color.BlendColor[1];
+   key->blend_constant_color[2] = ctx->Color.BlendColor[2];
+   key->blend_constant_color[3] = ctx->Color.BlendColor[3];
+}
+
+/**
+ * Creates the state cache entry for the given CC state key.
+ */
+static drm_intel_bo *
+color_calc_state_create_from_key(struct brw_context *brw,
+				 struct brw_color_calc_state_key *key)
+{
+   struct gen6_color_calc_state cc;
+   drm_intel_bo *bo;
+
+   memset(&cc, 0, sizeof(cc));
+
+   cc.cc0.alpha_test_format = BRW_ALPHATEST_FORMAT_UNORM8;
+   UNCLAMPED_FLOAT_TO_UBYTE(cc.cc1.alpha_ref_fi.ui, key->alpha_ref);
+
+   cc.cc0.stencil_ref = key->stencil_ref[0];
+   cc.cc0.bf_stencil_ref = key->stencil_ref[1];
+
+   cc.constant_r = key->blend_constant_color[0];
+   cc.constant_g = key->blend_constant_color[1];
+   cc.constant_b = key->blend_constant_color[2];
+   cc.constant_a = key->blend_constant_color[3];
+
+   bo = brw_upload_cache(&brw->cache, BRW_COLOR_CALC_STATE,
+			 key, sizeof(*key),
+			 NULL, 0,
+			 &cc, sizeof(cc));
+
+   return bo;
+}
+
+static void
+prepare_color_calc_state(struct brw_context *brw)
+{
+   struct brw_color_calc_state_key key;
+
+   color_calc_state_populate_key(brw, &key);
+
+   drm_intel_bo_unreference(brw->cc.state_bo);
+   brw->cc.state_bo = brw_search_cache(&brw->cache, BRW_COLOR_CALC_STATE,
+				       &key, sizeof(key),
+				       NULL, 0,
+				       NULL);
+
+   if (brw->cc.state_bo == NULL)
+      brw->cc.state_bo = color_calc_state_create_from_key(brw, &key);
+}
+
+const struct brw_tracked_state gen6_color_calc_state = {
+   .dirty = {
+      .mesa = _NEW_COLOR,
+      .brw = 0,
+      .cache = 0,
+   },
+   .prepare = prepare_color_calc_state,
+};
+
+static void upload_cc_state_pointers(struct brw_context *brw)
+{
+   struct intel_context *intel = &brw->intel;
+
+   BEGIN_BATCH(4);
+   OUT_BATCH(CMD_3D_CC_STATE_POINTERS << 16 | (4 - 2));
+   OUT_RELOC(brw->cc.state_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 1);
+   OUT_RELOC(brw->cc.blend_state_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 1);
+   OUT_RELOC(brw->cc.depth_stencil_state_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 1);
+   ADVANCE_BATCH();
+}
+
+
+static void prepare_cc_state_pointers(struct brw_context *brw)
+{
+   brw_add_validated_bo(brw, brw->cc.state_bo);
+   brw_add_validated_bo(brw, brw->cc.blend_state_bo);
+   brw_add_validated_bo(brw, brw->cc.depth_stencil_state_bo);
+}
+
+const struct brw_tracked_state gen6_cc_state_pointers = {
+   .dirty = {
+      .mesa = 0,
+      .brw = BRW_NEW_BATCH,
+      .cache = (CACHE_NEW_BLEND_STATE |
+		CACHE_NEW_COLOR_CALC_STATE |
+		CACHE_NEW_DEPTH_STENCIL_STATE)
+   },
+   .prepare = prepare_cc_state_pointers,
+   .emit = upload_cc_state_pointers,
+};
diff --git a/src/mesa/drivers/dri/i965/gen6_depthstencil.c b/src/mesa/drivers/dri/i965/gen6_depthstencil.c
new file mode 100644
index 0000000000..960927164c
--- /dev/null
+++ b/src/mesa/drivers/dri/i965/gen6_depthstencil.c
@@ -0,0 +1,169 @@
+/*
+ * Copyright © 2009 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ * Authors:
+ *    Eric Anholt <eric@anholt.net>
+ *
+ */
+
+#include "brw_context.h"
+#include "brw_state.h"
+#include "brw_defines.h"
+#include "brw_util.h"
+#include "main/macros.h"
+#include "main/enums.h"
+
+struct brw_depth_stencil_state_key {
+   GLenum depth_func;
+   GLboolean depth_test, depth_write;
+   GLboolean stencil, stencil_two_side;
+   GLenum stencil_func[2], stencil_fail_op[2];
+   GLenum stencil_pass_depth_fail_op[2], stencil_pass_depth_pass_op[2];
+   GLubyte stencil_write_mask[2], stencil_test_mask[2];
+};
+
+static void
+depth_stencil_state_populate_key(struct brw_context *brw,
+				 struct brw_depth_stencil_state_key *key)
+{
+   GLcontext *ctx = &brw->intel.ctx;
+   const unsigned back = ctx->Stencil._BackFace;
+
+   memset(key, 0, sizeof(*key));
+
+   /* _NEW_STENCIL */
+   key->stencil = ctx->Stencil._Enabled;
+   key->stencil_two_side = ctx->Stencil._TestTwoSide;
+
+   if (key->stencil) {
+      key->stencil_func[0] = ctx->Stencil.Function[0];
+      key->stencil_fail_op[0] = ctx->Stencil.FailFunc[0];
+      key->stencil_pass_depth_fail_op[0] = ctx->Stencil.ZFailFunc[0];
+      key->stencil_pass_depth_pass_op[0] = ctx->Stencil.ZPassFunc[0];
+      key->stencil_write_mask[0] = ctx->Stencil.WriteMask[0];
+      key->stencil_test_mask[0] = ctx->Stencil.ValueMask[0];
+   }
+   if (key->stencil_two_side) {
+      key->stencil_func[1] = ctx->Stencil.Function[back];
+      key->stencil_fail_op[1] = ctx->Stencil.FailFunc[back];
+      key->stencil_pass_depth_fail_op[1] = ctx->Stencil.ZFailFunc[back];
+      key->stencil_pass_depth_pass_op[1] = ctx->Stencil.ZPassFunc[back];
+      key->stencil_write_mask[1] = ctx->Stencil.WriteMask[back];
+      key->stencil_test_mask[1] = ctx->Stencil.ValueMask[back];
+   }
+
+   key->depth_test = ctx->Depth.Test;
+   if (key->depth_test) {
+      key->depth_func = ctx->Depth.Func;
+      key->depth_write = ctx->Depth.Mask;
+   }
+}
+
+/**
+ * Creates the state cache entry for the given DEPTH_STENCIL_STATE state key.
+ */
+static dri_bo *
+depth_stencil_state_create_from_key(struct brw_context *brw,
+				    struct brw_depth_stencil_state_key *key)
+{
+   struct gen6_depth_stencil_state ds;
+   dri_bo *bo;
+
+   memset(&ds, 0, sizeof(ds));
+
+   /* _NEW_STENCIL */
+   if (key->stencil) {
+      ds.ds0.stencil_enable = 1;
+      ds.ds0.stencil_func =
+	 intel_translate_compare_func(key->stencil_func[0]);
+      ds.ds0.stencil_fail_op =
+	 intel_translate_stencil_op(key->stencil_fail_op[0]);
+      ds.ds0.stencil_pass_depth_fail_op =
+	 intel_translate_stencil_op(key->stencil_pass_depth_fail_op[0]);
+      ds.ds0.stencil_pass_depth_pass_op =
+	 intel_translate_stencil_op(key->stencil_pass_depth_pass_op[0]);
+      ds.ds1.stencil_write_mask = key->stencil_write_mask[0];
+      ds.ds1.stencil_test_mask = key->stencil_test_mask[0];
+
+      if (key->stencil_two_side) {
+	 ds.ds0.bf_stencil_enable = 1;
+	 ds.ds0.bf_stencil_func =
+	    intel_translate_compare_func(key->stencil_func[1]);
+	 ds.ds0.bf_stencil_fail_op =
+	    intel_translate_stencil_op(key->stencil_fail_op[1]);
+	 ds.ds0.bf_stencil_pass_depth_fail_op =
+	    intel_translate_stencil_op(key->stencil_pass_depth_fail_op[1]);
+	 ds.ds0.bf_stencil_pass_depth_pass_op =
+	    intel_translate_stencil_op(key->stencil_pass_depth_pass_op[1]);
+	 ds.ds1.bf_stencil_write_mask = key->stencil_write_mask[1];
+	 ds.ds1.bf_stencil_test_mask = key->stencil_test_mask[1];
+      }
+
+      /* Not really sure about this:
+       */
+      if (key->stencil_write_mask[0] ||
+	  (key->stencil_two_side && key->stencil_write_mask[1]))
+	 ds.ds0.stencil_write_enable = 1;
+   }
+
+   /* _NEW_DEPTH */
+   if (key->depth_test) {
+      ds.ds2.depth_test_enable = 1;
+      ds.ds2.depth_test_func = intel_translate_compare_func(key->depth_func);
+      ds.ds2.depth_write_enable = key->depth_write;
+   }
+
+   bo = brw_upload_cache(&brw->cache, BRW_DEPTH_STENCIL_STATE,
+			 key, sizeof(*key),
+			 NULL, 0,
+			 &ds, sizeof(ds));
+
+   return bo;
+}
+
+static void
+prepare_depth_stencil_state(struct brw_context *brw)
+{
+   struct brw_depth_stencil_state_key key;
+
+   depth_stencil_state_populate_key(brw, &key);
+
+   dri_bo_unreference(brw->cc.depth_stencil_state_bo);
+   brw->cc.depth_stencil_state_bo = brw_search_cache(&brw->cache,
+						     BRW_DEPTH_STENCIL_STATE,
+						     &key, sizeof(key),
+						     NULL, 0,
+						     NULL);
+
+   if (brw->cc.depth_stencil_state_bo == NULL)
+      brw->cc.depth_stencil_state_bo =
+	 depth_stencil_state_create_from_key(brw, &key);
+}
+
+const struct brw_tracked_state gen6_depth_stencil_state = {
+   .dirty = {
+      .mesa = _NEW_DEPTH | _NEW_STENCIL,
+      .brw = 0,
+      .cache = 0,
+   },
+   .prepare = prepare_depth_stencil_state,
+};
-- 
cgit v1.2.3


From ba882d7827e5526e99c9d5c453d56c5e029c7476 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Mon, 16 Nov 2009 14:50:23 -0800
Subject: i965: Add untested Sandybridge passthrough VS setup.

---
 src/mesa/drivers/dri/i965/Makefile           |  3 +-
 src/mesa/drivers/dri/i965/brw_defines.h      | 23 ++++++++-
 src/mesa/drivers/dri/i965/brw_state.h        |  1 +
 src/mesa/drivers/dri/i965/brw_state_upload.c |  3 +-
 src/mesa/drivers/dri/i965/gen6_vs_state.c    | 75 ++++++++++++++++++++++++++++
 5 files changed, 101 insertions(+), 4 deletions(-)
 create mode 100644 src/mesa/drivers/dri/i965/gen6_vs_state.c

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/Makefile b/src/mesa/drivers/dri/i965/Makefile
index 7ce794d3aa..d21c921db3 100644
--- a/src/mesa/drivers/dri/i965/Makefile
+++ b/src/mesa/drivers/dri/i965/Makefile
@@ -86,7 +86,8 @@ DRIVER_SOURCES = \
 	brw_wm_state.c \
 	brw_wm_surface_state.c \
 	gen6_cc.c \
-	gen6_depthstencil.c
+	gen6_depthstencil.c \
+	gen6_vs_state.c
 
 C_SOURCES = \
 	$(COMMON_SOURCES) \
diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h
index 5d3b0a8b7a..7a7bcc4e79 100644
--- a/src/mesa/drivers/dri/i965/brw_defines.h
+++ b/src/mesa/drivers/dri/i965/brw_defines.h
@@ -807,10 +807,29 @@
 # define BRW_VE1_COMPONENT_3_SHIFT	16
 # define BRW_VE1_DST_OFFSET_SHIFT	0
 
-#define CMD_3D_CC_STATE_POINTERS      0x780e /* GEN6+ */
 #define CMD_INDEX_BUFFER              0x780a
-#define CMD_VF_STATISTICS_965         0x780b
+#define CMD_VF_STATISTICS_965          0x780b
 #define CMD_VF_STATISTICS_GM45        0x680b
+#define CMD_3D_CC_STATE_POINTERS      0x780e /* GEN6+ */
+
+#define CMD_3D_VS_STATE		      0x7810 /* GEN6+ */
+# define GEN6_VS_SPF_MODE				(1 << 31)
+# define GEN6_VS_VECTOR_MASK_ENABLE			(1 << 30)
+# define GEN6_VS_SAMPLER_COUNT_SHIFT			27
+# define GEN6_VS_BINDING_TABLE_ENTRY_COUNT_SHIFT	18
+# define GEN6_VS_DISPATCH_START_GRF_SHIFT		20
+# define GEN6_VS_URB_READ_LENGTH_SHIFT			11
+# define GEN6_VS_URB_ENTRY_READ_OFFSET_SHIFT		0
+# define GEN6_VS_MAX_THREADS_SHIFT			25
+# define GEN6_VS_STATISTICS_ENABLE			(1 << 10)
+# define GEN6_VS_CACHE_DISABLE				(1 << 1)
+# define GEN6_VS_ENABLE					(1 << 0)
+
+#define CMD_3D_CONSTANT_VS_STATE	      0x7815 /* GEN6+ */
+# define GEN6_VS_BUFFER_3_ENABLE			(1 << 15)
+# define GEN6_VS_BUFFER_2_ENABLE			(1 << 14)
+# define GEN6_VS_BUFFER_1_ENABLE			(1 << 13)
+# define GEN6_VS_BUFFER_0_ENABLE			(1 << 12)
 
 #define CMD_DRAW_RECT                 0x7900
 #define CMD_BLEND_CONSTANT_COLOR      0x7901
diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h
index 5112cd8016..5066fe151b 100644
--- a/src/mesa/drivers/dri/i965/brw_state.h
+++ b/src/mesa/drivers/dri/i965/brw_state.h
@@ -95,6 +95,7 @@ const struct brw_tracked_state gen6_blend_state;
 const struct brw_tracked_state gen6_cc_state_pointers;
 const struct brw_tracked_state gen6_color_calc_state;
 const struct brw_tracked_state gen6_depth_stencil_state;
+const struct brw_tracked_state gen6_vs_state;
 
 /**
  * Use same key for WM and VS surfaces.
diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c b/src/mesa/drivers/dri/i965/brw_state_upload.c
index ed9e18f33c..b4b086dec4 100644
--- a/src/mesa/drivers/dri/i965/brw_state_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_state_upload.c
@@ -132,13 +132,14 @@ const struct brw_tracked_state *gen6_atoms[] =
    &brw_vs_surfaces,		/* must do before unit */
    &brw_wm_constant_surface,	/* must do before wm surfaces/bind bo */
    &brw_wm_surfaces,		/* must do before samplers and unit */
+
+   &gen6_vs_state,
 #if 0
    &brw_wm_samplers,
 
    &brw_wm_unit,
    &brw_sf_vp,
    &brw_sf_unit,
-   &brw_vs_unit,		/* always required, enabled or not */
    &brw_clip_unit,
    &brw_gs_unit,
 
diff --git a/src/mesa/drivers/dri/i965/gen6_vs_state.c b/src/mesa/drivers/dri/i965/gen6_vs_state.c
new file mode 100644
index 0000000000..4caabf32b0
--- /dev/null
+++ b/src/mesa/drivers/dri/i965/gen6_vs_state.c
@@ -0,0 +1,75 @@
+/*
+ * Copyright © 2009 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ * Authors:
+ *    Eric Anholt <eric@anholt.net>
+ *
+ */
+
+#include "brw_context.h"
+#include "brw_state.h"
+#include "brw_defines.h"
+#include "brw_util.h"
+#include "main/macros.h"
+#include "main/enums.h"
+#include "intel_batchbuffer.h"
+
+static void
+upload_vs_state(struct brw_context *brw)
+{
+   struct intel_context *intel = &brw->intel;
+
+   BEGIN_BATCH(6);
+   OUT_BATCH(CMD_3D_VS_STATE << 16 | (6 - 2));
+   OUT_BATCH(0); /* prog_bo */
+   /* OUT_RELOC(brw->vs.prog_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0); */
+   OUT_BATCH((0 << GEN6_VS_SAMPLER_COUNT_SHIFT) |
+	     (brw->vs.nr_surfaces << GEN6_VS_BINDING_TABLE_ENTRY_COUNT_SHIFT));
+   OUT_BATCH(0); /* scratch space base offset */
+   OUT_BATCH((1 << GEN6_VS_DISPATCH_START_GRF_SHIFT) |
+	     (brw->vs.prog_data->urb_read_length << GEN6_VS_URB_READ_LENGTH_SHIFT) |
+	     (0 << GEN6_VS_URB_ENTRY_READ_OFFSET_SHIFT));
+   OUT_BATCH((0 << GEN6_VS_MAX_THREADS_SHIFT) |
+	     GEN6_VS_STATISTICS_ENABLE);
+   ADVANCE_BATCH();
+
+   /* Disable all the constant buffers. */
+   BEGIN_BATCH(5);
+   OUT_BATCH(CMD_3D_CONSTANT_VS_STATE | (5 - 2));
+   OUT_BATCH(0);
+   OUT_BATCH(0);
+   OUT_BATCH(0);
+   OUT_BATCH(0);
+   ADVANCE_BATCH();
+}
+
+const struct brw_tracked_state gen6_vs_state = {
+   .dirty = {
+      .mesa  = _NEW_TRANSFORM,
+      .brw   = (BRW_NEW_CURBE_OFFSETS |
+                BRW_NEW_NR_VS_SURFACES |
+		BRW_NEW_URB_FENCE |
+		BRW_NEW_CONTEXT),
+      .cache = CACHE_NEW_VS_PROG
+   },
+   .emit = upload_vs_state,
+};
-- 
cgit v1.2.3


From 520b64ddfb4c2efa742bc2217fef96fdec5eea9b Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Thu, 26 Nov 2009 22:03:43 -0800
Subject: i965: Add untested passthrough GS setup.

---
 src/mesa/drivers/dri/i965/Makefile           |  1 +
 src/mesa/drivers/dri/i965/brw_defines.h      | 29 +++++++++--
 src/mesa/drivers/dri/i965/brw_state.h        |  1 +
 src/mesa/drivers/dri/i965/brw_state_upload.c |  2 +-
 src/mesa/drivers/dri/i965/gen6_gs_state.c    | 74 ++++++++++++++++++++++++++++
 5 files changed, 102 insertions(+), 5 deletions(-)
 create mode 100644 src/mesa/drivers/dri/i965/gen6_gs_state.c

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/Makefile b/src/mesa/drivers/dri/i965/Makefile
index d21c921db3..fb7ee096d9 100644
--- a/src/mesa/drivers/dri/i965/Makefile
+++ b/src/mesa/drivers/dri/i965/Makefile
@@ -87,6 +87,7 @@ DRIVER_SOURCES = \
 	brw_wm_surface_state.c \
 	gen6_cc.c \
 	gen6_depthstencil.c \
+	gen6_gs_state.c \
 	gen6_vs_state.c
 
 C_SOURCES = \
diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h
index 7a7bcc4e79..7ba1c77ebe 100644
--- a/src/mesa/drivers/dri/i965/brw_defines.h
+++ b/src/mesa/drivers/dri/i965/brw_defines.h
@@ -813,11 +813,13 @@
 #define CMD_3D_CC_STATE_POINTERS      0x780e /* GEN6+ */
 
 #define CMD_3D_VS_STATE		      0x7810 /* GEN6+ */
+/* DW2 */
 # define GEN6_VS_SPF_MODE				(1 << 31)
 # define GEN6_VS_VECTOR_MASK_ENABLE			(1 << 30)
 # define GEN6_VS_SAMPLER_COUNT_SHIFT			27
 # define GEN6_VS_BINDING_TABLE_ENTRY_COUNT_SHIFT	18
 # define GEN6_VS_DISPATCH_START_GRF_SHIFT		20
+/* DW4 */
 # define GEN6_VS_URB_READ_LENGTH_SHIFT			11
 # define GEN6_VS_URB_ENTRY_READ_OFFSET_SHIFT		0
 # define GEN6_VS_MAX_THREADS_SHIFT			25
@@ -825,11 +827,30 @@
 # define GEN6_VS_CACHE_DISABLE				(1 << 1)
 # define GEN6_VS_ENABLE					(1 << 0)
 
+#define CMD_3D_GS_STATE		      0x7811 /* GEN6+ */
+/* DW2 */
+# define GEN6_GS_SPF_MODE				(1 << 31)
+# define GEN6_GS_VECTOR_MASK_ENABLE			(1 << 30)
+# define GEN6_GS_SAMPLER_COUNT_SHIFT			27
+# define GEN6_GS_BINDING_TABLE_ENTRY_COUNT_SHIFT	18
+# define GEN6_GS_DISPATCH_START_GRF_SHIFT		20
+/* DW4 */
+# define GEN6_GS_URB_READ_LENGTH_SHIFT			11
+# define GEN6_GS_URB_ENTRY_READ_OFFSET_SHIFT		0
+/* DW5 */
+# define GEN6_GS_MAX_THREADS_SHIFT			25
+# define GEN6_GS_STATISTICS_ENABLE			(1 << 10)
+# define GEN6_GS_SO_STATISTICS_ENABLE			(1 << 9)
+# define GEN6_GS_RENDERING_ENABLE			(1 << 8)
+/* DW6 */
+# define GEN6_GS_ENABLE					(1 << 15)
+
 #define CMD_3D_CONSTANT_VS_STATE	      0x7815 /* GEN6+ */
-# define GEN6_VS_BUFFER_3_ENABLE			(1 << 15)
-# define GEN6_VS_BUFFER_2_ENABLE			(1 << 14)
-# define GEN6_VS_BUFFER_1_ENABLE			(1 << 13)
-# define GEN6_VS_BUFFER_0_ENABLE			(1 << 12)
+#define CMD_3D_CONSTANT_GS_STATE	      0x7816 /* GEN6+ */
+# define GEN6_CONSTANT_BUFFER_3_ENABLE			(1 << 15)
+# define GEN6_CONSTANT_BUFFER_2_ENABLE			(1 << 14)
+# define GEN6_CONSTANT_BUFFER_1_ENABLE			(1 << 13)
+# define GEN6_CONSTANT_BUFFER_0_ENABLE			(1 << 12)
 
 #define CMD_DRAW_RECT                 0x7900
 #define CMD_BLEND_CONSTANT_COLOR      0x7901
diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h
index 5066fe151b..c4d1f2556c 100644
--- a/src/mesa/drivers/dri/i965/brw_state.h
+++ b/src/mesa/drivers/dri/i965/brw_state.h
@@ -95,6 +95,7 @@ const struct brw_tracked_state gen6_blend_state;
 const struct brw_tracked_state gen6_cc_state_pointers;
 const struct brw_tracked_state gen6_color_calc_state;
 const struct brw_tracked_state gen6_depth_stencil_state;
+const struct brw_tracked_state gen6_gs_state;
 const struct brw_tracked_state gen6_vs_state;
 
 /**
diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c b/src/mesa/drivers/dri/i965/brw_state_upload.c
index b4b086dec4..dd797c42dd 100644
--- a/src/mesa/drivers/dri/i965/brw_state_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_state_upload.c
@@ -134,6 +134,7 @@ const struct brw_tracked_state *gen6_atoms[] =
    &brw_wm_surfaces,		/* must do before samplers and unit */
 
    &gen6_vs_state,
+   &gen6_gs_state,
 #if 0
    &brw_wm_samplers,
 
@@ -141,7 +142,6 @@ const struct brw_tracked_state *gen6_atoms[] =
    &brw_sf_vp,
    &brw_sf_unit,
    &brw_clip_unit,
-   &brw_gs_unit,
 
    /* Command packets:
     */
diff --git a/src/mesa/drivers/dri/i965/gen6_gs_state.c b/src/mesa/drivers/dri/i965/gen6_gs_state.c
new file mode 100644
index 0000000000..3a16bd368c
--- /dev/null
+++ b/src/mesa/drivers/dri/i965/gen6_gs_state.c
@@ -0,0 +1,74 @@
+/*
+ * Copyright © 2009 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ * Authors:
+ *    Eric Anholt <eric@anholt.net>
+ *
+ */
+
+#include "brw_context.h"
+#include "brw_state.h"
+#include "brw_defines.h"
+#include "brw_util.h"
+#include "main/macros.h"
+#include "main/enums.h"
+#include "intel_batchbuffer.h"
+
+static void
+upload_gs_state(struct brw_context *brw)
+{
+   struct intel_context *intel = &brw->intel;
+
+   BEGIN_BATCH(6);
+   OUT_BATCH(CMD_3D_GS_STATE << 16 | (6 - 2));
+   OUT_BATCH(0); /* prog_bo */
+   /* OUT_RELOC(brw->gs.prog_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0); */
+   OUT_BATCH((0 << GEN6_GS_SAMPLER_COUNT_SHIFT) |
+	     (0 << GEN6_GS_BINDING_TABLE_ENTRY_COUNT_SHIFT));
+   OUT_BATCH(0); /* scratch space base offset */
+   OUT_BATCH((1 << GEN6_GS_DISPATCH_START_GRF_SHIFT) |
+	     (brw->gs.prog_data->urb_read_length << GEN6_GS_URB_READ_LENGTH_SHIFT) |
+	     (0 << GEN6_GS_URB_ENTRY_READ_OFFSET_SHIFT));
+   OUT_BATCH((0 << GEN6_GS_MAX_THREADS_SHIFT) |
+	     GEN6_GS_STATISTICS_ENABLE);
+   ADVANCE_BATCH();
+
+   /* Disable all the constant buffers. */
+   BEGIN_BATCH(5);
+   OUT_BATCH(CMD_3D_CONSTANT_GS_STATE << 16 | (5 - 2));
+   OUT_BATCH(0);
+   OUT_BATCH(0);
+   OUT_BATCH(0);
+   OUT_BATCH(0);
+   ADVANCE_BATCH();
+}
+
+const struct brw_tracked_state gen6_gs_state = {
+   .dirty = {
+      .mesa  = _NEW_TRANSFORM,
+      .brw   = (BRW_NEW_CURBE_OFFSETS |
+		BRW_NEW_URB_FENCE |
+		BRW_NEW_CONTEXT),
+      .cache = CACHE_NEW_GS_PROG
+   },
+   .emit = upload_gs_state,
+};
-- 
cgit v1.2.3


From f58fbcf7618bcc6ef9da8e8939100b14ea4d584b Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Fri, 29 Jan 2010 11:12:18 -0800
Subject: i965: Add untested REJECT_ALL clip state.

---
 src/mesa/drivers/dri/i965/Makefile           |  1 +
 src/mesa/drivers/dri/i965/brw_defines.h      | 21 ++++++++
 src/mesa/drivers/dri/i965/brw_state.h        |  1 +
 src/mesa/drivers/dri/i965/brw_state_upload.c |  3 +-
 src/mesa/drivers/dri/i965/gen6_clip_state.c  | 76 ++++++++++++++++++++++++++++
 5 files changed, 100 insertions(+), 2 deletions(-)
 create mode 100644 src/mesa/drivers/dri/i965/gen6_clip_state.c

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/Makefile b/src/mesa/drivers/dri/i965/Makefile
index fb7ee096d9..3bf14e8a77 100644
--- a/src/mesa/drivers/dri/i965/Makefile
+++ b/src/mesa/drivers/dri/i965/Makefile
@@ -86,6 +86,7 @@ DRIVER_SOURCES = \
 	brw_wm_state.c \
 	brw_wm_surface_state.c \
 	gen6_cc.c \
+	gen6_clip_state.c \
 	gen6_depthstencil.c \
 	gen6_gs_state.c \
 	gen6_vs_state.c
diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h
index 7ba1c77ebe..52960da682 100644
--- a/src/mesa/drivers/dri/i965/brw_defines.h
+++ b/src/mesa/drivers/dri/i965/brw_defines.h
@@ -845,6 +845,27 @@
 /* DW6 */
 # define GEN6_GS_ENABLE					(1 << 15)
 
+#define CMD_3D_CLIP_STATE		      0x7812 /* GEN6+ */
+/* DW1 */
+# define GEN6_CLIP_STATISTICS_ENABLE			(1 << 10)
+/* DW2 */
+# define GEN6_CLIP_ENABLE				(1 << 31)
+# define GEN6_CLIP_API_OGL				(1 << 30)
+# define GEN6_CLIP_XY_TEST				(1 << 28)
+# define GEN6_CLIP_Z_TEST				(1 << 27)
+# define GEN6_CLIP_GB_TEST				(1 << 26)
+# define GEN6_CLIP_MODE_NORMAL				(0 << 13)
+# define GEN6_CLIP_MODE_REJECT_ALL			(3 << 13)
+# define GEN6_CLIP_MODE_ACCEPT_ALL			(4 << 13)
+# define GEN6_CLIP_PERSPECTIVE_DIVIDE_DISABLE		(1 << 9)
+# define GEN6_CLIP_BARYCENTRIC_ENABLE			(1 << 8)
+# define GEN6_CLIP_TRI_PROVOKE_SHIFT			4
+# define GEN6_CLIP_LINE_PROVOKE_SHIFT			2
+# define GEN6_CLIP_TRIFAN_PROVOKE_SHIFT			0
+/* DW3 */
+# define GEN6_CLIP_MIN_POINT_WIDTH_SHIFT		17
+# define GEN6_CLIP_MAX_POINT_WIDTH_SHIFT		6
+
 #define CMD_3D_CONSTANT_VS_STATE	      0x7815 /* GEN6+ */
 #define CMD_3D_CONSTANT_GS_STATE	      0x7816 /* GEN6+ */
 # define GEN6_CONSTANT_BUFFER_3_ENABLE			(1 << 15)
diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h
index c4d1f2556c..596a9cd3a0 100644
--- a/src/mesa/drivers/dri/i965/brw_state.h
+++ b/src/mesa/drivers/dri/i965/brw_state.h
@@ -93,6 +93,7 @@ const struct brw_tracked_state brw_index_buffer;
 const struct brw_tracked_state gen6_binding_table_pointers;
 const struct brw_tracked_state gen6_blend_state;
 const struct brw_tracked_state gen6_cc_state_pointers;
+const struct brw_tracked_state gen6_clip_state;
 const struct brw_tracked_state gen6_color_calc_state;
 const struct brw_tracked_state gen6_depth_stencil_state;
 const struct brw_tracked_state gen6_gs_state;
diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c b/src/mesa/drivers/dri/i965/brw_state_upload.c
index dd797c42dd..9f5d789e1e 100644
--- a/src/mesa/drivers/dri/i965/brw_state_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_state_upload.c
@@ -110,7 +110,6 @@ const struct brw_tracked_state *gen6_atoms[] =
    &brw_wm_input_sizes,
    &brw_vs_prog,
    &brw_gs_prog,
-   &brw_clip_prog,
    &brw_sf_prog,
    &brw_wm_prog,
 
@@ -135,13 +134,13 @@ const struct brw_tracked_state *gen6_atoms[] =
 
    &gen6_vs_state,
    &gen6_gs_state,
+   &gen6_clip_state,
 #if 0
    &brw_wm_samplers,
 
    &brw_wm_unit,
    &brw_sf_vp,
    &brw_sf_unit,
-   &brw_clip_unit,
 
    /* Command packets:
     */
diff --git a/src/mesa/drivers/dri/i965/gen6_clip_state.c b/src/mesa/drivers/dri/i965/gen6_clip_state.c
new file mode 100644
index 0000000000..f34e5f32cc
--- /dev/null
+++ b/src/mesa/drivers/dri/i965/gen6_clip_state.c
@@ -0,0 +1,76 @@
+/*
+ * Copyright © 2009 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ * Authors:
+ *    Eric Anholt <eric@anholt.net>
+ *
+ */
+
+#include "brw_context.h"
+#include "brw_state.h"
+#include "brw_defines.h"
+#include "brw_util.h"
+#include "main/macros.h"
+#include "main/enums.h"
+#include "intel_batchbuffer.h"
+
+static void
+upload_clip_state(struct brw_context *brw)
+{
+   struct intel_context *intel = &brw->intel;
+   GLcontext *ctx = &intel->ctx;
+   uint32_t depth_clamp = 0;
+   uint32_t provoking;
+
+   if (!ctx->Transform.DepthClamp)
+      depth_clamp = GEN6_CLIP_Z_TEST;
+
+   if (ctx->Light.ProvokingVertex == GL_FIRST_VERTEX_CONVENTION) {
+      provoking = 0;
+   } else {
+      provoking =
+	 (2 << GEN6_CLIP_TRI_PROVOKE_SHIFT) |
+	 (2 << GEN6_CLIP_TRIFAN_PROVOKE_SHIFT) |
+	 (1 << GEN6_CLIP_LINE_PROVOKE_SHIFT);
+   }
+
+   BEGIN_BATCH(4);
+   OUT_BATCH(CMD_3D_CLIP_STATE << 16 | (4 - 2));
+   OUT_BATCH(0);
+   OUT_BATCH(GEN6_CLIP_ENABLE |
+	     GEN6_CLIP_API_OGL |
+	     GEN6_CLIP_MODE_REJECT_ALL | /* XXX: debug: get VS working */
+	     GEN6_CLIP_XY_TEST |
+	     depth_clamp |
+	     provoking);
+   OUT_BATCH(0);
+   ADVANCE_BATCH();
+}
+
+const struct brw_tracked_state gen6_clip_state = {
+   .dirty = {
+      .mesa  = _NEW_TRANSFORM,
+      .brw   = BRW_NEW_CONTEXT,
+      .cache = 0
+   },
+   .emit = upload_clip_state,
+};
-- 
cgit v1.2.3


From 98f9666f04eed9ae873fdea20c4c4b9db6cead84 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Thu, 3 Dec 2009 15:04:37 -0800
Subject: i965: Get vp-tri batchbuffers running (no rendering).

---
 src/mesa/drivers/dri/i965/brw_state_upload.c |  2 +-
 src/mesa/drivers/dri/i965/gen6_gs_state.c    | 40 +++++++++++++++++++---------
 src/mesa/drivers/dri/i965/gen6_vs_state.c    |  3 +--
 3 files changed, 29 insertions(+), 16 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c b/src/mesa/drivers/dri/i965/brw_state_upload.c
index 9f5d789e1e..f5446ed73b 100644
--- a/src/mesa/drivers/dri/i965/brw_state_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_state_upload.c
@@ -106,10 +106,10 @@ const struct brw_tracked_state *gen6_atoms[] =
 {
    &brw_check_fallback,
 
-#if 0
    &brw_wm_input_sizes,
    &brw_vs_prog,
    &brw_gs_prog,
+#if 0
    &brw_sf_prog,
    &brw_wm_prog,
 
diff --git a/src/mesa/drivers/dri/i965/gen6_gs_state.c b/src/mesa/drivers/dri/i965/gen6_gs_state.c
index 3a16bd368c..31da0dc088 100644
--- a/src/mesa/drivers/dri/i965/gen6_gs_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_gs_state.c
@@ -38,19 +38,33 @@ upload_gs_state(struct brw_context *brw)
 {
    struct intel_context *intel = &brw->intel;
 
-   BEGIN_BATCH(6);
-   OUT_BATCH(CMD_3D_GS_STATE << 16 | (6 - 2));
-   OUT_BATCH(0); /* prog_bo */
-   /* OUT_RELOC(brw->gs.prog_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0); */
-   OUT_BATCH((0 << GEN6_GS_SAMPLER_COUNT_SHIFT) |
-	     (0 << GEN6_GS_BINDING_TABLE_ENTRY_COUNT_SHIFT));
-   OUT_BATCH(0); /* scratch space base offset */
-   OUT_BATCH((1 << GEN6_GS_DISPATCH_START_GRF_SHIFT) |
-	     (brw->gs.prog_data->urb_read_length << GEN6_GS_URB_READ_LENGTH_SHIFT) |
-	     (0 << GEN6_GS_URB_ENTRY_READ_OFFSET_SHIFT));
-   OUT_BATCH((0 << GEN6_GS_MAX_THREADS_SHIFT) |
-	     GEN6_GS_STATISTICS_ENABLE);
-   ADVANCE_BATCH();
+   if (brw->gs.prog_bo) {
+      BEGIN_BATCH(6);
+      OUT_BATCH(CMD_3D_GS_STATE << 16 | (6 - 2));
+      OUT_RELOC(brw->gs.prog_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0);
+      OUT_BATCH((0 << GEN6_GS_SAMPLER_COUNT_SHIFT) |
+		(0 << GEN6_GS_BINDING_TABLE_ENTRY_COUNT_SHIFT));
+      OUT_BATCH(0); /* scratch space base offset */
+      OUT_BATCH((1 << GEN6_GS_DISPATCH_START_GRF_SHIFT) |
+		(brw->gs.prog_data->urb_read_length << GEN6_GS_URB_READ_LENGTH_SHIFT) |
+		(0 << GEN6_GS_URB_ENTRY_READ_OFFSET_SHIFT));
+      OUT_BATCH((0 << GEN6_GS_MAX_THREADS_SHIFT) |
+		GEN6_GS_STATISTICS_ENABLE);
+      ADVANCE_BATCH();
+   } else {
+      BEGIN_BATCH(6);
+      OUT_BATCH(CMD_3D_GS_STATE << 16 | (6 - 2));
+      OUT_BATCH(0); /* prog_bo */
+      OUT_BATCH((0 << GEN6_GS_SAMPLER_COUNT_SHIFT) |
+		(0 << GEN6_GS_BINDING_TABLE_ENTRY_COUNT_SHIFT));
+      OUT_BATCH(0); /* scratch space base offset */
+      OUT_BATCH((1 << GEN6_GS_DISPATCH_START_GRF_SHIFT) |
+		(0 << GEN6_GS_URB_READ_LENGTH_SHIFT) |
+		(0 << GEN6_GS_URB_ENTRY_READ_OFFSET_SHIFT));
+      OUT_BATCH((0 << GEN6_GS_MAX_THREADS_SHIFT) |
+		GEN6_GS_STATISTICS_ENABLE);
+      ADVANCE_BATCH();
+   }
 
    /* Disable all the constant buffers. */
    BEGIN_BATCH(5);
diff --git a/src/mesa/drivers/dri/i965/gen6_vs_state.c b/src/mesa/drivers/dri/i965/gen6_vs_state.c
index 4caabf32b0..d82319afa7 100644
--- a/src/mesa/drivers/dri/i965/gen6_vs_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_vs_state.c
@@ -40,8 +40,7 @@ upload_vs_state(struct brw_context *brw)
 
    BEGIN_BATCH(6);
    OUT_BATCH(CMD_3D_VS_STATE << 16 | (6 - 2));
-   OUT_BATCH(0); /* prog_bo */
-   /* OUT_RELOC(brw->vs.prog_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0); */
+   OUT_RELOC(brw->vs.prog_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0);
    OUT_BATCH((0 << GEN6_VS_SAMPLER_COUNT_SHIFT) |
 	     (brw->vs.nr_surfaces << GEN6_VS_BINDING_TABLE_ENTRY_COUNT_SHIFT));
    OUT_BATCH(0); /* scratch space base offset */
-- 
cgit v1.2.3


From eda1b50aa10031aeb07071f59fed93304b2fe2ca Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Thu, 3 Dec 2009 15:06:08 -0800
Subject: i965: Try turning on the VS.

---
 src/mesa/drivers/dri/i965/gen6_vs_state.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/gen6_vs_state.c b/src/mesa/drivers/dri/i965/gen6_vs_state.c
index d82319afa7..098a1d0b57 100644
--- a/src/mesa/drivers/dri/i965/gen6_vs_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_vs_state.c
@@ -46,7 +46,8 @@ upload_vs_state(struct brw_context *brw)
    OUT_BATCH(0); /* scratch space base offset */
    OUT_BATCH((1 << GEN6_VS_DISPATCH_START_GRF_SHIFT) |
 	     (brw->vs.prog_data->urb_read_length << GEN6_VS_URB_READ_LENGTH_SHIFT) |
-	     (0 << GEN6_VS_URB_ENTRY_READ_OFFSET_SHIFT));
+	     (0 << GEN6_VS_URB_ENTRY_READ_OFFSET_SHIFT) |
+	     GEN6_VS_ENABLE);
    OUT_BATCH((0 << GEN6_VS_MAX_THREADS_SHIFT) |
 	     GEN6_VS_STATISTICS_ENABLE);
    ADVANCE_BATCH();
-- 
cgit v1.2.3


From 8485e100b81d5cf44cde7af0c7feb79a32bf3dd0 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Thu, 3 Dec 2009 15:20:06 -0800
Subject: i965: Try uploading SNB VS constants.

---
 src/mesa/drivers/dri/i965/gen6_vs_state.c | 61 ++++++++++++++++++++++++++-----
 1 file changed, 52 insertions(+), 9 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/gen6_vs_state.c b/src/mesa/drivers/dri/i965/gen6_vs_state.c
index 098a1d0b57..d33b2b4d7d 100644
--- a/src/mesa/drivers/dri/i965/gen6_vs_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_vs_state.c
@@ -31,12 +31,20 @@
 #include "brw_util.h"
 #include "main/macros.h"
 #include "main/enums.h"
+#include "shader/prog_parameter.h"
+#include "shader/prog_statevars.h"
 #include "intel_batchbuffer.h"
 
 static void
 upload_vs_state(struct brw_context *brw)
 {
    struct intel_context *intel = &brw->intel;
+   GLcontext *ctx = &intel->ctx;
+   const struct brw_vertex_program *vp =
+      brw_vertex_program_const(brw->vertex_program);
+   unsigned int nr_params = vp->program.Base.Parameters->NumParameters;
+   drm_intel_bo *constant_bo;
+   int i;
 
    BEGIN_BATCH(6);
    OUT_BATCH(CMD_3D_VS_STATE << 16 | (6 - 2));
@@ -52,19 +60,54 @@ upload_vs_state(struct brw_context *brw)
 	     GEN6_VS_STATISTICS_ENABLE);
    ADVANCE_BATCH();
 
-   /* Disable all the constant buffers. */
-   BEGIN_BATCH(5);
-   OUT_BATCH(CMD_3D_CONSTANT_VS_STATE | (5 - 2));
-   OUT_BATCH(0);
-   OUT_BATCH(0);
-   OUT_BATCH(0);
-   OUT_BATCH(0);
-   ADVANCE_BATCH();
+   if (vp->use_const_buffer || nr_params == 0) {
+      /* Disable the push constant buffers. */
+      BEGIN_BATCH(5);
+      OUT_BATCH(CMD_3D_CONSTANT_VS_STATE << 16 | (5 - 2));
+      OUT_BATCH(0);
+      OUT_BATCH(0);
+      OUT_BATCH(0);
+      OUT_BATCH(0);
+      ADVANCE_BATCH();
+   } else {
+      if (brw->vertex_program->IsNVProgram)
+	 _mesa_load_tracked_matrices(ctx);
+
+      /* Updates the ParamaterValues[i] pointers for all parameters of the
+       * basic type of PROGRAM_STATE_VAR.
+       */
+      _mesa_load_state_parameters(ctx, vp->program.Base.Parameters);
+
+      constant_bo = drm_intel_bo_alloc(intel->bufmgr, "VS constant_bo",
+				       nr_params * 4 * sizeof(float),
+				       4096);
+      intel_bo_map_gtt_preferred(intel, constant_bo, GL_TRUE);
+      for (i = 0; i < nr_params; i++) {
+	 memcpy((char *)constant_bo->virtual + i * 4 * sizeof(float),
+		vp->program.Base.Parameters->ParameterValues[i],
+		4 * sizeof(float));
+      }
+      intel_bo_unmap_gtt_preferred(intel, constant_bo);
+
+      BEGIN_BATCH(5);
+      OUT_BATCH(CMD_3D_CONSTANT_VS_STATE << 16 |
+		GEN6_CONSTANT_BUFFER_0_ENABLE |
+		(5 - 2));
+      OUT_RELOC(constant_bo,
+		I915_GEM_DOMAIN_RENDER, 0, /* XXX: bad domain */
+		ALIGN(nr_params, 2) / 2 - 1);
+      OUT_BATCH(0);
+      OUT_BATCH(0);
+      OUT_BATCH(0);
+      ADVANCE_BATCH();
+
+      drm_intel_bo_unreference(constant_bo);
+   }
 }
 
 const struct brw_tracked_state gen6_vs_state = {
    .dirty = {
-      .mesa  = _NEW_TRANSFORM,
+      .mesa  = _NEW_TRANSFORM | _NEW_PROGRAM_CONSTANTS,
       .brw   = (BRW_NEW_CURBE_OFFSETS |
                 BRW_NEW_NR_VS_SURFACES |
 		BRW_NEW_URB_FENCE |
-- 
cgit v1.2.3


From 0da50fa67009535577dc84dde21672db5ec45134 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Thu, 3 Dec 2009 15:44:29 -0800
Subject: i965: Try sending prims down the pipeline.

Now things catch on fire.
---
 src/mesa/drivers/dri/i965/brw_draw.c | 4 ----
 1 file changed, 4 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_draw.c b/src/mesa/drivers/dri/i965/brw_draw.c
index 106cd31632..e348d4686b 100644
--- a/src/mesa/drivers/dri/i965/brw_draw.c
+++ b/src/mesa/drivers/dri/i965/brw_draw.c
@@ -124,10 +124,6 @@ static void brw_emit_prim(struct brw_context *brw,
    struct brw_3d_primitive prim_packet;
    struct intel_context *intel = &brw->intel;
 
-   /* Last thing to hook up in the pipeline when brw_state_upload.c is done. */
-   if (IS_GEN6(intel->intelScreen->deviceID))
-      return;
-
    if (INTEL_DEBUG & DEBUG_PRIMS)
       printf("PRIM: %s %d %d\n", _mesa_lookup_enum_by_nr(prim->mode), 
 		   prim->start, prim->count);
-- 
cgit v1.2.3


From c9dc6d425e645f2988118ff51cabe167a0cd3971 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Thu, 3 Dec 2009 17:08:32 -0800
Subject: i965: Set up the SNB URB.

even with vs disabled, still doesn't work.
---
 src/mesa/drivers/dri/i965/Makefile           |  1 +
 src/mesa/drivers/dri/i965/brw_context.h      |  3 +-
 src/mesa/drivers/dri/i965/brw_defines.h      |  6 +++
 src/mesa/drivers/dri/i965/brw_state.h        |  1 +
 src/mesa/drivers/dri/i965/brw_state_upload.c |  2 +-
 src/mesa/drivers/dri/i965/gen6_urb.c         | 81 ++++++++++++++++++++++++++++
 6 files changed, 92 insertions(+), 2 deletions(-)
 create mode 100644 src/mesa/drivers/dri/i965/gen6_urb.c

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/Makefile b/src/mesa/drivers/dri/i965/Makefile
index 3bf14e8a77..35093f014b 100644
--- a/src/mesa/drivers/dri/i965/Makefile
+++ b/src/mesa/drivers/dri/i965/Makefile
@@ -89,6 +89,7 @@ DRIVER_SOURCES = \
 	gen6_clip_state.c \
 	gen6_depthstencil.c \
 	gen6_gs_state.c \
+	gen6_urb.c \
 	gen6_vs_state.c
 
 C_SOURCES = \
diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h
index ea89d4f6fa..c4b68ca05b 100644
--- a/src/mesa/drivers/dri/i965/brw_context.h
+++ b/src/mesa/drivers/dri/i965/brw_context.h
@@ -544,7 +544,8 @@ struct brw_context
       GLuint nr_sf_entries;
       GLuint nr_cs_entries;
 
-/*       GLuint vs_size; */
+      /* gen6 */
+      GLuint vs_size;
 /*       GLuint gs_size; */
 /*       GLuint clip_size; */
 /*       GLuint sf_size; */
diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h
index 52960da682..08eb2b2d91 100644
--- a/src/mesa/drivers/dri/i965/brw_defines.h
+++ b/src/mesa/drivers/dri/i965/brw_defines.h
@@ -812,6 +812,12 @@
 #define CMD_VF_STATISTICS_GM45        0x680b
 #define CMD_3D_CC_STATE_POINTERS      0x780e /* GEN6+ */
 
+#define CMD_URB					0x7805 /* GEN6+ */
+# define GEN6_URB_VS_SIZE_SHIFT				16
+# define GEN6_URB_VS_ENTRIES_SHIFT			0
+# define GEN6_URB_GS_SIZE_SHIFT				8
+# define GEN6_URB_GS_ENTRIES_SHIFT			0
+
 #define CMD_3D_VS_STATE		      0x7810 /* GEN6+ */
 /* DW2 */
 # define GEN6_VS_SPF_MODE				(1 << 31)
diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h
index 596a9cd3a0..11489d477c 100644
--- a/src/mesa/drivers/dri/i965/brw_state.h
+++ b/src/mesa/drivers/dri/i965/brw_state.h
@@ -97,6 +97,7 @@ const struct brw_tracked_state gen6_clip_state;
 const struct brw_tracked_state gen6_color_calc_state;
 const struct brw_tracked_state gen6_depth_stencil_state;
 const struct brw_tracked_state gen6_gs_state;
+const struct brw_tracked_state gen6_urb;
 const struct brw_tracked_state gen6_vs_state;
 
 /**
diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c b/src/mesa/drivers/dri/i965/brw_state_upload.c
index f5446ed73b..fc30e60087 100644
--- a/src/mesa/drivers/dri/i965/brw_state_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_state_upload.c
@@ -118,11 +118,11 @@ const struct brw_tracked_state *gen6_atoms[] =
     * layout.
     */
    &brw_curbe_offsets,
-   &brw_recalculate_urb_fence,
 
    &brw_cc_vp,
 
 #endif
+   &gen6_urb,
    &gen6_blend_state,		/* must do before cc unit */
    &gen6_color_calc_state,	/* must do before cc unit */
    &gen6_depth_stencil_state,	/* must do before cc unit */
diff --git a/src/mesa/drivers/dri/i965/gen6_urb.c b/src/mesa/drivers/dri/i965/gen6_urb.c
new file mode 100644
index 0000000000..dea0aa7100
--- /dev/null
+++ b/src/mesa/drivers/dri/i965/gen6_urb.c
@@ -0,0 +1,81 @@
+/*
+ * Copyright © 2009 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ * Authors:
+ *    Eric Anholt <eric@anholt.net>
+ *
+ */
+
+#include "main/macros.h"
+#include "intel_batchbuffer.h"
+#include "brw_context.h"
+#include "brw_state.h"
+#include "brw_defines.h"
+
+static void
+prepare_urb( struct brw_context *brw )
+{
+   brw->urb.nr_vs_entries = 24;
+   if (brw->gs.prog_bo)
+      brw->urb.nr_gs_entries = 4;
+   else
+      brw->urb.nr_gs_entries = 0;
+   /* CACHE_NEW_VS_PROG */
+   brw->urb.vs_size = MIN2(brw->vs.prog_data->urb_entry_size, 1);
+
+   /* Check that the number of URB rows (8 floats each) allocated is less
+    * than the URB space.
+    */
+   assert((brw->urb.nr_vs_entries +
+	   brw->urb.nr_gs_entries) * brw->urb.vs_size * 8 < 64 * 1024);
+}
+
+static void
+upload_urb(struct brw_context *brw)
+{
+   struct intel_context *intel = &brw->intel;
+
+   assert(brw->urb.nr_vs_entries % 4 == 0);
+   assert(brw->urb.nr_gs_entries % 4 == 0);
+   /* GS requirement */
+   assert(!brw->gs.prog_bo || brw->urb.vs_size < 5);
+
+   intel_batchbuffer_emit_mi_flush(intel->batch);
+
+   BEGIN_BATCH(3);
+   OUT_BATCH(CMD_URB << 16 | (3 - 2));
+   OUT_BATCH(((brw->urb.vs_size - 1) << GEN6_URB_VS_SIZE_SHIFT) |
+	     ((brw->urb.nr_vs_entries) << GEN6_URB_VS_SIZE_SHIFT));
+   OUT_BATCH(((brw->urb.vs_size - 1) << GEN6_URB_GS_SIZE_SHIFT) |
+	     ((brw->urb.nr_gs_entries) << GEN6_URB_GS_SIZE_SHIFT));
+   ADVANCE_BATCH();
+}
+
+const struct brw_tracked_state gen6_urb = {
+   .dirty = {
+      .mesa = 0,
+      .brw = BRW_NEW_CONTEXT,
+      .cache = CACHE_NEW_VS_PROG,
+   },
+   .prepare = prepare_urb,
+   .emit = upload_urb,
+};
-- 
cgit v1.2.3


From ff3997904ab988824e744fdbecde6eb79d9bf40f Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Thu, 3 Dec 2009 16:53:07 -0800
Subject: i965: Reconnect the index/vertex setup.

---
 src/mesa/drivers/dri/i965/brw_defines.h      |  5 ++++
 src/mesa/drivers/dri/i965/brw_draw_upload.c  | 42 +++++++++++++++++++++-------
 src/mesa/drivers/dri/i965/brw_state_upload.c |  5 ++--
 src/mesa/drivers/dri/i965/gen6_vs_state.c    |  3 +-
 4 files changed, 40 insertions(+), 15 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h
index 08eb2b2d91..e280c2ee4e 100644
--- a/src/mesa/drivers/dri/i965/brw_defines.h
+++ b/src/mesa/drivers/dri/i965/brw_defines.h
@@ -784,14 +784,19 @@
 
 #define CMD_VERTEX_BUFFER             0x7808
 # define BRW_VB0_INDEX_SHIFT		27
+# define GEN6_VB0_INDEX_SHIFT		26
 # define BRW_VB0_ACCESS_VERTEXDATA	(0 << 26)
 # define BRW_VB0_ACCESS_INSTANCEDATA	(1 << 26)
+# define GEN6_VB0_ACCESS_VERTEXDATA	(0 << 20)
+# define GEN6_VB0_ACCESS_INSTANCEDATA	(1 << 20)
 # define BRW_VB0_PITCH_SHIFT		0
 
 #define CMD_VERTEX_ELEMENT            0x7809
 # define BRW_VE0_INDEX_SHIFT		27
+# define GEN6_VE0_INDEX_SHIFT		26
 # define BRW_VE0_FORMAT_SHIFT		16
 # define BRW_VE0_VALID			(1 << 26)
+# define GEN6_VE0_VALID			(1 << 25)
 # define BRW_VE0_SRC_OFFSET_SHIFT	0
 # define BRW_VE1_COMPONENT_NOSTORE	0
 # define BRW_VE1_COMPONENT_STORE_SRC	1
diff --git a/src/mesa/drivers/dri/i965/brw_draw_upload.c b/src/mesa/drivers/dri/i965/brw_draw_upload.c
index 106454de4a..e6bfc567af 100644
--- a/src/mesa/drivers/dri/i965/brw_draw_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_draw_upload.c
@@ -503,10 +503,17 @@ static void brw_emit_vertices(struct brw_context *brw)
    if (brw->vb.nr_enabled == 0) {
       BEGIN_BATCH(3);
       OUT_BATCH((CMD_VERTEX_ELEMENT << 16) | 1);
-      OUT_BATCH((0 << BRW_VE0_INDEX_SHIFT) |
-		BRW_VE0_VALID |
-		(BRW_SURFACEFORMAT_R32G32B32A32_FLOAT << BRW_VE0_FORMAT_SHIFT) |
-		(0 << BRW_VE0_SRC_OFFSET_SHIFT));
+      if (IS_GEN6(intel->intelScreen->deviceID)) {
+	 OUT_BATCH((0 << GEN6_VE0_INDEX_SHIFT) |
+		   GEN6_VE0_VALID |
+		   (BRW_SURFACEFORMAT_R32G32B32A32_FLOAT << BRW_VE0_FORMAT_SHIFT) |
+		   (0 << BRW_VE0_SRC_OFFSET_SHIFT));
+      } else {
+	 OUT_BATCH((0 << BRW_VE0_INDEX_SHIFT) |
+		   BRW_VE0_VALID |
+		   (BRW_SURFACEFORMAT_R32G32B32A32_FLOAT << BRW_VE0_FORMAT_SHIFT) |
+		   (0 << BRW_VE0_SRC_OFFSET_SHIFT));
+      }
       OUT_BATCH((BRW_VE1_COMPONENT_STORE_0 << BRW_VE1_COMPONENT_0_SHIFT) |
 		(BRW_VE1_COMPONENT_STORE_0 << BRW_VE1_COMPONENT_1_SHIFT) |
 		(BRW_VE1_COMPONENT_STORE_0 << BRW_VE1_COMPONENT_2_SHIFT) |
@@ -527,9 +534,17 @@ static void brw_emit_vertices(struct brw_context *brw)
 
    for (i = 0; i < brw->vb.nr_enabled; i++) {
       struct brw_vertex_element *input = brw->vb.enabled[i];
+      uint32_t dw0;
 
-      OUT_BATCH((i << BRW_VB0_INDEX_SHIFT) |
-		BRW_VB0_ACCESS_VERTEXDATA |
+      if (IS_GEN6(intel->intelScreen->deviceID)) {
+	 dw0 = GEN6_VB0_ACCESS_VERTEXDATA |
+	    (i << GEN6_VB0_INDEX_SHIFT);
+      } else {
+	 dw0 = BRW_VB0_ACCESS_VERTEXDATA |
+	    (i << BRW_VB0_INDEX_SHIFT);
+      }
+
+      OUT_BATCH(dw0 |
 		(input->stride << BRW_VB0_PITCH_SHIFT));
       OUT_RELOC(input->bo,
 		I915_GEM_DOMAIN_VERTEX, 0,
@@ -565,10 +580,17 @@ static void brw_emit_vertices(struct brw_context *brw)
 	 break;
       }
 
-      OUT_BATCH((i << BRW_VE0_INDEX_SHIFT) |
-		BRW_VE0_VALID |
-		(format << BRW_VE0_FORMAT_SHIFT) |
-		(0 << BRW_VE0_SRC_OFFSET_SHIFT));
+      if (IS_GEN6(intel->intelScreen->deviceID)) {
+	 OUT_BATCH((i << GEN6_VE0_INDEX_SHIFT) |
+		   GEN6_VE0_VALID |
+		   (format << BRW_VE0_FORMAT_SHIFT) |
+		   (0 << BRW_VE0_SRC_OFFSET_SHIFT));
+      } else {
+	 OUT_BATCH((i << BRW_VE0_INDEX_SHIFT) |
+		   BRW_VE0_VALID |
+		   (format << BRW_VE0_FORMAT_SHIFT) |
+		   (0 << BRW_VE0_SRC_OFFSET_SHIFT));
+      }
 
       if (intel->is_ironlake)
           OUT_BATCH((comp0 << BRW_VE1_COMPONENT_0_SHIFT) |
diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c b/src/mesa/drivers/dri/i965/brw_state_upload.c
index fc30e60087..30386ef316 100644
--- a/src/mesa/drivers/dri/i965/brw_state_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_state_upload.c
@@ -163,12 +163,11 @@ const struct brw_tracked_state *gen6_atoms[] =
    &brw_psp_urb_cbs,
 
    &brw_drawing_rect,
+#endif
+
    &brw_indices,
    &brw_index_buffer,
    &brw_vertices,
-
-   &brw_constant_buffer
-#endif
 };
 
 void brw_init_state( struct brw_context *brw )
diff --git a/src/mesa/drivers/dri/i965/gen6_vs_state.c b/src/mesa/drivers/dri/i965/gen6_vs_state.c
index d33b2b4d7d..0202871399 100644
--- a/src/mesa/drivers/dri/i965/gen6_vs_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_vs_state.c
@@ -54,8 +54,7 @@ upload_vs_state(struct brw_context *brw)
    OUT_BATCH(0); /* scratch space base offset */
    OUT_BATCH((1 << GEN6_VS_DISPATCH_START_GRF_SHIFT) |
 	     (brw->vs.prog_data->urb_read_length << GEN6_VS_URB_READ_LENGTH_SHIFT) |
-	     (0 << GEN6_VS_URB_ENTRY_READ_OFFSET_SHIFT) |
-	     GEN6_VS_ENABLE);
+	     (0 << GEN6_VS_URB_ENTRY_READ_OFFSET_SHIFT));
    OUT_BATCH((0 << GEN6_VS_MAX_THREADS_SHIFT) |
 	     GEN6_VS_STATISTICS_ENABLE);
    ADVANCE_BATCH();
-- 
cgit v1.2.3


From 040cf3fcdc3ec717f3d98a37e2f0c19481a856bd Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Thu, 3 Dec 2009 17:25:42 -0800
Subject: i965: Add basic decode of new gen6 packet boundaries.

---
 src/mesa/drivers/dri/intel/intel_decode.c | 6 ++++++
 1 file changed, 6 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/intel/intel_decode.c b/src/mesa/drivers/dri/intel/intel_decode.c
index c3112d980a..5293482b35 100644
--- a/src/mesa/drivers/dri/intel/intel_decode.c
+++ b/src/mesa/drivers/dri/intel/intel_decode.c
@@ -1437,6 +1437,12 @@ decode_3d_965(uint32_t *data, int count, uint32_t hw_offset, int *failures)
 	{ 0x7909, 2, 2, "3DSTATE_GLOBAL_DEPTH_OFFSET_CLAMP" },
 	{ 0x790a, 3, 3, "3DSTATE_AA_LINE_PARAMETERS" },
 	{ 0x7b00, 6, 6, "3DPRIMITIVE" },
+	{ 0x780e, 4, 4, "3DSTATE_CC_STATE_POINTERS" },
+	{ 0x7810, 6, 6, "3DSTATE_VS_STATE" },
+	{ 0x7811, 6, 6, "3DSTATE_GS_STATE" },
+	{ 0x7812, 4, 4, "3DSTATE_CLIP_STATE" },
+	{ 0x7815, 5, 5, "3DSTATE_CONSTANT_VS_STATE" },
+	{ 0x7816, 5, 5, "3DSTATE_CONSTANT_GS_STATE" },
     };
 
     len = (data[0] & 0x0000ffff) + 2;
-- 
cgit v1.2.3


From d512aa3d6d9948f5c294110fdae7a24aaf37051f Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Thu, 3 Dec 2009 18:31:32 -0800
Subject: i965: Fix some defines of gen6 regs from docs comparison.

---
 src/mesa/drivers/dri/i965/brw_defines.h | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h
index e280c2ee4e..f727bf53f7 100644
--- a/src/mesa/drivers/dri/i965/brw_defines.h
+++ b/src/mesa/drivers/dri/i965/brw_defines.h
@@ -829,10 +829,11 @@
 # define GEN6_VS_VECTOR_MASK_ENABLE			(1 << 30)
 # define GEN6_VS_SAMPLER_COUNT_SHIFT			27
 # define GEN6_VS_BINDING_TABLE_ENTRY_COUNT_SHIFT	18
-# define GEN6_VS_DISPATCH_START_GRF_SHIFT		20
 /* DW4 */
+# define GEN6_VS_DISPATCH_START_GRF_SHIFT		20
 # define GEN6_VS_URB_READ_LENGTH_SHIFT			11
-# define GEN6_VS_URB_ENTRY_READ_OFFSET_SHIFT		0
+# define GEN6_VS_URB_ENTRY_READ_OFFSET_SHIFT		4
+/* DW6 */
 # define GEN6_VS_MAX_THREADS_SHIFT			25
 # define GEN6_VS_STATISTICS_ENABLE			(1 << 10)
 # define GEN6_VS_CACHE_DISABLE				(1 << 1)
@@ -844,10 +845,10 @@
 # define GEN6_GS_VECTOR_MASK_ENABLE			(1 << 30)
 # define GEN6_GS_SAMPLER_COUNT_SHIFT			27
 # define GEN6_GS_BINDING_TABLE_ENTRY_COUNT_SHIFT	18
-# define GEN6_GS_DISPATCH_START_GRF_SHIFT		20
 /* DW4 */
 # define GEN6_GS_URB_READ_LENGTH_SHIFT			11
-# define GEN6_GS_URB_ENTRY_READ_OFFSET_SHIFT		0
+# define GEN6_GS_URB_ENTRY_READ_OFFSET_SHIFT		4
+# define GEN6_GS_DISPATCH_START_GRF_SHIFT		0
 /* DW5 */
 # define GEN6_GS_MAX_THREADS_SHIFT			25
 # define GEN6_GS_STATISTICS_ENABLE			(1 << 10)
-- 
cgit v1.2.3


From d971375bc1872cb2d95a710e3d62f5b037fbe7f7 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Fri, 29 Jan 2010 10:42:17 -0800
Subject: i965: Giant pile of flushing to track down SNB bringup issues.

This should go away before we push the code.
---
 src/mesa/drivers/dri/i965/gen6_cc.c         | 2 ++
 src/mesa/drivers/dri/i965/gen6_clip_state.c | 2 ++
 src/mesa/drivers/dri/i965/gen6_gs_state.c   | 2 ++
 src/mesa/drivers/dri/i965/gen6_urb.c        | 2 ++
 src/mesa/drivers/dri/i965/gen6_vs_state.c   | 4 ++++
 5 files changed, 12 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/gen6_cc.c b/src/mesa/drivers/dri/i965/gen6_cc.c
index b1b6dc7db3..ba1e3abe83 100644
--- a/src/mesa/drivers/dri/i965/gen6_cc.c
+++ b/src/mesa/drivers/dri/i965/gen6_cc.c
@@ -273,6 +273,8 @@ static void upload_cc_state_pointers(struct brw_context *brw)
    OUT_RELOC(brw->cc.blend_state_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 1);
    OUT_RELOC(brw->cc.depth_stencil_state_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 1);
    ADVANCE_BATCH();
+
+   intel_batchbuffer_emit_mi_flush(intel->batch);
 }
 
 
diff --git a/src/mesa/drivers/dri/i965/gen6_clip_state.c b/src/mesa/drivers/dri/i965/gen6_clip_state.c
index f34e5f32cc..5ddfa9aad2 100644
--- a/src/mesa/drivers/dri/i965/gen6_clip_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_clip_state.c
@@ -64,6 +64,8 @@ upload_clip_state(struct brw_context *brw)
 	     provoking);
    OUT_BATCH(0);
    ADVANCE_BATCH();
+
+   intel_batchbuffer_emit_mi_flush(intel->batch);
 }
 
 const struct brw_tracked_state gen6_clip_state = {
diff --git a/src/mesa/drivers/dri/i965/gen6_gs_state.c b/src/mesa/drivers/dri/i965/gen6_gs_state.c
index 31da0dc088..47702f7f30 100644
--- a/src/mesa/drivers/dri/i965/gen6_gs_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_gs_state.c
@@ -74,6 +74,8 @@ upload_gs_state(struct brw_context *brw)
    OUT_BATCH(0);
    OUT_BATCH(0);
    ADVANCE_BATCH();
+
+   intel_batchbuffer_emit_mi_flush(intel->batch);
 }
 
 const struct brw_tracked_state gen6_gs_state = {
diff --git a/src/mesa/drivers/dri/i965/gen6_urb.c b/src/mesa/drivers/dri/i965/gen6_urb.c
index dea0aa7100..55f7ac7727 100644
--- a/src/mesa/drivers/dri/i965/gen6_urb.c
+++ b/src/mesa/drivers/dri/i965/gen6_urb.c
@@ -68,6 +68,8 @@ upload_urb(struct brw_context *brw)
    OUT_BATCH(((brw->urb.vs_size - 1) << GEN6_URB_GS_SIZE_SHIFT) |
 	     ((brw->urb.nr_gs_entries) << GEN6_URB_GS_SIZE_SHIFT));
    ADVANCE_BATCH();
+
+   intel_batchbuffer_emit_mi_flush(intel->batch);
 }
 
 const struct brw_tracked_state gen6_urb = {
diff --git a/src/mesa/drivers/dri/i965/gen6_vs_state.c b/src/mesa/drivers/dri/i965/gen6_vs_state.c
index 0202871399..ba00e4e1fb 100644
--- a/src/mesa/drivers/dri/i965/gen6_vs_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_vs_state.c
@@ -59,6 +59,8 @@ upload_vs_state(struct brw_context *brw)
 	     GEN6_VS_STATISTICS_ENABLE);
    ADVANCE_BATCH();
 
+   intel_batchbuffer_emit_mi_flush(intel->batch);
+
    if (vp->use_const_buffer || nr_params == 0) {
       /* Disable the push constant buffers. */
       BEGIN_BATCH(5);
@@ -102,6 +104,8 @@ upload_vs_state(struct brw_context *brw)
 
       drm_intel_bo_unreference(constant_bo);
    }
+
+   intel_batchbuffer_emit_mi_flush(intel->batch);
 }
 
 const struct brw_tracked_state gen6_vs_state = {
-- 
cgit v1.2.3


From 2c3d6f8e3e714451c436d5496167747e9311c3df Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Thu, 3 Dec 2009 18:52:35 -0800
Subject: i965: Free gen6 state BOs on context destroy.

---
 src/mesa/drivers/dri/i965/brw_vtbl.c | 3 +++
 1 file changed, 3 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_vtbl.c b/src/mesa/drivers/dri/i965/brw_vtbl.c
index 0b0be02dd2..27a2a3e8a7 100644
--- a/src/mesa/drivers/dri/i965/brw_vtbl.c
+++ b/src/mesa/drivers/dri/i965/brw_vtbl.c
@@ -102,6 +102,9 @@ static void brw_destroy_context( struct intel_context *intel )
    dri_bo_release(&brw->cc.prog_bo);
    dri_bo_release(&brw->cc.state_bo);
    dri_bo_release(&brw->cc.vp_bo);
+   dri_bo_release(&brw->cc.blend_state_bo);
+   dri_bo_release(&brw->cc.depth_stencil_state_bo);
+   dri_bo_release(&brw->cc.color_calc_state_bo);
 }
 
 
-- 
cgit v1.2.3


From a38096aa94ef62dba73792f1680098059b697662 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Mon, 14 Dec 2009 14:11:14 -0800
Subject: i965: Set the state base address on Sandybridge.

---
 src/mesa/drivers/dri/i965/brw_misc_state.c   | 15 ++++++++++++++-
 src/mesa/drivers/dri/i965/brw_state_upload.c |  3 +++
 2 files changed, 17 insertions(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_misc_state.c b/src/mesa/drivers/dri/i965/brw_misc_state.c
index 7d9e793ff2..c36a287d81 100644
--- a/src/mesa/drivers/dri/i965/brw_misc_state.c
+++ b/src/mesa/drivers/dri/i965/brw_misc_state.c
@@ -559,7 +559,20 @@ static void upload_state_base_address( struct brw_context *brw )
    /* Output the structure (brw_state_base_address) directly to the
     * batchbuffer, so we can emit relocations inline.
     */
-   if (intel->is_ironlake) {
+   if (intel->gen >= 6) {
+       BEGIN_BATCH(10);
+       OUT_BATCH(CMD_STATE_BASE_ADDRESS << 16 | (10 - 2));
+       OUT_BATCH(1); /* General state base address */
+       OUT_BATCH(1); /* Surface state base address */
+       OUT_BATCH(1); /* Dynamic state base address */
+       OUT_BATCH(1); /* Indirect object base address */
+       OUT_BATCH(1); /* Instruction base address */
+       OUT_BATCH(1); /* General state upper bound */
+       OUT_BATCH(1); /* Dynamic state upper bound */
+       OUT_BATCH(1); /* Indirect object upper bound */
+       OUT_BATCH(1); /* Instruction access upper bound */
+       ADVANCE_BATCH();
+   } else if (intel->is_ironlake) {
        BEGIN_BATCH(8);
        OUT_BATCH(CMD_STATE_BASE_ADDRESS << 16 | (8 - 2));
        OUT_BATCH(1); /* General state base address */
diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c b/src/mesa/drivers/dri/i965/brw_state_upload.c
index 30386ef316..30a36956e2 100644
--- a/src/mesa/drivers/dri/i965/brw_state_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_state_upload.c
@@ -145,8 +145,11 @@ const struct brw_tracked_state *gen6_atoms[] =
    /* Command packets:
     */
    &brw_invarient_state,
+#endif
+
    &brw_state_base_address,
 
+#if 0
    &brw_binding_table_pointers,
    &brw_blend_constant_color,
 #endif
-- 
cgit v1.2.3


From 93fcfc8369cc3fa42f6ba577c26474464f21e6ad Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Mon, 14 Dec 2009 14:17:00 -0800
Subject: i965: Fix up the VF stats packet header.

---
 src/mesa/drivers/dri/i965/brw_context.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c
index 2ca29b7ae1..3614149966 100644
--- a/src/mesa/drivers/dri/i965/brw_context.c
+++ b/src/mesa/drivers/dri/i965/brw_context.c
@@ -150,7 +150,7 @@ GLboolean brwCreateContext( const __GLcontextModes *mesaVis,
       MIN2(ctx->Const.FragmentProgram.MaxNativeParameters,
 	   ctx->Const.FragmentProgram.MaxEnvParams);
 
-   if (intel->is_ironlake || intel->is_g4x) {
+   if (intel->is_ironlake || intel->is_g4x || intel->gen >= 6) {
       brw->CMD_VF_STATISTICS = CMD_VF_STATISTICS_GM45;
       brw->CMD_PIPELINE_SELECT = CMD_PIPELINE_SELECT_GM45;
       brw->has_surface_tile_offset = GL_TRUE;
-- 
cgit v1.2.3


From 64e0c586a74553b2941f18feb199d8cddb192102 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Thu, 17 Dec 2009 08:20:32 -0800
Subject: i965: Add Sandybridge scissor state.

---
 src/mesa/drivers/dri/i965/Makefile             |   1 +
 src/mesa/drivers/dri/i965/brw_context.h        |   2 +-
 src/mesa/drivers/dri/i965/brw_defines.h        |   2 +
 src/mesa/drivers/dri/i965/brw_state.h          |   1 +
 src/mesa/drivers/dri/i965/brw_state_upload.c   |   3 +
 src/mesa/drivers/dri/i965/brw_structs.h        |   5 ++
 src/mesa/drivers/dri/i965/gen6_scissor_state.c | 108 +++++++++++++++++++++++++
 7 files changed, 121 insertions(+), 1 deletion(-)
 create mode 100644 src/mesa/drivers/dri/i965/gen6_scissor_state.c

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/Makefile b/src/mesa/drivers/dri/i965/Makefile
index 35093f014b..9426ffc0da 100644
--- a/src/mesa/drivers/dri/i965/Makefile
+++ b/src/mesa/drivers/dri/i965/Makefile
@@ -89,6 +89,7 @@ DRIVER_SOURCES = \
 	gen6_clip_state.c \
 	gen6_depthstencil.c \
 	gen6_gs_state.c \
+	gen6_scissor_state.c \
 	gen6_urb.c \
 	gen6_vs_state.c
 
diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h
index c4b68ca05b..d6fc37e4d8 100644
--- a/src/mesa/drivers/dri/i965/brw_context.h
+++ b/src/mesa/drivers/dri/i965/brw_context.h
@@ -293,7 +293,7 @@ enum brw_cache_id {
    BRW_WM_UNIT,
    BRW_SF_PROG,
    BRW_SF_VP,
-   BRW_SF_UNIT,
+   BRW_SF_UNIT, /* scissor state on gen6 */
    BRW_VS_UNIT,
    BRW_VS_PROG,
    BRW_GS_UNIT,
diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h
index f727bf53f7..b11ec7b165 100644
--- a/src/mesa/drivers/dri/i965/brw_defines.h
+++ b/src/mesa/drivers/dri/i965/brw_defines.h
@@ -823,6 +823,8 @@
 # define GEN6_URB_GS_SIZE_SHIFT				8
 # define GEN6_URB_GS_ENTRIES_SHIFT			0
 
+#define CMD_3D_SCISSOR_STATE_POINTERS		0x780f /* GEN6+ */
+
 #define CMD_3D_VS_STATE		      0x7810 /* GEN6+ */
 /* DW2 */
 # define GEN6_VS_SPF_MODE				(1 << 31)
diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h
index 11489d477c..25e261dd15 100644
--- a/src/mesa/drivers/dri/i965/brw_state.h
+++ b/src/mesa/drivers/dri/i965/brw_state.h
@@ -97,6 +97,7 @@ const struct brw_tracked_state gen6_clip_state;
 const struct brw_tracked_state gen6_color_calc_state;
 const struct brw_tracked_state gen6_depth_stencil_state;
 const struct brw_tracked_state gen6_gs_state;
+const struct brw_tracked_state gen6_scissor_state;
 const struct brw_tracked_state gen6_urb;
 const struct brw_tracked_state gen6_vs_state;
 
diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c b/src/mesa/drivers/dri/i965/brw_state_upload.c
index 30a36956e2..d36cc3aa1b 100644
--- a/src/mesa/drivers/dri/i965/brw_state_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_state_upload.c
@@ -139,6 +139,9 @@ const struct brw_tracked_state *gen6_atoms[] =
    &brw_wm_samplers,
 
    &brw_wm_unit,
+#endif
+   &gen6_scissor_state,
+#if 0
    &brw_sf_vp,
    &brw_sf_unit,
 
diff --git a/src/mesa/drivers/dri/i965/brw_structs.h b/src/mesa/drivers/dri/i965/brw_structs.h
index 10c0c62202..87d5c06cdc 100644
--- a/src/mesa/drivers/dri/i965/brw_structs.h
+++ b/src/mesa/drivers/dri/i965/brw_structs.h
@@ -909,6 +909,11 @@ struct brw_sf_unit_state
 
 };
 
+struct gen6_scissor_state
+{
+   GLuint ymin, xmin;
+   GLuint ymax, xmax;
+};
 
 struct brw_gs_unit_state
 {
diff --git a/src/mesa/drivers/dri/i965/gen6_scissor_state.c b/src/mesa/drivers/dri/i965/gen6_scissor_state.c
new file mode 100644
index 0000000000..2d36f0056d
--- /dev/null
+++ b/src/mesa/drivers/dri/i965/gen6_scissor_state.c
@@ -0,0 +1,108 @@
+/*
+ * Copyright © 2009 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ * Authors:
+ *    Eric Anholt <eric@anholt.net>
+ *
+ */
+
+#include "brw_context.h"
+#include "brw_state.h"
+#include "brw_defines.h"
+#include "brw_util.h"
+#include "intel_batchbuffer.h"
+#include "main/macros.h"
+#include "main/enums.h"
+
+static void
+prepare_scissor_state(struct brw_context *brw)
+{
+   GLcontext *ctx = &brw->intel.ctx;
+   const GLboolean render_to_fbo = (ctx->DrawBuffer->Name != 0);
+   struct gen6_scissor_state scissor;
+
+   /* _NEW_SCISSOR | _NEW_BUFFERS | _NEW_VIEWPORT */
+
+   /* The scissor only needs to handle the intersection of drawable and
+    * scissor rect.  Clipping to the boundaries of static shared buffers
+    * for front/back/depth is covered by looping over cliprects in brw_draw.c.
+    *
+    * Note that the hardware's coordinates are inclusive, while Mesa's min is
+    * inclusive but max is exclusive.
+    */
+   if (render_to_fbo) {
+      /* texmemory: Y=0=bottom */
+      scissor.xmin = ctx->DrawBuffer->_Xmin;
+      scissor.xmax = ctx->DrawBuffer->_Xmax - 1;
+      scissor.ymin = ctx->DrawBuffer->_Ymin;
+      scissor.ymax = ctx->DrawBuffer->_Ymax - 1;
+   }
+   else {
+      /* memory: Y=0=top */
+      scissor.xmin = ctx->DrawBuffer->_Xmin;
+      scissor.xmax = ctx->DrawBuffer->_Xmax - 1;
+      scissor.ymin = ctx->DrawBuffer->Height - ctx->DrawBuffer->_Ymax;
+      scissor.ymax = ctx->DrawBuffer->Height - ctx->DrawBuffer->_Ymin - 1;
+   }
+
+   drm_intel_bo_unreference(brw->sf.state_bo);
+   brw->sf.state_bo = brw_cache_data(&brw->cache, BRW_SF_UNIT,
+				     &scissor, sizeof(scissor),
+				     NULL, 0);
+}
+
+const struct brw_tracked_state gen6_scissor_state = {
+   .dirty = {
+      .mesa = _NEW_SCISSOR | _NEW_BUFFERS | _NEW_VIEWPORT,
+      .brw = 0,
+      .cache = 0,
+   },
+   .prepare = prepare_scissor_state,
+};
+
+static void upload_scissor_state_pointers(struct brw_context *brw)
+{
+   struct intel_context *intel = &brw->intel;
+
+   BEGIN_BATCH(2);
+   OUT_BATCH(CMD_3D_SCISSOR_STATE_POINTERS << 16 | (2 - 2));
+   OUT_RELOC(brw->sf.state_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 1);
+   ADVANCE_BATCH();
+
+   intel_batchbuffer_emit_mi_flush(intel->batch);
+}
+
+
+static void prepare_scissor_state_pointers(struct brw_context *brw)
+{
+   brw_add_validated_bo(brw, brw->sf.state_bo);
+}
+
+const struct brw_tracked_state gen6_scissor_state_pointers = {
+   .dirty = {
+      .mesa = 0,
+      .brw = BRW_NEW_BATCH,
+      .cache = CACHE_NEW_SF_UNIT
+   },
+   .prepare = prepare_scissor_state_pointers,
+   .emit = upload_scissor_state_pointers,
+};
-- 
cgit v1.2.3


From c9065cd61fd43a507ae3100d7c0ab957672cab70 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Thu, 17 Dec 2009 08:23:37 -0800
Subject: i965: Enable DRAWING_RECTANGLE emit on Sandybridge.

---
 src/mesa/drivers/dri/i965/brw_state_upload.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c b/src/mesa/drivers/dri/i965/brw_state_upload.c
index d36cc3aa1b..086f82c992 100644
--- a/src/mesa/drivers/dri/i965/brw_state_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_state_upload.c
@@ -167,9 +167,9 @@ const struct brw_tracked_state *gen6_atoms[] =
    &brw_aa_line_parameters,
 
    &brw_psp_urb_cbs,
+#endif
 
    &brw_drawing_rect,
-#endif
 
    &brw_indices,
    &brw_index_buffer,
-- 
cgit v1.2.3


From 1ae0cb5f286bbba10e99c8e3bc1c55d2aeb38b59 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Thu, 17 Dec 2009 09:38:50 -0800
Subject: i965: Add Sandybridge viewport setup.

---
 src/mesa/drivers/dri/i965/Makefile              |   1 +
 src/mesa/drivers/dri/i965/brw_defines.h         |   5 +
 src/mesa/drivers/dri/i965/brw_state.h           |   4 +
 src/mesa/drivers/dri/i965/brw_state_upload.c    |   8 +-
 src/mesa/drivers/dri/i965/brw_structs.h         |   9 ++
 src/mesa/drivers/dri/i965/gen6_viewport_state.c | 175 ++++++++++++++++++++++++
 6 files changed, 200 insertions(+), 2 deletions(-)
 create mode 100644 src/mesa/drivers/dri/i965/gen6_viewport_state.c

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/Makefile b/src/mesa/drivers/dri/i965/Makefile
index 9426ffc0da..32eb3f8fcd 100644
--- a/src/mesa/drivers/dri/i965/Makefile
+++ b/src/mesa/drivers/dri/i965/Makefile
@@ -91,6 +91,7 @@ DRIVER_SOURCES = \
 	gen6_gs_state.c \
 	gen6_scissor_state.c \
 	gen6_urb.c \
+	gen6_viewport_state.c \
 	gen6_vs_state.c
 
 C_SOURCES = \
diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h
index b11ec7b165..3201de601a 100644
--- a/src/mesa/drivers/dri/i965/brw_defines.h
+++ b/src/mesa/drivers/dri/i965/brw_defines.h
@@ -823,6 +823,11 @@
 # define GEN6_URB_GS_SIZE_SHIFT				8
 # define GEN6_URB_GS_ENTRIES_SHIFT			0
 
+#define CMD_VIEWPORT_STATE_POINTERS			0x780d /* GEN6+ */
+# define GEN6_CC_VIEWPORT_MODIFY			(1 << 12)
+# define GEN6_SF_VIEWPORT_MODIFY			(1 << 11)
+# define GEN6_CLIP_VIEWPORT_MODIFY			(1 << 10)
+
 #define CMD_3D_SCISSOR_STATE_POINTERS		0x780f /* GEN6+ */
 
 #define CMD_3D_VS_STATE		      0x7810 /* GEN6+ */
diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h
index 25e261dd15..7c5819fc1b 100644
--- a/src/mesa/drivers/dri/i965/brw_state.h
+++ b/src/mesa/drivers/dri/i965/brw_state.h
@@ -93,12 +93,16 @@ const struct brw_tracked_state brw_index_buffer;
 const struct brw_tracked_state gen6_binding_table_pointers;
 const struct brw_tracked_state gen6_blend_state;
 const struct brw_tracked_state gen6_cc_state_pointers;
+const struct brw_tracked_state gen6_cc_vp;
 const struct brw_tracked_state gen6_clip_state;
+const struct brw_tracked_state gen6_clip_vp;
 const struct brw_tracked_state gen6_color_calc_state;
 const struct brw_tracked_state gen6_depth_stencil_state;
 const struct brw_tracked_state gen6_gs_state;
 const struct brw_tracked_state gen6_scissor_state;
+const struct brw_tracked_state gen6_sf_vp;
 const struct brw_tracked_state gen6_urb;
+const struct brw_tracked_state gen6_viewport_state;
 const struct brw_tracked_state gen6_vs_state;
 
 /**
diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c b/src/mesa/drivers/dri/i965/brw_state_upload.c
index 086f82c992..3e6c967f53 100644
--- a/src/mesa/drivers/dri/i965/brw_state_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_state_upload.c
@@ -119,9 +119,13 @@ const struct brw_tracked_state *gen6_atoms[] =
     */
    &brw_curbe_offsets,
 
-   &brw_cc_vp,
 
 #endif
+   &gen6_clip_vp,
+   &gen6_sf_vp,
+   &gen6_cc_vp,
+   &gen6_viewport_state,	/* must do after *_vp stages */
+
    &gen6_urb,
    &gen6_blend_state,		/* must do before cc unit */
    &gen6_color_calc_state,	/* must do before cc unit */
@@ -141,8 +145,8 @@ const struct brw_tracked_state *gen6_atoms[] =
    &brw_wm_unit,
 #endif
    &gen6_scissor_state,
+
 #if 0
-   &brw_sf_vp,
    &brw_sf_unit,
 
    /* Command packets:
diff --git a/src/mesa/drivers/dri/i965/brw_structs.h b/src/mesa/drivers/dri/i965/brw_structs.h
index 87d5c06cdc..3c2adfc87d 100644
--- a/src/mesa/drivers/dri/i965/brw_structs.h
+++ b/src/mesa/drivers/dri/i965/brw_structs.h
@@ -1144,6 +1144,15 @@ struct brw_sf_viewport
    } scissor;
 };
 
+struct gen6_sf_viewport {
+   GLfloat m00;
+   GLfloat m11;
+   GLfloat m22;
+   GLfloat m30;
+   GLfloat m31;
+   GLfloat m32;
+};
+
 /* Documented in the subsystem/shared-functions/sampler chapter...
  */
 struct brw_surface_state
diff --git a/src/mesa/drivers/dri/i965/gen6_viewport_state.c b/src/mesa/drivers/dri/i965/gen6_viewport_state.c
new file mode 100644
index 0000000000..13d2fc1b42
--- /dev/null
+++ b/src/mesa/drivers/dri/i965/gen6_viewport_state.c
@@ -0,0 +1,175 @@
+/*
+ * Copyright © 2009 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ * Authors:
+ *    Eric Anholt <eric@anholt.net>
+ *
+ */
+
+#include "brw_context.h"
+#include "brw_state.h"
+#include "brw_defines.h"
+#include "brw_util.h"
+#include "intel_batchbuffer.h"
+#include "main/macros.h"
+#include "main/enums.h"
+
+/* The clip VP defines the guardband region where expensive clipping is skipped
+ * and fragments are allowed to be generated and clipped out cheaply by the SF.
+ *
+ * By setting it to NDC bounds of [-1,1], we don't do GB clipping.  It's
+ * supposed to cause seams to become visible in apps due to shared edges taking
+ * different clip/no clip paths depending on whether the rest of the prim ends
+ * up in the guardband or not.
+ */
+static void
+prepare_clip_vp(struct brw_context *brw)
+{
+   struct brw_clipper_viewport vp;
+
+   vp.xmin = -1.0;
+   vp.xmax = 1.0;
+   vp.ymin = -1.0;
+   vp.ymax = 1.0;
+
+   drm_intel_bo_unreference(brw->clip.vp_bo);
+   brw->clip.vp_bo = brw_cache_data(&brw->cache, BRW_CLIP_VP,
+				    &vp, sizeof(vp),
+				    NULL, 0);
+}
+
+const struct brw_tracked_state gen6_clip_vp = {
+   .dirty = {
+      .mesa = _NEW_VIEWPORT, /* XXX: not really, but we need nonzero */
+      .brw = 0,
+      .cache = 0,
+   },
+   .prepare = prepare_clip_vp,
+};
+
+static void
+prepare_sf_vp(struct brw_context *brw)
+{
+   GLcontext *ctx = &brw->intel.ctx;
+   const GLfloat depth_scale = 1.0F / ctx->DrawBuffer->_DepthMaxF;
+   struct brw_sf_viewport sfv;
+   GLfloat y_scale, y_bias;
+   const GLboolean render_to_fbo = (ctx->DrawBuffer->Name != 0);
+   const GLfloat *v = ctx->Viewport._WindowMap.m;
+
+   memset(&sfv, 0, sizeof(sfv));
+
+   /* _NEW_BUFFERS */
+   if (render_to_fbo) {
+      y_scale = 1.0;
+      y_bias = 0;
+   } else {
+      y_scale = -1.0;
+      y_bias = ctx->DrawBuffer->Height;
+   }
+
+   /* _NEW_VIEWPORT */
+   sfv.viewport.m00 = v[MAT_SX];
+   sfv.viewport.m11 = v[MAT_SY] * y_scale;
+   sfv.viewport.m22 = v[MAT_SZ] * depth_scale;
+   sfv.viewport.m30 = v[MAT_TX];
+   sfv.viewport.m31 = v[MAT_TY] * y_scale + y_bias;
+   sfv.viewport.m32 = v[MAT_TZ] * depth_scale;
+
+   drm_intel_bo_unreference(brw->sf.vp_bo);
+   brw->sf.vp_bo = brw_cache_data(&brw->cache, BRW_SF_VP,
+				  &sfv, sizeof(sfv),
+				  NULL, 0);
+}
+
+const struct brw_tracked_state gen6_sf_vp = {
+   .dirty = {
+      .mesa = _NEW_VIEWPORT | _NEW_BUFFERS,
+      .brw = 0,
+      .cache = 0,
+   },
+   .prepare = prepare_sf_vp,
+};
+
+static void
+prepare_cc_vp(struct brw_context *brw)
+{
+   GLcontext *ctx = &brw->intel.ctx;
+   struct brw_cc_viewport ccv;
+
+   /* _NEW_TRANSOFORM */
+   if (ctx->Transform.DepthClamp) {
+      /* _NEW_VIEWPORT */
+      ccv.min_depth = MIN2(ctx->Viewport.Near, ctx->Viewport.Far);
+      ccv.max_depth = MAX2(ctx->Viewport.Near, ctx->Viewport.Far);
+   } else {
+      ccv.min_depth = 0.0;
+      ccv.max_depth = 1.0;
+   }
+
+   drm_intel_bo_unreference(brw->cc.vp_bo);
+   brw->cc.vp_bo = brw_cache_data(&brw->cache, BRW_CC_VP, &ccv, sizeof(ccv),
+				  NULL, 0);
+}
+
+const struct brw_tracked_state gen6_cc_vp = {
+   .dirty = {
+      .mesa = _NEW_VIEWPORT | _NEW_TRANSFORM,
+      .brw = 0,
+      .cache = 0,
+   },
+   .prepare = prepare_cc_vp,
+};
+
+static void prepare_viewport_state_pointers(struct brw_context *brw)
+{
+   brw_add_validated_bo(brw, brw->sf.state_bo);
+}
+
+static void upload_viewport_state_pointers(struct brw_context *brw)
+{
+   struct intel_context *intel = &brw->intel;
+
+   BEGIN_BATCH(4);
+   OUT_BATCH(CMD_VIEWPORT_STATE_POINTERS << 16 | (4 - 2) |
+	     GEN6_CC_VIEWPORT_MODIFY |
+	     GEN6_SF_VIEWPORT_MODIFY |
+	     GEN6_CLIP_VIEWPORT_MODIFY);
+   OUT_RELOC(brw->clip.vp_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 1);
+   OUT_RELOC(brw->sf.vp_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 1);
+   OUT_RELOC(brw->cc.vp_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 1);
+   ADVANCE_BATCH();
+
+   intel_batchbuffer_emit_mi_flush(intel->batch);
+}
+
+const struct brw_tracked_state gen6_viewport_state = {
+   .dirty = {
+      .mesa = 0,
+      .brw = BRW_NEW_BATCH,
+      .cache = (CACHE_NEW_CLIP_VP |
+		CACHE_NEW_SF_VP |
+		CACHE_NEW_CC_VP)
+   },
+   .prepare = prepare_viewport_state_pointers,
+   .emit = upload_viewport_state_pointers,
+};
-- 
cgit v1.2.3


From 0fbc0b0c172060ce5dd946fe33a43d9194ab45d0 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Thu, 17 Dec 2009 09:47:53 -0800
Subject: i965: Enable clip stats.

---
 src/mesa/drivers/dri/i965/gen6_clip_state.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/gen6_clip_state.c b/src/mesa/drivers/dri/i965/gen6_clip_state.c
index 5ddfa9aad2..9fabd05341 100644
--- a/src/mesa/drivers/dri/i965/gen6_clip_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_clip_state.c
@@ -55,7 +55,7 @@ upload_clip_state(struct brw_context *brw)
 
    BEGIN_BATCH(4);
    OUT_BATCH(CMD_3D_CLIP_STATE << 16 | (4 - 2));
-   OUT_BATCH(0);
+   OUT_BATCH(GEN6_CLIP_STATISTICS_ENABLE);
    OUT_BATCH(GEN6_CLIP_ENABLE |
 	     GEN6_CLIP_API_OGL |
 	     GEN6_CLIP_MODE_REJECT_ALL | /* XXX: debug: get VS working */
-- 
cgit v1.2.3


From 305b72154f6b05360d64feca4725a2eaa8c48a6e Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Thu, 17 Dec 2009 14:51:42 -0800
Subject: i965: fix typo in SNB GS register defines

---
 src/mesa/drivers/dri/i965/brw_defines.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h
index 3201de601a..c1f041939e 100644
--- a/src/mesa/drivers/dri/i965/brw_defines.h
+++ b/src/mesa/drivers/dri/i965/brw_defines.h
@@ -853,9 +853,9 @@
 # define GEN6_GS_SAMPLER_COUNT_SHIFT			27
 # define GEN6_GS_BINDING_TABLE_ENTRY_COUNT_SHIFT	18
 /* DW4 */
+# define GEN6_GS_DISPATCH_START_GRF_SHIFT		20
 # define GEN6_GS_URB_READ_LENGTH_SHIFT			11
 # define GEN6_GS_URB_ENTRY_READ_OFFSET_SHIFT		4
-# define GEN6_GS_DISPATCH_START_GRF_SHIFT		0
 /* DW5 */
 # define GEN6_GS_MAX_THREADS_SHIFT			25
 # define GEN6_GS_STATISTICS_ENABLE			(1 << 10)
-- 
cgit v1.2.3


From a935cb2acafab199ac5ed4f2484af77be2af6363 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Thu, 17 Dec 2009 15:51:43 -0800
Subject: i965: fix typo in SNB VS defines comment

---
 src/mesa/drivers/dri/i965/brw_defines.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h
index c1f041939e..fcf02e9e3b 100644
--- a/src/mesa/drivers/dri/i965/brw_defines.h
+++ b/src/mesa/drivers/dri/i965/brw_defines.h
@@ -840,7 +840,7 @@
 # define GEN6_VS_DISPATCH_START_GRF_SHIFT		20
 # define GEN6_VS_URB_READ_LENGTH_SHIFT			11
 # define GEN6_VS_URB_ENTRY_READ_OFFSET_SHIFT		4
-/* DW6 */
+/* DW5 */
 # define GEN6_VS_MAX_THREADS_SHIFT			25
 # define GEN6_VS_STATISTICS_ENABLE			(1 << 10)
 # define GEN6_VS_CACHE_DISABLE				(1 << 1)
-- 
cgit v1.2.3


From da577ee8800b940fcf416716c13133cd43c3d035 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Thu, 17 Dec 2009 15:52:17 -0800
Subject: i965: Fix up Sandybridge GS reg definitions

---
 src/mesa/drivers/dri/i965/brw_defines.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h
index fcf02e9e3b..ae16fab566 100644
--- a/src/mesa/drivers/dri/i965/brw_defines.h
+++ b/src/mesa/drivers/dri/i965/brw_defines.h
@@ -853,9 +853,9 @@
 # define GEN6_GS_SAMPLER_COUNT_SHIFT			27
 # define GEN6_GS_BINDING_TABLE_ENTRY_COUNT_SHIFT	18
 /* DW4 */
-# define GEN6_GS_DISPATCH_START_GRF_SHIFT		20
 # define GEN6_GS_URB_READ_LENGTH_SHIFT			11
 # define GEN6_GS_URB_ENTRY_READ_OFFSET_SHIFT		4
+# define GEN6_GS_DISPATCH_START_GRF_SHIFT		0
 /* DW5 */
 # define GEN6_GS_MAX_THREADS_SHIFT			25
 # define GEN6_GS_STATISTICS_ENABLE			(1 << 10)
-- 
cgit v1.2.3


From dd743fa36fa9303c2a2d0e7d3798fdc00ef43287 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Thu, 17 Dec 2009 18:41:18 -0800
Subject: i965: Fixup Sandybridge GS packet from doc updates.

---
 src/mesa/drivers/dri/i965/gen6_gs_state.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/gen6_gs_state.c b/src/mesa/drivers/dri/i965/gen6_gs_state.c
index 47702f7f30..761059c96a 100644
--- a/src/mesa/drivers/dri/i965/gen6_gs_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_gs_state.c
@@ -39,8 +39,8 @@ upload_gs_state(struct brw_context *brw)
    struct intel_context *intel = &brw->intel;
 
    if (brw->gs.prog_bo) {
-      BEGIN_BATCH(6);
-      OUT_BATCH(CMD_3D_GS_STATE << 16 | (6 - 2));
+      BEGIN_BATCH(7);
+      OUT_BATCH(CMD_3D_GS_STATE << 16 | (7 - 2));
       OUT_RELOC(brw->gs.prog_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0);
       OUT_BATCH((0 << GEN6_GS_SAMPLER_COUNT_SHIFT) |
 		(0 << GEN6_GS_BINDING_TABLE_ENTRY_COUNT_SHIFT));
@@ -50,10 +50,11 @@ upload_gs_state(struct brw_context *brw)
 		(0 << GEN6_GS_URB_ENTRY_READ_OFFSET_SHIFT));
       OUT_BATCH((0 << GEN6_GS_MAX_THREADS_SHIFT) |
 		GEN6_GS_STATISTICS_ENABLE);
+      OUT_BATCH(GEN6_GS_ENABLE);
       ADVANCE_BATCH();
    } else {
-      BEGIN_BATCH(6);
-      OUT_BATCH(CMD_3D_GS_STATE << 16 | (6 - 2));
+      BEGIN_BATCH(7);
+      OUT_BATCH(CMD_3D_GS_STATE << 16 | (7 - 2));
       OUT_BATCH(0); /* prog_bo */
       OUT_BATCH((0 << GEN6_GS_SAMPLER_COUNT_SHIFT) |
 		(0 << GEN6_GS_BINDING_TABLE_ENTRY_COUNT_SHIFT));
@@ -63,6 +64,7 @@ upload_gs_state(struct brw_context *brw)
 		(0 << GEN6_GS_URB_ENTRY_READ_OFFSET_SHIFT));
       OUT_BATCH((0 << GEN6_GS_MAX_THREADS_SHIFT) |
 		GEN6_GS_STATISTICS_ENABLE);
+      OUT_BATCH(0);
       ADVANCE_BATCH();
    }
 
-- 
cgit v1.2.3


From 70be48dff6bb68c61285641e4d976bfd53e0f00c Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Fri, 29 Jan 2010 11:03:04 -0800
Subject: i965: Untested Sandybridge SF setup.

---
 src/mesa/drivers/dri/i965/Makefile             |   1 +
 src/mesa/drivers/dri/i965/brw_defines.h        |  70 ++++++++++++
 src/mesa/drivers/dri/i965/brw_state.h          |   1 +
 src/mesa/drivers/dri/i965/brw_state_upload.c   |   7 +-
 src/mesa/drivers/dri/i965/gen6_sf_state.c      | 149 +++++++++++++++++++++++++
 src/mesa/drivers/dri/i965/gen6_vs_state.c      |   3 +-
 src/mesa/drivers/dri/intel/intel_batchbuffer.h |  13 +++
 7 files changed, 238 insertions(+), 6 deletions(-)
 create mode 100644 src/mesa/drivers/dri/i965/gen6_sf_state.c

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/Makefile b/src/mesa/drivers/dri/i965/Makefile
index 32eb3f8fcd..d614fbb6a9 100644
--- a/src/mesa/drivers/dri/i965/Makefile
+++ b/src/mesa/drivers/dri/i965/Makefile
@@ -90,6 +90,7 @@ DRIVER_SOURCES = \
 	gen6_depthstencil.c \
 	gen6_gs_state.c \
 	gen6_scissor_state.c \
+	gen6_sf_state.c \
 	gen6_urb.c \
 	gen6_viewport_state.c \
 	gen6_vs_state.c
diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h
index ae16fab566..f34575355e 100644
--- a/src/mesa/drivers/dri/i965/brw_defines.h
+++ b/src/mesa/drivers/dri/i965/brw_defines.h
@@ -885,6 +885,76 @@
 # define GEN6_CLIP_MIN_POINT_WIDTH_SHIFT		17
 # define GEN6_CLIP_MAX_POINT_WIDTH_SHIFT		6
 
+#define CMD_3D_SF_STATE				0x7813 /* GEN6+ */
+/* DW1 */
+# define GEN6_SF_NUM_OUTPUTS_SHIFT			22
+# define GEN6_SF_SWIZZLE_ENABLE				(1 << 21)
+# define GEN6_SF_POINT_SPRITE_LOWERLEFT			(1 << 20)
+# define GEN6_SF_URB_ENTRY_READ_LENGTH_SHIFT		11
+# define GEN6_SF_URB_ENTRY_READ_OFFSET_SHIFT		4
+/* DW2 */
+# define GEN6_SF_LEGACY_GLOBAL_DEPTH_BIAS		(1 << 11)
+# define GEN6_SF_STATISTICS_ENABLE			(1 << 10)
+# define GEN6_SF_GLOBAL_DEPTH_OFFSET_SOLID		(1 << 9)
+# define GEN6_SF_GLOBAL_DEPTH_OFFSET_WIREFRAME		(1 << 8)
+# define GEN6_SF_GLOBAL_DEPTH_OFFSET_POINT		(1 << 7)
+# define GEN6_SF_FRONT_SOLID				(0 << 5)
+# define GEN6_SF_FRONT_WIREFRAME			(1 << 5)
+# define GEN6_SF_FRONT_POINT				(2 << 5)
+# define GEN6_SF_BACK_SOLID				(0 << 3)
+# define GEN6_SF_BACK_WIREFRAME				(1 << 3)
+# define GEN6_SF_BACK_POINT				(2 << 3)
+# define GEN6_SF_VIEWPORT_TRANSFORM_ENABLE		(1 << 1)
+# define GEN6_SF_WINDING_CCW				(1 << 0)
+/* DW3 */
+# define GEN6_SF_LINE_AA_ENABLE				(1 << 31)
+# define GEN6_SF_CULL_BOTH				(0 << 29)
+# define GEN6_SF_CULL_NONE				(1 << 29)
+# define GEN6_SF_CULL_FRONT				(2 << 29)
+# define GEN6_SF_CULL_BACK				(3 << 29)
+# define GEN6_SF_LINE_WIDTH_SHIFT			18 /* U3.7 */
+# define GEN6_SF_LINE_END_CAP_WIDTH_0_5			(0 << 16)
+# define GEN6_SF_LINE_END_CAP_WIDTH_1_0			(1 << 16)
+# define GEN6_SF_LINE_END_CAP_WIDTH_2_0			(2 << 16)
+# define GEN6_SF_LINE_END_CAP_WIDTH_4_0			(3 << 16)
+# define GEN6_SF_SCISSOR_ENABLE				(1 << 11)
+# define GEN6_SF_MSRAST_OFF_PIXEL			(0 << 8)
+# define GEN6_SF_MSRAST_OFF_PATTERN			(1 << 8)
+# define GEN6_SF_MSRAST_ON_PIXEL			(2 << 8)
+# define GEN6_SF_MSRAST_ON_PATTERN			(3 << 8)
+/* DW4 */
+# define GEN6_SF_TRI_PROVOKE_SHIFT			29
+# define GEN6_SF_LINE_PROVOKE_SHIFT			27
+# define GEN6_SF_TRIFAN_PROVOKE_SHIFT			25
+# define GEN6_SF_LINE_AA_MODE_MANHATTAN			(0 << 14)
+# define GEN6_SF_LINE_AA_MODE_TRUE			(1 << 14)
+# define GEN6_SF_VERTEX_SUBPIXEL_8BITS			(0 << 12)
+# define GEN6_SF_VERTEX_SUBPIXEL_4BITS			(1 << 12)
+# define GEN6_SF_USE_STATE_POINT_WIDTH			(1 << 11)
+# define GEN6_SF_POINT_WIDTH_SHIFT			0 /* U8.3 */
+/* DW5: depth offset constant */
+/* DW6: depth offset scale */
+/* DW7: depth offset clamp */
+/* DW8 */
+# define ATTRIBUTE_1_OVERRIDE_W				(1 << 31)
+# define ATTRIBUTE_1_OVERRIDE_Z				(1 << 30)
+# define ATTRIBUTE_1_OVERRIDE_Y				(1 << 29)
+# define ATTRIBUTE_1_OVERRIDE_X				(1 << 28)
+# define ATTRIBUTE_1_CONST_SOURCE_SHIFT			25
+# define ATTRIBUTE_1_SWIZZLE_SHIFT			22
+# define ATTRIBUTE_1_SOURCE_SHIFT			16
+# define ATTRIBUTE_0_OVERRIDE_W				(1 << 15)
+# define ATTRIBUTE_0_OVERRIDE_Z				(1 << 14)
+# define ATTRIBUTE_0_OVERRIDE_Y				(1 << 13)
+# define ATTRIBUTE_0_OVERRIDE_X				(1 << 12)
+# define ATTRIBUTE_0_CONST_SOURCE_SHIFT			9
+# define ATTRIBUTE_0_SWIZZLE_SHIFT			6
+# define ATTRIBUTE_0_SOURCE_SHIFT			0
+/* DW16: Point sprite texture coordinate enables */
+/* DW17: Constant interpolation enables */
+/* DW18: attr 0-7 wrap shortest enables */
+/* DW19: attr 8-16 wrap shortest enables */
+
 #define CMD_3D_CONSTANT_VS_STATE	      0x7815 /* GEN6+ */
 #define CMD_3D_CONSTANT_GS_STATE	      0x7816 /* GEN6+ */
 # define GEN6_CONSTANT_BUFFER_3_ENABLE			(1 << 15)
diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h
index 7c5819fc1b..f2579d7cdc 100644
--- a/src/mesa/drivers/dri/i965/brw_state.h
+++ b/src/mesa/drivers/dri/i965/brw_state.h
@@ -100,6 +100,7 @@ const struct brw_tracked_state gen6_color_calc_state;
 const struct brw_tracked_state gen6_depth_stencil_state;
 const struct brw_tracked_state gen6_gs_state;
 const struct brw_tracked_state gen6_scissor_state;
+const struct brw_tracked_state gen6_sf_state;
 const struct brw_tracked_state gen6_sf_vp;
 const struct brw_tracked_state gen6_urb;
 const struct brw_tracked_state gen6_viewport_state;
diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c b/src/mesa/drivers/dri/i965/brw_state_upload.c
index 3e6c967f53..9874d725bb 100644
--- a/src/mesa/drivers/dri/i965/brw_state_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_state_upload.c
@@ -110,7 +110,6 @@ const struct brw_tracked_state *gen6_atoms[] =
    &brw_vs_prog,
    &brw_gs_prog,
 #if 0
-   &brw_sf_prog,
    &brw_wm_prog,
 
    /* Once all the programs are done, we know how large urb entry
@@ -118,8 +117,6 @@ const struct brw_tracked_state *gen6_atoms[] =
     * layout.
     */
    &brw_curbe_offsets,
-
-
 #endif
    &gen6_clip_vp,
    &gen6_sf_vp,
@@ -144,11 +141,11 @@ const struct brw_tracked_state *gen6_atoms[] =
 
    &brw_wm_unit,
 #endif
+   &gen6_sf_state,
+
    &gen6_scissor_state,
 
 #if 0
-   &brw_sf_unit,
-
    /* Command packets:
     */
    &brw_invarient_state,
diff --git a/src/mesa/drivers/dri/i965/gen6_sf_state.c b/src/mesa/drivers/dri/i965/gen6_sf_state.c
new file mode 100644
index 0000000000..548cdb9fca
--- /dev/null
+++ b/src/mesa/drivers/dri/i965/gen6_sf_state.c
@@ -0,0 +1,149 @@
+/*
+ * Copyright © 2009 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ * Authors:
+ *    Eric Anholt <eric@anholt.net>
+ *
+ */
+
+#include "brw_context.h"
+#include "brw_state.h"
+#include "brw_defines.h"
+#include "brw_util.h"
+#include "main/macros.h"
+#include "main/enums.h"
+#include "intel_batchbuffer.h"
+
+static void
+upload_sf_state(struct brw_context *brw)
+{
+   struct intel_context *intel = &brw->intel;
+   GLcontext *ctx = &intel->ctx;
+   /* CACHE_NEW_VS_PROG */
+   uint32_t num_inputs = brw_count_bits(brw->vs.prog_data->outputs_written);
+   /* This should probably be FS inputs read */
+   uint32_t num_outputs = brw_count_bits(brw->vs.prog_data->outputs_written);
+   uint32_t dw1, dw2, dw3, dw4;
+   int i;
+   /* _NEW_BUFFER */
+   GLboolean render_to_fbo = brw->intel.ctx.DrawBuffer->Name != 0;
+
+   dw1 =
+      num_outputs << GEN6_SF_NUM_OUTPUTS_SHIFT |
+      num_inputs << GEN6_SF_URB_ENTRY_READ_LENGTH_SHIFT |
+      3 << GEN6_SF_URB_ENTRY_READ_OFFSET_SHIFT;
+   dw2 = GEN6_SF_VIEWPORT_TRANSFORM_ENABLE |
+      GEN6_SF_STATISTICS_ENABLE;
+   dw3 = 0;
+   dw4 = 0;
+
+   /* _NEW_POLYGON */
+   if ((ctx->Polygon.FrontFace == GL_CCW) ^ render_to_fbo)
+      dw2 |= GEN6_SF_WINDING_CCW;
+
+   /* _NEW_SCISSOR */
+   if (ctx->Scissor.Enabled)
+      dw3 |= GEN6_SF_SCISSOR_ENABLE;
+
+   /* _NEW_POLYGON */
+   if (ctx->Polygon.CullFlag) {
+      switch (ctx->Polygon.CullFaceMode) {
+      case GL_FRONT:
+	 dw3 |= GEN6_SF_CULL_BOTH;
+	 break;
+      case GL_BACK:
+	 dw3 |= GEN6_SF_CULL_BACK;
+	 break;
+      case GL_FRONT_AND_BACK:
+	 dw3 |= GEN6_SF_CULL_BOTH;
+	 break;
+      default:
+	 assert(0);
+	 break;
+      }
+   } else {
+      dw3 |= GEN6_SF_CULL_NONE;
+   }
+
+   /* _NEW_LINE */
+   dw3 |= U_FIXED(CLAMP(ctx->Line.Width, 0.0, 7.99), 7) <<
+      GEN6_SF_LINE_WIDTH_SHIFT;
+   if (ctx->Line.SmoothFlag) {
+      dw3 |= GEN6_SF_LINE_AA_ENABLE;
+      dw3 |= GEN6_SF_LINE_AA_MODE_TRUE;
+      dw3 |= GEN6_SF_LINE_END_CAP_WIDTH_1_0;
+   }
+
+   /* _NEW_POINT */
+   if (ctx->Point._Attenuated)
+      dw4 |= GEN6_SF_USE_STATE_POINT_WIDTH;
+
+   dw4 |= U_FIXED(CLAMP(ctx->Point.Size, 0.125, 225.875), 3) <<
+      GEN6_SF_POINT_WIDTH_SHIFT;
+   if (render_to_fbo)
+      dw1 |= GEN6_SF_POINT_SPRITE_LOWERLEFT;
+
+   /* _NEW_LIGHT */
+   if (ctx->Light.ProvokingVertex != GL_FIRST_VERTEX_CONVENTION) {
+      dw4 |=
+	 (2 << GEN6_SF_TRI_PROVOKE_SHIFT) |
+	 (2 << GEN6_SF_TRIFAN_PROVOKE_SHIFT) |
+	 (1 << GEN6_SF_LINE_PROVOKE_SHIFT);
+   } else {
+      dw4 |=
+	 (1 << GEN6_SF_TRIFAN_PROVOKE_SHIFT);
+   }
+
+   BEGIN_BATCH(20);
+   OUT_BATCH(CMD_3D_SF_STATE << 16 | (20 - 2));
+   OUT_BATCH(dw1);
+   OUT_BATCH(dw2);
+   OUT_BATCH(dw3);
+   OUT_BATCH(dw4);
+   OUT_BATCH_F(ctx->Polygon.OffsetUnits * 2); /* constant.  copied from gen4 */
+   OUT_BATCH_F(ctx->Polygon.OffsetFactor); /* scale */
+   OUT_BATCH_F(0.0); /* XXX: global depth offset clamp */
+   for (i = 0; i < 8; i++) {
+      /* attribute overrides */
+      OUT_BATCH(0);
+   }
+   OUT_BATCH(0); /* point sprite texcoord bitmask */
+   OUT_BATCH(0); /* constant interp bitmask */
+   OUT_BATCH(0); /* wrapshortest enables 0-7 */
+   OUT_BATCH(0); /* wrapshortest enables 8-15 */
+   ADVANCE_BATCH();
+
+   intel_batchbuffer_emit_mi_flush(intel->batch);
+}
+
+const struct brw_tracked_state gen6_sf_state = {
+   .dirty = {
+      .mesa  = (_NEW_LIGHT |
+		_NEW_POLYGON |
+		_NEW_LINE |
+		_NEW_SCISSOR |
+		_NEW_BUFFERS),
+      .brw   = BRW_NEW_CONTEXT,
+      .cache = CACHE_NEW_VS_PROG
+   },
+   .emit = upload_sf_state,
+};
diff --git a/src/mesa/drivers/dri/i965/gen6_vs_state.c b/src/mesa/drivers/dri/i965/gen6_vs_state.c
index ba00e4e1fb..0299dc6768 100644
--- a/src/mesa/drivers/dri/i965/gen6_vs_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_vs_state.c
@@ -56,7 +56,8 @@ upload_vs_state(struct brw_context *brw)
 	     (brw->vs.prog_data->urb_read_length << GEN6_VS_URB_READ_LENGTH_SHIFT) |
 	     (0 << GEN6_VS_URB_ENTRY_READ_OFFSET_SHIFT));
    OUT_BATCH((0 << GEN6_VS_MAX_THREADS_SHIFT) |
-	     GEN6_VS_STATISTICS_ENABLE);
+	     GEN6_VS_STATISTICS_ENABLE|
+	     GEN6_VS_ENABLE);
    ADVANCE_BATCH();
 
    intel_batchbuffer_emit_mi_flush(intel->batch);
diff --git a/src/mesa/drivers/dri/intel/intel_batchbuffer.h b/src/mesa/drivers/dri/intel/intel_batchbuffer.h
index b052b724d8..4daada205a 100644
--- a/src/mesa/drivers/dri/intel/intel_batchbuffer.h
+++ b/src/mesa/drivers/dri/intel/intel_batchbuffer.h
@@ -96,6 +96,17 @@ intel_batchbuffer_require_space(struct intel_batchbuffer *batch,
       intel_batchbuffer_flush(batch);
 }
 
+static INLINE uint32_t float_as_int(float f)
+{
+   union {
+      float f;
+      uint32_t d;
+   } fi;
+
+   fi.f = f;
+   return fi.d;
+}
+
 /* Here are the crusty old macros, to be removed:
  */
 #define BATCH_LOCALS
@@ -108,6 +119,8 @@ intel_batchbuffer_require_space(struct intel_batchbuffer *batch,
 } while (0)
 
 #define OUT_BATCH(d) intel_batchbuffer_emit_dword(intel->batch, d)
+#define OUT_BATCH_F(f) intel_batchbuffer_emit_dword(intel->batch,	\
+						    float_as_int(f))
 
 #define OUT_RELOC(buf, read_domains, write_domain, delta) do {		\
    assert((unsigned) (delta) < buf->size);				\
-- 
cgit v1.2.3


From 737fac7ba220e4a2d66a8e2100ae0af620c274df Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Mon, 21 Dec 2009 11:22:14 -0800
Subject: i965: Hook up remaining Sandybridge state packets besides WM.

---
 src/mesa/drivers/dri/i965/brw_misc_state.c   |  4 +++-
 src/mesa/drivers/dri/i965/brw_state_upload.c | 30 ++++++----------------------
 2 files changed, 9 insertions(+), 25 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_misc_state.c b/src/mesa/drivers/dri/i965/brw_misc_state.c
index c36a287d81..b4e7dd547f 100644
--- a/src/mesa/drivers/dri/i965/brw_misc_state.c
+++ b/src/mesa/drivers/dri/i965/brw_misc_state.c
@@ -485,6 +485,8 @@ const struct brw_tracked_state brw_line_stipple = {
 
 static void upload_invarient_state( struct brw_context *brw )
 {
+   struct intel_context *intel = &brw->intel;
+
    {
       /* 0x61040000  Pipeline Select */
       /*     PipelineSelect            : 0 */
@@ -496,7 +498,7 @@ static void upload_invarient_state( struct brw_context *brw )
       BRW_BATCH_STRUCT(brw, &ps);
    }
 
-   {
+   if (intel->gen < 6) {
       struct brw_global_depth_offset_clamp gdo;
       memset(&gdo, 0, sizeof(gdo));
 
diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c b/src/mesa/drivers/dri/i965/brw_state_upload.c
index 9874d725bb..6f214b037e 100644
--- a/src/mesa/drivers/dri/i965/brw_state_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_state_upload.c
@@ -109,18 +109,13 @@ const struct brw_tracked_state *gen6_atoms[] =
    &brw_wm_input_sizes,
    &brw_vs_prog,
    &brw_gs_prog,
-#if 0
    &brw_wm_prog,
 
-   /* Once all the programs are done, we know how large urb entry
-    * sizes need to be and can decide if we need to change the urb
-    * layout.
-    */
-   &brw_curbe_offsets,
-#endif
    &gen6_clip_vp,
    &gen6_sf_vp,
    &gen6_cc_vp,
+
+   /* Command packets: */
    &gen6_viewport_state,	/* must do after *_vp stages */
 
    &gen6_urb,
@@ -133,43 +128,30 @@ const struct brw_tracked_state *gen6_atoms[] =
    &brw_wm_constant_surface,	/* must do before wm surfaces/bind bo */
    &brw_wm_surfaces,		/* must do before samplers and unit */
 
+   &brw_wm_samplers,
+
    &gen6_vs_state,
    &gen6_gs_state,
    &gen6_clip_state,
-#if 0
-   &brw_wm_samplers,
-
-   &brw_wm_unit,
-#endif
    &gen6_sf_state,
+   /* &gen6_wm_state, */
 
    &gen6_scissor_state,
 
-#if 0
-   /* Command packets:
-    */
    &brw_invarient_state,
-#endif
 
    &brw_state_base_address,
 
-#if 0
-   &brw_binding_table_pointers,
-   &brw_blend_constant_color,
-#endif
+   &gen6_binding_table_pointers,
 
    &brw_depthbuffer,
 
-#if 0
    &brw_polygon_stipple,
    &brw_polygon_stipple_offset,
 
    &brw_line_stipple,
    &brw_aa_line_parameters,
 
-   &brw_psp_urb_cbs,
-#endif
-
    &brw_drawing_rect,
 
    &brw_indices,
-- 
cgit v1.2.3


From ab8c37fe18e0367e8718774198a0d0086fde0cf9 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Mon, 21 Dec 2009 11:48:32 -0800
Subject: i965: Untested Sandybridge WM packets.

---
 src/mesa/drivers/dri/i965/Makefile           |   3 +-
 src/mesa/drivers/dri/i965/brw_defines.h      |  62 ++++++++++
 src/mesa/drivers/dri/i965/brw_state.h        |   1 +
 src/mesa/drivers/dri/i965/brw_state_upload.c |   2 +-
 src/mesa/drivers/dri/i965/gen6_wm_state.c    | 162 +++++++++++++++++++++++++++
 5 files changed, 228 insertions(+), 2 deletions(-)
 create mode 100644 src/mesa/drivers/dri/i965/gen6_wm_state.c

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/Makefile b/src/mesa/drivers/dri/i965/Makefile
index d614fbb6a9..f84e87e7e6 100644
--- a/src/mesa/drivers/dri/i965/Makefile
+++ b/src/mesa/drivers/dri/i965/Makefile
@@ -93,7 +93,8 @@ DRIVER_SOURCES = \
 	gen6_sf_state.c \
 	gen6_urb.c \
 	gen6_viewport_state.c \
-	gen6_vs_state.c
+	gen6_vs_state.c \
+	gen6_wm_state.c
 
 C_SOURCES = \
 	$(COMMON_SOURCES) \
diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h
index f34575355e..be32a8fa82 100644
--- a/src/mesa/drivers/dri/i965/brw_defines.h
+++ b/src/mesa/drivers/dri/i965/brw_defines.h
@@ -955,8 +955,70 @@
 /* DW18: attr 0-7 wrap shortest enables */
 /* DW19: attr 8-16 wrap shortest enables */
 
+#define CMD_3D_WM_STATE		      0x7814 /* GEN6+ */
+/* DW1: kernel pointer */
+/* DW2 */
+# define GEN6_WM_SPF_MODE				(1 << 31)
+# define GEN6_WM_VECTOR_MASK_ENABLE			(1 << 30)
+# define GEN6_WM_SAMPLER_COUNT_SHIFT			27
+# define GEN6_WM_BINDING_TABLE_ENTRY_COUNT_SHIFT	18
+/* DW3: scratch space */
+/* DW4 */
+# define GEN6_WM_STATISTICS_ENABLE			(1 << 31)
+# define GEN6_WM_DEPTH_CLEAR				(1 << 30)
+# define GEN6_WM_DEPTH_RESOLVE				(1 << 28)
+# define GEN6_WM_HIERARCHICAL_DEPTH_RESOLVE		(1 << 27)
+# define GEN6_WM_DISPATCH_START_GRF_SHIFT_0		16
+# define GEN6_WM_DISPATCH_START_GRF_SHIFT_1		8
+# define GEN6_WM_DISPATCH_START_GRF_SHIFT_2		0
+/* DW5 */
+# define GEN6_WM_MAX_THREADS_SHIFT			25
+# define GEN6_WM_KILL_ENABLE				(1 << 22)
+# define GEN6_WM_COMPUTED_DEPTH				(1 << 21)
+# define GEN6_WM_USES_SOURCE_DEPTH			(1 << 20)
+# define GEN6_WM_DISPATCH_ENABLE			(1 << 19)
+# define GEN6_WM_LINE_END_CAP_AA_WIDTH_0_5		(0 << 16)
+# define GEN6_WM_LINE_END_CAP_AA_WIDTH_1_0		(1 << 16)
+# define GEN6_WM_LINE_END_CAP_AA_WIDTH_2_0		(2 << 16)
+# define GEN6_WM_LINE_END_CAP_AA_WIDTH_4_0		(3 << 16)
+# define GEN6_WM_LINE_AA_WIDTH_0_5			(0 << 14)
+# define GEN6_WM_LINE_AA_WIDTH_1_0			(1 << 14)
+# define GEN6_WM_LINE_AA_WIDTH_2_0			(2 << 14)
+# define GEN6_WM_LINE_AA_WIDTH_4_0			(3 << 14)
+# define GEN6_WM_POLYGON_STIPPLE_ENABLE			(1 << 13)
+# define GEN6_WM_LINE_STIPPLE_ENABLE			(1 << 12)
+# define GEN6_WM_OMASK_TO_RENDER_TARGET			(1 << 9)
+# define GEN6_WM_USES_SOURCE_W				(1 << 8)
+# define GEN6_WM_DUAL_SOURCE_BLEND_ENABLE		(1 << 7)
+# define GEN6_WM_32_DISPATCH_ENABLE			(1 << 2)
+# define GEN6_WM_16_DISPATCH_ENABLE			(1 << 1)
+# define GEN6_WM_8_DISPATCH_ENABLE			(1 << 0)
+/* DW6 */
+# define GEN6_WM_NUM_SF_OUTPUTS_SHIFT			20
+# define GEN6_WM_POSOFFSET_NONE				(0 << 18)
+# define GEN6_WM_POSOFFSET_CENTROID			(2 << 18)
+# define GEN6_WM_POSOFFSET_SAMPLE			(3 << 18)
+# define GEN6_WM_POSITION_ZW_PIXEL			(0 << 16)
+# define GEN6_WM_POSITION_ZW_CENTROID			(2 << 16)
+# define GEN6_WM_POSITION_ZW_SAMPLE			(3 << 16)
+# define GEN6_WM_NONPERSPECTIVE_SAMPLE_BARYCENTRIC	(1 << 15)
+# define GEN6_WM_NONPERSPECTIVE_CENTROID_BARYCENTRIC	(1 << 14)
+# define GEN6_WM_NONPERSPECTIVE_PIXEL_BARYCENTRIC	(1 << 13)
+# define GEN6_WM_PERSPECTIVE_SAMPLE_BARYCENTRIC		(1 << 12)
+# define GEN6_WM_PERSPECTIVE_CENTROID_BARYCENTRIC	(1 << 11)
+# define GEN6_WM_PERSPECTIVE_PIXEL_BARYCENTRIC		(1 << 10)
+# define GEN6_WM_POINT_RASTRULE_UPPER_RIGHT		(1 << 9)
+# define GEN6_WM_MSRAST_OFF_PIXEL			(0 << 1)
+# define GEN6_WM_MSRAST_OFF_PATTERN			(1 << 1)
+# define GEN6_WM_MSRAST_ON_PIXEL			(2 << 1)
+# define GEN6_WM_MSRAST_ON_PATTERN			(3 << 1)
+# define GEN6_WM_MSDISPMODE_PERPIXEL			(1 << 0)
+/* DW7: kernel 1 pointer */
+/* DW8: kernel 2 pointer */
+
 #define CMD_3D_CONSTANT_VS_STATE	      0x7815 /* GEN6+ */
 #define CMD_3D_CONSTANT_GS_STATE	      0x7816 /* GEN6+ */
+#define CMD_3D_CONSTANT_PS_STATE	      0x7817 /* GEN6+ */
 # define GEN6_CONSTANT_BUFFER_3_ENABLE			(1 << 15)
 # define GEN6_CONSTANT_BUFFER_2_ENABLE			(1 << 14)
 # define GEN6_CONSTANT_BUFFER_1_ENABLE			(1 << 13)
diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h
index f2579d7cdc..990eaf7e67 100644
--- a/src/mesa/drivers/dri/i965/brw_state.h
+++ b/src/mesa/drivers/dri/i965/brw_state.h
@@ -105,6 +105,7 @@ const struct brw_tracked_state gen6_sf_vp;
 const struct brw_tracked_state gen6_urb;
 const struct brw_tracked_state gen6_viewport_state;
 const struct brw_tracked_state gen6_vs_state;
+const struct brw_tracked_state gen6_wm_state;
 
 /**
  * Use same key for WM and VS surfaces.
diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c b/src/mesa/drivers/dri/i965/brw_state_upload.c
index 6f214b037e..824502ca6e 100644
--- a/src/mesa/drivers/dri/i965/brw_state_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_state_upload.c
@@ -134,7 +134,7 @@ const struct brw_tracked_state *gen6_atoms[] =
    &gen6_gs_state,
    &gen6_clip_state,
    &gen6_sf_state,
-   /* &gen6_wm_state, */
+   &gen6_wm_state,
 
    &gen6_scissor_state,
 
diff --git a/src/mesa/drivers/dri/i965/gen6_wm_state.c b/src/mesa/drivers/dri/i965/gen6_wm_state.c
new file mode 100644
index 0000000000..d896f7dcc0
--- /dev/null
+++ b/src/mesa/drivers/dri/i965/gen6_wm_state.c
@@ -0,0 +1,162 @@
+/*
+ * Copyright © 2009 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ * Authors:
+ *    Eric Anholt <eric@anholt.net>
+ *
+ */
+
+#include "brw_context.h"
+#include "brw_state.h"
+#include "brw_defines.h"
+#include "brw_util.h"
+#include "main/macros.h"
+#include "main/enums.h"
+#include "shader/prog_parameter.h"
+#include "shader/prog_statevars.h"
+#include "intel_batchbuffer.h"
+
+static void
+upload_wm_state(struct brw_context *brw)
+{
+   struct intel_context *intel = &brw->intel;
+   GLcontext *ctx = &intel->ctx;
+   const struct brw_fragment_program *fp =
+      brw_fragment_program_const(brw->fragment_program);
+   unsigned int nr_params = fp->program.Base.Parameters->NumParameters;
+   drm_intel_bo *constant_bo;
+   int i;
+   uint32_t dw2, dw4, dw5, dw6;
+
+   dw2 = dw4 = dw5 = dw6 = 0;
+   dw4 |= GEN6_WM_STATISTICS_ENABLE;
+   dw5 |= GEN6_WM_LINE_AA_WIDTH_1_0;
+   dw5 |= GEN6_WM_LINE_END_CAP_AA_WIDTH_0_5;
+
+   /* BRW_NEW_NR_SURFACES */
+   dw2 |= brw->wm.nr_surfaces << GEN6_WM_BINDING_TABLE_ENTRY_COUNT_SHIFT;
+
+   /* CACHE_NEW_SAMPLER */
+   dw2 |= (ALIGN(brw->wm.sampler_count, 4) / 4) << GEN6_WM_SAMPLER_COUNT_SHIFT;
+   dw4 |= (1 << GEN6_WM_DISPATCH_START_GRF_SHIFT_0);
+
+   dw5 |= (40 - 1) << GEN6_WM_MAX_THREADS_SHIFT;
+   dw5 |= GEN6_WM_DISPATCH_ENABLE;
+
+   /* BRW_NEW_FRAGMENT_PROGRAM */
+   if (fp->isGLSL)
+      dw5 |= GEN6_WM_8_DISPATCH_ENABLE;
+   else
+      dw5 |= GEN6_WM_16_DISPATCH_ENABLE;
+
+   /* _NEW_LINE */
+   if (ctx->Line.StippleFlag)
+      dw5 |= GEN6_WM_LINE_STIPPLE_ENABLE;
+
+   /* _NEW_POLYGONSTIPPLE */
+   if (ctx->Polygon.StippleFlag)
+      dw5 |= GEN6_WM_POLYGON_STIPPLE_ENABLE;
+
+   /* BRW_NEW_FRAGMENT_PROGRAM */
+   if (fp->program.Base.InputsRead & (1 << FRAG_ATTRIB_WPOS))
+      dw5 |= GEN6_WM_USES_SOURCE_DEPTH | GEN6_WM_USES_SOURCE_W;
+   if (fp->program.Base.OutputsWritten & BITFIELD64_BIT(FRAG_RESULT_DEPTH))
+      dw5 |= GEN6_WM_COMPUTED_DEPTH;
+
+   /* _NEW_COLOR */
+   if (fp->program.UsesKill || ctx->Color.AlphaEnabled)
+      dw5 |= GEN6_WM_KILL_ENABLE;
+
+   /* This should probably be FS inputs read */
+   dw6 |= brw_count_bits(brw->vs.prog_data->outputs_written) <<
+      GEN6_WM_NUM_SF_OUTPUTS_SHIFT;
+
+   BEGIN_BATCH(9);
+   OUT_BATCH(CMD_3D_WM_STATE << 16 | (9 - 2));
+   OUT_RELOC(brw->wm.prog_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0);
+   OUT_BATCH(dw2);
+   OUT_BATCH(0); /* scratch space base offset */
+   OUT_BATCH(dw4);
+   OUT_BATCH(dw5);
+   OUT_BATCH(dw6);
+   OUT_BATCH(0); /* kernel 1 pointer */
+   OUT_BATCH(0); /* kernel 2 pointer */
+   ADVANCE_BATCH();
+
+   intel_batchbuffer_emit_mi_flush(intel->batch);
+
+   if (fp->use_const_buffer || nr_params == 0) {
+      /* Disable the push constant buffers. */
+      BEGIN_BATCH(5);
+      OUT_BATCH(CMD_3D_CONSTANT_PS_STATE << 16 | (5 - 2));
+      OUT_BATCH(0);
+      OUT_BATCH(0);
+      OUT_BATCH(0);
+      OUT_BATCH(0);
+      ADVANCE_BATCH();
+   } else {
+      /* Updates the ParamaterValues[i] pointers for all parameters of the
+       * basic type of PROGRAM_STATE_VAR.
+       */
+      _mesa_load_state_parameters(ctx, fp->program.Base.Parameters);
+
+      constant_bo = drm_intel_bo_alloc(intel->bufmgr, "WM constant_bo",
+				       nr_params * 4 * sizeof(float),
+				       4096);
+      intel_bo_map_gtt_preferred(intel, constant_bo, GL_TRUE);
+      for (i = 0; i < nr_params; i++) {
+	 memcpy((char *)constant_bo->virtual + i * 4 * sizeof(float),
+		fp->program.Base.Parameters->ParameterValues[i],
+		4 * sizeof(float));
+      }
+      intel_bo_unmap_gtt_preferred(intel, constant_bo);
+
+      BEGIN_BATCH(5);
+      OUT_BATCH(CMD_3D_CONSTANT_PS_STATE << 16 |
+		GEN6_CONSTANT_BUFFER_0_ENABLE |
+		(5 - 2));
+      OUT_RELOC(constant_bo,
+		I915_GEM_DOMAIN_RENDER, 0, /* XXX: bad domain */
+		ALIGN(nr_params, 2) / 2 - 1);
+      OUT_BATCH(0);
+      OUT_BATCH(0);
+      OUT_BATCH(0);
+      ADVANCE_BATCH();
+
+      drm_intel_bo_unreference(constant_bo);
+   }
+
+   intel_batchbuffer_emit_mi_flush(intel->batch);
+}
+
+const struct brw_tracked_state gen6_wm_state = {
+   .dirty = {
+      .mesa  = _NEW_LINE | _NEW_POLYGONSTIPPLE | _NEW_COLOR,
+      .brw   = (BRW_NEW_CURBE_OFFSETS |
+		BRW_NEW_FRAGMENT_PROGRAM |
+                BRW_NEW_NR_WM_SURFACES |
+		BRW_NEW_URB_FENCE |
+		BRW_NEW_BATCH),
+      .cache = CACHE_NEW_SAMPLER
+   },
+   .emit = upload_wm_state,
+};
-- 
cgit v1.2.3


From 591a996ab6a8ef96a46e88317071330d94c4138f Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Mon, 21 Dec 2009 13:08:41 -0800
Subject: i965: Move PIPELINE_SELECT to the top of gen6 3d pipeline setup.

---
 src/mesa/drivers/dri/i965/brw_state_upload.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c b/src/mesa/drivers/dri/i965/brw_state_upload.c
index 824502ca6e..aa83d7ad18 100644
--- a/src/mesa/drivers/dri/i965/brw_state_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_state_upload.c
@@ -116,6 +116,8 @@ const struct brw_tracked_state *gen6_atoms[] =
    &gen6_cc_vp,
 
    /* Command packets: */
+   &brw_invarient_state,
+
    &gen6_viewport_state,	/* must do after *_vp stages */
 
    &gen6_urb,
@@ -138,8 +140,6 @@ const struct brw_tracked_state *gen6_atoms[] =
 
    &gen6_scissor_state,
 
-   &brw_invarient_state,
-
    &brw_state_base_address,
 
    &gen6_binding_table_pointers,
-- 
cgit v1.2.3


From 1489f108f4a9b53b42d3d4123da64ccdb7aafdde Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Mon, 21 Dec 2009 14:28:18 -0800
Subject: i965: Fix up some Sandybridge define checks for the structure rebase.

---
 src/mesa/drivers/dri/i965/brw_draw_upload.c | 6 +++---
 src/mesa/drivers/dri/intel/intel_context.c  | 2 ++
 2 files changed, 5 insertions(+), 3 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_draw_upload.c b/src/mesa/drivers/dri/i965/brw_draw_upload.c
index e6bfc567af..f0a4e8ad65 100644
--- a/src/mesa/drivers/dri/i965/brw_draw_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_draw_upload.c
@@ -536,7 +536,7 @@ static void brw_emit_vertices(struct brw_context *brw)
       struct brw_vertex_element *input = brw->vb.enabled[i];
       uint32_t dw0;
 
-      if (IS_GEN6(intel->intelScreen->deviceID)) {
+      if (intel->gen >= 6) {
 	 dw0 = GEN6_VB0_ACCESS_VERTEXDATA |
 	    (i << GEN6_VB0_INDEX_SHIFT);
       } else {
@@ -549,7 +549,7 @@ static void brw_emit_vertices(struct brw_context *brw)
       OUT_RELOC(input->bo,
 		I915_GEM_DOMAIN_VERTEX, 0,
 		input->offset);
-      if (intel->is_ironlake) {
+      if (intel->is_ironlake || intel->gen >= 6) {
 	 OUT_RELOC(input->bo,
 		   I915_GEM_DOMAIN_VERTEX, 0,
 		   input->bo->size - 1);
@@ -592,7 +592,7 @@ static void brw_emit_vertices(struct brw_context *brw)
 		   (0 << BRW_VE0_SRC_OFFSET_SHIFT));
       }
 
-      if (intel->is_ironlake)
+      if (intel->is_ironlake || intel->gen >= 6)
           OUT_BATCH((comp0 << BRW_VE1_COMPONENT_0_SHIFT) |
                     (comp1 << BRW_VE1_COMPONENT_1_SHIFT) |
                     (comp2 << BRW_VE1_COMPONENT_2_SHIFT) |
diff --git a/src/mesa/drivers/dri/intel/intel_context.c b/src/mesa/drivers/dri/intel/intel_context.c
index 8af7a23385..767ad8c9d2 100644
--- a/src/mesa/drivers/dri/intel/intel_context.c
+++ b/src/mesa/drivers/dri/intel/intel_context.c
@@ -612,6 +612,8 @@ intelInitContext(struct intel_context *intel,
 
    if (IS_GEN6(intel->intelScreen->deviceID)) {
       intel->gen = 6;
+      intel->needs_ff_sync = GL_TRUE;
+      intel->has_luminance_srgb = GL_TRUE;
    } else if (IS_965(intel->intelScreen->deviceID)) {
       intel->gen = 4;
    } else if (IS_9XX(intel->intelScreen->deviceID)) {
-- 
cgit v1.2.3


From 2ab3bf2fa37042386a2d50f60b1d0e32e26b91c2 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Mon, 25 Jan 2010 14:48:06 -0800
Subject: i965: Re-disable the VS.

There's stuff that needs to happen in the ISA before we can play with
actually executing anything in the VS.
---
 src/mesa/drivers/dri/i965/brw_defines.h   | 2 +-
 src/mesa/drivers/dri/i965/gen6_vs_state.c | 3 +--
 2 files changed, 2 insertions(+), 3 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h
index be32a8fa82..50c4d6d0a4 100644
--- a/src/mesa/drivers/dri/i965/brw_defines.h
+++ b/src/mesa/drivers/dri/i965/brw_defines.h
@@ -796,7 +796,7 @@
 # define GEN6_VE0_INDEX_SHIFT		26
 # define BRW_VE0_FORMAT_SHIFT		16
 # define BRW_VE0_VALID			(1 << 26)
-# define GEN6_VE0_VALID			(1 << 25)
+# define GEN6_VE0_VALID			(0 << 25)
 # define BRW_VE0_SRC_OFFSET_SHIFT	0
 # define BRW_VE1_COMPONENT_NOSTORE	0
 # define BRW_VE1_COMPONENT_STORE_SRC	1
diff --git a/src/mesa/drivers/dri/i965/gen6_vs_state.c b/src/mesa/drivers/dri/i965/gen6_vs_state.c
index 0299dc6768..ba00e4e1fb 100644
--- a/src/mesa/drivers/dri/i965/gen6_vs_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_vs_state.c
@@ -56,8 +56,7 @@ upload_vs_state(struct brw_context *brw)
 	     (brw->vs.prog_data->urb_read_length << GEN6_VS_URB_READ_LENGTH_SHIFT) |
 	     (0 << GEN6_VS_URB_ENTRY_READ_OFFSET_SHIFT));
    OUT_BATCH((0 << GEN6_VS_MAX_THREADS_SHIFT) |
-	     GEN6_VS_STATISTICS_ENABLE|
-	     GEN6_VS_ENABLE);
+	     GEN6_VS_STATISTICS_ENABLE);
    ADVANCE_BATCH();
 
    intel_batchbuffer_emit_mi_flush(intel->batch);
-- 
cgit v1.2.3


From f69d46150c308285a518391db02cc9cba0f2a12d Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Mon, 1 Feb 2010 09:04:12 -0800
Subject: i965: Add a couple SNB state packets I saw in other batchbuffer
 dumps.

---
 src/mesa/drivers/dri/i965/brw_defines.h    | 21 ++++++++++++++++++
 src/mesa/drivers/dri/i965/brw_misc_state.c | 34 ++++++++++++++++++++++++++++++
 2 files changed, 55 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h
index 50c4d6d0a4..52cd12df59 100644
--- a/src/mesa/drivers/dri/i965/brw_defines.h
+++ b/src/mesa/drivers/dri/i965/brw_defines.h
@@ -1024,6 +1024,8 @@
 # define GEN6_CONSTANT_BUFFER_1_ENABLE			(1 << 13)
 # define GEN6_CONSTANT_BUFFER_0_ENABLE			(1 << 12)
 
+#define CMD_3D_SAMPLE_MASK			0x7818 /* GEN6+ */
+
 #define CMD_DRAW_RECT                 0x7900
 #define CMD_BLEND_CONSTANT_COLOR      0x7901
 #define CMD_CHROMA_KEY                0x7904
@@ -1034,6 +1036,25 @@
 #define CMD_GLOBAL_DEPTH_OFFSET_CLAMP 0x7909
 #define CMD_AA_LINE_PARAMETERS        0x790a
 
+#define CMD_GS_SVB_INDEX			0x790b /* CTG+ */
+/* DW1 */
+# define SVB_INDEX_SHIFT				29
+# define SVB_LOAD_INTERNAL_VERTEX_COUNT			(1 << 0) /* SNB+ */
+/* DW2: SVB index */
+/* DW3: SVB maximum index */
+
+#define CMD_3D_MULTISAMPLE			0x790d /* SNB+ */
+/* DW1 */
+# define MS_PIXEL_LOCATION_CENTER			(0 << 4)
+# define MS_PIXEL_LOCATION_UPPER_LEFT			(1 << 4)
+# define MS_NUMSAMPLES_1				(0 << 1)
+# define MS_NUMSAMPLES_4				(2 << 1)
+# define MS_NUMSAMPLES_8				(3 << 1)
+
+#define CMD_3D_CLEAR_PARAMS			0x7910 /* ILK+ */
+# define DEPTH_CLEAR_VALID				(1 << 15)
+/* DW1: depth clear value */
+
 #define CMD_PIPE_CONTROL              0x7a00
 
 #define CMD_3D_PRIM                   0x7b00
diff --git a/src/mesa/drivers/dri/i965/brw_misc_state.c b/src/mesa/drivers/dri/i965/brw_misc_state.c
index b4e7dd547f..d030ed41f4 100644
--- a/src/mesa/drivers/dri/i965/brw_misc_state.c
+++ b/src/mesa/drivers/dri/i965/brw_misc_state.c
@@ -314,6 +314,14 @@ static void emit_depthbuffer(struct brw_context *brw)
 
       ADVANCE_BATCH();
    }
+
+   /* Initialize it for safety. */
+   if (intel->gen >= 6) {
+      BEGIN_BATCH(2);
+      OUT_BATCH(CMD_3D_CLEAR_PARAMS << 16 | (2 - 2));
+      OUT_BATCH(0);
+      ADVANCE_BATCH();
+   }
 }
 
 const struct brw_tracked_state brw_depthbuffer = {
@@ -511,6 +519,32 @@ static void upload_invarient_state( struct brw_context *brw )
       BRW_BATCH_STRUCT(brw, &gdo);
    }
 
+   intel_batchbuffer_emit_mi_flush(intel->batch);
+
+   if (intel->gen >= 6) {
+      int i;
+
+      BEGIN_BATCH(3);
+      OUT_BATCH(CMD_3D_MULTISAMPLE << 16 | (3 - 2));
+      OUT_BATCH(MS_PIXEL_LOCATION_CENTER |
+		MS_NUMSAMPLES_1);
+      OUT_BATCH(0); /* positions for 4/8-sample */
+      ADVANCE_BATCH();
+
+      BEGIN_BATCH(2);
+      OUT_BATCH(CMD_3D_SAMPLE_MASK << 16 | (2 - 2));
+      OUT_BATCH(1);
+      ADVANCE_BATCH();
+
+      for (i = 0; i < 4; i++) {
+	 BEGIN_BATCH(4);
+	 OUT_BATCH(CMD_GS_SVB_INDEX << 16 | (4 - 2));
+	 OUT_BATCH(i << SVB_INDEX_SHIFT);
+	 OUT_BATCH(0);
+	 OUT_BATCH(0xffffffff);
+	 ADVANCE_BATCH();
+      }
+   }
 
    /* 0x61020000  State Instruction Pointer */
    {
-- 
cgit v1.2.3


From 5878c841e90a8006715877045aa95a752472eaab Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Mon, 1 Feb 2010 09:41:26 -0800
Subject: i965: Set GS rendering enabled even when the GS stage is disabled.

This is copying the behavior of other drivers.
---
 src/mesa/drivers/dri/i965/gen6_gs_state.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/gen6_gs_state.c b/src/mesa/drivers/dri/i965/gen6_gs_state.c
index 761059c96a..9a4a13810a 100644
--- a/src/mesa/drivers/dri/i965/gen6_gs_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_gs_state.c
@@ -49,7 +49,8 @@ upload_gs_state(struct brw_context *brw)
 		(brw->gs.prog_data->urb_read_length << GEN6_GS_URB_READ_LENGTH_SHIFT) |
 		(0 << GEN6_GS_URB_ENTRY_READ_OFFSET_SHIFT));
       OUT_BATCH((0 << GEN6_GS_MAX_THREADS_SHIFT) |
-		GEN6_GS_STATISTICS_ENABLE);
+		GEN6_GS_STATISTICS_ENABLE |
+		GEN6_GS_RENDERING_ENABLE);
       OUT_BATCH(GEN6_GS_ENABLE);
       ADVANCE_BATCH();
    } else {
@@ -63,7 +64,8 @@ upload_gs_state(struct brw_context *brw)
 		(0 << GEN6_GS_URB_READ_LENGTH_SHIFT) |
 		(0 << GEN6_GS_URB_ENTRY_READ_OFFSET_SHIFT));
       OUT_BATCH((0 << GEN6_GS_MAX_THREADS_SHIFT) |
-		GEN6_GS_STATISTICS_ENABLE);
+		GEN6_GS_STATISTICS_ENABLE |
+		GEN6_GS_RENDERING_ENABLE);
       OUT_BATCH(0);
       ADVANCE_BATCH();
    }
-- 
cgit v1.2.3


From c791f8a1e532834ae7a517c042e9efe262b62233 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Mon, 1 Feb 2010 09:55:18 -0800
Subject: i965: Set up the SNB sampler state pointers.

---
 src/mesa/drivers/dri/i965/Makefile             |  1 +
 src/mesa/drivers/dri/i965/brw_defines.h        |  8 +++
 src/mesa/drivers/dri/i965/brw_state.h          |  1 +
 src/mesa/drivers/dri/i965/brw_state_upload.c   |  1 +
 src/mesa/drivers/dri/i965/gen6_sampler_state.c | 74 ++++++++++++++++++++++++++
 5 files changed, 85 insertions(+)
 create mode 100644 src/mesa/drivers/dri/i965/gen6_sampler_state.c

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/Makefile b/src/mesa/drivers/dri/i965/Makefile
index f84e87e7e6..f98a1a27db 100644
--- a/src/mesa/drivers/dri/i965/Makefile
+++ b/src/mesa/drivers/dri/i965/Makefile
@@ -89,6 +89,7 @@ DRIVER_SOURCES = \
 	gen6_clip_state.c \
 	gen6_depthstencil.c \
 	gen6_gs_state.c \
+	gen6_sampler_state.c \
 	gen6_scissor_state.c \
 	gen6_sf_state.c \
 	gen6_urb.c \
diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h
index 52cd12df59..9ed49e0dc3 100644
--- a/src/mesa/drivers/dri/i965/brw_defines.h
+++ b/src/mesa/drivers/dri/i965/brw_defines.h
@@ -782,6 +782,14 @@
 # define GEN6_BINDING_TABLE_MODIFY_GS	(1 << 9)
 # define GEN6_BINDING_TABLE_MODIFY_PS	(1 << 10)
 
+#define CMD_3D_SAMPLER_STATE_POINTERS			0x7802 /* SNB+ */
+# define PS_SAMPLER_STATE_CHANGE				(1 << 12)
+# define GS_SAMPLER_STATE_CHANGE				(1 << 9)
+# define VS_SAMPLER_STATE_CHANGE				(1 << 8)
+/* DW1: VS */
+/* DW2: GS */
+/* DW3: PS */
+
 #define CMD_VERTEX_BUFFER             0x7808
 # define BRW_VB0_INDEX_SHIFT		27
 # define GEN6_VB0_INDEX_SHIFT		26
diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h
index 990eaf7e67..f790cfabe2 100644
--- a/src/mesa/drivers/dri/i965/brw_state.h
+++ b/src/mesa/drivers/dri/i965/brw_state.h
@@ -99,6 +99,7 @@ const struct brw_tracked_state gen6_clip_vp;
 const struct brw_tracked_state gen6_color_calc_state;
 const struct brw_tracked_state gen6_depth_stencil_state;
 const struct brw_tracked_state gen6_gs_state;
+const struct brw_tracked_state gen6_sampler_state;
 const struct brw_tracked_state gen6_scissor_state;
 const struct brw_tracked_state gen6_sf_state;
 const struct brw_tracked_state gen6_sf_vp;
diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c b/src/mesa/drivers/dri/i965/brw_state_upload.c
index aa83d7ad18..9e54f29f0f 100644
--- a/src/mesa/drivers/dri/i965/brw_state_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_state_upload.c
@@ -131,6 +131,7 @@ const struct brw_tracked_state *gen6_atoms[] =
    &brw_wm_surfaces,		/* must do before samplers and unit */
 
    &brw_wm_samplers,
+   &gen6_sampler_state,
 
    &gen6_vs_state,
    &gen6_gs_state,
diff --git a/src/mesa/drivers/dri/i965/gen6_sampler_state.c b/src/mesa/drivers/dri/i965/gen6_sampler_state.c
new file mode 100644
index 0000000000..641d8859b3
--- /dev/null
+++ b/src/mesa/drivers/dri/i965/gen6_sampler_state.c
@@ -0,0 +1,74 @@
+/*
+ * Copyright © 2010 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ * Authors:
+ *    Eric Anholt <eric@anholt.net>
+ *
+ */
+
+#include "brw_context.h"
+#include "brw_state.h"
+#include "brw_defines.h"
+#include "brw_util.h"
+#include "intel_batchbuffer.h"
+#include "main/macros.h"
+#include "main/enums.h"
+
+static void
+upload_sampler_state_pointers(struct brw_context *brw)
+{
+   struct intel_context *intel = &brw->intel;
+
+   BEGIN_BATCH(4);
+   OUT_BATCH(CMD_3D_SAMPLER_STATE_POINTERS << 16 |
+	     VS_SAMPLER_STATE_CHANGE |
+	     GS_SAMPLER_STATE_CHANGE |
+	     PS_SAMPLER_STATE_CHANGE |
+	     (4 - 2));
+   OUT_BATCH(0); /* VS */
+   OUT_BATCH(0); /* GS */
+   if (brw->wm.sampler_bo)
+      OUT_RELOC(brw->wm.sampler_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 1);
+   else
+      OUT_BATCH(0);
+
+   ADVANCE_BATCH();
+
+   intel_batchbuffer_emit_mi_flush(intel->batch);
+}
+
+
+static void
+prepare_sampler_state_pointers(struct brw_context *brw)
+{
+   brw_add_validated_bo(brw, brw->wm.sampler_bo);
+}
+
+const struct brw_tracked_state gen6_sampler_state = {
+   .dirty = {
+      .mesa = 0,
+      .brw = BRW_NEW_BATCH,
+      .cache = CACHE_NEW_SAMPLER
+   },
+   .prepare = prepare_sampler_state_pointers,
+   .emit = upload_sampler_state_pointers,
+};
-- 
cgit v1.2.3


From 078e7b62f69658e40aedea59cf6f005162a29f83 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Tue, 23 Feb 2010 17:42:20 -0800
Subject: i965: Emit SNB FF unit state after the unit's push constants.

There's a BUN for the WM unit that says WM_STATE must immediately
follow PS_CONSTANTS, which this addresses.  Presumably other units are
roughly the same, too.
---
 src/mesa/drivers/dri/i965/gen6_gs_state.c | 22 ++++----
 src/mesa/drivers/dri/i965/gen6_vs_state.c | 30 +++++------
 src/mesa/drivers/dri/i965/gen6_wm_state.c | 86 +++++++++++++++----------------
 3 files changed, 69 insertions(+), 69 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/gen6_gs_state.c b/src/mesa/drivers/dri/i965/gen6_gs_state.c
index 9a4a13810a..4032605a85 100644
--- a/src/mesa/drivers/dri/i965/gen6_gs_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_gs_state.c
@@ -38,6 +38,17 @@ upload_gs_state(struct brw_context *brw)
 {
    struct intel_context *intel = &brw->intel;
 
+   /* Disable all the constant buffers. */
+   BEGIN_BATCH(5);
+   OUT_BATCH(CMD_3D_CONSTANT_GS_STATE << 16 | (5 - 2));
+   OUT_BATCH(0);
+   OUT_BATCH(0);
+   OUT_BATCH(0);
+   OUT_BATCH(0);
+   ADVANCE_BATCH();
+
+   intel_batchbuffer_emit_mi_flush(intel->batch);
+
    if (brw->gs.prog_bo) {
       BEGIN_BATCH(7);
       OUT_BATCH(CMD_3D_GS_STATE << 16 | (7 - 2));
@@ -69,17 +80,6 @@ upload_gs_state(struct brw_context *brw)
       OUT_BATCH(0);
       ADVANCE_BATCH();
    }
-
-   /* Disable all the constant buffers. */
-   BEGIN_BATCH(5);
-   OUT_BATCH(CMD_3D_CONSTANT_GS_STATE << 16 | (5 - 2));
-   OUT_BATCH(0);
-   OUT_BATCH(0);
-   OUT_BATCH(0);
-   OUT_BATCH(0);
-   ADVANCE_BATCH();
-
-   intel_batchbuffer_emit_mi_flush(intel->batch);
 }
 
 const struct brw_tracked_state gen6_gs_state = {
diff --git a/src/mesa/drivers/dri/i965/gen6_vs_state.c b/src/mesa/drivers/dri/i965/gen6_vs_state.c
index ba00e4e1fb..04fc16e679 100644
--- a/src/mesa/drivers/dri/i965/gen6_vs_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_vs_state.c
@@ -46,21 +46,6 @@ upload_vs_state(struct brw_context *brw)
    drm_intel_bo *constant_bo;
    int i;
 
-   BEGIN_BATCH(6);
-   OUT_BATCH(CMD_3D_VS_STATE << 16 | (6 - 2));
-   OUT_RELOC(brw->vs.prog_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0);
-   OUT_BATCH((0 << GEN6_VS_SAMPLER_COUNT_SHIFT) |
-	     (brw->vs.nr_surfaces << GEN6_VS_BINDING_TABLE_ENTRY_COUNT_SHIFT));
-   OUT_BATCH(0); /* scratch space base offset */
-   OUT_BATCH((1 << GEN6_VS_DISPATCH_START_GRF_SHIFT) |
-	     (brw->vs.prog_data->urb_read_length << GEN6_VS_URB_READ_LENGTH_SHIFT) |
-	     (0 << GEN6_VS_URB_ENTRY_READ_OFFSET_SHIFT));
-   OUT_BATCH((0 << GEN6_VS_MAX_THREADS_SHIFT) |
-	     GEN6_VS_STATISTICS_ENABLE);
-   ADVANCE_BATCH();
-
-   intel_batchbuffer_emit_mi_flush(intel->batch);
-
    if (vp->use_const_buffer || nr_params == 0) {
       /* Disable the push constant buffers. */
       BEGIN_BATCH(5);
@@ -106,6 +91,21 @@ upload_vs_state(struct brw_context *brw)
    }
 
    intel_batchbuffer_emit_mi_flush(intel->batch);
+
+   BEGIN_BATCH(6);
+   OUT_BATCH(CMD_3D_VS_STATE << 16 | (6 - 2));
+   OUT_RELOC(brw->vs.prog_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0);
+   OUT_BATCH((0 << GEN6_VS_SAMPLER_COUNT_SHIFT) |
+	     (brw->vs.nr_surfaces << GEN6_VS_BINDING_TABLE_ENTRY_COUNT_SHIFT));
+   OUT_BATCH(0); /* scratch space base offset */
+   OUT_BATCH((1 << GEN6_VS_DISPATCH_START_GRF_SHIFT) |
+	     (brw->vs.prog_data->urb_read_length << GEN6_VS_URB_READ_LENGTH_SHIFT) |
+	     (0 << GEN6_VS_URB_ENTRY_READ_OFFSET_SHIFT));
+   OUT_BATCH((0 << GEN6_VS_MAX_THREADS_SHIFT) |
+	     GEN6_VS_STATISTICS_ENABLE);
+   ADVANCE_BATCH();
+
+   intel_batchbuffer_emit_mi_flush(intel->batch);
 }
 
 const struct brw_tracked_state gen6_vs_state = {
diff --git a/src/mesa/drivers/dri/i965/gen6_wm_state.c b/src/mesa/drivers/dri/i965/gen6_wm_state.c
index d896f7dcc0..f4ae7ed750 100644
--- a/src/mesa/drivers/dri/i965/gen6_wm_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_wm_state.c
@@ -47,6 +47,49 @@ upload_wm_state(struct brw_context *brw)
    int i;
    uint32_t dw2, dw4, dw5, dw6;
 
+   if (fp->use_const_buffer || nr_params == 0) {
+      /* Disable the push constant buffers. */
+      BEGIN_BATCH(5);
+      OUT_BATCH(CMD_3D_CONSTANT_PS_STATE << 16 | (5 - 2));
+      OUT_BATCH(0);
+      OUT_BATCH(0);
+      OUT_BATCH(0);
+      OUT_BATCH(0);
+      ADVANCE_BATCH();
+   } else {
+      /* Updates the ParamaterValues[i] pointers for all parameters of the
+       * basic type of PROGRAM_STATE_VAR.
+       */
+      _mesa_load_state_parameters(ctx, fp->program.Base.Parameters);
+
+      constant_bo = drm_intel_bo_alloc(intel->bufmgr, "WM constant_bo",
+				       nr_params * 4 * sizeof(float),
+				       4096);
+      intel_bo_map_gtt_preferred(intel, constant_bo, GL_TRUE);
+      for (i = 0; i < nr_params; i++) {
+	 memcpy((char *)constant_bo->virtual + i * 4 * sizeof(float),
+		fp->program.Base.Parameters->ParameterValues[i],
+		4 * sizeof(float));
+      }
+      intel_bo_unmap_gtt_preferred(intel, constant_bo);
+
+      BEGIN_BATCH(5);
+      OUT_BATCH(CMD_3D_CONSTANT_PS_STATE << 16 |
+		GEN6_CONSTANT_BUFFER_0_ENABLE |
+		(5 - 2));
+      OUT_RELOC(constant_bo,
+		I915_GEM_DOMAIN_RENDER, 0, /* XXX: bad domain */
+		ALIGN(nr_params, 2) / 2 - 1);
+      OUT_BATCH(0);
+      OUT_BATCH(0);
+      OUT_BATCH(0);
+      ADVANCE_BATCH();
+
+      drm_intel_bo_unreference(constant_bo);
+   }
+
+   intel_batchbuffer_emit_mi_flush(intel->batch);
+
    dw2 = dw4 = dw5 = dw6 = 0;
    dw4 |= GEN6_WM_STATISTICS_ENABLE;
    dw5 |= GEN6_WM_LINE_AA_WIDTH_1_0;
@@ -103,49 +146,6 @@ upload_wm_state(struct brw_context *brw)
    ADVANCE_BATCH();
 
    intel_batchbuffer_emit_mi_flush(intel->batch);
-
-   if (fp->use_const_buffer || nr_params == 0) {
-      /* Disable the push constant buffers. */
-      BEGIN_BATCH(5);
-      OUT_BATCH(CMD_3D_CONSTANT_PS_STATE << 16 | (5 - 2));
-      OUT_BATCH(0);
-      OUT_BATCH(0);
-      OUT_BATCH(0);
-      OUT_BATCH(0);
-      ADVANCE_BATCH();
-   } else {
-      /* Updates the ParamaterValues[i] pointers for all parameters of the
-       * basic type of PROGRAM_STATE_VAR.
-       */
-      _mesa_load_state_parameters(ctx, fp->program.Base.Parameters);
-
-      constant_bo = drm_intel_bo_alloc(intel->bufmgr, "WM constant_bo",
-				       nr_params * 4 * sizeof(float),
-				       4096);
-      intel_bo_map_gtt_preferred(intel, constant_bo, GL_TRUE);
-      for (i = 0; i < nr_params; i++) {
-	 memcpy((char *)constant_bo->virtual + i * 4 * sizeof(float),
-		fp->program.Base.Parameters->ParameterValues[i],
-		4 * sizeof(float));
-      }
-      intel_bo_unmap_gtt_preferred(intel, constant_bo);
-
-      BEGIN_BATCH(5);
-      OUT_BATCH(CMD_3D_CONSTANT_PS_STATE << 16 |
-		GEN6_CONSTANT_BUFFER_0_ENABLE |
-		(5 - 2));
-      OUT_RELOC(constant_bo,
-		I915_GEM_DOMAIN_RENDER, 0, /* XXX: bad domain */
-		ALIGN(nr_params, 2) / 2 - 1);
-      OUT_BATCH(0);
-      OUT_BATCH(0);
-      OUT_BATCH(0);
-      ADVANCE_BATCH();
-
-      drm_intel_bo_unreference(constant_bo);
-   }
-
-   intel_batchbuffer_emit_mi_flush(intel->batch);
 }
 
 const struct brw_tracked_state gen6_wm_state = {
-- 
cgit v1.2.3


From 38c449409207c8948c1961a3132475bbd422f8f1 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Wed, 24 Feb 2010 09:16:19 -0800
Subject: i965: Add SNB math opcode support.

This is untested at this point.
---
 src/mesa/drivers/dri/i965/brw_defines.h |  4 ++-
 src/mesa/drivers/dri/i965/brw_eu_emit.c | 50 +++++++++++++++++++++------------
 src/mesa/drivers/dri/i965/brw_vs_emit.c | 12 +++++---
 3 files changed, 43 insertions(+), 23 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h
index 9ed49e0dc3..2bb3448da7 100644
--- a/src/mesa/drivers/dri/i965/brw_defines.h
+++ b/src/mesa/drivers/dri/i965/brw_defines.h
@@ -530,6 +530,7 @@
 #define BRW_OPCODE_POP        47
 #define BRW_OPCODE_WAIT       48
 #define BRW_OPCODE_SEND       49
+#define BRW_OPCODE_MATH       56
 #define BRW_OPCODE_ADD        64
 #define BRW_OPCODE_MUL        65
 #define BRW_OPCODE_AVG        66
@@ -727,7 +728,8 @@
 #define BRW_MATH_FUNCTION_SIN                              6 /* was 7 */
 #define BRW_MATH_FUNCTION_COS                              7 /* was 8 */
 #define BRW_MATH_FUNCTION_SINCOS                           8 /* was 6 */
-#define BRW_MATH_FUNCTION_TAN                              9
+#define BRW_MATH_FUNCTION_TAN                              9 /* gen4 */
+#define BRW_MATH_FUNCTION_FDIV                             9 /* gen6+ */
 #define BRW_MATH_FUNCTION_POW                              10
 #define BRW_MATH_FUNCTION_INT_DIV_QUOTIENT_AND_REMAINDER   11
 #define BRW_MATH_FUNCTION_INT_DIV_QUOTIENT                 12
diff --git a/src/mesa/drivers/dri/i965/brw_eu_emit.c b/src/mesa/drivers/dri/i965/brw_eu_emit.c
index b832c7165d..2d55299ddb 100644
--- a/src/mesa/drivers/dri/i965/brw_eu_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_eu_emit.c
@@ -917,26 +917,40 @@ void brw_math( struct brw_compile *p,
 	       GLuint data_type,
 	       GLuint precision )
 {
-   struct brw_instruction *insn = next_insn(p, BRW_OPCODE_SEND);
-   GLuint msg_length = (function == BRW_MATH_FUNCTION_POW) ? 2 : 1; 
-   GLuint response_length = (function == BRW_MATH_FUNCTION_SINCOS) ? 2 : 1; 
+   struct intel_context *intel = &p->brw->intel;
 
-   /* Example code doesn't set predicate_control for send
-    * instructions.
-    */
-   insn->header.predicate_control = 0; 
-   insn->header.destreg__conditionalmod = msg_reg_nr;
+   if (intel->gen >= 6) {
+      struct brw_instruction *insn = next_insn(p, BRW_OPCODE_MATH);
 
-   brw_set_dest(insn, dest);
-   brw_set_src0(insn, src);
-   brw_set_math_message(p->brw,
-			insn, 
-			msg_length, response_length, 
-			function,
-			BRW_MATH_INTEGER_UNSIGNED,
-			precision,
-			saturate,
-			data_type);
+      /* Math is the same ISA format as other opcodes, except that CondModifier
+       * becomes FC[3:0] and ThreadCtrl becomes FC[5:4].
+       */
+      insn->header.destreg__conditionalmod = function;
+
+      brw_set_dest(insn, dest);
+      brw_set_src0(insn, src);
+      brw_set_src1(insn, brw_null_reg());
+   } else {
+      struct brw_instruction *insn = next_insn(p, BRW_OPCODE_SEND);
+      GLuint msg_length = (function == BRW_MATH_FUNCTION_POW) ? 2 : 1;
+      GLuint response_length = (function == BRW_MATH_FUNCTION_SINCOS) ? 2 : 1;
+      /* Example code doesn't set predicate_control for send
+       * instructions.
+       */
+      insn->header.predicate_control = 0;
+      insn->header.destreg__conditionalmod = msg_reg_nr;
+
+      brw_set_dest(insn, dest);
+      brw_set_src0(insn, src);
+      brw_set_math_message(p->brw,
+			   insn,
+			   msg_length, response_length,
+			   function,
+			   BRW_MATH_INTEGER_UNSIGNED,
+			   precision,
+			   saturate,
+			   data_type);
+   }
 }
 
 /**
diff --git a/src/mesa/drivers/dri/i965/brw_vs_emit.c b/src/mesa/drivers/dri/i965/brw_vs_emit.c
index 88327d9927..b6e5f945eb 100644
--- a/src/mesa/drivers/dri/i965/brw_vs_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_vs_emit.c
@@ -479,9 +479,11 @@ static void emit_math1( struct brw_vs_compile *c,
     * whether that turns out to be a simulator bug or not:
     */
    struct brw_compile *p = &c->func;
+   struct intel_context *intel = &p->brw->intel;
    struct brw_reg tmp = dst;
-   GLboolean need_tmp = (dst.dw1.bits.writemask != 0xf ||
-			 dst.file != BRW_GENERAL_REGISTER_FILE);
+   GLboolean need_tmp = (intel->gen < 6 &&
+			 (dst.dw1.bits.writemask != 0xf ||
+			  dst.file != BRW_GENERAL_REGISTER_FILE));
 
    if (need_tmp) 
       tmp = get_tmp(c);
@@ -510,9 +512,11 @@ static void emit_math2( struct brw_vs_compile *c,
 			GLuint precision)
 {
    struct brw_compile *p = &c->func;
+   struct intel_context *intel = &p->brw->intel;
    struct brw_reg tmp = dst;
-   GLboolean need_tmp = (dst.dw1.bits.writemask != 0xf ||
-			 dst.file != BRW_GENERAL_REGISTER_FILE);
+   GLboolean need_tmp = (intel->gen < 6 &&
+			 (dst.dw1.bits.writemask != 0xf ||
+			  dst.file != BRW_GENERAL_REGISTER_FILE));
 
    if (need_tmp) 
       tmp = get_tmp(c);
-- 
cgit v1.2.3


From dadd5094bfe8f8a9d0fc7b48086d3a4bc1c6b15f Mon Sep 17 00:00:00 2001
From: Kristian Høgsberg <krh@bitplanet.net>
Date: Thu, 25 Feb 2010 15:50:52 -0500
Subject: Remove allegro driver

---
 src/mesa/drivers/allegro/amesa.c   | 414 -------------------------------------
 src/mesa/drivers/allegro/amesa.h   |  65 ------
 src/mesa/drivers/allegro/direct.h  | 189 -----------------
 src/mesa/drivers/allegro/generic.h | 234 ---------------------
 4 files changed, 902 deletions(-)
 delete mode 100644 src/mesa/drivers/allegro/amesa.c
 delete mode 100644 src/mesa/drivers/allegro/amesa.h
 delete mode 100644 src/mesa/drivers/allegro/direct.h
 delete mode 100644 src/mesa/drivers/allegro/generic.h

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/allegro/amesa.c b/src/mesa/drivers/allegro/amesa.c
deleted file mode 100644
index 0744677d2b..0000000000
--- a/src/mesa/drivers/allegro/amesa.c
+++ /dev/null
@@ -1,414 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  3.0
- * Copyright (C) 1995-1998  Brian Paul
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <allegro.h>
-#include "main/buffers.h"
-#include "main/context.h"
-#include "main/imports.h"
-#include "main/matrix.h"
-#include "main/mtypes.h"
-#include "amesa.h"
-
-
-struct amesa_visual
-    {
-    GLvisual   *GLVisual;       /* inherit from GLvisual      */
-    GLboolean   DBFlag;         /* double buffered?           */
-    GLuint      Depth;          /* bits per pixel ( >= 15 )   */
-    };
-
-
-struct amesa_buffer
-    {
-    GLframebuffer *GLBuffer;    /* inherit from GLframebuffer */
-    GLuint         Width, Height;
-    BITMAP        *Screen;
-	BITMAP        *Background;
-	BITMAP        *Active;
-    };
-
-
-struct amesa_context
-    {
-    GLcontext   *GLContext;     /* inherit from GLcontext     */
-    AMesaVisual  Visual;
-	AMesaBuffer  Buffer;
-    GLuint       ClearColor;
-    GLuint       CurrentColor;
-    };
-
-
-static void setup_dd_pointers(GLcontext *ctx);
-
-
-/**********************************************************************/
-/*****                   drawing functions                        *****/
-/**********************************************************************/
-
-#define FLIP(context, y)  (context->Buffer->Height - (y) - 1)
-
-#include "allegro/generic.h"
-#include "allegro/direct.h"
-
-
-/**********************************************************************/
-/*****            15-bit accelerated drawing funcs                *****/
-/**********************************************************************/
-
-IMPLEMENT_WRITE_RGBA_SPAN(15, unsigned short)
-IMPLEMENT_WRITE_RGB_SPAN(15, unsigned short)
-IMPLEMENT_WRITE_MONO_RGBA_SPAN(15, unsigned short)
-IMPLEMENT_READ_RGBA_SPAN(15, unsigned short)
-IMPLEMENT_WRITE_RGBA_PIXELS(15, unsigned short)
-IMPLEMENT_WRITE_MONO_RGBA_PIXELS(15, unsigned short)
-IMPLEMENT_READ_RGBA_PIXELS(15, unsigned short)
-
-
-/**********************************************************************/
-/*****            16-bit accelerated drawing funcs                *****/
-/**********************************************************************/
-
-IMPLEMENT_WRITE_RGBA_SPAN(16, unsigned short)
-IMPLEMENT_WRITE_RGB_SPAN(16, unsigned short)
-IMPLEMENT_WRITE_MONO_RGBA_SPAN(16, unsigned short)
-IMPLEMENT_READ_RGBA_SPAN(16, unsigned short)
-IMPLEMENT_WRITE_RGBA_PIXELS(16, unsigned short)
-IMPLEMENT_WRITE_MONO_RGBA_PIXELS(16, unsigned short)
-IMPLEMENT_READ_RGBA_PIXELS(16, unsigned short)
-
-
-/**********************************************************************/
-/*****            32-bit accelerated drawing funcs                *****/
-/**********************************************************************/
-
-IMPLEMENT_WRITE_RGBA_SPAN(32, unsigned long)
-IMPLEMENT_WRITE_RGB_SPAN(32, unsigned long)
-IMPLEMENT_WRITE_MONO_RGBA_SPAN(32, unsigned long)
-IMPLEMENT_READ_RGBA_SPAN(32, unsigned long)
-IMPLEMENT_WRITE_RGBA_PIXELS(32, unsigned long)
-IMPLEMENT_WRITE_MONO_RGBA_PIXELS(32, unsigned long)
-IMPLEMENT_READ_RGBA_PIXELS(32, unsigned long)
-
-
-/**********************************************************************/
-/*****              Miscellaneous device driver funcs             *****/
-/**********************************************************************/
-
-static GLboolean set_buffer(GLcontext *ctx, GLframebuffer *buffer, GLuint bit)
-    {
-    AMesaContext context = (AMesaContext)(ctx->DriverCtx);
-    GLboolean    ok      = GL_TRUE;
-
-    if (bit == DD_FRONT_LEFT_BIT)
-        context->Buffer->Active = context->Buffer->Screen;
-
-    else if (bit == DD_BACK_LEFT)
-        {
-        if (context->Buffer->Background)
-            context->Buffer->Active = context->Buffer->Background;
-        else
-            ok = GL_FALSE;
-        }
-
-    else
-        ok = GL_FALSE;
-
-    return ok;
-    }
-
-
-static void get_buffer_size(GLcontext *ctx, GLuint *width, GLuint *height)
-    {
-	AMesaContext context = (AMesaContext)(ctx->DriverCtx);
-
-    *width  = context->Buffer->Width;
-    *height = context->Buffer->Height;
-    }
-
-
-/**
- * We only implement this function as a mechanism to check if the
- * framebuffer size has changed (and update corresponding state).
- */
-static void viewport(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h)
-{
-   /* poll for window size change and realloc software Z/stencil/etc if needed */
-   GLuint newWidth, newHeight;
-   GLframebuffer *buffer = ctx->WinSysDrawBuffer;
-   get_buffer_size( &newWidth, &newHeight );
-   if (buffer->Width != newWidth || buffer->Height != newHeight) {
-      _mesa_resize_framebuffer(ctx, buffer, newWidth, newHeight );
-   }
-
-}
-
-
-/**********************************************************************/
-/**********************************************************************/
-
-static void setup_dd_pointers(GLcontext *ctx)
-	{
-	AMesaContext context = (AMesaContext)(ctx->DriverCtx);
-
-   	/* Initialize all the pointers in the driver struct. Do this whenever */
-   	/* a new context is made current or we change buffers via set_buffer! */
-
-    ctx->Driver.UpdateState   = setup_dd_pointers;
-    ctx->Driver.SetBuffer     = set_buffer;
-    ctx->Driver.GetBufferSize = get_buffer_size;
-    ctx->Driver.Viewport      = viewport;
-
-    ctx->Driver.Color               = set_color_generic;
-    ctx->Driver.ClearColor          = clear_color_generic;
-    ctx->Driver.Clear               = clear_generic;
-    ctx->Driver.WriteRGBASpan       = write_rgba_span_generic;
-    ctx->Driver.WriteRGBSpan        = write_rgb_span_generic;
-    ctx->Driver.WriteMonoRGBASpan   = write_mono_rgba_span_generic;
-    ctx->Driver.WriteRGBAPixels     = write_rgba_pixels_generic;
-    ctx->Driver.WriteMonoRGBAPixels = write_mono_rgba_pixels_generic;
-    ctx->Driver.ReadRGBASpan        = read_rgba_span_generic;
-    ctx->Driver.ReadRGBAPixels      = read_rgba_pixels_generic;
-
-    if (context->Buffer->Active != screen)
-        {
-        switch (context->Visual->Depth)
-            {
-            case 15:
-                ctx->Driver.WriteRGBASpan       = write_rgba_span_15;
-                ctx->Driver.WriteRGBSpan        = write_rgb_span_15;
-                ctx->Driver.WriteMonoRGBASpan   = write_mono_rgba_span_15;
-                ctx->Driver.WriteRGBAPixels     = write_rgba_pixels_15;
-                ctx->Driver.WriteMonoRGBAPixels = write_mono_rgba_pixels_15;
-                ctx->Driver.ReadRGBASpan        = read_rgba_span_15;
-                ctx->Driver.ReadRGBAPixels      = read_rgba_pixels_15;
-                break;
-
-            case 16:
-                ctx->Driver.WriteRGBASpan       = write_rgba_span_16;
-                ctx->Driver.WriteRGBSpan        = write_rgb_span_16;
-                ctx->Driver.WriteMonoRGBASpan   = write_mono_rgba_span_16;
-                ctx->Driver.WriteRGBAPixels     = write_rgba_pixels_16;
-                ctx->Driver.WriteMonoRGBAPixels = write_mono_rgba_pixels_16;
-                ctx->Driver.ReadRGBASpan        = read_rgba_span_16;
-                ctx->Driver.ReadRGBAPixels      = read_rgba_pixels_16;
-                break;
-
-            case 32:
-                ctx->Driver.WriteRGBASpan       = write_rgba_span_32;
-                ctx->Driver.WriteRGBSpan        = write_rgb_span_32;
-                ctx->Driver.WriteMonoRGBASpan   = write_mono_rgba_span_32;
-                ctx->Driver.WriteRGBAPixels     = write_rgba_pixels_32;
-                ctx->Driver.WriteMonoRGBAPixels = write_mono_rgba_pixels_32;
-                ctx->Driver.ReadRGBASpan        = read_rgba_span_32;
-                ctx->Driver.ReadRGBAPixels      = read_rgba_pixels_32;
-                break;
-            }
-        }
-	}
-
-
-/**********************************************************************/
-/*****                AMesa Public API Functions                  *****/
-/**********************************************************************/
-
-
-AMesaVisual AMesaCreateVisual(GLboolean dbFlag, GLint depth,
-                              GLint depthSize, GLint stencilSize, GLint accumSize)
-	{
-   	AMesaVisual visual;
-    GLbyte      redBits, greenBits, blueBits;
-
-    visual = (AMesaVisual)calloc(1, sizeof(struct amesa_visual));
-   	if (!visual)
-    	return NULL;
-
-    switch (depth)
-        {
-        case 15:
-            redBits   = 5;
-            greenBits = 5;
-            blueBits  = 5;
-            break;
-
-        case 16:
-            redBits   = 5;
-            greenBits = 6;
-            blueBits  = 5;
-            break;
-
-        case 24: case 32:
-            redBits   = 8;
-            greenBits = 8;
-            blueBits  = 8;
-            break;
-
-        default:
-            free(visual);
-            return NULL;
-        }
-
-    visual->DBFlag   = dbFlag;
-    visual->Depth    = depth;
-    visual->GLVisual = _mesa_create_visual(GL_TRUE,    /* rgb mode       */
-                                           dbFlag,     /* db_flag        */
-                                           GL_FALSE,   /* stereo         */
-                                           redBits, greenBits, blueBits, 8,
-                                           0,          /* index bits     */
-                                           depthSize,  /* depth bits     */
-                                           stencilSize,/* stencil bits   */
-                                           accumSize,  /* accum bits     */
-                                           accumSize,  /* accum bits     */
-                                           accumSize,  /* accum bits     */
-                                           accumSize,  /* accum bits     */
-                                           1 );
-    if (!visual->GLVisual)
-        {
-        free(visual);
-        return NULL;
-        }
-
-  	return visual;
-	}
-
-
-void AMesaDestroyVisual(AMesaVisual visual)
-	{
-           _mesa_destroy_visual(visual->GLVisual);
-           free(visual);
-	}
-
-
-AMesaBuffer AMesaCreateBuffer(AMesaVisual visual,
-							  GLint width, GLint height)
-	{
-   	AMesaBuffer buffer;
-
-    buffer = (AMesaBuffer)calloc(1, sizeof(struct amesa_buffer));
-   	if (!buffer)
-     	return NULL;
-
-	buffer->Screen     = NULL;
-	buffer->Background = NULL;
-	buffer->Active     = NULL;
-	buffer->Width      = width;
-	buffer->Height     = height;
-
-	if (visual->DBFlag)
-		{
-		buffer->Background = create_bitmap_ex(visual->Depth, width, height);
-		if (!buffer->Background)
-			{
-			free(buffer);
-			return NULL;
-			}
-		}
-
-    buffer->GLBuffer = _mesa_create_framebuffer(visual->GLVisual);
-    if (!buffer->GLBuffer)
-        {
-        if (buffer->Background) destroy_bitmap(buffer->Background);
-        free(buffer);
-        return NULL;
-        }
-
-   	return buffer;
-	}
-
-
-void AMesaDestroyBuffer(AMesaBuffer buffer)
-{
-   if (buffer->Screen)     destroy_bitmap(buffer->Screen);
-   if (buffer->Background) destroy_bitmap(buffer->Background);
-   _mesa_reference_framebuffer(&buffer->GLBuffer, NULL);
-   free(buffer);
-}
-
-
-AMesaContext AMesaCreateContext(AMesaVisual visual,
-                                AMesaContext share)
-{
-   	AMesaContext context;
-   	GLboolean    direct = GL_FALSE;
-
-	context = (AMesaContext)calloc(1, sizeof(struct amesa_context));
-	if (!context)
-		return NULL;
-
-	context->Visual       = visual;
-	context->Buffer		  = NULL;
-	context->ClearColor   = 0;
-	context->CurrentColor = 0;
-	context->GLContext    = _mesa_create_context(visual->GLVisual,
-                                              share ? share->GLContext : NULL,
-                                  		(void *) context, GL_FALSE );
-	if (!context->GLContext)
-        {
-        	free(context);
-	        return NULL;
-        }
-
-   	return context;
-}
-
-
-void AMesaDestroyContext(AMesaContext context)
-{
-   _mesa_destroy_context(context->GLContext);
-   free(context);
-}
-
-
-GLboolean AMesaMakeCurrent(AMesaContext context, AMesaBuffer buffer)
-{
-   if (context && buffer) {
-      set_color_depth(context->Visual->Depth);
-      if (set_gfx_mode(GFX_AUTODETECT, buffer->Width, buffer->Height, 0, 0) != 0)
-         return GL_FALSE;
-
-      context->Buffer = buffer;
-      buffer->Screen  = screen;
-      buffer->Active  = buffer->Background ? buffer->Background : screen;
-        
-      setup_dd_pointers(context->GLContext);
-      _mesa_make_current(context->GLContext, buffer->GLBuffer);
-   }
-   else {
-      /* XXX I don't think you want to destroy anything here! */
-      destroy_bitmap(context->Buffer->Screen);
-      context->Buffer->Screen = NULL;
-      context->Buffer->Active = NULL;
-      context->Buffer         = NULL;
-      _mesa_make_current(NULL, NULL);
-   }
-
-   return GL_TRUE;
-}
-
-
-void AMesaSwapBuffers(AMesaBuffer buffer)
-{
-   if (buffer->Background) {
-      blit(buffer->Background, buffer->Screen,
-           0, 0, 0, 0,
-           buffer->Width, buffer->Height);
-   }
-}
diff --git a/src/mesa/drivers/allegro/amesa.h b/src/mesa/drivers/allegro/amesa.h
deleted file mode 100644
index 852d34cf4f..0000000000
--- a/src/mesa/drivers/allegro/amesa.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  3.3
- * 
- * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-/* Allegro (DJGPP) driver by Bernhard Tschirren (bernie-t@geocities.com) */
-
-
-#ifndef AMESA_H
-#define AMESA_H
-
-
-#define AMESA_MAJOR_VERSION 3
-#define AMESA_MINOR_VERSION 3
-
-
-typedef struct amesa_visual  *AMesaVisual;
-typedef struct amesa_buffer  *AMesaBuffer;
-typedef struct amesa_context *AMesaContext;
-
-
-extern AMesaVisual AMesaCreateVisual(GLboolean dbFlag, GLint depth,
-                                     GLint depthSize,
-                                     GLint stencilSize,
-                                     GLint accumSize);
-
-extern void AMesaDestroyVisual(AMesaVisual visual);
-
-extern AMesaBuffer AMesaCreateBuffer(AMesaVisual visual,
-                                     GLint width, GLint height);
-
-extern void AMesaDestroyBuffer(AMesaBuffer buffer);
-
-
-extern AMesaContext AMesaCreateContext(AMesaVisual visual,
-                                       AMesaContext sharelist);
-
-extern void AMesaDestroyContext(AMesaContext context);
-
-extern GLboolean AMesaMakeCurrent(AMesaContext context, AMesaBuffer buffer);
-
-extern void AMesaSwapBuffers(AMesaBuffer buffer);
-
-
-#endif /* AMESA_H */
diff --git a/src/mesa/drivers/allegro/direct.h b/src/mesa/drivers/allegro/direct.h
deleted file mode 100644
index bd8b5eb49d..0000000000
--- a/src/mesa/drivers/allegro/direct.h
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  3.0
- * Copyright (C) 1995-1998  Brian Paul
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-
-#define DESTINATION(BMP, X, Y, TYPE)                                \
-    ({                                                              \
-    BITMAP *_bmp = BMP;                                             \
-                                                                    \
-    (TYPE*)(_bmp->line[_bmp->h - (Y) - 1]) + (X);                   \
-    })
-
-
-#define IMPLEMENT_WRITE_RGBA_SPAN(DEPTH, TYPE)                                                   \
-static void write_rgba_span_##DEPTH (const GLcontext *ctx,                                       \
-                                     GLuint n, GLint x, GLint y,                                 \
-                                     const GLubyte rgba[][4],                                    \
-                                     const GLubyte mask[])                                       \
-    {                                                                                            \
-    AMesaContext context = (AMesaContext)(ctx->DriverCtx);                                       \
-    TYPE              *d = DESTINATION(context->Buffer->Active, x, y, TYPE);                     \
-                                                                                                 \
-    if (mask)                                                                                    \
-        {                                                                                        \
-        while (n--)                                                                              \
-            {                                                                                    \
-            if (mask[0]) d[0] = makecol##DEPTH(rgba[0][RCOMP], rgba[0][GCOMP], rgba[0][BCOMP]);  \
-            d++; rgba++; mask++;                                                                 \
-            }                                                                                    \
-        }                                                                                        \
-    else                                                                                         \
-        {                                                                                        \
-        while (n--)                                                                              \
-            {                                                                                    \
-            d[0] = makecol##DEPTH(rgba[0][RCOMP], rgba[0][GCOMP], rgba[0][BCOMP]);               \
-            d++; rgba++;                                                                         \
-            }                                                                                    \
-        }                                                                                        \
-    }
-
-
-#define IMPLEMENT_WRITE_RGB_SPAN(DEPTH, TYPE)                                                    \
-static void write_rgb_span_##DEPTH (const GLcontext *ctx,                                        \
-                                    GLuint n, GLint x, GLint y,                                  \
-                                    const GLubyte rgb[][3],                                      \
-                                    const GLubyte mask[])                                        \
-    {                                                                                            \
-    AMesaContext context = (AMesaContext)(ctx->DriverCtx);                                       \
-    TYPE              *d = DESTINATION(context->Buffer->Active, x, y, TYPE);                     \
-                                                                                                 \
-    if (mask)                                                                                    \
-        {                                                                                        \
-        while (n--)                                                                              \
-            {                                                                                    \
-            if (mask[0]) d[0] = makecol##DEPTH(rgb[0][RCOMP], rgb[0][GCOMP], rgb[0][BCOMP]);     \
-            d++; rgb++; mask++;                                                                  \
-            }                                                                                    \
-        }                                                                                        \
-    else                                                                                         \
-        {                                                                                        \
-        while (n--)                                                                              \
-            {                                                                                    \
-            d[0] = makecol##DEPTH(rgb[0][RCOMP], rgb[0][GCOMP], rgb[0][BCOMP]);                  \
-            d++; rgb++;                                                                          \
-            }                                                                                    \
-        }                                                                                        \
-    }
-
-
-#define IMPLEMENT_WRITE_MONO_RGBA_SPAN(DEPTH, TYPE)                                              \
-static void write_mono_rgba_span_##DEPTH (const GLcontext *ctx,                                  \
-                                          GLuint n, GLint x, GLint y,                            \
-                                          const GLubyte mask[])                                  \
-    {                                                                                            \
-    AMesaContext context = (AMesaContext)(ctx->DriverCtx);                                       \
-    TYPE           color = context->CurrentColor;                                                \
-    TYPE              *d = DESTINATION(context->Buffer->Active, x, y, TYPE);                     \
-                                                                                                 \
-    while (n--)                                                                                  \
-        {                                                                                        \
-        if (mask[0]) d[0] = color;                                                               \
-        d++; mask++;                                                                             \
-        }                                                                                        \
-    }
-
-
-#define IMPLEMENT_READ_RGBA_SPAN(DEPTH, TYPE)                           \
-static void read_rgba_span_##DEPTH (const GLcontext *ctx,				\
-                                    GLuint n, GLint x, GLint y,			\
-                                    GLubyte rgba[][4])					\
-    {																	\
-    AMesaContext context = (AMesaContext)(ctx->DriverCtx);				\
-    BITMAP          *bmp = context->Buffer->Active;                     \
-    TYPE              *d = DESTINATION(bmp, x, y, TYPE);                \
-                                                                        \
-    while (n--)                                                         \
-        {                                                               \
-        rgba[0][RCOMP] = getr##DEPTH(d[0]);                             \
-        rgba[0][GCOMP] = getg##DEPTH(d[0]);                             \
-        rgba[0][BCOMP] = getb##DEPTH(d[0]);                             \
-        rgba[0][ACOMP] = 255;                                           \
-                                                                        \
-        d++; rgba++;                                                    \
-        }                                                               \
-    }
-
-
-#define IMPLEMENT_WRITE_RGBA_PIXELS(DEPTH, TYPE)                                                                                 \
-static void write_rgba_pixels_##DEPTH (const GLcontext *ctx,                                                                     \
-                                       GLuint n,                                                                                 \
-                                       const GLint x[],                                                                          \
-                                       const GLint y[],                                                                          \
-                                       const GLubyte rgba[][4],                                                                  \
-                                       const GLubyte mask[])                                                                     \
-    {                                                                                                                            \
-    AMesaContext context = (AMesaContext)(ctx->DriverCtx);                                                                       \
-    BITMAP          *bmp = context->Buffer->Active;                                                                              \
-                                                                                                                                 \
-    while (n--)                                                                                                                  \
-        {                                                                                                                        \
-        if (mask[0]) *DESTINATION(bmp, x[0], y[0], TYPE) = makecol##DEPTH(rgba[0][RCOMP], rgba[0][GCOMP], rgba[0][BCOMP]);       \
-        rgba++; x++; y++; mask++;                                                                                                \
-        }                                                                                                                        \
-    }
-
-
-
-#define IMPLEMENT_WRITE_MONO_RGBA_PIXELS(DEPTH, TYPE)                                                                            \
-static void write_mono_rgba_pixels_##DEPTH (const GLcontext *ctx,                                                                \
-                                            GLuint n,                                                                            \
-                                            const GLint x[],                                                                     \
-                                            const GLint y[],                                                                     \
-                                            const GLubyte mask[])                                                                \
-    {                                                                                                                            \
-    AMesaContext context = (AMesaContext)(ctx->DriverCtx);                                                                       \
-    TYPE          color  = context->CurrentColor;                                                                                \
-    BITMAP          *bmp = context->Buffer->Active;                                                                              \
-                                                                                                                                 \
-    while (n--)                                                                                                                  \
-        {                                                                                                                        \
-        if (mask[0]) *DESTINATION(bmp, x[0], y[0], TYPE) = color;                                                                \
-        x++; y++; mask++;                                                                                                        \
-        }                                                                                                                        \
-    }
-
-
-#define IMPLEMENT_READ_RGBA_PIXELS(DEPTH, TYPE)                         \
-static void read_rgba_pixels_##DEPTH (const GLcontext *ctx,				\
-                              		  GLuint n,							\
-                              		  const GLint x[],					\
-                              		  const GLint y[],					\
-                              		  GLubyte rgba[][4],				\
-                              		  const GLubyte mask[])				\
-    {																	\
-    AMesaContext context = (AMesaContext)(ctx->DriverCtx);				\
-    BITMAP          *bmp = context->Buffer->Active;                     \
-                                                                        \
-    while (n--)                                                         \
-        {                                                               \
-        if (mask[0])                                                    \
-            {                                                           \
-            int color = *DESTINATION(bmp, x[0], y[0], TYPE);            \
-                                                                        \
-            rgba[0][RCOMP] = getr##DEPTH(color);                        \
-            rgba[0][GCOMP] = getg##DEPTH(color);                        \
-            rgba[0][BCOMP] = getb##DEPTH(color);                        \
-            rgba[0][ACOMP] = 255;                                       \
-            }                                                           \
-                                                                        \
-        x++; y++; rgba++; mask++;                                       \
-        }                                                               \
-    }
-
diff --git a/src/mesa/drivers/allegro/generic.h b/src/mesa/drivers/allegro/generic.h
deleted file mode 100644
index 4c8af9b95c..0000000000
--- a/src/mesa/drivers/allegro/generic.h
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  3.0
- * Copyright (C) 1995-1998  Brian Paul
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-static void clear_color_generic(GLcontext *ctx, const GLfloat color[4])
-    {
-    AMesaContext context = (AMesaContext)(ctx->DriverCtx);
-    GLubyte r, g, b;
-    CLAMPED_FLOAT_TO_UBYTE(r, color[0]);
-    CLAMPED_FLOAT_TO_UBYTE(g, color[1]);
-    CLAMPED_FLOAT_TO_UBYTE(b, color[2]);
-    context->ClearColor = makecol(r, g, b);
-    }
-
-
-static void set_color_generic(GLcontext *ctx,
-                              GLubyte red,  GLubyte green,
-                              GLubyte blue, GLubyte alpha)
-    {
-    AMesaContext context = (AMesaContext)(ctx->DriverCtx);
-
-    context->CurrentColor = makecol(red, green, blue);
-    }
-
-
-static GLbitfield clear_generic(GLcontext *ctx,
-                                GLbitfield mask, GLboolean all,
-                                GLint x, GLint y,
-                                GLint width, GLint height)
-    {
-    AMesaContext context = (AMesaContext)(ctx->DriverCtx);
-
-    if (mask & GL_COLOR_BUFFER_BIT)
-        {
-        if (all)
-            clear_to_color(context->Buffer->Active, context->ClearColor);
-        else
-            rect(context->Buffer->Active,
-                 x, y, x+width-1, y+height-1,
-                 context->ClearColor);
-        }
-
-    return mask & (~GL_COLOR_BUFFER_BIT);
-    }
-
-
-static void write_rgba_span_generic(const GLcontext *ctx,
-                                    GLuint n, GLint x, GLint y,
-                                    const GLubyte rgba[][4],
-                                    const GLubyte mask[])
-    {
-    AMesaContext context = (AMesaContext)(ctx->DriverCtx);
-    BITMAP          *bmp = context->Buffer->Active;
-
-    y = FLIP(context, y);
-
-    if (mask)
-        {
-        while (n--)
-            {
-            if (mask[0]) putpixel(bmp, x, y, makecol(rgba[0][RCOMP], rgba[0][GCOMP], rgba[0][BCOMP]));
-            x++; mask++; rgba++;
-            }
-        }
-    else
-        {
-        while (n--)
-            {
-            putpixel(bmp, x, y, makecol(rgba[0][RCOMP], rgba[0][GCOMP], rgba[0][BCOMP]));
-            x++; rgba++;
-            }
-        }
-    }
-
-
-static void write_rgb_span_generic(const GLcontext *ctx,
-                                   GLuint n, GLint x, GLint y,
-                                   const GLubyte rgb[][3],
-                                   const GLubyte mask[])
-    {
-    AMesaContext context = (AMesaContext)(ctx->DriverCtx);
-    BITMAP          *bmp = context->Buffer->Active;
-
-    y = FLIP(context, y);
-
-    if (mask)
-        {
-        while(n--)
-            {
-            if (mask[0]) putpixel(bmp, x, y, makecol(rgb[0][RCOMP], rgb[0][GCOMP], rgb[0][BCOMP]));
-            x++; mask++; rgb++;
-            }
-        }
-    else
-        {
-        while (n--)
-            {
-            putpixel(bmp, x, y, makecol(rgb[0][RCOMP], rgb[0][GCOMP], rgb[0][BCOMP]));
-            x++; rgb++;
-            }
-        }
-    }
-
-
-static void write_mono_rgba_span_generic(const GLcontext *ctx,
-                                         GLuint n, GLint x, GLint y,
-                                         const GLubyte mask[])
-    {
-    AMesaContext context = (AMesaContext)(ctx->DriverCtx);
-    BITMAP          *bmp = context->Buffer->Active;
-    int            color = context->CurrentColor;
-
-    y = FLIP(context, y);
-
-    if (mask)
-        {
-        while(n--)
-            {
-            if (mask[0]) putpixel(bmp, x, y, color);
-            x++; mask++;
-            }
-        }
-    else
-        {
-        while(n--)
-            {
-            putpixel(bmp, x, y, color);
-            x++;
-            }
-        }
-    }
-
-
-static void read_rgba_span_generic(const GLcontext *ctx,
-                                   GLuint n, GLint x, GLint y,
-                                   GLubyte rgba[][4])
-    {
-    AMesaContext context = (AMesaContext)(ctx->DriverCtx);
-    BITMAP          *bmp = context->Buffer->Active;
-
-    y = FLIP(context, y);
-
-    while (n--)
-        {
-        int color = getpixel(bmp, x, y);
-
-        rgba[0][RCOMP] = getr(color);
-        rgba[0][GCOMP] = getg(color);
-        rgba[0][BCOMP] = getb(color);
-        rgba[0][ACOMP] = 255;
-
-        x++; rgba++;
-        }
-    }
-
-
-static void write_rgba_pixels_generic(const GLcontext *ctx,
-                                      GLuint n,
-                                      const GLint x[],
-                                      const GLint y[],
-                                      const GLubyte rgba[][4],
-                                      const GLubyte mask[])
-    {
-    AMesaContext context = (AMesaContext)(ctx->DriverCtx);
-    BITMAP          *bmp = context->Buffer->Active;
-
-    while (n--)
-        {
-        if (mask[0]) putpixel(bmp, x[0], FLIP(context, y[0]), makecol(rgba[0][RCOMP], rgba[0][GCOMP], rgba[0][BCOMP]));
-        x++; y++; mask++;
-        }
-    }
-
-
-static void write_mono_rgba_pixels_generic(const GLcontext *ctx,
-                                           GLuint n,
-                                           const GLint x[],
-                                           const GLint y[],
-                                           const GLubyte mask[])
-    {
-    AMesaContext context = (AMesaContext)(ctx->DriverCtx);
-    BITMAP          *bmp = context->Buffer->Active;
-    int            color = context->CurrentColor;
-
-    while (n--)
-        {
-        if (mask[0]) putpixel(bmp, x[0], FLIP(context, y[0]), color);
-        x++; y++; mask++;
-        }
-    }
-
-
-static void read_rgba_pixels_generic(const GLcontext *ctx,
-                                     GLuint n,
-                                     const GLint x[],
-                                     const GLint y[],
-                                     GLubyte rgba[][4],
-                                     const GLubyte mask[])
-    {
-    AMesaContext context = (AMesaContext)(ctx->DriverCtx);
-    BITMAP          *bmp = context->Buffer->Active;
-
-    while (n--)
-        {
-        if (mask[0])
-            {
-            int color = getpixel(bmp, x[0], FLIP(context, y[0]));
-
-            rgba[0][RCOMP] = getr(color);
-            rgba[0][GCOMP] = getg(color);
-            rgba[0][BCOMP] = getb(color);
-            rgba[0][ACOMP] = 255;
-            }
-
-        x++; y++; mask++; rgba++;
-        }
-    }
-
-- 
cgit v1.2.3


From 4387580e50f49d642160982208c807da858cd1ab Mon Sep 17 00:00:00 2001
From: Kristian Høgsberg <krh@bitplanet.net>
Date: Thu, 25 Feb 2010 15:49:18 -0500
Subject: Remove directfb support

---
 Makefile                                     |    8 +-
 configs/linux-directfb                       |   38 -
 configure.ac                                 |    2 +-
 docs/README.directfb                         |   29 -
 include/GL/directfbgl.h                      |   89 ---
 progs/directfb/.gitignore                    |    4 -
 progs/directfb/Makefile                      |   38 -
 progs/directfb/df_gears.c                    |  480 ------------
 progs/directfb/df_morph3d.c                  | 1013 --------------------------
 progs/directfb/df_reflect.c                  |  489 -------------
 progs/directfb/multi_window.c                |  240 ------
 src/glut/directfb/Makefile                   |   87 ---
 src/glut/directfb/NOTES                      |    9 -
 src/glut/directfb/callback.c                 |  300 --------
 src/glut/directfb/color.c                    |   39 -
 src/glut/directfb/cursor.c                   |  175 -----
 src/glut/directfb/cursors.h                  |  306 --------
 src/glut/directfb/events.c                   |  492 -------------
 src/glut/directfb/ext.c                      |  202 -----
 src/glut/directfb/font.c                     |  213 ------
 src/glut/directfb/font.h                     |   58 --
 src/glut/directfb/game.c                     |  153 ----
 src/glut/directfb/globals.c                  |   63 --
 src/glut/directfb/init.c                     |  128 ----
 src/glut/directfb/internal.h                 |  188 -----
 src/glut/directfb/menu.c                     |   87 ---
 src/glut/directfb/models.c                   |  599 ---------------
 src/glut/directfb/overlay.c                  |   62 --
 src/glut/directfb/state.c                    |  219 ------
 src/glut/directfb/teapot.c                   |  212 ------
 src/glut/directfb/window.c                   |  597 ---------------
 src/mesa/drivers/directfb/Makefile           |   67 --
 src/mesa/drivers/directfb/idirectfbgl_mesa.c |  982 -------------------------
 33 files changed, 2 insertions(+), 7666 deletions(-)
 delete mode 100644 configs/linux-directfb
 delete mode 100644 docs/README.directfb
 delete mode 100644 include/GL/directfbgl.h
 delete mode 100644 progs/directfb/.gitignore
 delete mode 100644 progs/directfb/Makefile
 delete mode 100644 progs/directfb/df_gears.c
 delete mode 100644 progs/directfb/df_morph3d.c
 delete mode 100644 progs/directfb/df_reflect.c
 delete mode 100644 progs/directfb/multi_window.c
 delete mode 100644 src/glut/directfb/Makefile
 delete mode 100644 src/glut/directfb/NOTES
 delete mode 100644 src/glut/directfb/callback.c
 delete mode 100644 src/glut/directfb/color.c
 delete mode 100644 src/glut/directfb/cursor.c
 delete mode 100644 src/glut/directfb/cursors.h
 delete mode 100644 src/glut/directfb/events.c
 delete mode 100644 src/glut/directfb/ext.c
 delete mode 100644 src/glut/directfb/font.c
 delete mode 100644 src/glut/directfb/font.h
 delete mode 100644 src/glut/directfb/game.c
 delete mode 100644 src/glut/directfb/globals.c
 delete mode 100644 src/glut/directfb/init.c
 delete mode 100644 src/glut/directfb/internal.h
 delete mode 100644 src/glut/directfb/menu.c
 delete mode 100644 src/glut/directfb/models.c
 delete mode 100644 src/glut/directfb/overlay.c
 delete mode 100644 src/glut/directfb/state.c
 delete mode 100644 src/glut/directfb/teapot.c
 delete mode 100644 src/glut/directfb/window.c
 delete mode 100644 src/mesa/drivers/directfb/Makefile
 delete mode 100644 src/mesa/drivers/directfb/idirectfbgl_mesa.c

(limited to 'src/mesa')

diff --git a/Makefile b/Makefile
index 3e92e1312e..0527fa0d82 100644
--- a/Makefile
+++ b/Makefile
@@ -48,7 +48,7 @@ install:
 	done
 
 
-.PHONY: default doxygen clean realclean distclean install linux-directfb-install
+.PHONY: default doxygen clean realclean distclean install
 
 # If there's no current configuration file
 $(TOP)/configs/current:
@@ -109,7 +109,6 @@ linux-alpha-static \
 linux-cell \
 linux-cell-debug \
 linux-debug \
-linux-directfb \
 linux-dri \
 linux-dri-debug \
 linux-dri-x86 \
@@ -271,8 +270,6 @@ MAIN_FILES = \
 	$(DIRECTORY)/src/mesa/drivers/beos/Makefile			\
 	$(DIRECTORY)/src/mesa/drivers/common/*.[ch]			\
 	$(DIRECTORY)/src/mesa/drivers/common/descrip.mms		\
-	$(DIRECTORY)/src/mesa/drivers/directfb/*.[ch]			\
-	$(DIRECTORY)/src/mesa/drivers/directfb/Makefile			\
 	$(DIRECTORY)/src/mesa/drivers/dos/*.[chS]			\
 	$(DIRECTORY)/src/mesa/drivers/fbdev/Makefile			\
 	$(DIRECTORY)/src/mesa/drivers/fbdev/glfbdev.c			\
@@ -483,9 +480,6 @@ GLUT_FILES = \
 	$(DIRECTORY)/src/glut/fbdev/*[ch]		\
 	$(DIRECTORY)/src/glut/mini/*[ch]		\
 	$(DIRECTORY)/src/glut/mini/glut.pc.in		\
-	$(DIRECTORY)/src/glut/directfb/Makefile		\
-	$(DIRECTORY)/src/glut/directfb/NOTES		\
-	$(DIRECTORY)/src/glut/directfb/*[ch]
 
 DEPEND_FILES = \
 	$(TOP)/src/mesa/depend		\
diff --git a/configs/linux-directfb b/configs/linux-directfb
deleted file mode 100644
index 9ae3de96d1..0000000000
--- a/configs/linux-directfb
+++ /dev/null
@@ -1,38 +0,0 @@
-# Configuration for DirectFB
-
-include $(TOP)/configs/default
-
-CONFIG_NAME = linux-directfb
-
-# Compiler and flags
-CC  = gcc
-CXX = g++
-
-CFLAGS   = -Wall -O3 -ffast-math -fPIC -std=c99 -D_GNU_SOURCE -D_POSIX_SOURCE -D_SVID_SOURCE \
-         -D_POSIX_C_SOURCE=199309L -D_BSD_SOURCE -DPTHREADS
-
-CXXFLAGS = -Wall -O3 -fPIC -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE   
-
-# Work around aliasing bugs - developers should comment this out
-CFLAGS += -fno-strict-aliasing
-CXXFLAGS += -fno-strict-aliasing
-
-HAVE_X86 = $(shell uname -m | grep 'i[3-6]86' >/dev/null && echo yes)
-ifeq ($(HAVE_X86), yes)
-     CFLAGS   += -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM
-     CXXFLAGS += -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM
-     MESA_ASM_SOURCES = $(X86_SOURCES)
-     GLAPI_ASM_SOURCES = $(X86_API)
-endif
-
-# Directories
-SRC_DIRS     = gallium mesa glu glut/directfb glew
-GLU_DIRS     = sgi
-DRIVER_DIRS  = directfb
-PROGRAM_DIRS = demos directfb
-
-# Library/program dependencies
-GL_LIB_DEPS   = -lm -lpthread
-GLUT_LIB_DEPS = -L$(TOP)/$(LIB_DIR) -l$(GL_LIB) -l$(GLU_LIB)
-APP_LIB_DEPS  = -L$(TOP)/$(LIB_DIR) -l$(GL_LIB) -l$(GLU_LIB) -l$(GLUT_LIB)
-
diff --git a/configure.ac b/configure.ac
index 485836a428..b4561000d2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -395,7 +395,7 @@ fi
 
 dnl
 dnl Driver configuration. Options are xlib, dri and osmesa right now.
-dnl More later: directfb, fbdev, ...
+dnl More later: fbdev, ...
 dnl
 default_driver="xlib"
 
diff --git a/docs/README.directfb b/docs/README.directfb
deleted file mode 100644
index d66ca8d3ca..0000000000
--- a/docs/README.directfb
+++ /dev/null
@@ -1,29 +0,0 @@
-                         
-                         Mesa DirectFB Information
-
-
-Requirements
-============
-
-  To build Mesa with DirectFB (DirectFBGL) support you need:
-     - DirectFB at least 1.0.0 (http://directfb.org)
-     - pkg-config at least 0.9 (http://pkgconfig.sf.net)
-
-
-Installation
-============
-  Run
-     
-     make linux-directfb
-
-  to build Mesa and DirectFBGL module,
-
-     make install
-
-  to install OpenGL libraries and
-
-     cd src/mesa/drivers/directfb ; make install
-
-  to install DirectFBGL module in the proper location.
-  Actually, that last command may not be needed.  Please provide feedback.
-
diff --git a/include/GL/directfbgl.h b/include/GL/directfbgl.h
deleted file mode 100644
index 984c4b1427..0000000000
--- a/include/GL/directfbgl.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
-   (c) Copyright 2001  convergence integrated media GmbH.
-   All rights reserved.
-
-   Written by Denis Oliver Kropp <dok@convergence.de> and
-              Andreas Hundt <andi@convergence.de>.
-
-   This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2 of the License, or (at your option) any later version.
-
-   This library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, write to the
-   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.
-*/
-
-#ifndef __DIRECTFBGL_H__
-#define __DIRECTFBGL_H__
-
-#include <directfb.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-typedef struct {
-     int        buffer_size;
-     int        depth_size;
-     int        stencil_size;
-     int        aux_buffers;
-    
-     int        red_size;
-     int        green_size;
-     int        blue_size;
-     int        alpha_size;
-
-     int        accum_red_size;
-     int        accum_green_size;
-     int        accum_blue_size;
-     int        accum_alpha_size;
-
-     DFBBoolean double_buffer;
-     DFBBoolean stereo;
-} DFBGLAttributes;
-
-
-DEFINE_INTERFACE(   IDirectFBGL,
-
-   /** Context handling **/
-
-     /*
-      * Acquire the hardware lock.
-      */
-     DFBResult (*Lock) (
-          IDirectFBGL              *thiz
-     );
-
-     /*
-      * Release the lock.
-      */
-     DFBResult (*Unlock) (
-          IDirectFBGL              *thiz
-     );
-
-     /*
-      * Query the OpenGL attributes.
-      */
-     DFBResult (*GetAttributes) (
-          IDirectFBGL              *thiz,
-          DFBGLAttributes          *attributes
-     );
-)
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
diff --git a/progs/directfb/.gitignore b/progs/directfb/.gitignore
deleted file mode 100644
index 55d65fb5b0..0000000000
--- a/progs/directfb/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-df_gears
-df_morph3d
-df_reflect
-multi_window
diff --git a/progs/directfb/Makefile b/progs/directfb/Makefile
deleted file mode 100644
index 93c2a7df14..0000000000
--- a/progs/directfb/Makefile
+++ /dev/null
@@ -1,38 +0,0 @@
-# progs/directfb/Makefile
-
-TOP = ../..
-include $(TOP)/configs/current
-
-
-INCDIR = $(TOP)/include -I$(TOP)/progs
-
-LIB_DEP = $(TOP)/$(LIB_DIR)/$(GL_LIB_NAME) $(TOP)/$(LIB_DIR)/$(GLU_LIB_NAME)
-
-CFLAGS += $(shell pkg-config --cflags directfb)
-APP_LIB_DEPS += $(shell pkg-config --libs directfb)
-
-LIBS = -L$(TOP)/$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) $(APP_LIB_DEPS)
-
-PROGS = df_gears \
-	   df_reflect \
-	   df_morph3d \
-	   multi_window
-
-##### RULES #####
-
-.SUFFIXES:
-.SUFFIXES: .c
-
-.c: $(LIB_DEP)
-	$(CC) -I$(INCDIR) $(CFLAGS) $(LDFLAGS) $< $(LIBS) -o $@
-
-
-##### TARGETS #####
-
-default: $(PROGS)
-
-
-clean:
-	-rm -f $(PROGS)
-	-rm -f *.o *~
-
diff --git a/progs/directfb/df_gears.c b/progs/directfb/df_gears.c
deleted file mode 100644
index c480767bd3..0000000000
--- a/progs/directfb/df_gears.c
+++ /dev/null
@@ -1,480 +0,0 @@
-/*
-   (c) Copyright 2001  convergence integrated media GmbH.
-   All rights reserved.
-
-   Written by Denis Oliver Kropp <dok@convergence.de> and
-              Andreas Hundt <andi@convergence.de>.
-
-   This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2 of the License, or (at your option) any later version.
-
-   This library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, write to the
-   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.
-*/
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <math.h>
-
-#include <directfb.h>
-#include <directfbgl.h>
-
-#include <GL/gl.h>
-
-
-/* the super interface */
-IDirectFB *dfb;
-
-/* the primary surface (surface of primary layer) */
-IDirectFBSurface *primary;
-
-/* the GL context */
-IDirectFBGL *primary_gl;
-
-/* our font */
-IDirectFBFont *font;
-
-/* event buffer */
-IDirectFBEventBuffer *events;
-
-/* macro for a safe call to DirectFB functions */
-#define DFBCHECK(x...) \
-        {                                                                      \
-           err = x;                                                            \
-           if (err != DFB_OK) {                                                \
-              fprintf( stderr, "%s <%d>:\n\t", __FILE__, __LINE__ );           \
-              DirectFBErrorFatal( #x, err );                                   \
-           }                                                                   \
-        }
-
-static int screen_width, screen_height;
-
-static unsigned long T0 = 0;
-static GLint Frames = 0;
-static GLfloat fps = 0;
-
-static inline unsigned long get_millis()
-{
-  struct timeval tv;
-
-  gettimeofday (&tv, NULL);
-  return (tv.tv_sec * 1000 + tv.tv_usec / 1000);
-}
-
-
-#ifndef M_PI
-#define M_PI 3.14159265
-#endif
-
-/**
-
-  Draw a gear wheel.  You'll probably want to call this function when
-  building a display list since we do a lot of trig here.
-
-  Input:  inner_radius - radius of hole at center
-          outer_radius - radius at center of teeth
-          width - width of gear
-          teeth - number of teeth
-          tooth_depth - depth of tooth
-
- **/
-
-static void
-gear(GLfloat inner_radius, GLfloat outer_radius, GLfloat width,
-  GLint teeth, GLfloat tooth_depth)
-{
-  GLint i;
-  GLfloat r0, r1, r2;
-  GLfloat angle, da;
-  GLfloat u, v, len;
-
-  r0 = inner_radius;
-  r1 = outer_radius - tooth_depth / 2.0;
-  r2 = outer_radius + tooth_depth / 2.0;
-
-  da = 2.0 * M_PI / teeth / 4.0;
-
-  glShadeModel(GL_FLAT);
-
-  glNormal3f(0.0, 0.0, 1.0);
-
-  /* draw front face */
-  glBegin(GL_QUAD_STRIP);
-  for (i = 0; i <= teeth; i++) {
-    angle = i * 2.0 * M_PI / teeth;
-    glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
-    glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
-    if (i < teeth) {
-      glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
-      glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5);
-    }
-  }
-  glEnd();
-
-  /* draw front sides of teeth */
-  glBegin(GL_QUADS);
-  da = 2.0 * M_PI / teeth / 4.0;
-  for (i = 0; i < teeth; i++) {
-    angle = i * 2.0 * M_PI / teeth;
-
-    glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
-    glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5);
-    glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), width * 0.5);
-    glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5);
-  }
-  glEnd();
-
-  glNormal3f(0.0, 0.0, -1.0);
-
-  /* draw back face */
-  glBegin(GL_QUAD_STRIP);
-  for (i = 0; i <= teeth; i++) {
-    angle = i * 2.0 * M_PI / teeth;
-    glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
-    glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
-    if (i < teeth) {
-      glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5);
-      glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
-    }
-  }
-  glEnd();
-
-  /* draw back sides of teeth */
-  glBegin(GL_QUADS);
-  da = 2.0 * M_PI / teeth / 4.0;
-  for (i = 0; i < teeth; i++) {
-    angle = i * 2.0 * M_PI / teeth;
-
-    glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5);
-    glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), -width * 0.5);
-    glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5);
-    glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
-  }
-  glEnd();
-
-  /* draw outward faces of teeth */
-  glBegin(GL_QUAD_STRIP);
-  for (i = 0; i < teeth; i++) {
-    angle = i * 2.0 * M_PI / teeth;
-
-    glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
-    glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
-    u = r2 * cos(angle + da) - r1 * cos(angle);
-    v = r2 * sin(angle + da) - r1 * sin(angle);
-    len = sqrt(u * u + v * v);
-    u /= len;
-    v /= len;
-    glNormal3f(v, -u, 0.0);
-    glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5);
-    glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5);
-    glNormal3f(cos(angle), sin(angle), 0.0);
-    glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), width * 0.5);
-    glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), -width * 0.5);
-    u = r1 * cos(angle + 3 * da) - r2 * cos(angle + 2 * da);
-    v = r1 * sin(angle + 3 * da) - r2 * sin(angle + 2 * da);
-    glNormal3f(v, -u, 0.0);
-    glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5);
-    glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5);
-    glNormal3f(cos(angle), sin(angle), 0.0);
-  }
-
-  glVertex3f(r1 * cos(0), r1 * sin(0), width * 0.5);
-  glVertex3f(r1 * cos(0), r1 * sin(0), -width * 0.5);
-
-  glEnd();
-
-  glShadeModel(GL_SMOOTH);
-
-  /* draw inside radius cylinder */
-  glBegin(GL_QUAD_STRIP);
-  for (i = 0; i <= teeth; i++) {
-    angle = i * 2.0 * M_PI / teeth;
-    glNormal3f(-cos(angle), -sin(angle), 0.0);
-    glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
-    glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
-  }
-  glEnd();
-
-}
-
-static GLfloat view_rotx = 20.0, view_roty = 30.0, view_rotz = 0.0;
-static GLfloat inc_rotx = 0, inc_roty = 0, inc_rotz = 0;
-static GLint gear1, gear2, gear3;
-static GLfloat angle = 0.0;
-
-static void
-draw(void)
-{
-  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
-  glPushMatrix();
-    glRotatef(view_rotx, 1.0, 0.0, 0.0);
-    glRotatef(view_roty, 0.0, 1.0, 0.0);
-    glRotatef(view_rotz, 0.0, 0.0, 1.0);
-
-    glPushMatrix();
-      glTranslatef(-3.0, -2.0, 0.0);
-      glRotatef(angle, 0.0, 0.0, 1.0);
-      glCallList(gear1);
-    glPopMatrix();
-
-    glPushMatrix();
-      glTranslatef(3.1, -2.0, 0.0);
-      glRotatef(-2.0 * angle - 9.0, 0.0, 0.0, 1.0);
-      glCallList(gear2);
-    glPopMatrix();
-
-    glPushMatrix();
-      glTranslatef(-3.1, 4.2, 0.0);
-      glRotatef(-2.0 * angle - 25.0, 0.0, 0.0, 1.0);
-      glCallList(gear3);
-    glPopMatrix();
-
-  glPopMatrix();
-}
-
-/* new window size or exposure */
-static void
-reshape(int width, int height)
-{
-  GLfloat h = (GLfloat) height / (GLfloat) width;
-
-  glViewport(0, 0, (GLint) width, (GLint) height);
-  glMatrixMode(GL_PROJECTION);
-  glLoadIdentity();
-  glFrustum(-1.0, 1.0, -h, h, 5.0, 60.0);
-  glMatrixMode(GL_MODELVIEW);
-  glLoadIdentity();
-  glTranslatef(0.0, 0.0, -40.0);
-}
-
-static void
-init(int argc, char *argv[])
-{
-  static GLfloat pos[4] = {5.0, 5.0, 10.0, 0.0};
-  static GLfloat red[4] = {0.8, 0.1, 0.0, 1.0};
-  static GLfloat green[4] = {0.0, 0.8, 0.2, 1.0};
-  static GLfloat blue[4] = {0.2, 0.2, 1.0, 1.0};
-  GLint i;
-
-  glLightfv(GL_LIGHT0, GL_POSITION, pos);
-  glEnable(GL_CULL_FACE);
-  glEnable(GL_LIGHTING);
-  glEnable(GL_LIGHT0);
-  glEnable(GL_DEPTH_TEST);
-
-  /* make the gears */
-  gear1 = glGenLists(1);
-  glNewList(gear1, GL_COMPILE);
-  glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red);
-  gear(1.0, 4.0, 1.0, 20, 0.7);
-  glEndList();
-
-  gear2 = glGenLists(1);
-  glNewList(gear2, GL_COMPILE);
-  glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green);
-  gear(0.5, 2.0, 2.0, 10, 0.7);
-  glEndList();
-
-  gear3 = glGenLists(1);
-  glNewList(gear3, GL_COMPILE);
-  glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue);
-  gear(1.3, 2.0, 0.5, 10, 0.7);
-  glEndList();
-
-  glEnable(GL_NORMALIZE);
-
-  for ( i=1; i<argc; i++ ) {
-    if (strcmp(argv[i], "-info")==0) {
-      printf("GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER));
-      printf("GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION));
-      printf("GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR));
-      printf("GL_EXTENSIONS = %s\n", (char *) glGetString(GL_EXTENSIONS));
-    }
-  }
-}
-
-int main( int argc, char *argv[] )
-{
-     int quit = 0;
-     DFBResult err;
-     DFBSurfaceDescription dsc;
-
-     DFBCHECK(DirectFBInit( &argc, &argv ));
-
-     /* create the super interface */
-     DFBCHECK(DirectFBCreate( &dfb ));
-
-     /* create an event buffer for all devices with these caps */
-     DFBCHECK(dfb->CreateInputEventBuffer( dfb, DICAPS_KEYS | DICAPS_AXES,
-                                           DFB_FALSE, &events ));
-
-     /* set our cooperative level to DFSCL_FULLSCREEN
-        for exclusive access to the primary layer */
-     dfb->SetCooperativeLevel( dfb, DFSCL_FULLSCREEN );
-
-     /* get the primary surface, i.e. the surface of the
-        primary layer we have exclusive access to */
-     dsc.flags = DSDESC_CAPS;
-     dsc.caps  = DSCAPS_PRIMARY | DSCAPS_DOUBLE;
-
-     DFBCHECK(dfb->CreateSurface( dfb, &dsc, &primary ));
-
-     /* get the size of the surface and fill it */
-     DFBCHECK(primary->GetSize( primary, &screen_width, &screen_height ));
-     DFBCHECK(primary->FillRectangle( primary, 0, 0,
-                                      screen_width, screen_height ));
-     primary->Flip( primary, NULL, 0 );
-
-     /* create the default font and set it */
-     DFBCHECK(dfb->CreateFont( dfb, NULL, NULL, &font ));
-     DFBCHECK(primary->SetFont( primary, font ));
-
-     /* get the GL context */
-     DFBCHECK(primary->GetGL( primary, &primary_gl ));
-
-     DFBCHECK(primary_gl->Lock( primary_gl ));
-     
-     init(argc, argv);
-     reshape(screen_width, screen_height);
-
-     DFBCHECK(primary_gl->Unlock( primary_gl ));
-     
-     T0 = get_millis();
-
-     while (!quit) {
-          DFBInputEvent evt;
-          unsigned long t;
-
-          DFBCHECK(primary_gl->Lock( primary_gl ));
-
-          draw();
-          
-          DFBCHECK(primary_gl->Unlock( primary_gl ));
-
-          if (fps) {
-               char buf[64];
-
-               snprintf(buf, 64, "%4.1f FPS\n", fps);
-
-               primary->SetColor( primary, 0xff, 0, 0, 0xff );
-               primary->DrawString( primary, buf, -1, screen_width - 5, 5, DSTF_TOPRIGHT );
-          }
-          
-          primary->Flip( primary, NULL, 0 );
-          Frames++;
-
-
-          t = get_millis();
-          if (t - T0 >= 2000) {
-               GLfloat seconds = (t - T0) / 1000.0;
-
-               fps = Frames / seconds;
-
-               T0 = t;
-               Frames = 0;
-          }
-
-
-          while (events->GetEvent( events, DFB_EVENT(&evt) ) == DFB_OK) {
-               switch (evt.type) {
-                    case DIET_KEYPRESS:
-                         switch (evt.key_symbol) {
-                              case DIKS_ESCAPE:
-                                   quit = 1;
-                                   break;
-                              case DIKS_CURSOR_UP:
-                                   inc_rotx = 5.0;
-                                   break;
-                              case DIKS_CURSOR_DOWN:
-                                   inc_rotx = -5.0;
-                                   break;
-                              case DIKS_CURSOR_LEFT:
-                                   inc_roty = 5.0;
-                                   break;
-                              case DIKS_CURSOR_RIGHT:
-                                   inc_roty = -5.0;
-                                   break;
-                              case DIKS_PAGE_UP:
-                                   inc_rotz = 5.0;
-                                   break;
-                              case DIKS_PAGE_DOWN:
-                                   inc_rotz = -5.0;
-                                   break;
-                              default:
-                                   ;
-                         }
-                         break;
-                    case DIET_KEYRELEASE:
-                         switch (evt.key_symbol) {
-                              case DIKS_CURSOR_UP:
-                                   inc_rotx = 0;
-                                   break;
-                              case DIKS_CURSOR_DOWN:
-                                   inc_rotx = 0;
-                                   break;
-                              case DIKS_CURSOR_LEFT:
-                                   inc_roty = 0;
-                                   break;
-                              case DIKS_CURSOR_RIGHT:
-                                   inc_roty = 0;
-                                   break;
-                              case DIKS_PAGE_UP:
-                                   inc_rotz = 0;
-                                   break;
-                              case DIKS_PAGE_DOWN:
-                                   inc_rotz = 0;
-                                   break;
-                              default:
-                                   ;
-                         }
-                         break;
-                    case DIET_AXISMOTION:
-                         if (evt.flags & DIEF_AXISREL) {
-                              switch (evt.axis) {
-                                   case DIAI_X:
-                                        view_roty += evt.axisrel / 2.0;
-                                        break;
-                                   case DIAI_Y:
-                                        view_rotx += evt.axisrel / 2.0;
-                                        break;
-                                   case DIAI_Z:
-                                        view_rotz += evt.axisrel / 2.0;
-                                        break;
-                                   default:
-                                        ;
-                              }
-                         }
-                         break;
-                    default:
-                         ;
-               }
-          }
-
-          angle += 2.0;
-
-          view_rotx += inc_rotx;
-          view_roty += inc_roty;
-          view_rotz += inc_rotz;
-     }
-
-     /* release our interfaces to shutdown DirectFB */
-     primary_gl->Release( primary_gl );
-     primary->Release( primary );
-     font->Release( font );
-     events->Release( events );
-     dfb->Release( dfb );
-
-     return 0;
-}
-
diff --git a/progs/directfb/df_morph3d.c b/progs/directfb/df_morph3d.c
deleted file mode 100644
index 2730fa6156..0000000000
--- a/progs/directfb/df_morph3d.c
+++ /dev/null
@@ -1,1013 +0,0 @@
-/*
-   (c) Copyright 2001  convergence integrated media GmbH.
-   All rights reserved.
-
-   Written by Denis Oliver Kropp <dok@convergence.de> and
-              Andreas Hundt <andi@convergence.de>.
-
-   This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2 of the License, or (at your option) any later version.
-
-   This library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, write to the
-   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.
-*/
-
-/*-
- * morph3d.c - Shows 3D morphing objects
- *
- * Converted to GLUT by brianp on 1/1/98
- *
- * This program was inspired on a WindowsNT(R)'s screen saver. It was written
- * from scratch and it was not based on any other source code.
- *
- * Porting it to xlock (the final objective of this code since the moment I
- * decided to create it) was possible by comparing the original Mesa's gear
- * demo with it's ported version, so thanks for Danny Sung for his indirect
- * help (look at gear.c in xlock source tree). NOTE: At the moment this code
- * was sent to Brian Paul for package inclusion, the XLock Version was not
- * available. In fact, I'll wait it to appear on the next Mesa release (If you
- * are reading this, it means THIS release) to send it for xlock package
- * inclusion). It will probably there be a GLUT version too.
- *
- * Thanks goes also to Brian Paul for making it possible and inexpensive
- * to use OpenGL at home.
- *
- * Since I'm not a native english speaker, my apologies for any gramatical
- * mistake.
- *
- * My e-mail addresses are
- *
- * vianna@cat.cbpf.br
- *         and
- * marcelo@venus.rdc.puc-rio.br
- *
- * Marcelo F. Vianna (Feb-13-1997)
- */
-
-/*
-This document is VERY incomplete, but tries to describe the mathematics used
-in the program. At this moment it just describes how the polyhedra are
-generated. On futhurer versions, this document will be probabbly improved.
-
-Since I'm not a native english speaker, my apologies for any gramatical
-mistake.
-
-Marcelo Fernandes Vianna
-- Undergraduate in Computer Engeneering at Catholic Pontifical University
-- of Rio de Janeiro (PUC-Rio) Brasil.
-- e-mail: vianna@cat.cbpf.br or marcelo@venus.rdc.puc-rio.br
-- Feb-13-1997
-
-POLYHEDRA GENERATION
-
-For the purpose of this program it's not sufficient to know the polyhedra
-vertexes coordinates. Since the morphing algorithm applies a nonlinear
-transformation over the surfaces (faces) of the polyhedron, each face has
-to be divided into smaller ones. The morphing algorithm needs to transform
-each vertex of these smaller faces individually. It's a very time consoming
-task.
-
-In order to reduce calculation overload, and since all the macro faces of
-the polyhedron are transformed by the same way, the generation is made by
-creating only one face of the polyhedron, morphing it and then rotating it
-around the polyhedron center.
-
-What we need to know is the face radius of the polyhedron (the radius of
-the inscribed sphere) and the angle between the center of two adjacent
-faces using the center of the sphere as the angle's vertex.
-
-The face radius of the regular polyhedra are known values which I decided
-to not waste my time calculating. Following is a table of face radius for
-the regular polyhedra with edge length = 1:
-
-    TETRAHEDRON  : 1/(2*sqrt(2))/sqrt(3)
-    CUBE     : 1/2
-    OCTAHEDRON   : 1/sqrt(6)
-    DODECAHEDRON : T^2 * sqrt((T+2)/5) / 2     -> where T=(sqrt(5)+1)/2
-    ICOSAHEDRON  : (3*sqrt(3)+sqrt(15))/12
-
-I've not found any reference about the mentioned angles, so I needed to
-calculate them, not a trivial task until I figured out how :)
-Curiously these angles are the same for the tetrahedron and octahedron.
-A way to obtain this value is inscribing the tetrahedron inside the cube
-by matching their vertexes. So you'll notice that the remaining unmatched
-vertexes are in the same straight line starting in the cube/tetrahedron
-center and crossing the center of each tetrahedron's face. At this point
-it's easy to obtain the bigger angle of the isosceles triangle formed by
-the center of the cube and two opposite vertexes on the same cube face.
-The edges of this triangle have the following lenghts: sqrt(2) for the base
-and sqrt(3)/2 for the other two other edges. So the angle we want is:
-     +-----------------------------------------------------------+
-     | 2*ARCSIN(sqrt(2)/sqrt(3)) = 109.47122063449069174 degrees |
-     +-----------------------------------------------------------+
-For the cube this angle is obvious, but just for formality it can be
-easily obtained because we also know it's isosceles edge lenghts:
-sqrt(2)/2 for the base and 1/2 for the other two edges. So the angle we
-want is:
-     +-----------------------------------------------------------+
-     | 2*ARCSIN((sqrt(2)/2)/1)   = 90.000000000000000000 degrees |
-     +-----------------------------------------------------------+
-For the octahedron we use the same idea used for the tetrahedron, but now
-we inscribe the cube inside the octahedron so that all cubes's vertexes
-matches excatly the center of each octahedron's face. It's now clear that
-this angle is the same of the thetrahedron one:
-     +-----------------------------------------------------------+
-     | 2*ARCSIN(sqrt(2)/sqrt(3)) = 109.47122063449069174 degrees |
-     +-----------------------------------------------------------+
-For the dodecahedron it's a little bit harder because it's only relationship
-with the cube is useless to us. So we need to solve the problem by another
-way. The concept of Face radius also exists on 2D polygons with the name
-Edge radius:
-  Edge Radius For Pentagon (ERp)
-  ERp = (1/2)/TAN(36 degrees) * VRp = 0.6881909602355867905
-  (VRp is the pentagon's vertex radio).
-  Face Radius For Dodecahedron
-  FRd = T^2 * sqrt((T+2)/5) / 2 = 1.1135163644116068404
-Why we need ERp? Well, ERp and FRd segments forms a 90 degrees angle,
-completing this triangle, the lesser angle is a half of the angle we are
-looking for, so this angle is:
-     +-----------------------------------------------------------+
-     | 2*ARCTAN(ERp/FRd)     = 63.434948822922009981 degrees |
-     +-----------------------------------------------------------+
-For the icosahedron we can use the same method used for dodecahedron (well
-the method used for dodecahedron may be used for all regular polyhedra)
-  Edge Radius For Triangle (this one is well known: 1/3 of the triangle height)
-  ERt = sin(60)/3 = sqrt(3)/6 = 0.2886751345948128655
-  Face Radius For Icosahedron
-  FRi= (3*sqrt(3)+sqrt(15))/12 = 0.7557613140761707538
-So the angle is:
-     +-----------------------------------------------------------+
-     | 2*ARCTAN(ERt/FRi)     = 41.810314895778596167 degrees |
-     +-----------------------------------------------------------+
-
-*/
-
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <math.h>
-#include <unistd.h>
-
-#include <directfb.h>
-#include <directfbgl.h>
-
-#include <GL/gl.h>
-
-
-/* the super interface */
-IDirectFB *dfb;
-
-/* the primary surface (surface of primary layer) */
-IDirectFBSurface *primary;
-
-/* the GL context */
-IDirectFBGL *primary_gl;
-
-/* our font */
-IDirectFBFont *font;
-
-/* event buffer */
-IDirectFBEventBuffer *events;
-
-/* macro for a safe call to DirectFB functions */
-#define DFBCHECK(x...) \
-        {                                                                      \
-           err = x;                                                            \
-           if (err != DFB_OK) {                                                \
-              fprintf( stderr, "%s <%d>:\n\t", __FILE__, __LINE__ );           \
-              DirectFBErrorFatal( #x, err );                                   \
-           }                                                                   \
-        }
-
-static int screen_width, screen_height;
-
-static unsigned long T0 = 0;
-static GLint Frames = 0;
-static GLfloat fps = 0;
-
-static inline unsigned long get_millis()
-{
-  struct timeval tv;
-
-  gettimeofday (&tv, NULL);
-  return (tv.tv_sec * 1000 + tv.tv_usec / 1000);
-}
-
-
-
-#define Scale                      0.3
-
-#define VectMul(X1,Y1,Z1,X2,Y2,Z2) (Y1)*(Z2)-(Z1)*(Y2),(Z1)*(X2)-(X1)*(Z2),(X1)*(Y2)-(Y1)*(X2)
-#define sqr(A)                     ((A)*(A))
-
-/* Increasing this values produces better image quality, the price is speed. */
-/* Very low values produces erroneous/incorrect plotting */
-#define tetradivisions             23
-#define cubedivisions              20
-#define octadivisions              21
-#define dodecadivisions            10
-#define icodivisions               15
-
-#define tetraangle                 109.47122063449069174
-#define cubeangle                  90.000000000000000000
-#define octaangle                  109.47122063449069174
-#define dodecaangle                63.434948822922009981
-#define icoangle                   41.810314895778596167
-
-#ifndef Pi
-#define Pi                         3.1415926535897932385
-#endif
-#define SQRT2                      1.4142135623730951455
-#define SQRT3                      1.7320508075688771932
-#define SQRT5                      2.2360679774997898051
-#define SQRT6                      2.4494897427831778813
-#define SQRT15                     3.8729833462074170214
-#define cossec36_2                 0.8506508083520399322
-#define cos72                      0.3090169943749474241
-#define sin72                      0.9510565162951535721
-#define cos36                      0.8090169943749474241
-#define sin36                      0.5877852522924731292
-
-/*************************************************************************/
-
-static int       mono=0;
-static int       smooth=1;
-static GLint     WindH, WindW;
-static GLfloat   step=0;
-static GLfloat   seno;
-static int       object;
-static int       edgedivisions;
-static void      (*draw_object)( void );
-static float     Magnitude;
-static float     *MaterialColor[20];
-
-static float front_shininess[] =   {60.0};
-static float front_specular[]  =   { 0.7, 0.7, 0.7, 1.0 };
-static float ambient[]         =   { 0.0, 0.0, 0.0, 1.0 };
-static float diffuse[]         =   { 1.0, 1.0, 1.0, 1.0 };
-static float position0[]       =   { 1.0, 1.0, 1.0, 0.0 };
-static float position1[]       =   {-1.0,-1.0, 1.0, 0.0 };
-static float lmodel_ambient[]  =   { 0.5, 0.5, 0.5, 1.0 };
-static float lmodel_twoside[]  =   {GL_TRUE};
-
-static float MaterialRed[]     =   { 0.7, 0.0, 0.0, 1.0 };
-static float MaterialGreen[]   =   { 0.1, 0.5, 0.2, 1.0 };
-static float MaterialBlue[]    =   { 0.0, 0.0, 0.7, 1.0 };
-static float MaterialCyan[]    =   { 0.2, 0.5, 0.7, 1.0 };
-static float MaterialYellow[]  =   { 0.7, 0.7, 0.0, 1.0 };
-static float MaterialMagenta[] =   { 0.6, 0.2, 0.5, 1.0 };
-static float MaterialWhite[]   =   { 0.7, 0.7, 0.7, 1.0 };
-static float MaterialGray[]    =   { 0.2, 0.2, 0.2, 1.0 };
-
-#define TRIANGLE(Edge, Amp, Divisions, Z)                                                                        \
-{                                                                                                                \
-  GLfloat   Xf,Yf,Xa,Yb,Xf2,Yf2;                                                                                 \
-  GLfloat   Factor,Factor1,Factor2;                                                                              \
-  GLfloat   VertX,VertY,VertZ,NeiAX,NeiAY,NeiAZ,NeiBX,NeiBY,NeiBZ;                                               \
-  GLfloat   Ax,Ay,Bx;                                                                                            \
-  int       Ri,Ti;                                                                                               \
-  GLfloat   Vr=(Edge)*SQRT3/3;                                                                                   \
-  GLfloat   AmpVr2=(Amp)/sqr(Vr);                                                                                \
-  GLfloat   Zf=(Edge)*(Z);                                                                                       \
-                                                                                                                 \
-  Ax=(Edge)*(+0.5/(Divisions)), Ay=(Edge)*(-SQRT3/(2*Divisions));                                                \
-  Bx=(Edge)*(-0.5/(Divisions));                                                                                  \
-                                                                                                                 \
-  for (Ri=1; Ri<=(Divisions); Ri++) {                                                                            \
-    glBegin(GL_TRIANGLE_STRIP);                                                                                  \
-    for (Ti=0; Ti<Ri; Ti++) {                                                                                    \
-      Xf=(float)(Ri-Ti)*Ax + (float)Ti*Bx;                                                                       \
-      Yf=Vr+(float)(Ri-Ti)*Ay + (float)Ti*Ay;                                                                    \
-      Xa=Xf+0.001; Yb=Yf+0.001;                                                                                  \
-      Factor=1-(((Xf2=sqr(Xf))+(Yf2=sqr(Yf)))*AmpVr2);                                                           \
-      Factor1=1-((sqr(Xa)+Yf2)*AmpVr2);                                                                          \
-      Factor2=1-((Xf2+sqr(Yb))*AmpVr2);                                                                          \
-      VertX=Factor*Xf;        VertY=Factor*Yf;        VertZ=Factor*Zf;                                           \
-      NeiAX=Factor1*Xa-VertX; NeiAY=Factor1*Yf-VertY; NeiAZ=Factor1*Zf-VertZ;                                    \
-      NeiBX=Factor2*Xf-VertX; NeiBY=Factor2*Yb-VertY; NeiBZ=Factor2*Zf-VertZ;                                    \
-      glNormal3f(VectMul(NeiAX, NeiAY, NeiAZ, NeiBX, NeiBY, NeiBZ));                                             \
-      glVertex3f(VertX, VertY, VertZ);                                                                           \
-                                                                                                                 \
-      Xf=(float)(Ri-Ti-1)*Ax + (float)Ti*Bx;                                                                     \
-      Yf=Vr+(float)(Ri-Ti-1)*Ay + (float)Ti*Ay;                                                                  \
-      Xa=Xf+0.001; Yb=Yf+0.001;                                                                                  \
-      Factor=1-(((Xf2=sqr(Xf))+(Yf2=sqr(Yf)))*AmpVr2);                                                           \
-      Factor1=1-((sqr(Xa)+Yf2)*AmpVr2);                                                                          \
-      Factor2=1-((Xf2+sqr(Yb))*AmpVr2);                                                                          \
-      VertX=Factor*Xf;        VertY=Factor*Yf;        VertZ=Factor*Zf;                                           \
-      NeiAX=Factor1*Xa-VertX; NeiAY=Factor1*Yf-VertY; NeiAZ=Factor1*Zf-VertZ;                                    \
-      NeiBX=Factor2*Xf-VertX; NeiBY=Factor2*Yb-VertY; NeiBZ=Factor2*Zf-VertZ;                                    \
-      glNormal3f(VectMul(NeiAX, NeiAY, NeiAZ, NeiBX, NeiBY, NeiBZ));                                             \
-      glVertex3f(VertX, VertY, VertZ);                                                                           \
-                                                                                                                 \
-    }                                                                                                            \
-    Xf=(float)Ri*Bx;                                                                                             \
-    Yf=Vr+(float)Ri*Ay;                                                                                          \
-    Xa=Xf+0.001; Yb=Yf+0.001;                                                                                    \
-    Factor=1-(((Xf2=sqr(Xf))+(Yf2=sqr(Yf)))*AmpVr2);                                                             \
-    Factor1=1-((sqr(Xa)+Yf2)*AmpVr2);                                                                            \
-    Factor2=1-((Xf2+sqr(Yb))*AmpVr2);                                                                            \
-    VertX=Factor*Xf;        VertY=Factor*Yf;        VertZ=Factor*Zf;                                             \
-    NeiAX=Factor1*Xa-VertX; NeiAY=Factor1*Yf-VertY; NeiAZ=Factor1*Zf-VertZ;                                      \
-    NeiBX=Factor2*Xf-VertX; NeiBY=Factor2*Yb-VertY; NeiBZ=Factor2*Zf-VertZ;                                      \
-    glNormal3f(VectMul(NeiAX, NeiAY, NeiAZ, NeiBX, NeiBY, NeiBZ));                                               \
-    glVertex3f(VertX, VertY, VertZ);                                                                             \
-    glEnd();                                                                                                     \
-  }                                                                                                              \
-}
-
-#define SQUARE(Edge, Amp, Divisions, Z)                                                                          \
-{                                                                                                                \
-  int       Xi,Yi;                                                                                               \
-  GLfloat   Xf,Yf,Y,Xf2,Yf2,Y2,Xa,Yb;                                                                            \
-  GLfloat   Factor,Factor1,Factor2;                                                                              \
-  GLfloat   VertX,VertY,VertZ,NeiAX,NeiAY,NeiAZ,NeiBX,NeiBY,NeiBZ;                                               \
-  GLfloat   Zf=(Edge)*(Z);                                                                                       \
-  GLfloat   AmpVr2=(Amp)/sqr((Edge)*SQRT2/2);                                                                    \
-                                                                                                                 \
-  for (Yi=0; Yi<(Divisions); Yi++) {                                                                             \
-    Yf=-((Edge)/2.0) + ((float)Yi)/(Divisions)*(Edge);                                                           \
-    Yf2=sqr(Yf);                                                                                                 \
-    Y=Yf+1.0/(Divisions)*(Edge);                                                                                 \
-    Y2=sqr(Y);                                                                                                   \
-    glBegin(GL_QUAD_STRIP);                                                                                      \
-    for (Xi=0; Xi<=(Divisions); Xi++) {                                                                          \
-      Xf=-((Edge)/2.0) + ((float)Xi)/(Divisions)*(Edge);                                                         \
-      Xf2=sqr(Xf);                                                                                               \
-                                                                                                                 \
-      Xa=Xf+0.001; Yb=Y+0.001;                                                                                   \
-      Factor=1-((Xf2+Y2)*AmpVr2);                                                                                \
-      Factor1=1-((sqr(Xa)+Y2)*AmpVr2);                                                                           \
-      Factor2=1-((Xf2+sqr(Yb))*AmpVr2);                                                                          \
-      VertX=Factor*Xf;        VertY=Factor*Y;         VertZ=Factor*Zf;                                           \
-      NeiAX=Factor1*Xa-VertX; NeiAY=Factor1*Y-VertY;  NeiAZ=Factor1*Zf-VertZ;                                    \
-      NeiBX=Factor2*Xf-VertX; NeiBY=Factor2*Yb-VertY; NeiBZ=Factor2*Zf-VertZ;                                    \
-      glNormal3f(VectMul(NeiAX, NeiAY, NeiAZ, NeiBX, NeiBY, NeiBZ));                                             \
-      glVertex3f(VertX, VertY, VertZ);                                                                           \
-                                                                                                                 \
-      Xa=Xf+0.001; Yb=Yf+0.001;                                                                                  \
-      Factor=1-((Xf2+Yf2)*AmpVr2);                                                                               \
-      Factor1=1-((sqr(Xa)+Yf2)*AmpVr2);                                                                          \
-      Factor2=1-((Xf2+sqr(Yb))*AmpVr2);                                                                          \
-      VertX=Factor*Xf;        VertY=Factor*Yf;        VertZ=Factor*Zf;                                           \
-      NeiAX=Factor1*Xa-VertX; NeiAY=Factor1*Yf-VertY; NeiAZ=Factor1*Zf-VertZ;                                    \
-      NeiBX=Factor2*Xf-VertX; NeiBY=Factor2*Yb-VertY; NeiBZ=Factor2*Zf-VertZ;                                    \
-      glNormal3f(VectMul(NeiAX, NeiAY, NeiAZ, NeiBX, NeiBY, NeiBZ));                                             \
-      glVertex3f(VertX, VertY, VertZ);                                                                           \
-    }                                                                                                            \
-    glEnd();                                                                                                     \
-  }                                                                                                              \
-}
-
-#define PENTAGON(Edge, Amp, Divisions, Z)                                                                        \
-{                                                                                                                \
-  int       Ri,Ti,Fi;                                                                                            \
-  GLfloat   Xf,Yf,Xa,Yb,Xf2,Yf2;                                                                                 \
-  GLfloat   x[6],y[6];                                                                                           \
-  GLfloat   Factor,Factor1,Factor2;                                                                              \
-  GLfloat   VertX,VertY,VertZ,NeiAX,NeiAY,NeiAZ,NeiBX,NeiBY,NeiBZ;                                               \
-  GLfloat   Zf=(Edge)*(Z);                                                                                       \
-  GLfloat   AmpVr2=(Amp)/sqr((Edge)*cossec36_2);                                                                 \
-                                                                                                                 \
-  for(Fi=0;Fi<6;Fi++) {                                                                                          \
-    x[Fi]=-cos( Fi*2*Pi/5 + Pi/10 )/(Divisions)*cossec36_2*(Edge);                                                \
-    y[Fi]=sin( Fi*2*Pi/5 + Pi/10 )/(Divisions)*cossec36_2*(Edge);                                                \
-  }                                                                                                              \
-                                                                                                                 \
-  for (Ri=1; Ri<=(Divisions); Ri++) {                                                                            \
-    for (Fi=0; Fi<5; Fi++) {                                                                                     \
-      glBegin(GL_TRIANGLE_STRIP);                                                                                \
-      for (Ti=0; Ti<Ri; Ti++) {                                                                                  \
-        Xf=(float)(Ri-Ti)*x[Fi] + (float)Ti*x[Fi+1];                                                             \
-        Yf=(float)(Ri-Ti)*y[Fi] + (float)Ti*y[Fi+1];                                                             \
-        Xa=Xf+0.001; Yb=Yf+0.001;                                                                                \
-    Factor=1-(((Xf2=sqr(Xf))+(Yf2=sqr(Yf)))*AmpVr2);                                                         \
-    Factor1=1-((sqr(Xa)+Yf2)*AmpVr2);                                                                        \
-    Factor2=1-((Xf2+sqr(Yb))*AmpVr2);                                                                        \
-        VertX=Factor*Xf;        VertY=Factor*Yf;        VertZ=Factor*Zf;                                         \
-        NeiAX=Factor1*Xa-VertX; NeiAY=Factor1*Yf-VertY; NeiAZ=Factor1*Zf-VertZ;                                  \
-        NeiBX=Factor2*Xf-VertX; NeiBY=Factor2*Yb-VertY; NeiBZ=Factor2*Zf-VertZ;                                  \
-        glNormal3f(VectMul(NeiAX, NeiAY, NeiAZ, NeiBX, NeiBY, NeiBZ));                                           \
-    glVertex3f(VertX, VertY, VertZ);                                                                         \
-                                                                                                                 \
-        Xf=(float)(Ri-Ti-1)*x[Fi] + (float)Ti*x[Fi+1];                                                           \
-        Yf=(float)(Ri-Ti-1)*y[Fi] + (float)Ti*y[Fi+1];                                                           \
-        Xa=Xf+0.001; Yb=Yf+0.001;                                                                                \
-    Factor=1-(((Xf2=sqr(Xf))+(Yf2=sqr(Yf)))*AmpVr2);                                                         \
-    Factor1=1-((sqr(Xa)+Yf2)*AmpVr2);                                                                        \
-    Factor2=1-((Xf2+sqr(Yb))*AmpVr2);                                                                        \
-        VertX=Factor*Xf;        VertY=Factor*Yf;        VertZ=Factor*Zf;                                         \
-        NeiAX=Factor1*Xa-VertX; NeiAY=Factor1*Yf-VertY; NeiAZ=Factor1*Zf-VertZ;                                  \
-        NeiBX=Factor2*Xf-VertX; NeiBY=Factor2*Yb-VertY; NeiBZ=Factor2*Zf-VertZ;                                  \
-        glNormal3f(VectMul(NeiAX, NeiAY, NeiAZ, NeiBX, NeiBY, NeiBZ));                                           \
-    glVertex3f(VertX, VertY, VertZ);                                                                         \
-                                                                                                                 \
-      }                                                                                                          \
-      Xf=(float)Ri*x[Fi+1];                                                                                      \
-      Yf=(float)Ri*y[Fi+1];                                                                                      \
-      Xa=Xf+0.001; Yb=Yf+0.001;                                                                                  \
-      Factor=1-(((Xf2=sqr(Xf))+(Yf2=sqr(Yf)))*AmpVr2);                                                           \
-      Factor1=1-((sqr(Xa)+Yf2)*AmpVr2);                                                                          \
-      Factor2=1-((Xf2+sqr(Yb))*AmpVr2);                                                                          \
-      VertX=Factor*Xf;        VertY=Factor*Yf;        VertZ=Factor*Zf;                                           \
-      NeiAX=Factor1*Xa-VertX; NeiAY=Factor1*Yf-VertY; NeiAZ=Factor1*Zf-VertZ;                                    \
-      NeiBX=Factor2*Xf-VertX; NeiBY=Factor2*Yb-VertY; NeiBZ=Factor2*Zf-VertZ;                                    \
-      glNormal3f(VectMul(NeiAX, NeiAY, NeiAZ, NeiBX, NeiBY, NeiBZ));                                             \
-      glVertex3f(VertX, VertY, VertZ);                                                                           \
-      glEnd();                                                                                                   \
-    }                                                                                                            \
-  }                                                                                                              \
-}
-
-static void draw_tetra( void )
-{
-  GLuint list;
-
-  list = glGenLists( 1 );
-  glNewList( list, GL_COMPILE );
-  TRIANGLE(2,seno,edgedivisions,0.5/SQRT6);
-  glEndList();
-
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[0]);
-  glCallList(list);
-  glPushMatrix();
-  glRotatef(180,0,0,1);
-  glRotatef(-tetraangle,1,0,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[1]);
-  glCallList(list);
-  glPopMatrix();
-  glPushMatrix();
-  glRotatef(180,0,1,0);
-  glRotatef(-180+tetraangle,0.5,SQRT3/2,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[2]);
-  glCallList(list);
-  glPopMatrix();
-  glRotatef(180,0,1,0);
-  glRotatef(-180+tetraangle,0.5,-SQRT3/2,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[3]);
-  glCallList(list);
-
-  glDeleteLists(list,1);
-}
-
-static void draw_cube( void )
-{
-  GLuint list;
-
-  list = glGenLists( 1 );
-  glNewList( list, GL_COMPILE );
-  SQUARE(2, seno, edgedivisions, 0.5)
-  glEndList();
-
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[0]);
-  glCallList(list);
-  glRotatef(cubeangle,1,0,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[1]);
-  glCallList(list);
-  glRotatef(cubeangle,1,0,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[2]);
-  glCallList(list);
-  glRotatef(cubeangle,1,0,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[3]);
-  glCallList(list);
-  glRotatef(cubeangle,0,1,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[4]);
-  glCallList(list);
-  glRotatef(2*cubeangle,0,1,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[5]);
-  glCallList(list);
-
-  glDeleteLists(list,1);
-}
-
-static void draw_octa( void )
-{
-  GLuint list;
-
-  list = glGenLists( 1 );
-  glNewList( list, GL_COMPILE );
-  TRIANGLE(2,seno,edgedivisions,1/SQRT6);
-  glEndList();
-
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[0]);
-  glCallList(list);
-  glPushMatrix();
-  glRotatef(180,0,0,1);
-  glRotatef(-180+octaangle,1,0,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[1]);
-  glCallList(list);
-  glPopMatrix();
-  glPushMatrix();
-  glRotatef(180,0,1,0);
-  glRotatef(-octaangle,0.5,SQRT3/2,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[2]);
-  glCallList(list);
-  glPopMatrix();
-  glPushMatrix();
-  glRotatef(180,0,1,0);
-  glRotatef(-octaangle,0.5,-SQRT3/2,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[3]);
-  glCallList(list);
-  glPopMatrix();
-  glRotatef(180,1,0,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[4]);
-  glCallList(list);
-  glPushMatrix();
-  glRotatef(180,0,0,1);
-  glRotatef(-180+octaangle,1,0,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[5]);
-  glCallList(list);
-  glPopMatrix();
-  glPushMatrix();
-  glRotatef(180,0,1,0);
-  glRotatef(-octaangle,0.5,SQRT3/2,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[6]);
-  glCallList(list);
-  glPopMatrix();
-  glRotatef(180,0,1,0);
-  glRotatef(-octaangle,0.5,-SQRT3/2,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[7]);
-  glCallList(list);
-
-  glDeleteLists(list,1);
-}
-
-static void draw_dodeca( void )
-{
-  GLuint list;
-
-#define TAU ((SQRT5+1)/2)
-
-  list = glGenLists( 1 );
-  glNewList( list, GL_COMPILE );
-  PENTAGON(1,seno,edgedivisions,sqr(TAU) * sqrt((TAU+2)/5) / 2);
-  glEndList();
-
-  glPushMatrix();
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[0]);
-  glCallList(list);
-  glRotatef(180,0,0,1);
-  glPushMatrix();
-  glRotatef(-dodecaangle,1,0,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[1]);
-  glCallList(list);
-  glPopMatrix();
-  glPushMatrix();
-  glRotatef(-dodecaangle,cos72,sin72,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[2]);
-  glCallList(list);
-  glPopMatrix();
-  glPushMatrix();
-  glRotatef(-dodecaangle,cos72,-sin72,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[3]);
-  glCallList(list);
-  glPopMatrix();
-  glPushMatrix();
-  glRotatef(dodecaangle,cos36,-sin36,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[4]);
-  glCallList(list);
-  glPopMatrix();
-  glRotatef(dodecaangle,cos36,sin36,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[5]);
-  glCallList(list);
-  glPopMatrix();
-  glRotatef(180,1,0,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[6]);
-  glCallList(list);
-  glRotatef(180,0,0,1);
-  glPushMatrix();
-  glRotatef(-dodecaangle,1,0,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[7]);
-  glCallList(list);
-  glPopMatrix();
-  glPushMatrix();
-  glRotatef(-dodecaangle,cos72,sin72,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[8]);
-  glCallList(list);
-  glPopMatrix();
-  glPushMatrix();
-  glRotatef(-dodecaangle,cos72,-sin72,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[9]);
-  glCallList(list);
-  glPopMatrix();
-  glPushMatrix();
-  glRotatef(dodecaangle,cos36,-sin36,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[10]);
-  glCallList(list);
-  glPopMatrix();
-  glRotatef(dodecaangle,cos36,sin36,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[11]);
-  glCallList(list);
-
-  glDeleteLists(list,1);
-}
-
-static void draw_ico( void )
-{
-  GLuint list;
-
-  list = glGenLists( 1 );
-  glNewList( list, GL_COMPILE );
-  TRIANGLE(1.5,seno,edgedivisions,(3*SQRT3+SQRT15)/12);
-  glEndList();
-
-  glPushMatrix();
-
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[0]);
-  glCallList(list);
-  glPushMatrix();
-  glRotatef(180,0,0,1);
-  glRotatef(-icoangle,1,0,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[1]);
-  glCallList(list);
-  glPushMatrix();
-  glRotatef(180,0,1,0);
-  glRotatef(-180+icoangle,0.5,SQRT3/2,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[2]);
-  glCallList(list);
-  glPopMatrix();
-  glRotatef(180,0,1,0);
-  glRotatef(-180+icoangle,0.5,-SQRT3/2,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[3]);
-  glCallList(list);
-  glPopMatrix();
-  glPushMatrix();
-  glRotatef(180,0,1,0);
-  glRotatef(-180+icoangle,0.5,SQRT3/2,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[4]);
-  glCallList(list);
-  glPushMatrix();
-  glRotatef(180,0,1,0);
-  glRotatef(-180+icoangle,0.5,SQRT3/2,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[5]);
-  glCallList(list);
-  glPopMatrix();
-  glRotatef(180,0,0,1);
-  glRotatef(-icoangle,1,0,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[6]);
-  glCallList(list);
-  glPopMatrix();
-  glRotatef(180,0,1,0);
-  glRotatef(-180+icoangle,0.5,-SQRT3/2,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[7]);
-  glCallList(list);
-  glPushMatrix();
-  glRotatef(180,0,1,0);
-  glRotatef(-180+icoangle,0.5,-SQRT3/2,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[8]);
-  glCallList(list);
-  glPopMatrix();
-  glRotatef(180,0,0,1);
-  glRotatef(-icoangle,1,0,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[9]);
-  glCallList(list);
-  glPopMatrix();
-  glRotatef(180,1,0,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[10]);
-  glCallList(list);
-  glPushMatrix();
-  glRotatef(180,0,0,1);
-  glRotatef(-icoangle,1,0,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[11]);
-  glCallList(list);
-  glPushMatrix();
-  glRotatef(180,0,1,0);
-  glRotatef(-180+icoangle,0.5,SQRT3/2,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[12]);
-  glCallList(list);
-  glPopMatrix();
-  glRotatef(180,0,1,0);
-  glRotatef(-180+icoangle,0.5,-SQRT3/2,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[13]);
-  glCallList(list);
-  glPopMatrix();
-  glPushMatrix();
-  glRotatef(180,0,1,0);
-  glRotatef(-180+icoangle,0.5,SQRT3/2,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[14]);
-  glCallList(list);
-  glPushMatrix();
-  glRotatef(180,0,1,0);
-  glRotatef(-180+icoangle,0.5,SQRT3/2,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[15]);
-  glCallList(list);
-  glPopMatrix();
-  glRotatef(180,0,0,1);
-  glRotatef(-icoangle,1,0,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[16]);
-  glCallList(list);
-  glPopMatrix();
-  glRotatef(180,0,1,0);
-  glRotatef(-180+icoangle,0.5,-SQRT3/2,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[17]);
-  glCallList(list);
-  glPushMatrix();
-  glRotatef(180,0,1,0);
-  glRotatef(-180+icoangle,0.5,-SQRT3/2,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[18]);
-  glCallList(list);
-  glPopMatrix();
-  glRotatef(180,0,0,1);
-  glRotatef(-icoangle,1,0,0);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[19]);
-  glCallList(list);
-
-  glDeleteLists(list,1);
-}
-
-static void draw ( void ) {
-  glClear( /*GL_COLOR_BUFFER_BIT |*/ GL_DEPTH_BUFFER_BIT );
-
-  glPushMatrix();
-
-    glTranslatef( 0.0, 0.0, -10.0 );
-    glScalef( Scale*WindH/WindW, Scale, Scale );
-    glTranslatef(2.5*WindW/WindH*sin(step*1.11),2.5*cos(step*1.25*1.11),0);
-    glRotatef(step*100,1,0,0);
-    glRotatef(step*95,0,1,0);
-    glRotatef(step*90,0,0,1);
-
-  seno=(sin(step)+1.0/3.0)*(4.0/5.0)*Magnitude;
-
-  draw_object();
-
-  glPopMatrix();
-
-  glFlush();
-
-  step+=0.05;
-}
-
-static void reshape( int width, int height )
-{
-  glViewport(0, 0, WindW=(GLint)width, WindH=(GLint)height);
-  glMatrixMode(GL_PROJECTION);
-  glLoadIdentity();
-  glFrustum( -1.0, 1.0, -1.0, 1.0, 5.0, 15.0 );
-  glMatrixMode(GL_MODELVIEW);
-}
-
-static void pinit(void)
-{
-  switch(object) {
-    case 1:
-      draw_object=draw_tetra;
-      MaterialColor[0]=MaterialRed;
-      MaterialColor[1]=MaterialGreen;
-      MaterialColor[2]=MaterialBlue;
-      MaterialColor[3]=MaterialWhite;
-      edgedivisions=tetradivisions;
-      Magnitude=2.5;
-      break;
-    case 2:
-      draw_object=draw_cube;
-      MaterialColor[0]=MaterialRed;
-      MaterialColor[1]=MaterialGreen;
-      MaterialColor[2]=MaterialCyan;
-      MaterialColor[3]=MaterialMagenta;
-      MaterialColor[4]=MaterialYellow;
-      MaterialColor[5]=MaterialBlue;
-      edgedivisions=cubedivisions;
-      Magnitude=2.0;
-      break;
-    case 3:
-      draw_object=draw_octa;
-      MaterialColor[0]=MaterialRed;
-      MaterialColor[1]=MaterialGreen;
-      MaterialColor[2]=MaterialBlue;
-      MaterialColor[3]=MaterialWhite;
-      MaterialColor[4]=MaterialCyan;
-      MaterialColor[5]=MaterialMagenta;
-      MaterialColor[6]=MaterialGray;
-      MaterialColor[7]=MaterialYellow;
-      edgedivisions=octadivisions;
-      Magnitude=2.5;
-      break;
-    case 4:
-      draw_object=draw_dodeca;
-      MaterialColor[ 0]=MaterialRed;
-      MaterialColor[ 1]=MaterialGreen;
-      MaterialColor[ 2]=MaterialCyan;
-      MaterialColor[ 3]=MaterialBlue;
-      MaterialColor[ 4]=MaterialMagenta;
-      MaterialColor[ 5]=MaterialYellow;
-      MaterialColor[ 6]=MaterialGreen;
-      MaterialColor[ 7]=MaterialCyan;
-      MaterialColor[ 8]=MaterialRed;
-      MaterialColor[ 9]=MaterialMagenta;
-      MaterialColor[10]=MaterialBlue;
-      MaterialColor[11]=MaterialYellow;
-      edgedivisions=dodecadivisions;
-      Magnitude=2.0;
-      break;
-    case 5:
-      draw_object=draw_ico;
-      MaterialColor[ 0]=MaterialRed;
-      MaterialColor[ 1]=MaterialGreen;
-      MaterialColor[ 2]=MaterialBlue;
-      MaterialColor[ 3]=MaterialCyan;
-      MaterialColor[ 4]=MaterialYellow;
-      MaterialColor[ 5]=MaterialMagenta;
-      MaterialColor[ 6]=MaterialRed;
-      MaterialColor[ 7]=MaterialGreen;
-      MaterialColor[ 8]=MaterialBlue;
-      MaterialColor[ 9]=MaterialWhite;
-      MaterialColor[10]=MaterialCyan;
-      MaterialColor[11]=MaterialYellow;
-      MaterialColor[12]=MaterialMagenta;
-      MaterialColor[13]=MaterialRed;
-      MaterialColor[14]=MaterialGreen;
-      MaterialColor[15]=MaterialBlue;
-      MaterialColor[16]=MaterialCyan;
-      MaterialColor[17]=MaterialYellow;
-      MaterialColor[18]=MaterialMagenta;
-      MaterialColor[19]=MaterialGray;
-      edgedivisions=icodivisions;
-      Magnitude=2.5;
-      break;
-  }
-  if (mono) {
-    int loop;
-    for (loop=0; loop<20; loop++) MaterialColor[loop]=MaterialGray;
-  }
-  if (smooth) {
-    glShadeModel( GL_SMOOTH );
-  } else {
-    glShadeModel( GL_FLAT );
-  }
-
-}
-
-static void init(void)
-{
-  printf("Morph 3D - Shows morphing platonic polyhedra\n");
-  printf("Author: Marcelo Fernandes Vianna (vianna@cat.cbpf.br)\n\n");
-  printf("  [1]    - Tetrahedron\n");
-  printf("  [2]    - Hexahedron (Cube)\n");
-  printf("  [3]    - Octahedron\n");
-  printf("  [4]    - Dodecahedron\n");
-  printf("  [5]    - Icosahedron\n");
-  printf("[SPACE]  - Toggle colored faces\n");
-  printf("[RETURN] - Toggle smooth/flat shading\n");
-  printf(" [ESC]   - Quit\n");
-
-  object=1;
-
-  glClearDepth(1.0);
-  glClearColor( 0.0, 0.0, 0.0, 0.0 );
-  glColor3f( 1.0, 1.0, 1.0 );
-
-  glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
-  glFlush();
-  primary->Flip( primary, NULL, 0 );
-
-  glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
-  glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
-  glLightfv(GL_LIGHT0, GL_POSITION, position0);
-  glLightfv(GL_LIGHT1, GL_AMBIENT, ambient);
-  glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse);
-  glLightfv(GL_LIGHT1, GL_POSITION, position1);
-  glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);
-  glLightModelfv(GL_LIGHT_MODEL_TWO_SIDE, lmodel_twoside);
-  glEnable(GL_LIGHTING);
-  glEnable(GL_LIGHT0);
-  glEnable(GL_LIGHT1);
-  glEnable(GL_DEPTH_TEST);
-  glEnable(GL_NORMALIZE);
-
-  glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, front_shininess);
-  glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, front_specular);
-
-  glHint(GL_FOG_HINT, GL_FASTEST);
-  glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
-  glHint(GL_POLYGON_SMOOTH_HINT, GL_FASTEST);
-
-  pinit();
-}
-
-int main( int argc, char *argv[] )
-{
-     int quit = 0;
-     DFBResult err;
-     DFBSurfaceDescription dsc;
-
-     DFBCHECK(DirectFBInit( &argc, &argv ));
-
-     /* create the super interface */
-     DFBCHECK(DirectFBCreate( &dfb ));
-
-     /* create an event buffer for all devices with these caps */
-     DFBCHECK(dfb->CreateInputEventBuffer( dfb, DICAPS_KEYS, DFB_FALSE, &events ));
-
-     /* set our cooperative level to DFSCL_FULLSCREEN
-        for exclusive access to the primary layer */
-     dfb->SetCooperativeLevel( dfb, DFSCL_FULLSCREEN );
-
-     /* get the primary surface, i.e. the surface of the
-        primary layer we have exclusive access to */
-     dsc.flags = DSDESC_CAPS;
-     dsc.caps  = DSCAPS_PRIMARY | DSCAPS_DOUBLE;
-
-     DFBCHECK(dfb->CreateSurface( dfb, &dsc, &primary ));
-
-     /* get the size of the surface and fill it */
-     DFBCHECK(primary->GetSize( primary, &screen_width, &screen_height ));
-     DFBCHECK(primary->FillRectangle( primary, 0, 0,
-                                      screen_width, screen_height ));
-
-     /* create the default font and set it */
-     DFBCHECK(dfb->CreateFont( dfb, NULL, NULL, &font ));
-     DFBCHECK(primary->SetFont( primary, font ));
-
-     /* get the GL context */
-     DFBCHECK(primary->GetGL( primary, &primary_gl ));
-
-     DFBCHECK(primary_gl->Lock( primary_gl ));
-     
-     init();
-     reshape(screen_width, screen_height);
-
-     DFBCHECK(primary_gl->Unlock( primary_gl ));
-     
-     T0 = get_millis();
-
-     while (!quit) {
-          DFBInputEvent evt;
-          unsigned long t;
-
-          primary->Clear( primary, 0, 0, 0, 0 );
-          
-          DFBCHECK(primary_gl->Lock( primary_gl ));
-          
-          draw();
-
-          DFBCHECK(primary_gl->Unlock( primary_gl ));
-          
-          if (fps) {
-               char buf[64];
-
-               sprintf(buf, "%4.1f FPS\n", fps);
-               primary->SetColor( primary, 0xff, 0, 0, 0xff );
-               primary->DrawString( primary, buf, -1, screen_width - 5, 5, DSTF_TOPRIGHT );
-          }
-
-          primary->Flip( primary, NULL, 0 );
-          Frames++;
-
-
-          t = get_millis();
-          if (t - T0 >= 1000) {
-               GLfloat seconds = (t - T0) / 1000.0;
-
-               fps = Frames / seconds;
-
-               T0 = t;
-               Frames = 0;
-          }
-
-
-          while (events->GetEvent( events, DFB_EVENT(&evt) ) == DFB_OK) {
-               switch (evt.type) {
-                    case DIET_KEYPRESS:
-                         switch (evt.key_symbol) {
-                              case DIKS_ESCAPE:
-                                   quit = 1;
-                                   break;
-                              case DIKS_1: object=1; break;
-                              case DIKS_2: object=2; break;
-                              case DIKS_3: object=3; break;
-                              case DIKS_4: object=4; break;
-                              case DIKS_5: object=5; break;
-                              case DIKS_SPACE: mono^=1; break;
-                              case DIKS_ENTER: smooth^=1; break;
-                              default:
-                                   ;
-                         }
-                         pinit();
-                         break;
-                    default:
-                         ;
-               }
-          }
-     }
-
-     /* release our interfaces to shutdown DirectFB */
-     primary_gl->Release( primary_gl );
-     primary->Release( primary );
-     font->Release( font );
-     events->Release( events );
-     dfb->Release( dfb );
-
-     return 0;
-}
-
diff --git a/progs/directfb/df_reflect.c b/progs/directfb/df_reflect.c
deleted file mode 100644
index a0e789c387..0000000000
--- a/progs/directfb/df_reflect.c
+++ /dev/null
@@ -1,489 +0,0 @@
-/*
-   (c) Copyright 2001  convergence integrated media GmbH.
-   All rights reserved.
-
-   Written by Denis Oliver Kropp <dok@convergence.de> and
-              Andreas Hundt <andi@convergence.de>.
-
-   This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2 of the License, or (at your option) any later version.
-
-   This library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, write to the
-   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.
-*/
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <math.h>
-
-#include <directfb.h>
-#include <directfbgl.h>
-
-#include <GL/glu.h>
-
-#include "util/showbuffer.c"
-#include "util/readtex.c"
-
-
-/* the super interface */
-IDirectFB *dfb;
-
-/* the primary surface (surface of primary layer) */
-IDirectFBSurface *primary;
-
-/* the GL context */
-IDirectFBGL *primary_gl;
-
-/* our font */
-IDirectFBFont *font;
-
-/* event buffer */
-IDirectFBEventBuffer *events;
-
-/* macro for a safe call to DirectFB functions */
-#define DFBCHECK(x...) \
-        {                                                                      \
-           err = x;                                                            \
-           if (err != DFB_OK) {                                                \
-              fprintf( stderr, "%s <%d>:\n\t", __FILE__, __LINE__ );           \
-              DirectFBErrorFatal( #x, err );                                   \
-           }                                                                   \
-        }
-
-static int screen_width, screen_height;
-
-static unsigned long T0 = 0;
-static GLint Frames = 0;
-static GLfloat fps = 0;
-
-static inline unsigned long get_millis()
-{
-  struct timeval tv;
-
-  gettimeofday (&tv, NULL);
-  return (tv.tv_sec * 1000 + tv.tv_usec / 1000);
-}
-
-/*******************************/
-
-#define DEG2RAD (3.14159/180.0)
-
-#define TABLE_TEXTURE "../images/tile.rgb"
-
-static GLint ImgWidth, ImgHeight;
-static GLenum ImgFormat;
-static GLubyte *Image = NULL;
-
-#define MAX_OBJECTS 2
-static GLint table_list;
-static GLint objects_list[MAX_OBJECTS];
-
-static GLfloat xrot, yrot;
-static GLfloat spin;
-
-static GLint Width = 400, Height = 300;
-static GLenum ShowBuffer = GL_NONE;
-
-
-static void make_table( void )
-{
-   static GLfloat table_mat[] = { 1.0, 1.0, 1.0, 0.6 };
-   static GLfloat gray[] = { 0.4, 0.4, 0.4, 1.0 };
-
-   table_list = glGenLists(1);
-   glNewList( table_list, GL_COMPILE );
-
-   /* load table's texture */
-   glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, table_mat );
-/*   glMaterialfv( GL_FRONT, GL_EMISSION, gray );*/
-   glMaterialfv( GL_FRONT, GL_DIFFUSE, table_mat );
-   glMaterialfv( GL_FRONT, GL_AMBIENT, gray );
-
-   /* draw textured square for the table */
-   glPushMatrix();
-   glScalef( 4.0, 4.0, 4.0 );
-   glBegin( GL_POLYGON );
-   glNormal3f( 0.0, 1.0, 0.0 );
-   glTexCoord2f( 0.0, 0.0 );   glVertex3f( -1.0, 0.0,  1.0 );
-   glTexCoord2f( 1.0, 0.0 );   glVertex3f(  1.0, 0.0,  1.0 );
-   glTexCoord2f( 1.0, 1.0 );   glVertex3f(  1.0, 0.0, -1.0 );
-   glTexCoord2f( 0.0, 1.0 );   glVertex3f( -1.0, 0.0, -1.0 );
-   glEnd();
-   glPopMatrix();
-
-   glDisable( GL_TEXTURE_2D );
-
-   glEndList();
-}
-
-
-static void make_objects( void )
-{
-   GLUquadricObj *q;
-
-   static GLfloat cyan[] = { 0.0, 1.0, 1.0, 1.0 };
-   static GLfloat green[] = { 0.2, 1.0, 0.2, 1.0 };
-   static GLfloat black[] = { 0.0, 0.0, 0.0, 0.0 };
-
-   q = gluNewQuadric();
-   gluQuadricDrawStyle( q, GLU_FILL );
-   gluQuadricNormals( q, GLU_SMOOTH );
-
-   objects_list[0] = glGenLists(1);
-   glNewList( objects_list[0], GL_COMPILE );
-   glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, cyan );
-   glMaterialfv( GL_FRONT, GL_EMISSION, black );
-   gluCylinder( q, 0.5, 0.5,  1.0, 15, 1 );
-   glEndList();
-
-   objects_list[1] = glGenLists(1);
-   glNewList( objects_list[1], GL_COMPILE );
-   glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green );
-   glMaterialfv( GL_FRONT, GL_EMISSION, black );
-   gluCylinder( q, 1.5, 0.0,  2.5, 15, 1 );
-   glEndList();
-}
-
-
-static void init( void )
-{
-   make_table();
-   make_objects();
-
-   Image = LoadRGBImage( TABLE_TEXTURE, &ImgWidth, &ImgHeight, &ImgFormat );
-   if (!Image) {
-      printf("Couldn't read %s\n", TABLE_TEXTURE);
-      exit(0);
-   }
-
-   gluBuild2DMipmaps(GL_TEXTURE_2D, 3, ImgWidth, ImgHeight,
-                     ImgFormat, GL_UNSIGNED_BYTE, Image);
-
-   glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
-   glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );
-   glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
-   glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
-
-   xrot = 30.0;
-   yrot = 50.0;
-   spin = 0.0;
-
-   glShadeModel( GL_FLAT );
-
-   glEnable( GL_LIGHT0 );
-   glEnable( GL_LIGHTING );
-
-   glClearColor( 0.5, 0.5, 0.9, 0.0 );
-
-   glEnable( GL_NORMALIZE );
-}
-
-
-
-static void reshape(int w, int h)
-{
-   GLfloat yAspect = 2.5;
-   GLfloat xAspect = yAspect * (float) w / (float) h;
-   Width = w;
-   Height = h;
-   glViewport(0, 0, w, h);
-   glMatrixMode(GL_PROJECTION);
-   glLoadIdentity();
-   glFrustum( -xAspect, xAspect, -yAspect, yAspect, 10.0, 30.0 );
-   glMatrixMode(GL_MODELVIEW);
-   glLoadIdentity();
-}
-
-
-
-static void draw_objects( GLfloat eyex, GLfloat eyey, GLfloat eyez )
-{
-   (void) eyex;
-   (void) eyey;
-   (void) eyez;
-#ifndef USE_ZBUFFER
-   if (eyex<0.5) {
-#endif
-       glPushMatrix();
-       glTranslatef( 1.0, 1.5, 0.0 );
-       glRotatef( spin, 1.0, 0.5, 0.0 );
-       glRotatef( 0.5*spin, 0.0, 0.5, 1.0 );
-       glCallList( objects_list[0] );
-       glPopMatrix();
-    
-       glPushMatrix();
-       glTranslatef( -1.0, 0.85+3.0*fabs( cos(0.01*spin) ), 0.0 );
-       glRotatef( 0.5*spin, 0.0, 0.5, 1.0 );
-       glRotatef( spin, 1.0, 0.5, 0.0 );
-       glScalef( 0.5, 0.5, 0.5 );
-       glCallList( objects_list[1] );
-       glPopMatrix();
-#ifndef USE_ZBUFFER
-   }
-   else {   
-       glPushMatrix();
-       glTranslatef( -1.0, 0.85+3.0*fabs( cos(0.01*spin) ), 0.0 );
-       glRotatef( 0.5*spin, 0.0, 0.5, 1.0 );
-       glRotatef( spin, 1.0, 0.5, 0.0 );
-       glScalef( 0.5, 0.5, 0.5 );
-       glCallList( objects_list[1] );
-       glPopMatrix();
-
-       glPushMatrix();
-       glTranslatef( 1.0, 1.5, 0.0 );
-       glRotatef( spin, 1.0, 0.5, 0.0 );
-       glRotatef( 0.5*spin, 0.0, 0.5, 1.0 );
-       glCallList( objects_list[0] );
-       glPopMatrix();
-   }
-#endif
-}
-
-
-
-static void draw_table( void )
-{
-   glCallList( table_list );
-}
-
-
-
-static void draw( void )
-{
-   static GLfloat light_pos[] = { 0.0, 20.0, 0.0, 1.0 };
-   GLfloat dist = 20.0;
-   GLfloat eyex, eyey, eyez;
-
-   glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
-
-
-   eyex = dist * cos(yrot*DEG2RAD) * cos(xrot*DEG2RAD);
-   eyez = dist * sin(yrot*DEG2RAD) * cos(xrot*DEG2RAD);
-   eyey = dist * sin(xrot*DEG2RAD);
-
-   /* view from top */
-   glPushMatrix();
-   gluLookAt( eyex, eyey, eyez, 0.0, 0.0, 0.0,  0.0, 1.0, 0.0 );
-
-   glLightfv( GL_LIGHT0, GL_POSITION, light_pos );
-
-   /* draw table into stencil planes */
-   glDisable( GL_DEPTH_TEST );
-   glEnable( GL_STENCIL_TEST );
-   glStencilFunc( GL_ALWAYS, 1, 0xffffffff );
-   glStencilOp( GL_REPLACE, GL_REPLACE, GL_REPLACE );
-   glColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE );
-   draw_table();
-   glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE );
-
-   glEnable( GL_DEPTH_TEST );
-
-   /* render view from below (reflected viewport) */
-   /* only draw where stencil==1 */
-   if (eyey>0.0) {
-      glPushMatrix();
-
-      glStencilFunc( GL_EQUAL, 1, 0xffffffff );  /* draw if ==1 */
-      glStencilOp( GL_KEEP, GL_KEEP, GL_KEEP );
-      glScalef( 1.0, -1.0, 1.0 );
-
-      /* Reposition light in reflected space. */
-      glLightfv(GL_LIGHT0, GL_POSITION, light_pos);
-
-      draw_objects(eyex, eyey, eyez);
-      glPopMatrix();
-
-      /* Restore light's original unreflected position. */
-      glLightfv(GL_LIGHT0, GL_POSITION, light_pos);
-   }
-
-   glDisable( GL_STENCIL_TEST );
-
-   glEnable( GL_BLEND );
-   glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
-
-   glEnable( GL_TEXTURE_2D );
-   draw_table();
-   glDisable( GL_TEXTURE_2D );
-   glDisable( GL_BLEND );
-
-   /* view from top */
-   glPushMatrix();
-
-   draw_objects(eyex, eyey, eyez);
-
-   glPopMatrix();
-
-   glPopMatrix();
-
-   if (ShowBuffer == GL_DEPTH) {
-      ShowDepthBuffer(Width, Height, 1.0, 0.0);
-   }
-   else if (ShowBuffer == GL_STENCIL) {
-      ShowStencilBuffer(Width, Height, 255.0, 0.0);
-   }
-   else if (ShowBuffer == GL_ALPHA) {
-      ShowAlphaBuffer(Width, Height);
-   }
-}
-
-/*******************************/
-
-int main( int argc, char *argv[] )
-{
-     int quit = 0;
-     DFBResult err;
-     DFBSurfaceDescription dsc;
-
-     DFBCHECK(DirectFBInit( &argc, &argv ));
-
-     /* create the super interface */
-     DFBCHECK(DirectFBCreate( &dfb ));
-
-     /* create an event buffer for all devices with these caps */
-     DFBCHECK(dfb->CreateInputEventBuffer( dfb, DICAPS_ALL, DFB_FALSE, &events ));
-
-     /* set our cooperative level to DFSCL_FULLSCREEN
-        for exclusive access to the primary layer */
-     dfb->SetCooperativeLevel( dfb, DFSCL_FULLSCREEN );
-
-     /* get the primary surface, i.e. the surface of the
-        primary layer we have exclusive access to */
-     dsc.flags = DSDESC_CAPS;
-     dsc.caps  = (DFBSurfaceCapabilities)(DSCAPS_PRIMARY | DSCAPS_DOUBLE);
-
-     DFBCHECK(dfb->CreateSurface( dfb, &dsc, &primary ));
-
-     /* get the size of the surface and fill it */
-     DFBCHECK(primary->GetSize( primary, &screen_width, &screen_height ));
-     DFBCHECK(primary->FillRectangle( primary, 0, 0,
-                                      screen_width, screen_height ));
-
-     /* create the default font and set it */
-     DFBCHECK(dfb->CreateFont( dfb, NULL, NULL, &font ));
-     DFBCHECK(primary->SetFont( primary, font ));
-
-     /* get the GL context */
-     DFBCHECK(primary->GetGL( primary, &primary_gl ));
-
-     DFBCHECK(primary_gl->Lock( primary_gl ));
-     
-     init();
-     reshape(screen_width, screen_height);
-
-     DFBCHECK(primary_gl->Unlock( primary_gl ));
-     
-     T0 = get_millis();
-
-     while (!quit) {
-          DFBInputEvent evt;
-          unsigned long t;
-
-          DFBCHECK(primary_gl->Lock( primary_gl ));
-          
-          draw();
-
-          DFBCHECK(primary_gl->Unlock( primary_gl ));
-          
-          if (fps) {
-               char buf[64];
-
-               sprintf(buf, "%4.1f FPS\n", fps);
-               primary->SetColor( primary, 0xff, 0, 0, 0xff );
-               primary->DrawString( primary, buf, -1, screen_width - 5, 5, DSTF_TOPRIGHT );
-          }
-
-          primary->Flip( primary, NULL, (DFBSurfaceFlipFlags)0 );
-          Frames++;
-
-
-          t = get_millis();
-          if (t - T0 >= 1000) {
-               GLfloat seconds = (t - T0) / 1000.0;
-
-               fps = Frames / seconds;
-
-               T0 = t;
-               Frames = 0;
-          }
-
-
-          while (events->GetEvent( events, DFB_EVENT(&evt) ) == DFB_OK) {
-               switch (evt.type) {
-                    case DIET_KEYPRESS:
-                         switch (DFB_LOWER_CASE(evt.key_symbol)) {
-                              case DIKS_ESCAPE:
-                                   quit = 1;
-                                   break;
-                              case DIKS_CURSOR_UP:
-                                   xrot += 3.0;
-                                   if ( xrot > 85 )
-                                      xrot = 85;
-                                   break;
-                              case DIKS_CURSOR_DOWN:
-                                   xrot -= 3.0;
-                                   if ( xrot < 5 )
-                                      xrot = 5;
-                                   break;
-                              case DIKS_CURSOR_LEFT:
-                                   yrot += 3.0;
-                                   break;
-                              case DIKS_CURSOR_RIGHT:
-                                   yrot -= 3.0;
-                                   break;
-                              case DIKS_SMALL_D:
-                                   ShowBuffer = GL_DEPTH;
-                                   break;
-                              case DIKS_SMALL_S:
-                                   ShowBuffer = GL_STENCIL;
-                                   break;
-                              case DIKS_SMALL_A:
-                                   ShowBuffer = GL_ALPHA;
-                                   break;
-                              default:
-                                   ShowBuffer = GL_NONE;
-                         }
-                         break;
-                    case DIET_AXISMOTION:
-                         if (evt.flags & DIEF_AXISREL) {
-                              switch (evt.axis) {
-                                   case DIAI_X:
-                                        yrot += evt.axisrel / 2.0;
-                                        break;
-                                   case DIAI_Y:
-                                        xrot += evt.axisrel / 2.0;
-                                        break;
-                                   default:
-                                        ;
-                              }
-                         }
-                         break;
-                    default:
-                         ;
-               }
-          }
-
-          spin += 2.0;
-          yrot += 3.0;
-     }
-
-     /* release our interfaces to shutdown DirectFB */
-     primary_gl->Release( primary_gl );
-     primary->Release( primary );
-     font->Release( font );
-     events->Release( events );
-     dfb->Release( dfb );
-
-     return 0;
-}
-
diff --git a/progs/directfb/multi_window.c b/progs/directfb/multi_window.c
deleted file mode 100644
index 9bb0e4be8e..0000000000
--- a/progs/directfb/multi_window.c
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
-   (c) Copyright 2001  convergence integrated media GmbH.
-   All rights reserved.
-
-   Written by Denis Oliver Kropp <dok@convergence.de> and
-              Andreas Hundt <andi@convergence.de>.
-
-   This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2 of the License, or (at your option) any later version.
-
-   This library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, write to the
-   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.
-*/
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <math.h>
-
-#include <GL/gl.h>
-#include <GL/glu.h>
-
-#include <directfb.h>
-#include <directfbgl.h>
-
-
-typedef struct {
-     IDirectFBWindow  *window;
-     IDirectFBSurface *surface;
-     IDirectFBGL      *gl;
-
-     int               width;
-     int               height;
-     
-     unsigned long     last_time;
-     int               frames;
-     float             fps;
-} Context;
-
-static const GLfloat blue[4] = {0.2, 0.2, 1.0, 1.0};
-
-static IDirectFB             *dfb;
-static IDirectFBDisplayLayer *layer;
-static IDirectFBFont         *font;
-static IDirectFBEventBuffer  *events = NULL;
-
-/* macro for a safe call to DirectFB functions */
-#define DFBCHECK(x...) \
-        do {                                                                   \
-           ret = x;                                                            \
-           if (ret != DFB_OK) {                                                \
-              fprintf( stderr, "%s <%d>:\n\t", __FILE__, __LINE__ );           \
-              DirectFBErrorFatal( #x, ret );                                   \
-           }                                                                   \
-        } while (0)
-
-
-static inline unsigned long get_millis()
-{
-  struct timeval tv;
-
-  gettimeofday (&tv, NULL);
-  return (tv.tv_sec * 1000 + tv.tv_usec / 1000);
-}
-
-
-static void
-setup( Context *context )
-{
-     GLfloat pos[4] = {5.0, 5.0, 10.0, 0.0};
-
-     context->surface->GetSize( context->surface,
-                                &context->width, &context->height );
-
-     context->gl->Lock( context->gl );
-
-     glLightfv(GL_LIGHT0, GL_POSITION, pos);
-     glEnable(GL_CULL_FACE);
-     glEnable(GL_LIGHTING);
-     glEnable(GL_LIGHT0);
-     glEnable(GL_DEPTH_TEST);
-     
-     glViewport(0, 0, context->width, context->height);
-     
-     glMatrixMode(GL_PROJECTION);
-     glLoadIdentity();
-     gluPerspective(70.0, context->width / (float) context->height, 1.0, 80.0);
-     
-     glMatrixMode(GL_MODELVIEW);
-     glLoadIdentity();
-     glTranslatef(0.0, 0.0, -40.0);
-     
-     context->gl->Unlock( context->gl );
-}
-
-static void
-update( Context *context )
-{
-     unsigned long     t;
-     IDirectFBSurface *surface = context->surface;
-     static __u8  r = 0, g = 0, b = 0;
-    
-     
-     context->gl->Lock( context->gl );
-
-     glClearColor( r++/255.0, g++/255.0, b++/255.0, 1.0 );
-     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-     
-     context->gl->Unlock( context->gl );
-     
-     if (context->fps) {
-          char buf[16];
-
-          snprintf(buf, sizeof(buf), "%.1f FPS\n", context->fps);
-
-          surface->SetColor( surface, 0xff, 0x00, 0x00, 0xff );
-          surface->DrawString( surface, buf, -1,
-                               context->width - 5, 5, DSTF_TOPRIGHT );
-     }
-     
-     surface->Flip( surface, NULL, 0 );
-
-     context->frames++;
-
-     t = get_millis();
-     if (t - context->last_time >= 2000) {
-          float seconds = (t - context->last_time) / 1000.0f;
-
-          context->fps = context->frames / seconds;
-
-          context->last_time = t;
-          context->frames    = 0;
-     }
-}
-
-int
-main( int argc, char *argv[] )
-{
-     DFBResult ret;
-     int       i;
-     int       quit = 0;
-     const int num = 2;
-     Context   contexts[num];
-
-     DFBCHECK(DirectFBInit( &argc, &argv ));
-
-     /* create the super interface */
-     DFBCHECK(DirectFBCreate( &dfb ));
-
-     DFBCHECK(dfb->GetDisplayLayer( dfb, DLID_PRIMARY, &layer ));
-
-     /* create the default font */
-     DFBCHECK(dfb->CreateFont( dfb, NULL, NULL, &font ));
-
-     for (i=0; i<num; i++) {
-          IDirectFBWindow      *window;
-          IDirectFBSurface     *surface;
-          IDirectFBGL          *gl;
-          DFBWindowDescription  desc;
-
-          desc.flags  = DWDESC_POSX | DWDESC_POSY |
-                        DWDESC_WIDTH | DWDESC_HEIGHT;
-          desc.posx   = (i%3) * 200 + 10;
-          desc.posy   = (i/3) * 200 + 10;
-          desc.width  = 180;
-          desc.height = 180;
-
-          DFBCHECK(layer->CreateWindow( layer, &desc, &window ));
-          DFBCHECK(window->GetSurface( window, &surface ));
-          DFBCHECK(surface->GetGL( surface, &gl ));
-
-          contexts[i].window    = window;
-          contexts[i].surface   = surface;
-          contexts[i].gl        = gl;
-
-          contexts[i].last_time = get_millis();
-          contexts[i].frames    = 0;
-          contexts[i].fps       = 0;
-
-          setup( &contexts[i] );
-
-          if (events)
-               DFBCHECK(window->AttachEventBuffer( window, events ));
-          else
-               DFBCHECK(window->CreateEventBuffer( window, &events ));
-          
-          DFBCHECK(surface->SetFont( surface, font ));
-
-          window->SetOpacity( window, 0xff );
-     }
-     
-     while (!quit) {
-          DFBWindowEvent evt;
-
-          for (i=0; i<num; i++)
-               update( &contexts[i] );
-          
-          while (events->GetEvent( events, DFB_EVENT(&evt) ) == DFB_OK) {
-               switch (evt.type) {
-                    case DWET_KEYDOWN:
-                         switch (evt.key_symbol) {
-                              case DIKS_ESCAPE:
-                                   quit = 1;
-                                   break;
-
-                              default:
-                                   break;
-                         }
-                         break;
-
-                    default:
-                         break;
-               }
-          }
-     }
-
-     events->Release( events );
-
-     for (i=0; i<num; i++) {
-          contexts[i].gl->Release( contexts[i].gl );
-          contexts[i].surface->Release( contexts[i].surface );
-          contexts[i].window->Release( contexts[i].window );
-     }
-
-     font->Release( font );
-     layer->Release( layer );
-     dfb->Release( dfb );
-
-     return 0;
-}
-
diff --git a/src/glut/directfb/Makefile b/src/glut/directfb/Makefile
deleted file mode 100644
index bf93d63e30..0000000000
--- a/src/glut/directfb/Makefile
+++ /dev/null
@@ -1,87 +0,0 @@
-# subset glut
-
-TOP = ../../..
-include $(TOP)/configs/current
-
-MARK = $(TOP)/src/glut/glx
-
-GLUT_MAJOR = 3
-GLUT_MINOR = 7
-GLUT_TINY = 1
-
-INCLUDES = -I$(TOP)/include -I$(MARK) $(shell pkg-config --cflags directfb)
-
-GLUT_LIB_DEPS += $(shell pkg-config --libs directfb)
-
-CORE_SOURCES = \
-	callback.c \
-	color.c \
-	cursor.c \
-	ext.c \
-	events.c \
-	font.c \
-	game.c \
-	globals.c \
-	init.c \
-	menu.c \
-	models.c \
-	overlay.c \
-	state.c \
-	teapot.c \
-	window.c \
-
-
-MARK_SOURCES = \
-	$(MARK)/glut_8x13.c \
-	$(MARK)/glut_9x15.c \
-	$(MARK)/glut_hel10.c \
-	$(MARK)/glut_hel12.c \
-	$(MARK)/glut_hel18.c \
-	$(MARK)/glut_tr10.c \
-	$(MARK)/glut_tr24.c
-
-SOURCES = $(CORE_SOURCES)  $(MARK_SOURCES)
-
-OBJECTS =  $(SOURCES:.c=.o)
-
-
-##### RULES #####
-
-.c.o:
-	$(CC) -c $(INCLUDES) $(CFLAGS) $(DEFINES) $< -o $@
-
-.S.o:
-	$(CC) -c $(INCLUDES) $(CFLAGS) $(DEFINES)  $< -o $@
-
-
-##### TARGETS #####
-
-default: depend $(TOP)/$(LIB_DIR)/$(GLUT_LIB_NAME)
-
-
-# Make the library
-$(TOP)/$(LIB_DIR)/$(GLUT_LIB_NAME): depend $(OBJECTS)
-	$(MKLIB) -o $(GLUT_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
-		-major $(GLUT_MAJOR) -minor $(GLUT_MINOR) -patch $(GLUT_TINY) \
-		$(GLUT_LIB_DEPS) -install $(TOP)/$(LIB_DIR) \
-		$(MKLIB_OPTIONS) $(OBJECTS)
-
-
-# Run 'make -f Makefile.solo dep' to update the dependencies if you change
-# what's included by any source file.
-depend: $(SOURCES) 
-	rm -f depend
-	touch depend
-	$(MKDEP) $(MKDEP_OPTIONS) $(INCLUDES) $(SOURCES) > /dev/null 
-
-# Emacs tags
-tags:
-	etags `find . -name \*.[ch]` `find ../include`
-
-
-# Remove .o and backup files
-clean: depend
-	-rm -f depend depend.bak
-	-rm -f *.o *~ *.o *~ *.so libglut.so.3.7
-
-include depend
diff --git a/src/glut/directfb/NOTES b/src/glut/directfb/NOTES
deleted file mode 100644
index af917c6667..0000000000
--- a/src/glut/directfb/NOTES
+++ /dev/null
@@ -1,9 +0,0 @@
-DirectFB GLUT Implementation NOTES
-----------------------------------
-
-* To have high performance rendering, it's really important to
-  use glutEnterGameMode() instead of glutCreateWindow()/glutFullScreen().
-  You can also force a windowed application to game mode by setting
-  the environment variable "__GLUT_GAME_MODE".
-
-
diff --git a/src/glut/directfb/callback.c b/src/glut/directfb/callback.c
deleted file mode 100644
index 7c9768aac0..0000000000
--- a/src/glut/directfb/callback.c
+++ /dev/null
@@ -1,300 +0,0 @@
-/*
- * Copyright (C) 2006 Claudio Ciccani <klan@users.sf.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- * 
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/time.h>
-
-#include "internal.h"
-
-
-typedef void (GLUTCALLBACK *__GlutTimerCallback) ( int value );
-
-typedef struct __GlutTimer_s {
-     struct timeval        interval;
-     struct timeval        expire;
-     
-     __GlutTimerCallback   func;
-     int                   value;
-     
-     struct __GlutTimer_s *next;
-} __GlutTimer;
-
-/*****************************************************************************/
-
-static __GlutTimer *g_timers = NULL;
-
-/*****************************************************************************/
-
-
-void GLUTAPIENTRY 
-glutDisplayFunc( void (GLUTCALLBACK *func) (void) )
-{
-     display_func = func;
-}
-
-
-void GLUTAPIENTRY 
-glutReshapeFunc( void (GLUTCALLBACK *func) (int width, int height) )
-{
-     reshape_func = func;
-}
-
-
-void GLUTAPIENTRY
-glutKeyboardFunc( void (GLUTCALLBACK *func) (unsigned char key, int x, int y) )
-{
-     keyboard_func = func;
-}
-
-
-void GLUTAPIENTRY
-glutMouseFunc( void (GLUTCALLBACK *func) (int button, int state, int x, int y) )
-{
-     mouse_func = func;
-}
-
-
-void GLUTAPIENTRY
-glutMotionFunc( void (GLUTCALLBACK *func) (int x, int y) )
-{
-     motion_func = func;
-}
-
-
-void GLUTAPIENTRY
-glutPassiveMotionFunc( void (GLUTCALLBACK *func) (int x, int y) )
-{
-     passive_motion_func = func;
-}
-
-
-void GLUTAPIENTRY
-glutEntryFunc( void (GLUTCALLBACK *func) (int state) )
-{
-     entry_func = func;
-}
-
-
-void GLUTAPIENTRY
-glutVisibilityFunc( void (GLUTCALLBACK *func) (int state) )
-{
-     visibility_func = func;
-}
-
-
-void GLUTAPIENTRY
-glutMenuStateFunc( void (GLUTCALLBACK *func) (int state) )
-{
-     menu_state_func = func;
-}
-
-
-void GLUTAPIENTRY
-glutSpecialFunc( void (GLUTCALLBACK *func) (int key, int x, int y) )
-{
-     special_func = func;
-}
-
-
-void GLUTAPIENTRY
-glutSpaceballMotionFunc( void (GLUTCALLBACK *func) (int x, int y, int z) )
-{
-}
-
-
-void GLUTAPIENTRY 
-glutSpaceballRotateFunc( void (GLUTCALLBACK *func) (int x, int y, int z) )
-{
-}
-
-
-void GLUTAPIENTRY
-glutSpaceballButtonFunc( void (GLUTCALLBACK *func) (int button, int state) )
-{
-}
-
-
-void GLUTAPIENTRY
-glutButtonBoxFunc( void (GLUTCALLBACK *func) (int button, int state) )
-{
-}
-
-
-void GLUTAPIENTRY
-glutDialsFunc( void (GLUTCALLBACK *func) (int dial, int value) )
-{
-}
-
-
-void GLUTAPIENTRY
-glutTabletMotionFunc( void (GLUTCALLBACK *func) (int x, int y) )
-{
-}
-
-
-void GLUTAPIENTRY
-glutTabletButtonFunc( void (GLUTCALLBACK *func) (int button, int state, int x, int y) )
-{
-}
-
-
-void GLUTAPIENTRY
-glutMenuStatusFunc( void (GLUTCALLBACK *func) (int status, int x, int y) )
-{
-}
-
-
-void GLUTAPIENTRY
-glutOverlayDisplayFunc( void (GLUTCALLBACK *func) (void) )
-{
-}
-
-
-void GLUTAPIENTRY
-glutWindowStatusFunc( void (GLUTCALLBACK *func) (int state) )
-{
-}
-
-
-void GLUTAPIENTRY
-glutKeyboardUpFunc( void (GLUTCALLBACK *func) (unsigned char key, int x, int y) )
-{
-     keyboard_up_func = func;
-}
-
-
-void GLUTAPIENTRY
-glutSpecialUpFunc( void (GLUTCALLBACK *func) (int key, int x, int y) )
-{
-     special_up_func = func;
-}
-
-
-void GLUTAPIENTRY 
-glutJoystickFunc( void (GLUTCALLBACK *func)(unsigned int buttons, int x, int y, int z), int pollInterval )
-{
-     joystick_func = func;
-     /* FIXME: take care of pollInterval */
-}
-
-
-void GLUTAPIENTRY
-glutIdleFunc( void (GLUTCALLBACK *func) (void) )
-{
-     idle_func = func;
-}
-
-
-void GLUTAPIENTRY
-glutTimerFunc( unsigned int msec, void (GLUTCALLBACK *func) (int value), int value )
-{
-     __GlutTimer *timer;
-     
-     if (!func)
-          return;
-          
-     timer = calloc( 1, sizeof(__GlutTimer) );
-     if (!timer)
-          __glutFatalError( "out of memory" );
-     
-     timer->interval.tv_sec  = msec / 1000;
-     timer->interval.tv_usec = (msec % 1000) * 1000;
-
-     gettimeofday( &timer->expire, NULL );
-     timer->expire.tv_usec += timer->interval.tv_usec;
-     timer->expire.tv_sec  += timer->interval.tv_sec + timer->expire.tv_usec/1000000;
-     timer->expire.tv_usec %= 1000000;
-     
-     timer->func  = func;
-     timer->value = value;
-     
-     timer->next = g_timers;
-     g_timers    = timer;
-}
-
-
-void
-__glutHandleTimers( void )
-{
-     __GlutTimer    *cur;
-     struct timeval  now;
-          
-     for (cur = g_timers; cur; cur = cur->next ) {
-          gettimeofday( &now, NULL );
-          
-          if (cur->expire.tv_sec > now.tv_sec ||
-             (cur->expire.tv_sec == now.tv_sec && 
-              cur->expire.tv_usec >= now.tv_usec))
-          {
-               g_idle = GL_FALSE;
-               
-               cur->func( cur->value );
-              
-               cur->expire.tv_usec += cur->interval.tv_usec;
-               cur->expire.tv_sec  += cur->interval.tv_sec + cur->expire.tv_usec/1000000;
-               cur->expire.tv_usec %= 1000000;
-          }
-     }
-}
-
-
-GLboolean
-__glutGetTimeout( int *ret_msec )
-{
-     __GlutTimer    *cur;
-     struct timeval *time = NULL;
-     struct timeval  now;
-     
-     for (cur = g_timers; cur; cur = cur->next) {
-          if (time == NULL ||
-              time->tv_sec > cur->expire.tv_sec ||
-             (time->tv_sec == cur->expire.tv_sec && 
-              time->tv_usec > cur->expire.tv_usec)) {
-               time = &cur->expire;
-          }
-     }
-     
-     if (time == NULL)
-          return GL_FALSE;
-          
-     gettimeofday( &now, NULL );
-     
-     *ret_msec = (time->tv_sec  - now.tv_sec) * 1000 +
-                 (time->tv_usec - now.tv_usec + 999) / 1000;
-                 
-     return GL_TRUE;
-}
-     
-          
-void 
-__glutFreeTimers( void )
-{
-     __GlutTimer *cur = g_timers;
-     
-     while (cur) {
-          __GlutTimer *next = cur->next;
-          free( cur );
-          cur = next;
-     }
-     
-     g_timers = NULL;
-}
-
diff --git a/src/glut/directfb/color.c b/src/glut/directfb/color.c
deleted file mode 100644
index 26c514c6d5..0000000000
--- a/src/glut/directfb/color.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2006 Claudio Ciccani <klan@users.sf.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- * 
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "internal.h"
-
-
-void GLUTAPIENTRY 
-glutSetColor( int index, GLfloat red, GLfloat green, GLfloat blue )
-{
-}
-
-
-GLfloat GLUTAPIENTRY 
-glutGetColor( int index, int component )
-{
-     return 0.0;
-}
-
-
-void GLUTAPIENTRY
-glutCopyColormap( int win )
-{
-}
diff --git a/src/glut/directfb/cursor.c b/src/glut/directfb/cursor.c
deleted file mode 100644
index aca3fcc921..0000000000
--- a/src/glut/directfb/cursor.c
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright (C) 2006 Claudio Ciccani <klan@users.sf.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- * 
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "internal.h"
-
-#include "cursors.h"
-
-
-void GLUTAPIENTRY
-glutSetCursor( int type )
-{
-     const unsigned char   *cursor;
-     DFBSurfaceDescription  dsc;
-     IDirectFBSurface      *shape;
-     
-     if (!g_current || !g_current->window)
-          return;
-
-     if (g_current->cursor == type)
-          return;
-          
-     switch (type) {
-          case GLUT_CURSOR_RIGHT_ARROW:
-               cursor = &cur_right_arrow[0];
-               break;
-          case GLUT_CURSOR_LEFT_ARROW:
-               cursor = &cur_left_arrow[0];
-               break;
-          case GLUT_CURSOR_INFO:
-               cursor = &cur_info[0];
-               break;
-          case GLUT_CURSOR_DESTROY:
-               cursor = &cur_destroy[0];
-               break;
-          case GLUT_CURSOR_HELP:
-               cursor = &cur_help[0];
-               break;
-          case GLUT_CURSOR_CYCLE:
-               cursor = &cur_cycle[0];
-               break;
-          case GLUT_CURSOR_SPRAY:
-               cursor = &cur_spray[0];
-               break;
-          case GLUT_CURSOR_WAIT:
-               cursor = &cur_wait[0];
-               break;
-          case GLUT_CURSOR_TEXT:
-               cursor = &cur_text[0];
-               break;
-          case GLUT_CURSOR_CROSSHAIR:
-               cursor = &cur_crosshair[0];
-               break;
-          case GLUT_CURSOR_UP_DOWN:
-               cursor = &cur_up_down[0];
-               break;
-          case GLUT_CURSOR_LEFT_RIGHT:
-               cursor = &cur_left_right[0];
-               break;
-          case GLUT_CURSOR_TOP_SIDE:
-               cursor = &cur_top_side[0];
-               break;
-          case GLUT_CURSOR_BOTTOM_SIDE:
-               cursor = &cur_bottom_side[0];
-               break;
-          case GLUT_CURSOR_LEFT_SIDE:
-               cursor = &cur_left_side[0];
-               break;
-          case GLUT_CURSOR_RIGHT_SIDE:
-               cursor = &cur_right_side[0];
-               break;
-          case GLUT_CURSOR_TOP_LEFT_CORNER:
-               cursor = &cur_top_left[0];
-               break;
-          case GLUT_CURSOR_TOP_RIGHT_CORNER:
-               cursor = &cur_top_right[0];
-               break;
-          case GLUT_CURSOR_BOTTOM_RIGHT_CORNER:
-               cursor = &cur_bottom_right[0];
-               break;
-          case GLUT_CURSOR_BOTTOM_LEFT_CORNER:
-               cursor = &cur_bottom_left[0];
-               break;
-          case GLUT_CURSOR_NONE:
-               cursor = NULL;
-               break;
-          default:
-               cursor = &cur_right_arrow[0];
-               break;
-     }
-
-     dsc.flags       = DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_PIXELFORMAT;
-     dsc.width       =
-     dsc.height      = cursor ? cursor[0] : 8;
-     dsc.pixelformat = DSPF_ARGB;
-         
-     if (dfb->CreateSurface( dfb, &dsc, &shape ))
-          return;
- 
-     if (cursor) {
-          __u8 *src = (__u8*) &cursor[3];
-          __u8 *msk = src + cursor[0]*cursor[0]/8;
-          void *dst;
-          int   pitch;
-          int   x, y;
-
-          if (shape->Lock( shape, DSLF_WRITE, &dst, &pitch )) {
-               shape->Release( shape );
-               return;
-          }
-          
-          for (y = 0; y < cursor[0]; y++) {
-               for (x = 0; x < cursor[0]; x++) {
-                    ((__u32*)dst)[x] = 
-                              ((src[x>>3] & (0x80 >> (x&7))) ? 0 : 0x00ffffff) |
-                              ((msk[x>>3] & (0x80 >> (x&7))) ? 0xff000000 : 0);
-               }
-               
-               dst += pitch;
-               src += cursor[0]/8;
-               msk += cursor[0]/8;
-          }
-
-          shape->Unlock( shape );
-     }
-     else {
-          /* Invisible cursor */
-          shape->Clear( shape, 0, 0, 0, 0 );
-     }
-               
-     g_current->window->SetCursorShape( g_current->window, shape,
-                                        cursor ? cursor[1] : 0,
-                                        cursor ? cursor[2] : 0 );          
-     g_current->cursor = type;
-     
-     shape->Release( shape );           
-}
-
-
-void GLUTAPIENTRY
-glutWarpPointer( int x, int y )
-{
-     if (g_current) {
-          if (!g_game) {
-               int wx, wy;
-               g_current->window->GetPosition( g_current->window, &wx, &wy );
-               primary->WarpCursor( primary, wx+x, wy+y );
-          }
-          else {
-               g_current->cx = x;
-               g_current->cy = y;
-          }
-     }
-}
-
-
diff --git a/src/glut/directfb/cursors.h b/src/glut/directfb/cursors.h
deleted file mode 100644
index 30ab7c348e..0000000000
--- a/src/glut/directfb/cursors.h
+++ /dev/null
@@ -1,306 +0,0 @@
-#ifndef __GLUT_CURSORS_H__
-#define __GLUT_CURSORS_H__
-
-
-static const unsigned char cur_right_arrow[] = {
-     16, /* size */
-     1, 2, /* hotspot */
-     /* data */
-     0x00, 0x00, 0x60, 0x00, 0x78, 0x00, 0x3e, 0x00, 
-     0x3f, 0x80, 0x1f, 0xe0, 0x1f, 0xf8, 0x0f, 0x80, 
-     0x0f, 0xc0, 0x06, 0xe0, 0x06, 0x70, 0x02, 0x38, 
-     0x02, 0x1c, 0x00, 0x0e, 0x00, 0x04, 0x00, 0x00, 
-     /* mask */
-     0xe0, 0x00, 0xf8, 0x00, 0xfe, 0x00, 0x7f, 0x80, 
-     0x7f, 0xe0, 0x3f, 0xf8, 0x3f, 0xfc, 0x1f, 0xfc, 
-     0x1f, 0xe0, 0x0f, 0xf0, 0x0f, 0xf8, 0x07, 0x7c, 
-     0x07, 0x3e, 0x02, 0x1f, 0x00, 0x0e, 0x00, 0x04, 
-};
-
-static const unsigned char cur_left_arrow[] = {
-     16, /* size */
-     1, 15, /* hotspot */
-     /* data */
-     0x00, 0x00, 0x80, 0x06, 0x00, 0x1e, 0x00, 0x7c, 
-     0x01, 0xfc, 0x07, 0xf8, 0x1f, 0xf8, 0x01, 0xf0, 
-     0x01, 0xf0, 0x02, 0x60, 0x04, 0x60, 0x08, 0x40, 
-     0x10, 0x40, 0x20, 0x00, 0x40, 0x00, 0x00, 0x00, 
-     /* mask */
-     0x00, 0x07, 0x00, 0x1f, 0x00, 0x7f, 0x01, 0xfe, 
-     0x07, 0xfe, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xf8, 
-     0x03, 0xf8, 0x07, 0xf0, 0x0e, 0xf0, 0x1c, 0xe0, 
-     0x38, 0xe0, 0x70, 0xe0, 0xe0, 0x00, 0xc0, 0x00, 
-};
-
-static const unsigned char cur_info[] = {
-     16, /* size */
-     0, 2, /* hotspot */
-     /* data */
-     0x30, 0x00, 0x3c, 0x00, 0x0f, 0x00, 0x07, 0x80, 
-     0x03, 0xc0, 0x07, 0xe0, 0x0f, 0xf0, 0x07, 0xf4, 
-     0x0f, 0xfe, 0x0f, 0xfa, 0x07, 0xe0, 0x03, 0xe0, 
-     0x00, 0x52, 0x00, 0x46, 0x00, 0x2c, 0x00, 0x18, 
-     /* mask */
-     0xb8, 0x00, 0x3e, 0x00, 0x1f, 0x80, 0x0f, 0xc0, 
-     0x07, 0xe0, 0x0f, 0xf0, 0x1f, 0xfc, 0x1f, 0xfe, 
-     0x1f, 0xfe, 0x1f, 0xfe, 0x0f, 0xfe, 0x07, 0xfe, 
-     0x03, 0xfe, 0x00, 0xfe, 0x00, 0x7e, 0x00, 0x3c, 
-};
-
-static const unsigned char cur_destroy[] = {
-     16, /* size */
-     12, 8, /* hotspot */
-     /* data */
-     0x01, 0xe0, 0x03, 0xf0, 0x07, 0xf8, 0x0c, 0xcc, 
-     0x0c, 0xcc, 0x07, 0xf8, 0x03, 0xf0, 0x01, 0xe0, 
-     0x21, 0xe1, 0x61, 0xe1, 0x10, 0xc2, 0x0e, 0x1c, 
-     0x01, 0xe0, 0x47, 0xf8, 0x7c, 0x0f, 0x20, 0x01, 
-     /* mask */
-     0x03, 0xf0, 0x07, 0xf8, 0x0f, 0xfc, 0x1f, 0xfe, 
-     0x1f, 0xfe, 0x0f, 0xfc, 0x07, 0xf8, 0x83, 0xf1, 
-     0xe3, 0xf1, 0xf3, 0xf3, 0x39, 0xef, 0x1e, 0x1e, 
-     0x01, 0xe0, 0xc7, 0xfe, 0xff, 0xff, 0x7c, 0x0f, 
-};
-
-static const unsigned char cur_help[] = {
-     16, /* size */
-     7, 8, /* hotspot */
-     /* data */
-     0x83, 0xe0, 0x07, 0xf0, 0x0e, 0x38, 0x0c, 0x18, 
-     0x0c, 0x38, 0x0e, 0x30, 0x07, 0x00, 0x03, 0xc0, 
-     0x01, 0xc0, 0x01, 0x40, 0x01, 0x40, 0x07, 0x70, 
-     0x03, 0x60, 0x01, 0xc0, 0x00, 0x80, 0x00, 0x00, 
-     /* mask */
-     0x03, 0xe0, 0x07, 0xf0, 0x0f, 0xf8, 0x1f, 0xfc, 
-     0x1e, 0x3c, 0x1e, 0x7c, 0x1f, 0x78, 0x0f, 0xf0, 
-     0x07, 0xe0, 0x03, 0xe0, 0x03, 0xe0, 0x07, 0xf0, 
-     0x0f, 0xf8, 0x07, 0xf0, 0x03, 0xe0, 0x01, 0xc0, 
-};
-
-static const unsigned char cur_cycle[] = {
-     16, /* size */
-     7, 9, /* hotspot */
-     /* data */
-     0x00, 0x00, 0x07, 0xe2, 0x0f, 0xf6, 0x18, 0x3e, 
-     0x10, 0x12, 0x00, 0x32, 0x00, 0x7e, 0x00, 0x00, 
-     0x00, 0x00, 0x7e, 0x00, 0x4c, 0x00, 0x48, 0x08, 
-     0x7c, 0x18, 0x6f, 0xf0, 0x47, 0xe0, 0x00, 0x00, 
-     /* mask */
-     0x07, 0xe3, 0x0f, 0xf7, 0x1f, 0xff, 0x3f, 0xff, 
-     0x38, 0x3f, 0x30, 0xff, 0x00, 0xff, 0x00, 0xff, 
-     0xff, 0x00, 0xff, 0x00, 0xfe, 0x0c, 0xfc, 0x1c, 
-     0xff, 0xfc, 0xff, 0xf8, 0xef, 0xf0, 0xc7, 0xe0, 
-};
-
-static const unsigned char cur_spray[] = {
-     16, /* size */
-     2, 4, /* hotspot */
-     /* data */
-     0x98, 0x00, 0x02, 0x00, 0x18, 0xb0, 0x02, 0x78, 
-     0x18, 0x58, 0x00, 0xfc, 0x00, 0x84, 0x00, 0x9c, 
-     0x00, 0x94, 0x00, 0x9c, 0x00, 0x94, 0x00, 0x9c, 
-     0x00, 0x9c, 0x00, 0x84, 0x00, 0x84, 0x00, 0xfc, 
-     /* mask */
-     0x30, 0x00, 0x34, 0x60, 0x35, 0xf0, 0x35, 0xf0, 
-     0x35, 0xf8, 0x03, 0xfc, 0x03, 0xfc, 0x03, 0xfc, 
-     0x03, 0xfc, 0x03, 0xfc, 0x03, 0xfc, 0x03, 0xfc, 
-     0x03, 0xfc, 0x03, 0xfc, 0x03, 0xfc, 0x03, 0xfc, 
-};
-
-static const unsigned char cur_wait[] = {
-     16, /* size */
-     9, 1, /* hotspot */
-     /* data */
-     0x07, 0xf8, 0x07, 0xf8, 0x07, 0xf8, 0x0f, 0xfc, 
-     0x18, 0x86, 0x30, 0x83, 0xe0, 0x81, 0xe1, 0xc1, 
-     0xe1, 0xc1, 0xe0, 0x21, 0x30, 0x13, 0x18, 0x06, 
-     0x0f, 0xfc, 0x07, 0xf8, 0x07, 0xf8, 0x07, 0xf8, 
-     /* mask */
-     0x0f, 0xfc, 0x0f, 0xfc, 0x0f, 0xfc, 0x1f, 0xfe, 
-     0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 
-     0x1f, 0xfe, 0x0f, 0xfc, 0x0f, 0xfc, 0x0f, 0xfc, 
-};
-
-static const unsigned char cur_text[] = {
-     16, /* size */
-     8, 8, /* hotspot */
-     /* data */
-     0x00, 0x00, 0x0f, 0x70, 0x09, 0xc0, 0x00, 0x80, 
-     0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 
-     0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 
-     0x00, 0x80, 0x01, 0xc0, 0x07, 0x70, 0x00, 0x00, 
-     /* mask */
-     0x0f, 0x78, 0x0f, 0xf8, 0x0f, 0xf8, 0x03, 0xe0, 
-     0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 
-     0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 
-     0x03, 0xe0, 0x0f, 0xf8, 0x0f, 0xf8, 0x0f, 0x78, 
-};
-
-static const unsigned char cur_crosshair[] = {
-     16, /* size */
-     7, 9, /* hotspot */
-     /* data */
-     0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 
-     0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0xff, 0x7f, 
-     0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 
-     0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 
-     /* mask */
-     0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 
-     0x01, 0xc0, 0x01, 0xc0, 0xff, 0xff, 0xff, 0xff, 
-     0xff, 0xff, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 
-     0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 
-};
-
-static const unsigned char cur_up_down[] = {
-     16, /* size */
-     7, 8, /* hotspot */
-     /* data */
-     0x00, 0x80, 0x09, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 
-     0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 
-     0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x07, 0xf0, 
-     0x03, 0xe0, 0x01, 0xc0, 0x00, 0x80, 0x00, 0x00, 
-     /* mask */
-     0x01, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 0x0f, 0xf8, 
-     0x0f, 0xf8, 0x03, 0xe0, 0x03, 0xe0, 0x03, 0xe0, 
-     0x03, 0xe0, 0x03, 0xe0, 0x0f, 0xf8, 0x0f, 0xf8, 
-     0x07, 0xf0, 0x03, 0xe0, 0x01, 0xc0, 0x00, 0x00, 
-};
-
-static const unsigned char cur_left_right[] = {
-     16, /* size */
-     7, 8, /* hotspot */
-     /* data */
-     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-     0x08, 0x08, 0x18, 0x0c, 0x3f, 0xfe, 0x78, 0x0f, 
-     0x3f, 0xfe, 0x18, 0x0c, 0x08, 0x08, 0x00, 0x00, 
-     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-     /* mask */
-     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x18, 
-     0x1c, 0x1c, 0x3f, 0xfe, 0x7f, 0xff, 0x7f, 0xff, 
-     0x7f, 0xff, 0x3f, 0xfe, 0x1c, 0x1c, 0x0c, 0x18, 
-     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-};
-
-static const unsigned char cur_top_side[] = {
-     16, /* size */
-     1, 8, /* hotspot */
-     /* data */
-     0x00, 0x00, 0xff, 0xfe, 0x3f, 0xfe, 0x00, 0x00, 
-     0x00, 0x80, 0x01, 0xc0, 0x02, 0xa0, 0x04, 0x90, 
-     0x08, 0x88, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 
-     0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 
-     /* mask */
-     0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 
-     0x01, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 0x0f, 0xf8, 
-     0x1d, 0xdc, 0x19, 0xcc, 0x01, 0xc0, 0x01, 0xc0, 
-     0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 
-};
-
-static const unsigned char cur_bottom_side[] = {
-     16, /* size */
-     14, 8, /* hotspot */
-     /* data */
-     0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 
-     0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x08, 0x88, 
-     0x04, 0x90, 0x02, 0xa0, 0x01, 0xc0, 0x00, 0x80, 
-     0x00, 0x00, 0x3f, 0xfe, 0x3f, 0xfe, 0x00, 0x00, 
-     /* mask */
-     0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 
-     0x01, 0xc0, 0x01, 0xc0, 0x19, 0xcc, 0x1d, 0xdc, 
-     0x0f, 0xf8, 0x07, 0xf0, 0x03, 0xe0, 0x01, 0xc0, 
-     0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 
-};
-
-static const unsigned char cur_left_side[] = {
-     16, /* size */
-     7, 15, /* hotspot */
-     /* data */
-     0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x01, 0x06, 
-     0x00, 0x86, 0x00, 0x46, 0x00, 0x26, 0x7f, 0xf6, 
-     0x00, 0x26, 0x00, 0x46, 0x00, 0x86, 0x01, 0x06, 
-     0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 
-     /* mask */
-     0x00, 0x0f, 0x00, 0x0f, 0x03, 0x0f, 0x03, 0x8f, 
-     0x01, 0xcf, 0x00, 0xef, 0xff, 0xff, 0xff, 0xff, 
-     0xff, 0xff, 0x00, 0xef, 0x01, 0xcf, 0x03, 0x8f, 
-     0x03, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x00, 
-};
-
-static const unsigned char cur_right_side[] = {
-     16, /* size */
-     7, 2, /* hotspot */
-     /* data */
-     0x00, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x80, 
-     0x61, 0x00, 0x62, 0x00, 0x64, 0x00, 0x6f, 0xfe, 
-     0x64, 0x00, 0x62, 0x00, 0x61, 0x00, 0x60, 0x80, 
-     0x60, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 
-     /* mask */
-     0xf0, 0x00, 0xf0, 0x00, 0xf0, 0xc0, 0xf1, 0xc0, 
-     0xf3, 0x80, 0xf7, 0x00, 0xff, 0xff, 0xff, 0xff, 
-     0xff, 0xff, 0xf7, 0x00, 0xf3, 0x80, 0xf1, 0xc0, 
-     0xf0, 0xc0, 0xf0, 0x00, 0xf0, 0x00, 0x00, 0x00, 
-};
-
-static const unsigned char cur_top_left[] = {
-     16, /* size */
-     1, 15, /* hotspot */
-     /* data */
-     0x00, 0x00, 0xff, 0xfe, 0x7f, 0xfe, 0x00, 0x06, 
-     0x00, 0x06, 0x00, 0x06, 0x1f, 0xc6, 0x00, 0xc6, 
-     0x01, 0x46, 0x02, 0x46, 0x04, 0x46, 0x08, 0x46, 
-     0x10, 0x46, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 
-     /* mask */
-     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-     0x00, 0x0f, 0x3f, 0xef, 0x3f, 0xef, 0x3f, 0xef, 
-     0x03, 0xef, 0x07, 0xef, 0x0e, 0xef, 0x1c, 0xef, 
-     0x38, 0xef, 0x30, 0xef, 0x00, 0x0f, 0x00, 0x0f, 
-};
-
-static const unsigned char cur_top_right[] = {
-     16, /* size */
-     1, 2, /* hotspot */
-     /* data */
-     0x00, 0x00, 0xff, 0xfe, 0x7f, 0xfe, 0x60, 0x00, 
-     0x60, 0x00, 0x60, 0x00, 0x63, 0xf8, 0x63, 0x00, 
-     0x62, 0x80, 0x62, 0x40, 0x62, 0x20, 0x62, 0x10, 
-     0x62, 0x08, 0x60, 0x00, 0x60, 0x00, 0x00, 0x00, 
-     /* mask */
-     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-     0xf0, 0x00, 0xf7, 0xfc, 0xf7, 0xfc, 0xf7, 0xfc, 
-     0xf7, 0xc0, 0xf7, 0xe0, 0xf7, 0x70, 0xf7, 0x38, 
-     0xf7, 0x1c, 0xf7, 0x0c, 0xf0, 0x00, 0xf0, 0x00, 
-};
-
-static const unsigned char cur_bottom_right[] = {
-     16, /* size */
-     14, 2, /* hotspot */
-     /* data */
-     0x00, 0x00, 0x60, 0x00, 0x60, 0x00, 0x62, 0x08, 
-     0x62, 0x10, 0x62, 0x20, 0x62, 0x40, 0x62, 0x80, 
-     0x63, 0x00, 0x63, 0xf8, 0x60, 0x00, 0x60, 0x00, 
-     0x60, 0x00, 0x7f, 0xfe, 0x7f, 0xfe, 0x00, 0x00, 
-     /* mask */
-     0xf0, 0x00, 0xf0, 0x00, 0xf7, 0x0c, 0xf7, 0x1c, 
-     0xf7, 0x38, 0xf7, 0x70, 0xf7, 0xe0, 0xf7, 0xc0, 
-     0xf7, 0xfc, 0xf7, 0xfc, 0xf7, 0xfc, 0xf0, 0x00, 
-     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-};
-
-static const unsigned char cur_bottom_left[] = {
-     16, /* size */
-     14, 15, /* hotspot */
-     /* data */
-     0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x10, 0x46, 
-     0x08, 0x46, 0x04, 0x46, 0x02, 0x46, 0x01, 0x46, 
-     0x00, 0xc6, 0x1f, 0xc6, 0x00, 0x06, 0x00, 0x06, 
-     0x00, 0x06, 0x7f, 0xfe, 0x7f, 0xfe, 0x00, 0x00, 
-     /* mask */
-     0x00, 0x0f, 0x00, 0x0f, 0x30, 0xef, 0x38, 0xef, 
-     0x1c, 0xef, 0x0e, 0xef, 0x07, 0xef, 0x03, 0xef, 
-     0x3f, 0xef, 0x3f, 0xef, 0x3f, 0xef, 0x00, 0x0f, 
-     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-};
-
-
-#endif /* __GLUT_CURSORS_H__ */
diff --git a/src/glut/directfb/events.c b/src/glut/directfb/events.c
deleted file mode 100644
index 6ebdd166ac..0000000000
--- a/src/glut/directfb/events.c
+++ /dev/null
@@ -1,492 +0,0 @@
-/*
- * Copyright (C) 2006 Claudio Ciccani <klan@users.sf.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- * 
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#include "internal.h"
-
-
-/*****************************************************************************/
-
-static int g_ignore_key_repeat = 0;
-
-/*****************************************************************************/
-
-
-int GLUTAPIENTRY 
-glutDeviceGet( GLenum type )
-{
-     switch (type) {
-          case GLUT_HAS_KEYBOARD:
-               return (keyboard != NULL);
-          case GLUT_HAS_MOUSE:
-               return (mouse != NULL);
-          case GLUT_NUM_MOUSE_BUTTONS:
-               if (mouse) {
-                    DFBInputDeviceDescription dsc;
-                    mouse->GetDescription( mouse, &dsc );
-                    return dsc.max_button+1;
-               }
-               break;
-          case GLUT_DEVICE_IGNORE_KEY_REPEAT:
-               return g_ignore_key_repeat;
-          case GLUT_DEVICE_KEY_REPEAT:
-               return (g_ignore_key_repeat) ? GLUT_KEY_REPEAT_OFF
-                                            : GLUT_KEY_REPEAT_ON;
-          case GLUT_HAS_JOYSTICK:
-          case GLUT_OWNS_JOYSTICK:
-               return (g_game && joystick); /* only available in game mode */
-          case GLUT_JOYSTICK_BUTTONS:
-               if (joystick) {
-                    DFBInputDeviceDescription dsc;
-                    joystick->GetDescription( joystick, &dsc );
-                    return dsc.max_button+1;
-               }
-               break;
-          case GLUT_JOYSTICK_AXES:
-               if (joystick) {
-                    DFBInputDeviceDescription dsc;
-                    joystick->GetDescription( joystick, &dsc );
-                    return dsc.max_axis+1;
-               }
-               break;
-          case GLUT_JOYSTICK_POLL_RATE:
-               if (joystick)
-                    return 1; /* hack */
-               break;
-          default:
-               break;
-     }
-     
-     return 0;
-}
-
-
-int GLUTAPIENTRY
-glutGetModifiers( void )
-{
-     if (g_current)
-          return g_current->modifiers;
-     return 0;
-}
-
-
-void GLUTAPIENTRY 
-glutIgnoreKeyRepeat( int ignore )
-{
-     g_ignore_key_repeat = ignore;
-}
-
-
-void GLUTAPIENTRY
-glutSetKeyRepeat( int mode )
-{
-     g_ignore_key_repeat = (mode == GLUT_KEY_REPEAT_OFF);
-}
-
-
-void GLUTAPIENTRY
-glutForceJoystickFunc( void )
-{
-     if (g_game && joystick && joystick_func) {
-          joystick_func( g_game->buttons, 
-                         g_game->jx, g_game->jy, g_game->jz );
-     }
-}
-
-
-static int 
-__glutSpecialKey( DFBInputDeviceKeySymbol key )
-{
-     switch (key) {
-          case DIKS_F1:
-               return GLUT_KEY_F1;
-          case DIKS_F2:
-               return GLUT_KEY_F2;
-          case DIKS_F3:
-               return GLUT_KEY_F3;
-          case DIKS_F4:
-               return GLUT_KEY_F4;
-          case DIKS_F5:
-               return GLUT_KEY_F5;
-          case DIKS_F6:
-               return GLUT_KEY_F6;
-          case DIKS_F7:
-               return GLUT_KEY_F7;
-          case DIKS_F8:
-               return GLUT_KEY_F8;
-          case DIKS_F9:
-               return GLUT_KEY_F9;
-          case DIKS_F10:
-               return GLUT_KEY_F10;
-          case DIKS_F11:
-               return GLUT_KEY_F11;
-          case DIKS_F12:
-               return GLUT_KEY_F12;
-          case DIKS_CURSOR_LEFT:
-               return GLUT_KEY_LEFT;
-          case DIKS_CURSOR_UP:
-               return GLUT_KEY_UP;
-          case DIKS_CURSOR_RIGHT:
-               return GLUT_KEY_RIGHT;
-          case DIKS_CURSOR_DOWN:
-               return GLUT_KEY_DOWN;
-          case DIKS_PAGE_UP:
-               return GLUT_KEY_PAGE_UP;
-          case DIKS_PAGE_DOWN:
-               return GLUT_KEY_PAGE_DOWN;
-          case DIKS_HOME:
-               return GLUT_KEY_HOME;
-          case DIKS_END:
-               return GLUT_KEY_END;
-          case DIKS_INSERT:
-               return GLUT_KEY_INSERT;
-          default:
-               break;
-     }
-     
-     return 0;
-}
-
-
-static int 
-__glutButton( DFBInputDeviceButtonIdentifier button )
-{
-     switch (button) {
-          case DIBI_LEFT:
-               return GLUT_LEFT_BUTTON;
-          case DIBI_MIDDLE:
-               return GLUT_MIDDLE_BUTTON;
-          case DIBI_RIGHT:
-               return GLUT_RIGHT_BUTTON;
-          default:
-               break;
-     }
-     
-     return 0;
-}
-
-
-static int 
-__glutModifiers( DFBInputDeviceModifierMask mask )
-{
-     return ((mask & DIMM_SHIFT) ? GLUT_ACTIVE_SHIFT : 0)  |
-            ((mask & DIMM_CONTROL) ? GLUT_ACTIVE_CTRL : 0) |
-            ((mask & DIMM_ALT) ? GLUT_ACTIVE_ALT : 0);
-}
-
-
-static void 
-__glutWindowEvent( DFBWindowEvent *e, DFBWindowEvent *p )
-{
-     __GlutWindow *window;
-     
-     window = __glutFindWindow( e->window_id );
-     if (!window) /* window was destroyed */
-          return;
-     
-     switch (e->type) {
-          case DWET_KEYDOWN:
-               window->modifiers = __glutModifiers( e->modifiers );
-               if (g_ignore_key_repeat && p) {
-                    if (p->type       == DWET_KEYDOWN &&
-                        p->window_id  == e->window_id &&
-                        p->key_symbol == e->key_symbol)
-                         break;
-               }
-               if (DFB_KEY_IS_ASCII( e->key_symbol )) {
-                    if (keyboard_func) {
-                         __glutSetWindow( window );
-                         keyboard_func( e->key_symbol, e->x, e->y );
-                    }
-               }
-               else {
-                    int key = __glutSpecialKey( e->key_symbol );
-                    if (key && special_func) {
-                         __glutSetWindow( window );
-                         special_func( key, e->x, e->y );
-                    }
-               }
-               break;
-          case DWET_KEYUP:
-               window->modifiers = __glutModifiers( e->modifiers );
-               if (DFB_KEY_IS_ASCII( e->key_symbol )) {
-                    if (keyboard_up_func) {
-                         __glutSetWindow( window );
-                         keyboard_up_func( e->key_symbol, e->x, e->y );
-                    }
-               }
-               else {
-                    int key = __glutSpecialKey( e->key_symbol );
-                    if (key && special_up_func) {
-                         __glutSetWindow( window );
-                         special_up_func( key, e->x, e->y );
-                    }
-               }
-               break;
-          case DWET_BUTTONDOWN:
-               if (mouse_func) {
-                    __glutSetWindow( window );
-                    mouse_func( __glutButton( e->button ), GLUT_DOWN, e->x, e->y );
-               }
-               break;
-          case DWET_BUTTONUP:
-               if (mouse_func) {
-                    __glutSetWindow( window );
-                    mouse_func( __glutButton( e->button ), GLUT_UP, e->x, e->y );
-               }
-               break;
-          case DWET_MOTION:
-               if (e->buttons) {
-                    if (motion_func) {
-                         __glutSetWindow( window );
-                         motion_func( e->cx, e->cy );
-                    }
-               }
-               else {
-                    if (passive_motion_func) {
-                         __glutSetWindow( window );
-                         passive_motion_func( e->cx, e->cy );
-                    }
-               }
-               break;
-          case DWET_ENTER:
-               if (entry_func) {
-                    __glutSetWindow( window );
-                    entry_func( GLUT_ENTERED );
-               }
-               break;
-          case DWET_LEAVE:
-               if (entry_func) {
-                    __glutSetWindow( window );
-                    entry_func( GLUT_LEFT );
-               }
-               break;
-          case DWET_SIZE:
-               window->reshape = GL_TRUE;
-               window->redisplay = GL_TRUE;
-               break;
-          default:
-               break;
-     }
-}
-
-
-static void 
-__glutInputEvent( DFBInputEvent *e, DFBInputEvent *p )
-{
-     __glutAssert( g_game != NULL );
-     
-     switch (e->type) {
-          case DIET_KEYPRESS:
-               g_game->modifiers = __glutModifiers( e->modifiers );
-               if (g_ignore_key_repeat && p) {
-                    if (p->type       == DIET_KEYPRESS &&
-                        p->key_symbol == e->key_symbol)
-                         break;
-               }
-               if (DFB_KEY_IS_ASCII( e->key_symbol )) {
-                    if (keyboard_func) {
-                         __glutSetWindow( g_game );
-                         keyboard_func( e->key_symbol, g_game->cx, g_game->cy );
-                    }
-               }
-               else {
-                    int key = __glutSpecialKey( e->key_symbol );
-                    if (key && special_func) {
-                         __glutSetWindow( g_game );
-                         special_func( key, g_game->cx, g_game->cy );
-                    }
-               }
-               break;
-          case DIET_KEYRELEASE:
-               g_game->modifiers = __glutModifiers( e->modifiers ); 
-               if (DFB_KEY_IS_ASCII( e->key_symbol )) {
-                    if (keyboard_up_func) {
-                         __glutSetWindow( g_game );
-                         keyboard_up_func( e->key_symbol, g_game->cx, g_game->cy );
-                    }
-               }
-               else {
-                    int key = __glutSpecialKey( e->key_symbol );
-                    if (key && special_up_func) {
-                         __glutSetWindow( g_game );
-                         special_up_func( key, g_game->cx, g_game->cy );
-                    }
-               }
-               break;
-          case DIET_BUTTONPRESS:
-               if (e->device_id == DIDID_JOYSTICK) {
-                    g_game->buttons = e->buttons;
-                    if (joystick_func) {
-                         __glutSetWindow( g_game );
-                         joystick_func( g_game->buttons,
-                                        g_game->jx, g_game->jy, g_game->jz );
-                    }
-               }
-               else {
-                    if (mouse_func) {
-                         __glutSetWindow( g_game );
-                         mouse_func( __glutButton( e->button ), 
-                                     GLUT_DOWN, g_game->cx, g_game->cy );
-                    }
-               }
-               break;
-          case DIET_BUTTONRELEASE:
-               if (e->device_id == DIDID_JOYSTICK) {
-                    g_game->buttons = e->buttons;
-                    if (joystick_func) {
-                         __glutSetWindow( g_game );
-                         joystick_func( g_game->buttons,
-                                        g_game->jx, g_game->jy, g_game->jz );
-                    }
-               }
-               else {
-                    if (mouse_func) {
-                         __glutSetWindow( g_game );
-                         mouse_func( __glutButton( e->button ), 
-                                     GLUT_UP, g_game->cx, g_game->cy );
-                    }
-               }
-               break;
-          case DIET_AXISMOTION:
-               if (e->device_id == DIDID_JOYSTICK) {
-                    switch (e->axis) {
-                         case DIAI_X:
-                              if (e->flags & DIEF_AXISABS)
-                                   g_game->jx = e->axisabs;
-                              else if (e->flags & DIEF_AXISREL)
-                                   g_game->jx += e->axisrel;
-                              break;
-                         case DIAI_Y:
-                              if (e->flags & DIEF_AXISABS)
-                                   g_game->jy = e->axisabs;
-                              else if (e->flags & DIEF_AXISREL)
-                                   g_game->jy += e->axisrel;
-                              break;
-                         case DIAI_Z:
-                              if (e->flags & DIEF_AXISABS)
-                                   g_game->jz = e->axisabs;
-                              else if (e->flags & DIEF_AXISREL)
-                                   g_game->jz += e->axisrel;
-                              break;
-                         default:
-                              break;
-                    } 
-                    if (joystick_func) {
-                         __glutSetWindow( g_game );
-                         joystick_func( g_game->buttons,
-                                        g_game->jx, g_game->jy, g_game->jz );
-                    }
-               }
-               else {
-                    switch (e->axis) {
-                         case DIAI_X:
-                              if (e->flags & DIEF_AXISABS)
-                                   g_game->cx = e->axisabs;
-                              else if (e->flags & DIEF_AXISREL)
-                                   g_game->cx += e->axisrel;
-                              break;
-                         case DIAI_Y:
-                              if (e->flags & DIEF_AXISABS)
-                                   g_game->cy = e->axisabs;
-                              else if (e->flags & DIEF_AXISREL)
-                                   g_game->cy += e->axisrel;
-                              break;
-                         default:
-                              return;
-                    }
-                    if (e->buttons && motion_func) {
-                         __glutSetWindow( g_game );
-                         motion_func( g_game->cx, g_game->cy );
-                    }
-                    else if (!e->buttons && passive_motion_func) {
-                         __glutSetWindow( g_game );
-                         passive_motion_func( g_game->cx, g_game->cy );
-                    }
-               }
-               break;
-          default:
-               break;
-     }
-}
-
-
-void GLUTAPIENTRY 
-glutMainLoop( void )
-{
-     __glutAssert( events != NULL );
-     
-     __glutHandleWindows();
-     
-     while (GL_TRUE) {
-          DFBEvent evt, prev;
-          
-          g_idle = GL_TRUE;
-          
-          __glutHandleTimers();
-
-          prev.clazz = DFEC_NONE;
-          
-          while (events->GetEvent( events, &evt ) == DFB_OK) {
-               g_idle = GL_FALSE;
-               
-               switch (evt.clazz) {
-                    case DFEC_WINDOW:
-                         if (prev.clazz == DFEC_WINDOW)
-                              __glutWindowEvent( &evt.window, &prev.window );
-                         else
-                              __glutWindowEvent( &evt.window, NULL );
-                         break;
-                    case DFEC_INPUT:
-                         if (prev.clazz == DFEC_INPUT)
-                              __glutInputEvent( &evt.input, &prev.input );
-                         else
-                              __glutInputEvent( &evt.input, NULL );
-                         break;
-                    default:
-                         __glutWarning( "unexpected event class %d!\n", evt.clazz );
-                         break;
-               }
-               
-               prev = evt;
-                         
-               __glutHandleTimers();
-          }
-          
-          __glutHandleWindows();
-          
-          if (g_idle) {
-               if (idle_func) {
-                    idle_func();
-               }
-               else {
-                    int msec;
-                    __glutSetWindow( NULL );
-                    if (__glutGetTimeout( &msec ))
-                         events->WaitForEventWithTimeout( events, msec/1000, msec%1000 );
-                    else
-                         events->WaitForEvent( events );
-               }
-          }
-     }
-}
-
diff --git a/src/glut/directfb/ext.c b/src/glut/directfb/ext.c
deleted file mode 100644
index e37ecf5afa..0000000000
--- a/src/glut/directfb/ext.c
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * Copyright (C) 2006 Claudio Ciccani <klan@users.sf.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- * 
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "internal.h"
-
-
-static const struct {
-     const char     *name;
-     const GLUTproc  address;
-} glut_functions[] = {
-   { "glutInit", (const GLUTproc) glutInit },
-   { "glutInitDisplayMode", (const GLUTproc) glutInitDisplayMode },
-   { "glutInitDisplayString", (const GLUTproc) glutInitDisplayString },
-   { "glutInitWindowPosition", (const GLUTproc) glutInitWindowPosition },
-   { "glutInitWindowSize", (const GLUTproc) glutInitWindowSize },
-   { "glutMainLoop", (const GLUTproc) glutMainLoop },
-   { "glutCreateWindow", (const GLUTproc) glutCreateWindow },
-   { "glutCreateSubWindow", (const GLUTproc) glutCreateSubWindow },
-   { "glutDestroyWindow", (const GLUTproc) glutDestroyWindow },
-   { "glutPostRedisplay", (const GLUTproc) glutPostRedisplay },
-   { "glutPostWindowRedisplay", (const GLUTproc) glutPostWindowRedisplay },
-   { "glutSwapBuffers", (const GLUTproc) glutSwapBuffers },
-   { "glutGetWindow", (const GLUTproc) glutGetWindow },
-   { "glutSetWindow", (const GLUTproc) glutSetWindow },
-   { "glutSetWindowTitle", (const GLUTproc) glutSetWindowTitle },
-   { "glutSetIconTitle", (const GLUTproc) glutSetIconTitle },
-   { "glutPositionWindow", (const GLUTproc) glutPositionWindow },
-   { "glutReshapeWindow", (const GLUTproc) glutReshapeWindow },
-   { "glutPopWindow", (const GLUTproc) glutPopWindow },
-   { "glutPushWindow", (const GLUTproc) glutPushWindow },
-   { "glutIconifyWindow", (const GLUTproc) glutIconifyWindow },
-   { "glutShowWindow", (const GLUTproc) glutShowWindow },
-   { "glutHideWindow", (const GLUTproc) glutHideWindow },
-   { "glutFullScreen", (const GLUTproc) glutFullScreen },
-   { "glutSetCursor", (const GLUTproc) glutSetCursor },
-   { "glutWarpPointer", (const GLUTproc) glutWarpPointer },
-   { "glutEstablishOverlay", (const GLUTproc) glutEstablishOverlay },
-   { "glutRemoveOverlay", (const GLUTproc) glutRemoveOverlay },
-   { "glutUseLayer", (const GLUTproc) glutUseLayer },
-   { "glutPostOverlayRedisplay", (const GLUTproc) glutPostOverlayRedisplay },
-   { "glutPostWindowOverlayRedisplay", (const GLUTproc) glutPostWindowOverlayRedisplay },
-   { "glutShowOverlay", (const GLUTproc) glutShowOverlay },
-   { "glutHideOverlay", (const GLUTproc) glutHideOverlay },
-   { "glutCreateMenu", (const GLUTproc) glutCreateMenu },
-   { "glutDestroyMenu", (const GLUTproc) glutDestroyMenu },
-   { "glutGetMenu", (const GLUTproc) glutGetMenu },
-   { "glutSetMenu", (const GLUTproc) glutSetMenu },
-   { "glutAddMenuEntry", (const GLUTproc) glutAddMenuEntry },
-   { "glutAddSubMenu", (const GLUTproc) glutAddSubMenu },
-   { "glutChangeToMenuEntry", (const GLUTproc) glutChangeToMenuEntry },
-   { "glutChangeToSubMenu", (const GLUTproc) glutChangeToSubMenu },
-   { "glutRemoveMenuItem", (const GLUTproc) glutRemoveMenuItem },
-   { "glutAttachMenu", (const GLUTproc) glutAttachMenu },
-   { "glutDetachMenu", (const GLUTproc) glutDetachMenu },
-   { "glutDisplayFunc", (const GLUTproc) glutDisplayFunc },
-   { "glutReshapeFunc", (const GLUTproc) glutReshapeFunc },
-   { "glutKeyboardFunc", (const GLUTproc) glutKeyboardFunc },
-   { "glutMouseFunc", (const GLUTproc) glutMouseFunc },
-   { "glutMotionFunc", (const GLUTproc) glutMotionFunc },
-   { "glutPassiveMotionFunc", (const GLUTproc) glutPassiveMotionFunc },
-   { "glutEntryFunc", (const GLUTproc) glutEntryFunc },
-   { "glutVisibilityFunc", (const GLUTproc) glutVisibilityFunc },
-   { "glutIdleFunc", (const GLUTproc) glutIdleFunc },
-   { "glutTimerFunc", (const GLUTproc) glutTimerFunc },
-   { "glutMenuStateFunc", (const GLUTproc) glutMenuStateFunc },
-   { "glutSpecialFunc", (const GLUTproc) glutSpecialFunc },
-   { "glutSpaceballMotionFunc", (const GLUTproc) glutSpaceballMotionFunc },
-   { "glutSpaceballRotateFunc", (const GLUTproc) glutSpaceballRotateFunc },
-   { "glutSpaceballButtonFunc", (const GLUTproc) glutSpaceballButtonFunc },
-   { "glutButtonBoxFunc", (const GLUTproc) glutButtonBoxFunc },
-   { "glutDialsFunc", (const GLUTproc) glutDialsFunc },
-   { "glutTabletMotionFunc", (const GLUTproc) glutTabletMotionFunc },
-   { "glutTabletButtonFunc", (const GLUTproc) glutTabletButtonFunc },
-   { "glutMenuStatusFunc", (const GLUTproc) glutMenuStatusFunc },
-   { "glutOverlayDisplayFunc", (const GLUTproc) glutOverlayDisplayFunc },
-   { "glutWindowStatusFunc", (const GLUTproc) glutWindowStatusFunc },
-   { "glutKeyboardUpFunc", (const GLUTproc) glutKeyboardUpFunc },
-   { "glutSpecialUpFunc", (const GLUTproc) glutSpecialUpFunc },
-   { "glutJoystickFunc", (const GLUTproc) glutJoystickFunc },
-   { "glutSetColor", (const GLUTproc) glutSetColor },
-   { "glutGetColor", (const GLUTproc) glutGetColor },
-   { "glutCopyColormap", (const GLUTproc) glutCopyColormap },
-   { "glutGet", (const GLUTproc) glutGet },
-   { "glutDeviceGet", (const GLUTproc) glutDeviceGet },
-   { "glutExtensionSupported", (const GLUTproc) glutExtensionSupported },
-   { "glutGetModifiers", (const GLUTproc) glutGetModifiers },
-   { "glutLayerGet", (const GLUTproc) glutLayerGet },
-   { "glutGetProcAddress", (const GLUTproc) glutGetProcAddress },
-   { "glutBitmapCharacter", (const GLUTproc) glutBitmapCharacter },
-   { "glutBitmapWidth", (const GLUTproc) glutBitmapWidth },
-   { "glutStrokeCharacter", (const GLUTproc) glutStrokeCharacter },
-   { "glutStrokeWidth", (const GLUTproc) glutStrokeWidth },
-   { "glutBitmapLength", (const GLUTproc) glutBitmapLength },
-   { "glutStrokeLength", (const GLUTproc) glutStrokeLength },
-   { "glutWireSphere", (const GLUTproc) glutWireSphere },
-   { "glutSolidSphere", (const GLUTproc) glutSolidSphere },
-   { "glutWireCone", (const GLUTproc) glutWireCone },
-   { "glutSolidCone", (const GLUTproc) glutSolidCone },
-   { "glutWireCube", (const GLUTproc) glutWireCube },
-   { "glutSolidCube", (const GLUTproc) glutSolidCube },
-   { "glutWireTorus", (const GLUTproc) glutWireTorus },
-   { "glutSolidTorus", (const GLUTproc) glutSolidTorus },
-   { "glutWireDodecahedron", (const GLUTproc) glutWireDodecahedron },
-   { "glutSolidDodecahedron", (const GLUTproc) glutSolidDodecahedron },
-   { "glutWireTeapot", (const GLUTproc) glutWireTeapot },
-   { "glutSolidTeapot", (const GLUTproc) glutSolidTeapot },
-   { "glutWireOctahedron", (const GLUTproc) glutWireOctahedron },
-   { "glutSolidOctahedron", (const GLUTproc) glutSolidOctahedron },
-   { "glutWireTetrahedron", (const GLUTproc) glutWireTetrahedron },
-   { "glutSolidTetrahedron", (const GLUTproc) glutSolidTetrahedron },
-   { "glutWireIcosahedron", (const GLUTproc) glutWireIcosahedron },
-   { "glutSolidIcosahedron", (const GLUTproc) glutSolidIcosahedron },
-//   { "glutVideoResizeGet", (const GLUTproc) glutVideoResizeGet },
-//   { "glutSetupVideoResizing", (const GLUTproc) glutSetupVideoResizing },
-//   { "glutStopVideoResizing", (const GLUTproc) glutStopVideoResizing },
-//   { "glutVideoResize", (const GLUTproc) glutVideoResize },
-//   { "glutVideoPan", (const GLUTproc) glutVideoPan },
-   { "glutReportErrors", (const GLUTproc) glutReportErrors },
-   { "glutIgnoreKeyRepeat", (const GLUTproc) glutIgnoreKeyRepeat },
-   { "glutSetKeyRepeat", (const GLUTproc) glutSetKeyRepeat },
-   { "glutForceJoystickFunc", (const GLUTproc) glutForceJoystickFunc },
-   { "glutGameModeString", (const GLUTproc) glutGameModeString },
-   { "glutEnterGameMode", (const GLUTproc) glutEnterGameMode },
-   { "glutLeaveGameMode", (const GLUTproc) glutLeaveGameMode },
-   { "glutGameModeGet", (const GLUTproc) glutGameModeGet },
-};
-
-
-GLUTproc GLUTAPIENTRY 
-glutGetProcAddress( const char *name )
-{
-     int i;
-     
-     for (i = 0; i < sizeof(glut_functions)/sizeof(glut_functions[0]); i++) {
-          if (!strcmp( name, glut_functions[i].name ))
-               return glut_functions[i].address;
-     }
-
-#if DIRECTFBGL_INTERFACE_VERSION >= 1
-     if (g_current) {
-          void *address = NULL;
-          g_current->gl->GetProcAddress( g_current->gl, name, &address );
-          return address;
-     }
-#endif
-     return NULL;
-}
-
-
-int GLUTAPIENTRY 
-glutExtensionSupported( const char *name )
-{
-     GLubyte *extensions;
-     int      length;
-     
-     if (!name || !*name)
-          return 0;
-     
-     length = strlen( name );
-     extensions = (GLubyte*) glGetString( GL_EXTENSIONS );
-     
-     while (extensions && *extensions) {
-          GLubyte *next;
-          
-          next = strchr( extensions, ' ' );
-          if (next) {
-               if (length == (int)(next - extensions)) {
-                    if (!strncmp( extensions, name, length ))
-                         return 1;
-               }
-               extensions = next+1;
-          }
-          else {
-               if (!strcmp( extensions, name ))
-                    return 1;
-               break; 
-          }
-     } 
-
-     return 0;
-}
-
diff --git a/src/glut/directfb/font.c b/src/glut/directfb/font.c
deleted file mode 100644
index 0139cddbec..0000000000
--- a/src/glut/directfb/font.c
+++ /dev/null
@@ -1,213 +0,0 @@
-/* Copyright (c) Mark J. Kilgard, 1994, 1998. 
-
-   This program is freely distributable without licensing fees 
-   and is provided without guarantee or warrantee expressed or 
-   implied. This program is -not- in the public domain. */
-
-#include "internal.h"
-#include "font.h"
-
-
-#if defined(_WIN32) || defined (GLUT_IMPORT_LIB)
-
-static inline void*
-__glutFont( void *font )
-{
-     switch((long)font) {
-          case (long)GLUT_STROKE_ROMAN:
-               return &glutStrokeRoman;
-          case (long)GLUT_STROKE_MONO_ROMAN:
-               return &glutStrokeMonoRoman;
-          case (long)GLUT_BITMAP_9_BY_15:
-               return &glutBitmap9By15;
-          case (long)GLUT_BITMAP_8_BY_13:
-               return &glutBitmap8By13;
-          case (long)GLUT_BITMAP_TIMES_ROMAN_10:
-               return &glutBitmapTimesRoman10;
-          case (long)GLUT_BITMAP_TIMES_ROMAN_24:
-               return &glutBitmapTimesRoman24;
-          case (long)GLUT_BITMAP_HELVETICA_10:
-               return &glutBitmapHelvetica10;
-          case (long)GLUT_BITMAP_HELVETICA_12:
-               return &glutBitmapHelvetica12;
-          case (long)GLUT_BITMAP_HELVETICA_18:
-               return &glutBitmapHelvetica18;
-     }
-
-     return NULL; 
-}
-
-#else
-
-static inline void*
-__glutFont( void *font )
-{
-     return font;
-}
-
-#endif
-
-
-void GLUTAPIENTRY 
-glutBitmapCharacter( GLUTbitmapFont font, int c )
-{
-     const BitmapCharRec *ch;
-     BitmapFontPtr fontinfo;
-     GLint swapbytes, lsbfirst, rowlength;
-     GLint skiprows, skippixels, alignment;
-
-     fontinfo = (BitmapFontPtr) __glutFont( font );
-
-     if (!fontinfo || c < fontinfo->first ||
-         c >= fontinfo->first + fontinfo->num_chars)
-          return;
-  
-     ch = fontinfo->ch[c - fontinfo->first];
-     if (ch) {
-          /* Save current modes. */
-          glGetIntegerv(GL_UNPACK_SWAP_BYTES, &swapbytes);
-          glGetIntegerv(GL_UNPACK_LSB_FIRST, &lsbfirst);
-          glGetIntegerv(GL_UNPACK_ROW_LENGTH, &rowlength);
-          glGetIntegerv(GL_UNPACK_SKIP_ROWS, &skiprows);
-          glGetIntegerv(GL_UNPACK_SKIP_PIXELS, &skippixels);
-          glGetIntegerv(GL_UNPACK_ALIGNMENT, &alignment);
-          /* Little endian machines (DEC Alpha for example) could
-             benefit from setting GL_UNPACK_LSB_FIRST to GL_TRUE
-             instead of GL_FALSE, but this would require changing the
-             generated bitmaps too. */
-          glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE);
-          glPixelStorei(GL_UNPACK_LSB_FIRST, GL_FALSE);
-          glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
-          glPixelStorei(GL_UNPACK_SKIP_ROWS, 0);
-          glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0);
-          glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
-          glBitmap(ch->width, ch->height, ch->xorig, ch->yorig,
-                   ch->advance, 0, ch->bitmap);
-          /* Restore saved modes. */
-          glPixelStorei(GL_UNPACK_SWAP_BYTES, swapbytes);
-          glPixelStorei(GL_UNPACK_LSB_FIRST, lsbfirst);
-          glPixelStorei(GL_UNPACK_ROW_LENGTH, rowlength);
-          glPixelStorei(GL_UNPACK_SKIP_ROWS, skiprows);
-          glPixelStorei(GL_UNPACK_SKIP_PIXELS, skippixels);
-          glPixelStorei(GL_UNPACK_ALIGNMENT, alignment);
-     }
-}
-
-
-int GLUTAPIENTRY 
-glutBitmapWidth( GLUTbitmapFont font, int c )
-{
-     BitmapFontPtr fontinfo;
-     const BitmapCharRec *ch;
-
-     fontinfo = (BitmapFontPtr) __glutFont( font );
-
-     if (!fontinfo || c < fontinfo->first || 
-         c >= fontinfo->first + fontinfo->num_chars)
-          return 0;
-  
-     ch = fontinfo->ch[c - fontinfo->first];
-     if (ch)
-          return ch->advance;
-
-     return 0;
-}
-
-
-int GLUTAPIENTRY 
-glutBitmapLength( GLUTbitmapFont font, const unsigned char *string )
-{
-     int c, length;
-     BitmapFontPtr fontinfo;
-     const BitmapCharRec *ch;
-
-     fontinfo = (BitmapFontPtr) __glutFont( font );
-     if (!fontinfo)
-          return 0;
-
-     for (length = 0; *string != '\0'; string++) {
-          c = *string;
-          if (c >= fontinfo->first &&
-              c < fontinfo->first + fontinfo->num_chars) {
-               ch = fontinfo->ch[c - fontinfo->first];
-               if (ch)
-                    length += ch->advance;
-          }
-     }
-  
-     return length;
-}
-
-
-void GLUTAPIENTRY 
-glutStrokeCharacter( GLUTstrokeFont font, int c )
-{
-     const StrokeCharRec *ch;
-     const StrokeRec *stroke;
-     const CoordRec *coord;
-     StrokeFontPtr fontinfo;
-     int i, j;
-
-     fontinfo = (StrokeFontPtr) __glutFont( font );
-
-     if (!fontinfo || c < 0 || c >= fontinfo->num_chars)
-          return;
-  
-     ch = &(fontinfo->ch[c]);
-     if (ch) {
-          for (i = ch->num_strokes, stroke = ch->stroke;
-               i > 0; i--, stroke++) {
-               glBegin(GL_LINE_STRIP);
-               for (j = stroke->num_coords, coord = stroke->coord;
-                    j > 0; j--, coord++) {
-                    glVertex2f(coord->x, coord->y);
-               }
-               glEnd();
-          }
-          glTranslatef(ch->right, 0.0, 0.0);
-     }
-}
-
-
-int GLUTAPIENTRY 
-glutStrokeWidth( GLUTstrokeFont font, int c )
-{
-     StrokeFontPtr fontinfo;
-     const StrokeCharRec *ch;
-
-     fontinfo = (StrokeFontPtr) __glutFont( font );
-
-     if (!fontinfo || c < 0 || c >= fontinfo->num_chars)
-          return 0;
-  
-     ch = &(fontinfo->ch[c]);
-     if (ch)
-          return ch->right;
-          
-     return 0;
-}
-
-
-int GLUTAPIENTRY 
-glutStrokeLength( GLUTstrokeFont font, const unsigned char *string )
-{
-     int c, length;
-     StrokeFontPtr fontinfo;
-     const StrokeCharRec *ch;
-
-     fontinfo = (StrokeFontPtr) __glutFont( font );
-     if (!fontinfo)
-          return 0;
-
-     for (length = 0; *string != '\0'; string++) {
-          c = *string;
-          if (c >= 0 && c < fontinfo->num_chars) {
-               ch = &(fontinfo->ch[c]);
-               if (ch)
-                    length += ch->right;
-          }
-     }
-  
-     return length;
-}
-
diff --git a/src/glut/directfb/font.h b/src/glut/directfb/font.h
deleted file mode 100644
index b1e76838a0..0000000000
--- a/src/glut/directfb/font.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Copyright (c) Mark J. Kilgard, 1994, 1998. */
-
-/* This program is freely distributable without licensing fees 
-   and is provided without guarantee or warrantee expressed or 
-   implied. This program is -not- in the public domain. */
-
-#ifndef __GLUT_FONT_H__
-#define __GLUT_FONT_H__
-
-
-typedef struct {
-  const GLsizei width;
-  const GLsizei height;
-  const GLfloat xorig;
-  const GLfloat yorig;
-  const GLfloat advance;
-  const GLubyte *bitmap;
-} BitmapCharRec, *BitmapCharPtr;
-
-typedef struct {
-  const char *name;
-  const int num_chars;
-  const int first;
-  const BitmapCharRec * const *ch;
-} BitmapFontRec, *BitmapFontPtr;
-
-typedef void *GLUTbitmapFont;
-
-
-typedef struct {
-  float x;
-  float y;
-} CoordRec, *CoordPtr;
-
-typedef struct {
-  int num_coords;
-  const CoordRec *coord;
-} StrokeRec, *StrokePtr;
-
-typedef struct {
-  int num_strokes;
-  const StrokeRec *stroke;
-  float center;
-  float right;
-} StrokeCharRec, *StrokeCharPtr;
-
-typedef struct {
-  const char *name;
-  int num_chars;
-  const StrokeCharRec *ch;
-  float top;
-  float bottom;
-} StrokeFontRec, *StrokeFontPtr;
-
-typedef void *GLUTstrokeFont;
-
-
-#endif /* __GLUT_FONT_H__ */
diff --git a/src/glut/directfb/game.c b/src/glut/directfb/game.c
deleted file mode 100644
index 4c027a68f6..0000000000
--- a/src/glut/directfb/game.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright (C) 2006 Claudio Ciccani <klan@users.sf.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- * 
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "internal.h"
-
-
-/*****************************************************************************/
-
-static int g_display_changed = 0;
-
-/*****************************************************************************/
-
-
-void GLUTAPIENTRY
-glutGameModeString( const char *string )
-{
-     int   x, y, bpp;
-     char *tmp;
-     
-     if (!string)
-          return;
-          
-     tmp = strchr( string, 'x' );
-     if (tmp) {
-          x = strtol( string, NULL, 10 );
-          y = strtol( tmp+1, NULL, 10 );
-          
-          if (x > 0 && y > 0) {
-               g_width  = x;
-               g_height = y;
-          }
-     }
-     
-     tmp = strchr( string, ':' );
-     if (tmp) {
-          bpp = strtol( tmp+1, NULL, 10 );
-          
-          if (bpp > 0)
-               g_bpp = bpp;
-     }
-}
-
-
-int GLUTAPIENTRY
-glutEnterGameMode( void )
-{
-     DFBDisplayLayerConfig prev, cur;
-
-     glutInit( NULL, NULL );
-     
-     primary->GetConfiguration( primary, &prev );
-     primary->SetCooperativeLevel( primary, DLSCL_EXCLUSIVE );
-     
-     if (g_game)
-          __glutDestroyWindow( g_game );
-          
-     g_game = __glutCreateWindow( GL_TRUE );
-     if (!g_game)
-          return 0;
-          
-     __glutSetWindow( g_game );
-     g_game->cursor = GLUT_CURSOR_NONE;
-
-     primary->GetConfiguration( primary, &cur );
-     g_display_changed = (cur.width       != prev.width      || 
-                          cur.height      != prev.height     ||
-                          cur.pixelformat != prev.pixelformat);
-     
-     return g_game->id;
-}
-
-
-void GLUTAPIENTRY
-glutLeaveGameMode( void )
-{
-     if (g_game)
-          __glutDestroyWindow( g_game );
-
-     primary->SetCooperativeLevel( primary, DLSCL_ADMINISTRATIVE );
-}
-
-
-int GLUTAPIENTRY
-glutGameModeGet( GLenum type )
-{
-     switch (type) {
-          case GLUT_GAME_MODE_ACTIVE:
-               return (g_game != NULL);
-          case GLUT_GAME_MODE_POSSIBLE:
-               if (primary) {
-                    DFBDisplayLayerConfig c;
-                    c.flags  = DLCONF_WIDTH | DLCONF_HEIGHT;
-                    c.width  = g_width;
-                    c.height = g_height;
-                    /* XXX: bpp */
-                    if (primary->TestConfiguration( primary, &c, 0 ) == DFB_OK)
-                         return 1;
-               }
-               break;
-          case GLUT_GAME_MODE_WIDTH:
-               if (g_game) {
-                    int w;
-                    g_game->surface->GetSize( g_game->surface, &w, 0 );
-                    return w;
-               }
-               break;
-          case GLUT_GAME_MODE_HEIGHT:
-               if (g_game) {
-                    int h;
-                    g_game->surface->GetSize( g_game->surface, 0, &h );
-                    return h;
-               }
-               break;
-          case GLUT_GAME_MODE_PIXEL_DEPTH:
-               if (g_game) {
-                    DFBSurfacePixelFormat f;
-                    g_game->surface->GetPixelFormat( g_game->surface, &f );
-                    return DFB_COLOR_BITS_PER_PIXEL( f );
-               }
-               break;
-          case GLUT_GAME_MODE_REFRESH_RATE:
-               return 60; /* assume 60hz */
-          case GLUT_GAME_MODE_DISPLAY_CHANGED:
-               return g_display_changed;
-          default:
-               break;
-     }
-     
-     return 0;
-}
-
-
-        
diff --git a/src/glut/directfb/globals.c b/src/glut/directfb/globals.c
deleted file mode 100644
index 2a5291137e..0000000000
--- a/src/glut/directfb/globals.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2006 Claudio Ciccani <klan@users.sf.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- * 
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "internal.h"
-
-IDirectFB             *dfb      = NULL;
-IDirectFBDisplayLayer *primary  = NULL;
-IDirectFBEventBuffer  *events   = NULL;
-IDirectFBInputDevice  *keyboard = NULL;
-IDirectFBInputDevice  *mouse    = NULL;
-IDirectFBInputDevice  *joystick = NULL;
-
-GLenum        g_display_mode    = 0;
-GLuint        g_width           = DEFAULT_WIDTH;
-GLuint        g_height          = DEFAULT_HEIGHT;
-GLint         g_xpos            = 0;
-GLint         g_ypos            = 0;
-GLint         g_bpp             = 0;
-GLboolean     g_idle            = GL_TRUE;
-__GlutWindow *g_current         = NULL;
-__GlutWindow *g_game            = NULL;
-
-
-void (GLUTCALLBACK *display_func) (void)                              = 0;
-void (GLUTCALLBACK *reshape_func) (int width, int height)             = 0;
-void (GLUTCALLBACK *keyboard_func) (unsigned char key, int x, int y)  = 0;
-void (GLUTCALLBACK *mouse_func) (int button, int state, int x, int y) = 0;
-void (GLUTCALLBACK *motion_func) (int x, int y)                       = 0;
-void (GLUTCALLBACK *passive_motion_func) (int x, int y)               = 0;
-void (GLUTCALLBACK *entry_func) (int state)                           = 0;
-void (GLUTCALLBACK *visibility_func) (int state)                      = 0;
-void (GLUTCALLBACK *idle_func) (void)                                 = 0;
-void (GLUTCALLBACK *menu_state_func) (int state)                      = 0;
-void (GLUTCALLBACK *special_func) (int key, int x, int y)             = 0;
-void (GLUTCALLBACK *spaceball_motion_func) (int x, int y, int z)      = 0;
-void (GLUTCALLBACK *spaceball_rotate_func) (int x, int y, int z)      = 0;
-void (GLUTCALLBACK *spaceball_button_func) (int button, int state)    = 0;
-void (GLUTCALLBACK *button_box_func) (int button, int state)          = 0;
-void (GLUTCALLBACK *dials_func) (int dial, int value)                 = 0;
-void (GLUTCALLBACK *tablet_motion_func) (int x, int y)                = 0;
-void (GLUTCALLBACK *tabled_button_func) (int button, int state, int x, int y) = 0;
-void (GLUTCALLBACK *menu_status_func) (int status, int x, int y)      = 0;
-void (GLUTCALLBACK *overlay_display_func) (void)                      = 0;
-void (GLUTCALLBACK *window_status_func) (int state)                   = 0;
-void (GLUTCALLBACK *keyboard_up_func) (unsigned char key, int x, int y) = 0;
-void (GLUTCALLBACK *special_up_func) (int key, int x, int y)          = 0;
-void (GLUTCALLBACK *joystick_func) (unsigned int buttons, int x, int y, int z) = 0;
diff --git a/src/glut/directfb/init.c b/src/glut/directfb/init.c
deleted file mode 100644
index ba1a49adf2..0000000000
--- a/src/glut/directfb/init.c
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (C) 2006 Claudio Ciccani <klan@users.sf.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- * 
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "internal.h"
-
-
-static void 
-__glutExit( void )
-{
-     __glutFreeTimers();
-     __glutDestroyWindows();
-     
-     if (events) {
-          events->Release( events );
-          events = NULL;
-     }
-     
-     if (joystick) {
-          joystick->Release( joystick );
-          joystick = NULL;
-     }
-     
-     if (mouse) {
-          mouse->Release( mouse );
-          mouse = NULL;
-     }
-     
-     if (keyboard) {
-          keyboard->Release( keyboard );
-          keyboard = NULL;
-     }
-     
-     if (primary) {
-          primary->Release( primary );
-          primary = NULL;
-     }
-     
-     if (dfb) {
-          dfb->Release( dfb );
-          dfb = NULL;
-     }
-}
-
-
-void GLUTAPIENTRY 
-glutInit( int *argcp, char **argv )
-{
-     DFBResult ret;
-     
-     if (dfb)
-          return;
-     
-     glutGet( GLUT_ELAPSED_TIME );
-
-     ret = DirectFBInit( argcp, argv ? &argv : NULL );
-     if (ret)
-          DirectFBErrorFatal( "DirectFBInit()", ret );
-     
-     ret = DirectFBCreate( &dfb );
-     if (ret)
-          DirectFBErrorFatal( "DirectFBCreate()", ret );
-     
-     ret = dfb->GetDisplayLayer( dfb, DLID_PRIMARY, &primary );
-     if (ret)
-          DirectFBErrorFatal( "IDirectFB::GetDisplayLayer()", ret );
-          
-     ret = dfb->CreateEventBuffer( dfb, &events );
-     if (ret)
-          DirectFBErrorFatal( "IDirectFB::CreateEventBuffer()", ret );
-          
-     dfb->GetInputDevice( dfb, DIDID_KEYBOARD, &keyboard );
-     dfb->GetInputDevice( dfb, DIDID_MOUSE, &mouse );
-     dfb->GetInputDevice( dfb, DIDID_JOYSTICK, &joystick );
-    
-     primary->SetCooperativeLevel( primary, DLSCL_ADMINISTRATIVE );
-     
-     atexit( __glutExit );
-}
-
-
-void GLUTAPIENTRY 
-glutInitDisplayMode( unsigned int mode )
-{
-     g_display_mode = mode;
-}
-
-
-void GLUTAPIENTRY 
-glutInitWindowPosition( int x, int y )
-{
-     g_xpos = x;
-     g_ypos = y;
-}
-
-
-void GLUTAPIENTRY 
-glutInitWindowSize( int width, int height )
-{
-     g_width  = width;
-     g_height = height;
-}
-
-
-void GLUTAPIENTRY
-glutInitDisplayString( const char *string )
-{
-}
-
diff --git a/src/glut/directfb/internal.h b/src/glut/directfb/internal.h
deleted file mode 100644
index 55c4b5ce28..0000000000
--- a/src/glut/directfb/internal.h
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Copyright (C) 2006 Claudio Ciccani <klan@users.sf.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- * 
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#ifndef __GLUT_INTERNAL_H__
-#define __GLUT_INTERNAL_H__
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <directfb.h>
-#include <directfb_version.h>
-
-#include <directfbgl.h>
-
-#include "GL/glut.h"
-
-
-#define VERSION_CODE( M, m, r )  (((M) << 16) | ((m) << 8) | ((r)))
-
-#define DIRECTFB_VERSION_CODE    VERSION_CODE( DIRECTFB_MAJOR_VERSION, \
-                                               DIRECTFB_MINOR_VERSION, \
-                                               DIRECTFB_MICRO_VERSION )
-
-
-#define DEFAULT_WIDTH  640
-#define DEFAULT_HEIGHT 480
-
-/*
- * Window request flags
- */
-#define WINDOW_REQUEST_POSITION   0x00000001
-#define WINDOW_REQUEST_RESIZE     0x00000002
-#define WINDOW_REQUEST_RESTACK    0x00000004
-#define WINDOW_REQUEST_SHOW       0x00000008
-#define WINDOW_REQUEST_HIDE       0x00000010
-#define WINDOW_REQUEST_DESTROY    0x00000020
-
-/*
- * GLUT Window implementation
- */
-typedef struct __GlutWindow_s {
-     int                    id;
-     DFBWindowID            wid;
-
-     IDirectFBWindow       *window; /* NULL = fullscreen (game mode) */
-     IDirectFBSurface      *surface;
-     IDirectFBGL           *gl;
-
-     /* display mode */
-     GLenum                 mode;
-
-     /* cursor position in fullscreen mode */
-     int                    cx;
-     int                    cy;
-     /* joystick position */
-     int                    jx;
-     int                    jy;
-     int                    jz;
-     /* pressed modifiers */
-     int                    modifiers;
-     /* pressed buttons */
-     int                    buttons;
-     /* current cursor shape */
-     int                    cursor;
-     
-     struct {
-          int               flags;
-          int               x;
-          int               y;
-          int               w;
-          int               h;
-          int               z;
-     } req;
-
-     GLboolean              visible;    
-     GLboolean              redisplay;
-     GLboolean              reshape;
-     GLboolean              visibility;
-
-     struct __GlutWindow_s *next;
-     struct __GlutWindow_s *prev;
-} __GlutWindow;
-
-
-/* Global Vars */
-extern IDirectFB             *dfb;
-extern IDirectFBDisplayLayer *primary;
-extern IDirectFBEventBuffer  *events;
-extern IDirectFBInputDevice  *keyboard;
-extern IDirectFBInputDevice  *mouse;
-extern IDirectFBInputDevice  *joystick;
-
-extern GLenum                 g_display_mode;
-extern GLuint                 g_width;
-extern GLuint                 g_height;
-extern GLint                  g_xpos;
-extern GLint                  g_ypos;
-extern GLint                  g_bpp;
-extern GLboolean              g_idle;
-extern __GlutWindow          *g_current;
-extern __GlutWindow          *g_game;
-
-
-/* Global Funcs */
-/* window.c */
-extern __GlutWindow* __glutCreateWindow( GLboolean fullscreen );
-extern __GlutWindow* __glutFindWindow( DFBWindowID id );
-extern void          __glutSetWindow( __GlutWindow *window );
-extern void          __glutHandleWindows( void );
-extern void          __glutDestroyWindow( __GlutWindow *window );
-extern void          __glutDestroyWindows( void );
-/* callback.c */
-extern void          __glutHandleTimers( void );
-extern GLboolean     __glutGetTimeout( int *ret_msec );
-extern void          __glutFreeTimers( void );
-
-
-/* Global Callbacks */
-extern void (GLUTCALLBACK *display_func) (void);
-extern void (GLUTCALLBACK *reshape_func) (int width, int height);
-extern void (GLUTCALLBACK *keyboard_func) (unsigned char key, int x, int y);
-extern void (GLUTCALLBACK *mouse_func) (int button, int state, int x, int y);
-extern void (GLUTCALLBACK *motion_func) (int x, int y);
-extern void (GLUTCALLBACK *passive_motion_func) (int x, int y);
-extern void (GLUTCALLBACK *entry_func) (int state);
-extern void (GLUTCALLBACK *visibility_func) (int state);
-extern void (GLUTCALLBACK *idle_func) (void);
-extern void (GLUTCALLBACK *menu_state_func) (int state);
-extern void (GLUTCALLBACK *special_func) (int key, int x, int y);
-extern void (GLUTCALLBACK *spaceball_motion_func) (int x, int y, int z);
-extern void (GLUTCALLBACK *spaceball_rotate_func) (int x, int y, int z);
-extern void (GLUTCALLBACK *spaceball_button_func) (int button, int state);
-extern void (GLUTCALLBACK *button_box_func) (int button, int state);
-extern void (GLUTCALLBACK *dials_func) (int dial, int value);
-extern void (GLUTCALLBACK *tablet_motion_func) (int x, int y);
-extern void (GLUTCALLBACK *tabled_button_func) (int button, int state, int x, int y);
-extern void (GLUTCALLBACK *menu_status_func) (int status, int x, int y);
-extern void (GLUTCALLBACK *overlay_display_func) (void);
-extern void (GLUTCALLBACK *window_status_func) (int state);
-extern void (GLUTCALLBACK *keyboard_up_func) (unsigned char key, int x, int y);
-extern void (GLUTCALLBACK *special_up_func) (int key, int x, int y);
-extern void (GLUTCALLBACK *joystick_func) (unsigned int buttons, int x, int y, int z);
-
-
-#ifdef DEBUG
-# define __glutAssert( exp ) {\
-     if (!(exp)) {\
-          fprintf( stderr, "(!!) *** Assertion [%s] failed in %s() ***\n",\
-                           #exp, __FUNCTION__ );
-          fflush( stderr );\
-          exit( -1 );\
-     }\
- }
-#else
-# define __glutAssert( exp )
-#endif
-
-#define __glutWarning( format, ... ) {\
-     fprintf( stderr, "(!) GLUT: " format "!\n", ## __VA_ARGS__ );\
-     fflush( stderr );\
-}
-
-#define __glutFatalError( format, ... ) {\
-     fprintf( stderr, "(!) GLUT: " format "!\n", ## __VA_ARGS__ );\
-     fprintf( stderr, "\t-> from %s() at line %d\n", __FUNCTION__, __LINE__ );\
-     fflush( stderr );\
-     exit( -1 );\
-}
-
-
-#endif /* __GLUT_INTERNAL_H__ */
-
diff --git a/src/glut/directfb/menu.c b/src/glut/directfb/menu.c
deleted file mode 100644
index 400e966bbb..0000000000
--- a/src/glut/directfb/menu.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (C) 2006 Claudio Ciccani <klan@users.sf.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- * 
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "internal.h"
-
-
-int GLUTAPIENTRY 
-glutCreateMenu( void (GLUTCALLBACK *func) (int) )
-{
-     return 0;
-}
-
-void GLUTAPIENTRY
-glutDestroyMenu( int menu )
-{
-}
-
-
-int GLUTAPIENTRY
-glutGetMenu( void )
-{
-     return 0;
-}
-
-
-void GLUTAPIENTRY 
-glutSetMenu( int menu )
-{
-}
-
-
-void GLUTAPIENTRY
-glutAddMenuEntry( const char *label, int value )
-{
-}
-
-
-void GLUTAPIENTRY
-glutAddSubMenu( const char *label, int submenu )
-{
-}
-
-
-void GLUTAPIENTRY
-glutChangeToMenuEntry( int item, const char *label, int value )
-{
-}
-
-
-void GLUTAPIENTRY
-glutChangeToSubMenu( int item, const char *label, int submenu )
-{
-}
-
-
-void GLUTAPIENTRY
-glutRemoveMenuItem( int item )
-{
-}
-
-
-void GLUTAPIENTRY
-glutAttachMenu( int button )
-{
-}
-
-
-void GLUTAPIENTRY
-glutDetachMenu( int button )
-{
-}
diff --git a/src/glut/directfb/models.c b/src/glut/directfb/models.c
deleted file mode 100644
index d96a8f5077..0000000000
--- a/src/glut/directfb/models.c
+++ /dev/null
@@ -1,599 +0,0 @@
-
-/* Copyright (c) Mark J. Kilgard, 1994, 1997. */
-
-/**
-(c) Copyright 1993, Silicon Graphics, Inc.
-
-ALL RIGHTS RESERVED
-
-Permission to use, copy, modify, and distribute this software
-for any purpose and without fee is hereby granted, provided
-that the above copyright notice appear in all copies and that
-both the copyright notice and this permission notice appear in
-supporting documentation, and that the name of Silicon
-Graphics, Inc. not be used in advertising or publicity
-pertaining to distribution of the software without specific,
-written prior permission.
-
-THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU
-"AS-IS" AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR
-OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  IN NO
-EVENT SHALL SILICON GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE
-ELSE FOR ANY DIRECT, SPECIAL, INCIDENTAL, INDIRECT OR
-CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER,
-INCLUDING WITHOUT LIMITATION, LOSS OF PROFIT, LOSS OF USE,
-SAVINGS OR REVENUE, OR THE CLAIMS OF THIRD PARTIES, WHETHER OR
-NOT SILICON GRAPHICS, INC.  HAS BEEN ADVISED OF THE POSSIBILITY
-OF SUCH LOSS, HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-ARISING OUT OF OR IN CONNECTION WITH THE POSSESSION, USE OR
-PERFORMANCE OF THIS SOFTWARE.
-
-US Government Users Restricted Rights
-
-Use, duplication, or disclosure by the Government is subject to
-restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
-(c)(1)(ii) of the Rights in Technical Data and Computer
-Software clause at DFARS 252.227-7013 and/or in similar or
-successor clauses in the FAR or the DOD or NASA FAR
-Supplement.  Unpublished-- rights reserved under the copyright
-laws of the United States.  Contractor/manufacturer is Silicon
-Graphics, Inc., 2011 N.  Shoreline Blvd., Mountain View, CA
-94039-7311.
-
-OpenGL(TM) is a trademark of Silicon Graphics, Inc.
-*/
-
-#include <math.h>
-#include <GL/gl.h>
-#include <GL/glu.h>
-
-#include "internal.h"
-
-/* Some <math.h> files do not define M_PI... */
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-
-static GLUquadricObj *quadObj;
-
-#define QUAD_OBJ_INIT() { if(!quadObj) initQuadObj(); }
-
-static void
-initQuadObj(void)
-{
-  quadObj = gluNewQuadric();
-  if (!quadObj)
-    __glutFatalError("out of memory");
-}
-
-/* CENTRY */
-void GLUTAPIENTRY
-glutWireSphere(GLdouble radius, GLint slices, GLint stacks)
-{
-  QUAD_OBJ_INIT();
-  gluQuadricDrawStyle(quadObj, GLU_LINE);
-  gluQuadricNormals(quadObj, GLU_SMOOTH);
-  /* If we ever changed/used the texture or orientation state
-     of quadObj, we'd need to change it to the defaults here
-     with gluQuadricTexture and/or gluQuadricOrientation. */
-  gluSphere(quadObj, radius, slices, stacks);
-}
-
-void GLUTAPIENTRY
-glutSolidSphere(GLdouble radius, GLint slices, GLint stacks)
-{
-  QUAD_OBJ_INIT();
-  gluQuadricDrawStyle(quadObj, GLU_FILL);
-  gluQuadricNormals(quadObj, GLU_SMOOTH);
-  /* If we ever changed/used the texture or orientation state
-     of quadObj, we'd need to change it to the defaults here
-     with gluQuadricTexture and/or gluQuadricOrientation. */
-  gluSphere(quadObj, radius, slices, stacks);
-}
-
-void GLUTAPIENTRY
-glutWireCone(GLdouble base, GLdouble height,
-  GLint slices, GLint stacks)
-{
-  QUAD_OBJ_INIT();
-  gluQuadricDrawStyle(quadObj, GLU_LINE);
-  gluQuadricNormals(quadObj, GLU_SMOOTH);
-  /* If we ever changed/used the texture or orientation state
-     of quadObj, we'd need to change it to the defaults here
-     with gluQuadricTexture and/or gluQuadricOrientation. */
-  gluCylinder(quadObj, base, 0.0, height, slices, stacks);
-}
-
-void GLUTAPIENTRY
-glutSolidCone(GLdouble base, GLdouble height,
-  GLint slices, GLint stacks)
-{
-  QUAD_OBJ_INIT();
-  gluQuadricDrawStyle(quadObj, GLU_FILL);
-  gluQuadricNormals(quadObj, GLU_SMOOTH);
-  /* If we ever changed/used the texture or orientation state
-     of quadObj, we'd need to change it to the defaults here
-     with gluQuadricTexture and/or gluQuadricOrientation. */
-  gluCylinder(quadObj, base, 0.0, height, slices, stacks);
-}
-
-/* ENDCENTRY */
-
-static void
-drawBox(GLfloat size, GLenum type)
-{
-  static GLfloat n[6][3] =
-  {
-    {-1.0, 0.0, 0.0},
-    {0.0, 1.0, 0.0},
-    {1.0, 0.0, 0.0},
-    {0.0, -1.0, 0.0},
-    {0.0, 0.0, 1.0},
-    {0.0, 0.0, -1.0}
-  };
-  static GLint faces[6][4] =
-  {
-    {0, 1, 2, 3},
-    {3, 2, 6, 7},
-    {7, 6, 5, 4},
-    {4, 5, 1, 0},
-    {5, 6, 2, 1},
-    {7, 4, 0, 3}
-  };
-  GLfloat v[8][3];
-  GLint i;
-
-  v[0][0] = v[1][0] = v[2][0] = v[3][0] = -size / 2;
-  v[4][0] = v[5][0] = v[6][0] = v[7][0] = size / 2;
-  v[0][1] = v[1][1] = v[4][1] = v[5][1] = -size / 2;
-  v[2][1] = v[3][1] = v[6][1] = v[7][1] = size / 2;
-  v[0][2] = v[3][2] = v[4][2] = v[7][2] = -size / 2;
-  v[1][2] = v[2][2] = v[5][2] = v[6][2] = size / 2;
-
-  for (i = 5; i >= 0; i--) {
-    glBegin(type);
-/*     glNormal3fv(&n[i][0]); */
-    glVertex3fv(&v[faces[i][0]][0]);
-    glVertex3fv(&v[faces[i][1]][0]);
-    glVertex3fv(&v[faces[i][2]][0]);
-    glVertex3fv(&v[faces[i][3]][0]);
-    glEnd();
-  }
-}
-
-/* CENTRY */
-void GLUTAPIENTRY
-glutWireCube(GLdouble size)
-{
-  drawBox(size, GL_LINE_LOOP);
-}
-
-void GLUTAPIENTRY
-glutSolidCube(GLdouble size)
-{
-  drawBox(size, GL_QUADS);
-}
-
-/* ENDCENTRY */
-
-static void
-doughnut(GLfloat r, GLfloat R, GLint nsides, GLint rings)
-{
-  int i, j;
-  GLfloat theta, phi, theta1;
-  GLfloat cosTheta, sinTheta;
-  GLfloat cosTheta1, sinTheta1;
-  GLfloat ringDelta, sideDelta;
-
-  ringDelta = 2.0 * M_PI / rings;
-  sideDelta = 2.0 * M_PI / nsides;
-
-  theta = 0.0;
-  cosTheta = 1.0;
-  sinTheta = 0.0;
-  for (i = rings - 1; i >= 0; i--) {
-    theta1 = theta + ringDelta;
-    cosTheta1 = cos(theta1);
-    sinTheta1 = sin(theta1);
-    glBegin(GL_QUAD_STRIP);
-    phi = 0.0;
-    for (j = nsides; j >= 0; j--) {
-      GLfloat cosPhi, sinPhi, dist;
-
-      phi += sideDelta;
-      cosPhi = cos(phi);
-      sinPhi = sin(phi);
-      dist = R + r * cosPhi;
-
-/*       glNormal3f(cosTheta1 * cosPhi, -sinTheta1 * cosPhi, sinPhi); */
-      glVertex3f(cosTheta1 * dist, -sinTheta1 * dist, r * sinPhi);
-/*       glNormal3f(cosTheta * cosPhi, -sinTheta * cosPhi, sinPhi); */
-      glVertex3f(cosTheta * dist, -sinTheta * dist,  r * sinPhi);
-    }
-    glEnd();
-    theta = theta1;
-    cosTheta = cosTheta1;
-    sinTheta = sinTheta1;
-  }
-}
-
-/* CENTRY */
-void GLUTAPIENTRY
-glutWireTorus(GLdouble innerRadius, GLdouble outerRadius,
-  GLint nsides, GLint rings)
-{
-/*   glPushAttrib(GL_POLYGON_BIT); */
-/*   glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); */
-  doughnut(innerRadius, outerRadius, nsides, rings);
-/*   glPopAttrib(); */
-}
-
-void GLUTAPIENTRY
-glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius,
-  GLint nsides, GLint rings)
-{
-  doughnut(innerRadius, outerRadius, nsides, rings);
-}
-
-/* ENDCENTRY */
-
-static GLfloat dodec[20][3];
-
-static void
-initDodecahedron(void)
-{
-  GLfloat alpha, beta;
-
-  alpha = sqrt(2.0 / (3.0 + sqrt(5.0)));
-  beta = 1.0 + sqrt(6.0 / (3.0 + sqrt(5.0)) -
-    2.0 + 2.0 * sqrt(2.0 / (3.0 + sqrt(5.0))));
-  /* *INDENT-OFF* */
-  dodec[0][0] = -alpha; dodec[0][1] = 0; dodec[0][2] = beta;
-  dodec[1][0] = alpha; dodec[1][1] = 0; dodec[1][2] = beta;
-  dodec[2][0] = -1; dodec[2][1] = -1; dodec[2][2] = -1;
-  dodec[3][0] = -1; dodec[3][1] = -1; dodec[3][2] = 1;
-  dodec[4][0] = -1; dodec[4][1] = 1; dodec[4][2] = -1;
-  dodec[5][0] = -1; dodec[5][1] = 1; dodec[5][2] = 1;
-  dodec[6][0] = 1; dodec[6][1] = -1; dodec[6][2] = -1;
-  dodec[7][0] = 1; dodec[7][1] = -1; dodec[7][2] = 1;
-  dodec[8][0] = 1; dodec[8][1] = 1; dodec[8][2] = -1;
-  dodec[9][0] = 1; dodec[9][1] = 1; dodec[9][2] = 1;
-  dodec[10][0] = beta; dodec[10][1] = alpha; dodec[10][2] = 0;
-  dodec[11][0] = beta; dodec[11][1] = -alpha; dodec[11][2] = 0;
-  dodec[12][0] = -beta; dodec[12][1] = alpha; dodec[12][2] = 0;
-  dodec[13][0] = -beta; dodec[13][1] = -alpha; dodec[13][2] = 0;
-  dodec[14][0] = -alpha; dodec[14][1] = 0; dodec[14][2] = -beta;
-  dodec[15][0] = alpha; dodec[15][1] = 0; dodec[15][2] = -beta;
-  dodec[16][0] = 0; dodec[16][1] = beta; dodec[16][2] = alpha;
-  dodec[17][0] = 0; dodec[17][1] = beta; dodec[17][2] = -alpha;
-  dodec[18][0] = 0; dodec[18][1] = -beta; dodec[18][2] = alpha;
-  dodec[19][0] = 0; dodec[19][1] = -beta; dodec[19][2] = -alpha;
-  /* *INDENT-ON* */
-
-}
-
-#define DIFF3(_a,_b,_c) { \
-    (_c)[0] = (_a)[0] - (_b)[0]; \
-    (_c)[1] = (_a)[1] - (_b)[1]; \
-    (_c)[2] = (_a)[2] - (_b)[2]; \
-}
-
-static void
-crossprod(GLfloat v1[3], GLfloat v2[3], GLfloat prod[3])
-{
-  GLfloat p[3];         /* in case prod == v1 or v2 */
-
-  p[0] = v1[1] * v2[2] - v2[1] * v1[2];
-  p[1] = v1[2] * v2[0] - v2[2] * v1[0];
-  p[2] = v1[0] * v2[1] - v2[0] * v1[1];
-  prod[0] = p[0];
-  prod[1] = p[1];
-  prod[2] = p[2];
-}
-
-static void
-normalize(GLfloat v[3])
-{
-  GLfloat d;
-
-  d = sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
-  if (d == 0.0) {
-/*    __glutWarning("normalize: zero length vector"); */
-    v[0] = d = 1.0;
-  }
-  d = 1 / d;
-  v[0] *= d;
-  v[1] *= d;
-  v[2] *= d;
-}
-
-static void
-pentagon(int a, int b, int c, int d, int e, GLenum shadeType)
-{
-  GLfloat n0[3], d1[3], d2[3];
-
-  DIFF3(dodec[a], dodec[b], d1);
-  DIFF3(dodec[b], dodec[c], d2);
-  crossprod(d1, d2, n0);
-  normalize(n0);
-
-  glBegin(shadeType);
-/*   glNormal3fv(n0); */
-  glVertex3fv(&dodec[a][0]);
-  glVertex3fv(&dodec[b][0]);
-  glVertex3fv(&dodec[c][0]);
-  glVertex3fv(&dodec[d][0]);
-  glVertex3fv(&dodec[e][0]);
-  glEnd();
-}
-
-static void
-dodecahedron(GLenum type)
-{
-  static int inited = 0;
-
-  if (inited == 0) {
-    inited = 1;
-    initDodecahedron();
-  }
-  pentagon(0, 1, 9, 16, 5, type);
-  pentagon(1, 0, 3, 18, 7, type);
-  pentagon(1, 7, 11, 10, 9, type);
-  pentagon(11, 7, 18, 19, 6, type);
-  pentagon(8, 17, 16, 9, 10, type);
-  pentagon(2, 14, 15, 6, 19, type);
-  pentagon(2, 13, 12, 4, 14, type);
-  pentagon(2, 19, 18, 3, 13, type);
-  pentagon(3, 0, 5, 12, 13, type);
-  pentagon(6, 15, 8, 10, 11, type);
-  pentagon(4, 17, 8, 15, 14, type);
-  pentagon(4, 12, 5, 16, 17, type);
-}
-
-/* CENTRY */
-void GLUTAPIENTRY
-glutWireDodecahedron(void)
-{
-  dodecahedron(GL_LINE_LOOP);
-}
-
-void GLUTAPIENTRY
-glutSolidDodecahedron(void)
-{
-  dodecahedron(GL_TRIANGLE_FAN);
-}
-
-/* ENDCENTRY */
-
-static void
-recorditem(GLfloat * n1, GLfloat * n2, GLfloat * n3,
-  GLenum shadeType)
-{
-  GLfloat q0[3], q1[3];
-
-  DIFF3(n1, n2, q0);
-  DIFF3(n2, n3, q1);
-  crossprod(q0, q1, q1);
-  normalize(q1);
-
-  glBegin(shadeType);
-/*   glNormal3fv(q1); */
-  glVertex3fv(n1);
-  glVertex3fv(n2);
-  glVertex3fv(n3);
-  glEnd();
-}
-
-static void
-subdivide(GLfloat * v0, GLfloat * v1, GLfloat * v2,
-  GLenum shadeType)
-{
-  int depth;
-  GLfloat w0[3], w1[3], w2[3];
-  GLfloat l;
-  int i, j, k, n;
-
-  depth = 1;
-  for (i = 0; i < depth; i++) {
-    for (j = 0; i + j < depth; j++) {
-      k = depth - i - j;
-      for (n = 0; n < 3; n++) {
-        w0[n] = (i * v0[n] + j * v1[n] + k * v2[n]) / depth;
-        w1[n] = ((i + 1) * v0[n] + j * v1[n] + (k - 1) * v2[n])
-          / depth;
-        w2[n] = (i * v0[n] + (j + 1) * v1[n] + (k - 1) * v2[n])
-          / depth;
-      }
-      l = sqrt(w0[0] * w0[0] + w0[1] * w0[1] + w0[2] * w0[2]);
-      w0[0] /= l;
-      w0[1] /= l;
-      w0[2] /= l;
-      l = sqrt(w1[0] * w1[0] + w1[1] * w1[1] + w1[2] * w1[2]);
-      w1[0] /= l;
-      w1[1] /= l;
-      w1[2] /= l;
-      l = sqrt(w2[0] * w2[0] + w2[1] * w2[1] + w2[2] * w2[2]);
-      w2[0] /= l;
-      w2[1] /= l;
-      w2[2] /= l;
-      recorditem(w1, w0, w2, shadeType);
-    }
-  }
-}
-
-static void
-drawtriangle(int i, GLfloat data[][3], int ndx[][3],
-  GLenum shadeType)
-{
-  GLfloat *x0, *x1, *x2;
-
-  x0 = data[ndx[i][0]];
-  x1 = data[ndx[i][1]];
-  x2 = data[ndx[i][2]];
-  subdivide(x0, x1, x2, shadeType);
-}
-
-/* octahedron data: The octahedron produced is centered at the
-   origin and has radius 1.0 */
-static GLfloat odata[6][3] =
-{
-  {1.0, 0.0, 0.0},
-  {-1.0, 0.0, 0.0},
-  {0.0, 1.0, 0.0},
-  {0.0, -1.0, 0.0},
-  {0.0, 0.0, 1.0},
-  {0.0, 0.0, -1.0}
-};
-
-static int ondex[8][3] =
-{
-  {0, 4, 2},
-  {1, 2, 4},
-  {0, 3, 4},
-  {1, 4, 3},
-  {0, 2, 5},
-  {1, 5, 2},
-  {0, 5, 3},
-  {1, 3, 5}
-};
-
-static void
-octahedron(GLenum shadeType)
-{
-  int i;
-
-  for (i = 7; i >= 0; i--) {
-    drawtriangle(i, odata, ondex, shadeType);
-  }
-}
-
-/* CENTRY */
-void GLUTAPIENTRY
-glutWireOctahedron(void)
-{
-  octahedron(GL_LINE_LOOP);
-}
-
-void GLUTAPIENTRY
-glutSolidOctahedron(void)
-{
-  octahedron(GL_TRIANGLES);
-}
-
-/* ENDCENTRY */
-
-/* icosahedron data: These numbers are rigged to make an
-   icosahedron of radius 1.0 */
-
-#define X .525731112119133606
-#define Z .850650808352039932
-
-static GLfloat idata[12][3] =
-{
-  {-X, 0, Z},
-  {X, 0, Z},
-  {-X, 0, -Z},
-  {X, 0, -Z},
-  {0, Z, X},
-  {0, Z, -X},
-  {0, -Z, X},
-  {0, -Z, -X},
-  {Z, X, 0},
-  {-Z, X, 0},
-  {Z, -X, 0},
-  {-Z, -X, 0}
-};
-
-static int index[20][3] =
-{
-  {0, 4, 1},
-  {0, 9, 4},
-  {9, 5, 4},
-  {4, 5, 8},
-  {4, 8, 1},
-  {8, 10, 1},
-  {8, 3, 10},
-  {5, 3, 8},
-  {5, 2, 3},
-  {2, 7, 3},
-  {7, 10, 3},
-  {7, 6, 10},
-  {7, 11, 6},
-  {11, 0, 6},
-  {0, 1, 6},
-  {6, 1, 10},
-  {9, 0, 11},
-  {9, 11, 2},
-  {9, 2, 5},
-  {7, 2, 11},
-};
-
-static void
-icosahedron(GLenum shadeType)
-{
-  int i;
-
-  for (i = 19; i >= 0; i--) {
-    drawtriangle(i, idata, index, shadeType);
-  }
-}
-
-/* CENTRY */
-void GLUTAPIENTRY
-glutWireIcosahedron(void)
-{
-  icosahedron(GL_LINE_LOOP);
-}
-
-void GLUTAPIENTRY
-glutSolidIcosahedron(void)
-{
-  icosahedron(GL_TRIANGLES);
-}
-
-/* ENDCENTRY */
-
-/* tetrahedron data: */
-
-#define T       1.73205080756887729
-
-static GLfloat tdata[4][3] =
-{
-  {T, T, T},
-  {T, -T, -T},
-  {-T, T, -T},
-  {-T, -T, T}
-};
-
-static int tndex[4][3] =
-{
-  {0, 1, 3},
-  {2, 1, 0},
-  {3, 2, 0},
-  {1, 2, 3}
-};
-
-static void
-tetrahedron(GLenum shadeType)
-{
-  int i;
-
-  for (i = 3; i >= 0; i--)
-    drawtriangle(i, tdata, tndex, shadeType);
-}
-
-/* CENTRY */
-void GLUTAPIENTRY
-glutWireTetrahedron(void)
-{
-  tetrahedron(GL_LINE_LOOP);
-}
-
-void GLUTAPIENTRY
-glutSolidTetrahedron(void)
-{
-  tetrahedron(GL_TRIANGLES);
-}
-
-/* ENDCENTRY */
diff --git a/src/glut/directfb/overlay.c b/src/glut/directfb/overlay.c
deleted file mode 100644
index 714be5f1a2..0000000000
--- a/src/glut/directfb/overlay.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2006 Claudio Ciccani <klan@users.sf.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- * 
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "internal.h"
-
-
-void GLUTAPIENTRY 
-glutEstablishOverlay( void )
-{
-}
-
-
-void GLUTAPIENTRY 
-glutRemoveOverlay( void )
-{
-}
-
-
-void GLUTAPIENTRY 
-glutUseLayer( GLenum layer )
-{
-}
-
-
-void GLUTAPIENTRY
-glutPostOverlayRedisplay( void )
-{
-}
-
-
-void GLUTAPIENTRY
-glutPostWindowOverlayRedisplay( int win )
-{
-}
-
-
-void GLUTAPIENTRY
-glutShowOverlay( void )
-{
-}
-
-
-void GLUTAPIENTRY
-glutHideOverlay( void )
-{
-}
diff --git a/src/glut/directfb/state.c b/src/glut/directfb/state.c
deleted file mode 100644
index 194d5bbb62..0000000000
--- a/src/glut/directfb/state.c
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * Copyright (C) 2006 Claudio Ciccani <klan@users.sf.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- * 
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/time.h>
-
-#include "GL/glu.h"
-
-#include "internal.h"
-
-
-int GLUTAPIENTRY 
-glutGet( GLenum type )
-{   
-     switch (type) {
-          case GLUT_WINDOW_X:
-               if (g_current && g_current->window) {
-                    int x;
-                    g_current->window->GetPosition( g_current->window, &x, 0 );
-                    return x;
-               }
-               break;
-          case GLUT_WINDOW_Y:
-               if (g_current && g_current->window) {
-                    int y;
-                    g_current->window->GetPosition( g_current->window, 0, &y );
-                    return y;
-               }
-               break;
-               
-          case GLUT_WINDOW_WIDTH:
-               if (g_current) {
-                    int w;
-                    g_current->surface->GetSize( g_current->surface, &w, 0 );
-                    return w;
-               }
-               break;
-          case GLUT_WINDOW_HEIGHT:
-               if (g_current) {
-                    int h;
-                    g_current->surface->GetSize( g_current->surface, 0, &h );
-                    return h;
-               }
-               break;
-               
-          case GLUT_WINDOW_BUFFER_SIZE:
-               if (g_current) {
-                    DFBGLAttributes a;
-                    g_current->gl->GetAttributes( g_current->gl, &a );
-                    return a.buffer_size;
-               }
-               break;             
-          case GLUT_WINDOW_STENCIL_SIZE:
-               if (g_current) {
-                    DFBGLAttributes a;
-                    g_current->gl->GetAttributes( g_current->gl, &a );
-                    return a.stencil_size;
-               }
-               break;              
-          case GLUT_WINDOW_DEPTH_SIZE:
-               if (g_current) {
-                    DFBGLAttributes a;
-                    g_current->gl->GetAttributes( g_current->gl, &a );
-                    return a.depth_size;
-               }
-               break;
-          case GLUT_WINDOW_RED_SIZE:
-               if (g_current) {
-                    DFBGLAttributes a;
-                    g_current->gl->GetAttributes( g_current->gl, &a );
-                    return a.red_size;
-               }
-               break;
-          case GLUT_WINDOW_GREEN_SIZE:
-               if (g_current) {
-                    DFBGLAttributes a;
-                    g_current->gl->GetAttributes( g_current->gl, &a );
-                    return a.green_size;
-               }
-               break;
-          case GLUT_WINDOW_BLUE_SIZE:
-               if (g_current) {
-                    DFBGLAttributes a;
-                    g_current->gl->GetAttributes( g_current->gl, &a );
-                    return a.blue_size;
-               }
-               break;
-          case GLUT_WINDOW_ALPHA_SIZE:
-               if (g_current) {
-                    DFBGLAttributes a;
-                    g_current->gl->GetAttributes( g_current->gl, &a );
-                    return a.alpha_size;
-               }
-               break;
-          case GLUT_WINDOW_ACCUM_RED_SIZE:
-               if (g_current) {
-                    DFBGLAttributes a;
-                    g_current->gl->GetAttributes( g_current->gl, &a );
-                    return a.accum_red_size;
-               }
-               break;
-          case GLUT_WINDOW_ACCUM_GREEN_SIZE:
-               if (g_current) {
-                    DFBGLAttributes a;
-                    g_current->gl->GetAttributes( g_current->gl, &a );
-                    return a.accum_green_size;
-               }
-               break;
-          case GLUT_WINDOW_ACCUM_BLUE_SIZE:
-               if (g_current) {
-                    DFBGLAttributes a;
-                    g_current->gl->GetAttributes( g_current->gl, &a );
-                    return a.accum_blue_size;
-               }
-               break;
-          case GLUT_WINDOW_ACCUM_ALPHA_SIZE:
-               if (g_current) {
-                    DFBGLAttributes a;
-                    g_current->gl->GetAttributes( g_current->gl, &a );
-                    return a.accum_alpha_size;
-               }
-               break;
-          case GLUT_WINDOW_DOUBLEBUFFER:
-               if (g_current) {
-                    DFBGLAttributes a;
-                    g_current->gl->GetAttributes( g_current->gl, &a );
-                    return a.double_buffer;
-               }
-               break;                    
-          
-          case GLUT_WINDOW_RGBA:
-               return 1;
-          
-          case GLUT_WINDOW_CURSOR:
-               if (g_current)
-                    return g_current->cursor;
-               break;
-               
-          case GLUT_SCREEN_WIDTH:
-               if (primary) {
-                    DFBDisplayLayerConfig c;
-                    primary->GetConfiguration( primary, &c );
-                    return c.width;
-               }
-               break;
-          case GLUT_SCREEN_HEIGHT:
-               if (primary) {
-                    DFBDisplayLayerConfig c;
-                    primary->GetConfiguration( primary, &c );
-                    return c.height;
-               }
-               break;
-               
-          case GLUT_INIT_DISPLAY_MODE:
-               return g_display_mode;
-          case GLUT_INIT_WINDOW_X:
-               return g_xpos;
-          case GLUT_INIT_WINDOW_Y:
-               return g_ypos;
-          case GLUT_INIT_WINDOW_WIDTH:
-               return g_width;
-          case GLUT_INIT_WINDOW_HEIGHT:
-               return g_height;
-
-          case GLUT_ELAPSED_TIME:
-               {
-                    static long long start = -1;
-                    struct timeval   t;
-               
-                    gettimeofday( &t, NULL );
-                    if (start == -1) {
-                         start = t.tv_sec * 1000ll + t.tv_usec / 1000ll;
-                         return 0;
-                    }
-                    return (t.tv_sec * 1000ll + t.tv_usec / 1000ll - start);
-               }
-               break;
-               
-          default:
-               break;
-     }
-     
-     return 0;
-}
-
-
-int GLUTAPIENTRY
-glutLayerGet( GLenum type )
-{
-     return 0;
-}
-
-void GLUTAPIENTRY
-glutReportErrors( void )
-{
-     GLenum error;
-     
-     while ((error = glGetError()) != GL_NO_ERROR)
-          __glutWarning( "**OpenGL Error** %s", gluErrorString( error ) );
-}
-
-
diff --git a/src/glut/directfb/teapot.c b/src/glut/directfb/teapot.c
deleted file mode 100644
index e7f1ee812f..0000000000
--- a/src/glut/directfb/teapot.c
+++ /dev/null
@@ -1,212 +0,0 @@
-
-/* Copyright (c) Mark J. Kilgard, 1994. */
-
-/**
-(c) Copyright 1993, Silicon Graphics, Inc.
-
-ALL RIGHTS RESERVED
-
-Permission to use, copy, modify, and distribute this software
-for any purpose and without fee is hereby granted, provided
-that the above copyright notice appear in all copies and that
-both the copyright notice and this permission notice appear in
-supporting documentation, and that the name of Silicon
-Graphics, Inc. not be used in advertising or publicity
-pertaining to distribution of the software without specific,
-written prior permission.
-
-THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU
-"AS-IS" AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR
-OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  IN NO
-EVENT SHALL SILICON GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE
-ELSE FOR ANY DIRECT, SPECIAL, INCIDENTAL, INDIRECT OR
-CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER,
-INCLUDING WITHOUT LIMITATION, LOSS OF PROFIT, LOSS OF USE,
-SAVINGS OR REVENUE, OR THE CLAIMS OF THIRD PARTIES, WHETHER OR
-NOT SILICON GRAPHICS, INC.  HAS BEEN ADVISED OF THE POSSIBILITY
-OF SUCH LOSS, HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-ARISING OUT OF OR IN CONNECTION WITH THE POSSESSION, USE OR
-PERFORMANCE OF THIS SOFTWARE.
-
-US Government Users Restricted Rights
-
-Use, duplication, or disclosure by the Government is subject to
-restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
-(c)(1)(ii) of the Rights in Technical Data and Computer
-Software clause at DFARS 252.227-7013 and/or in similar or
-successor clauses in the FAR or the DOD or NASA FAR
-Supplement.  Unpublished-- rights reserved under the copyright
-laws of the United States.  Contractor/manufacturer is Silicon
-Graphics, Inc., 2011 N.  Shoreline Blvd., Mountain View, CA
-94039-7311.
-
-OpenGL(TM) is a trademark of Silicon Graphics, Inc.
-*/
-
-#include <GL/gl.h>
-#include <GL/glu.h>
-#include "GL/glut.h"
-
-/* Rim, body, lid, and bottom data must be reflected in x and
-   y; handle and spout data across the y axis only.  */
-
-static int patchdata[][16] =
-{
-    /* rim */
-  {102, 103, 104, 105, 4, 5, 6, 7, 8, 9, 10, 11,
-    12, 13, 14, 15},
-    /* body */
-  {12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
-    24, 25, 26, 27},
-  {24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36,
-    37, 38, 39, 40},
-    /* lid */
-  {96, 96, 96, 96, 97, 98, 99, 100, 101, 101, 101,
-    101, 0, 1, 2, 3,},
-  {0, 1, 2, 3, 106, 107, 108, 109, 110, 111, 112,
-    113, 114, 115, 116, 117},
-    /* bottom */
-  {118, 118, 118, 118, 124, 122, 119, 121, 123, 126,
-    125, 120, 40, 39, 38, 37},
-    /* handle */
-  {41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
-    53, 54, 55, 56},
-  {53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
-    28, 65, 66, 67},
-    /* spout */
-  {68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
-    80, 81, 82, 83},
-  {80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
-    92, 93, 94, 95}
-};
-/* *INDENT-OFF* */
-
-static float cpdata[][3] =
-{
-    {0.2, 0, 2.7}, {0.2, -0.112, 2.7}, {0.112, -0.2, 2.7}, {0,
-    -0.2, 2.7}, {1.3375, 0, 2.53125}, {1.3375, -0.749, 2.53125},
-    {0.749, -1.3375, 2.53125}, {0, -1.3375, 2.53125}, {1.4375,
-    0, 2.53125}, {1.4375, -0.805, 2.53125}, {0.805, -1.4375,
-    2.53125}, {0, -1.4375, 2.53125}, {1.5, 0, 2.4}, {1.5, -0.84,
-    2.4}, {0.84, -1.5, 2.4}, {0, -1.5, 2.4}, {1.75, 0, 1.875},
-    {1.75, -0.98, 1.875}, {0.98, -1.75, 1.875}, {0, -1.75,
-    1.875}, {2, 0, 1.35}, {2, -1.12, 1.35}, {1.12, -2, 1.35},
-    {0, -2, 1.35}, {2, 0, 0.9}, {2, -1.12, 0.9}, {1.12, -2,
-    0.9}, {0, -2, 0.9}, {-2, 0, 0.9}, {2, 0, 0.45}, {2, -1.12,
-    0.45}, {1.12, -2, 0.45}, {0, -2, 0.45}, {1.5, 0, 0.225},
-    {1.5, -0.84, 0.225}, {0.84, -1.5, 0.225}, {0, -1.5, 0.225},
-    {1.5, 0, 0.15}, {1.5, -0.84, 0.15}, {0.84, -1.5, 0.15}, {0,
-    -1.5, 0.15}, {-1.6, 0, 2.025}, {-1.6, -0.3, 2.025}, {-1.5,
-    -0.3, 2.25}, {-1.5, 0, 2.25}, {-2.3, 0, 2.025}, {-2.3, -0.3,
-    2.025}, {-2.5, -0.3, 2.25}, {-2.5, 0, 2.25}, {-2.7, 0,
-    2.025}, {-2.7, -0.3, 2.025}, {-3, -0.3, 2.25}, {-3, 0,
-    2.25}, {-2.7, 0, 1.8}, {-2.7, -0.3, 1.8}, {-3, -0.3, 1.8},
-    {-3, 0, 1.8}, {-2.7, 0, 1.575}, {-2.7, -0.3, 1.575}, {-3,
-    -0.3, 1.35}, {-3, 0, 1.35}, {-2.5, 0, 1.125}, {-2.5, -0.3,
-    1.125}, {-2.65, -0.3, 0.9375}, {-2.65, 0, 0.9375}, {-2,
-    -0.3, 0.9}, {-1.9, -0.3, 0.6}, {-1.9, 0, 0.6}, {1.7, 0,
-    1.425}, {1.7, -0.66, 1.425}, {1.7, -0.66, 0.6}, {1.7, 0,
-    0.6}, {2.6, 0, 1.425}, {2.6, -0.66, 1.425}, {3.1, -0.66,
-    0.825}, {3.1, 0, 0.825}, {2.3, 0, 2.1}, {2.3, -0.25, 2.1},
-    {2.4, -0.25, 2.025}, {2.4, 0, 2.025}, {2.7, 0, 2.4}, {2.7,
-    -0.25, 2.4}, {3.3, -0.25, 2.4}, {3.3, 0, 2.4}, {2.8, 0,
-    2.475}, {2.8, -0.25, 2.475}, {3.525, -0.25, 2.49375},
-    {3.525, 0, 2.49375}, {2.9, 0, 2.475}, {2.9, -0.15, 2.475},
-    {3.45, -0.15, 2.5125}, {3.45, 0, 2.5125}, {2.8, 0, 2.4},
-    {2.8, -0.15, 2.4}, {3.2, -0.15, 2.4}, {3.2, 0, 2.4}, {0, 0,
-    3.15}, {0.8, 0, 3.15}, {0.8, -0.45, 3.15}, {0.45, -0.8,
-    3.15}, {0, -0.8, 3.15}, {0, 0, 2.85}, {1.4, 0, 2.4}, {1.4,
-    -0.784, 2.4}, {0.784, -1.4, 2.4}, {0, -1.4, 2.4}, {0.4, 0,
-    2.55}, {0.4, -0.224, 2.55}, {0.224, -0.4, 2.55}, {0, -0.4,
-    2.55}, {1.3, 0, 2.55}, {1.3, -0.728, 2.55}, {0.728, -1.3,
-    2.55}, {0, -1.3, 2.55}, {1.3, 0, 2.4}, {1.3, -0.728, 2.4},
-    {0.728, -1.3, 2.4}, {0, -1.3, 2.4}, {0, 0, 0}, {1.425,
-    -0.798, 0}, {1.5, 0, 0.075}, {1.425, 0, 0}, {0.798, -1.425,
-    0}, {0, -1.5, 0.075}, {0, -1.425, 0}, {1.5, -0.84, 0.075},
-    {0.84, -1.5, 0.075}
-};
-
-static float tex[2][2][2] =
-{
-  { {0, 0},
-    {1, 0}},
-  { {0, 1},
-    {1, 1}}
-};
-
-/* *INDENT-ON* */
-
-static void
-teapot(GLint grid, GLdouble scale, GLenum type)
-{
-  float p[4][4][3], q[4][4][3], r[4][4][3], s[4][4][3];
-  long i, j, k, l;
-
-  glPushAttrib(GL_ENABLE_BIT | GL_EVAL_BIT);
-  glEnable(GL_AUTO_NORMAL);
-  glEnable(GL_NORMALIZE);
-  glEnable(GL_MAP2_VERTEX_3);
-  glEnable(GL_MAP2_TEXTURE_COORD_2);
-  glPushMatrix();
-  glRotatef(270.0, 1.0, 0.0, 0.0);
-  glScalef(0.5 * scale, 0.5 * scale, 0.5 * scale);
-  glTranslatef(0.0, 0.0, -1.5);
-  for (i = 0; i < 10; i++) {
-    for (j = 0; j < 4; j++) {
-      for (k = 0; k < 4; k++) {
-        for (l = 0; l < 3; l++) {
-          p[j][k][l] = cpdata[patchdata[i][j * 4 + k]][l];
-          q[j][k][l] = cpdata[patchdata[i][j * 4 + (3 - k)]][l];
-          if (l == 1)
-            q[j][k][l] *= -1.0;
-          if (i < 6) {
-            r[j][k][l] =
-              cpdata[patchdata[i][j * 4 + (3 - k)]][l];
-            if (l == 0)
-              r[j][k][l] *= -1.0;
-            s[j][k][l] = cpdata[patchdata[i][j * 4 + k]][l];
-            if (l == 0)
-              s[j][k][l] *= -1.0;
-            if (l == 1)
-              s[j][k][l] *= -1.0;
-          }
-        }
-      }
-    }
-    glMap2f(GL_MAP2_TEXTURE_COORD_2, 0, 1, 2, 2, 0, 1, 4, 2,
-      &tex[0][0][0]);
-    glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
-      &p[0][0][0]);
-    glMapGrid2f(grid, 0.0, 1.0, grid, 0.0, 1.0);
-    glEvalMesh2(type, 0, grid, 0, grid);
-    glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
-      &q[0][0][0]);
-    glEvalMesh2(type, 0, grid, 0, grid);
-    if (i < 6) {
-      glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
-        &r[0][0][0]);
-      glEvalMesh2(type, 0, grid, 0, grid);
-      glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
-        &s[0][0][0]);
-      glEvalMesh2(type, 0, grid, 0, grid);
-    }
-  }
-  glPopMatrix();
-  glPopAttrib();
-}
-
-/* CENTRY */
-void GLUTAPIENTRY 
-glutSolidTeapot(GLdouble scale)
-{
-  teapot(7, scale, GL_FILL);
-}
-
-void GLUTAPIENTRY 
-glutWireTeapot(GLdouble scale)
-{
-  teapot(10, scale, GL_LINE);
-}
-
-/* ENDCENTRY */
diff --git a/src/glut/directfb/window.c b/src/glut/directfb/window.c
deleted file mode 100644
index 62cf8bb33e..0000000000
--- a/src/glut/directfb/window.c
+++ /dev/null
@@ -1,597 +0,0 @@
-/*
- * Copyright (C) 2006 Claudio Ciccani <klan@users.sf.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- * 
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "internal.h"
-
-
-/*****************************************************************************/
-
-static __GlutWindow *g_stack = NULL;
-
-/*****************************************************************************/
-
-
-__GlutWindow* 
-__glutCreateWindow( GLboolean fullscreen )
-{
-     __GlutWindow *new;
-     DFBResult     ret;
-     static int    curid = 1;
-
-     new = calloc( 1, sizeof(__GlutWindow) );
-     if (!new)
-          __glutFatalError( "out of memory" );
-     
-     new->id = curid++;
-
-     if (fullscreen) {
-          DFBDisplayLayerConfig      config;
-          DFBDisplayLayerConfigFlags fail = 0;
-          
-          config.flags  = DLCONF_WIDTH | DLCONF_HEIGHT |
-                          DLCONF_BUFFERMODE;
-          config.width  = g_width;
-          config.height = g_height;
-          
-          if (g_display_mode & GLUT_DOUBLE)
-               config.buffermode = DLBM_BACKVIDEO;
-          else
-               config.buffermode = DLBM_FRONTONLY;
-               
-          if (g_bpp) {
-               config.flags |= DLCONF_PIXELFORMAT;
-               
-               switch (g_bpp) {
-                    case 8:
-                         config.pixelformat = DSPF_RGB332;
-                         break;
-                    case 12:
-                         config.pixelformat = DSPF_ARGB4444;
-                         break;
-                    case 15:
-                         config.pixelformat = DSPF_ARGB1555;
-                         break;
-                    case 16:
-                         config.pixelformat = DSPF_RGB16;
-                         break;
-                    case 24:
-                    case 32:
-                         config.pixelformat = DSPF_RGB32;
-                         break;
-                    default:
-                         config.flags &= ~DLCONF_PIXELFORMAT;
-                         break;
-               }
-          }
-               
-          primary->TestConfiguration( primary, &config, &fail );
-          config.flags &= ~fail;
-          primary->SetConfiguration( primary, &config );
-               
-          ret = primary->GetSurface( primary, &new->surface );
-          if (ret) {
-               DirectFBError( "IDirectFBDisplayLayer::GetSurface()", ret );
-               free( new );
-               return NULL;
-          }
-          
-          ret = new->surface->GetGL( new->surface, &new->gl );
-          if (ret) {
-               DirectFBError( "IDirectFBSurface::GetGL()", ret );
-               new->surface->Release( new->surface );
-               free( new );
-               return NULL;
-          }
-          
-          events->Reset( events );
-          if (keyboard)
-               keyboard->AttachEventBuffer( keyboard, events );
-          if (mouse)
-               mouse->AttachEventBuffer( mouse, events );
-          if (joystick)
-               joystick->AttachEventBuffer( joystick, events );
-               
-          new->visible = GL_TRUE;    
-     }
-     else {
-          DFBWindowDescription dsc;
-     
-          dsc.flags  = DWDESC_CAPS | DWDESC_POSX | DWDESC_POSY | 
-                       DWDESC_WIDTH | DWDESC_HEIGHT;
-          dsc.caps   = DWCAPS_NONE;
-          dsc.posx   = g_xpos;
-          dsc.posy   = g_ypos;
-          dsc.width  = g_width;
-          dsc.height = g_height;
-
-          if (g_display_mode & GLUT_DOUBLE)
-               dsc.caps |= DWCAPS_DOUBLEBUFFER;
-          if (g_display_mode & GLUT_ALPHA)
-               dsc.caps |= DWCAPS_ALPHACHANNEL;
-
-          ret = primary->CreateWindow( primary, &dsc, &new->window );
-          if (ret) {
-               DirectFBError( "IDirectFBDisplayLayer::CreateWindow()", ret );
-               free( new );
-               return NULL;
-          }
-
-          new->window->GetID( new->window, &new->wid );
-     
-          ret = new->window->GetSurface( new->window, &new->surface );
-          if (ret) {
-               DirectFBError( "IDirectFBWindow::GetSurface()", ret );
-               new->window->Release( new->window );
-               free( new );
-               return NULL;
-          }
-
-          ret = new->surface->GetGL( new->surface, &new->gl );
-          if (ret) {
-               DirectFBError( "IDirectFBSurface::GetGl()", ret );
-               new->surface->Release( new->surface );
-               new->window->Release( new->window );
-               free( new );
-               return NULL;
-          }
-          
-          new->window->AttachEventBuffer( new->window, events );
-          /* enable only handled events */
-          new->window->DisableEvents( new->window, DWET_ALL );
-          new->window->EnableEvents( new->window, DWET_KEYDOWN    | DWET_KEYUP    |
-                                                  DWET_BUTTONDOWN | DWET_BUTTONUP |
-                                                  DWET_ENTER      | DWET_LEAVE    |
-                                                  DWET_MOTION     | DWET_SIZE );
-          
-          new->req.flags |= WINDOW_REQUEST_SHOW;
-     }
-
-     new->mode = g_display_mode;
-     
-     new->reshape    = GL_TRUE;
-     new->visibility = GL_TRUE;
-     new->redisplay  = GL_TRUE;
-     
-     if (g_stack) {
-          new->prev = g_stack->prev;
-          g_stack->prev->next = new;
-          g_stack->prev = new;
-     }
-     else {
-          new->prev = new;
-          g_stack = new;
-     }     
-   
-     return new;
-}
-
-
-__GlutWindow*
-__glutFindWindow( DFBWindowID id )
-{
-     __GlutWindow *cur;
-
-     for (cur = g_stack; cur; cur = cur->next) {
-          if (cur->wid == id)
-               return cur;
-     }
-
-     __glutFatalError( "Window %d not found", id );
-     
-     return NULL;
-}
-
-
-void
-__glutSetWindow( __GlutWindow *window )
-{
-     if (g_current) {
-          if (g_current == window)
-               return;
-          g_current->gl->Unlock( g_current->gl );
-     }
-     
-     if (window)     
-          window->gl->Lock( window->gl );
-     g_current = window;
-}
-
-
-void
-__glutHandleWindows( void )
-{
-     __GlutWindow *cur = g_stack;
-     
-     while (cur) {
-          __GlutWindow *next      = cur->next;
-          GLboolean     displayed = GL_FALSE;
-          
-          if (cur->window && cur->req.flags) {
-               if (cur == g_current)
-                    cur->gl->Unlock( cur->gl );
-
-               if (cur->req.flags & WINDOW_REQUEST_DESTROY) {
-                    __glutDestroyWindow( cur );
-                    cur = next;
-                    continue;
-               }
-     
-               if (cur->req.flags & WINDOW_REQUEST_POSITION) {
-                    cur->window->MoveTo( cur->window, 
-                                         cur->req.x, cur->req.y );
-               }
-           
-               if (cur->req.flags & WINDOW_REQUEST_RESIZE) {
-                    cur->window->Resize( cur->window,
-                                        cur->req.w, cur->req.h );
-                    cur->reshape = GL_TRUE;
-                    cur->redisplay = GL_TRUE;
-               }
-     
-               if (cur->req.flags & WINDOW_REQUEST_RESTACK) {
-                    while (cur->req.z > 0) {
-                         if (cur->req.z >= +1000) {
-                              cur->window->RaiseToTop( cur->window );
-                              cur->req.z = 0;
-                              break;
-                         }
-               
-                         cur->window->Raise( cur->window );
-                         cur->req.z--;
-                    }
-          
-                    while (cur->req.z < 0) {
-                         if (cur->req.z <= -1000) {
-                              cur->window->LowerToBottom( cur->window );
-                              cur->req.z = 0;
-                              break;
-                         }
-               
-                         cur->window->Lower( cur->window );
-                         cur->req.z++;
-                    }
-               }
-     
-               if (cur->req.flags & WINDOW_REQUEST_SHOW) {
-                    cur->window->SetOpacity( cur->window, 0xff );
-                    cur->visible = GL_TRUE;
-                    cur->visibility = GL_TRUE;
-               }
-               else if (cur->req.flags & WINDOW_REQUEST_HIDE) {
-                    cur->window->SetOpacity( cur->window, 0x00 );
-                    cur->visible = GL_FALSE;
-                    cur->visibility = GL_TRUE;
-               }
- 
-               cur->req.flags = 0;
-
-               if (cur == g_current)
-                    cur->gl->Lock( cur->gl );
-          }
-          
-          if (cur->reshape && reshape_func) {
-               int w, h;
-               g_idle = GL_FALSE;                    
-               cur->surface->GetSize( cur->surface, &w, &h ); 
-               __glutSetWindow( cur );
-               reshape_func( w, h );
-               displayed = GL_TRUE;
-          }
-          
-          if (cur->visibility && visibility_func) {
-               g_idle = GL_FALSE;
-               __glutSetWindow( cur );
-               visibility_func( cur->visible ? GLUT_VISIBLE : GLUT_NOT_VISIBLE );
-               displayed = GL_TRUE;
-          }
-
-          if (cur->redisplay && display_func) {
-               g_idle = GL_FALSE;
-               __glutSetWindow( cur );
-               display_func();
-               displayed = GL_TRUE;
-          }
-          
-          if (displayed && cur->window && cur->visible) {
-               if (!(cur->mode & GLUT_DOUBLE)) {
-                    cur->gl->Unlock( cur->gl );
-                    cur->surface->Flip( cur->surface, NULL, 0 );
-                    cur->gl->Lock( cur->gl );
-               }
-          }
-               
-          cur->reshape    = GL_FALSE;
-          cur->visibility = GL_FALSE;
-          cur->redisplay  = GL_FALSE;
-
-          cur = next;
-     }
-}
-
-
-void
-__glutDestroyWindow( __GlutWindow *window )
-{
-     __GlutWindow *next = window->next;
-     __GlutWindow *prev = window->prev;
-     
-     __glutAssert( window != NULL );
-     
-     if (window == g_current)
-          g_current = NULL;
-     if (window == g_game)
-          g_game = NULL;
-     
-     window->gl->Unlock( window->gl );
-     window->gl->Release( window->gl );
-     window->surface->Release( window->surface );
-     
-     if (window->window) {
-#if DIRECTFB_VERSION_CODE >= VERSION_CODE(0,9,26)
-          window->window->DetachEventBuffer( window->window, events );
-#else
-          window->window->Destroy( window->window );
-#endif
-          window->window->Release( window->window );
-     }
-     else {
-#if DIRECTFB_VERSION_CODE >= VERSION_CODE(0,9,26)
-          if (joystick)
-               joystick->DetachEventBuffer( joystick, events );
-          if (mouse)
-               mouse->DetachEventBuffer( mouse, events );
-          if (keyboard)
-               keyboard->DetachEventBuffer( keyboard, events );
-#endif
-          events->Reset( events );
-     }
-     
-     free( window );
-
-     if (next)
-          next->prev = prev;
-     else
-          g_stack->prev = prev;
-
-     if (window == g_stack)
-          g_stack = next;
-     else
-          prev->next = next;
-}
-
-
-void
-__glutDestroyWindows( void )
-{
-     __GlutWindow *cur = g_stack;
-     
-     while (cur) {
-          __GlutWindow *next = cur->next;
-          __glutDestroyWindow( cur );
-          cur = next;
-     }
-} 
-
-
-int GLUTAPIENTRY 
-glutCreateWindow( const char *title )
-{
-     __GlutWindow *window;
-     
-     if (getenv( "__GLUT_GAME_MODE" ))
-          return glutEnterGameMode();
-
-     glutInit( NULL, NULL );
-     
-     window = __glutCreateWindow( GL_FALSE );
-     if (!window)
-          return 0;
-          
-     __glutSetWindow( window );
-     glutSetCursor( GLUT_CURSOR_INHERIT );
-   
-     return window->id;
-}
-
-
-int GLUTAPIENTRY 
-glutCreateSubWindow( int win, int x, int y, int width, int height )
-{
-     return GL_FALSE;
-}
-
-
-void GLUTAPIENTRY 
-glutDestroyWindow( int win )
-{
-     __GlutWindow *cur;
-     
-     for (cur = g_stack; cur; cur = cur->next) {
-          if (cur->id == win) {
-               if (cur->window)
-                    cur->window->Destroy( cur->window );
-               
-               cur->req.flags |= WINDOW_REQUEST_DESTROY;  
-               break;
-          }
-     }
-}
-
-
-void GLUTAPIENTRY 
-glutPostRedisplay( void )
-{
-     if (g_current)
-          g_current->redisplay = GL_TRUE;
-}
-
-
-void GLUTAPIENTRY 
-glutPostWindowRedisplay( int win )
-{
-     __GlutWindow *cur;
-     
-     for (cur = g_stack; cur; cur = cur->next) {
-          if (cur->id == win) {
-               cur->redisplay = GL_TRUE;
-               break;
-          }
-     }
-}
-
-
-void GLUTAPIENTRY 
-glutSwapBuffers( void )
-{
-     if (g_current) {
-          g_current->gl->Unlock( g_current->gl );    
-          g_current->surface->Flip( g_current->surface, NULL, 0 );    
-          g_current->gl->Lock( g_current->gl );
-     }
-}
-
-
-int GLUTAPIENTRY 
-glutGetWindow( void )
-{
-     return (g_current) ? g_current->id : 0;
-}
-
-
-void GLUTAPIENTRY 
-glutSetWindow( int win )
-{
-     __GlutWindow *cur;
-
-     if (g_current && g_current->id == win)
-          return;
-     
-     for (cur = g_stack; cur; cur = cur->next) {
-          if (cur->id == win) {
-               __glutSetWindow( cur );
-               break;
-          }
-     }
-}
-
-
-void GLUTAPIENTRY 
-glutSetWindowTitle( const char *title )
-{
-}
-
-
-void GLUTAPIENTRY 
-glutSetIconTitle( const char *title )
-{
-}
-
-
-void GLUTAPIENTRY 
-glutFullScreen( void )
-{          
-     if (g_current && !g_game) {
-          DFBDisplayLayerConfig config;
-          
-          primary->GetConfiguration( primary, &config );
-          
-          g_current->req.flags |= WINDOW_REQUEST_POSITION |
-                                  WINDOW_REQUEST_RESIZE   |
-                                  WINDOW_REQUEST_RESTACK;
-          g_current->req.x = 0;
-          g_current->req.y = 0;
-          g_current->req.w = config.width;
-          g_current->req.h = config.height;
-          g_current->req.z = 1000;
-     }
-}   
-
-
-void GLUTAPIENTRY 
-glutPositionWindow( int x, int y )
-{
-     if (g_current && !g_game) {
-          g_current->req.flags |= WINDOW_REQUEST_POSITION; 
-          g_current->req.x = x;
-          g_current->req.y = y;
-     }
-}
-
-
-void GLUTAPIENTRY 
-glutReshapeWindow( int width, int height )
-{
-     if (g_current && !g_game) {
-          g_current->req.flags |= WINDOW_REQUEST_RESIZE;
-          g_current->req.w = width;
-          g_current->req.h = height;
-     }
-}
-
-
-void GLUTAPIENTRY 
-glutPopWindow( void )
-{
-     if (g_current && !g_game) {
-          g_current->req.flags |= WINDOW_REQUEST_RESTACK;
-          g_current->req.z--;
-     }
-}
-
-
-void GLUTAPIENTRY 
-glutPushWindow( void )
-{
-     if (g_current && !g_game) {
-          g_current->req.flags |= WINDOW_REQUEST_RESTACK;
-          g_current->req.z++;
-     }
-}
-
-
-void GLUTAPIENTRY 
-glutIconifyWindow( void )
-{
-}
-
-
-void GLUTAPIENTRY 
-glutShowWindow( void )
-{
-     if (g_current && !g_game) {
-          g_current->req.flags |= WINDOW_REQUEST_SHOW;
-          g_current->req.flags &= ~WINDOW_REQUEST_HIDE;
-     }
-}
-
-
-void GLUTAPIENTRY 
-glutHideWindow( void )
-{
-     if (g_current && !g_game) {
-          g_current->req.flags |= WINDOW_REQUEST_HIDE;
-          g_current->req.flags &= ~WINDOW_REQUEST_SHOW;
-     }
-}
-
diff --git a/src/mesa/drivers/directfb/Makefile b/src/mesa/drivers/directfb/Makefile
deleted file mode 100644
index 94c82a2c9c..0000000000
--- a/src/mesa/drivers/directfb/Makefile
+++ /dev/null
@@ -1,67 +0,0 @@
-# src/mesa/drivers/directfb/Makefile
-
-TOP = ../../../..
-
-include $(TOP)/configs/current
-
-
-INCLUDE_DIRS = \
-	-I$(TOP)/include \
-	-I$(TOP)/src/mesa \
-	-I$(TOP)/src/mesa/main \
-	-I$(TOP)/src/mesa/glapi \
-	-I$(TOP)/src/mesa/math \
-	-I$(TOP)/src/mesa/tnl \
-	-I$(TOP)/src/mesa/shader \
-	-I$(TOP)/src/mesa/swrast \
-	-I$(TOP)/src/mesa/swrast_setup
-
-DFB_CFLAGS    = $(shell pkg-config --cflags directfb)
-DFB_MODULEDIR = $(shell pkg-config --variable=moduledir directfb-internal)
-
-DIRECTFBGL_MESA_SOURCES = ../common/driverfuncs.c idirectfbgl_mesa.c
-
-DIRECTFBGL_MESA_OBJECTS = $(DIRECTFBGL_MESA_SOURCES:.c=.o)
-
-DIRECTFBGL_MESA = libidirectfbgl_mesa.so
-
-LIBS = $(TOP)/src/mesa/libmesa.a $(TOP)/src/mesa/libglapi.a
-
-
-.c.o:
-	$(CC) -c $(INCLUDE_DIRS) $(CFLAGS) $(DFB_CFLAGS) $< -o $@
-
-
-default: directfb-libgl directfbgl_mesa
-
-
-# XXX this used to be in src/mesa/Makefile and is probably broken now
-directfb-libgl: $(LIBS)
-	@ $(MKLIB) -o $(GL_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
-		-major $(MESA_MAJOR) -minor $(MESA_MINOR) -patch $(MESA_TINY) \
-		-install $(TOP)/$(LIB_DIR) $(MKLIB_OPTIONS) $(LIBS) \
-		$(GL_LIB_DEPS)
-
-
-
-# Mesa DirectFBGL module
-directfbgl_mesa: $(DIRECTFBGL_MESA_OBJECTS)
-	$(CC) -shared $(CFLAGS) $(DIRECTFBGL_MESA_OBJECTS) -o $(DIRECTFBGL_MESA) \
-	-Wl,-soname -Wl,$(DIRECTFBGL_MESA) -L$(TOP)/$(LIB_DIR) -lGL -lm
-
-
-install:
-	@if test -d $(DFB_MODULEDIR); then \
-		echo "Installing DirectFBGL module."; \
-	else \
-		echo "*** Failed to determine DirectFB module's directory."; \
-		echo "*** Installation aborted."; \
-		exit 1; \
-	fi;
-	test -d $(DFB_MODULEDIR)/interfaces/IDirectFBGL/ || mkdir $(DFB_MODULEDIR)/interfaces/IDirectFBGL/
-	install -m 755 $(DIRECTFBGL_MESA) $(DFB_MODULEDIR)/interfaces/IDirectFBGL/
-
-
-clean:
-	-rm -f *.o *.so
-
diff --git a/src/mesa/drivers/directfb/idirectfbgl_mesa.c b/src/mesa/drivers/directfb/idirectfbgl_mesa.c
deleted file mode 100644
index 85a6f03672..0000000000
--- a/src/mesa/drivers/directfb/idirectfbgl_mesa.c
+++ /dev/null
@@ -1,982 +0,0 @@
-/*
- * Copyright (C) 2004-2007 Claudio Ciccani <klan@directfb.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- * 
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * 
- * Based on glfbdev.c, written by Brian Paul.
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#include <pthread.h>
-
-#include <directfb.h>
-#include <directfb_version.h>
-
-#include <directfbgl.h>
-
-#include <direct/mem.h>
-#include <direct/messages.h>
-#include <direct/interface.h>
-
-#undef CLAMP
-#include "main/glheader.h"
-#include "main/buffers.h"
-#include "main/context.h"
-#include "main/extensions.h"
-#include "main/framebuffer.h"
-#include "main/renderbuffer.h"
-#include "main/imports.h"
-#include "main/texformat.h"
-#include "main/teximage.h"
-#include "main/texstore.h"
-#include "vbo/vbo.h"
-#include "swrast/swrast.h"
-#include "swrast_setup/swrast_setup.h"
-#include "tnl/tnl.h"
-#include "tnl/t_context.h"
-#include "tnl/t_pipeline.h"
-#include "drivers/common/driverfuncs.h"
-
-
-#define VERSION_CODE( M, m, r )  (((M) * 1000) + ((m) * 100) + ((r)))
-#define DIRECTFB_VERSION_CODE    VERSION_CODE( DIRECTFB_MAJOR_VERSION, \
-                                               DIRECTFB_MINOR_VERSION, \
-                                               DIRECTFB_MICRO_VERSION )
-
-
-static DFBResult
-Probe( void *data );
-
-static DFBResult
-Construct( IDirectFBGL      *thiz,
-           IDirectFBSurface *surface );
-
-#include <direct/interface_implementation.h>
-
-DIRECT_INTERFACE_IMPLEMENTATION( IDirectFBGL, Mesa )
-
-/*
- * private data struct of IDirectFBGL
- */
-typedef struct {
-     int                     ref;       /* reference counter */
-     
-     int                     locked;
-     
-     IDirectFBSurface       *surface;
-     DFBSurfacePixelFormat   format;
-     int                     width;
-     int                     height;
-     
-     struct {
-          GLubyte           *start;
-          GLubyte           *end;
-          int                pitch;
-     } video;
-
-     GLvisual                visual;
-     GLframebuffer           framebuffer;
-     GLcontext               context;
-     struct gl_renderbuffer  render;
-} IDirectFBGL_data;
-
-/******************************************************************************/
-
-static pthread_mutex_t global_lock = PTHREAD_MUTEX_INITIALIZER;
-static unsigned int    global_ref  = 0;
-
-static INLINE int directfbgl_init( void )
-{
-     pthread_mutexattr_t attr;
-     int                 ret;
-     
-     if (global_ref++)
-          return 0;
-
-     pthread_mutexattr_init( &attr );
-     pthread_mutexattr_settype( &attr, PTHREAD_MUTEX_ERRORCHECK );
-     ret = pthread_mutex_init( &global_lock, &attr );
-     pthread_mutexattr_destroy( &attr );
-
-     return ret;
-}
-
-static INLINE void directfbgl_finish( void )
-{
-     if (--global_ref == 0)
-          pthread_mutex_destroy( &global_lock );
-}
-
-#define directfbgl_lock()    pthread_mutex_lock( &global_lock )
-#define directfbgl_unlock()  pthread_mutex_unlock( &global_lock )
-
-/******************************************************************************/
-
-static bool  directfbgl_init_visual    ( GLvisual              *visual,
-                                         DFBSurfacePixelFormat  format );
-static bool  directfbgl_create_context ( GLcontext             *context,
-                                         GLframebuffer         *framebuffer,
-                                         GLvisual              *visual,
-                                         IDirectFBGL_data      *data );
-static void  directfbgl_destroy_context( GLcontext             *context,
-                                         GLframebuffer         *framebuffer );
-
-/******************************************************************************/
-
-
-static void
-IDirectFBGL_Mesa_Destruct( IDirectFBGL *thiz )
-{
-     IDirectFBGL_data *data = (IDirectFBGL_data*) thiz->priv;
-
-     directfbgl_destroy_context( &data->context, &data->framebuffer );
-     
-     if (data->surface)
-          data->surface->Release( data->surface );
-
-     DIRECT_DEALLOCATE_INTERFACE( thiz );
-
-     directfbgl_finish();
-}
-
-static DFBResult
-IDirectFBGL_Mesa_AddRef( IDirectFBGL *thiz )
-{
-     DIRECT_INTERFACE_GET_DATA( IDirectFBGL );
-
-     data->ref++;
-
-     return DFB_OK;
-}
-
-static DFBResult
-IDirectFBGL_Mesa_Release( IDirectFBGL *thiz )
-{
-     DIRECT_INTERFACE_GET_DATA( IDirectFBGL )
-
-     if (--data->ref == 0) 
-          IDirectFBGL_Mesa_Destruct( thiz );
-
-     return DFB_OK;
-}
-
-static DFBResult
-IDirectFBGL_Mesa_Lock( IDirectFBGL *thiz )
-{
-     IDirectFBSurface *surface;
-     int               width   = 0;
-     int               height  = 0;
-     DFBResult         ret;
-     
-     DIRECT_INTERFACE_GET_DATA( IDirectFBGL );
-
-     if (data->locked) {
-          data->locked++;
-          return DFB_OK;
-     }
-
-     if (directfbgl_lock())
-          return DFB_LOCKED;
-
-     surface = data->surface;
-     surface->GetSize( surface, &width, &height );
-     
-     ret = surface->Lock( surface, DSLF_READ | DSLF_WRITE, 
-                          (void*)&data->video.start, &data->video.pitch );
-     if (ret) {
-          D_ERROR( "DirectFBGL/Mesa: couldn't lock surface.\n" );
-          directfbgl_unlock();
-          return ret;
-     }
-     data->video.end = data->video.start + (height-1) * data->video.pitch;
-
-     data->render.Data = data->video.start;
-
-     _mesa_make_current( &data->context, 
-                         &data->framebuffer, &data->framebuffer );
-     
-     if (data->width != width || data->height != height) {
-          _mesa_resize_framebuffer( &data->context, 
-                                    &data->framebuffer, width, height );
-          data->width  = width;
-          data->height = height;                        
-     }
-
-     data->locked++;
-     
-     return DFB_OK;
-}
-
-static DFBResult
-IDirectFBGL_Mesa_Unlock( IDirectFBGL *thiz )
-{     
-     DIRECT_INTERFACE_GET_DATA( IDirectFBGL );
-
-     if (!data->locked)
-          return DFB_OK;
-          
-     if (--data->locked == 0) {
-          _mesa_make_current( NULL, NULL, NULL );
-     
-          data->surface->Unlock( data->surface );
-
-          directfbgl_unlock();
-     }
-     
-     return DFB_OK;
-}
-
-static DFBResult
-IDirectFBGL_Mesa_GetAttributes( IDirectFBGL     *thiz,
-                                DFBGLAttributes *attributes )
-{
-     DFBSurfaceCapabilities   caps;
-     GLvisual                *visual;
-     
-     DIRECT_INTERFACE_GET_DATA( IDirectFBGL );
-
-     if (!attributes)
-          return DFB_INVARG;
-
-     data->surface->GetCapabilities( data->surface, &caps );
-
-     visual = &data->visual;
-     
-     attributes->buffer_size      = visual->rgbBits ? : visual->indexBits;
-     attributes->depth_size       = visual->depthBits;
-     attributes->stencil_size     = visual->stencilBits;
-     attributes->aux_buffers      = visual->numAuxBuffers;
-     attributes->red_size         = visual->redBits;
-     attributes->green_size       = visual->greenBits;
-     attributes->blue_size        = visual->blueBits;
-     attributes->alpha_size       = visual->alphaBits;
-     attributes->accum_red_size   = visual->accumRedBits;
-     attributes->accum_green_size = visual->accumGreenBits;
-     attributes->accum_blue_size  = visual->accumBlueBits;
-     attributes->accum_alpha_size = visual->accumAlphaBits;
-     attributes->double_buffer    = ((caps & DSCAPS_FLIPPING) != 0);
-     attributes->stereo           = (visual->stereoMode != 0);
-
-     return DFB_OK;
-}
-
-#if DIRECTFBGL_INTERFACE_VERSION >= 1
-static DFBResult
-IDirectFBGL_Mesa_GetProcAddress( IDirectFBGL  *thiz,
-                                 const char   *name,
-                                 void        **ret_address )
-{
-     DIRECT_INTERFACE_GET_DATA( IDirectFBGL );
-
-     if (!name)
-          return DFB_INVARG;
-          
-     if (!ret_address)
-          return DFB_INVARG;
-          
-     *ret_address = _glapi_get_proc_address( name );
-          
-     return (*ret_address) ? DFB_OK : DFB_UNSUPPORTED;
-}
-#endif
-
-
-/* exported symbols */
-
-static DFBResult
-Probe( void *data )
-{
-     return DFB_OK;
-}
-
-static DFBResult
-Construct( IDirectFBGL *thiz, IDirectFBSurface *surface )
-{
-     DFBResult ret;
-     
-     /* Initialize global resources. */
-     if (directfbgl_init())
-          return DFB_INIT;
-     
-     /* Allocate interface data. */
-     DIRECT_ALLOCATE_INTERFACE_DATA( thiz, IDirectFBGL );
- 
-     /* Initialize interface data. */
-     data->ref = 1;
-
-     /* Duplicate destination surface. */
-     ret = surface->GetSubSurface( surface, NULL, &data->surface );
-     if (ret) {
-          IDirectFBGL_Mesa_Destruct( thiz );
-          return ret;
-     }
-
-     data->surface->GetPixelFormat( data->surface, &data->format );
-     data->surface->GetSize( data->surface, &data->width, &data->height );
-
-     /* Configure visual. */
-     if (!directfbgl_init_visual( &data->visual, data->format )) {
-          D_ERROR( "DirectFBGL/Mesa: failed to initialize visual.\n" );
-          IDirectFBGL_Mesa_Destruct( thiz );
-          return DFB_UNSUPPORTED;
-     }
-     
-     /* Create context. */
-     if (!directfbgl_create_context( &data->context,
-                                     &data->framebuffer,
-                                     &data->visual, data )) {
-          D_ERROR( "DirectFBGL/Mesa: failed to create context.\n" );
-          IDirectFBGL_Mesa_Destruct( thiz );
-          return DFB_UNSUPPORTED;
-     }
-
-     /* Assign interface pointers. */
-     thiz->AddRef         = IDirectFBGL_Mesa_AddRef;
-     thiz->Release        = IDirectFBGL_Mesa_Release;
-     thiz->Lock           = IDirectFBGL_Mesa_Lock;
-     thiz->Unlock         = IDirectFBGL_Mesa_Unlock;
-     thiz->GetAttributes  = IDirectFBGL_Mesa_GetAttributes;
-#if DIRECTFBGL_INTERFACE_VERSION >= 1
-     thiz->GetProcAddress = IDirectFBGL_Mesa_GetProcAddress;
-#endif 
-
-     return DFB_OK;
-}
-
-
-/***************************** Driver functions ******************************/
-
-static const GLubyte*
-dfbGetString( GLcontext *ctx, GLenum pname )
-{
-     return NULL;
-}
-
-static void
-dfbUpdateState( GLcontext *ctx, GLuint new_state )
-{
-     _swrast_InvalidateState( ctx, new_state );
-     _swsetup_InvalidateState( ctx, new_state );
-     _vbo_InvalidateState( ctx, new_state );
-     _tnl_InvalidateState( ctx, new_state );
-}
-
-static void
-dfbGetBufferSize( GLframebuffer *buffer, GLuint *width, GLuint *height )
-{
-     GLcontext        *ctx  = _mesa_get_current_context();
-     IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;
-
-     *width  = (GLuint) data->width;
-     *height = (GLuint) data->height;
-}
-
-/**
- * We only implement this function as a mechanism to check if the
- * framebuffer size has changed (and update corresponding state).
- */
-static void
-dfbSetViewport( GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h )
-{
-     /* Nothing to do (the surface can't be resized while it's locked). */
-     return;
-}
-
-static void
-dfbClear( GLcontext *ctx, GLbitfield mask )
-{
-     IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;
- 
-#define BUFFER_BIT_MASK (BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_FRONT_RIGHT | \
-                         BUFFER_BIT_BACK_LEFT  | BUFFER_BIT_BACK_RIGHT  )
-     if (mask & BUFFER_BIT_MASK  &&
-         ctx->Color.ColorMask[0][0] &&
-         ctx->Color.ColorMask[0][1] &&
-         ctx->Color.ColorMask[0][2] &&
-         ctx->Color.ColorMask[0][3])
-     {
-          DFBRegion clip;
-          GLubyte   a, r, g, b;
-          
-          UNCLAMPED_FLOAT_TO_UBYTE( a, ctx->Color.ClearColor[ACOMP] );
-          UNCLAMPED_FLOAT_TO_UBYTE( r, ctx->Color.ClearColor[RCOMP] );
-          UNCLAMPED_FLOAT_TO_UBYTE( g, ctx->Color.ClearColor[GCOMP] );
-          UNCLAMPED_FLOAT_TO_UBYTE( b, ctx->Color.ClearColor[BCOMP] );
-
-          clip.x1 = ctx->DrawBuffer->_Xmin;
-          clip.y1 = ctx->DrawBuffer->_Ymin;
-          clip.x2 = ctx->DrawBuffer->_Xmax - 1;
-          clip.y2 = ctx->DrawBuffer->_Ymax - 1;
-          data->surface->SetClip( data->surface, &clip );
-          
-          data->surface->Unlock( data->surface );
-          
-          data->surface->Clear( data->surface, r, g, b, a );
-          
-          data->surface->Lock( data->surface, DSLF_READ | DSLF_WRITE,
-                               (void*)&data->video.start, &data->video.pitch );
-          data->video.end = data->video.start + (data->height-1) * data->video.pitch;
-          data->render.Data = data->video.start;
-          
-          mask &= ~BUFFER_BIT_MASK;
-     }
-#undef BUFFER_BIT_MASK
-     
-     if (mask)
-          _swrast_Clear( ctx, mask );
-}
-
-
-/************************ RenderBuffer functions *****************************/
-
-static void
-dfbDeleteRenderbuffer( struct gl_renderbuffer *render )
-{
-     return;
-}
-
-static GLboolean
-dfbRenderbufferStorage( GLcontext *ctx, struct gl_renderbuffer *render,
-                        GLenum internalFormat, GLuint width, GLuint height )
-{
-     return GL_TRUE;
-}
-
-
-/***************************** Span functions ********************************/
-
-/* RGB332 */
-#define NAME(PREFIX) PREFIX##_RGB332
-#define FORMAT GL_RGBA8
-#define RB_TYPE GLubyte
-#define SPAN_VARS \
-   IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;
-#define INIT_PIXEL_PTR(P, X, Y) \
-   GLubyte *P = data->video.end - (Y) * data->video.pitch + (X);
-#define INC_PIXEL_PTR(P) P += 1
-#define STORE_PIXEL(P, X, Y, S) \
-   *P = ( (((S[RCOMP]) & 0xe0)     ) | \
-          (((S[GCOMP]) & 0xe0) >> 3) | \
-          (((S[BCOMP])       ) >> 6) )
-#define FETCH_PIXEL(D, P) \
-   D[RCOMP] = ((*P & 0xe0)     ); \
-   D[GCOMP] = ((*P & 0x1c) << 3); \
-   D[BCOMP] = ((*P & 0x03) << 6); \
-   D[ACOMP] = 0xff
-
-#include "swrast/s_spantemp.h"
-
-/* ARGB4444 */
-#define NAME(PREFIX) PREFIX##_ARGB4444
-#define FORMAT GL_RGBA8
-#define RB_TYPE GLubyte
-#define SPAN_VARS \
-   IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;
-#define INIT_PIXEL_PTR(P, X, Y) \
-   GLushort *P = (GLushort *) (data->video.end - (Y) * data->video.pitch + (X) * 2);
-#define INC_PIXEL_PTR(P) P += 1
-#define STORE_PIXEL_RGB(P, X, Y, S) \
-   *P = ( 0xf000                     | \
-          (((S[RCOMP]) & 0xf0) << 4) | \
-          (((S[GCOMP]) & 0xf0)     ) | \
-          (((S[BCOMP]) & 0xf0) >> 4) )
-#define STORE_PIXEL(P, X, Y, S) \
-   *P = ( (((S[ACOMP]) & 0xf0) << 8) | \
-          (((S[RCOMP]) & 0xf0) << 4) | \
-          (((S[GCOMP]) & 0xf0)     ) | \
-          (((S[BCOMP]) & 0xf0) >> 4) )
-#define FETCH_PIXEL(D, P) \
-   D[RCOMP] = ((*P & 0x0f00) >> 4) | ((*P & 0x0f00) >>  8); \
-   D[GCOMP] = ((*P & 0x00f0)     ) | ((*P & 0x00f0) >>  4); \
-   D[BCOMP] = ((*P & 0x000f) << 4) | ((*P & 0x000f)      ); \
-   D[ACOMP] = ((*P & 0xf000) >> 8) | ((*P & 0xf000) >> 12)
-
-#include "swrast/s_spantemp.h"
-
-/* RGB444 */
-#define NAME(PREFIX) PREFIX##_RGB444
-#define FORMAT GL_RGBA8
-#define RB_TYPE GLubyte
-#define SPAN_VARS \
-   IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;
-#define INIT_PIXEL_PTR(P, X, Y) \
-   GLushort *P = (GLushort *) (data->video.end - (Y) * data->video.pitch + (X) * 2);
-#define INC_PIXEL_PTR(P) P += 1
-#define STORE_PIXEL(P, X, Y, S) \
-   *P = ( (((S[RCOMP]) & 0xf0) << 4) | \
-          (((S[GCOMP]) & 0xf0)     ) | \
-          (((S[BCOMP]) & 0xf0) >> 4) )
-#define FETCH_PIXEL(D, P) \
-   D[RCOMP] = ((*P & 0x0f00) >> 4) | ((*P & 0x0f00) >> 8); \
-   D[GCOMP] = ((*P & 0x00f0)     ) | ((*P & 0x00f0) >> 4); \
-   D[BCOMP] = ((*P & 0x000f) << 4) | ((*P & 0x000f)     ); \
-   D[ACOMP] = 0xff
-
-#include "swrast/s_spantemp.h"
-
-/* ARGB2554 */
-#define NAME(PREFIX) PREFIX##_ARGB2554
-#define FORMAT GL_RGBA8
-#define RB_TYPE GLubyte
-#define SPAN_VARS \
-   IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;
-#define INIT_PIXEL_PTR(P, X, Y) \
-   GLushort *P = (GLushort *) (data->video.end - (Y) * data->video.pitch + (X) * 2);
-#define INC_PIXEL_PTR(P) P += 1
-#define STORE_PIXEL_RGB(P, X, Y, S) \
-   *P = ( 0xc000                     | \
-          (((S[RCOMP]) & 0xf8) << 6) | \
-          (((S[GCOMP]) & 0xf8) << 1) | \
-          (((S[BCOMP]) & 0xf0) >> 4) )
-#define STORE_PIXEL(P, X, Y, S) \
-   *P = ( (((S[ACOMP]) & 0xc0) << 8) | \
-          (((S[RCOMP]) & 0xf8) << 6) | \
-          (((S[GCOMP]) & 0xf8) << 1) | \
-          (((S[BCOMP]) & 0xf0) >> 4) )
-#define FETCH_PIXEL(D, P) \
-   D[RCOMP] = ((*P & 0x3e00) >>  9); \
-   D[GCOMP] = ((*P & 0x01f0) >>  4); \
-   D[BCOMP] = ((*P & 0x000f) <<  4); \
-   D[ACOMP] = ((*P & 0xc000) >> 14)
-
-#include "swrast/s_spantemp.h"
-   
-/* ARGB1555 */
-#define NAME(PREFIX) PREFIX##_ARGB1555
-#define FORMAT GL_RGBA8
-#define RB_TYPE GLubyte
-#define SPAN_VARS \
-   IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;
-#define INIT_PIXEL_PTR(P, X, Y) \
-   GLushort *P = (GLushort *) (data->video.end - (Y) * data->video.pitch + (X) * 2);
-#define INC_PIXEL_PTR(P) P += 1
-#define STORE_PIXEL_RGB(P, X, Y, S) \
-   *P = ( 0x8000                      | \
-          (((S[RCOMP]) & 0xf8) <<  7) | \
-          (((S[GCOMP]) & 0xf8) <<  2) | \
-          (((S[BCOMP])       ) >>  3) )
-#define STORE_PIXEL(P, X, Y, S) \
-   *P = ( (((S[ACOMP]) & 0x80) << 16) | \
-          (((S[RCOMP]) & 0xf8) <<  7) | \
-          (((S[GCOMP]) & 0xf8) <<  2) | \
-          (((S[BCOMP])       ) >>  3) )
-#define FETCH_PIXEL(D, P) \
-   D[RCOMP] = ((*P & 0x7c00) >> 7) | ((*P & 0x7c00) >> 12); \
-   D[GCOMP] = ((*P & 0x03e0) >> 2) | ((*P & 0x03e0) >>  7); \
-   D[BCOMP] = ((*P & 0x001f) << 3) | ((*P & 0x001f) <<  2); \
-   D[ACOMP] = ((*P & 0x8000) ? 0xff : 0)
-
-#include "swrast/s_spantemp.h"
-
-/* RGB555 */
-#define NAME(PREFIX) PREFIX##_RGB555
-#define FORMAT GL_RGBA8
-#define RB_TYPE GLubyte
-#define SPAN_VARS \
-   IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;
-#define INIT_PIXEL_PTR(P, X, Y) \
-   GLushort *P = (GLushort *) (data->video.end - (Y) * data->video.pitch + (X) * 2);
-#define INC_PIXEL_PTR(P) P += 1
-#define STORE_PIXEL(P, X, Y, S) \
-   *P = ( (((S[RCOMP]) & 0xf8) <<  7) | \
-          (((S[GCOMP]) & 0xf8) <<  2) | \
-          (((S[BCOMP])       ) >>  3) )
-#define FETCH_PIXEL(D, P) \
-   D[RCOMP] = ((*P & 0x7c00) >> 7) | ((*P & 0x7c00) >> 12); \
-   D[GCOMP] = ((*P & 0x03e0) >> 2) | ((*P & 0x03e0) >>  7); \
-   D[BCOMP] = ((*P & 0x001f) << 3) | ((*P & 0x001f) <<  2); \
-   D[ACOMP] = 0xff
-
-#include "swrast/s_spantemp.h"
-
-/* RGB16 */
-#define NAME(PREFIX) PREFIX##_RGB16
-#define FORMAT GL_RGBA8
-#define RB_TYPE GLubyte
-#define SPAN_VARS \
-   IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;
-#define INIT_PIXEL_PTR(P, X, Y) \
-   GLushort *P = (GLushort *) (data->video.end - (Y) * data->video.pitch + (X) * 2);
-#define INC_PIXEL_PTR(P) P += 1
-#define STORE_PIXEL(P, X, Y, S) \
-   *P = ( (((S[RCOMP]) & 0xf8) << 8) | \
-          (((S[GCOMP]) & 0xfc) << 3) | \
-          (((S[BCOMP])       ) >> 3) )
-#define FETCH_PIXEL(D, P) \
-   D[RCOMP] = ((*P & 0xf800) >> 8) | ((*P & 0xf800) >> 13); \
-   D[GCOMP] = ((*P & 0x07e0) >> 3) | ((*P & 0x07e0) >>  9); \
-   D[BCOMP] = ((*P & 0x001f) << 3) | ((*P & 0x001f) >>  2); \
-   D[ACOMP] = 0xff
-
-#include "swrast/s_spantemp.h"
-
-/* RGB24 */
-#define NAME(PREFIX) PREFIX##_RGB24
-#define FORMAT GL_RGBA8
-#define RB_TYPE GLubyte
-#define SPAN_VARS \
-   IDirectFBGL_data *data = ctx->DriverCtx;
-#define INIT_PIXEL_PTR(P, X, Y) \
-   GLubyte *P = data->video.end - (Y) * data->video.pitch + (X) * 3;
-#define INC_PIXEL_PTR(P) P += 3
-#define STORE_PIXEL(P, X, Y, S) \
-   P[0] = S[BCOMP];  P[1] = S[GCOMP];  P[2] = S[BCOMP]
-#define FETCH_PIXEL(D, P) \
-   D[RCOMP] = P[2];  D[GCOMP] = P[1];  D[BCOMP] = P[0]; D[ACOMP] = 0xff
-
-#include "swrast/s_spantemp.h"
-
-/* RGB32 */
-#define NAME(PREFIX) PREFIX##_RGB32
-#define FORMAT GL_RGBA8
-#define RB_TYPE GLubyte
-#define SPAN_VARS \
-   IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;
-#define INIT_PIXEL_PTR(P, X, Y) \
-   GLuint *P = (GLuint*) (data->video.end - (Y) * data->video.pitch + (X) * 4);
-#define INC_PIXEL_PTR(P) P += 1
-#define STORE_PIXEL(P, X, Y, S) \
-   *P = ( ((S[RCOMP]) << 16) | \
-          ((S[GCOMP]) <<  8) | \
-          ((S[BCOMP])      ) )
-#define FETCH_PIXEL(D, P) \
-   D[RCOMP] = ((*P & 0x00ff0000) >> 16); \
-   D[GCOMP] = ((*P & 0x0000ff00) >>  8); \
-   D[BCOMP] = ((*P & 0x000000ff)      ); \
-   D[ACOMP] = 0xff
-
-#include "swrast/s_spantemp.h"
-   
-/* ARGB */
-#define NAME(PREFIX) PREFIX##_ARGB
-#define FORMAT GL_RGBA8
-#define RB_TYPE GLubyte
-#define SPAN_VARS \
-   IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;
-#define INIT_PIXEL_PTR(P, X, Y) \
-   GLuint *P = (GLuint*) (data->video.end - (Y) * data->video.pitch + (X) * 4);
-#define INC_PIXEL_PTR(P) P += 1
-#define STORE_PIXEL_RGB(P, X, Y, S) \
-   *P = ( 0xff000000         | \
-          ((S[RCOMP]) << 16) | \
-          ((S[GCOMP]) <<  8) | \
-          ((S[BCOMP])      ) )
-#define STORE_PIXEL(P, X, Y, S) \
-   *P = ( ((S[ACOMP]) << 24) | \
-          ((S[RCOMP]) << 16) | \
-          ((S[GCOMP]) <<  8) | \
-          ((S[BCOMP])      ) )
-#define FETCH_PIXEL(D, P) \
-   D[RCOMP] = ((*P & 0x00ff0000) >> 16); \
-   D[GCOMP] = ((*P & 0x0000ff00) >>  8); \
-   D[BCOMP] = ((*P & 0x000000ff)      ); \
-   D[ACOMP] = ((*P & 0xff000000) >> 24)
-
-#include "swrast/s_spantemp.h"
-
-/* AiRGB */
-#define NAME(PREFIX) PREFIX##_AiRGB
-#define FORMAT GL_RGBA8
-#define RB_TYPE GLubyte
-#define SPAN_VARS \
-   IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;
-#define INIT_PIXEL_PTR(P, X, Y) \
-   GLuint *P = (GLuint*) (data->video.end - (Y) * data->video.pitch + (X) * 4);
-#define INC_PIXEL_PTR(P) P += 1
-#define STORE_PIXEL_RGB(P, X, Y, S) \
-   *P = ( ((S[RCOMP]) << 16) | \
-          ((S[GCOMP]) <<  8) | \
-          ((S[BCOMP])      ) )
-#define STORE_PIXEL(P, X, Y, S) \
-   *P = ( (((S[ACOMP]) ^ 0xff) << 24) | \
-          (((S[RCOMP])       ) << 16) | \
-          (((S[GCOMP])       ) <<  8) | \
-          (((S[BCOMP])       )      ) )
-#define FETCH_PIXEL(D, P) \
-   D[RCOMP] =  ((*P & 0x00ff0000) >> 16); \
-   D[GCOMP] =  ((*P & 0x0000ff00) >>  8); \
-   D[BCOMP] =  ((*P & 0x000000ff)      ); \
-   D[ACOMP] = (((*P & 0xff000000) >> 24) ^ 0xff)
-
-#include "swrast/s_spantemp.h"
-
-
-/*****************************************************************************/
-
-static bool
-directfbgl_init_visual( GLvisual              *visual,
-                        DFBSurfacePixelFormat  format )
-{
-     GLboolean  rgbFlag        = GL_TRUE;
-     GLboolean  dbFlag         = GL_FALSE;
-     GLboolean  stereoFlag     = GL_FALSE;
-     GLint      redBits        = 0;
-     GLint      blueBits       = 0;
-     GLint      greenBits      = 0;
-     GLint      alphaBits      = 0;
-     GLint      indexBits      = 0;
-     GLint      depthBits      = 0;
-     GLint      stencilBits    = 0;
-     GLint      accumRedBits   = 0;
-     GLint      accumGreenBits = 0;
-     GLint      accumBlueBits  = 0;
-     GLint      accumAlphaBits = 0;
-     GLint      numSamples     = 0;
-
-     /* FIXME: LUT8 support. */
-     switch (format) {
-          case DSPF_RGB332:
-               redBits   = 3;
-               greenBits = 3;
-               blueBits  = 2;
-               break;
-          case DSPF_ARGB4444:
-               alphaBits = 4;
-          case DSPF_RGB444:
-               redBits   = 4;
-               greenBits = 4;
-               blueBits  = 4;
-               break;
-          case DSPF_ARGB2554:
-               alphaBits = 2;
-               redBits   = 5;
-               greenBits = 5;
-               blueBits  = 4;
-               break;
-          case DSPF_ARGB1555:
-               alphaBits = 1;
-          case DSPF_RGB555:
-               redBits   = 5;
-               greenBits = 5;
-               blueBits  = 5;
-               break;
-          case DSPF_RGB16:
-               redBits   = 5;
-               greenBits = 6;
-               blueBits  = 5;
-               break;
-          case DSPF_ARGB:
-          case DSPF_AiRGB:
-               alphaBits = 8;
-          case DSPF_RGB24:
-          case DSPF_RGB32:
-               redBits   = 8;
-               greenBits = 8;
-               blueBits  = 8;
-               break;
-          default:
-               D_WARN( "unsupported pixelformat" );
-               return false;
-     }
-
-     if (rgbFlag) {
-          accumRedBits   = redBits;
-          accumGreenBits = greenBits;
-          accumBlueBits  = blueBits;
-          accumAlphaBits = alphaBits;
-          depthBits      = redBits + greenBits + blueBits;
-          stencilBits    = alphaBits;
-     } else
-          depthBits      = 8;
-
-     return _mesa_initialize_visual( visual,
-                                     rgbFlag, dbFlag, stereoFlag,
-                                     redBits, greenBits, blueBits, alphaBits,
-                                     indexBits, depthBits, stencilBits,
-                                     accumRedBits, accumGreenBits,
-                                     accumBlueBits, accumAlphaBits,
-                                     numSamples );
-}
-
-static bool
-directfbgl_create_context( GLcontext        *context,
-                           GLframebuffer    *framebuffer,
-                           GLvisual         *visual,
-                           IDirectFBGL_data *data )
-{
-     struct dd_function_table functions;
-     
-     _mesa_initialize_window_framebuffer( framebuffer, visual );
-     
-     _mesa_init_driver_functions( &functions );
-     functions.GetString     = dfbGetString;
-     functions.UpdateState   = dfbUpdateState;
-     functions.GetBufferSize = dfbGetBufferSize;
-     functions.Viewport      = dfbSetViewport;
-     functions.Clear         = dfbClear;
-     
-     if (!_mesa_initialize_context( context, visual, NULL,
-                                    &functions, (void*) data )) {
-          D_DEBUG( "DirectFBGL/Mesa: _mesa_initialize_context() failed.\n" );
-          _mesa_free_framebuffer_data( framebuffer );
-          return false;
-     }
-
-     _swrast_CreateContext( context );
-     _vbo_CreateContext( context );
-     _tnl_CreateContext( context );
-     _swsetup_CreateContext( context );
-     _swsetup_Wakeup( context );
-
-     _mesa_init_renderbuffer( &data->render, 0 );
-     data->render.InternalFormat = GL_RGBA;
-     data->render._BaseFormat    = GL_RGBA;
-     data->render.DataType       = GL_UNSIGNED_BYTE;
-     data->render.Data           = data->video.start;
-     data->render.Delete         = dfbDeleteRenderbuffer;
-     data->render.AllocStorage   = dfbRenderbufferStorage;
-     
-     switch (data->format) {
-          case DSPF_RGB332:
-               data->render.GetRow        = get_row_RGB332;
-               data->render.GetValues     = get_values_RGB332;
-               data->render.PutRow        = put_row_RGB332;
-               data->render.PutRowRGB     = put_row_rgb_RGB332;
-               data->render.PutMonoRow    = put_mono_row_RGB332;
-               data->render.PutValues     = put_values_RGB332;
-               data->render.PutMonoValues = put_mono_values_RGB332;
-               break;
-          case DSPF_ARGB4444: 
-               data->render.GetRow        = get_row_ARGB4444;
-               data->render.GetValues     = get_values_ARGB4444;
-               data->render.PutRow        = put_row_ARGB4444;
-               data->render.PutRowRGB     = put_row_rgb_ARGB4444;
-               data->render.PutMonoRow    = put_mono_row_ARGB4444;
-               data->render.PutValues     = put_values_ARGB4444;
-               data->render.PutMonoValues = put_mono_values_ARGB4444;
-               break;
-          case DSPF_RGB444: 
-               data->render.GetRow        = get_row_RGB444;
-               data->render.GetValues     = get_values_RGB444;
-               data->render.PutRow        = put_row_RGB444;
-               data->render.PutRowRGB     = put_row_rgb_RGB444;
-               data->render.PutMonoRow    = put_mono_row_RGB444;
-               data->render.PutValues     = put_values_RGB444;
-               data->render.PutMonoValues = put_mono_values_RGB444;
-               break;
-          case DSPF_ARGB2554: 
-               data->render.GetRow        = get_row_ARGB2554;
-               data->render.GetValues     = get_values_ARGB2554;
-               data->render.PutRow        = put_row_ARGB2554;
-               data->render.PutRowRGB     = put_row_rgb_ARGB2554;
-               data->render.PutMonoRow    = put_mono_row_ARGB2554;
-               data->render.PutValues     = put_values_ARGB2554;
-               data->render.PutMonoValues = put_mono_values_ARGB2554;
-               break;
-          case DSPF_ARGB1555:
-               data->render.GetRow        = get_row_ARGB1555;
-               data->render.GetValues     = get_values_ARGB1555;
-               data->render.PutRow        = put_row_ARGB1555;
-               data->render.PutRowRGB     = put_row_rgb_ARGB1555;
-               data->render.PutMonoRow    = put_mono_row_ARGB1555;
-               data->render.PutValues     = put_values_ARGB1555;
-               data->render.PutMonoValues = put_mono_values_ARGB1555;
-               break;
-          case DSPF_RGB555:
-               data->render.GetRow        = get_row_RGB555;
-               data->render.GetValues     = get_values_RGB555;
-               data->render.PutRow        = put_row_RGB555;
-               data->render.PutRowRGB     = put_row_rgb_RGB555;
-               data->render.PutMonoRow    = put_mono_row_RGB555;
-               data->render.PutValues     = put_values_RGB555;
-               data->render.PutMonoValues = put_mono_values_RGB555;
-               break;
-          case DSPF_RGB16:
-               data->render.GetRow        = get_row_RGB16;
-               data->render.GetValues     = get_values_RGB16;
-               data->render.PutRow        = put_row_RGB16;
-               data->render.PutRowRGB     = put_row_rgb_RGB16;
-               data->render.PutMonoRow    = put_mono_row_RGB16;
-               data->render.PutValues     = put_values_RGB16;
-               data->render.PutMonoValues = put_mono_values_RGB16;
-               break;
-          case DSPF_RGB24:
-               data->render.GetRow        = get_row_RGB24;
-               data->render.GetValues     = get_values_RGB24;
-               data->render.PutRow        = put_row_RGB24;
-               data->render.PutRowRGB     = put_row_rgb_RGB24;
-               data->render.PutMonoRow    = put_mono_row_RGB24;
-               data->render.PutValues     = put_values_RGB24;
-               data->render.PutMonoValues = put_mono_values_RGB24;
-               break;
-          case DSPF_RGB32:
-               data->render.GetRow        = get_row_RGB32;
-               data->render.GetValues     = get_values_RGB32;
-               data->render.PutRow        = put_row_RGB32;
-               data->render.PutRowRGB     = put_row_rgb_RGB32;
-               data->render.PutMonoRow    = put_mono_row_RGB32;
-               data->render.PutValues     = put_values_RGB32;
-               data->render.PutMonoValues = put_mono_values_RGB32;
-               break;
-          case DSPF_ARGB:
-               data->render.GetRow        = get_row_ARGB;
-               data->render.GetValues     = get_values_ARGB;
-               data->render.PutRow        = put_row_ARGB;
-               data->render.PutRowRGB     = put_row_rgb_ARGB;
-               data->render.PutMonoRow    = put_mono_row_ARGB;
-               data->render.PutValues     = put_values_ARGB;
-               data->render.PutMonoValues = put_mono_values_ARGB;
-               break;
-          case DSPF_AiRGB:
-               data->render.GetRow        = get_row_AiRGB;
-               data->render.GetValues     = get_values_AiRGB;
-               data->render.PutRow        = put_row_AiRGB;
-               data->render.PutRowRGB     = put_row_rgb_AiRGB;
-               data->render.PutMonoRow    = put_mono_row_AiRGB;
-               data->render.PutValues     = put_values_AiRGB;
-               data->render.PutMonoValues = put_mono_values_AiRGB;
-               break;
-          default:
-               D_BUG( "unexpected pixelformat" );
-               return false;
-     }
-
-     data->render.Width = data->width;
-     data->render.Height = data->height;
-
-     _mesa_add_renderbuffer( framebuffer, BUFFER_FRONT_LEFT, &data->render );
-     
-     _mesa_add_soft_renderbuffers( framebuffer,
-                                   GL_FALSE,
-                                   visual->haveDepthBuffer,
-                                   visual->haveStencilBuffer,
-                                   visual->haveAccumBuffer,
-                                   GL_FALSE,
-                                   GL_FALSE );
-
-     TNL_CONTEXT( context )->Driver.RunPipeline = _tnl_run_pipeline;
-
-     _mesa_enable_sw_extensions( context );
-     
-     return true;
-}
-
-static void
-directfbgl_destroy_context( GLcontext     *context,
-                            GLframebuffer *framebuffer )
-{
-     _swsetup_DestroyContext( context );
-     _swrast_DestroyContext( context );
-     _tnl_DestroyContext( context );
-     _vbo_DestroyContext( context );
-     //_mesa_free_framebuffer_data( framebuffer );
-     _mesa_free_context_data( context );
-}    
- 
-- 
cgit v1.2.3


From 97972244d5254cb2862325f8fe03db0a82a8041a Mon Sep 17 00:00:00 2001
From: Kristian Høgsberg <krh@bitplanet.net>
Date: Thu, 25 Feb 2010 15:52:32 -0500
Subject: Remove d3d driver

---
 docs/README.D3D                        |  124 --
 src/mesa/drivers/d3d/D3DCAPS.CPP       |  250 ----
 src/mesa/drivers/d3d/D3DHAL.H          |   68 -
 src/mesa/drivers/d3d/D3DInit.cpp       |  891 -------------
 src/mesa/drivers/d3d/D3DMESA.H         |   84 --
 src/mesa/drivers/d3d/D3DRaster.cpp     |  213 ----
 src/mesa/drivers/d3d/D3DShared.h       |  154 ---
 src/mesa/drivers/d3d/D3DTEXT.CPP       |  576 ---------
 src/mesa/drivers/d3d/D3DTextureMgr.cpp |  947 --------------
 src/mesa/drivers/d3d/D3DTextureMgr.h   |   62 -
 src/mesa/drivers/d3d/D3DUTILS.CPP      |  638 ----------
 src/mesa/drivers/d3d/D3Dvbrender.c     | 2149 --------------------------------
 src/mesa/drivers/d3d/DDrawPROCS.c      |  399 ------
 src/mesa/drivers/d3d/DEBUG.C           |  143 ---
 src/mesa/drivers/d3d/DEBUG.H           |   90 --
 src/mesa/drivers/d3d/DbgEnv.bat        |   25 -
 src/mesa/drivers/d3d/MAKEFILE          |  101 --
 src/mesa/drivers/d3d/NULLProcs.h       |   49 -
 src/mesa/drivers/d3d/NullProcs.c       |   49 -
 src/mesa/drivers/d3d/OPENGL32.DEF      |  442 -------
 src/mesa/drivers/d3d/WGL.C             | 1262 -------------------
 src/mesa/drivers/d3d/d3dText.h         |   53 -
 22 files changed, 8769 deletions(-)
 delete mode 100644 docs/README.D3D
 delete mode 100644 src/mesa/drivers/d3d/D3DCAPS.CPP
 delete mode 100644 src/mesa/drivers/d3d/D3DHAL.H
 delete mode 100644 src/mesa/drivers/d3d/D3DInit.cpp
 delete mode 100644 src/mesa/drivers/d3d/D3DMESA.H
 delete mode 100644 src/mesa/drivers/d3d/D3DRaster.cpp
 delete mode 100644 src/mesa/drivers/d3d/D3DShared.h
 delete mode 100644 src/mesa/drivers/d3d/D3DTEXT.CPP
 delete mode 100644 src/mesa/drivers/d3d/D3DTextureMgr.cpp
 delete mode 100644 src/mesa/drivers/d3d/D3DTextureMgr.h
 delete mode 100644 src/mesa/drivers/d3d/D3DUTILS.CPP
 delete mode 100644 src/mesa/drivers/d3d/D3Dvbrender.c
 delete mode 100644 src/mesa/drivers/d3d/DDrawPROCS.c
 delete mode 100644 src/mesa/drivers/d3d/DEBUG.C
 delete mode 100644 src/mesa/drivers/d3d/DEBUG.H
 delete mode 100644 src/mesa/drivers/d3d/DbgEnv.bat
 delete mode 100644 src/mesa/drivers/d3d/MAKEFILE
 delete mode 100644 src/mesa/drivers/d3d/NULLProcs.h
 delete mode 100644 src/mesa/drivers/d3d/NullProcs.c
 delete mode 100644 src/mesa/drivers/d3d/OPENGL32.DEF
 delete mode 100644 src/mesa/drivers/d3d/WGL.C
 delete mode 100644 src/mesa/drivers/d3d/d3dText.h

(limited to 'src/mesa')

diff --git a/docs/README.D3D b/docs/README.D3D
deleted file mode 100644
index b41fcb6208..0000000000
--- a/docs/README.D3D
+++ /dev/null
@@ -1,124 +0,0 @@
-
-                     DirectX 6 Driver for Mesa 3.0
-
-
-This software is distributed under the terms of the GNU Library
-General Public License, see the LICENSE file for details.
-
-
-
-What do you need ?
-------------------
-
-	- A PC with a DirectX 6 video driver installed.
-
-	- Mesa 3.0
-
-	- The 3Dfx Glide library 2.3 or later for your OS (the 2.4 works fine).
-	  The Voodoo2 requires the Glide library 2.51. The Glide 3.0 is not
-	  compatible with the Glide 2.x so it doesn't work with the current
-	  version of the driver;
-
-	- Visual C++ 5.0 is only compiler test but others should be ok with
-       changes to the makefiles (CFLAGS/LFLAGS).
-
-	- DirectX 6 SDK (was a MS download but not sure if still available).
-
-	- SoftIce or another debugger that will get DPF's is nice.
-
-
-Tested on:
-----------
-	Windows 95
-  	Windows 98
-	Windows NT 5.0 (beta 2)
-
-
-What is able to do ?
---------------------
-
-	- the driver will try and use DirectX to rasterize the OpenGL primitives
-	that are sent to the driver.  The driver will fall back to SW  if the rendering 
-	context is too big.  The fallback to SW still uses DirectDraw.  If the driver
-	fails to support and operation (accum, stencil, etc) then it will try and get
-	Mesa to render it in SW.  DirectX 6 features that are unsupported by the 
-	installed DirectX 6 driver will be mapped to some other best fit feature.
-
-
-How to compile:
----------------
-
-	These instructions assume you have Visual C++ installed.
-
-	  You might need to increase you enviroment space.  You can do this by 
-	adding the following statement to you config.sys.
-
-	shell=C:\COMMAND.COM C:\ /p /e:8198
-
-	  Next setup you compiler enviroment by running vcvars32.bat in the Visual C++
- 	'bin' directoy.
-
-	c:\DevStudio\VC\bin\vcvars32.bat
-
-	  Modify the D3D makefile to point at your SDK install.  Example has the SDK
-	installed on my 'f' drive in the root.
-
-	file: \Mesa-3.0\src\makefile.d3d
-
-	SDKROOT=f:\mssdk
-
-	  Now you can simply make the project.  If you look in the makefile you can see
-	I have some different targets like 'install'.  
-
-	nmake /f makefile.d3d
-
-
-FAQ:
-----
-
-	1) I don't think the driver is using my DirectX driver.
-
- 	  This maybe true as the current version will only select the Primary D3D driver
-	installed.  If you 3D card is the secondary (3dfx) then your out of luck for this
-	release.
-
-	2) The driver seems like its not HW accelerated.
-
-	  If you have a video card with limited memory then you might want to try and 
-	change your destop resolution to a low setting (640x480x16) so that the 3D part
-	of the card has more resources.  Remeber the driver can't make the card better...
-
-	3) Nothing works.
-
-	  Make sure you have a DirectX '6' driver installed.  Check you driver docs for this
-	info or use the SDK info utilities.
-	  The final 'dll' is named opengl32.dll and is either in the same directory as the 
-	OpenGL program or in your system directory (x:\windows\system or x:\winnt\system32).
-	  Check your destop resolution.  Most DirectX 6 drivers will only support 16bit and
-	32bit color depth.  To find out for sure you can check the DirectX Info Viewer in
-	the SDK.
-	  
-
-	4) Rendering doesn't look right.
-
-	  Sometimes this is because the card doesn't support a feature that that is required.
-	This is usually due to unsupported alpha functions (test/blend) or texture mapping.
-	Some cards suffer from too small of an alpha channel.  The driver does its best to
-	fallback on unsupported features.  This is not to say the driver may not have a bug(s).
-
-	5) Textures look bad.
-
-	  No mipmapping in this release.
-
-
-Thanks to:
-----------
-
-Brian Paul
-
-
-
-
-Leigh McRae (leigh@altsoftware.com)
-February 9, 1999
-
diff --git a/src/mesa/drivers/d3d/D3DCAPS.CPP b/src/mesa/drivers/d3d/D3DCAPS.CPP
deleted file mode 100644
index 80ee91d922..0000000000
--- a/src/mesa/drivers/d3d/D3DCAPS.CPP
+++ /dev/null
@@ -1,250 +0,0 @@
-/*===========================================================================*/
-/*                                                                           */
-/* Mesa-3.0 DirectX 6 Driver                                       Build 5   */
-/*                                                                           */
-/* By Leigh McRae                                                            */
-/*                                                                           */
-/* http://www.altsoftware.com/                                               */
-/*                                                                           */
-/* Copyright (c) 1999-1998  alt.software inc.  All Rights Reserved           */
-/*===========================================================================*/
-#include "D3DHAL.h"
-/*===========================================================================*/
-/* Macros.                                                                   */
-/*===========================================================================*/
-#define SRCBLEND_MAP(gl,d3d,fall)	if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwSrcBlendCaps & d3d ) \
-                                   { \
-					            sprintf( buffer, "SRC Blend: %s -> %s", # gl, # d3d ); \
-                                     DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), buffer )); \
-                                     pShared->dwSrcBlendCaps[index] = d3d; \
-						     } \
-							else \
-                                   { \
-					            sprintf( buffer, "SRC Blend: %s -> %s", # gl, # fall ); \
-                                     DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), buffer )); \
-                                     pShared->dwSrcBlendCaps[index] = fall; \
-							}
-#define DSTBLEND_MAP(gl,d3d,fall)	if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwDestBlendCaps & d3d ) \
-                                   { \
-					            sprintf( buffer, "DST Blend: %s -> %s", # gl, # d3d ); \
-                                     DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), buffer )); \
-                                     pShared->dwDestBlendCaps[index] = d3d; \
-						     } \
-							else \
-                                   { \
-					            sprintf( buffer, "DST Blend: %s -> %s", # gl, # fall ); \
-                                     DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), buffer )); \
-                                     pShared->dwDestBlendCaps[index] = fall; \
-							}
-
-/*===========================================================================*/
-/*  I use this function to handle the fact that the D3D texture blending and */
-/* OpenGL texture blending functions don't map one to one.  Also there is the*/
-/* problem with cards not supporting all the D3D functions. So I use the CAPS*/
-/* of the card to make a table of functions that will have defaults for the  */
-/* unsupported functions.                                                    */
-/*  So first I fill the table with the fallback function then I check to see */
-/* if the card supports the requested function.  If it does I replace the    */
-/* default thats already in the array.  Now order does matter as I used an   */
-/* enum type in D3DShared.h so that the mapping would be a little easier.    */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-void AlphaBlendTableHAL( PMESAD3DHAL pHAL )
-{
-  PMESAD3DSHARED	pShared = &pHAL->shared;
-  int			index;
-  char			buffer[128];
-
-  DPF(( DBG_FUNC, "AlphaBlendTableHAL();" ));
-
-  /* Make the fallback for the Source blend. */
-  for( index = 0; index < 14; index++ )
-  {
-    switch( index )
-    {
-      case s_zero:
-        SRCBLEND_MAP( GL_ZERO, D3DBLEND_ZERO, D3DBLEND_ONE );
-	   break;
-      case s_one:
-        SRCBLEND_MAP( GL_ONE, D3DBLEND_ONE, D3DBLEND_ONE );
-	   break;
-      case s_dst_color:
-        SRCBLEND_MAP( GL_DST_COLOR, D3DBLEND_DESTCOLOR, D3DBLEND_ONE );
-	   break;
-      case s_one_minus_dst_color:
-        SRCBLEND_MAP( GL_ONE_MINUS_DST_COLOR, D3DBLEND_INVDESTCOLOR, D3DBLEND_ONE );
-	   break;
-      case s_src_alpha:
-        SRCBLEND_MAP( GL_SRC_ALPHA, D3DBLEND_SRCALPHA, D3DBLEND_ONE );
-	   break;
-      case s_one_minus_src_alpha:
-        SRCBLEND_MAP( GL_ONE_MINUS_SRC_ALPHA, D3DBLEND_INVSRCALPHA, D3DBLEND_ONE );
-	   break;
-      case s_dst_alpha:
-        SRCBLEND_MAP( GL_DST_ALPHA, D3DBLEND_DESTALPHA, D3DBLEND_ONE );
-	   break;
-      case s_one_minus_dst_alpha:
-        SRCBLEND_MAP( GL_ONE_MINUS_DST_ALPHA, D3DBLEND_INVDESTALPHA, D3DBLEND_ONE );
-	   break;
-      case s_src_alpha_saturate:
-        SRCBLEND_MAP( GL_SRC_ALPHA_SATURATE, D3DBLEND_SRCALPHASAT, D3DBLEND_ONE );
-	   break;
-      case s_constant_color:
-        SRCBLEND_MAP( GL_CONSTANT_COLOR, D3DBLEND_SRCCOLOR, D3DBLEND_ONE );
-	   break;
-      case s_one_minus_constant_color:
-        SRCBLEND_MAP( GL_ONE_MINUS_CONSTANT_COLOR, D3DBLEND_INVSRCCOLOR, D3DBLEND_ONE );
-	   break;
-      case s_constant_alpha:
-        SRCBLEND_MAP( GL_CONSTANT_ALPHA, D3DBLEND_BOTHSRCALPHA, D3DBLEND_ONE );
-	   break;
-      case s_one_minus_constant_alpha:
-        SRCBLEND_MAP( GL_ONE_MINUS_CONSTANT_ALPHA, D3DBLEND_BOTHINVSRCALPHA, D3DBLEND_ONE );
-	   break;
-    }
-  }
-
-  /* Make the fallback for the Destination blend. */
-  for( index = 0; index < 14; index++ )
-  {
-    switch( index )
-    {
-      case d_zero:
-        DSTBLEND_MAP( GL_ZERO, D3DBLEND_ZERO, D3DBLEND_ONE );
-	   break;
-      case d_one:
-        DSTBLEND_MAP( GL_ONE, D3DBLEND_ONE, D3DBLEND_ONE );
-	   break;
-      case d_src_color:
-        DSTBLEND_MAP( GL_SRC_COLOR, D3DBLEND_SRCCOLOR, D3DBLEND_ONE );
-	   break;
-      case d_one_minus_src_color:
-        DSTBLEND_MAP( GL_ONE_MINUS_SRC_COLOR, D3DBLEND_INVSRCCOLOR, D3DBLEND_ONE );
-	   break;
-      case d_src_alpha:
-        DSTBLEND_MAP( GL_SRC_ALPHA, D3DBLEND_SRCALPHA, D3DBLEND_ONE );
-	   break;
-      case d_one_minus_src_alpha:
-        DSTBLEND_MAP( GL_ONE_MINUS_SRC_ALPHA, D3DBLEND_INVSRCALPHA, D3DBLEND_ONE );
-	   break;
-      case d_dst_alpha:
-        DSTBLEND_MAP( GL_DST_ALPHA, D3DBLEND_DESTALPHA, D3DBLEND_ONE );
-	   break;
-      case d_one_minus_dst_alpha:
-        DSTBLEND_MAP( GL_ONE_MINUS_DST_ALPHA, D3DBLEND_INVDESTALPHA, D3DBLEND_ONE );
-	   break;
-      case d_constant_color:
-        DSTBLEND_MAP( GL_CONSTANT_COLOR, D3DBLEND_DESTCOLOR, D3DBLEND_ONE );
-	   break;
-      case d_one_minus_constant_color:
-        DSTBLEND_MAP( GL_ONE_MINUS_CONSTANT_COLOR, D3DBLEND_INVDESTCOLOR, D3DBLEND_ONE );
-	   break;
-      case d_constant_alpha:
-        DSTBLEND_MAP( GL_CONSTANT_ALPHAR, D3DBLEND_BOTHSRCALPHA, D3DBLEND_ONE );
-	   break;
-      case d_one_minus_constant_alpha:
-        DSTBLEND_MAP( GL_ONE_MINUS_CONSTANT_ALPHA, D3DBLEND_BOTHINVSRCALPHA, D3DBLEND_ONE );
-	   break;
-    }
-  }
-
-  /* Make the fallbacks for the texture functions. */
-  for( index = 0; index < 4; index++ )
-  {
-    switch( index )
-    {
-      case d3dtblend_decal:
-	   if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwTextureBlendCaps & D3DTBLEND_DECAL )
-	   {
-		DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_DECAL -> D3DTBLEND_DECAL" )); 
-		pShared->dwTexFunc[index] = D3DTBLEND_DECAL; 
-	   }
-        else
-	   {
-		if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwTextureBlendCaps & D3DTBLEND_MODULATE )
-		{
-		  DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_DECAL -> D3DTBLEND_MODULATE" )); 
-		  pShared->dwTexFunc[index] = D3DTBLEND_MODULATE; 
-		}
-		else
-		{
-		  DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_DECAL -> D3DTBLEND_ADD" )); 
-		  pShared->dwTexFunc[index] = D3DTBLEND_ADD; 
-		}
-	   }
-	   break;
-      case d3dtblend_decalalpha:
-	   if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwTextureBlendCaps & D3DTBLEND_DECALALPHA )
-	   {
-		DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_DECALALPHA -> D3DTBLEND_DECALALPHA" )); 
-		pShared->dwTexFunc[index] = D3DTBLEND_DECALALPHA; 
-	   }
-        else
-	   {
-		if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwTextureBlendCaps & D3DTBLEND_DECAL )
-		{
-		  DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_DECALALPA -> D3DTBLEND_DECAL" )); 
-		  pShared->dwTexFunc[index] = D3DTBLEND_DECAL; 
-		}
-		else
-		{
-		  DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_DECALALPHA -> D3DTBLEND_ADD" )); 
-		  pShared->dwTexFunc[index] = D3DTBLEND_ADD; 
-		}
-	   }
-	   break;
-    case d3dtblend_modulate:
-	   if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwTextureBlendCaps & D3DTBLEND_MODULATE )
-	   {
-		DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_MODULATE -> D3DTBLEND_MODULATE" )); 
-		pShared->dwTexFunc[index] = D3DTBLEND_MODULATE; 
-	   }
-        else
-	   {
-		if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwTextureBlendCaps & D3DTBLEND_MODULATEALPHA )
-		{
-		  DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_MODULATE -> D3DTBLEND_MODULATEALPHA" )); 
-		  pShared->dwTexFunc[index] = D3DTBLEND_MODULATEALPHA; 
-		}
-		else	if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwTextureBlendCaps & D3DTBLEND_DECAL )
-		{
-		  DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_MODULATE -> D3DTBLEND_DECAL" )); 
-		  pShared->dwTexFunc[index] = D3DTBLEND_DECAL; 
-		}
-		else
-		{
-		  DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_MODULATE -> D3DTBLEND_ADD" )); 
-		  pShared->dwTexFunc[index] = D3DTBLEND_ADD; 
-		}
-	   }
-	   break;
-    case d3dtblend_modulatealpha:
-	   if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwTextureBlendCaps & D3DTBLEND_MODULATEALPHA )
-	   {
-		DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_MODULATEALPHA -> D3DTBLEND_MODULATEALPHA" )); 
-		pShared->dwTexFunc[index] = D3DTBLEND_MODULATEALPHA; 
-	   }
-        else
-	   {
-		if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwTextureBlendCaps & D3DTBLEND_MODULATE )
-		{
-		  DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_MODULATEALPHA -> D3DTBLEND_MODULATE" )); 
-		  pShared->dwTexFunc[index] = D3DTBLEND_MODULATE;
-		}
-		else	if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwTextureBlendCaps & D3DTBLEND_DECAL )
-		{
-		  DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_MODULATEALPHA -> D3DTBLEND_DECALE" )); 
-		  pShared->dwTexFunc[index] = D3DTBLEND_DECAL; 
-		}
-		else
-		{
-		  DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_MODULATEALPHA -> D3DTBLEND_ADD" )); 
-		  pShared->dwTexFunc[index] = D3DTBLEND_ADD; 
-		}
-	   }
-	   break;
-    }
-  }
-}
-
diff --git a/src/mesa/drivers/d3d/D3DHAL.H b/src/mesa/drivers/d3d/D3DHAL.H
deleted file mode 100644
index 2496d164e5..0000000000
--- a/src/mesa/drivers/d3d/D3DHAL.H
+++ /dev/null
@@ -1,68 +0,0 @@
-/*===========================================================================*/
-/*                                                                           */
-/* Mesa-3.0 DirectX 6 Driver                                                 */
-/*                                                                           */
-/* By Leigh McRae                                                            */
-/*                                                                           */
-/* http://www.altsoftware.com/                                               */
-/*                                                                           */
-/* Copyright (c) 1999-1998  alt.software inc.  All Rights Reserved           */
-/*===========================================================================*/
-#ifndef _D3D_HAL_INC
-#define _D3D_HAL_INC
-   
-/*===========================================================================*/
-/* Includes.                                                                 */
-/*===========================================================================*/
-#include <windows.h>
-#include <ddraw.h>
-#include <d3d.h>
-#include <stdlib.h>
-#include <time.h>
-#include "D3DShared.h"
-#include "D3DTextureMgr.h"
-#include "Debug.h"
-/*===========================================================================*/
-/* Defines.                                                                  */
-/*===========================================================================*/
-#define	DX_RESTORE(ps)			if ( (ps) && (ps)->IsLost() ) (ps)->Restore();
-/*===========================================================================*/
-/* Type defines.                                                             */
-/*===========================================================================*/
-typedef struct _d3d_hal_struct
-{
-  MESAD3DSHARED		shared;
-
-  GUID				guid;
-  LPDIRECTDRAW  		lpDD;
-  LPDIRECTDRAW4        	lpDD4;
-  LPDIRECT3D3          	lpD3D3;
-  LPDIRECT3DDEVICE3    	lpD3DDevice;
-  D3DDEVICEDESC 	 	D3DHWDevDesc;
-  LPDIRECTDRAWSURFACE4 	lpDDSPrimary,
-                         lpDDSRender,
-                         lpDDSZbuffer;
-  LPDIRECT3DVIEWPORT3  	lpViewport;
-  LPDIRECTDRAWCLIPPER	lpClipper;
-  DDPIXELFORMAT        	ddpf,
-                         ddpfZBuffer;
-  PTM_OBJECT           	pTMList;
-
-} MESAD3DHAL, *PMESAD3DHAL;
-/*===========================================================================*/
-/* External function prototypes.                                             */
-/*===========================================================================*/
-extern BOOL InitTMgrHAL( PMESAD3DHAL pHAL );
-extern void TermTMgrHAL( PMESAD3DHAL pHAL );
-extern void AlphaBlendTableHAL( PMESAD3DHAL pHAL );
-
-extern void Solve8BitChannelPixelFormat( DDPIXELFORMAT *pddpf, PPIXELINFO pPixel );
-extern char *ErrorStringD3D( HRESULT hr );
-extern void  FatalShutDown( PMESAD3DHAL pHAL );
-/*===========================================================================*/
-/* Global variables.                                                         */
-/*===========================================================================*/
-extern char	*errorMsg;
-
-#endif
-
diff --git a/src/mesa/drivers/d3d/D3DInit.cpp b/src/mesa/drivers/d3d/D3DInit.cpp
deleted file mode 100644
index e21cd21e25..0000000000
--- a/src/mesa/drivers/d3d/D3DInit.cpp
+++ /dev/null
@@ -1,891 +0,0 @@
-/*===========================================================================*/
-/*                                                                           */
-/* Mesa-3.0 DirectX 6 Driver                                       Build 5   */
-/*                                                                           */
-/* By Leigh McRae                                                            */
-/*                                                                           */
-/* http://www.altsoftware.com/                                               */
-/*                                                                           */
-/* Copyright (c) 1999-1998  alt.software inc.  All Rights Reserved           */
-/*===========================================================================*/
-#include "D3DHAL.h"
-/*===========================================================================*/
-/* Local function prototypes.                                                */
-/*===========================================================================*/
-static void	DestroyAllSurfaces( PMESAD3DHAL pHAL );
-static void	DestroyDevice( PMESAD3DHAL pHAL );
-static void	DestroyInterfaces( PMESAD3DHAL pHAL );
-
-HRESULT WINAPI   EnumSurfacesHook( LPDIRECTDRAWSURFACE4 lpDDS, LPDDSURFACEDESC2 lpDDSDesc, LPVOID pVoid );
-HRESULT CALLBACK EnumZBufferHook( DDPIXELFORMAT* pddpf, VOID *pVoid );
-HRESULT CALLBACK EnumDeviceHook( GUID FAR* lpGuid, LPSTR lpDesc, LPSTR lpName, LPD3DDEVICEDESC lpD3DHWDesc, LPD3DDEVICEDESC lpD3DHELDesc,  void *pVoid );
-/*===========================================================================*/
-/* Globals.                                                                  */
-/*===========================================================================*/
-//char		*errorMsg;
-/*===========================================================================*/
-/*  This function is responable for allocating the actual MESAD3DHAL struct. */
-/* Each Mesa context will have its own MESAD3DHAL struct so its like a mini  */
-/* context to some extent. All one time allocations/operations get done here.*/
-/*===========================================================================*/
-/* RETURN: TRUE, FALSE.                                                      */
-/*===========================================================================*/
-extern "C" PMESAD3DSHARED InitHAL( HWND hwnd )
-{
-  PMESAD3DHAL	pHAL;
-  ULONG     	rc;
-
-  DPF(( DBG_FUNC, "InitHAL();" ));
-  DPF(( DBG_CNTX_INFO, "hwnd: %d", hwnd ));
-
-  /* Allocate the structure and zero it out. */   
-  pHAL = (PMESAD3DHAL)ALLOC( sizeof(MESAD3DHAL) );
-  if ( pHAL == NULL )
-  {   
-    RIP( pHAL, "InitHAL->", "Memory Allocation" );
-    return (PMESAD3DSHARED)NULL;
-  }
-  memset( pHAL, 0, sizeof(MESAD3DHAL) );
-
-  /* Get the texture manager going. */
-  rc = InitTMgrHAL( pHAL );
-  if ( rc == FALSE )
-  {   
-    RIP( pHAL, "InitTMgrHAL->", "Failed" );
-    return (PMESAD3DSHARED)NULL;
-  }
-
-  /* Fill in the window parameters if we can. */
-  pHAL->shared.hwnd = hwnd;
-
-  /* Parse the user's enviroment variables to generate a debug mask. */
-  ReadDBGEnv();
-  
-  return (PMESAD3DSHARED)pHAL;
-}
-/*===========================================================================*/
-/*  This function will unload all the resources that the MESAD3DHAL struct   */
-/* has bound to it.  The actual structure itself will be freed.              */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-extern "C" void TermHAL( PMESAD3DSHARED pShared )
-{
-  PMESAD3DHAL	pHAL = (PMESAD3DHAL)pShared;
-
-  DPF(( DBG_FUNC, "TermHAL();" ));
-
-  /* Check for an empty wrapper structure. */
-  if ( pHAL == NULL )
-    return;
-
-  /* Kill this texture manager. */
-  TermTMgrHAL( pHAL );
-
-  /* Kill any DDraw stuff if exists. */
-  DestroyDevice( pHAL );
-  DestroyAllSurfaces( pHAL );
-  DestroyInterfaces( pHAL );
-
-  FREE( pHAL );
-}
-/*===========================================================================*/
-/*  This function is used to init and resize the rendering surface as the two*/
-/* are almost the same.  First the device and all the surfaces are destoryed */
-/* if they already exist.  Next we create a OffScreen rendering surface and  */
-/* save some pixelformat info to do color convertions. Next we start to take */
-/* care of getting the most out of the hardware. I use bHardware to determine*/
-/* the state of the device we found in the device enumeration.  The enum proc*/
-/* will try for hardware first.  I next use a bForceSW to make the enum proc */
-/* choose a software device.  So I will try some combinations with HW first  */
-/* until I feel I have to set the bForceSW and call this function again.  If */
-/* this function is called with no width or height then use the internals.   */
-/*   NOTE:  The worst case is that all will be in SW (RGBDevice) and really  */
-/*         I should forget the whole thing and fall back to a DDraw span type*/
-/*         rendering but what is the point.  This way I always know I have a */
-/*         D3DDevice and that makes things easier.  I do impliment the span  */
-/*         rendering function for stuff that I haven't done support for such */
-/*         as points and lines.                                              */
-/*===========================================================================*/
-/* RETURN: TRUE, FALSE                                                       */
-/*===========================================================================*/
-extern "C" BOOL	CreateHAL( PMESAD3DSHARED pShared )
-{
-  PMESAD3DHAL 		pHAL = (PMESAD3DHAL)pShared;
-  DDSURFACEDESC2	ddsd2;
-  D3DDEVICEDESC  	D3DSWDevDesc;
-  DDSCAPS2 	  	ddscaps;
-  DWORD          	dwCoopFlags,
-                    dwWidth,
-                    dwHeight;
-  ULONG          	rc;
-
-  DPF(( DBG_FUNC, "CreateHAL();" ));
-
-#define InitDDSD2(f)      memset( &ddsd2, 0, sizeof(DDSURFACEDESC2) ); \
-                          ddsd2.dwSize  = sizeof( DDSURFACEDESC2 ); \
-                          ddsd2.dwFlags = f;
-
-  if ( pHAL == NULL )
-    return FALSE;
-
-  /* Use the internal rectangle struct. */
-  dwWidth  = pShared->rectW.right - pShared->rectW.left;
-  dwHeight = pShared->rectW.bottom - pShared->rectW.top;
-
-  DPF(( DBG_CNTX_INFO, "Width: %d Height: %d", dwWidth, dwHeight ));
-
-  /* The dimensions might still be the same so just leave. */
-  if ( (dwWidth == pShared->dwWidth) && (dwHeight == pShared->dwHeight) )
-  {
-    DPF(( DBG_CNTX_WARN, "Context size hasn't changed" ));
-    return TRUE;
-  }
-
-  /* If one of the dimensions are zero then leave. WM_SIZE should get us back here. */
-  if ( (dwWidth == 0) || (dwHeight == 0) )
-    return TRUE;
-
-  /* Save the renders dimensions. */
-  pShared->dwWidth  = dwWidth;
-  pShared->dwHeight = dwHeight;
-
-  DPF(( DBG_CNTX_INFO, "Creating Context:\n cx:%d cy:%d", pShared->dwWidth, pShared->dwHeight ));
-
-  /*=================================*/
-  /* Create all required interfaces. */
-  /*=================================*/
-
-  /* Kill any DDraw stuff if exists. */
-  DestroyDevice( pHAL );
-  DestroyAllSurfaces( pHAL );
-  DestroyInterfaces( pHAL );
-
-  /* Create a instance of DDraw using the Primary display driver. */
-  rc = DirectDrawCreate( NULL, &pHAL->lpDD, NULL );
-  if( FAILED(rc) )
-  {
-    RIP( pHAL, "DirectDrawCreate->", ErrorStringD3D(rc) );
-    return FALSE;
-  }
-
-  /* Get the DDraw4 interface. */
-  rc = pHAL->lpDD->QueryInterface( IID_IDirectDraw4, (void **)&pHAL->lpDD4 );
-  if( FAILED(rc) )
-  {
-    RIP( pHAL, "QueryInterface (IID_IDirectDraw4) ->", ErrorStringD3D(rc) );
-    return FALSE;
-  }
-
-  /* Get the Direct3D3 interface. */
-  rc = pHAL->lpDD4->QueryInterface( IID_IDirect3D3, (void **)&pHAL->lpD3D3 );
-  if( FAILED(rc) )
-  {
-    RIP( pHAL, "QueryInterface (IID_IDirect3D3) ->", ErrorStringD3D(rc) );
-    return FALSE;
-  }
-
-  /* Set the Cooperative level. NOTE: we need to know if we are FS at this point.*/
-  dwCoopFlags = (pShared->bWindow == TRUE) ? DDSCL_NORMAL : (DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
-  rc = pHAL->lpDD4->SetCooperativeLevel( pShared->hwnd, dwCoopFlags );
-  if ( FAILED(rc) )
-  {
-    RIP( pHAL, "SetCooperativeLevel->", ErrorStringD3D(rc) );
-    return FALSE;
-  }
-
-  /*==================================================================*/
-  /* Get the best device we can and note whether its hardware or not. */
-  /*==================================================================*/
-  pShared->bForceSW = FALSE;
-  pHAL->lpD3D3->EnumDevices( EnumDeviceHook, (void *)pHAL );
-  pShared->bHardware = IsEqualIID( pHAL->guid, IID_IDirect3DHALDevice );
-  DPF(( DBG_CNTX_INFO, "bHardware: %s", (pShared->bHardware) ? "TRUE" : "FALSE" ));
-  DPF(( DBG_CNTX_INFO, "bWindowed: %s", (pShared->bWindow) ? "TRUE" : "FALSE" ));
-
-  /*========================================================================*/
-  /* HARDWARE was found.                                                    */
-  /*========================================================================*/
-  if ( pShared->bHardware == TRUE )
-  {
-    /*===================================*/
-    /* HARDWARE -> Z-BUFFER.             */
-    /*===================================*/
-
-    /* Get a Z-Buffer pixelformat. */
-    memset( &ddsd2, 0, sizeof(DDSURFACEDESC2) );
-    ddsd2.dwSize = sizeof( DDSURFACEDESC2 );
-    rc = pHAL->lpD3D3->EnumZBufferFormats( pHAL->guid, EnumZBufferHook, (VOID*)&ddsd2.ddpfPixelFormat );
-    if ( FAILED(rc) )
-    {
-	 RIP( pHAL, "EnumZBufferFormatsl->", ErrorStringD3D(rc) );
-	 return FALSE;
-    }
-        
-    /* Setup our request structure for the Z-buffer surface. */
-    ddsd2.dwFlags        = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT;
-    ddsd2.ddsCaps.dwCaps = DDSCAPS_ZBUFFER | DDSCAPS_VIDEOMEMORY;
-    ddsd2.dwWidth        = dwWidth;
-    ddsd2.dwHeight       = dwHeight;
-    rc = pHAL->lpDD4->CreateSurface( &ddsd2, &pHAL->lpDDSZbuffer, NULL );
-    if ( !FAILED(rc) )
-    {
-	 DPF(( DBG_CNTX_INFO, "HW ZBuffer" ));
-
-	 /*===================================*/
-	 /* HARDWARE -> Z-BUFFER -> FLIPABLE  */
-	 /*===================================*/
-	 if ( pShared->bWindow == FALSE )
-	 {
-	   InitDDSD2( DDSD_CAPS | DDSD_BACKBUFFERCOUNT );
-	   ddsd2.dwBackBufferCount = 1;
-	   ddsd2.ddsCaps.dwCaps    = DDSCAPS_PRIMARYSURFACE | DDSCAPS_3DDEVICE | DDSCAPS_FLIP | DDSCAPS_COMPLEX;
-	   rc = pHAL->lpDD4->CreateSurface( &ddsd2, &pHAL->lpDDSPrimary, NULL );
-	   if ( FAILED(rc) )
-	   {	
-		/* Make sure we try the next fall back. */
-		DPF(( DBG_CNTX_WARN, "HW Flip/Complex not available" ));
-		pHAL->lpDDSPrimary = NULL;
-	   }
-	   else
-	   {
-		/* Get the back buffer that was created. */
-		ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
-		rc = pHAL->lpDDSPrimary->GetAttachedSurface( &ddscaps, &pHAL->lpDDSRender );
-		if ( FAILED(rc) )
-		{	
-		  DPF(( DBG_CNTX_WARN, "GetAttachedSurface failed -> HW Flip/Complex" ));
-		  
-		  /* Make sure we try the next fall back. */
- 		  pHAL->lpDDSPrimary->Release();
-		  pHAL->lpDDSPrimary = NULL;
-		}	
-		else
-		{
-		  /*  I have had problems when a complex surface comes back  */
-		  /* with the back buffer being created in SW.  Not sure why */
-		  /* or how this is possable but I'm checking for it here.   */
-		  memset( &ddsd2, 0, sizeof(DDSURFACEDESC2) ); 
-		  ddsd2.dwSize = sizeof( DDSURFACEDESC2 );
-		  DX_RESTORE( pHAL->lpDDSRender );
-		  rc = pHAL->lpDDSRender->GetSurfaceDesc( &ddsd2 );
-		  if ( FAILED(rc) )
-		  {
-		    RIP( pHAL, "GetSurfaceDesc (RENDER) ->", ErrorStringD3D(rc) );
-		    return FALSE;
-		  }
-
-		  /* If the surface is in VID then we are happy with are Flipable. */
-		  if ( ddsd2.ddsCaps.dwCaps & DDSCAPS_LOCALVIDMEM )
-		  {
-		    pShared->bFlipable = TRUE;
-		    DPF(( DBG_CNTX_INFO, "HW Flip/Complex!" ));
-		  }
-		  else
-		  {
-		    /* Kill this setup. */
-		    pHAL->lpDDSPrimary->Release();
-		    pHAL->lpDDSPrimary = NULL;
-		  }
-		}
-	   }
-	 }
-
-	 /*===================================*/
-	 /* HARDWARE -> Z-BUFFER -> BLT       */
-	 /*===================================*/
-	 if ( pHAL->lpDDSPrimary == NULL )
-	 {
-	   pShared->bFlipable = FALSE;
-
-	   /* Create the Primary (front buffer). */
-	   InitDDSD2( DDSD_CAPS );
-	   ddsd2.ddsCaps.dwCaps  = DDSCAPS_PRIMARYSURFACE;
-	   rc = pHAL->lpDD4->CreateSurface( &ddsd2, &pHAL->lpDDSPrimary, NULL );
-	   if ( FAILED(rc) )
-	   {
-		/* This is an error as we should be able to do this at minimum. */
-		RIP( pHAL, "CreateSurface (PRIMARY) ->", ErrorStringD3D(rc) );
-		return FALSE;
-	   }
-
-	   /* Create the Render (back buffer). */
-	   InitDDSD2( DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT );
-	   ddsd2.dwWidth	    = dwWidth;
-	   ddsd2.dwHeight	    = dwHeight;
-	   ddsd2.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE;
-	   rc = pHAL->lpDD4->CreateSurface( &ddsd2, &pHAL->lpDDSRender, NULL );
-	   if ( FAILED(rc) )
-	   {
-		DPF(( DBG_CNTX_WARN, "Failed HW Offscreen surface" ));
-
-		/* Make sure we try the next fall back. */
-		pHAL->lpDDSPrimary->Release();
-		pHAL->lpDDSPrimary = NULL;
-	   }
-	   else
-	   {
-		/*  Might as well check here too see if this surface is in */
-		/* hardware.  If nothing else just to be consistant.       */
-		memset( &ddsd2, 0, sizeof(DDSURFACEDESC2) ); 
-		ddsd2.dwSize = sizeof( DDSURFACEDESC2 );
-		DX_RESTORE( pHAL->lpDDSRender );
-		rc = pHAL->lpDDSRender->GetSurfaceDesc( &ddsd2 );
-		if ( FAILED(rc) )
-		{
-		  RIP( pHAL, "GetSurfaceDesc (RENDER) ->", ErrorStringD3D(rc) );
-		  return FALSE;
-		}
-
-		/* If the surface is in VID then we are happy. */
-		if ( ddsd2.ddsCaps.dwCaps & DDSCAPS_LOCALVIDMEM )
-		{
-		  /*  Create a clipper object so that DDraw will be able to blt windows that */
-		  /* have been clipped by the screen or other windows.                       */
-		  pHAL->lpDD4->CreateClipper( 0, &pHAL->lpClipper, NULL );
-		  pHAL->lpClipper->SetHWnd( 0, pShared->hwnd );
-		  pHAL->lpDDSPrimary->SetClipper( pHAL->lpClipper );
-		  pHAL->lpClipper->Release();
-		  DPF(( DBG_CNTX_INFO, "HW RENDER surface" ));
-		}
-		else
-		{
-		  /* Kill this setup. */
-		  pHAL->lpDDSRender->Release();
-		  pHAL->lpDDSRender = NULL;
-		  pHAL->lpDDSPrimary->Release();
-		  pHAL->lpDDSPrimary = NULL;
-		}
-	   }
-	 }	
-
-	 /*===================================*/
-	 /* Create D3DDEVICE -> HARDWARE.     */
-	 /*===================================*/
-	 if ( pHAL->lpDDSZbuffer && pHAL->lpDDSPrimary && pHAL->lpDDSRender )
-	 {
-	   DX_RESTORE( pHAL->lpDDSRender );
-	   DX_RESTORE( pHAL->lpDDSZbuffer );
-
-	   rc = pHAL->lpDDSRender->AddAttachedSurface( pHAL->lpDDSZbuffer );
-	   if ( FAILED(rc) )
-	   {
-		RIP( pHAL, "AddAttachedSurface (ZBUFFER) ->", ErrorStringD3D(rc) );
-		return FALSE;
-	   }
-
-	   rc = pHAL->lpD3D3->CreateDevice( IID_IDirect3DHALDevice, pHAL->lpDDSRender, &pHAL->lpD3DDevice, NULL );
-	   if ( rc != D3D_OK )
-	   {
-		DPF(( DBG_CNTX_WARN, "Failed HW Device" ));
-		pHAL->lpD3DDevice = NULL;
-	   }
-	   else
-	   {
-		DPF(( DBG_CNTX_INFO, "HW Device" ));
-	   }
-	 }
-    }	
-  }
-      
-  /*========================================================================*/
-  /* SOFTWARE fallback.                                                     */
-  /*========================================================================*/
-  if ( pHAL->lpD3DDevice == NULL )
-  {
-    DPF(( DBG_CNTX_INFO, "SW fallback :(" ));
-
-    /* Make sure we have no surfaces allocated.  Just incase. */
-    DestroyAllSurfaces( pHAL );
-
-    /* Get a software device. */
-    pShared->bFlipable = FALSE;
-    pShared->bForceSW = TRUE;
-    pHAL->lpD3D3->EnumDevices( EnumDeviceHook, (void *)pHAL );
-    pShared->bHardware = IsEqualIID( pHAL->guid, IID_IDirect3DHALDevice );
-
-     /*===================================*/
-    /* SOFTWARE -> Z-BUFFER.             */
-    /*===================================*/
-
-    /*===================================*/
-    /* SOFTWARE -> Z-BUFFER -> FLIPABLE  */
-    /*===================================*/
-    if ( pShared->bWindow == FALSE )
-    {
-	 InitDDSD2( DDSD_CAPS | DDSD_BACKBUFFERCOUNT );
-	 ddsd2.dwBackBufferCount = 1;
-	 ddsd2.ddsCaps.dwCaps    = DDSCAPS_PRIMARYSURFACE | DDSCAPS_3DDEVICE | DDSCAPS_FLIP | DDSCAPS_COMPLEX;
-	 ddsd2.ddpfPixelFormat.dwSize  = sizeof( DDPIXELFORMAT );
-	 ddsd2.ddpfPixelFormat.dwFlags = (DDPF_RGB | DDPF_ALPHAPIXELS);
-	 rc = pHAL->lpDD4->CreateSurface( &ddsd2, &pHAL->lpDDSPrimary, NULL );
-	 if ( FAILED(rc) )
-	 {	
-	   DPF(( DBG_CNTX_WARN, "Failed SW Flip/Complex" ));
-
-	   /* Make sure we try the next fall back. */
-	   pHAL->lpDDSPrimary = NULL;
-	 }
-	 else
-	 {
-	   ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
-	   rc = pHAL->lpDDSPrimary->GetAttachedSurface( &ddscaps, &pHAL->lpDDSRender );
-	   if ( FAILED(rc) )
-	   {	
-		/* Make sure we try the next fall back. */
-		DPF(( DBG_CNTX_WARN, "GetAttachedSurface failed -> SW Flip/Complex" ));
-		pHAL->lpDDSPrimary->Release();
-		pHAL->lpDDSPrimary = NULL;
-	   }	
-	   else
-	   {
-		DPF(( DBG_CNTX_INFO, "SW Flip/Complex" ));
-		pShared->bFlipable = TRUE;
-	   }
-	 }
-    }		
-
-    /*===================================*/
-    /* SOFTWARE -> Z-BUFFER -> BLT       */
-    /*===================================*/
-    if ( pHAL->lpDDSPrimary == NULL )
-    {
-	 /* Create the Primary (front buffer). */
-	 InitDDSD2( DDSD_CAPS );
-	 ddsd2.ddsCaps.dwCaps  = DDSCAPS_PRIMARYSURFACE;
-	 rc = pHAL->lpDD4->CreateSurface( &ddsd2, &pHAL->lpDDSPrimary, NULL );
-	 if ( FAILED(rc) )
-	 {
-	   /* This is an error as we should be able to do this at minimum. */
-	   RIP( pHAL, "CreateSurface (PRIMARY) ->", ErrorStringD3D(rc) );
-	   return FALSE;
-	 }
-
-	 /* Create the Render (back buffer). */
-	 InitDDSD2( DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT );
-	 ddsd2.dwWidth					= dwWidth;
-	 ddsd2.dwHeight				= dwHeight;
-	 ddsd2.ddsCaps.dwCaps 			= DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE;
-	 ddsd2.ddpfPixelFormat.dwSize 	= sizeof( DDPIXELFORMAT );
-	 ddsd2.ddpfPixelFormat.dwFlags	= (DDPF_RGB | DDPF_ALPHAPIXELS);
-	 rc = pHAL->lpDD4->CreateSurface( &ddsd2, &pHAL->lpDDSRender, NULL );
-	 if ( FAILED(rc) )
-	 {
-	   /* That was our last hope. */
-	   RIP( pHAL, "CreateSurface (RENDER) ->", ErrorStringD3D(rc) );
-	   return FALSE;
-	 }
-	 else
-	 {
-	   DPF(( DBG_CNTX_INFO, "SW RENDER surface" ));
-
-	   /*  Create a clipper object so that DDraw will be able to blt windows that */
-	   /* have been clipped by the screen or other windows.                       */
-	   pHAL->lpDD4->CreateClipper( 0, &pHAL->lpClipper, NULL );
-	   pHAL->lpClipper->SetHWnd( 0, pShared->hwnd );
-	   pHAL->lpDDSPrimary->SetClipper( pHAL->lpClipper );
-	   pHAL->lpClipper->Release();
-	 }
-    }		
-	
-    /*===================================*/
-    /* Create D3DDEVICE -> SOFTWARE.     */
-    /*===================================*/
-    if ( pHAL->lpDDSPrimary && pHAL->lpDDSRender )
-    {
-	 DX_RESTORE( pHAL->lpDDSRender );
-	 rc = pHAL->lpD3D3->CreateDevice( IID_IDirect3DRGBDevice, pHAL->lpDDSRender, &pHAL->lpD3DDevice, NULL );
-	 if ( rc != D3D_OK )
-	 {
-	   /* That was our last hope. */
-	   RIP( pHAL, "CreateDevice (IID_IDirect3DRGBDevice) ->", ErrorStringD3D(rc) );
-	   return FALSE;
-	 }
-	 
-	 DPF(( DBG_CNTX_INFO, "SW Device" ));
-    }	
-  }
-
-  /*==============================================================================*/
-  /* Get a copy of the render pixelformat so that wgl.c can call GetPixelInfoD3D. */
-  /*==============================================================================*/
-  memset( &pHAL->ddpf, 0, sizeof(DDPIXELFORMAT) );
-  pHAL->ddpf.dwSize = sizeof( DDPIXELFORMAT );
-  rc = pHAL->lpDDSRender->GetPixelFormat( &pHAL->ddpf );
-  if ( FAILED(rc) )
-  {
-    RIP( pHAL, "GetPixelFormat ->", ErrorStringD3D(rc) );
-    return FALSE;
-  }
-  DebugPixelFormat( "Using OFFSCREEN", &pHAL->ddpf );
-  DebugPixelFormat( "Using ZBUFFER", &ddsd2.ddpfPixelFormat );
-
-  /* Get a copy of what the D3DDevice supports for later use. */
-  memset( &D3DSWDevDesc, 0, sizeof(D3DDEVICEDESC) );
-  memset( &pHAL->D3DHWDevDesc, 0, sizeof(D3DDEVICEDESC) );
-  D3DSWDevDesc.dwSize       = sizeof( D3DDEVICEDESC );
-  pHAL->D3DHWDevDesc.dwSize = sizeof( D3DDEVICEDESC );
-  rc = pHAL->lpD3DDevice->GetCaps( &pHAL->D3DHWDevDesc, &D3DSWDevDesc );
-  if ( FAILED(rc) )
-  {
-    RIP( pHAL, "GetCaps ->", ErrorStringD3D(rc) );
-    return FALSE;
-  }
-
-  /* Get a copy of the pixel convertion stuff for direct buffer access. */
-  Solve8BitChannelPixelFormat( &pHAL->ddpf, &pShared->pixel );
-  AlphaBlendTableHAL( pHAL );
-
-  /* We must prime the Begin/End scene for SwapBuffers to work. */
-  rc = pHAL->lpD3DDevice->BeginScene();   
-  if ( FAILED(rc) )
-  {
-    RIP( pHAL, "BeginScene ->", ErrorStringD3D(rc) );
-    return FALSE;
-  }
-
-#undef InitDDSD2
-
-  return TRUE;
-}
-/*===========================================================================*/
-/*  This function will make sure a viewport is created and set for the device*/
-/* in the supplied structure.  If a rect is supplied then it will be used for*/
-/* the viewport otherwise the current setting in the strucute will be used.  */
-/* Note that the rect is relative to the window.  So left/top must be 0,0 to */
-/* use the whole window else there is scissoring going down.                 */
-/*===========================================================================*/
-/* RETURN: TRUE, FALSE.                                                      */
-/*===========================================================================*/
-extern "C" BOOL SetViewportHAL( PMESAD3DSHARED pShared, RECT *pRect, float minZ, float maxZ  )
-{
-  PMESAD3DHAL	pHAL = (PMESAD3DHAL)pShared;
-  D3DVIEWPORT2 vdData;
-  ULONG		rc;
-  POINT		pt;
-
-  DPF(( DBG_FUNC, "SetViewportHAL();" ));
-
-  /* Make sure we have enough info. */
-  if ( !pHAL || !pHAL->lpDDSPrimary || !pHAL->lpD3DDevice )
-  {
-    DPF(( DBG_CNTX_WARN, "SetViewport() -> NULL Pointer" ));
-    return FALSE;
-  }
-
-  /* TODO: this is just a temp fix to stop redundant changes. */
-  if ( pRect &&
-	  (pShared->rectV.left   == pRect->left)    &&
-	  (pShared->rectV.right  == pRect->right)   &&
-	  (pShared->rectV.top    == pRect->top)     &&
-	  (pShared->rectV.bottom == pRect->bottom) )
-  {
-    DPF(( DBG_CNTX_WARN, "Redundant viewport" ));
-    return TRUE;
-  }
-
-  DPF(( DBG_CNTX_INFO, "Current Viewport:" ));
-  DPF(( DBG_CNTX_INFO, "x: %d y: %d", pShared->rectV.left, pShared->rectV.top ));
-  DPF(( DBG_CNTX_INFO, "cx: %d cy: %d", (pShared->rectV.right-pShared->rectV.left), (pShared->rectV.bottom-pShared->rectV.top) ));
-  DPF(( DBG_CNTX_INFO, "New Viewport:" ));
-  DPF(( DBG_CNTX_INFO, "x: %d y: %d", pRect->left, pRect->top ));
-  DPF(( DBG_CNTX_INFO, "cx: %d cy: %d", (pRect->right-pRect->left), (pRect->bottom-pRect->top) ));
-
-  /* Update the current viewport rect if one is supplied. */
-  if ( pRect )      
-    memcpy( &pShared->rectV, pRect, sizeof(RECT) );
-	 
-  /* Build the request structure. */
-  memset( &vdData, 0, sizeof(D3DVIEWPORT2) );
-  vdData.dwSize   = sizeof(D3DVIEWPORT2);  
-  vdData.dwX      = pShared->rectV.left;
-  vdData.dwY      = pShared->rectV.top;
-  vdData.dwWidth  = (pShared->rectV.right - pShared->rectV.left);
-  vdData.dwHeight = (pShared->rectV.bottom - pShared->rectV.top);
-
-  if ( !vdData.dwWidth || !vdData.dwHeight )
-  {
-    GetClientRect( pShared->hwnd, &pShared->rectW );
-    pt.x = pt.y = 0;
-    ClientToScreen( pShared->hwnd, &pt );
-    OffsetRect( &pShared->rectW, pt.x, pt.y);
-    vdData.dwX      = pShared->rectW.left;
-    vdData.dwY      = pShared->rectW.top;
-    vdData.dwWidth  = (pShared->rectW.right - pShared->rectW.left);
-    vdData.dwHeight = (pShared->rectW.bottom - pShared->rectW.top);
-    memcpy( &pShared->rectV, &pShared->rectW, sizeof(RECT) );
-  }
-
-  // The dvClipX, dvClipY, dvClipWidth, dvClipHeight, dvMinZ, 
-  // and dvMaxZ members define the non-normalized post-perspective 
-  // 3-D view volume which is visible to the viewer. In most cases, 
-  // dvClipX is set to -1.0 and dvClipY is set to the inverse of 
-  // the viewport's aspect ratio on the target surface, which can be 
-  // calculated by dividing the dwHeight member by dwWidth. Similarly, 
-  // the dvClipWidth member is typically 2.0 and dvClipHeight is set 
-  // to twice the aspect ratio set in dwClipY. The dvMinZ and dvMaxZ 
-  // are usually set to 0.0 and 1.0.
-  vdData.dvClipX      = -1.0f;
-  vdData.dvClipWidth  = 2.0f;
-  vdData.dvClipY      = 1.0f;
-  vdData.dvClipHeight = 2.0f;
-  vdData.dvMaxZ       = maxZ;
-  vdData.dvMinZ       = minZ;
-
-  DPF(( DBG_CNTX_INFO, "zMin: %f zMax: %f", minZ, maxZ ));
-
-  /*  I'm going to destroy the viewport everytime as when we size we will */
-  /* have a new D3DDevice.  As this area doesn't need to be fast...       */
-  if ( pHAL->lpViewport )
-  {
-    DPF(( DBG_CNTX_INFO, "DeleteViewport" ));
-
-    pHAL->lpD3DDevice->DeleteViewport( pHAL->lpViewport );
-    rc = pHAL->lpViewport->Release();
-    pHAL->lpViewport = NULL;
-  }
-
-  rc = pHAL->lpD3D3->CreateViewport( &pHAL->lpViewport, NULL );
-  if ( rc != D3D_OK )
-  {
-    DPF(( DBG_CNTX_ERROR, "CreateViewport Failed" ));
-    return FALSE;
-  }
-
-  /* Update the device with the new viewport. */
-  pHAL->lpD3DDevice->AddViewport( pHAL->lpViewport );
-  pHAL->lpViewport->SetViewport2( &vdData );
-  pHAL->lpD3DDevice->SetCurrentViewport( pHAL->lpViewport );
-
-  return TRUE; 
-}
-/*===========================================================================*/
-/*                                                                           */
-/*                                                                           */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-HRESULT WINAPI EnumSurfacesHook( LPDIRECTDRAWSURFACE4 lpDDS, LPDDSURFACEDESC2 lpDDSDesc, LPVOID pVoid )
-{
-  DDSURFACEDESC2 *pddsd2 = (DDSURFACEDESC2 *)pVoid;
-
-  DPF(( DBG_FUNC, "EnumSurfacesHook();" ));
-
-  if ( (lpDDSDesc->ddpfPixelFormat.dwFlags == pddsd2->ddpfPixelFormat.dwFlags) && (lpDDSDesc->ddsCaps.dwCaps == pddsd2->ddsCaps.dwCaps) )
-  {
-    /* Save the pixelformat now so that we know we have one. */
-    memcpy( pddsd2, lpDDSDesc, sizeof(DDSURFACEDESC2) );
-
-    return D3DENUMRET_CANCEL;
-  }
-
-  return D3DENUMRET_OK;
-}
-/*===========================================================================*/
-/*  This is the callback proc to get a Z-Buffer.  Thats it.                  */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-HRESULT CALLBACK  EnumZBufferHook( DDPIXELFORMAT* pddpf, VOID *pVoid )
-{
-  DDPIXELFORMAT  *pddpfChoice = (DDPIXELFORMAT *)pVoid;
-
-  DPF(( DBG_FUNC, "EnumZBufferHook();" ));
-
-  /* If this is ANY type of depth-buffer, stop. */
-  if( pddpf->dwFlags == DDPF_ZBUFFER )
-  {
-    /* Save the pixelformat now so that we know we have one. */
-    memcpy( pddpfChoice, pddpf, sizeof(DDPIXELFORMAT) );
-
-    /* I feel if the hardware supports this low then lets use it.  Could get ugly. */
-    if( pddpf->dwZBufferBitDepth >= 8 )
-    {
-	 return D3DENUMRET_CANCEL;
-    }
-  }
- 
-   return D3DENUMRET_OK;
-}
-/*===========================================================================*/
-/*  This function handles the callback for the D3DDevice enumeration.  Good  */
-/* god who's idea was this?  The D3D wrapper has two variable related to what*/
-/* kind of device we want and have.  First we have a Bool that is set if we  */
-/* have allocated a HW device.  We always look for the HW device first.  The */
-/* other variable is used to force SW.  If we have run into a case that we   */
-/* want to fallback to SW then we set this.  We will fallback if we cannot   */
-/* texture in video memory (among others).                                   */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-HRESULT CALLBACK  EnumDeviceHook( GUID FAR* lpGuid, LPSTR lpDesc, LPSTR lpName, LPD3DDEVICEDESC lpD3DHWDesc, LPD3DDEVICEDESC lpD3DHELDesc,  void *pVoid )
-{
-  PMESAD3DHAL		pHAL = (PMESAD3DHAL)pVoid;
-  LPD3DDEVICEDESC   pChoice = lpD3DHWDesc;
-
-  DPF(( DBG_FUNC, "EnumDeviceHook();" ));
-
-  /* Determine if which device description is valid. */
-  if ( pChoice->dcmColorModel == 0 )
-    pChoice = lpD3DHELDesc;
-
-  /* Make sure we always have a GUID. */
-  memcpy( &pHAL->guid, lpGuid, sizeof(GUID) );
-
-  /* This controls whether we will except HW or not. */
-  if ( pHAL->shared.bForceSW == TRUE )
-  {
-    return (pChoice == lpD3DHELDesc) ? D3DENUMRET_CANCEL : D3DENUMRET_OK;
-  }
-
-  /* Always try for hardware. */
-  if ( pChoice == lpD3DHWDesc )
-  {
-    return D3DENUMRET_CANCEL;
-  }
-
-  return D3DENUMRET_OK;
-}
-/*===========================================================================*/
-/*  This function will destroy any and all surfaces that this context has    */
-/* allocated.  If there is a clipper object then it will also be destoryed as*/
-/* it is part of the Primary Surface.                                        */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-static void DestroyAllSurfaces( PMESAD3DHAL pHAL )
-{
-  LONG	refCount;
-
-  DPF(( DBG_FUNC, "DestroyAllSurfaces();" ));
-
-  DX_RESTORE( pHAL->lpDDSPrimary );
-  DX_RESTORE( pHAL->lpDDSRender );
-  DX_RESTORE( pHAL->lpDDSZbuffer);
-
-  if ( pHAL->lpDDSRender )
-  {
-    pHAL->lpDDSRender->Unlock( NULL );
-
-    /* If this isn't a Flipable surface then we must clean up the render. */
-    if ( pHAL->shared.bFlipable == FALSE)
-    {
-	 if ( pHAL->lpDDSZbuffer )
-	 {
-	   DPF(( DBG_CNTX_INFO, "Remove attached surfaces from RENDER" ));
-	   pHAL->lpDDSRender->DeleteAttachedSurface( 0, NULL );
-	 }
-
-	 DPF(( DBG_CNTX_INFO, "Release RENDER" ));
-	 refCount = pHAL->lpDDSRender->Release();
-	 pHAL->lpDDSRender = NULL;
-    }
-  }
-
-  if ( pHAL->lpDDSZbuffer )
-  {
-    DPF(( DBG_CNTX_INFO, "Release ZBuffer" ));
-    pHAL->lpDDSZbuffer->Unlock( NULL );
-    refCount = pHAL->lpDDSZbuffer->Release();
-    pHAL->lpDDSZbuffer = NULL;
-  }
-
-  if ( pHAL->lpClipper )
-  {
-    DPF(( DBG_CNTX_INFO, "Release Clipper" ));
-    refCount = pHAL->lpClipper->Release();
-    pHAL->lpClipper = NULL;
-  }
-
-  if ( pHAL->lpDDSPrimary )
-  {
-    pHAL->lpDDSPrimary->Unlock( NULL );
-
-    DPF(( DBG_CNTX_INFO, "Release PRIMARY" ));
-    refCount = pHAL->lpDDSPrimary->Release();
-    pHAL->lpDDSPrimary = NULL;
-  }
-}
-/*===========================================================================*/
-/*  This function will destroy the current D3DDevice and any resources that  */
-/* belong to it.                                                             */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-static void DestroyDevice( PMESAD3DHAL pHAL )
-{
-  LONG	refCount;
-
-  DPF(( DBG_FUNC, "DestroyDevice();" ));
-
-  /* Kill the D3D stuff if exists. */
-  if ( pHAL->lpViewport )
-  {
-    DPF(( DBG_CNTX_INFO, "Delete Viewport" ));
-    pHAL->lpD3DDevice->DeleteViewport( pHAL->lpViewport );
-
-    DPF(( DBG_CNTX_INFO, "Release Viewport" ));
-    refCount = pHAL->lpViewport->Release();
-    pHAL->lpViewport = NULL;
-  }
-
-  if ( pHAL->lpD3DDevice != NULL )
-  {
-    DPF(( DBG_CNTX_INFO, "Release D3DDevice" ));
-    refCount = pHAL->lpD3DDevice->EndScene();  
-    refCount = pHAL->lpD3DDevice->Release();
-    pHAL->lpD3DDevice = NULL;
-  }
-}
-/*===========================================================================*/
-/*  This function will destroy the current D3DDevice and any resources that  */
-/* belong to it.                                                             */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-static void DestroyInterfaces( PMESAD3DHAL pHAL )
-{
-  LONG	refCount;
-
-  DPF(( DBG_FUNC, "DestroyInterfaces();" ));
-
-  if ( pHAL->lpD3D3 != NULL )
-  {
-    DPF(( DBG_CNTX_INFO, "Release Direct3D3" ));
-    refCount = pHAL->lpD3D3->Release();
-    pHAL->lpD3D3 = NULL;
-  }
-
-  if ( pHAL->lpDD4 != NULL )
-  {
-    DPF(( DBG_CNTX_INFO, "Release DDraw4" ));
-    refCount = pHAL->lpDD4->Release();
-    pHAL->lpDD4 = NULL;
-  }
-
-  if ( pHAL->lpDD != NULL )
-  {
-    DPF(( DBG_CNTX_INFO, "Release DDraw" ));
-    refCount = pHAL->lpDD->Release();
-    pHAL->lpDD = NULL;
-  }
-}
-/*===========================================================================*/
-/*  This function will first send (not post) a message to the client window  */
-/* that this context is using.  The client will respond by unbinding itself  */
-/* and binding the 'default' context.  This allows the API to be supported   */
-/* until the window can be destroyed.  Finally we post the quit message to   */
-/* the client in hopes to end the application.                               */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-void  FatalShutDown( PMESAD3DHAL pHAL )
-{
-  /* Whip this baby in too try and support the API until we die... */
-  if ( pHAL )
-    SendMessage( pHAL->shared.hwnd, UM_FATALSHUTDOWN, 0L, 0L );
-
-  /* Close the client application down. */
-  PostQuitMessage( 0 );
-}
-
diff --git a/src/mesa/drivers/d3d/D3DMESA.H b/src/mesa/drivers/d3d/D3DMESA.H
deleted file mode 100644
index 71a7cd8aed..0000000000
--- a/src/mesa/drivers/d3d/D3DMESA.H
+++ /dev/null
@@ -1,84 +0,0 @@
-/*===========================================================================*/
-/*                                                                           */
-/* Mesa-3.0 DirectX 6 Driver                                                 */
-/*                                                                           */
-/* By Leigh McRae                                                            */
-/*                                                                           */
-/* http://www.altsoftware.com/                                               */
-/*                                                                           */
-/* Copyright (c) 1999-1998  alt.software inc.  All Rights Reserved           */
-/*===========================================================================*/
-#ifndef D3D_MESA_H
-#define D3D_MESA_H
-/*===========================================================================*/
-/* Includes.                                                                 */
-/*===========================================================================*/
-#include <windows.h>
-#include <ddraw.h>
-#include <d3d.h>
-#include "matrix.h"
-#include "context.h"
-#include "mtypes.h"
-#include "vb.h"
-#include "D3DShared.h"
-#include "Debug.h"
-#include "NULLProcs.h"
-/*===========================================================================*/
-/* Macros.                                                                   */
-/*===========================================================================*/
-#define FLIP(h,y)                       (h-y)
-/*===========================================================================*/
-/* Magic numbers.                                                            */
-/*===========================================================================*/
-/*===========================================================================*/
-/* Type defines.                                                             */
-/*===========================================================================*/
-struct __extensions__
-{
-   PROC  proc;
-   char  *name;
-};
-
-typedef GLbitfield   (*ClearPROC)( GLcontext *ctx, GLbitfield mask, GLboolean all, GLint x, GLint y, GLint width, GLint height );
-typedef void         (*WSpanRGBPROC)( const GLcontext* ctx, GLuint n, GLint x, GLint y, const GLubyte rgb[][3], const GLubyte mask[] );
-typedef void         (*WSpanRGBAPROC)( const GLcontext* ctx, GLuint n, GLint x, GLint y, const GLubyte rgba[][4], const GLubyte mask[] );
-typedef void         (*WSpanRGBAMonoPROC)( const GLcontext* ctx, GLuint n, GLint x, GLint y, const GLubyte mask[] );
-typedef void         (*WPixelsRGBAPROC)( const GLcontext* ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte rgba[][4], const GLubyte mask[] );
-typedef void         (*WPixelsRGBAMonoPROC)( const GLcontext* ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte mask[] );
-typedef void         (*RSpanRGBAPROC)( const GLcontext* ctx, GLuint n, GLint x, GLint y, GLubyte rgba[][4] );
-typedef void         (*RPixelsRGBAPROC)( const GLcontext* ctx, GLuint n, const GLint x[], const GLint y[], GLubyte rgba[][4], const GLubyte mask[] );
-
-typedef struct D3D_mesa_context 
-{
-  PMESAD3DSHARED        pShared;
-
-  GLcontext             *gl_ctx;       /* The core GL/Mesa context */
-  GLvisual              *gl_visual;    /* Describes the buffers */
-  GLframebuffer *gl_buffer;    /* Depth, stencil, accum, etc buffers */
-
-  HDC                   hdc;
-  WNDPROC               hOldProc;
-
-  UCHAR                 rClear,         /* Current clear colors. */
-		    gClear,
-		    bClear,
-		    aClear,
-		    rCurrent,           /* Current rendering colors. */
-		    gCurrent,
-		    bCurrent,
-		    aCurrent;
-
-   struct D3D_mesa_context *next;
-
-} D3DMESACONTEXT, *PD3DMESACONTEXT;
-/*===========================================================================*/
-/* Extern function prototypes.                                               */
-/*===========================================================================*/
-extern void gl_Viewport( GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height );
-/*===========================================================================*/
-/* Global variables.                                                         */
-/*===========================================================================*/
-extern D3DTLVERTEX   D3DTLVertices[(VB_MAX*6)];
-
-#endif
-
diff --git a/src/mesa/drivers/d3d/D3DRaster.cpp b/src/mesa/drivers/d3d/D3DRaster.cpp
deleted file mode 100644
index 41e42ad94c..0000000000
--- a/src/mesa/drivers/d3d/D3DRaster.cpp
+++ /dev/null
@@ -1,213 +0,0 @@
-/*===========================================================================*/
-/*                                                                           */
-/* Mesa-3.0 DirectX 6 Driver                                                 */
-/*                                                                           */
-/* By Leigh McRae                                                            */
-/*                                                                           */
-/* http://www.altsoftware.com/                                               */
-/*                                                                           */
-/* Copyright (c) 1999-1998  alt.software inc.  All Rights Reserved           */
-/*===========================================================================*/
-#include "D3DHAL.h"
-/*===========================================================================*/
-/*  This function clears the context bound to the supplied shared context.   */
-/* The function takes the D3D flags D3DCLEAR_TARGET, D3DCLEAR_STENCIL and    */
-/* D3DCLEAR_ZBUFFER.  Set bAll to TRUE for a full clear else supply the coord*/
-/* of the rect to be cleared relative to the window.  The color is always a  */
-/* 32bit value (RGBA).  Fill in the z-value and stencil if needed.           */
-/*                                                                           */
-/*  TODO: this can be redone to be called by Mesa directly.                  */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-extern "C" void ClearHAL( PMESAD3DSHARED pShared, DWORD dwFlags, BOOL bAll, int x, int y, int cx, int cy, DWORD dwColor, float zv, DWORD dwStencil )
-{
-  PMESAD3DHAL	pHAL = (PMESAD3DHAL)pShared;
-  D3DRECT		d3dRect;
-
-#ifdef D3D_DEBUG
-  HRESULT		rc;
-
-  DPF(( DBG_FUNC, "CleaHAL();" ));
-
-  /* Make sure we have enough info. */
-  if ( (pHAL == NULL) || (pHAL->lpViewport == NULL) )
-    return;
-#endif
-
-  if ( bAll )
-  {
-    /* I assume my viewport is valid. */
-    d3dRect.lX1 = pShared->rectV.left;
-    d3dRect.lY1 = pShared->rectV.top;
-    d3dRect.lX2 = pShared->rectV.right;
-    d3dRect.lY2 = pShared->rectV.bottom;
-  }
-  else
-  {
-    d3dRect.lX1 = pShared->rectV.left + x;
-    d3dRect.lY1 = pShared->rectV.top  + y;
-    d3dRect.lX2 = d3dRect.lX1 + cx;
-    d3dRect.lY2 = d3dRect.lY1 + cy;
-  }
-
-#ifdef D3D_DEBUG
-  rc = pHAL->lpViewport->Clear2( 1, &d3dRect, dwFlags, dwColor, zv, dwStencil );
-  if ( FAILED(rc) )
-  {
-    RIP( pHAL, "Clear2 ->", ErrorStringD3D(rc) );
-  }
-#else
-  pHAL->lpViewport->Clear2( 1, &d3dRect, dwFlags, dwColor, zv, dwStencil );
-#endif
-}
-/*===========================================================================*/
-/*  Well this is the guts of it all.  Here we rasterize the primitives that  */
-/* are in their final form.  OpenGL has done all the lighting, transfomations*/
-/* and clipping at this point.                                               */
-/*                                                                           */
-/* TODO:  I'm not sure if I want to bother to check for errors on this call. */
-/*       The overhead kills me...                                            */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-extern "C" void DrawPrimitiveHAL( PMESAD3DSHARED pShared, D3DPRIMITIVETYPE dptPrimitiveType, D3DTLVERTEX *pVertices, DWORD dwCount )
-{
-  PMESAD3DHAL	pHAL = (PMESAD3DHAL)pShared;
-
-#ifdef D3D_DEBUG
-  HRESULT		rc;      
-
-  DPF(( DBG_FUNC, "DrawPrimitveHAL();" ));
-
-  /* Make sure we have enough info. */
-  if ( (pHAL == NULL) || (pHAL->lpD3DDevice == NULL) )
-    return;
-
-  DPF(( DBG_PRIM_INFO, "DP( %d )", dwCount ));
-
-  rc = pHAL->lpD3DDevice->DrawPrimitive( dptPrimitiveType,
-								 D3DFVF_TLVERTEX,
-								 (LPVOID)pVertices,
-								 dwCount, 
-								 (D3DDP_DONOTCLIP | D3DDP_DONOTLIGHT) );
-  if ( FAILED(rc) )
-  {
-    RIP( pHAL, "DrawPrimitive ->", ErrorStringD3D(rc) );
-  }
-#else
-  pHAL->lpD3DDevice->DrawPrimitive( dptPrimitiveType,
-							 D3DFVF_TLVERTEX,
-							 (LPVOID)pVertices,
-							 dwCount, 
-							 (D3DDP_DONOTCLIP | D3DDP_DONOTLIGHT) );
-#endif
-}
-/*===========================================================================*/
-/*  This call will handle the swapping of the buffers.  Now I didn't bother  */
-/* to support single buffered so this will be used for glFlush() as its all  */
-/* the same.  So first we do an EndScene as we are always considered to be in*/
-/* a BeginScene because when we leave we do a BeginScene.  Now note that when*/
-/* the context is created in the first place we do a BeginScene also just to */
-/* get things going.  The call will use either Flip/blt based on the type of */
-/* surface was created for rendering.                                        */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-extern "C" void SwapBuffersHAL( PMESAD3DSHARED pShared )
-{
-  PMESAD3DHAL	pHAL = (PMESAD3DHAL)pShared;
-
-#ifdef D3D_DEBUG
-  HRESULT		rc;      
-
-  DPF(( DBG_FUNC, "SwapBuffersHAL();" ));
-  DPF(( DBG_ALL_PROFILE, "=================SWAP===================" ));
-
-  /* Make sure we have enough info. */
-  if ( (pHAL == NULL) || (pHAL->lpD3DDevice == NULL) )
-    return;
-
-  /* Make sure we have enough info. */
-  if ( pHAL->lpDDSPrimary != NULL )
-  {
-    rc = pHAL->lpD3DDevice->EndScene();   
-    if ( FAILED(rc) )
-    {
-	 RIP( pHAL, "EndScene ->", ErrorStringD3D(rc) );
-    }
- 
-    if ( pShared->bFlipable )
-    {
-	 DPF(( DBG_CNTX_PROFILE, "Swap->FLIP" ));
-	 rc = pHAL->lpDDSPrimary->Flip( NULL, DDFLIP_WAIT );
-    }
-    else
-    {
-	 DPF(( DBG_CNTX_PROFILE, "Swap->Blt" ));
-	 rc = pHAL->lpDDSPrimary->Blt( &pShared->rectW, pHAL->lpDDSRender, NULL, DDBLT_WAIT, NULL );
-    }
-    if ( FAILED(rc) )
-    {
-	 RIP( pHAL, "Blt (RENDER/PRIMARY) ->", ErrorStringD3D(rc) );
-    }
-
-    rc = pHAL->lpD3DDevice->BeginScene(); 
-    if ( FAILED(rc) )
-    {
-	 RIP( pHAL, "BeginScene ->", ErrorStringD3D(rc) );
-    }
-  }
-#else
-  pHAL->lpD3DDevice->EndScene();   
-
-  if ( pShared->bFlipable )
-    pHAL->lpDDSPrimary->Flip( NULL, DDFLIP_WAIT );
-  else
-    pHAL->lpDDSPrimary->Blt( &pShared->rectW, pHAL->lpDDSRender, NULL, DDBLT_WAIT, NULL );
-
-  pHAL->lpD3DDevice->BeginScene(); 
-
-#endif
-}
-/*===========================================================================*/
-/*  This function is a very thin wrapper for the D3D call 'SetRenderState'.  */
-/* Using this function requires all the types to be defined by including the */
-/* D3D header file.                                                          */
-/*                                                                           */
-/*  TODO:  would be much better to get ride of all these calls per VBRender. */
-/*        I feel I should get this call into SetRenderStates() the RenderVB. */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-extern "C" void SetStateHAL( PMESAD3DSHARED pShared, DWORD dwType, DWORD dwState )
-{
-  PMESAD3DHAL	pHAL = (PMESAD3DHAL)pShared;
-
-#ifdef D3D_DEBUG   
-  HRESULT		rc;
-
-  DPF(( DBG_FUNC, "SetStateHAL();" ));
-
-  /* Make sure we have enough info. */
-  if ( (pHAL == NULL) || (pHAL->lpD3DDevice == NULL) )
-    return;
-
-  rc = pHAL->lpD3DDevice->SetRenderState( (D3DRENDERSTATETYPE)dwType, dwState );
-  if ( FAILED(rc) )
-  {
-    RIP( pHAL, "SetRenderState ->", ErrorStringD3D(rc) );
-  }
-
-#else
-  pHAL->lpD3DDevice->SetRenderState( (D3DRENDERSTATETYPE)dwType, dwState );
-#endif
-}
-
-
-
-
-
-
-
-
diff --git a/src/mesa/drivers/d3d/D3DShared.h b/src/mesa/drivers/d3d/D3DShared.h
deleted file mode 100644
index cc629e2111..0000000000
--- a/src/mesa/drivers/d3d/D3DShared.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/*===========================================================================*/
-/*                                                                           */
-/* Mesa-3.0 DirectX 6 Driver                                                 */
-/*                                                                           */
-/* By Leigh McRae                                                            */
-/*                                                                           */
-/* http://www.altsoftware.com/                                               */
-/*                                                                           */
-/* Copyright (c) 1999-1998  alt.software inc.  All Rights Reserved           */
-/*===========================================================================*/
-#ifndef D3D_MESA_ALL_H
-#define D3D_MESA_ALL_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*===========================================================================*/
-/* Includes.                                                                 */
-/*===========================================================================*/
-#include <stdio.h>
-#include <string.h>
-/*===========================================================================*/
-/* Magic numbers.                                                            */
-/*===========================================================================*/
-#define	TM_ACTION_LOAD      0x01
-#define 	TM_ACTION_BIND      0x02
-#define 	TM_ACTION_UPDATE  	0x04
-
-#define	UM_FATALSHUTDOWN	(WM_USER+42)
-/*===========================================================================*/
-/* Macros defines.                                                           */
-/*===========================================================================*/
-#define  ALLOC(cb)            malloc( (cb) )
-#define  FREE(p)              { free( (p) ); (p) = NULL; }
-/*===========================================================================*/
-/* Type defines.                                                             */
-/*===========================================================================*/
-typedef struct _pixel_convert
-{
-  int	cb,			/* Count in bytes of one pixel. */
-          rShift,		/* Shift count that postions each componet. */
-	     gShift,		
-	     bShift,		
-          aShift;		
-  float   rScale,		/* Value that scales a color that ranges 0.0 -> 1.0 */
-          gScale,		/* to this pixel format.                            */
-          bScale,
-          aScale;
-  DWORD   dwRMask,		/* Color mask per component. */
-	     dwGMask,
-          dwBMask,
-          dwAMask;
-
-} PIXELINFO, *PPIXELINFO;
-
-
-typedef struct _d3d_shared_info
-{
-  HWND		hwnd;
-  BOOL    	bWindow,
-               bFlipable,
-               bForceSW,
-               bHardware;
-  RECT    	rectW,			/* Window size and postion in screen space. */
-               rectV;			/* Viewport size and postion. */
-  DWORD		dwWidth,			/* Current render size for quick checks. */
-               dwHeight;
-
-  PIXELINFO	pixel;			
-  DWORD		dwSrcBlendCaps[14],	/* See D3DCAPS.CPP */
-               dwDestBlendCaps[14],
-               dwTexFunc[4];
-
-} MESAD3DSHARED, *PMESAD3DSHARED;
-
-typedef struct _render_options
-{
-  BOOL	bForceSoftware,		/* TODO: Add user switches. */
-	     bStretchtoPrimary;
-
-} USER_CTRL, *PUSER_CRTL;
-
-enum { s_zero = 0,				
-	  s_one, 
-	  s_dst_color, 
-	  s_one_minus_dst_color, 
-	  s_src_alpha, 
-	  s_one_minus_src_alpha, 
-	  s_dst_alpha,
-	  s_one_minus_dst_alpha,
-	  s_src_alpha_saturate, 
-	  s_constant_color, 
-	  s_one_minus_constant_color, 
-	  s_constant_alpha, 
-	  s_one_minus_constant_alpha };
-
-enum { d_zero = 0, 
-	  d_one, 
-	  d_src_color, 
-	  d_one_minus_src_color, 
-	  d_src_alpha, 
-	  d_one_minus_src_alpha, 
-	  d_dst_alpha,
-	  d_one_minus_dst_alpha,
-	  d_constant_color,
-	  d_one_minus_constant_color,
-	  d_constant_alpha,
-	  d_one_minus_constant_alpha };
-
-enum { d3dtblend_decal = 0,
-	  d3dtblend_decalalpha,
-	  d3dtblend_modulate,
-	  d3dtblend_modulatealpha };
-
-/*===========================================================================*/
-/* Function prototypes.                                                      */
-/*===========================================================================*/
-PMESAD3DSHARED	InitHAL( HWND hwnd );
-void 	   	TermHAL( PMESAD3DSHARED pShared );
-BOOL 	   	CreateHAL( PMESAD3DSHARED pShared );
-BOOL 	   	SetViewportHAL( PMESAD3DSHARED pShared, RECT *pRect, float minZ, float maxZ  );
-
-void ClearHAL( PMESAD3DSHARED pShared, DWORD dwFlags, BOOL bAll, int x, int y, int cx, int cy, DWORD dwColor, float zv, DWORD dwStencil );
-void SetStateHAL( PMESAD3DSHARED pShared, DWORD dwType, DWORD dwState );
-void DrawPrimitiveHAL( PMESAD3DSHARED pShared, D3DPRIMITIVETYPE dptPrimitiveType, D3DTLVERTEX *pVertices, DWORD dwCount );
-
-void 		SwapBuffersHAL( PMESAD3DSHARED pShared );
-DDSURFACEDESC2 *LockHAL( PMESAD3DSHARED pShared, BOOL bBack );
-void 		UnlockHAL( PMESAD3DSHARED pShared, BOOL bBack );
-void 		UpdateScreenPosHAL( PMESAD3DSHARED pShared );
-void			GetPixelInfoHAL( PMESAD3DSHARED pShared, PPIXELINFO pPixel );
-BOOL CreateTMgrHAL( PMESAD3DSHARED pShared, DWORD dwName, int level, DWORD dwRequestFlags, RECT *rectDirty, DWORD dwWidth, DWORD dwHeight, DWORD dwAction, void *pPixels );
-void DisableTMgrHAL( PMESAD3DSHARED pShared );
-
-
-int  SaveDIBitmap( char *filename, BITMAPINFO *info, void *bits );
-int	ARGB_SaveBitmap( char *filename, int width, int height, unsigned char *pARGB );
-int  BGRA_SaveBitmap( char *filename, int width, int height, unsigned char *pBGRA );
-int  BGR_SaveBitmap( char *filename, int width, int height, unsigned char *pBGR );
-/*===========================================================================*/
-/* Global variables.                                                         */
-/*===========================================================================*/
-extern float	g_DepthScale,	/* Mesa needs to scale Z in SW.  The HAL */
-               g_MaxDepth;    /* doesn't but I wanted SW still to work.*/
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
-
diff --git a/src/mesa/drivers/d3d/D3DTEXT.CPP b/src/mesa/drivers/d3d/D3DTEXT.CPP
deleted file mode 100644
index 39855b65fa..0000000000
--- a/src/mesa/drivers/d3d/D3DTEXT.CPP
+++ /dev/null
@@ -1,576 +0,0 @@
-/*===========================================================================*/
-/*                                                                           */
-/* Mesa-3.0 DirectX 6 Driver                                                 */
-/*                                                                           */
-/* By Leigh McRae                                                            */
-/*                                                                           */
-/* http://www.altsoftware.com/                                               */
-/*                                                                           */
-/* Copyright (c) 1999-1998  alt.software inc.  All Rights Reserved           */
-/*===========================================================================*/
-#include "d3dText.h"
-
-/*=============================================================================
-
-       1     
-     ------
-    |      | 
-  6 |      | 2
-    |  7   |
-     ------  
-    |      |
-  5 |      | 3
-    |      |
-     ------ 
-       4 
-
-	    TL_0		TR_0
-TLL		TL_1		TR_1	TRR
-
-MLL_0   ML_0		MR_0	MRR_0
-MLL_1   ML_1		MR_1	MRR_1
-
-BLL		BL_0		BR_0	BRR
-        BL_1		BR_1
-
-=============================================================================*/
-
-#define TLL		0
-#define TRR		1
-#define TL_0	2
-#define TL_1	3
-#define TR_0	4
-#define TR_1	5
-
-#define	MLL_0	6
-#define	MLL_1	7
-#define	MRR_0	8
-#define	MRR_1	9
-
-#define	ML_0	10
-#define	ML_1	11
-#define	MR_0	12
-#define	MR_1	13
-
-#define	BL_0	14
-#define	BL_1	15
-#define	BR_0	16
-#define	BR_1	17
-#define	BLL		18
-#define	BRR		19
-
-#define	BIT1	0x00000001
-#define	BIT2	0x00000002
-#define	BIT3	0x00000004
-#define	BIT4	0x00000008
-#define	BIT5	0x00000010
-#define	BIT6	0x00000020
-#define	BIT7	0x00000040
-
-#define TOP		BIT4
-#define MIDDLE		BIT7
-#define BOTTOM		BIT1
-#define TLEFT 		BIT5
-#define BLEFT   	BIT6
-#define LEFT		(TLEFT|BLEFT)
-#define TRIGHT		BIT3
-#define BRIGHT		BIT2
-#define RIGHT		(TRIGHT|BRIGHT)
-#define ALL		0xFFFFFFFF
-
-/*===========================================================================*/
-/*  This is the static array that will map the ASCII value of the character  */
-/* being draw to the bit mask that will be scan converted to the LED display.*/
-/*===========================================================================*/
-DWORD	textBitMasks[] = 
-{
-  0xFFFFFFFF, // 000
-  0xFFFFFFFF, // 001
-  0xFFFFFFFF, // 002
-  0xFFFFFFFF, // 003  
-  0xFFFFFFFF, // 004
-  0xFFFFFFFF, // 005
-  0xFFFFFFFF, // 006
-  0xFFFFFFFF, // 007  
-  0xFFFFFFFF, // 008
-  0xFFFFFFFF, // 009
-  0xFFFFFFFF, // 010
-  0xFFFFFFFF, // 011
-  0xFFFFFFFF, // 012
-  0xFFFFFFFF, // 013
-  0xFFFFFFFF, // 014
-  0xFFFFFFFF, // 015
-  0xFFFFFFFF, // 016
-  0xFFFFFFFF, // 017
-  0xFFFFFFFF, // 018
-  0xFFFFFFFF, // 019
-  0xFFFFFFFF, // 020
-  0xFFFFFFFF, // 021
-  0xFFFFFFFF, // 022
-  0xFFFFFFFF, // 023 
-  0xFFFFFFFF, // 024
-  0xFFFFFFFF, // 025
-  0xFFFFFFFF, // 026
-  0xFFFFFFFF, // 027
-  0xFFFFFFFF, // 028
-  0xFFFFFFFF, // 029
-  0xFFFFFFFF, // 030
-  0XFFFFFFFF, // 031 
-  0x00000000, // 032 'SPC'
-  0xFFFFFFFF, // 033
-  0xFFFFFFFF, // 034
-  0xFFFFFFFF, // 035
-  0xFFFFFFFF, // 036
-  0xFFFFFFFF, // 037
-  0xFFFFFFFF, // 038
-  0xFFFFFFFF, // 039
-  0xFFFFFFFF, // 040
-  0xFFFFFFFF, // 041
-  0xFFFFFFFF, // 042
-  0xFFFFFFFF, // 043
-  0xFFFFFFFF, // 044
-  0xFFFFFFFF, // 045
-  0xFFFFFFFF, // 046
-  0xFFFFFFFF, // 047 
-  (ALL &~ MIDDLE), 			// 048	'0'
-  (RIGHT),     				// 049	'1'
-  (ALL &~ TLEFT &~ BRIGHT), // 050	'2'
-  (ALL &~ LEFT), 			// 051	'3'
-  (TLEFT | MIDDLE | RIGHT), // 052	'4'
-  (ALL &~ TRIGHT &~ BLEFT), // 053	'5'
-  (ALL &~ TRIGHT), 			// 054	'6'
-  (TOP | RIGHT), 			// 055	'7'
-  (ALL), 					// 056	'8'
-  (ALL &~ BOTTOM &~ BLEFT), // 057	'9'
-  0xFFFFFFFF, // 058
-  0xFFFFFFFF, // 059
-  0xFFFFFFFF, // 060
-  0XFFFFFFFF, // 061
-  0xFFFFFFFF, // 062
-  0xFFFFFFFF, // 063
-  0xFFFFFFFF, // 064
-  (ALL &~ BOTTOM),			// 065	'A'
-  (ALL), 					// 066	'B'
-  (TOP | LEFT | BOTTOM), 	// 067	'C'
-  (ALL &~ MIDDLE), 			// 068	'D'
-  (ALL &~ RIGHT), 			// 069	'E'
-  (LEFT | TOP | MIDDLE), 	// 070	'F'
-  0x00000000,  				// 071	'G'
-  (ALL &~ TOP &~ BOTTOM), 	// 072	'H'
-  (RIGHT), 					// 073	'I'
-  (RIGHT | BOTTOM),			// 074	'J'
-  0x00000000,  				// 075	'K'
-  (LEFT | BOTTOM),			// 076	'L'
-  0x00000000, 				// 088	'M'
-  0x00000000, 				// 089	'N'
-  (ALL &~ MIDDLE),  		// 090	'O'
-  (ALL &~ BRIGHT &~ BOTTOM),// 091	'P'
-  0x00000000, 				// 092	'Q'
-  0x00000000,				// 093	'R'
-  (ALL &~ TRIGHT &~ BLEFT),	// 094	'S'
-  0X00000000, 				// 095	'T'
-  (LEFT | RIGHT | BOTTOM),  // 096	'U'
-  0x00000000, 				// 097	'V'
-  0x00000000, 				// 098	'W'
-  0x00000000, 				// 099	'X'
-  0x00000000,  				// 1000	'Z'
-  0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,  // 100 
-  0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,  // 104 
-  0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,  // 108 
-  0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,  // 112 
-  0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,  // 116 
-  0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,  // 120 
-  0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF   // 124 
-};
-
-#define	CT	1.0f
-#define	CX	7.0f
-#define	CY	13.0f
-#define CM	((CY-(CT*3.0f))/2.0f)
-
-float lCoords[][2] = 
-{
-  /* Top outsides. */
-  { 0,  		(CY-CT) },		
-  { CX, 		(CY-CT) },
-
-  /* Top Line. */
-  { CT, 		CY },
-  { CT, 		(CY-CT) },
-  { (CX-CT), 	CY },
-  { (CX-CT), 	(CY-CT) },
-
-  /* Middle outsides. */
-  { 0.0f,		(CT+CM+CT) },
-  { 0.0f,		(CT+CM) },
-  { CX,			(CT+CM+CT) },
-  { CX,			(CT+CM) },
-
-  /* Middle Line. */
-  { CT,			(CT+CM+CT) },	
-  { CT,			(CT+CM)	},	
-  { (CX-CT),	(CT+CM+CT) },
-  { (CX-CT),	(CT+CM) },
-
-  /* Bottom line. */
-  { CT,			CT },
-  { CT,			0.0f },
-  { (CX-CT),	CT },
-  { (CX-CT),	0.0f },
-
-  /* Bottom outsides. */
-  { 0.0f,		CT},
-  { CX,			CT }
-};
-
-static int	ConvertCharacter( char *c, int cIndex,  PD3DFONTMETRICS pfntMetrics );
-
-D3DTLVERTEX TextVertices[MAX_VERTICES];
-/*===========================================================================*/
-/*  When we attach I will zero out the whole D3D vertex buffer I'm using for */
-/* the text.  This way I don't need to set all the redundant values.  I also */
-/* set all the oow values to 1 as I will be doing direct rendering.          */
-/*===========================================================================*/
-/* RETURN: TRUE, FALSE.                                                      */
-/*===========================================================================*/
-extern "C" BOOL InitD3DText( void )
-{
-  int	index;
-
-  /* Set the D3D Vertex Buffer up once so we don't do redundant changes. */
-  memset( &TextVertices[0], 0, sizeof(TextVertices) );
-  for( index = 0; index < MAX_VERTICES; index++ )
-	TextVertices[index].rhw	= D3DVAL( 1.0 );
-
-  return TRUE;
-}
-/*===========================================================================*/
-/*  This function takes a single character and draw it using the supplied    */
-/* fontmetrics structure.                                                    */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-extern "C" void d3dTextDrawString( char *pszString, int x, int y, PD3DFONTMETRICS pfntMetrics )
-{
-  int	cIndex,
-	     nIndex,
-	     index;
-  float	cWidth = CX,
-	     cHeight = CY;
-
-  /*  Find the max width/height of a character and add the spacing so */
-  /* that we can use this value to calculate the x,y of the character.*/
-  cWidth  = (cWidth  * pfntMetrics->fntXScale)  + pfntMetrics->fntXSpacing;
-  cHeight = (cHeight * pfntMetrics->fntYScale) + pfntMetrics->fntYSpacing;
-
-  /* Walk the string.  This must be NULL terminated. */
-  for( cIndex = 0, nIndex = 0; *pszString; pszString++, cIndex = nIndex, x++ )
-  {
-	/* Convert the character and get the index into the text vertex buffer. */
-	nIndex = ConvertCharacter( &pszString[0], cIndex, pfntMetrics );
-	if ( (nIndex - cIndex) > 2 )
-    {
-	  /* Modify the text vertex buffer based on the fntMetrics structure. */
-	  for( index = cIndex; index < nIndex; index++ )
-	  {
-		/* Scale the character. */
-		TextVertices[index].sx	*= pfntMetrics->fntXScale;
-		TextVertices[index].sy   *= pfntMetrics->fntYScale;
-		
-		/* Move the character. */
-		TextVertices[index].sx	+= (cWidth*x);
-		TextVertices[index].sy   += (cHeight*y);
-
-		/* Set the color. */
-		TextVertices[index].color = pfntMetrics->dwColor;
-	  }
-	}
-  }
-
-  if ( nIndex < 3 )
-	return;
-
-  /* Set the states that slim things down. */
-  pfntMetrics->lpD3DDevice->SetRenderState( D3DRENDERSTATE_CULLMODE, 			D3DCULL_NONE );
-  pfntMetrics->lpD3DDevice->SetRenderState( D3DRENDERSTATE_FILLMODE, 			D3DFILL_SOLID );
-  pfntMetrics->lpD3DDevice->SetRenderState( D3DRENDERSTATE_ZENABLE, 			FALSE );
-  pfntMetrics->lpD3DDevice->SetRenderState( D3DRENDERSTATE_ZWRITEENABLE , 		FALSE );
-  pfntMetrics->lpD3DDevice->SetRenderState( D3DRENDERSTATE_ALPHATESTENABLE, 	FALSE );
-  pfntMetrics->lpD3DDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, 	FALSE );
-
-  /* Blast them baby... */
-  pfntMetrics->lpD3DDevice->DrawPrimitive( D3DPT_TRIANGLELIST,
-										   D3DFVF_TLVERTEX,
-										   (LPVOID)&TextVertices[0],
-										   nIndex, 
-										   (D3DDP_DONOTCLIP | D3DDP_DONOTLIGHT) );
-}
-/*===========================================================================*/
-/*  This function takes a single character and draw it directly to the screen*/
-/* unsing the supplied fntMetrics structure.  The character will be drawn at */
-/* the supplied x,y.  The x,y position is relative to the top left and uses  */
-/* the spacing in the fntMetrics structure.                                  */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-extern "C" void d3dTextDrawCharacter( char *c, int x, int y, PD3DFONTMETRICS pfntMetrics )
-{
-  int	cIndex = 0,
-	    index;
-  float	cWidth = CX,
-	    cHeight = CY;
-
-  /* Convert the character and get the index into the text vertex buffer. */
-  cIndex = ConvertCharacter( c, 0, pfntMetrics );
-  if ( cIndex < 3 )
-	return;
-
-  /*  Find the max width/height of a character and add the spacing so */
-  /* that we can use this value to calculate the x,y of the character.*/
-  cWidth  = (cWidth  * pfntMetrics->fntXScale)  + pfntMetrics->fntXSpacing;
-  cHeight = (cHeight * pfntMetrics->fntYScale) + pfntMetrics->fntYSpacing;
-
-  /* Modify the text vertex buffer based on the fntMetrics structure. */
-  for( index = 0; index < cIndex; index++ )
-  {
-	/* Scale the character. */
-	TextVertices[index].sx	*= pfntMetrics->fntXScale;
-	TextVertices[index].sy   *= pfntMetrics->fntYScale;
-
-	/* Move the character. */
-	TextVertices[index].sx	+= (cWidth*x);
-	TextVertices[index].sy   += (cHeight*y);
-
-	/* Set the color. */
-	TextVertices[index].color = pfntMetrics->dwColor;
-  }
- 
-
-  /* Set the states that slim things down. */
-  pfntMetrics->lpD3DDevice->SetRenderState( D3DRENDERSTATE_CULLMODE, 			D3DCULL_NONE );
-  pfntMetrics->lpD3DDevice->SetRenderState( D3DRENDERSTATE_FILLMODE, 			D3DFILL_SOLID );
-  pfntMetrics->lpD3DDevice->SetRenderState( D3DRENDERSTATE_ZENABLE, 			FALSE );
-  pfntMetrics->lpD3DDevice->SetRenderState( D3DRENDERSTATE_ZWRITEENABLE , 		FALSE );
-  pfntMetrics->lpD3DDevice->SetRenderState( D3DRENDERSTATE_ALPHATESTENABLE, 	FALSE );
-  pfntMetrics->lpD3DDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, 	FALSE );
-
-  /* Blast them baby... */
-  pfntMetrics->lpD3DDevice->DrawPrimitive( D3DPT_TRIANGLELIST,
-										   D3DFVF_TLVERTEX,
-										   (LPVOID)&TextVertices[0],
-										   cIndex, 
-										   (D3DDP_DONOTCLIP | D3DDP_DONOTLIGHT) );
-}
-/*===========================================================================*/
-/*  This function takes a single character and draw it using the supplied    */
-/* fontmetrics structure.                                                    */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-static int	ConvertCharacter( char *c, int cIndex,  PD3DFONTMETRICS pfntMetrics )
-{
-  DWORD	asciiChar = (int)(*c);
-
-  /* Handle the TOP line. */
-  if ( textBitMasks[asciiChar] & BIT1 )
-  { 
-    TextVertices[cIndex].sx	= D3DVAL( lCoords[TL_0][0] );
-    TextVertices[cIndex++].sy= D3DVAL( lCoords[TL_0][1] );
-    TextVertices[cIndex].sx	= D3DVAL( lCoords[TR_0][0] );
-    TextVertices[cIndex++].sy= D3DVAL( lCoords[TR_0][1] );
-    TextVertices[cIndex].sx	= D3DVAL( lCoords[TR_1][0] );
-    TextVertices[cIndex++].sy= D3DVAL( lCoords[TR_1][1] );
-    TextVertices[cIndex].sx	= D3DVAL( lCoords[TR_1][0] );
-    TextVertices[cIndex++].sy= D3DVAL( lCoords[TR_1][1] );
-    TextVertices[cIndex].sx	= D3DVAL( lCoords[TL_1][0] );
-    TextVertices[cIndex++].sy= D3DVAL( lCoords[TL_1][1] );
-    TextVertices[cIndex].sx	= D3DVAL( lCoords[TL_0][0] );
-    TextVertices[cIndex++].sy= D3DVAL( lCoords[TL_0][1] );
-  }
-
-  /* Handle the TOP/BOTTOM RIGHT lines. */
-  //  if ( textBitMasks[index] & (BIT2|BIT3) )
-  if ( 1 == 0 )
-  {
-    TextVertices[cIndex].sx	= D3DVAL( lCoords[TR_1][0] );
-    TextVertices[cIndex++].sy= D3DVAL( lCoords[TR_1][1] );
-    TextVertices[cIndex].sx	= D3DVAL( lCoords[TRR][0] );
-    TextVertices[cIndex++].sy= D3DVAL( lCoords[TRR][1] );
-    TextVertices[cIndex].sx	= D3DVAL( lCoords[BRR][0] );
-    TextVertices[cIndex++].sy= D3DVAL( lCoords[BRR][1] );
-    TextVertices[cIndex].sx	= D3DVAL( lCoords[BRR][0] );
-    TextVertices[cIndex++].sy= D3DVAL( lCoords[BRR][1] );
-    TextVertices[cIndex].sx	= D3DVAL( lCoords[BR_0][0] );
-    TextVertices[cIndex++].sy= D3DVAL( lCoords[BR_0][1] );
-    TextVertices[cIndex].sx	= D3DVAL( lCoords[TR_1][0] );
-    TextVertices[cIndex++].sy= D3DVAL( lCoords[TR_1][1] );
-  }
-  else 
-  {
-	if ( textBitMasks[asciiChar] & BIT2 )
-	{
-	  TextVertices[cIndex].sx	= D3DVAL( lCoords[TR_1][0] );
-	  TextVertices[cIndex++].sy	= D3DVAL( lCoords[TR_1][1] );
-	  TextVertices[cIndex].sx	= D3DVAL( lCoords[TRR][0] );
-	  TextVertices[cIndex++].sy	= D3DVAL( lCoords[TRR][1] );
-	  TextVertices[cIndex].sx	= D3DVAL( lCoords[MRR_0][0] );
-	  TextVertices[cIndex++].sy	= D3DVAL( lCoords[MRR_0][1] );
-	  TextVertices[cIndex].sx	= D3DVAL( lCoords[MRR_0][0] );
-	  TextVertices[cIndex++].sy	= D3DVAL( lCoords[MRR_0][1] );
-	  TextVertices[cIndex].sx	= D3DVAL( lCoords[MR_0][0] );
-	  TextVertices[cIndex++].sy	= D3DVAL( lCoords[MR_0][1] );
-	  TextVertices[cIndex].sx	= D3DVAL( lCoords[TR_1][0] );
-	  TextVertices[cIndex++].sy	= D3DVAL( lCoords[TR_1][1] );
-	}
-	if ( textBitMasks[asciiChar] & BIT3 )
-	{
-	  TextVertices[cIndex].sx	= D3DVAL( lCoords[MR_1][0] );
-	  TextVertices[cIndex++].sy	= D3DVAL( lCoords[MR_1][1] );
-	  TextVertices[cIndex].sx	= D3DVAL( lCoords[MRR_1][0] );
-	  TextVertices[cIndex++].sy	= D3DVAL( lCoords[MRR_1][1] );
-	  TextVertices[cIndex].sx	= D3DVAL( lCoords[BRR][0] );
-	  TextVertices[cIndex++].sy	= D3DVAL( lCoords[BRR][1] );
-	  TextVertices[cIndex].sx	= D3DVAL( lCoords[BRR][0] );
-	  TextVertices[cIndex++].sy	= D3DVAL( lCoords[BRR][1] );
-	  TextVertices[cIndex].sx	= D3DVAL( lCoords[BR_0][0] );
-	  TextVertices[cIndex++].sy	= D3DVAL( lCoords[BR_0][1] );
-	  TextVertices[cIndex].sx	= D3DVAL( lCoords[MR_1][0] );
-	  TextVertices[cIndex++].sy	= D3DVAL( lCoords[MR_1][1] );
-	}
-  }
-
-  /* Handle the TOP/BOTTOM LEFT lines. */
-  //  if ( textBitMasks[asciiChar] & (BIT5|BIT6) )
-  if ( 1 == 0 )
-  {
-	TextVertices[cIndex].sx	= D3DVAL( lCoords[TLL][0] );
-	TextVertices[cIndex++].sy= D3DVAL( lCoords[TLL][1] );
-	TextVertices[cIndex].sx	= D3DVAL( lCoords[TL_1][0] );
-	TextVertices[cIndex++].sy= D3DVAL( lCoords[TL_1][1] );
-	TextVertices[cIndex].sx	= D3DVAL( lCoords[BL_0][0] );
-	TextVertices[cIndex++].sy= D3DVAL( lCoords[BL_0][1] );
-	TextVertices[cIndex].sx	= D3DVAL( lCoords[BL_0][0] );
-	TextVertices[cIndex++].sy= D3DVAL( lCoords[BL_0][1] );
-	TextVertices[cIndex].sx	= D3DVAL( lCoords[BLL][0] );
-	TextVertices[cIndex++].sy= D3DVAL( lCoords[BLL][1] );
-	TextVertices[cIndex].sx	= D3DVAL( lCoords[TLL][0] );
-	TextVertices[cIndex++].sy= D3DVAL( lCoords[TLL][1] );
-  }
-  else 
-  {
-	if ( textBitMasks[asciiChar] & BIT5 )
-	{
-	  TextVertices[cIndex].sx	= D3DVAL( lCoords[MLL_1][0] );
-	  TextVertices[cIndex++].sy	= D3DVAL( lCoords[MLL_1][1] );
-	  TextVertices[cIndex].sx	= D3DVAL( lCoords[ML_1][0] );
-	  TextVertices[cIndex++].sy	= D3DVAL( lCoords[ML_1][1] );
-	  TextVertices[cIndex].sx	= D3DVAL( lCoords[BL_0][0] );
-	  TextVertices[cIndex++].sy	= D3DVAL( lCoords[BL_0][1] );
-	  TextVertices[cIndex].sx	= D3DVAL( lCoords[BL_0][0] );
-	  TextVertices[cIndex++].sy	= D3DVAL( lCoords[BL_0][1] );
-	  TextVertices[cIndex].sx	= D3DVAL( lCoords[BLL][0] );
-	  TextVertices[cIndex++].sy	= D3DVAL( lCoords[BLL][1] );
-	  TextVertices[cIndex].sx	= D3DVAL( lCoords[MLL_1][0] );
-	  TextVertices[cIndex++].sy	= D3DVAL( lCoords[MLL_1][1] );
-	}
-	if ( textBitMasks[asciiChar] & BIT6 )
-	{
-	  TextVertices[cIndex].sx	= D3DVAL( lCoords[TLL][0] );
-	  TextVertices[cIndex++].sy	= D3DVAL( lCoords[TLL][1] );
-	  TextVertices[cIndex].sx	= D3DVAL( lCoords[TL_1][0] );
-	  TextVertices[cIndex++].sy	= D3DVAL( lCoords[TL_1][1] );
-	  TextVertices[cIndex].sx	= D3DVAL( lCoords[ML_0][0] );
-	  TextVertices[cIndex++].sy	= D3DVAL( lCoords[ML_0][1] );
-	  TextVertices[cIndex].sx	= D3DVAL( lCoords[ML_0][0] );
-	  TextVertices[cIndex++].sy	= D3DVAL( lCoords[ML_0][1] );
-	  TextVertices[cIndex].sx	= D3DVAL( lCoords[MLL_0][0] );
-	  TextVertices[cIndex++].sy	= D3DVAL( lCoords[MLL_0][1] );
-	  TextVertices[cIndex].sx	= D3DVAL( lCoords[TLL][0] );
-	  TextVertices[cIndex++].sy	= D3DVAL( lCoords[TLL][1] );
-	}
-  }
-
-  /* Handle the MIDDLE line. */
-  if ( textBitMasks[asciiChar] & BIT7 )
-  {
-	TextVertices[cIndex].sx	= D3DVAL( lCoords[ML_0][0] );
-	TextVertices[cIndex++].sy= D3DVAL( lCoords[ML_0][1] );
-	TextVertices[cIndex].sx	= D3DVAL( lCoords[MR_0][0] );
-	TextVertices[cIndex++].sy= D3DVAL( lCoords[MR_0][1] );
-	TextVertices[cIndex].sx	= D3DVAL( lCoords[MR_1][0] );
-	TextVertices[cIndex++].sy= D3DVAL( lCoords[MR_1][1] );
-	TextVertices[cIndex].sx	= D3DVAL( lCoords[MR_1][0] );
-	TextVertices[cIndex++].sy= D3DVAL( lCoords[MR_1][1] );
-	TextVertices[cIndex].sx	= D3DVAL( lCoords[ML_1][0] );
-	TextVertices[cIndex++].sy= D3DVAL( lCoords[ML_1][1] );
-	TextVertices[cIndex].sx	= D3DVAL( lCoords[ML_0][0] );
-	TextVertices[cIndex++].sy= D3DVAL( lCoords[ML_0][1] );
-  }
-
-  /* Handle the BOTTOM line. */
-  if ( textBitMasks[asciiChar] & BIT4 )
-  {
-	TextVertices[cIndex].sx	= D3DVAL( lCoords[BL_0][0] );
-	TextVertices[cIndex++].sy= D3DVAL( lCoords[BL_0][1] );
-	TextVertices[cIndex].sx	= D3DVAL( lCoords[BR_0][0] );
-	TextVertices[cIndex++].sy= D3DVAL( lCoords[BR_0][1] );
-	TextVertices[cIndex].sx	= D3DVAL( lCoords[BR_1][0] );
-	TextVertices[cIndex++].sy= D3DVAL( lCoords[BR_1][1] );
-	TextVertices[cIndex].sx	= D3DVAL( lCoords[BR_1][0] );
-	TextVertices[cIndex++].sy= D3DVAL( lCoords[BR_1][1] );
-	TextVertices[cIndex].sx	= D3DVAL( lCoords[BL_1][0] );
-	TextVertices[cIndex++].sy= D3DVAL( lCoords[BL_1][1] );
-	TextVertices[cIndex].sx	= D3DVAL( lCoords[BL_0][0] );
-	TextVertices[cIndex++].sy= D3DVAL( lCoords[BL_0][1] );
-  }
-  
-  return cIndex;
-}
-
-#undef CM
-#undef CY
-#undef CX
-#undef CT
-
-#undef TLL
-#undef TRR
-#undef TL_0
-#undef TL_1
-#undef TR_0
-#undef TR_1
-
-#undef	MLL_0
-#undef	MLL_1
-#undef	MRR_0
-#undef	MRR_1
-
-#undef	ML_0
-#undef	ML_1
-#undef	MR_0
-#undef	MR_1
-
-#undef	BL_0
-#undef	BL_1
-#undef	BR_0
-#undef	BR_1
-#undef	BLL
-#undef	BRR
-
-#undef	BIT1
-#undef	BIT2
-#undef	BIT3
-#undef	BIT4
-#undef	BIT5
-#undef	BIT6
-#undef	BIT7
-
-#undef TOP
-#undef MIDDLE
-#undef BOTTOM
-#undef TLEFT
-#undef BLEFT
-#undef LEFT
-#undef TRIGHT
-#undef BRIGHT
-#undef RIGHT
-#undef ALL
diff --git a/src/mesa/drivers/d3d/D3DTextureMgr.cpp b/src/mesa/drivers/d3d/D3DTextureMgr.cpp
deleted file mode 100644
index a6600cab02..0000000000
--- a/src/mesa/drivers/d3d/D3DTextureMgr.cpp
+++ /dev/null
@@ -1,947 +0,0 @@
-/*===========================================================================*/
-/*                                                                           */
-/* Mesa-3.0 DirectX 6 Driver                                                 */
-/*                                                                           */
-/* By Leigh McRae                                                            */
-/*                                                                           */
-/* http://www.altsoftware.com/                                               */
-/*                                                                           */
-/* Copyright (c) 1999-1998  alt.software inc.  All Rights Reserved           */
-/*===========================================================================*/
-#include "D3DHAL.h"
-/*===========================================================================*/
-/* Local function prototypes.                                                */
-/*===========================================================================*/
-static void UpdateTexture( PTM_OBJECT pTMObj, BOOL bVideo, RECT *pRect, UCHAR *pixels );
-static BOOL LoadTextureInVideo( PMESAD3DHAL pHAL, PTM_OBJECT pTMObj );
-static BOOL FreeTextureMemory( PMESAD3DHAL pHAL, PTM_OBJECT pTMObject );
-static BOOL DestroyTextureObject( PMESAD3DHAL pHAL, PTM_OBJECT pTMObject );
-HRESULT CALLBACK EnumPFHook( LPDDPIXELFORMAT lpDDPixFmt, LPVOID lpContext );
-/*===========================================================================*/
-/*  This function will simply set the top of stack to NULL.  I only used it  */
-/* just incase I want to add something later.                                */
-/*===========================================================================*/
-/* RETURN: TRUE.                                                             */
-/*===========================================================================*/
-BOOL InitTMgrHAL( PMESAD3DHAL pHAL )
-{
-  DPF(( DBG_FUNC, "InitTMgrHAL();" ));
-
-  /* Be clean my friend. */
-  pHAL->pTMList = NULL;
-
-  return TRUE;
-}
-/*===========================================================================*/
-/*  This function will walk the Texture Managers linked list and destroy all */
-/* surfaces (SYSTEM/VIDEO).  The texture objects themselves also will be     */
-/* freed.                                                                    */
-/*  NOTE: this is per/context.                                               */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-void TermTMgrHAL( PMESAD3DHAL pHAL )
-{
-  DPF(( DBG_FUNC, "TermTMgrHAL();" ));
-
-  if ( pHAL && pHAL->pTMList )
-  {
-    /* Destroy the surface and remove the TMO from the stack. */
-    while( DestroyTextureObject(pHAL,NULL) );
-
-    /* Be clean my friend. */
-    pHAL->pTMList = NULL;
-  }
-}
-/*===========================================================================*/
-/*  This function is a HACK as I don't know how I can disable a texture with-*/
-/* out booting it out.  Is there know state change?                          */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-extern "C" void DisableTMgrHAL( PMESAD3DSHARED pShared )
-{
-  PMESAD3DHAL	pHAL = (PMESAD3DHAL)pShared;
-
-  DPF(( DBG_FUNC, "DisableTMgrHAL();" ));
-
-  /* Check too see that we have a valid context. */
-  if ( (pHAL == NULL) && (pHAL->lpD3DDevice != NULL)  ) 
-  {
-    DPF(( DBG_TXT_WARN, "Null HAL/Direct3D Device!" ));
-    return;
-  }
-
-  // TODO: This is a hack to shut off textures.
-  pHAL->lpD3DDevice->SetTexture( 0, NULL );
-}
-/*===========================================================================*/
-/*  This function is the only entry into the TextureManager that Mesa/wgl    */
-/* will see.  It uses a dwAction to specify what we are doing.  I did this as*/
-/* depending on the cards resources the action taken can change.             */
-/*  When this function is called we will always search the Texture Managers  */
-/* linked list (per context remember) and try and find a structure that has  */
-/* the same dwName.  If we have a match we pull it out of the list and put it*/
-/* at the top of the list (TOL).  If we don't find one then we create a struc*/
-/* and put it a TOL.  This TOL idea makes for some caching as we will always */
-/* destroy Texture Surfaces from the bottom up...                            */
-/*  All texture objects at this point will create a texture surface in System*/
-/* memory (SMEM).  Then we will copy the Mesa texture into the surface using */
-/* the 'pixel' struc to get the translation info.  So now this means that all*/
-/* textures that Mesa gives me I will have a Surface with a copy.  If Mesa   */
-/* changes the texture the I update the surface in (SMEM).                   */
-/*  Now we have a texture struc and a Texture Surface in SMEM.  At this point*/
-/* we create another surface on the card (VMEM).  Finally we blt from the    */
-/* SMEM to the VMEM and set the texture as current.  Why do I need two? First*/
-/* this solves square textures.  If the cards CAPS is square textures only   */
-/* then I change the dimensions of the VMEM surface and the blt solves it for*/
-/* me.  Second it saves me from filling D3D textures over and over if the    */
-/* card needs to be creating and destroying surfaces because of low memory.  */
-/*  The surface in SMEM is expected to work always.  When a surface has to be*/
-/* created in VMEM then we put it in a loop that tries to create the surface.*/
-/* If we create the surface ok then we brake from the loop.  If we fail then */
-/* we will call 'FreeTextureMemory' that will return TRUE/FALSE as to whether*/
-/* memory was freed.  If memory was freed then we can try again. If no memory*/
-/* was freed then it just can't fit.                                         */
-/*  'FreeTextureMemory' will find the end of the list and start freeing VMEM */
-/* (never SMEM) surfaces that are not locked.                                */
-/*  BIND - when we bind and there is a texture struct with a texture surface */
-/* in VMEM then we just make it current.  If we have a struct and a surface  */
-/* in SMEM but no VMEM surface then we create the surface in VMEM and blt    */
-/* from the SMEM surface.  If we have nothing its just like a creation...    */
-/*===========================================================================*/
-/* RETURN: TRUE, FALSE.                                                      */
-/*===========================================================================*/
-extern "C" BOOL CreateTMgrHAL( PMESAD3DSHARED pShared, DWORD dwName, int level, DWORD dwRequestFlags, 
-						 RECT *rectDirty, DWORD dwWidth, DWORD dwHeight, DWORD dwAction, void *pPixels )
-{
-  PMESAD3DHAL		pHAL = (PMESAD3DHAL)pShared;
-  PTM_OBJECT     	pTMObj,
-                    pTemp;
-  DDSURFACEDESC2 	ddsd2;
-  HRESULT        	rc;
-
-
-  DPF(( DBG_FUNC, "CreateTMgrHAL();" ));
-
-  DPF(( DBG_TXT_INFO, "Texture:" ));
-  DPF(( DBG_TXT_INFO, "cx: %d cy: %d", dwWidth, dwHeight ));
-  DPF(( DBG_TXT_INFO, "Rect:" ));
-  if ( rectDirty )
-  {
-    DPF(( DBG_TXT_INFO, "x0: %d y0: %d", rectDirty->left, rectDirty->top ));
-    DPF(( DBG_TXT_INFO, "x1: %d y1: %d", rectDirty->right, rectDirty->bottom ));
-  }
-
-  /* Check too see that we have a valid context. */
-  if ( (pHAL == NULL) && (pHAL->lpD3DDevice != NULL)  ) 
-  {
-    DPF(( DBG_TXT_WARN, "Null HAL/Direct3D Device!" ));
-    return FALSE;
-  }
-
-  /*=================================================*/
-  /* See if we can find this texture object by name. */
-  /*=================================================*/
-  for( pTMObj = pHAL->pTMList; pTMObj && (pTMObj->dwName != dwName); pTMObj = pTMObj->next );
-
-  /*=========================================================*/
-  /* Allocate a new object if we didn't get a matching name. */
-  /*=========================================================*/
-  if ( pTMObj == NULL )
-  {
-    pTMObj = (PTM_OBJECT)ALLOC( sizeof(TM_OBJECT) );
-    if ( pTMObj == NULL )
-	 return FALSE;
-    memset( pTMObj, 0, sizeof(TM_OBJECT) );
-
-    /* Put the object at the beginning of the list. */
-    pTMObj->next = pHAL->pTMList;
-    if ( pTMObj->next )
-    {
-	 pTemp = pTMObj->next;
-	 pTemp->prev = pTMObj;
-    }
-    pHAL->pTMList = pTMObj;
-  }
-  else
-  {
-    /*===============================================================*/
-    /* Make some caching happen by pulling this object to the front. */ 
-    /*===============================================================*/
-    if ( pHAL->pTMList != pTMObj )
-    {
-	 /* Pull the object out of the list. */
-	 if ( pTMObj->prev )
-	 {
-	   pTemp = pTMObj->prev;
-	   pTemp->next = pTMObj->next;
-	 }
-	 if ( pTMObj->next )
-      {
-	   pTemp = pTMObj->next;
-	   pTemp->prev = pTMObj->prev;
-	 }
-
-	 pTMObj->prev = NULL;
-	 pTMObj->next = NULL;
-
-	 /* Put the object at the front of the list. */
-	 pTMObj->next = pHAL->pTMList;
-	 if ( pTMObj->next )
-      {
-	   pTemp = pTMObj->next;
-	   pTemp->prev = pTMObj;
-	 }
-	 pHAL->pTMList = pTMObj;
-    }
-  }
-
-  /*========================================================*/
-  /* If we are doing BIND and the texture is in VID memory. */
-  /*========================================================*/
-  if ( (dwAction == TM_ACTION_BIND) && pTMObj->lpDDS_Video  )
-  {
-    DPF(( DBG_TXT_PROFILE, "Cache HIT (%d)", dwName ));
-	   
-    /* Make this the current texture. */
-    rc = pHAL->lpD3DDevice->SetTexture( 0, pTMObj->lpD3DTexture2 );
-    if ( FAILED(rc) )
-    {
-	 DPF(( DBG_TXT_WARN, "Failed SetTexture() (%s)", ErrorStringD3D(rc) ));
-	 pHAL->lpD3DDevice->SetTexture( 0, NULL );
-	 return FALSE;
-    }	
-
-    return TRUE;
-  }	
-
-  /*=================================================================*/
-  /* If we are doing BIND and the texture is at least in SYS memory. */
-  /*=================================================================*/
-  if ( (dwAction == TM_ACTION_BIND) && pTMObj->lpDDS_System  )
-  {
-    DPF(( DBG_TXT_PROFILE, "Cache MISS (%d)", dwName ));
-
-    /* Create the texture on the card. */
-    rc = LoadTextureInVideo( pHAL, pTMObj );
-    if ( rc == FALSE )
-	 return FALSE;
-	   
-    /* Make this the current texture. */
-    rc = pHAL->lpD3DDevice->SetTexture( 0, pTMObj->lpD3DTexture2 );
-    if ( FAILED(rc) )
-    {
-	 DPF(( DBG_TXT_WARN, "Failed SetTexture() (%s)", ErrorStringD3D(rc) ));
-	 pHAL->lpD3DDevice->SetTexture( 0, NULL );
-	 return FALSE;
-    }	
-
-    return TRUE;
-  }	
-
-  /*=========================================================*/
-  /* If we are doing UPDATE then try in VID first for speed. */
-  /*=========================================================*/
-  if ( (dwAction == TM_ACTION_UPDATE) && pTMObj->lpDDS_Video &&
-	  !(pHAL->D3DHWDevDesc.dpcTriCaps.dwTextureCaps & D3DPTEXTURECAPS_SQUAREONLY) )
-  {
-    DPF(( DBG_TXT_INFO, "Fix the SubTexture update Leigh!" ));
-
-    /* Update the texture on the card. */
-    UpdateTexture( pTMObj, TRUE, rectDirty, (UCHAR *)pPixels );
-
-    /* We updated the texture in VID so kill the SYS so we know its dirty. */
-    if ( pTMObj->lpDDS_System )
-    {
-	 DPF(( DBG_TXT_INFO, "Release texture (SYS)" ));
-	 DX_RESTORE( pTMObj->lpDDS_System );
-	 pTMObj->lpDDS_System->Release();
-	 pTMObj->lpDDS_System = NULL;
-    }
-
-    /* Make this the current texture. */
-    rc = pHAL->lpD3DDevice->SetTexture( 0, pTMObj->lpD3DTexture2 );
-    if ( FAILED(rc) )
-    {
-	 DPF(( DBG_TXT_WARN, "Failed SetTexture() (%s)", ErrorStringD3D(rc) ));
-	 pHAL->lpD3DDevice->SetTexture( 0, NULL );
-	 return FALSE;
-    }	
-
-    return TRUE;
-  }
-
-  /*===========================================================*/
-  /* If we are doing UPDATE then try in SYS still gives speed. */
-  /*===========================================================*/
-  if ( (dwAction == TM_ACTION_UPDATE) && pTMObj->lpDDS_System )
-  {
-    DPF(( DBG_TXT_INFO, "Fix the SubTexture update Leigh!" ));
-
-    /* Update the texture in SYS. */
-    UpdateTexture( pTMObj, FALSE, NULL, (UCHAR *)pPixels );
-
-    /* We updated the SYS texture only so now blt to the VID. */
-    rc = LoadTextureInVideo( pHAL, pTMObj );
-    if ( rc == FALSE )
-	 return FALSE;
-
-    /* Make this the current texture. */
-    rc = pHAL->lpD3DDevice->SetTexture( 0, pTMObj->lpD3DTexture2 );
-    if ( FAILED(rc) )
-    {
-	 DPF(( DBG_TXT_WARN, "Failed SetTexture() (%s)", ErrorStringD3D(rc) ));
-	 pHAL->lpD3DDevice->SetTexture( 0, NULL );
-	 return FALSE;
-    }	
-
-    return TRUE;
-  }
-
-  /*  At this point we have a valid Texture Manager Object with updated */
-  /* links.  We now need to create or update a texture surface that is  */
-  /* in system memory.  Every texture has a copy in system so we can use*/
-  /* blt to solve problems with textures allocated on the card (square  */
-  /* only textures, pixelformats...).                                   */
-  
-  // TODO: make support for update also.  Dirty rectangle basicly...
-
-  /* Kill the interface if we have one no matter what. */
-  if ( pTMObj->lpD3DTexture2 )
-  {
-    DPF(( DBG_TXT_INFO, "Release Texture2" ));
-    pTMObj->lpD3DTexture2->Release();
-    pTMObj->lpD3DTexture2 = NULL;
-  }	
-
-  /* Kill the system surface. TODO: should try to get the SubIMage going again */
-  if ( pTMObj->lpDDS_System )
-  {
-    DPF(( DBG_TXT_INFO, "Release texture (SYS)" ));
-    DX_RESTORE( pTMObj->lpDDS_System );
-    pTMObj->lpDDS_System->Release();
-    pTMObj->lpDDS_System = NULL;
-  }
-
-  /* Kill the Video surface. TODO: need some reuse system... */
-  if ( pTMObj->lpDDS_Video )
-  {
-    DPF(( DBG_TXT_INFO, "Release texture (VID)" ));
-    DX_RESTORE( pTMObj->lpDDS_Video );
-    pTMObj->lpDDS_Video->Release();
-    pTMObj->lpDDS_Video = NULL;
-  }
-
-  /*================================================================*/
-  /* Translate the the Mesa/OpenGL pixel channels to the D3D flags. */
-  /*================================================================*/
-  switch( dwRequestFlags )
-  {
-    case GL_ALPHA:
-	 dwRequestFlags = DDPF_ALPHA; 
-	 DPF(( DBG_TXT_WARN, "GL_ALPHA not supported!)" ));
-	 return FALSE;
-	 
-    case GL_INTENSITY:
-    case GL_LUMINANCE:
-	 DPF(( DBG_TXT_WARN, "GL_INTENSITY/GL_LUMINANCE not supported!)" ));
-	 dwRequestFlags = DDPF_LUMINANCE; 
-	 return FALSE;
-	 
-    case GL_LUMINANCE_ALPHA:
-	 DPF(( DBG_TXT_WARN, "GL_LUMINANCE_ALPHA not supported!)" ));
-	 dwRequestFlags = DDPF_LUMINANCE | DDPF_ALPHAPIXELS; 
-	 return FALSE;
-	 
-    case GL_RGB:
-	 DPF(( DBG_TXT_INFO, "Texture -> GL_RGB" ));
-	 dwRequestFlags = DDPF_RGB; 
-	 break;
-
-    case GL_RGBA:
-	 DPF(( DBG_TXT_INFO, "Texture -> GL_RGBA" ));
-	 dwRequestFlags = DDPF_RGB | DDPF_ALPHAPIXELS; 
-	 break;
-  }
-
-  /*==============================*/
-  /* Populate the texture object. */
-  /*==============================*/
-  pTMObj->dwName      = dwName;
-  pTMObj->lpD3DDevice = pHAL->lpD3DDevice;
-  pTMObj->dwFlags     = dwRequestFlags;
-  if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwTextureCaps & D3DPTEXTURECAPS_SQUAREONLY )
-  {
-    DPF(( DBG_TXT_INFO, "Convert to Square..." ));
-    pTMObj->dwSHeight  = dwHeight;
-    pTMObj->dwSWidth   = dwWidth;
-
-    /* Shrink non-square textures. */
-    pTMObj->dwVHeight  = (dwHeight > dwWidth) ? dwWidth : dwHeight;
-    pTMObj->dwVWidth	= (dwHeight > dwWidth) ? dwWidth : dwHeight;
-  }
-  else
-  {
-    pTMObj->dwSHeight  = dwHeight;
-    pTMObj->dwSWidth   = dwWidth;
-    pTMObj->dwVHeight  = dwHeight;
-    pTMObj->dwVWidth   = dwWidth;
-  }
-
-  /*========================*/  
-  /* Create SYSTEM surface. */
-  /*========================*/
-
-  /*  Request a surface in system memory. */
-  memset( &ddsd2, 0, sizeof(DDSURFACEDESC2) );
-  ddsd2.dwSize          = sizeof( DDSURFACEDESC2 );
-  ddsd2.dwWidth         = pTMObj->dwSWidth;
-  ddsd2.dwHeight        = pTMObj->dwSHeight;
-  ddsd2.dwFlags         = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT;
-  ddsd2.ddsCaps.dwCaps  = DDSCAPS_TEXTURE | DDSCAPS_SYSTEMMEMORY;
-  ddsd2.ddsCaps.dwCaps2 = 0L;
-  memset( &ddsd2.ddpfPixelFormat, 0, sizeof(DDPIXELFORMAT) );
-  ddsd2.ddpfPixelFormat.dwSize  = sizeof( DDPIXELFORMAT );
-  ddsd2.ddpfPixelFormat.dwFlags = dwRequestFlags;
-  rc = pHAL->lpD3DDevice->EnumTextureFormats( EnumPFHook, &ddsd2.ddpfPixelFormat );
-  if ( FAILED(rc) )
-  {
-    RIP( pHAL, "EnumerTextureFormats (SYSTEM)->", ErrorStringD3D(rc) );
-    return FALSE;
-  }
-
-  /* Create the surface using the enumerated pixelformat. */
-  rc = pHAL->lpDD4->CreateSurface( &ddsd2, &pTMObj->lpDDS_System, NULL );
-  if ( FAILED(rc) )
-  {
-    RIP( pHAL, "CreateSurface (TEXTURE/SYSTEM)->", ErrorStringD3D(rc) );
-    return FALSE;
-  }
-
-  /* Solve the pixel mapping info using the surface pixelformat. */
-  Solve8BitChannelPixelFormat( &ddsd2.ddpfPixelFormat, &pTMObj->pixel );
-
-  /*===================================================================*/
-  /* Fill the texture using the PixelInfo structure to do the mapping. */
-  /*===================================================================*/
-  UpdateTexture( pTMObj, FALSE, NULL, (UCHAR *)pPixels );
-
-  /*=======================*/
-  /* Create VIDEO surface. */
-  /*=======================*/
-  rc = LoadTextureInVideo( pHAL, pTMObj );
-  if ( rc == FALSE )
-    return FALSE;
-
-  /* Make this the current texture. */
-  rc = pHAL->lpD3DDevice->SetTexture( 0, pTMObj->lpD3DTexture2 );
-  if ( FAILED(rc) )
-  {
-    DPF(( DBG_TXT_WARN, "Failed SetTexture() (%s)", ErrorStringD3D(rc) ));
-    pHAL->lpD3DDevice->SetTexture( 0, NULL );
-    return FALSE;
-  }
-
-  return TRUE;
-}
-/*===========================================================================*/
-/*  This function will handle the creation and destruction of the texture    */
-/* surfaces on the card.  Using the dw'V'Width/Height dimensions the call    */
-/* try and create the texture on the card and keep using FreeTextureMemory   */
-/* until the surace can be created.  Once the surface is created we get the  */
-/* interface that we will use to make it the current texture.  I didn't put  */
-/* the code to make the texture current in this function as BIND needs to    */
-/* use the same code and this function doesn't always get called when we do a*/
-/* bind.                                                                     */
-/*===========================================================================*/
-/* RETURN: TRUE, FALSE.                                                      */
-/*===========================================================================*/
-static BOOL	LoadTextureInVideo( PMESAD3DHAL pHAL, PTM_OBJECT pTMObj )
-{
-  DDSURFACEDESC2	ddsd2;
-  HRESULT       	rc;
-
-  DPF(( DBG_FUNC, "LoadTextureInVideo();" ));
-
-  /* Kill the interface if we have one no matter what. */
-  if ( pTMObj->lpD3DTexture2 )
-  {
-    DPF(( DBG_TXT_INFO, "Release Texture2" ));
-    pTMObj->lpD3DTexture2->Release();
-    pTMObj->lpD3DTexture2 = NULL;
-  }	
-
-  /* Kill the Video surface. TODO: need some reuse system... */
-  if ( pTMObj->lpDDS_Video )
-  {
-    DPF(( DBG_TXT_INFO, "Release texture (VID)" ));
-    DX_RESTORE( pTMObj->lpDDS_Video );
-    pTMObj->lpDDS_Video->Release();
-    pTMObj->lpDDS_Video = NULL;
-  }
-
-  /*  Request a surface in Video memory. */
-  memset( &ddsd2, 0, sizeof(DDSURFACEDESC2) );
-  ddsd2.dwSize          = sizeof( DDSURFACEDESC2 );
-  ddsd2.dwWidth         = pTMObj->dwVWidth;
-  ddsd2.dwHeight        = pTMObj->dwVHeight;
-  ddsd2.dwFlags         = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT;
-  ddsd2.ddsCaps.dwCaps  = DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY;
-  ddsd2.ddsCaps.dwCaps2 = 0L;
-  memset( &ddsd2.ddpfPixelFormat, 0, sizeof(DDPIXELFORMAT) );
-  ddsd2.ddpfPixelFormat.dwSize  = sizeof( DDPIXELFORMAT );
-  ddsd2.ddpfPixelFormat.dwFlags = pTMObj->dwFlags;
-  rc = pHAL->lpD3DDevice->EnumTextureFormats( EnumPFHook, &ddsd2.ddpfPixelFormat );
-  if ( FAILED(rc) )
-  {
-    RIP( pHAL, "EnumerTextureFormats ->", ErrorStringD3D(rc) );
-    return FALSE;
-  }
-
-  /* Make sure we lock so we don't nuke this texture trying to free memory for it. */
-  pTMObj->bLock = TRUE;
-
-  /*  Start a loop that will free all textures until we have created the texture */
-  /* surface or we can't free up more memory.                                    */
-  do
-  {
-    /* Try to create the texture surface. */
-    rc = pHAL->lpDD4->CreateSurface( &ddsd2, &pTMObj->lpDDS_Video, NULL );
-    if ( !FAILED(rc) )
-	 break;
-
-    DPF(( DBG_TXT_INFO, "Free Texture Memory" ));
-
-    /* DestroyTexture will return TRUE if a surface was freed. */
-  } while( FreeTextureMemory(pHAL,NULL) );
-
-  /* Make sure we unlock or we won't be able to nuke the TMO later. */
-  pTMObj->bLock = FALSE;
-
-  /* Did we create a valid texture surface? */
-  if ( FAILED(rc) )
-  {
-    DPF(( DBG_TXT_WARN, "Failed to load texture" ));
-    pHAL->lpD3DDevice->SetTexture( 0, NULL );
-    return FALSE;
-  }
-
-  DX_RESTORE( pTMObj->lpDDS_System );
-  DX_RESTORE( pTMObj->lpDDS_Video );
-
-  DPF(( DBG_TXT_INFO, "Texture Blt SYSTEM -> VID" ));
-
-  /* Now blt the texture in system memory to the card. */
-  rc = pTMObj->lpDDS_Video->Blt( NULL, pTMObj->lpDDS_System, NULL, DDBLT_WAIT, NULL );
-  if ( FAILED(rc) )
-  {
-    RIP( pHAL, "Blt (TEXTURE) ->", ErrorStringD3D(rc) );
-    return FALSE;
-  }
-
-  /* Get the Texture interface that is used to render with. */
-  pTMObj->lpDDS_Video->QueryInterface( IID_IDirect3DTexture2, (void **)&pTMObj->lpD3DTexture2 ); 
-  if ( pTMObj->lpD3DTexture2 == NULL )
-  {
-    DPF(( DBG_TXT_WARN, "Failed QueryTextureInterface" ));
-    pHAL->lpD3DDevice->SetTexture( 0, NULL );
-    return FALSE;
-  }
-
-  return TRUE;
-}
-/*===========================================================================*/
-/*  If this function gets a texture object struc then we will try and free   */
-/* it.  If we get a NULL then we will search from the bottom up and free one */
-/* VMEM surface.  I can only free when the surface isn't locked and of course*/
-/* there must be a VMEM surface.  We never free SMEM surfaces as that isn't  */
-/* the point.                                                                */
-/* TODO: should have a pointer to the bottom of the stack really.            */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-static BOOL FreeTextureMemory( PMESAD3DHAL pHAL, PTM_OBJECT pTMObject )
-{
-  PTM_OBJECT	pCurrent;
-  BOOL		bFreed = FALSE;
-
-  DPF(( DBG_FUNC, "FreeTextureMemory();" ));
-  DPF(( DBG_TXT_WARN, "FREE TEXTURE!" ));
-
-  /* Just to be safe. */
-  if ( !pHAL || !pHAL->pTMList )
-  {
-    DPF(( DBG_TXT_WARN, "FreeTextureMemory() -> NULL pHAL/pHAL->pTMList" ));
-    return FALSE;
-  }
-
-  /* Free the last texture in the list. */
-  if ( pTMObject == NULL )
-  {
-    DPF(( DBG_TXT_INFO, "Free Last texture in cache" ));
-
-    /* Find the last texture object. */
-    for( pCurrent = pHAL->pTMList; pCurrent->next; pCurrent = pCurrent->next );
-
-    /* Now backup until we find a texture on the card. */
-    while( pCurrent && (pCurrent->lpDDS_Video == NULL) && (pCurrent->bLock == FALSE) )
-	 pCurrent = pCurrent->prev;
-
-    /* Didn't find anything. */
-    if ( pCurrent == NULL )
-    {
-	 DPF(( DBG_TXT_INFO, "No texture memory freed" ));
-	 return FALSE;
-    }
-  }
-  else
-  {
-    /* See if we can find this texture object. */
-    for( pCurrent = pHAL->pTMList; pCurrent && (pCurrent != pTMObject); pCurrent = pCurrent->next );
-
-    /* Didn't find anything. */
-    if ( pCurrent == NULL )
-    {
-	 DPF(( DBG_TXT_INFO, "Requested texture to be freed NOT FOUND" ));
-	 return FALSE;
-    }
-  }
-
-  /* Can't free this baby. */
-  if ( pCurrent->bLock == TRUE )
-  {
-    DPF(( DBG_TXT_WARN, "Requested texture LOCKED" ));
-    return FALSE;
-  }
-
-  /* Free the texture memory. */
-  if ( pCurrent->lpD3DTexture2 )
-  {
-    DPF(( DBG_TXT_INFO, "Release Texture2" ));
-    pCurrent->lpD3DTexture2->Release();
-    pCurrent->lpD3DTexture2 = NULL;
-    bFreed = TRUE;
-  }
-  if ( pCurrent->lpDDS_Video )
-  {
-    DPF(( DBG_TXT_INFO, "Release texture (VID):" ));
-    DPF(( DBG_TXT_INFO, "dwName: %d", pCurrent->dwName ));
-    DPF(( DBG_TXT_INFO, "cx: %d, cy: %d", pCurrent->dwVWidth, pCurrent->dwVHeight ));
-    pCurrent->lpDDS_Video->Release();
-    pCurrent->lpDDS_Video = NULL;
-    bFreed = TRUE;
-  }
-  
-  return bFreed;
-}
-/*===========================================================================*/
-/*  This function searches the linked list of texture objects in the supplied*/
-/* D3Dwrapper structure.  If it finds a match it will free it and pull it out*/
-/* of the linked list.  The function works on the bases of a matching pointer*/
-/* to the object (not matching content).                                     */
-/*  If the function gets passed a NULL then we want to free the last texture */
-/* object in the list.  Used in a loop to destory all.                       */
-/*===========================================================================*/
-/* RETURN: TRUE, FALSE.                                                      */
-/*===========================================================================*/
-static BOOL DestroyTextureObject( PMESAD3DHAL pHAL, PTM_OBJECT pTMObject )
-{
-  PTM_OBJECT	pCurrent;
-
-  DPF(( DBG_FUNC, "DestoryTextureObject();" ));
-
-  /* Just to be safe. */
-  if ( !pHAL || !pHAL->pTMList )
-  {
-    DPF(( DBG_TXT_WARN, "DestroyTextureObject() -> NULL pHAL/pHAL->pTMList" ));
-    return FALSE;
-  }
-
-  /* Free the last texture in the list. */
-  if ( pTMObject == NULL )
-  {
-    /* Find the last texture object. */
-    for( pCurrent = pHAL->pTMList; pCurrent->next; pCurrent = pCurrent->next );
-  }
-  else
-  {
-    /* See if we can find this texture object. */
-    for( pCurrent = pHAL->pTMList; pCurrent && (pCurrent != pTMObject); pCurrent = pCurrent->next );
-
-    /* Didn't find anything. */
-    if ( pCurrent == NULL )
-    {
-	 DPF(( DBG_TXT_WARN, "No textures to be freed" ));
-	 return FALSE;
-    }
-  }
-
-  /* Can't free this baby. */
-  if ( pCurrent->bLock == TRUE )
-  {
-    DPF(( DBG_TXT_WARN, "Requested texture to be freed LOCKED" ));
-    return FALSE;
-  }
-
-  /* Free the texture memory. */
-  if ( pCurrent->lpD3DTexture2 )
-  { 
-    DPF(( DBG_TXT_INFO, "Release Texture2" ));
-    pCurrent->lpD3DTexture2->Release();
-    pCurrent->lpD3DTexture2 = NULL;
-  }
-  if ( pCurrent->lpDDS_Video )
-  {
-    DPF(( DBG_TXT_INFO, "Release texture (VID):" ));
-    pCurrent->lpDDS_Video->Release();
-    pCurrent->lpDDS_Video = NULL;
-  }
-  if ( pCurrent->lpDDS_System )
-  {
-    DPF(( DBG_TXT_INFO, "Release texture (SYS):" ));
-    pCurrent->lpDDS_System->Release();
-    pCurrent->lpDDS_System = NULL;
-  }
-
-  /* Pull this texture out of the list. */
-  if ( pCurrent == pHAL->pTMList )
-    pHAL->pTMList = NULL;
-  if ( pCurrent->prev )
-    (pCurrent->prev)->next = pCurrent->next;
-  if ( pCurrent->next )
-    (pCurrent->next)->prev = pCurrent->prev;
-  FREE( pCurrent );
-
-  return TRUE;
-}
-/*===========================================================================*/
-/*  This function is the callback function that gets called when we are doing*/
-/* an enumeration of the texture formats supported by this device. The choice*/
-/* is made by checking to see if we have a match with the supplied D3D pixel-*/
-/* format.  So the enumeration has to pass a desired D3D PF as the user var. */
-/*===========================================================================*/
-/* RETURN: D3DENUMRET_OK, D3DENUMRET_CANCEL.                                 */
-/*===========================================================================*/
-static void UpdateTexture( PTM_OBJECT pTMObj, BOOL bVideo, RECT *pRect, UCHAR *pixels )
-{
-  LPDIRECTDRAWSURFACE4	lpDDS;
-  DDSURFACEDESC2		ddsd2;
-  DWORD          		srcPitch,
-                         dwHeight, 
-                         dwWidth,
-                         dwCol,
-                         dwColor;
-  UCHAR          		*pSrc,
-                         *pSrcRow,
-                         *pDest,
-                         *pDestRow;
-  int				rc;
-
-  // TODO:  Do I need to pass the h/w when its in the object!
-  DPF(( DBG_FUNC, "UpdateTexture();" ));
-
-  /* Get the surface pointer we are looking for. */
-  lpDDS = (bVideo) ? pTMObj->lpDDS_Video : pTMObj->lpDDS_System;
-
-  /*===================================================================*/
-  /* Fill the texture using the PixelInfo structure to do the mapping. */
-  /*===================================================================*/
-	 
-  /* Get the surface pointer. */
-  memset( &ddsd2, 0, sizeof(DDSURFACEDESC2) );
-  ddsd2.dwSize = sizeof(DDSURFACEDESC2);
-  rc = lpDDS->Lock( NULL, &ddsd2, DDLOCK_WAIT, NULL );
-  if ( FAILED(rc) )
-  {
-    RIP( NULL, "Lock (TEXTURE/SYSTEM)->", ErrorStringD3D(rc) );
-    return;
-  }
-
-  /* For now we are only updating the system surface so use its dimensions. */
-  dwWidth  = (bVideo) ? pTMObj->dwVWidth : pTMObj->dwSWidth;
-  dwHeight = (bVideo) ? pTMObj->dwVHeight : pTMObj->dwSHeight;
-
-  /*  If we are updating the whole surface then the pDest/pSrc will */
-  /* always be the same.                                            */
-  if ( pRect == NULL )
-  {
-    pDest = (UCHAR *)ddsd2.lpSurface;
-    pSrc  = pixels;
-  }
-
-  /* Fill the texture surface based on the pixelformat flags. */
-  if ( pTMObj->dwFlags == (DDPF_RGB | DDPF_ALPHAPIXELS) )
-  {
-    srcPitch = dwWidth * 4;
-    if ( pRect )
-    {
-	 pDest = ((UCHAR *)ddsd2.lpSurface) + (pRect->top * ddsd2.lPitch) + (pRect->left * pTMObj->pixel.cb);
-	 pSrc  = pixels + (pRect->top * dwWidth * 4) + (pRect->left * 4);
-	 dwHeight = (pRect->bottom - pRect->top);
-	 dwWidth = (pRect->right - pRect->left);
-    }
-
-    for( pDestRow = pDest, pSrcRow = pSrc; dwHeight > 0; dwHeight--, pDestRow += ddsd2.lPitch, pSrcRow += srcPitch )
-    {
-	 for( dwCol = 0, pDest = pDestRow, pSrc = pSrcRow; dwCol < dwWidth; dwCol++ )
-      {
-	   dwColor =  ( ((DWORD)(*(pSrc  ) * pTMObj->pixel.rScale)) << pTMObj->pixel.rShift );
-	   dwColor |= ( ((DWORD)(*(pSrc+1) * pTMObj->pixel.gScale)) << pTMObj->pixel.gShift );
-	   dwColor |= ( ((DWORD)(*(pSrc+2) * pTMObj->pixel.bScale)) << pTMObj->pixel.bShift );
-	   if ( pTMObj->pixel.aScale == -1.0 )
-		dwColor |= ( (*(pSrc+3) & 0x80) ? (1 << pTMObj->pixel.aShift) : 0 );
-	   else
-		dwColor |= ( ((DWORD)(*(pSrc+3) * pTMObj->pixel.aScale)) << pTMObj->pixel.aShift );
-	   memcpy( pDest, &dwColor, pTMObj->pixel.cb );
-	   pDest += pTMObj->pixel.cb;
-	   pSrc  += 4;
-	 }
-    }
-  }
-  else if ( pTMObj->dwFlags == DDPF_RGB )
-  {
-    srcPitch = dwWidth * 3;
-    if ( pRect )
-    {
-	 pDest = ((UCHAR *)ddsd2.lpSurface) + (pRect->top * ddsd2.lPitch) + (pRect->left * pTMObj->pixel.cb);
-	 pSrc  = pixels + (pRect->top * dwWidth * 3) + (pRect->left * 3);
-	 dwHeight = (pRect->bottom - pRect->top);
-	 dwWidth  = (pRect->right - pRect->left);
-    }
-
-    for( pDestRow = pDest, pSrcRow = pSrc; dwHeight > 0; dwHeight--, pDestRow += ddsd2.lPitch, pSrcRow += srcPitch )
-    {
-	 for( dwCol = 0, pDest = pDestRow, pSrc = pSrcRow; dwCol < dwWidth; dwCol++ )
-      {
-	   dwColor =  ( ((DWORD)(*(pSrc  ) * pTMObj->pixel.rScale)) << pTMObj->pixel.rShift );
-	   dwColor |= ( ((DWORD)(*(pSrc+1) * pTMObj->pixel.gScale)) << pTMObj->pixel.gShift );
-	   dwColor |= ( ((DWORD)(*(pSrc+2) * pTMObj->pixel.bScale)) << pTMObj->pixel.bShift );
-	   memcpy( pDest, &dwColor, pTMObj->pixel.cb );
-	   pDest += pTMObj->pixel.cb;
-	   pSrc  += 3;
-	 }
-    }
-  }
-  else if ( pTMObj->dwFlags == (DDPF_LUMINANCE | DDPF_ALPHAPIXELS) )
-  {
-    srcPitch = dwWidth * 2;
-    if ( pRect )
-    {
-	 pDest = ((UCHAR *)ddsd2.lpSurface) + (pRect->top * ddsd2.lPitch) + (pRect->left * pTMObj->pixel.cb);
-	 pSrc  = pixels + (pRect->top * dwWidth * 2) + (pRect->left * 2);
-	 dwHeight = (pRect->bottom - pRect->top);
-	 dwWidth  = (pRect->right - pRect->left);
-    }
-
-    for( pDestRow = pDest, pSrcRow = pSrc; dwHeight > 0; dwHeight--, pDestRow += ddsd2.lPitch, pSrcRow += srcPitch )
-    {
-	 for( dwCol = 0, pDest = pDestRow, pSrc = pSrcRow; dwCol < dwWidth; dwCol++ )
-      {
-	   dwColor =  ( ((DWORD)(*(pSrc  ) * pTMObj->pixel.rScale)) << pTMObj->pixel.rShift );
-	   if ( pTMObj->pixel.aScale == -1.0 )
-		dwColor |= ( (*(pSrc+1) & 0x80) ? (1 << pTMObj->pixel.aShift) : 0 );
-	   else
-		dwColor |= ( ((DWORD)(*(pSrc+1) * pTMObj->pixel.aScale)) << pTMObj->pixel.aShift );
-	   memcpy( pDest, &dwColor, pTMObj->pixel.cb );
-	   pDest += pTMObj->pixel.cb;
-	   pSrc  += 2;
-	 }
-    }
-  }
-  else if ( pTMObj->dwFlags == DDPF_LUMINANCE )
-  {
-    srcPitch = dwWidth;
-    if ( pRect )
-    {
-	 pDest = ((UCHAR *)ddsd2.lpSurface) + (pRect->top * ddsd2.lPitch) + (pRect->left * pTMObj->pixel.cb);
-	 pSrc  = pixels + (pRect->top * dwWidth) + (pRect->left);
-	 dwHeight = (pRect->bottom - pRect->top);
-	 dwWidth  = (pRect->right - pRect->left);
-    }
-
-    for( pDestRow = pDest, pSrcRow = pSrc; dwHeight > 0; dwHeight--, pDestRow += ddsd2.lPitch, pSrcRow += srcPitch )
-    {
-	 for( dwCol = 0, pDest = pDestRow, pSrc = pSrcRow; dwCol < dwWidth; dwCol++ )
-      {
-	   dwColor =  ( ((DWORD)(*pSrc * pTMObj->pixel.rScale)) << pTMObj->pixel.rShift );
-	   memcpy( pDest, &dwColor, pTMObj->pixel.cb );
-	   pDest += pTMObj->pixel.cb;
-	   pSrc++;
-	 }
-    }
-  }
-  else if ( pTMObj->dwFlags == DDPF_ALPHAPIXELS )
-  {
-    srcPitch = dwWidth;
-    if ( pRect )
-    {
-	 pDest = ((UCHAR *)ddsd2.lpSurface) + (pRect->top * ddsd2.lPitch) + (pRect->left * pTMObj->pixel.cb);
-	 pSrc  = pixels + (pRect->top * dwWidth) + (pRect->left);
-	 dwHeight = (pRect->bottom - pRect->top);
-	 dwWidth  = (pRect->right - pRect->left);
-    }
-
-    for( pDestRow = pDest, pSrcRow = pSrc; dwHeight > 0; dwHeight--, pDestRow += ddsd2.lPitch, pSrcRow += srcPitch )
-    {
-	 for( dwCol = 0, pDest = pDestRow, pSrc = pSrcRow; dwCol < dwWidth; dwCol++ )
-      {
-	   if ( pTMObj->pixel.aScale == -1.0 )
-		dwColor = ( (*pSrc & 0x80) ? (1 << pTMObj->pixel.aShift) : 0 );
-	   else
-		dwColor = ( ((DWORD)(*pSrc * pTMObj->pixel.aScale)) << pTMObj->pixel.aShift );
-	   memcpy( pDest, &dwColor, pTMObj->pixel.cb );
-	   pDest += pTMObj->pixel.cb;
-	   pSrc++;
-	 }
-    }
-  }
-
-  /* Unlock the surface. */
-  rc = lpDDS->Unlock( NULL );
-  if ( FAILED(rc) )
-  {
-    RIP( NULL, "Unlock (TEXTURE/SYSTEM)->", ErrorStringD3D(rc) );
-  }
-}
-/*===========================================================================*/
-/*  This function is the callback function that gets called when we are doing*/
-/* an enumeration of the texture formats supported by this device. The choice*/
-/* is made by checking to see if we have a match with the supplied D3D pixel-*/
-/* format.  So the enumeration has to pass a desired D3D PF as the user var. */
-/*===========================================================================*/
-/* RETURN: D3DENUMRET_OK, D3DENUMRET_CANCEL.                                 */
-/*===========================================================================*/
-HRESULT CALLBACK EnumPFHook( LPDDPIXELFORMAT lpDDPixFmt, LPVOID lpContext )
-{
-  LPDDPIXELFORMAT   lpDDPixFmtRequest = (LPDDPIXELFORMAT)lpContext;
-  PIXELINFO    	pixel;
-
-  DPF(( DBG_FUNC, "EnumPFHook();" ));
-
-  if ( lpDDPixFmt->dwFlags == lpDDPixFmtRequest->dwFlags )
-  {
-    /* Are we looking for an alpha channel? */
-    if ( lpDDPixFmtRequest->dwFlags & DDPF_ALPHAPIXELS )
-    {
-	 /* Try for something that has more then 1bits of Alpha. */
-	 Solve8BitChannelPixelFormat( lpDDPixFmt, &pixel );
-	 if ( pixel.aScale == -1.0 )
-	 {
-	   /* Save this format no matter what as its a match of sorts. */
-	   memcpy( lpDDPixFmtRequest, lpDDPixFmt, sizeof(DDPIXELFORMAT) );
-	   return D3DENUMRET_OK;
-	 }
-    }
-
-    /* Save this format as its a good match. */
-    memcpy( lpDDPixFmtRequest, lpDDPixFmt, sizeof(DDPIXELFORMAT) );
-
-    /* We are happy at this point so lets leave. */
-    return D3DENUMRET_CANCEL;
-  }
-  
-  return D3DENUMRET_OK;
-}
-
-
diff --git a/src/mesa/drivers/d3d/D3DTextureMgr.h b/src/mesa/drivers/d3d/D3DTextureMgr.h
deleted file mode 100644
index 8a64ceaaec..0000000000
--- a/src/mesa/drivers/d3d/D3DTextureMgr.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*===========================================================================*/
-/*                                                                           */
-/* Mesa-3.0 DirectX 6 Driver                                                 */
-/*                                                                           */
-/* By Leigh McRae                                                            */
-/*                                                                           */
-/* http://www.altsoftware.com/                                               */
-/*                                                                           */
-/* Copyright (c) 1999-1998  alt.software inc.  All Rights Reserved           */
-/*===========================================================================*/
-#ifndef _TEXTURE_MGR_INC
-#define _TEXTURE_MGR_INC
-   
-/*===========================================================================*/
-/* Includes.                                                                 */
-/*===========================================================================*/
-#include <windows.h>
-#include <ddraw.h>
-#include <d3d.h>
-#include <stdlib.h>
-#include <stdlib.h>
-#include "GL/gl.h"
-/*========================================================================*/
-/* Defines.                                                               */
-/*========================================================================*/
-/*========================================================================*/
-/* Type defines.                                                          */
-/*========================================================================*/
-typedef struct _local_texture_object
-{
-   DWORD                dwName,
-                        dwPriority,
-                        dwFlags,
-                        dwSWidth,
-                        dwSHeight,
-                        dwVWidth,
-                        dwVHeight;
-   BOOL                 bLock,
-	                   bDirty;		/*  I only update VID on SubImage calls so the system */
-                                        /* texture can get invalid.                           */
-
-   LPDIRECT3DDEVICE3    lpD3DDevice;	/* If the device changes we must get new handles... */
-   LPDIRECTDRAWSURFACE4 lpDDS_System,
-	                   lpDDS_Video;
-   LPDIRECT3DTEXTURE2   lpD3DTexture2;
-
-   PIXELINFO            pixel;
-
-   struct _local_texture_object *next;
-   struct _local_texture_object *prev;
-
-} TM_OBJECT, *PTM_OBJECT;
-/*========================================================================*/
-/* Function prototypes.                                                   */
-/*========================================================================*/
-void APIENTRY  InitTMD3D( void *pVoid );
-void APIENTRY  TermTMD3D( void *pVoid );
-/*========================================================================*/
-/* Global variables declaration.                                          */
-/*========================================================================*/
-
-#endif 
diff --git a/src/mesa/drivers/d3d/D3DUTILS.CPP b/src/mesa/drivers/d3d/D3DUTILS.CPP
deleted file mode 100644
index 02664f96e4..0000000000
--- a/src/mesa/drivers/d3d/D3DUTILS.CPP
+++ /dev/null
@@ -1,638 +0,0 @@
-/*===========================================================================*/
-/*                                                                           */
-/* Mesa-3.0 DirectX 6 Driver                                                 */
-/*                                                                           */
-/* By Leigh McRae                                                            */
-/*                                                                           */
-/* http://www.altsoftware.com/                                               */
-/*                                                                           */
-/* Copyright (c) 1999-1998  alt.software inc.  All Rights Reserved           */
-/*===========================================================================*/
-#include "D3DHAL.h"
-/*===========================================================================*/
-/* Local only functions.                                                     */
-/*===========================================================================*/
-static int  CountTrailingZeros( DWORD dwMask );
-/*===========================================================================*/
-/*  This function is used to get the pointer to the surface and the pitch for*/
-/* the scanline rendering functions.                                         */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-extern "C" DDSURFACEDESC2 *LockHAL( PMESAD3DSHARED pShared, BOOL bBack )
-{
-  PMESAD3DHAL			pHAL = (PMESAD3DHAL)pShared;
-  static DDSURFACEDESC2	ddsd2;
-  HRESULT               	rc;      
-
-  DPF(( DBG_FUNC, "LockHAL();" ));
-
-  /* Set the request structure up first. */
-  memset( &ddsd2, 0, sizeof(DDSURFACEDESC2) );
-  ddsd2.dwSize = sizeof(DDSURFACEDESC2);
-
-  /* Make sure we have enough info. */
-  if ( pHAL )
-  {
-    rc = pHAL->lpDDSRender->Lock( NULL, &ddsd2, DDLOCK_WAIT, NULL );
-    if ( FAILED(rc) )
-    {
-	 RIP( pHAL, "Lock (RENDER) ->", ErrorStringD3D(rc) );
-    }
-  }
-
-  return &ddsd2;
-}
-/*===========================================================================*/
-/*  This is just a simple wrapper.  I probably don't need to do any error    */
-/* checking as the Lock must have worked inorder to get here...              */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-extern "C" void UnlockHAL( PMESAD3DSHARED pShared, BOOL bBack )
-{
-  PMESAD3DHAL	pHAL = (PMESAD3DHAL)pShared;
-  HRESULT		rc;
-
-  DPF(( DBG_FUNC, "UnlockHAL();" ));
-
-  /* Make sure we have enough info. */
-  if ( pHAL )
-  {
-    rc = pHAL->lpDDSRender->Unlock( NULL );
-    if ( FAILED(rc) )
-    {
-	 RIP( pHAL, "Unlock (RENDER) ->", ErrorStringD3D(rc) );
-    }
-  }
-}
-/*===========================================================================*/
-/*  This function will track the main/Primary window that will be used as the*/
-/* target for the Blt in SwapBuffers.  As a side effect the call will check  */
-/* to see if the primary surface is the same size and position as the screen.*/
-/* If they are the same size we will call it fullscreen...                   */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-extern "C" void UpdateScreenPosHAL( PMESAD3DSHARED pShared )
-{
-  PMESAD3DHAL	pHAL = (PMESAD3DHAL)pShared;
-  POINT		pt;
-  DWORD		dwWidth, dwHeight;
-
-  DPF(( DBG_FUNC, "UpdateScreenPosHAL();" ));
-
-  /* Make sure we have enough info. */
-  if ( pHAL != NULL )
-  {
-    /* Update the windows screen position. */
-    GetClientRect( pShared->hwnd, &pShared->rectW );
-    pt.x = pt.y = 0;
-    ClientToScreen( pShared->hwnd, &pt );
-    OffsetRect( &pShared->rectW, pt.x, pt.y);
-
-    /* Compare the primary to the screen. */
-    dwWidth = GetSystemMetrics( SM_CXSCREEN );
-    dwHeight =  GetSystemMetrics( SM_CYSCREEN );
-    if ( (pShared->rectW.left > 0) ||  (pShared->rectW.top > 0)  ||
-	    (pShared->rectW.right > dwWidth) || (pShared->rectW.bottom > dwHeight) )
-	 pShared->bWindow = TRUE;
-    else
-	 pShared->bWindow = FALSE;
-  }
-}
-/*===========================================================================*/
-/*  This function will fill in the pixel info structure defined in D3Dshared.*/
-/* Basicly it will take a DirectDraw pixelformat structure and make scaling  */
-/* values that will convert from 8bit channels to whatever the supplied ddpf */
-/* uses.  Also we will generate shift values that will be used to get move   */
-/* each component of the pixel into place.                                   */
-/*  I have now added a special case for a 1bit alpha channel.  If I find a 1b*/
-/* alpha then I will set the scale to -1.0 which should be unique.  Later I  */
-/* can check the alpha scale value too see if its -1.0 and thus handle it.  I*/
-/* was finding that the case was not working tom my advantage so this is my  */
-/* HACK for the day.  As a TODO I should work on this...                     */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-void	Solve8BitChannelPixelFormat( DDPIXELFORMAT *pddpf, PPIXELINFO pPixel )
-{
-  DPF(( DBG_FUNC, "Solve8BitChannelPixelFromat();" ));
-
-  memset( pPixel, 0, sizeof(PPIXELINFO) );
-
-  /* Check too see if the color space is valid in the PF. */
-  if ( pddpf->dwFlags & DDPF_RGB )
-  {
-    /* Solve the red stuff. */
-    pPixel->dwRMask = pddpf->dwRBitMask;
-    pPixel->rShift = CountTrailingZeros( pPixel->dwRMask );
-    pPixel->rScale = (float)0.00392156 * (float)(pPixel->dwRMask >> pPixel->rShift);
-
-    /* Solve the green thingy's. */
-    pPixel->dwGMask = pddpf->dwGBitMask;
-    pPixel->gShift = CountTrailingZeros( pPixel->dwGMask );
-    pPixel->gScale = (float)0.00392156 * (float)(pPixel->dwGMask >> pPixel->gShift);
-
-    /* Solve the blues. */
-    pPixel->dwBMask = pddpf->dwBBitMask;
-    pPixel->bShift = CountTrailingZeros( pddpf->dwBBitMask );
-    pPixel->bScale = (float)0.00392156 * (float)(pddpf->dwBBitMask >> pPixel->bShift);
-  }
-
-  /* Do the alpha channel if there is one. */
-  if ( pddpf->dwFlags & DDPF_ALPHAPIXELS )
-  {
-    pPixel->dwAMask = pddpf->dwRGBAlphaBitMask;
-    pPixel->aShift = CountTrailingZeros( pPixel->dwAMask );
-
-    /* Special case a 1bit alpha. */
-    if ( (pPixel->dwAMask >> pPixel->aShift) == 1 )
-	 pPixel->aScale = -1.0;
-    else
-	 pPixel->aScale = (float)0.00392156 * (float)(pPixel->dwAMask >> pPixel->aShift);
-  }
-
-  /* Get the size of the pixel in bytes. Should work as dwRGBBitCount is in a union. */
-  pPixel->cb = pddpf->dwRGBBitCount / 8;
-}
-/*===========================================================================*/
-/*  See RETURN :)                                                            */
-/*===========================================================================*/
-/* RETURN: number of contiguous zeros starting from the right.               */
-/*===========================================================================*/
-static int  CountTrailingZeros( DWORD dwMask )
-{
-  DWORD Mask;
-
-  if ( dwMask == 0 ) 
-    return 32;
-
-  /* Can't take credit for this one! */
-  Mask = dwMask & -(int)dwMask;
-  return ((Mask & 0xFFFF0000)!=0) << 4
-         | ((Mask & 0xFF00FF00)!=0) << 3
-         | ((Mask & 0xF0F0F0F0)!=0) << 2
-         | ((Mask & 0xCCCCCCCC)!=0) << 1
-         | ((Mask & 0xAAAAAAAA)!=0);
-}
-/*===========================================================================*/
-/*  This function will convert the DDraw error code to its macro string.  The*/
-/* returned pointer is static so you need not worry about memory managemnet  */
-/* but the error message gets written over from call to call...              */
-/*===========================================================================*/
-/* RETURN: pointer to the single static buffer that hold the error message.  */
-/*===========================================================================*/
-char *ErrorStringD3D( HRESULT hr )
-{
-  static   char  errorString[128];
-
-  switch( hr )
-    {
-    case DDERR_ALREADYINITIALIZED:
-	 strcpy( errorString, "DDERR_ALREADYINITIALIZED" );
-	 break;
-	 
-    case DDERR_CANNOTATTACHSURFACE:
-	 strcpy( errorString, "DDERR_CANNOTATTACHSURFACE" );
-	 break;
-	 
-    case DDERR_CANNOTDETACHSURFACE:
-	 strcpy( errorString, "DDERR_CANNOTDETACHSURFACE" );
-	 break;
-	 
-    case DDERR_CURRENTLYNOTAVAIL:
-	 strcpy( errorString, "DDERR_CURRENTLYNOTAVAIL" );
-	 break;
-	 
-    case DDERR_EXCEPTION:
-	 strcpy( errorString, "DDERR_EXCEPTION" );
-	 break;
-	 
-    case DDERR_GENERIC:
-	 strcpy( errorString, "DDERR_GENERIC" );
-	 break;
-	 
-    case DDERR_HEIGHTALIGN:
-	 strcpy( errorString, "DDERR_HEIGHTALIGN" );
-	 break;
-	 
-    case DDERR_INCOMPATIBLEPRIMARY:
-	 strcpy( errorString, "DDERR_INCOMPATIBLEPRIMARY" );
-	 break;
-	 
-    case DDERR_INVALIDCAPS:
-	 strcpy( errorString, "DDERR_INVALIDCAPS" );
-	 break;
-	 
-    case DDERR_INVALIDCLIPLIST:
-	 strcpy( errorString, "DDERR_INVALIDCLIPLIST" );
-	 break;
-	 
-    case DDERR_INVALIDMODE:
-	 strcpy( errorString, "DDERR_INVALIDMODE" );
-	 break;
-	 
-    case DDERR_INVALIDOBJECT:
-	 strcpy( errorString, "DDERR_INVALIDOBJECT" );
-	 break;
-	 
-    case DDERR_INVALIDPARAMS:
-	 strcpy( errorString, "DDERR_INVALIDPARAMS" );
-	 break;
-	 
-    case DDERR_INVALIDPIXELFORMAT:
-	 strcpy( errorString, "DDERR_INVALIDPIXELFORMAT" );
-	 break;
-	 
-    case DDERR_INVALIDRECT:
-	 strcpy( errorString, "DDERR_INVALIDRECT" );
-	 break;
-	 
-    case DDERR_LOCKEDSURFACES:
-	 strcpy( errorString, "DDERR_LOCKEDSURFACES" );
-	 break;
-	 
-    case DDERR_NO3D:
-	 strcpy( errorString, "DDERR_NO3D" );
-	 break;
-	 
-    case DDERR_NOALPHAHW:
-	 strcpy( errorString, "DDERR_NOALPHAHW" );
-	 break;
-	 
-    case DDERR_NOCLIPLIST:
-	 strcpy( errorString, "DDERR_NOCLIPLIST" );
-	 break;
-	 
-    case DDERR_NOCOLORCONVHW:
-	 strcpy( errorString, "DDERR_NOCOLORCONVHW" );
-	 break;
-	 
-    case DDERR_NOCOOPERATIVELEVELSET:
-	 strcpy( errorString, "DDERR_NOCOOPERATIVELEVELSET" );
-	 break;
-	 
-    case DDERR_NOCOLORKEY:
-	 strcpy( errorString, "DDERR_NOCOLORKEY" );
-	 break;
-	 
-    case DDERR_NOCOLORKEYHW:
-	 strcpy( errorString, "DDERR_NOCOLORKEYHW" );
-	 break;
-	 
-    case DDERR_NODIRECTDRAWSUPPORT:
-	 strcpy( errorString, "DDERR_NODIRECTDRAWSUPPORT" );
-	 break;
-	 
-    case DDERR_NOEXCLUSIVEMODE:
-	 strcpy( errorString, "DDERR_NOEXCLUSIVEMODE" );
-	 break;
-	 
-    case DDERR_NOFLIPHW:
-	 strcpy( errorString, "DDERR_NOFLIPHW" );
-	 break;
-	 
-    case DDERR_NOGDI:
-	 strcpy( errorString, "DDERR_NOGDI" );
-	 break;
-	 
-    case DDERR_NOMIRRORHW:
-	 strcpy( errorString, "DDERR_NOMIRRORHW" );
-	 break;
-	 
-    case DDERR_NOTFOUND:
-	 strcpy( errorString, "DDERR_NOTFOUND" );
-	 break;
-	 
-    case DDERR_NOOVERLAYHW:
-	 strcpy( errorString, "DDERR_NOOVERLAYHW" );
-	 break;
-	 
-    case DDERR_OVERLAPPINGRECTS:
-	 strcpy( errorString, "DDERR_OVERLAPPINGRECTS" );
-	 break;
-	 
-    case DDERR_NORASTEROPHW:
-	 strcpy( errorString, "DDERR_NORASTEROPHW" );
-	 break;
-	 
-    case DDERR_NOROTATIONHW:
-	 strcpy( errorString, "DDERR_NOROTATIONHW" );
-	 break;
-	 
-    case DDERR_NOSTRETCHHW:
-	 strcpy( errorString, "DDERR_NOSTRETCHHW" );
-	 break;
-	 
-    case DDERR_NOT4BITCOLOR:
-	 strcpy( errorString, "DDERR_NOT4BITCOLOR" );
-	 break;
-	 
-    case DDERR_NOT4BITCOLORINDEX:
-	 strcpy( errorString, "DDERR_NOT4BITCOLORINDEX" );
-	 break;
-	 
-    case DDERR_NOT8BITCOLOR:
-	 strcpy( errorString, "DDERR_NOT8BITCOLOR" );
-	 break;
-	 
-    case DDERR_NOTEXTUREHW:
-	 strcpy( errorString, "DDERR_NOTEXTUREHW" );
-	 break;
-	 
-    case DDERR_NOVSYNCHW:
-	 strcpy( errorString, "DDERR_NOVSYNCHW" );
-	 break;
-	 
-    case DDERR_NOZBUFFERHW:
-	 strcpy( errorString, "DDERR_NOZBUFFERHW" );
-	 break;
-
-    case DDERR_NOZOVERLAYHW:
-	 strcpy( errorString, "DDERR_NOZOVERLAYHW" );
-	 break;
-	 
-    case DDERR_OUTOFCAPS:
-	 strcpy( errorString, "DDERR_OUTOFCAPS" );
-	 break;
-	 
-    case DDERR_OUTOFMEMORY:
-	 strcpy( errorString, "DDERR_OUTOFMEMORY" );
-	 break;
-	 
-    case DDERR_OUTOFVIDEOMEMORY:
-	 strcpy( errorString, "DDERR_OUTOFVIDEOMEMORY" );
-	 break;
-	 
-    case DDERR_OVERLAYCANTCLIP:
-	 strcpy( errorString, "DDERR_OVERLAYCANTCLIP" );
-	 break;
-	 
-    case DDERR_OVERLAYCOLORKEYONLYONEACTIVE:
-	 strcpy( errorString, "DDERR_OVERLAYCOLORKEYONLYONEACTIVE" );
-	 break;
-	 
-    case DDERR_PALETTEBUSY:
-	 strcpy( errorString, "DDERR_PALETTEBUSY" );
-	 break;
-	 
-    case DDERR_COLORKEYNOTSET:
-	 strcpy( errorString, "DDERR_COLORKEYNOTSET" );
-	 break;
-	 
-    case DDERR_SURFACEALREADYATTACHED:
-	 strcpy( errorString, "DDERR_SURFACEALREADYATTACHED" );
-	 break;
-	 
-    case DDERR_SURFACEALREADYDEPENDENT:
-	 strcpy( errorString, "DDERR_SURFACEALREADYDEPENDENT" );
-	 break;
-	 
-    case DDERR_SURFACEBUSY:
-	 strcpy( errorString, "DDERR_SURFACEBUSY" );
-	 break;
-	 
-    case DDERR_CANTLOCKSURFACE:
-	 strcpy( errorString, "DDERR_CANTLOCKSURFACE" );
-	 break;
-
-    case DDERR_SURFACEISOBSCURED:
-	 strcpy( errorString, "DDERR_SURFACEISOBSCURED" );
-	 break;
-
-    case DDERR_SURFACELOST:
-	 strcpy( errorString, "DDERR_SURFACELOST" );
-	 break;
-	 
-    case DDERR_SURFACENOTATTACHED:
-	 strcpy( errorString, "DDERR_SURFACENOTATTACHED" );
-	 break;
-	 
-    case DDERR_TOOBIGHEIGHT:
-	 strcpy( errorString, "DDERR_TOOBIGHEIGHT" );
-	 break;
-	 
-    case DDERR_TOOBIGSIZE:
-	 strcpy( errorString, "DDERR_TOOBIGSIZE" );
-	 break;
-	 
-    case DDERR_TOOBIGWIDTH:
-	 strcpy( errorString, "DDERR_TOOBIGWIDTH" );
-	 break;
-	 
-    case DDERR_UNSUPPORTED:
-	 strcpy( errorString, "DDERR_UNSUPPORTED" );
-	 break;
-	 
-    case DDERR_UNSUPPORTEDFORMAT:
-	 strcpy( errorString, "DDERR_UNSUPPORTEDFORMAT" );
-	 break;
-	 
-    case DDERR_UNSUPPORTEDMASK:
-	 strcpy( errorString, "DDERR_UNSUPPORTEDMASK" );
-	 break;
-	 
-    case DDERR_INVALIDSTREAM:
-	 strcpy( errorString, "DDERR_INVALIDSTREAM" );
-	 break;
-	 
-    case DDERR_VERTICALBLANKINPROGRESS:
-	 strcpy( errorString, "DDERR_VERTICALBLANKINPROGRESS" );
-	 break;
-	 
-    case DDERR_WASSTILLDRAWING:
-	 strcpy( errorString, "DDERR_WASSTILLDRAWING" );
-	 break;
-	 
-    case DDERR_XALIGN:
-	 strcpy( errorString, "DDERR_XALIGN" );
-	 break;
-	 
-    case DDERR_INVALIDDIRECTDRAWGUID:
-	 strcpy( errorString, "DDERR_INVALIDDIRECTDRAWGUID" );
-	 break;
-	 
-    case DDERR_DIRECTDRAWALREADYCREATED:
-	 strcpy( errorString, "DDERR_DIRECTDRAWALREADYCREATED" );
-	 break;
-	 
-    case DDERR_NODIRECTDRAWHW:
-	 strcpy( errorString, "DDERR_NODIRECTDRAWHW" );
-	 break;
-	 
-    case DDERR_PRIMARYSURFACEALREADYEXISTS:
-	 strcpy( errorString, "DDERR_PRIMARYSURFACEALREADYEXISTS" );
-	 break;
-	 
-    case DDERR_NOEMULATION:
-	 strcpy( errorString, "DDERR_NOEMULATION" );
-	 break;
-	 
-    case DDERR_REGIONTOOSMALL:
-	 strcpy( errorString, "DDERR_REGIONTOOSMALL" );
-	 break;
-	 
-    case DDERR_CLIPPERISUSINGHWND:
-	 strcpy( errorString, "DDERR_CLIPPERISUSINGHWND" );
-	 break;
-	 
-    case DDERR_NOCLIPPERATTACHED:
-	 strcpy( errorString, "DDERR_NOCLIPPERATTACHED" );
-	 break;
-	 
-    case DDERR_NOHWND:
-	 strcpy( errorString, "DDERR_NOHWND" );
-	 break;
-	 
-    case DDERR_HWNDSUBCLASSED:
-	 strcpy( errorString, "DDERR_HWNDSUBCLASSED" );
-	 break;
-	 
-    case DDERR_HWNDALREADYSET:
-	 strcpy( errorString, "DDERR_HWNDALREADYSET" );
-	 break;
-	 
-    case DDERR_NOPALETTEATTACHED:
-	 strcpy( errorString, "DDERR_NOPALETTEATTACHED" );
-	 break;
-	 
-    case DDERR_NOPALETTEHW:
-	 strcpy( errorString, "DDERR_NOPALETTEHW" );
-	 break;
-	 
-    case DDERR_BLTFASTCANTCLIP:
-         strcpy( errorString, "DDERR_BLTFASTCANTCLIP" );
-         break;
-
-      case DDERR_NOBLTHW:
-         strcpy( errorString, "DDERR_NOBLTHW" );
-         break;
-
-      case DDERR_NODDROPSHW:
-         strcpy( errorString, "DDERR_NODDROPSHW" );
-         break;
-
-      case DDERR_OVERLAYNOTVISIBLE:
-         strcpy( errorString, "DDERR_OVERLAYNOTVISIBLE" );
-         break;
-
-      case DDERR_NOOVERLAYDEST:
-         strcpy( errorString, "DDERR_NOOVERLAYDEST" );
-         break;
-
-      case DDERR_INVALIDPOSITION:
-         strcpy( errorString, "DDERR_INVALIDPOSITION" );
-         break;
-
-      case DDERR_NOTAOVERLAYSURFACE:
-         strcpy( errorString, "DDERR_NOTAOVERLAYSURFACE" );
-         break;
-
-      case DDERR_EXCLUSIVEMODEALREADYSET:
-         strcpy( errorString, "DDERR_EXCLUSIVEMODEALREADYSET" );
-         break;
-
-      case DDERR_NOTFLIPPABLE:
-         strcpy( errorString, "DDERR_NOTFLIPPABLE" );
-         break;
-
-      case DDERR_CANTDUPLICATE:
-         strcpy( errorString, "DDERR_CANTDUPLICATE" );
-         break;
-
-      case DDERR_NOTLOCKED:
-         strcpy( errorString, "DDERR_NOTLOCKED" );
-         break;
-
-      case DDERR_CANTCREATEDC:
-         strcpy( errorString, "DDERR_CANTCREATEDC" );
-         break;
-
-      case DDERR_NODC:
-         strcpy( errorString, "DDERR_NODC" );
-         break;
-
-      case DDERR_WRONGMODE:
-         strcpy( errorString, "DDERR_WRONGMODE" );
-         break;
-
-      case DDERR_IMPLICITLYCREATED:
-         strcpy( errorString, "DDERR_IMPLICITLYCREATED" );
-         break;
-
-      case DDERR_NOTPALETTIZED:
-         strcpy( errorString, "DDERR_NOTPALETTIZED" );
-         break;
-
-      case DDERR_UNSUPPORTEDMODE:
-         strcpy( errorString, "DDERR_UNSUPPORTEDMODE" );
-         break;
-
-      case DDERR_NOMIPMAPHW:
-         strcpy( errorString, "DDERR_NOMIPMAPHW" );
-         break;
-
-      case DDERR_INVALIDSURFACETYPE:
-         strcpy( errorString, "DDERR_INVALIDSURFACETYPE" );
-         break;
-
-      case DDERR_NOOPTIMIZEHW:
-         strcpy( errorString, "DDERR_NOOPTIMIZEHW" );
-         break;
-
-      case DDERR_NOTLOADED:
-         strcpy( errorString, "DDERR_NOTLOADED" );
-         break;
-
-      case DDERR_NOFOCUSWINDOW:
-         strcpy( errorString, "DDERR_NOFOCUSWINDOW" );
-         break;
-
-      case DDERR_DCALREADYCREATED:
-         strcpy( errorString, "DDERR_DCALREADYCREATED" );
-         break;
-
-      case DDERR_NONONLOCALVIDMEM:
-         strcpy( errorString, "DDERR_NONONLOCALVIDMEM" );
-         break;
-
-      case DDERR_CANTPAGELOCK:
-         strcpy( errorString, "DDERR_CANTPAGELOCK" );
-         break;
-
-      case DDERR_CANTPAGEUNLOCK:
-         strcpy( errorString, "DDERR_CANTPAGEUNLOCK" );
-         break;
-
-      case DDERR_NOTPAGELOCKED:
-         strcpy( errorString, "DDERR_NOTPAGELOCKED" );
-         break;
-
-      case DDERR_MOREDATA:
-         strcpy( errorString, "DDERR_MOREDATA" );
-         break;
-
-      case DDERR_EXPIRED:
-         strcpy( errorString, "DDERR_EXPIRED" );
-         break;
-
-      case DDERR_VIDEONOTACTIVE:
-         strcpy( errorString, "DDERR_VIDEONOTACTIVE" );
-         break;
-
-      case DDERR_DEVICEDOESNTOWNSURFACE:
-         strcpy( errorString, "DDERR_DEVICEDOESNTOWNSURFACE" );
-         break;
-
-      case DDERR_NOTINITIALIZED:
-         strcpy( errorString, "DDERR_NOTINITIALIZED" );
-         break;
-
-      default:
-         strcpy( errorString, "<unknown error code>" );
-         break;
-   }
-
-   return &errorString[0];
-} 
diff --git a/src/mesa/drivers/d3d/D3Dvbrender.c b/src/mesa/drivers/d3d/D3Dvbrender.c
deleted file mode 100644
index 09857f1dc8..0000000000
--- a/src/mesa/drivers/d3d/D3Dvbrender.c
+++ /dev/null
@@ -1,2149 +0,0 @@
-/*===========================================================================*/
-/*                                                                           */
-/* Mesa-3.0 DirectX 6 Driver                                                 */
-/*                                                                           */
-/* By Leigh McRae                                                            */
-/*                                                                           */
-/* http://www.altsoftware.com/                                               */
-/*                                                                           */
-/* Copyright (c) 1999-1998  alt.software inc.  All Rights Reserved           */
-/*===========================================================================*/
-#include <stdio.h>
-#include "clip.h"
-#include "context.h"
-#include "light.h"
-#include "lines.h"
-#include "macros.h"
-#include "matrix.h"
-#include "pb.h"
-#include "points.h"
-#include "mtypes.h"
-#include "vb.h"
-#include "vbrender.h"
-#include "xform.h"
-#include "D3DMesa.h"
-
-static void SetRenderStates( GLcontext *ctx );
-static void DebugRenderStates( GLcontext *ctx, BOOL bForce );
-
-static void RenderPointsVB( GLcontext *ctx, GLuint start, GLuint end );
-static void RenderTriangleVB( GLcontext *ctx, GLuint start, GLuint end );
-static void RenderTriangleFanVB( GLcontext *ctx, GLuint start, GLuint end );
-static void RenderTriangleStripVB( GLcontext *ctx, GLuint start, GLuint end );
-static void RenderQuadVB( GLcontext *ctx, GLuint start, GLuint end );
-static void RenderQuad( GLcontext *ctx, GLuint v1, GLuint v2, GLuint v3, GLuint v4, GLuint pv );
-void		RenderOneTriangle( GLcontext *ctx, GLuint v1, GLuint v2, GLuint v3, GLuint pv );
-void 	RenderOneLine( GLcontext *ctx, GLuint v1, GLuint v2, GLuint pv );
-
-/*  I went with a D3D vertex buffer that is 6 times that of the Mesa one */
-/* instead of having the D3D one flush when its full.  This way Mesa will*/
-/* handle all the flushing.  I need x6 as points can use 4 vertex each.  */
-D3DTLVERTEX 	D3DTLVertices[ (VB_MAX*6) ];
-GLuint   		VList[VB_SIZE];
-/*===========================================================================*/
-/* Compute Z offsets for a polygon with plane defined by (A,B,C,D)           */
-/* D is not needed. TODO: Currently we are calculating this but not using it.*/
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-static void OffsetPolygon( GLcontext *ctx, GLfloat a, GLfloat b, GLfloat c )
-{
-  GLfloat	ac,
-          bc,
-          m,
-          offset;
-
-  DPF(( DBG_FUNC, "OffsetPolygon();" ));
-
-  if ( (c < 0.001F) && (c > - 0.001F) )
-  {
-    /* Prevents underflow problems. */
-    ctx->PointZoffset   = 0.0F;
-    ctx->LineZoffset    = 0.0F;
-    ctx->PolygonZoffset = 0.0F;
-  }
-  else
-  {
-    ac = a / c;
-    bc = b / c;
-    if ( ac < 0.0F )
-	 ac = -ac;
-    if ( bc<0.0F )
-	 bc = -bc;
-    m = MAX2( ac, bc );     /* m = sqrt( ac*ac + bc*bc ); */
-
-    offset = (m * ctx->Polygon.OffsetFactor + ctx->Polygon.OffsetUnits);
-    ctx->PointZoffset   = ctx->Polygon.OffsetPoint ? offset : 0.0F;
-    ctx->LineZoffset    = ctx->Polygon.OffsetLine  ? offset : 0.0F;
-    ctx->PolygonZoffset = ctx->Polygon.OffsetFill  ? offset : 0.0F;
-  }
-
-  DPF(( DBG_PRIM_INFO, "OffsetPolygon: %f", offset ));
-}
-/*===========================================================================*/
-/*  Compute signed area of the n-sided polgyon specified by vertices         */
-/* vb->Win[] and vertex list vlist[].                                        */
-/*  A clockwise polygon will return a negative area.  A counter-clockwise    */
-/* polygon will return a positive area.  I have changed this function to     */
-/* actually calculate twice the area as its faster and still gives the sign. */
-/*===========================================================================*/
-/* RETURN: signed area of the polgon.                                        */
-/*===========================================================================*/
-static GLfloat PolygonArea( const struct vertex_buffer *vb, GLuint n, const GLuint vlist[] )
-{
-  GLfloat	area;
-  GLuint  i;
-
-  DPF(( DBG_FUNC, "PolygonArea();" ));
-
-#define  j0    vlist[i]
-#define  j1    vlist[(i+1)%n]
-#define  x0    vb->Win[j0][0]
-#define  y0    vb->Win[j0][1]
-#define  x1    vb->Win[j1][0]
-#define  y1    vb->Win[j1][1]
-
-  /* area = sum of trapezoids */
-  for( i = 0, area = 0.0; i < n; i++ )
-    area += ((x0 - x1) * (y0 + y1));  /* Note: no divide by two here! */
-
-#undef x0
-#undef y0
-#undef x1
-#undef y1
-#undef j1
-#undef j0
-
-  // TODO: I don't see the point or * 0.5 as we just want the sign...
-  return area;
-}
-/*===========================================================================*/
-/*  Render a polygon that needs clipping on at least one vertex. The function*/
-/* will first clip the polygon to any user clipping planes then clip to the  */
-/* viewing volume.  The final polygon will be draw as single triangles that  */
-/* first need minor proccessing (culling, offset, etc) before we draw the    */
-/* polygon as a fan.  NOTE: the fan is draw as single triangles as its not   */
-/* formed sequentaly in the VB but is in the vlist[].                        */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-static void RenderClippedPolygon( GLcontext *ctx, GLuint n, GLuint vlist[] )
-{
-  struct vertex_buffer	*VB = ctx->VB;
-  GLfloat 			(*win)[3] = VB->Win,
-                         *proj = ctx->ProjectionMatrix,
-                         ex, ey,
-                         fx, fy, c,
-	                    wInv;
-  GLuint				index,
-	                    pv,
-                         facing;
-
-  DPF(( DBG_FUNC, "RenderClippedPolygon();" ));
-
-  DPF(( DBG_PRIM_INFO, "RenderClippedtPolygon( %d )", n ));
-
-  /* Which vertex dictates the color when flat shading. */
-  pv = (ctx->Primitive==GL_POLYGON) ? vlist[0] : vlist[n-1];
-
-  /*  Clipping may introduce new vertices.  New vertices will be stored in */
-  /* the vertex buffer arrays starting with location VB->Free.  After we've*/
-  /* rendered the polygon, these extra vertices can be overwritten.        */
-  VB->Free = VB_MAX;
-
-  /* Clip against user clipping planes in eye coord space. */
-  if ( ctx->Transform.AnyClip )
-  {
-    n = gl_userclip_polygon( ctx, n, vlist );
-    if ( n < 3 )
-	 return;
-
-    /* Transform vertices from eye to clip coordinates:  clip = Proj * eye */
-    for( index = 0; index < n; index++ )
-    {
-	 TRANSFORM_POINT( VB->Clip[vlist[index]], proj, VB->Eye[vlist[index]] );
-    }
-  }
-
-  /* Clip against view volume in clip coord space */
-  n = gl_viewclip_polygon( ctx, n, vlist );
-  if ( n < 3 )
-    return;
-
-  /* Transform new vertices from clip to ndc to window coords.    */
-  /* ndc = clip / W    window = viewport_mapping(ndc)             */
-  /* Note that window Z values are scaled to the range of integer */
-  /* depth buffer values.                                         */
-
-  /* Only need to compute window coords for new vertices */
-  for( index = VB_MAX; index < VB->Free; index++ )
-  {
-    if ( VB->Clip[index][3] != 0.0F )
-    {
-	 wInv = 1.0F / VB->Clip[index][3];
-
-	 win[index][0] = VB->Clip[index][0] * wInv * ctx->Viewport.Sx + ctx->Viewport.Tx;
-	 win[index][1] = VB->Clip[index][1] * wInv * ctx->Viewport.Sy + ctx->Viewport.Ty;
-	 win[index][2] = VB->Clip[index][2] * wInv * ctx->Viewport.Sz + ctx->Viewport.Tz;
-    }
-    else
-    {
-	 /* Can't divide by zero, so... */
-	 win[index][0] = win[index][1] = win[index][2] = 0.0F;
-    }
-  }
-
-  /* Draw filled polygon as a triangle fan */
-  for( index = 2; index < n; index++ )
-  {
-    /* Compute orientation of triangle */
-    ex = win[vlist[index-1]][0] - win[vlist[0]][0];
-    ey = win[vlist[index-1]][1] - win[vlist[0]][1];
-    fx = win[vlist[index]][0]   - win[vlist[0]][0];
-    fy = win[vlist[index]][1]   - win[vlist[0]][1];
-    c = (ex * fy) - (ey * fx);
-
-    /* polygon is perpindicular to view plane, don't draw it */
-    if ( (c == 0.0F) && !ctx->Polygon.Unfilled )
-	 continue;
-
-    /* Backface culling. */
-    facing = (c < 0.0F) ^ ctx->Polygon.FrontBit;
-    if ( (facing + 1) & ctx->Polygon.CullBits )
-	 continue;
-
-    if ( ctx->IndirectTriangles & DD_TRI_LIGHT_TWOSIDE )
-    {
-	 if ( facing == 1 )
-	 {
-	   /* use back color */
-	   VB->Color   = VB->Bcolor;
-	   VB->Specular= VB->Bspec;
-	 }
-	 else
-	 {
-	   /* use front color */
-	   VB->Color   = VB->Fcolor;
-	   VB->Specular= VB->Fspec;
-	 }
-    }
-
-    if ( ctx->IndirectTriangles & DD_TRI_OFFSET )
-    {
-	 /* finish computing plane equation of polygon, compute offset */
-	 GLfloat fz = win[vlist[index]][2]   - win[vlist[0]][2];
-	 GLfloat ez = win[vlist[index-1]][2] - win[vlist[0]][2];
-	 GLfloat a = (ey * fz) - (ez * fy);
-	 GLfloat b = (ez * fx) - (ex * fz);
-	 OffsetPolygon( ctx, a, b, c );
-    }
-    RenderOneTriangle( ctx, vlist[0], vlist[index-1], vlist[index], pv );
-  }
-}
-/*===========================================================================*/
-/*  This function gets called when either the vertex buffer is full or glEnd */
-/* has been called.  If the we aren't in rendering mode (FEEDBACK) then I    */
-/* pass the vertex buffer back to Mesa to deal with by returning FALSE.      */
-/*  If I can render the primitive types in the buffer directly then I will   */
-/* return TRUE after I render the vertex buffer and reset the vertex buffer. */
-/*                                                                           */
-/* TODO: I don't handle the special case of when the vertex buffer is full   */
-/*      and we have a primitive that bounds this buffer and the next one to  */
-/*      come.  I'm not sure right now if Mesa handles this for me...         */
-/*===========================================================================*/
-/* RETURN: TRUE, FALSE.                                                      */
-/*===========================================================================*/
-GLboolean RenderVertexBuffer( GLcontext *ctx, GLboolean allDone )
-{
-  struct vertex_buffer	*VB = ctx->VB;
-  GLuint 		    		index,
-	                    vlist[VB_SIZE];
-
-  DPF(( DBG_FUNC, "RenderVertexBuffer();" ));
-
-  /* We only need to hook actual tri's that need rendering. */
-  if ( ctx->RenderMode != GL_RENDER )
-  {
-	   //	   (ctx->Visual->AccumBits > 0) )
-	   //	   (ctx->Visual->StencilBits > 0) )
-    DPF(( DBG_PRIM_INFO, "Passing VB back to Mesa" ));
-    return FALSE;
-  }
-
-  /*  I'm going to set the states here so that all functions will  */
-  /* be assured to have the right states.  If Mesa's vertex bufefr */
-  /* function calls one of my primitive functions (TRI,POINT,LINE) */
-  /* it will need the right states.  So instead of doing it in the */
-  /* primitive function I will always do it here at risk of some   */
-  /* slow down to some cases...                                    */
-  SetRenderStates( ctx );
-
-  switch( ctx->Primitive )
-  {
-    case GL_POINTS:
-	 DPF(( DBG_PRIM_INFO, "GL_POINTS( %d )", VB->Count ));
-	 RenderPointsVB( ctx, 0, VB->Count );
-	 break;
-
-    case GL_LINES:
-    case GL_LINE_STRIP:
-    case GL_LINE_LOOP:
-	 /*  Not supported functions yet so pass back that we failed to */
-	 /* render the vertex buffer and Mesa will have to do it.       */
-	 DPF(( DBG_PRIM_INFO, "GL_LINE_?( %d )", VB->Count ));
-	 return FALSE;
-
-    case GL_TRIANGLES:
-	 if ( VB->Count < 3 )
-	 {
-	   DPF(( DBG_PRIM_WARN, "GL_TRIANGLES( %d )", VB->Count ));
-	   return FALSE;
-	 }
-
-	 DPF(( DBG_PRIM_INFO, "GL_TRIANGLES( %d )", VB->Count ));
-      RenderTriangleVB( ctx, 0, VB->Count );
-	 break;
-
-    case GL_TRIANGLE_STRIP:
-	 if ( VB->Count < 3 )
-	 {
-	   DPF(( DBG_PRIM_WARN, "GL_TRIANGLE_STRIP( %d )", VB->Count ));
-	   return FALSE;
-	 }
-
-	 DPF(( DBG_PRIM_INFO, "GL_TRIANGLE_STRIP( %d )", VB->Count ));
-	 RenderTriangleStripVB( ctx, 0, VB->Count );
-	 break;
-
-    case GL_TRIANGLE_FAN:
-	 if ( VB->Count < 3 )
-	 {
-	   DPF(( DBG_PRIM_WARN, "GL_TRIANGLE_FAN( %d )", VB->Count ));
-	   return FALSE;
-	 }
-
-	 DPF(( DBG_PRIM_INFO, "GL_TRIANGLE_FAN( %d )", VB->Count ));
-	 RenderTriangleFanVB( ctx, 0, VB->Count );
-	 break;
-
-    case GL_QUADS:
-	 if ( VB->Count < 4 )
-	 {
-	   DPF(( DBG_PRIM_WARN, "GL_QUADS( %d )", VB->Count ));
-	   return FALSE;
-	 }
-
-	  DPF(( DBG_PRIM_INFO, "GL_QUADS( %d )", VB->Count ));
-	  RenderQuadVB( ctx, 0, VB->Count );
-	  break;
-
-    case GL_QUAD_STRIP:
-	 if ( VB->Count < 4 )
-	 {
-	   DPF(( DBG_PRIM_WARN, "GL_QUAD_STRIP( %d )", VB->Count ));
-	   return FALSE;
-	 }
-
-	 DPF(( DBG_PRIM_INFO, "GL_QUAD_STRIP( %d )", VB->Count ));
-
-	 if ( VB->ClipOrMask )
-	 {
-	   for( index = 3; index < VB->Count; index += 2 )
-	   {
-		if ( VB->ClipMask[index-3] & VB->ClipMask[index-2] & VB->ClipMask[index-1] & VB->ClipMask[index] & CLIP_ALL_BITS )
-		{
-		   /* All points clipped by common plane */
-		  DPF(( DBG_PRIM_WARN, "GL_QUAD_STRIP( %d )", VB->Count ));
-		  continue;
-		}
-		else if ( VB->ClipMask[index-3] | VB->ClipMask[index-2] | VB->ClipMask[index-1] | VB->ClipMask[index] )
-		{
-		  vlist[0] = index - 3;
-		  vlist[1] = index - 2;
-		  vlist[2] = index;
-		  vlist[3] = index - 1;
-		  RenderClippedPolygon( ctx, 4, vlist );
-		}
-		else
-		{
-		  RenderQuad( ctx, (index-3), (index-2), index, (index-1), index );
-		}	
-	   }
-	 }
-	 else
-	 {
-	   /* No clipping needed */
-	   for( index = 3; index < VB->Count; index += 2 )
-		RenderQuad( ctx, (index-3), (index-2), index, (index-1), index );
-	 }	
-	 break;
-	
-    case GL_POLYGON:
-	 if ( VB->Count < 3 )
-	 {
-	   DPF(( DBG_PRIM_WARN, "GL_POLYGON( %d )", VB->Count ));
-	   return FALSE;
-	 }
-
-	 DPF(( DBG_PRIM_INFO, "GL_POLYGON( %d )", VB->Count ));
-
-	 /* All points clipped by common plane, draw nothing */
-	 if ( !(VB->ClipAndMask & CLIP_ALL_BITS) )
-	   RenderTriangleFanVB( ctx, 0, VB->Count );
-	 break;
-
-    default:
-	 /* should never get here */
-	 _mesa_problem( ctx, "invalid mode in gl_render_vb" );
-   }
-
-  DPF(( DBG_PRIM_INFO, "ResetVB" ));
-
-  /* We return TRUE to indicate we rendered the VB. */
-  gl_reset_vb( ctx, allDone );
-  return TRUE;
-}
-/*===========================================================================*/
-/*  This function will render the current vertex buffer as triangles.  The   */
-/* buffer has to be able to be rendered directly.  This means that we are    */
-/* filled, no offsets, no culling and one sided rendering.  Also we must be  */
-/* in render mode of course.                                                 */
-/*  First I will fill the global D3D vertice buffer.  Next I will set all the*/
-/* states for D3D based on the current OGL state.  Finally I pass the D3D VB */
-/* to the wrapper that call DrawPrimitives.                                  */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-static void RenderTriangleVB( GLcontext *ctx, GLuint start, GLuint end )
-{
-  D3DMESACONTEXT      	*pContext = (D3DMESACONTEXT *)ctx->DriverCtx;
-  struct vertex_buffer 	*VB = ctx->VB;
-  int                    index,
-                         cVertex,
-                         height = (pContext->pShared->rectW.bottom - pContext->pShared->rectW.top);
-   DWORD                	dwPVColor;
-   GLfloat              	ex, ey,
-                         fx, fy, c;
-   GLuint               	facing;
-
-   DPF(( DBG_FUNC, "RenderTriangleVB" ));
-
-   if ( !VB->ClipOrMask )
-   {
-	DPF(( DBG_PRIM_INFO, "DirectTriangles( %d )", (end-start) ));
-	for( index = start, cVertex = 0; index < end; )
-	{
-	  dwPVColor = (VB->Color[(index+2)][3]<<24) | (VB->Color[(index+2)][0]<<16) | (VB->Color[(index+2)][1]<<8) | VB->Color[(index+2)][2];
-
-	  /*=====================================*/
-	  /* Populate the the triangle vertices. */
-	  /*=====================================*/
-	  D3DTLVertices[cVertex].sx     = D3DVAL( VB->Win[index][0] );
-	  D3DTLVertices[cVertex].sy     = D3DVAL( (height - VB->Win[index][1]) );
-	  D3DTLVertices[cVertex].sz     = D3DVAL( VB->Win[index][2] );
-	  D3DTLVertices[cVertex].tu     = D3DVAL( VB->TexCoord[index][0] );
-	  D3DTLVertices[cVertex].tv     = D3DVAL( VB->TexCoord[index][1] );
-	  D3DTLVertices[cVertex].rhw    = D3DVAL( (1.0 / VB->Clip[index][3]) );
-	  D3DTLVertices[cVertex++].color= (ctx->Light.ShadeModel == GL_FLAT) ?
-	                                  dwPVColor :
-                                       (VB->Color[index][3]<<24) | (VB->Color[index][0]<<16) | (VB->Color[index][1]<<8) | VB->Color[index][2];
-	  index++;
-
-	  D3DTLVertices[cVertex].sx     = D3DVAL( VB->Win[index][0] );
-	  D3DTLVertices[cVertex].sy     = D3DVAL( (height - VB->Win[index][1]) );
-	  D3DTLVertices[cVertex].sz     = D3DVAL( VB->Win[index][2] );
-	  D3DTLVertices[cVertex].tu     = D3DVAL( VB->TexCoord[index][0] );
-	  D3DTLVertices[cVertex].tv     = D3DVAL( VB->TexCoord[index][1] );
-	  D3DTLVertices[cVertex].rhw    = D3DVAL( (1.0 / VB->Clip[index][3]) );
-	  D3DTLVertices[cVertex++].color= (ctx->Light.ShadeModel == GL_FLAT) ?
-                                       dwPVColor :
-                                       (VB->Color[index][3]<<24) | (VB->Color[index][0]<<16) | (VB->Color[index][1]<<8) | VB->Color[index][2];
-	  index++;
-
-	  D3DTLVertices[cVertex].sx     = D3DVAL( VB->Win[index][0] );
-	  D3DTLVertices[cVertex].sy     = D3DVAL( (height - VB->Win[index][1]) );
-	  D3DTLVertices[cVertex].sz     = D3DVAL( VB->Win[index][2] );
-	  D3DTLVertices[cVertex].tu     = D3DVAL( VB->TexCoord[index][0] );
-	  D3DTLVertices[cVertex].tv     = D3DVAL( VB->TexCoord[index][1] );
-	  D3DTLVertices[cVertex].rhw    = D3DVAL( (1.0 / VB->Clip[index][3]) );
-	  D3DTLVertices[cVertex++].color= dwPVColor;
-	  index++;
-	}
-   }
-   else
-   {
-#define v1     index
-#define v2     (index+1)
-#define v3     (index+2)
-
-	for( index = start, cVertex = 0; index < end; index += 3 )
-	{
-	  if ( VB->ClipMask[v1] & VB->ClipMask[v2] & VB->ClipMask[v3] & CLIP_ALL_BITS )
-	  {
-	    continue;
-	  }
-	  else if ( VB->ClipMask[v1] | VB->ClipMask[v2] | VB->ClipMask[v3] )
-	  {
-	    VList[0] = v1;
-	    VList[1] = v2;
-	    VList[2] = v3;
-	    RenderClippedPolygon( ctx, 3, VList );
-	    continue;
-	  }
-
-	  /* Compute orientation of triangle */
-	  ex = VB->Win[v2][0] - VB->Win[v1][0];
-	  ey = VB->Win[v2][1] - VB->Win[v1][1];
-	  fx = VB->Win[v3][0] - VB->Win[v1][0];
-	  fy = VB->Win[v3][1] - VB->Win[v1][1];
-	  c = (ex * fy) - (ey * fx);
-
-	  /* polygon is perpindicular to view plane, don't draw it */
-	  if ( (c == 0.0F) && !ctx->Polygon.Unfilled )
-	    continue;
-
-	  /* Backface culling. */
-	  facing = (c < 0.0F) ^ ctx->Polygon.FrontBit;
-	  if ( (facing + 1) & ctx->Polygon.CullBits )
-	    continue;
-
-	  if ( ctx->IndirectTriangles & DD_TRI_LIGHT_TWOSIDE )
-	  {
-	    if ( facing == 1 )
-	    {
-		 /* use back color */
-		 VB->Color   = VB->Bcolor;
-		 VB->Specular= VB->Bspec;
-	    }
-	    else
-	    {
-		 /* use front color */
-		 VB->Color   = VB->Fcolor;
-		 VB->Specular= VB->Fspec;
-	    }
-	  }
-
-	  if ( ctx->IndirectTriangles & DD_TRI_OFFSET )
-	  {
-	    /* Finish computing plane equation of polygon, compute offset */
-	    GLfloat fz = VB->Win[v3][2] - VB->Win[v1][2];
-	    GLfloat ez = VB->Win[v2][2] - VB->Win[v1][2];
-	    GLfloat a = (ey * fz) - (ez * fy);
-	    GLfloat b = (ez * fx) - (ex * fz);
-	    OffsetPolygon( ctx, a, b, c );
-	  }
-
-	  /*=====================================*/
-	  /* Populate the the triangle vertices. */
-	  /*=====================================*/
-	  /* Solve the prevoking vertex color as we need it for the 3rd triangle and flat shading. */
-	  dwPVColor = (VB->Color[v3][3]<<24) | (VB->Color[v3][0]<<16) | (VB->Color[v3][1]<<8) | VB->Color[v3][2];
-
-	  D3DTLVertices[cVertex].sx     = D3DVAL( VB->Win[v1][0] );
-	  D3DTLVertices[cVertex].sy     = D3DVAL( (height - VB->Win[v1][1]) );
-	  D3DTLVertices[cVertex].sz     = D3DVAL( (VB->Win[v1][2] + ctx->PolygonZoffset) );
-	  D3DTLVertices[cVertex].tu     = D3DVAL( VB->TexCoord[v1][0] );
-	  D3DTLVertices[cVertex].tv     = D3DVAL( VB->TexCoord[v1][1] );
-	  D3DTLVertices[cVertex].rhw    = D3DVAL( (1.0 / VB->Clip[v1][3]) );
-	  D3DTLVertices[cVertex++].color= (ctx->Light.ShadeModel == GL_FLAT) ?
-                                       dwPVColor :
-                                       (VB->Color[v1][3]<<24) | (VB->Color[v1][0]<<16) | (VB->Color[v1][1]<<8) | VB->Color[v1][2];
-
-	  D3DTLVertices[cVertex].sx     = D3DVAL( VB->Win[v2][0] );
-	  D3DTLVertices[cVertex].sy     = D3DVAL( (height - VB->Win[v2][1]) );
-	  D3DTLVertices[cVertex].sz     = D3DVAL( (VB->Win[v2][2] + ctx->PolygonZoffset) );
-	  D3DTLVertices[cVertex].tu     = D3DVAL( VB->TexCoord[v2][0] );
-	  D3DTLVertices[cVertex].tv     = D3DVAL( VB->TexCoord[v2][1] );
-	  D3DTLVertices[cVertex].rhw    = D3DVAL( (1.0 / VB->Clip[v2][3]) );
-	  D3DTLVertices[cVertex++].color= (ctx->Light.ShadeModel == GL_FLAT) ?
-                                       dwPVColor :
-                                       (VB->Color[v2][3]<<24) | (VB->Color[v2][0]<<16) | (VB->Color[v2][1]<<8) | VB->Color[v2][2];
-
-	  D3DTLVertices[cVertex].sx     = D3DVAL( VB->Win[v3][0] );
-	  D3DTLVertices[cVertex].sy     = D3DVAL( (height - VB->Win[v3][1]) );
-	  D3DTLVertices[cVertex].sz     = D3DVAL( (VB->Win[v3][2] + ctx->PolygonZoffset) );
-	  D3DTLVertices[cVertex].tu     = D3DVAL( VB->TexCoord[v3][0] );
-	  D3DTLVertices[cVertex].tv     = D3DVAL( VB->TexCoord[v3][1] );
-	  D3DTLVertices[cVertex].rhw    = D3DVAL( (1.0 / VB->Clip[v3][3]) );
-	  D3DTLVertices[cVertex++].color= dwPVColor;
-	}
-#undef v1
-#undef v2
-#undef v3
-   }
-
-   /* Render the converted vertex buffer. */
-   if ( cVertex > 2 )
-	DrawPrimitiveHAL( pContext->pShared, D3DPT_TRIANGLELIST, &D3DTLVertices[0], cVertex );
-}
-/*===========================================================================*/
-/*  This function will render the current vertex buffer as a triangle fan.   */
-/* The buffer has to be able to be rendered directly.  This means that we are*/
-/* filled, no offsets, no culling and one sided rendering.  Also we must be  */
-/* in render mode of course.                                                 */
-/*  First I will fill the global D3D vertice buffer.  Next I will set all the*/
-/* states for D3D based on the current OGL state.  Finally I pass the D3D VB */
-/* to the wrapper that call DrawPrimitives.                                  */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-static void RenderTriangleFanVB( GLcontext *ctx, GLuint start, GLuint end )
-{
-  D3DMESACONTEXT     	*pContext = (D3DMESACONTEXT *)ctx->DriverCtx;
-  struct vertex_buffer 	*VB = ctx->VB;
-  int                  	index,
-                         cVertex,
-                         height = (pContext->pShared->rectW.bottom - pContext->pShared->rectW.top);
-   GLfloat              	ex, ey,
-                         fx, fy, c;
-   GLuint               	facing;
-   DWORD                	dwPVColor;
-
-   DPF(( DBG_FUNC, "RenderTriangleFanVB();" ));
-
-   /* Special case that we can blast the fan without culling, offset, etc... */
-   if ( !VB->ClipOrMask && (ctx->Light.ShadeModel != GL_FLAT) )
-   {
-	DPF(( DBG_PRIM_INFO, "DirectTriangles( %d )", (end-start) ));
-
-	/* Seed the the fan. */
-	D3DTLVertices[0].sx   = D3DVAL( VB->Win[start][0] );
-	D3DTLVertices[0].sy   = D3DVAL( (height - VB->Win[start][1]) );
-	D3DTLVertices[0].sz   = D3DVAL( VB->Win[start][2] );
-	D3DTLVertices[0].tu   = D3DVAL( VB->TexCoord[start][0] );
-	D3DTLVertices[0].tv   = D3DVAL( VB->TexCoord[start][1] );
-	D3DTLVertices[0].rhw  = D3DVAL( (1.0 / VB->Clip[start][3]) );
-	D3DTLVertices[0].color= (VB->Color[start][3]<<24) | (VB->Color[start][0]<<16) | (VB->Color[start][1]<<8) | VB->Color[start][2];
-
-	/* Seed the the fan. */
-	D3DTLVertices[1].sx   = D3DVAL( VB->Win[(start+1)][0] );
-	D3DTLVertices[1].sy   = D3DVAL( (height - VB->Win[(start+1)][1]) );
-	D3DTLVertices[1].sz   = D3DVAL( VB->Win[(start+1)][2] );
-	D3DTLVertices[1].tu   = D3DVAL( VB->TexCoord[(start+1)][0] );
-	D3DTLVertices[1].tv   = D3DVAL( VB->TexCoord[(start+1)][1] );
-	D3DTLVertices[1].rhw  = D3DVAL( (1.0 / VB->Clip[(start+1)][3]) );
-	D3DTLVertices[1].color= (VB->Color[(start+1)][3]<<24) | (VB->Color[(start+1)][0]<<16) | (VB->Color[(start+1)][1]<<8) | VB->Color[(start+1)][2];
-
-	for( index = (start+2), cVertex = 2; index < end; index++, cVertex++ )
-	{
-	  /*=================================*/
-	  /* Add the next vertex to the fan. */
-	  /*=================================*/
-	  D3DTLVertices[cVertex].sx     = D3DVAL( VB->Win[index][0] );
-	  D3DTLVertices[cVertex].sy     = D3DVAL( (height - VB->Win[index][1]) );
-	  D3DTLVertices[cVertex].sz     = D3DVAL( VB->Win[index][2] );
-	  D3DTLVertices[cVertex].tu     = D3DVAL( VB->TexCoord[index][0] );
-	  D3DTLVertices[cVertex].tv     = D3DVAL( VB->TexCoord[index][1] );
-	  D3DTLVertices[cVertex].rhw    = D3DVAL( (1.0 / VB->Clip[index][3]) );
-	  D3DTLVertices[cVertex].color  = (VB->Color[index][3]<<24) | (VB->Color[index][0]<<16) | (VB->Color[index][1]<<8) | VB->Color[index][2];
-      }
-
-	/* Render the converted vertex buffer. */
-	if ( cVertex )
-	  DrawPrimitiveHAL( pContext->pShared, D3DPT_TRIANGLEFAN, &D3DTLVertices[0], cVertex );
-   }
-   else
-   {
-#define v1     start
-#define v2     (index-1)
-#define v3     index
-
-	for( index = (start+2), cVertex = 0; index < end; index++ )
-	{
-	  if ( VB->ClipOrMask )
-	  {
-	    /* All points clipped by common plane */
-	    if ( VB->ClipMask[v1] & VB->ClipMask[v2] & VB->ClipMask[v3] & CLIP_ALL_BITS )
-	    {
-		 continue;
-	    }
-	    else if ( VB->ClipMask[v1] | VB->ClipMask[v2] | VB->ClipMask[v3] )
-	    {
-		 VList[0] = v1;
-		 VList[1] = v2;
-		 VList[2] = v3;
-		 RenderClippedPolygon( ctx, 3, VList );
-		 continue;
-	    }
-	  }
-
-	  /* Compute orientation of triangle */
-	  ex = VB->Win[v2][0] - VB->Win[v1][0];
-	  ey = VB->Win[v2][1] - VB->Win[v1][1];
-	  fx = VB->Win[v3][0] - VB->Win[v1][0];
-	  fy = VB->Win[v3][1] - VB->Win[v1][1];
-	  c = (ex * fy) - (ey * fx);
-
-	  /* polygon is perpindicular to view plane, don't draw it */
-	  if ( (c == 0.0F) && !ctx->Polygon.Unfilled )
-	    continue;
-
-	  /* Backface culling. */
-	  facing = (c < 0.0F) ^ ctx->Polygon.FrontBit;
-	  if ( (facing + 1) & ctx->Polygon.CullBits )
-	    continue;
-
-	  if ( ctx->IndirectTriangles & DD_TRI_OFFSET )
-	  {
-	    /* Finish computing plane equation of polygon, compute offset */
-	    GLfloat fz = VB->Win[v3][2] - VB->Win[v1][2];
-	    GLfloat ez = VB->Win[v2][2] - VB->Win[v1][2];
-	    GLfloat a = (ey * fz) - (ez * fy);
-	    GLfloat b = (ez * fx) - (ex * fz);
-	    OffsetPolygon( ctx, a, b, c );
-	  }
-
-	  /*=====================================*/
-	  /* Populate the the triangle vertices. */
-	  /*=====================================*/
-	  dwPVColor = (VB->Color[v3][3]<<24) | (VB->Color[v3][0]<<16) | (VB->Color[v3][1]<<8) | VB->Color[v3][2];
-
-	  D3DTLVertices[cVertex].sx     = D3DVAL( VB->Win[v1][0] );
-	  D3DTLVertices[cVertex].sy     = D3DVAL( (height - VB->Win[v1][1]) );
-	  D3DTLVertices[cVertex].sz     = D3DVAL( (VB->Win[v1][2] + ctx->PolygonZoffset) );
-	  D3DTLVertices[cVertex].tu     = D3DVAL( VB->TexCoord[v1][0] );
-	  D3DTLVertices[cVertex].tv     = D3DVAL( VB->TexCoord[v1][1] );
-	  D3DTLVertices[cVertex].rhw    = D3DVAL( (1.0 / VB->Clip[v1][3]) );
-	  D3DTLVertices[cVertex++].color= (ctx->Light.ShadeModel == GL_FLAT) ? dwPVColor :
-                                         (VB->Color[v1][3]<<24) | (VB->Color[v1][0]<<16) | (VB->Color[v1][1]<<8) | VB->Color[v1][2];
-
-	  D3DTLVertices[cVertex].sx     = D3DVAL( VB->Win[v2][0] );
-	  D3DTLVertices[cVertex].sy     = D3DVAL( (height - VB->Win[v2][1]) );
-	  D3DTLVertices[cVertex].sz     = D3DVAL( (VB->Win[v2][2] + ctx->PolygonZoffset)  );
-	  D3DTLVertices[cVertex].tu     = D3DVAL( VB->TexCoord[v2][0] );
-	  D3DTLVertices[cVertex].tv     = D3DVAL( VB->TexCoord[v2][1] );
-	  D3DTLVertices[cVertex].rhw    = D3DVAL( (1.0 / VB->Clip[v2][3]) );
-	  D3DTLVertices[cVertex++].color= (ctx->Light.ShadeModel == GL_FLAT) ? dwPVColor :
-                                         (VB->Color[v2][3]<<24) | (VB->Color[v2][0]<<16) | (VB->Color[v2][1]<<8) | VB->Color[v2][2];
-
-	  D3DTLVertices[cVertex].sx     = D3DVAL( VB->Win[v3][0] );
-	  D3DTLVertices[cVertex].sy     = D3DVAL( (height - VB->Win[v3][1]) );
-	  D3DTLVertices[cVertex].sz     = D3DVAL( (VB->Win[v3][2] + ctx->PolygonZoffset) );
-	  D3DTLVertices[cVertex].tu     = D3DVAL( VB->TexCoord[v3][0] );
-	  D3DTLVertices[cVertex].tv     = D3DVAL( VB->TexCoord[v3][1] );
-	  D3DTLVertices[cVertex].rhw    = D3DVAL( (1.0 / VB->Clip[v3][3]) );
-	  D3DTLVertices[cVertex++].color= dwPVColor;
-	}
-
-	/* Render the converted vertex buffer. */
-	if ( cVertex )
-	  DrawPrimitiveHAL( pContext->pShared, D3DPT_TRIANGLELIST, &D3DTLVertices[0], cVertex );
-#undef v1
-#undef v2
-#undef v3
-   }
-}
-/*===========================================================================*/
-/*  This function will render the current vertex buffer as a triangle strip. */
-/* The buffer has to be able to be rendered directly.  This means that we are*/
-/* filled, no offsets, no culling and one sided rendering.  Also we must be  */
-/* in render mode of course.                                                 */
-/*  First I will fill the global D3D vertice buffer.  Next I will set all the*/
-/* states for D3D based on the current OGL state.  Finally I pass the D3D VB */
-/* to the wrapper that call DrawPrimitives.                                  */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-static void RenderTriangleStripVB( GLcontext *ctx, GLuint start, GLuint end )
-{
-  D3DMESACONTEXT     	*pContext = (D3DMESACONTEXT *)ctx->DriverCtx;
-  struct vertex_buffer 	*VB = ctx->VB;
-  int                    index,
-                         cVertex = 0,
-	                    v1, v2, v3,
-                         height = (pContext->pShared->rectW.bottom - pContext->pShared->rectW.top);
-  GLfloat              	ex, ey,
-                         fx, fy, c;
-  GLuint               	facing;
-  DWORD                	dwPVColor;
-
-  DPF(( DBG_FUNC, "RenderTriangleStripVB();" ));
-
-  /* Special case that we can blast the fan without culling, offset, etc... */
-  if ( !VB->ClipOrMask && (ctx->Light.ShadeModel != GL_FLAT) )
-  {
-    DPF(( DBG_PRIM_PROFILE, "DirectTriangles" ));
-
-    /* Seed the the strip. */
-    D3DTLVertices[0].sx   = D3DVAL( VB->Win[start][0] );
-    D3DTLVertices[0].sy   = D3DVAL( (height - VB->Win[start][1]) );
-    D3DTLVertices[0].sz   = D3DVAL( VB->Win[start][2] );
-    D3DTLVertices[0].tu   = D3DVAL( VB->TexCoord[start][0] );
-    D3DTLVertices[0].tv   = D3DVAL( VB->TexCoord[start][1] );
-    D3DTLVertices[0].rhw  = D3DVAL( (1.0 / VB->Clip[start][3]) );
-    D3DTLVertices[0].color= (VB->Color[start][3]<<24) | (VB->Color[start][0]<<16) | (VB->Color[start][1]<<8) | VB->Color[start][2];
-
-    /* Seed the the strip. */
-    D3DTLVertices[1].sx   = D3DVAL( VB->Win[(start+1)][0] );
-    D3DTLVertices[1].sy   = D3DVAL( (height - VB->Win[(start+1)][1]) );
-    D3DTLVertices[1].sz   = D3DVAL( VB->Win[(start+1)][2] );
-    D3DTLVertices[1].tu   = D3DVAL( VB->TexCoord[(start+1)][0] );
-    D3DTLVertices[1].tv   = D3DVAL( VB->TexCoord[(start+1)][1] );
-    D3DTLVertices[1].rhw  = D3DVAL( (1.0 / VB->Clip[(start+1)][3]) );
-    D3DTLVertices[1].color= (VB->Color[(start+1)][3]<<24) | (VB->Color[(start+1)][0]<<16) | (VB->Color[(start+1)][1]<<8) | VB->Color[(start+1)][2];
-
-    for( index = (start+2), cVertex = 2; index < end; index++, cVertex++ )
-    {
-	 /*===================================*/
-	 /* Add the next vertex to the strip. */
-	 /*===================================*/
-	 D3DTLVertices[cVertex].sx     = D3DVAL( VB->Win[index][0] );
-	 D3DTLVertices[cVertex].sy     = D3DVAL( (height - VB->Win[index][1]) );
-	 D3DTLVertices[cVertex].sz     = D3DVAL( VB->Win[index][2] );
-	 D3DTLVertices[cVertex].tu     = D3DVAL( VB->TexCoord[index][0] );
-	 D3DTLVertices[cVertex].tv     = D3DVAL( VB->TexCoord[index][1] );
-	 D3DTLVertices[cVertex].rhw    = D3DVAL( (1.0 / VB->Clip[index][3]) );
-	 D3DTLVertices[cVertex].color  = (VB->Color[index][3]<<24) | (VB->Color[index][0]<<16) | (VB->Color[index][1]<<8) | VB->Color[index][2];
-    }
-
-    /* Render the converted vertex buffer. */
-    if ( cVertex )
-	 DrawPrimitiveHAL( pContext->pShared, D3DPT_TRIANGLESTRIP, &D3DTLVertices[0], cVertex );
-  }
-  else
-  {
-    for( index = (start+2); index < end; index++ )
-    {
-	 /* We need to switch order so that winding won't be a problem. */
-	 if ( index & 1 )
-	 {
-	   v1 = index - 1;
-	   v2 = index - 2;
-	   v3 = index - 0;
-	 }
-	 else
-	 {
-	   v1 = index - 2;
-	   v2 = index - 1;
-	   v3 = index - 0;
-	 }
-
-	 /* All vertices clipped by common plane */
-	 if ( VB->ClipMask[v1] & VB->ClipMask[v2] & VB->ClipMask[v3] & CLIP_ALL_BITS )
-	   continue;
-
-	 /* Check if any vertices need clipping. */
-	 if ( VB->ClipMask[v1] | VB->ClipMask[v2] | VB->ClipMask[v3] )
-	 {
-	   VList[0] = v1;
-	   VList[1] = v2;
-	   VList[2] = v3;
-	   RenderClippedPolygon( ctx, 3, VList );
-	 }
-	 else
-	 {
-	   /* Compute orientation of triangle */
-	   ex = VB->Win[v2][0] - VB->Win[v1][0];
-	   ey = VB->Win[v2][1] - VB->Win[v1][1];
-	   fx = VB->Win[v3][0] - VB->Win[v1][0];
-	   fy = VB->Win[v3][1] - VB->Win[v1][1];
-	   c = (ex * fy) - (ey * fx);
-
-	   /* Polygon is perpindicular to view plane, don't draw it */
-	   if ( (c == 0.0F) && !ctx->Polygon.Unfilled )
-		continue;
-
-	   /* Backface culling. */
-	   facing = (c < 0.0F) ^ ctx->Polygon.FrontBit;
-	   if ( (facing + 1) & ctx->Polygon.CullBits )
-		continue;
-
-	   /* Need right color if we have two sided lighting. */
-	   if ( ctx->IndirectTriangles & DD_TRI_LIGHT_TWOSIDE )
-	   {
-		if ( facing == 1 )
-		{
-		  /* use back color */
-		  VB->Color   = VB->Bcolor;
-		  VB->Specular= VB->Bspec;
-		}
-		else
-		{
-		  /* use front color */
-		  VB->Color   = VB->Fcolor;
-		  VB->Specular= VB->Fspec;
-		}
-	   }
-
-	   if ( ctx->IndirectTriangles & DD_TRI_OFFSET )
-	   {
-		/* Finish computing plane equation of polygon, compute offset */
-		GLfloat fz = VB->Win[v3][2] - VB->Win[v1][2];
-		GLfloat ez = VB->Win[v2][2] - VB->Win[v1][2];
-		GLfloat a = (ey * fz) - (ez * fy);
-		GLfloat b = (ez * fx) - (ex * fz);
-		OffsetPolygon( ctx, a, b, c );
-	   }
-	   /*=====================================*/
-	   /* Populate the the triangle vertices. */
-	   /*=====================================*/
-
-	   /* Solve the prevoking vertex color as we need it for the 3rd triangle and flat shading. */
-	   dwPVColor = (VB->Color[v3][3]<<24) | (VB->Color[v3][0]<<16) | (VB->Color[v3][1]<<8) | VB->Color[v3][2];
-
-	   D3DTLVertices[cVertex].sx     = D3DVAL( VB->Win[v1][0] );
-	   D3DTLVertices[cVertex].sy     = D3DVAL( (height - VB->Win[v1][1]) );
-	   D3DTLVertices[cVertex].sz     = D3DVAL( (VB->Win[v1][2] + ctx->PolygonZoffset) );
-	   D3DTLVertices[cVertex].tu     = D3DVAL( VB->TexCoord[v1][0] );
-	   D3DTLVertices[cVertex].tv     = D3DVAL( VB->TexCoord[v1][1] );
-	   D3DTLVertices[cVertex].rhw    = D3DVAL( (1.0 / VB->Clip[v1][3]) );
-	   D3DTLVertices[cVertex++].color= (ctx->Light.ShadeModel == GL_FLAT) ?
-                                        dwPVColor :
-                                        (VB->Color[v1][3]<<24) | (VB->Color[v1][0]<<16) | (VB->Color[v1][1]<<8) | VB->Color[v1][2];
-
-	   D3DTLVertices[cVertex].sx     = D3DVAL( VB->Win[v2][0] );
-	   D3DTLVertices[cVertex].sy     = D3DVAL( (height - VB->Win[v2][1]) );
-	   D3DTLVertices[cVertex].sz     = D3DVAL( (VB->Win[v2][2] + ctx->PolygonZoffset) );
-	   D3DTLVertices[cVertex].tu     = D3DVAL( VB->TexCoord[v2][0] );
-	   D3DTLVertices[cVertex].tv     = D3DVAL( VB->TexCoord[v2][1] );
-	   D3DTLVertices[cVertex].rhw    = D3DVAL( (1.0 / VB->Clip[v2][3]) );
-	   D3DTLVertices[cVertex++].color= (ctx->Light.ShadeModel == GL_FLAT) ?
-                                          dwPVColor :
-                                          (VB->Color[v2][3]<<24) | (VB->Color[v2][0]<<16) | (VB->Color[v2][1]<<8) | VB->Color[v2][2];
-
-	   D3DTLVertices[cVertex].sx     = D3DVAL( VB->Win[v3][0] );
-	   D3DTLVertices[cVertex].sy     = D3DVAL( (height - VB->Win[v3][1]) );
-	   D3DTLVertices[cVertex].sz     = D3DVAL( (VB->Win[v3][2] + ctx->PolygonZoffset) );
-	   D3DTLVertices[cVertex].tu     = D3DVAL( VB->TexCoord[v3][0] );
-	   D3DTLVertices[cVertex].tv     = D3DVAL( VB->TexCoord[v3][1] );
-	   D3DTLVertices[cVertex].rhw    = D3DVAL( (1.0 / VB->Clip[v3][3]) );
-	   D3DTLVertices[cVertex++].color= dwPVColor;
-	 }
-    }
-
-    /* Render the converted vertex buffer. */
-    if ( cVertex )	
-	 DrawPrimitiveHAL( pContext->pShared, D3DPT_TRIANGLELIST, &D3DTLVertices[0], cVertex );
-  }	
-}
-/*===========================================================================*/
-/*  This function will render the current vertex buffer as Quads.  The buffer*/
-/* has to be able to be rendered directly.  This means that we are filled, no*/
-/* offsets, no culling and one sided rendering.  Also we must be in render   */
-/* mode of cource.                                                           */
-/*  First I will fill the global D3D vertice buffer.  Next I will set all the*/
-/* states for D3D based on the current OGL state.  Finally I pass the D3D VB */
-/* to the wrapper that call DrawPrimitives.                                  */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-static void RenderQuadVB( GLcontext *ctx, GLuint start, GLuint end )
-{
-  D3DMESACONTEXT       	*pContext = (D3DMESACONTEXT *)ctx->DriverCtx;
-  struct vertex_buffer	*VB = ctx->VB;
-  int                  	index,
-                         cVertex,
-                         height = (pContext->pShared->rectW.bottom - pContext->pShared->rectW.top);
-  DWORD                	dwPVColor;
-  GLfloat             	ex, ey,
-                         fx, fy, c;
-  GLuint				facing;  /* 0=front, 1=back */
-
-  DPF(( DBG_FUNC, "RenderQuadVB();" ));
-
-#define  v1 (index)
-#define  v2 (index+1)
-#define  v3 (index+2)
-#define  v4 (index+3)
-
-  if ( !VB->ClipOrMask )
-  {
-    DPF(( DBG_PRIM_PROFILE, "DirectTriangles" ));
-
-    for( cVertex = 0, index = start; index < end; index += 4 )
-    {
-	 if ( ctx->Light.ShadeModel == GL_FLAT )
-	   dwPVColor = (VB->Color[v4][3]<<24) | (VB->Color[v4][0]<<16) | (VB->Color[v4][1]<<8) | VB->Color[v4][2];
-
-	 /*=====================================*/
-	 /* Populate the the triangle vertices. */
-	 /*=====================================*/
-	 D3DTLVertices[cVertex].sx     = D3DVAL( VB->Win[v1][0] );
-	 D3DTLVertices[cVertex].sy     = D3DVAL( (height - VB->Win[v1][1]) );
-	 D3DTLVertices[cVertex].sz     = D3DVAL( VB->Win[v1][2] );
-	 D3DTLVertices[cVertex].tu     = D3DVAL( VB->TexCoord[v1][0] );
-	 D3DTLVertices[cVertex].tv     = D3DVAL( VB->TexCoord[v1][1] );
-	 D3DTLVertices[cVertex].rhw    = D3DVAL( (1.0 / VB->Clip[v1][3]) );
-	 D3DTLVertices[cVertex++].color= (ctx->Light.ShadeModel == GL_FLAT) ?
-                                      dwPVColor :
-	                                 (VB->Color[v1][3]<<24) | (VB->Color[v1][0]<<16) | (VB->Color[v1][1]<<8) | VB->Color[v1][2];
-
-	 D3DTLVertices[cVertex].sx     = D3DVAL( VB->Win[v2][0] );
-	 D3DTLVertices[cVertex].sy     = D3DVAL( (height - VB->Win[v2][1]) );
-	 D3DTLVertices[cVertex].sz     = D3DVAL( VB->Win[v2][2] );
-	 D3DTLVertices[cVertex].tu     = D3DVAL( VB->TexCoord[v2][0] );
-	 D3DTLVertices[cVertex].tv     = D3DVAL( VB->TexCoord[v2][1] );
-	 D3DTLVertices[cVertex].rhw    = D3DVAL( (1.0 / VB->Clip[v2][3]) );
-	 D3DTLVertices[cVertex++].color= (ctx->Light.ShadeModel == GL_FLAT) ?
-                                      dwPVColor :
-                                      (VB->Color[v2][3]<<24) | (VB->Color[v2][0]<<16) | (VB->Color[v2][1]<<8) | VB->Color[v2][2];
-
-	 D3DTLVertices[cVertex].sx     = D3DVAL( VB->Win[v3][0] );
-	 D3DTLVertices[cVertex].sy     = D3DVAL( (height - VB->Win[v3][1]) );
-	 D3DTLVertices[cVertex].sz     = D3DVAL( VB->Win[v3][2] );
-	 D3DTLVertices[cVertex].tu     = D3DVAL( VB->TexCoord[v3][0] );
-	 D3DTLVertices[cVertex].tv     = D3DVAL( VB->TexCoord[v3][1] );
-	 D3DTLVertices[cVertex].rhw    = D3DVAL( (1.0 / VB->Clip[v3][3]) );
-	 D3DTLVertices[cVertex++].color= (ctx->Light.ShadeModel == GL_FLAT) ?
-	                                 dwPVColor :
-                                      (VB->Color[v3][3]<<24) | (VB->Color[v3][0]<<16) | (VB->Color[v3][1]<<8) | VB->Color[v3][2];
-
-	 D3DTLVertices[cVertex].sx     = D3DVAL( VB->Win[v1][0] );
-	 D3DTLVertices[cVertex].sy     = D3DVAL( (height - VB->Win[v1][1]) );
-	 D3DTLVertices[cVertex].sz     = D3DVAL( VB->Win[v1][2] );
-	 D3DTLVertices[cVertex].tu     = D3DVAL( VB->TexCoord[v1][0] );
-	 D3DTLVertices[cVertex].tv     = D3DVAL( VB->TexCoord[v1][1] );
-	 D3DTLVertices[cVertex].rhw    = D3DVAL( (1.0 / VB->Clip[v1][3]) );
-	 D3DTLVertices[cVertex++].color= (ctx->Light.ShadeModel == GL_FLAT) ?
-	                                 dwPVColor :
-                                      (VB->Color[v1][3]<<24) | (VB->Color[v1][0]<<16) | (VB->Color[v1][1]<<8) | VB->Color[v1][2];
-
-	 D3DTLVertices[cVertex].sx     = D3DVAL( VB->Win[v3][0] );
-	 D3DTLVertices[cVertex].sy     = D3DVAL( (height - VB->Win[v3][1]) );
-	 D3DTLVertices[cVertex].sz     = D3DVAL( VB->Win[v3][2] );
-	 D3DTLVertices[cVertex].tu     = D3DVAL( VB->TexCoord[v3][0] );
-	 D3DTLVertices[cVertex].tv     = D3DVAL( VB->TexCoord[v3][1] );
-	 D3DTLVertices[cVertex].rhw    = D3DVAL( (1.0 / VB->Clip[v3][3]) );
-	 D3DTLVertices[cVertex++].color= (ctx->Light.ShadeModel == GL_FLAT) ?
-                                      dwPVColor :
-                                      (VB->Color[v3][3]<<24) | (VB->Color[v3][0]<<16) | (VB->Color[v3][1]<<8) | VB->Color[v3][2];
-
-	 D3DTLVertices[cVertex].sx     = D3DVAL( VB->Win[v4][0] );
-	 D3DTLVertices[cVertex].sy     = D3DVAL( (height - VB->Win[v4][1]) );
-	 D3DTLVertices[cVertex].sz     = D3DVAL( VB->Win[v4][2] );
-	 D3DTLVertices[cVertex].tu     = D3DVAL( VB->TexCoord[v4][0] );
-	 D3DTLVertices[cVertex].tv     = D3DVAL( VB->TexCoord[v4][1] );
-	 D3DTLVertices[cVertex].rhw    = D3DVAL( (1.0 / VB->Clip[v4][3]) );
-	 D3DTLVertices[cVertex++].color= (ctx->Light.ShadeModel == GL_FLAT) ?
-                                      dwPVColor :
-                                      (VB->Color[v4][3]<<24) | (VB->Color[v4][0]<<16) | (VB->Color[v4][1]<<8) | VB->Color[v4][2];
-    }
-  }
-  else
-  {
-    for( cVertex = 0, index = start; index < end; index += 4 )
-    {
-	 if ( VB->ClipMask[v1] & VB->ClipMask[v2] & VB->ClipMask[v3]  & VB->ClipMask[v4] & CLIP_ALL_BITS )
-	 {
-	   continue;
-	 }	
-	 else if ( VB->ClipMask[v1] | VB->ClipMask[v2] | VB->ClipMask[v3] | VB->ClipMask[v4] )
-	 {
-	   VList[0] = v1;
-	   VList[1] = v2;
-	   VList[2] = v3;
-	   VList[3] = v4;
-	   RenderClippedPolygon( ctx, 4, VList );
-	   continue;
-	 }
-
-	 /* Compute orientation of triangle */
-	 ex = VB->Win[v2][0] - VB->Win[v1][0];
-	 ey = VB->Win[v2][1] - VB->Win[v1][1];
-	 fx = VB->Win[v3][0] - VB->Win[v1][0];
-	 fy = VB->Win[v3][1] - VB->Win[v1][1];
-	 c = (ex * fy) - (ey * fx);
-
-	 /* polygon is perpindicular to view plane, don't draw it */
-	 if ( (c == 0.0F) && !ctx->Polygon.Unfilled )
-	   continue;
-
-	 /* Backface culling. */
-	 facing = (c < 0.0F) ^ ctx->Polygon.FrontBit;
-	 if ( (facing + 1) & ctx->Polygon.CullBits )
-	   continue;
-
-	 if ( ctx->IndirectTriangles & DD_TRI_LIGHT_TWOSIDE )
-	 {
-	   if ( facing == 1 )
-	   {
-		/* use back color */
-		VB->Color   = VB->Bcolor;
-		VB->Specular= VB->Bspec;
-	   }
-	   else
-	   {
-		/* use front color */
-		VB->Color   = VB->Fcolor;
-		VB->Specular= VB->Fspec;
-	   }	
-	 }	
-
-	 if ( ctx->IndirectTriangles & DD_TRI_OFFSET )
-	 {
-	   /* Finish computing plane equation of polygon, compute offset */
-	   GLfloat fz = VB->Win[v3][2] - VB->Win[v1][2];
-	   GLfloat ez = VB->Win[v2][2] - VB->Win[v1][2];
-	   GLfloat a = (ey * fz) - (ez * fy);
-	   GLfloat b = (ez * fx) - (ex * fz);
-	   OffsetPolygon( ctx, a, b, c );
-	 }
-
-	 if ( ctx->Light.ShadeModel == GL_FLAT )
-	   dwPVColor = (VB->Color[v4][3]<<24) | (VB->Color[v4][0]<<16) | (VB->Color[v4][1]<<8) | VB->Color[v4][2];
-
-	 /*=====================================*/
-	 /* Populate the the triangle vertices. */
-	 /*=====================================*/
-	 D3DTLVertices[cVertex].sx     = D3DVAL( VB->Win[v1][0] );
-	 D3DTLVertices[cVertex].sy     = D3DVAL( (height - VB->Win[v1][1]) );
-	 D3DTLVertices[cVertex].sz     = D3DVAL( (VB->Win[v1][2] + ctx->PolygonZoffset) );
-	 D3DTLVertices[cVertex].tu     = D3DVAL( VB->TexCoord[v1][0] );
-	 D3DTLVertices[cVertex].tv     = D3DVAL( VB->TexCoord[v1][1] );
-	 D3DTLVertices[cVertex].rhw    = D3DVAL( (1.0 / VB->Clip[v1][3]) );
-	 D3DTLVertices[cVertex++].color= (ctx->Light.ShadeModel == GL_FLAT) ?
-                                       dwPVColor :
-                                       (VB->Color[v1][3]<<24) | (VB->Color[v1][0]<<16) | (VB->Color[v1][1]<<8) | VB->Color[v1][2];
-
-	 D3DTLVertices[cVertex].sx     = D3DVAL( VB->Win[v2][0] );
-	 D3DTLVertices[cVertex].sy     = D3DVAL( (height - VB->Win[v2][1]) );
-	 D3DTLVertices[cVertex].sz     = D3DVAL( (VB->Win[v2][2] + ctx->PolygonZoffset) );
-	 D3DTLVertices[cVertex].tu     = D3DVAL( VB->TexCoord[v2][0] );
-	 D3DTLVertices[cVertex].tv     = D3DVAL( VB->TexCoord[v2][1] );
-	 D3DTLVertices[cVertex].rhw    = D3DVAL( (1.0 / VB->Clip[v2][3]) );
-	 D3DTLVertices[cVertex++].color= (ctx->Light.ShadeModel == GL_FLAT) ?
-                                       dwPVColor :
-                                       (VB->Color[v2][3]<<24) | (VB->Color[v2][0]<<16) | (VB->Color[v2][1]<<8) | VB->Color[v2][2];
-
-	 D3DTLVertices[cVertex].sx     = D3DVAL( VB->Win[v3][0] );
-	 D3DTLVertices[cVertex].sy     = D3DVAL( (height - VB->Win[v3][1]) );
-	 D3DTLVertices[cVertex].sz     = D3DVAL( (VB->Win[v3][2] + ctx->PolygonZoffset) );
-	 D3DTLVertices[cVertex].tu     = D3DVAL( VB->TexCoord[v3][0] );
-	 D3DTLVertices[cVertex].tv     = D3DVAL( VB->TexCoord[v3][1] );
-	 D3DTLVertices[cVertex].rhw    = D3DVAL( (1.0 / VB->Clip[v3][3]) );
-	 D3DTLVertices[cVertex++].color= (ctx->Light.ShadeModel == GL_FLAT) ?
-                                       dwPVColor :
-                                       (VB->Color[v3][3]<<24) | (VB->Color[v3][0]<<16) | (VB->Color[v3][1]<<8) | VB->Color[v3][2];
-
-	 D3DTLVertices[cVertex].sx     = D3DVAL( VB->Win[v1][0] );
-	 D3DTLVertices[cVertex].sy     = D3DVAL( (height - VB->Win[v1][1]) );
-	 D3DTLVertices[cVertex].sz     = D3DVAL( (VB->Win[v1][2] + ctx->PolygonZoffset) );
-	 D3DTLVertices[cVertex].tu     = D3DVAL( VB->TexCoord[v1][0] );
-	 D3DTLVertices[cVertex].tv     = D3DVAL( VB->TexCoord[v1][1] );
-	 D3DTLVertices[cVertex].rhw    = D3DVAL( (1.0 / VB->Clip[v1][3]) );
-	 D3DTLVertices[cVertex++].color= (ctx->Light.ShadeModel == GL_FLAT) ?
-	                                  dwPVColor :
-                                       (VB->Color[v1][3]<<24) | (VB->Color[v1][0]<<16) | (VB->Color[v1][1]<<8) | VB->Color[v1][2];
-
-	 D3DTLVertices[cVertex].sx     = D3DVAL( VB->Win[v3][0] );
-	 D3DTLVertices[cVertex].sy     = D3DVAL( (height - VB->Win[v3][1]) );
-	 D3DTLVertices[cVertex].sz     = D3DVAL( (VB->Win[v3][2] + ctx->PolygonZoffset) );
-	 D3DTLVertices[cVertex].tu     = D3DVAL( VB->TexCoord[v3][0] );
-	 D3DTLVertices[cVertex].tv     = D3DVAL( VB->TexCoord[v3][1] );
-	 D3DTLVertices[cVertex].rhw    = D3DVAL( (1.0 / VB->Clip[v3][3]) );
-	 D3DTLVertices[cVertex++].color= (ctx->Light.ShadeModel == GL_FLAT) ?
-                                       dwPVColor :
-                                       (VB->Color[v3][3]<<24) | (VB->Color[v3][0]<<16) | (VB->Color[v3][1]<<8) | VB->Color[v3][2];
-
-	 D3DTLVertices[cVertex].sx     = D3DVAL( VB->Win[v4][0] );
-	 D3DTLVertices[cVertex].sy     = D3DVAL( (height - VB->Win[v4][1]) );
-	 D3DTLVertices[cVertex].sz     = D3DVAL( (VB->Win[v4][2] + ctx->PolygonZoffset) );
-	 D3DTLVertices[cVertex].tu     = D3DVAL( VB->TexCoord[v4][0] );
-	 D3DTLVertices[cVertex].tv     = D3DVAL( VB->TexCoord[v4][1] );
-	 D3DTLVertices[cVertex].rhw    = D3DVAL( (1.0 / VB->Clip[v4][3]) );
-	 D3DTLVertices[cVertex++].color= (ctx->Light.ShadeModel == GL_FLAT) ?
-                                       dwPVColor :
-                                       (VB->Color[v4][3]<<24) | (VB->Color[v4][0]<<16) | (VB->Color[v4][1]<<8) | VB->Color[v4][2];
-    }
-  }
-
-#undef   v4
-#undef   v3
-#undef   v2
-#undef   v1
-
-  /* Render the converted vertex buffer. */
-  if ( cVertex )
-    DrawPrimitiveHAL( pContext->pShared, D3DPT_TRIANGLELIST, &D3DTLVertices[0], cVertex );
-}
-/*===========================================================================*/
-/*                                                                           */
-/*===========================================================================*/
-/* RETURN: TRUE, FALSE.                                                      */
-/*===========================================================================*/
-static void RenderQuad( GLcontext *ctx, GLuint v1, GLuint v2, GLuint v3, GLuint v4, GLuint pv )
-{
-  D3DMESACONTEXT     	*pContext = (D3DMESACONTEXT *)ctx->DriverCtx;
-  struct vertex_buffer 	*VB = ctx->VB;
-  int                  	height = (pContext->pShared->rectW.bottom - pContext->pShared->rectW.top);
-  DWORD                	dwPVColor;
-  GLfloat              	ex, ey,
-                         fx, fy, c;
-  GLuint               	facing;  /* 0=front, 1=back */
-  static D3DTLVERTEX   	TLVertices[6];
-
-  DPF(( DBG_FUNC, "RenderQuad" ));
-  DPF(( DBG_PRIM_INFO, "RenderQuad( 1 )" ));
-
-  /* Compute orientation of triangle */
-  ex = VB->Win[v2][0] - VB->Win[v1][0];
-  ey = VB->Win[v2][1] - VB->Win[v1][1];
-  fx = VB->Win[v3][0] - VB->Win[v1][0];
-  fy = VB->Win[v3][1] - VB->Win[v1][1];
-  c = (ex * fy) - (ey * fx);
-
-  /* polygon is perpindicular to view plane, don't draw it */
-  if ( (c == 0.0F) && !ctx->Polygon.Unfilled )
-    return;
-
-  /* Backface culling. */
-  facing = (c < 0.0F) ^ ctx->Polygon.FrontBit;
-  if ( (facing + 1) & ctx->Polygon.CullBits )
-    return;
-
-  if ( ctx->IndirectTriangles & DD_TRI_LIGHT_TWOSIDE )
-  {
-    if ( facing == 1 )
-    {
-	 /* use back color */
-	 VB->Color   = VB->Bcolor;
-	 VB->Specular= VB->Bspec;
-    }
-    else
-    {
-	 /* use front color */
-	 VB->Color   = VB->Fcolor;
-	 VB->Specular= VB->Fspec;
-    }
-  }
-
-  if ( ctx->IndirectTriangles & DD_TRI_OFFSET )
-  {
-    /* Finish computing plane equation of polygon, compute offset */
-    GLfloat fz = VB->Win[v3][2] - VB->Win[v1][2];
-    GLfloat ez = VB->Win[v2][2] - VB->Win[v1][2];
-    GLfloat a = (ey * fz) - (ez * fy);
-    GLfloat b = (ez * fx) - (ex * fz);
-    OffsetPolygon( ctx, a, b, c );
-  }
-
-  if ( ctx->Light.ShadeModel == GL_FLAT )
-    dwPVColor = (VB->Color[pv][3]<<24) | (VB->Color[pv][0]<<16) | (VB->Color[pv][1]<<8) | VB->Color[pv][2];
-
-  /*=====================================*/
-  /* Populate the the triangle vertices. */
-  /*=====================================*/
-  TLVertices[0].sx      = D3DVAL( VB->Win[v1][0] );
-  TLVertices[0].sy      = D3DVAL( (height - VB->Win[v1][1]) );
-  TLVertices[0].sz      = D3DVAL( (VB->Win[v1][2] + ctx->PolygonZoffset) );
-  TLVertices[0].tu      = D3DVAL( VB->TexCoord[v1][0] );
-  TLVertices[0].tv      = D3DVAL( VB->TexCoord[v1][1] );
-  TLVertices[0].rhw     = D3DVAL( (1.0 / VB->Clip[v1][3]) );
-  TLVertices[0].color   = (ctx->Light.ShadeModel == GL_FLAT) ? dwPVColor :
-                           (VB->Color[v1][3]<<24) | (VB->Color[v1][0]<<16) | (VB->Color[v1][1]<<8) | VB->Color[v1][2];
-
-   TLVertices[1].sx      = D3DVAL( VB->Win[v2][0] );
-   TLVertices[1].sy      = D3DVAL( (height - VB->Win[v2][1]) );
-   TLVertices[1].sz      = D3DVAL( (VB->Win[v2][2] + ctx->PolygonZoffset) );
-   TLVertices[1].tu      = D3DVAL( VB->TexCoord[v2][0] );
-   TLVertices[1].tv      = D3DVAL( VB->TexCoord[v2][1] );
-   TLVertices[1].rhw     = D3DVAL( (1.0 / VB->Clip[v2][3]) );
-   TLVertices[1].color   = (ctx->Light.ShadeModel == GL_FLAT) ? dwPVColor :
-                           (VB->Color[v2][3]<<24) | (VB->Color[v2][0]<<16) | (VB->Color[v2][1]<<8) | VB->Color[v2][2];
-
-   TLVertices[2].sx      = D3DVAL( VB->Win[v3][0] );
-   TLVertices[2].sy      = D3DVAL( (height - VB->Win[v3][1]) );
-   TLVertices[2].sz      = D3DVAL( (VB->Win[v3][2] + ctx->PolygonZoffset) );
-   TLVertices[2].tu      = D3DVAL( VB->TexCoord[v3][0] );
-   TLVertices[2].tv      = D3DVAL( VB->TexCoord[v3][1] );
-   TLVertices[2].rhw     = D3DVAL( (1.0 / VB->Clip[v3][3]) );
-   TLVertices[2].color   = (ctx->Light.ShadeModel == GL_FLAT) ? dwPVColor :
-                           (VB->Color[v3][3]<<24) | (VB->Color[v3][0]<<16) | (VB->Color[v3][1]<<8) | VB->Color[v3][2];
-
-   TLVertices[3].sx      = D3DVAL( VB->Win[v3][0] );
-   TLVertices[3].sy      = D3DVAL( (height - VB->Win[v3][1]) );
-   TLVertices[3].sz      = D3DVAL( (VB->Win[v3][2] + ctx->PolygonZoffset) );
-   TLVertices[3].tu      = D3DVAL( VB->TexCoord[v3][0] );
-   TLVertices[3].tv      = D3DVAL( VB->TexCoord[v3][1] );
-   TLVertices[3].rhw     = D3DVAL( (1.0 / VB->Clip[v3][3]) );
-   TLVertices[3].color   = (ctx->Light.ShadeModel == GL_FLAT) ? dwPVColor :
-                           (VB->Color[v3][3]<<24) | (VB->Color[v3][0]<<16) | (VB->Color[v3][1]<<8) | VB->Color[v3][2];
-
-   TLVertices[4].sx      = D3DVAL( VB->Win[v4][0] );
-   TLVertices[4].sy      = D3DVAL( (height - VB->Win[v4][1]) );
-   TLVertices[4].sz      = D3DVAL( (VB->Win[v4][2] + ctx->PolygonZoffset) );
-   TLVertices[4].tu      = D3DVAL( VB->TexCoord[v4][0] );
-   TLVertices[4].tv      = D3DVAL( VB->TexCoord[v4][1] );
-   TLVertices[4].rhw     = D3DVAL( (1.0 / VB->Clip[v4][3]) );
-   TLVertices[4].color   = (ctx->Light.ShadeModel == GL_FLAT) ? dwPVColor :
-                           (VB->Color[v4][3]<<24) | (VB->Color[v4][0]<<16) | (VB->Color[v4][1]<<8) | VB->Color[v4][2];
-
-   TLVertices[5].sx      = D3DVAL( VB->Win[v1][0] );
-   TLVertices[5].sy      = D3DVAL( (height - VB->Win[v1][1]) );
-   TLVertices[5].sz      = D3DVAL( (VB->Win[v1][2] + ctx->PolygonZoffset) );
-   TLVertices[5].tu      = D3DVAL( VB->TexCoord[v1][0] );
-   TLVertices[5].tv      = D3DVAL( VB->TexCoord[v1][1] );
-   TLVertices[5].rhw     = D3DVAL( (1.0 / VB->Clip[v1][3]) );
-   TLVertices[5].color   = (ctx->Light.ShadeModel == GL_FLAT) ? dwPVColor :
-                           (VB->Color[v1][3]<<24) | (VB->Color[v1][0]<<16) | (VB->Color[v1][1]<<8) | VB->Color[v1][2];
-
-   /* Draw the two triangles. */
-   DrawPrimitiveHAL( pContext->pShared, D3DPT_TRIANGLELIST, &TLVertices[0], 6 );
-}
-/*===========================================================================*/
-/*                                                                           */
-/*===========================================================================*/
-/* RETURN: TRUE, FALSE.                                                      */
-/*===========================================================================*/
-void	RenderOneTriangle( GLcontext *ctx, GLuint v1, GLuint v2, GLuint v3, GLuint pv )
-{
-  D3DMESACONTEXT       	*pContext = (D3DMESACONTEXT *)ctx->DriverCtx;
-  struct vertex_buffer 	*VB = ctx->VB;
-  int                  	height = (pContext->pShared->rectW.bottom - pContext->pShared->rectW.top);
-  DWORD                	dwPVColor;
-  static D3DTLVERTEX   	TLVertices[3];
-
-  DPF(( DBG_FUNC, "RenderOneTriangle" ));
-  DPF(( DBG_PRIM_INFO, "RenderTriangle( 1 )" ));
-
-  /*=====================================*/
-  /* Populate the the triangle vertices. */
-  /*=====================================*/
-  if ( ctx->Light.ShadeModel == GL_FLAT )
-    dwPVColor = (VB->Color[pv][3]<<24) | (VB->Color[pv][0]<<16) | (VB->Color[pv][1]<<8) | VB->Color[pv][2];
-
-  TLVertices[0].sx      = D3DVAL( VB->Win[v1][0] );
-  TLVertices[0].sy      = D3DVAL( (height - VB->Win[v1][1]) );
-  TLVertices[0].sz      = D3DVAL( (VB->Win[v1][2] + ctx->PolygonZoffset) );
-  TLVertices[0].tu      = D3DVAL( VB->TexCoord[v1][0] );
-  TLVertices[0].tv      = D3DVAL( VB->TexCoord[v1][1] );
-  TLVertices[0].rhw     = D3DVAL( (1.0 / VB->Clip[v1][3]) );
-  TLVertices[0].color   = (ctx->Light.ShadeModel == GL_FLAT) ? dwPVColor :
-                          (VB->Color[v1][3]<<24) | (VB->Color[v1][0]<<16) | (VB->Color[v1][1]<<8) | VB->Color[v1][2];
-  DPF(( DBG_PRIM_INFO, "V1 -> x:%f y:%f z:%f c:%x",
-	   TLVertices[0].sx,
-	   TLVertices[0].sy,
-	   TLVertices[0].sz,
-	   TLVertices[0].color ));
-
-  TLVertices[1].sx      = D3DVAL( VB->Win[v2][0] );
-  TLVertices[1].sy      = D3DVAL( (height - VB->Win[v2][1]) );
-  TLVertices[1].sz      = D3DVAL( (VB->Win[v2][2] + ctx->PolygonZoffset) );
-  TLVertices[1].tu      = D3DVAL( VB->TexCoord[v2][0] );
-  TLVertices[1].tv      = D3DVAL( VB->TexCoord[v2][1] );
-  TLVertices[1].rhw     = D3DVAL( (1.0 / VB->Clip[v2][3]) );
-  TLVertices[1].color   = (ctx->Light.ShadeModel == GL_FLAT) ? dwPVColor :
-                          (VB->Color[v2][3]<<24) | (VB->Color[v2][0]<<16) | (VB->Color[v2][1]<<8) | VB->Color[v2][2];
-  DPF(( DBG_PRIM_INFO, "V2 -> x:%f y:%f z:%f c:%x",
-	   TLVertices[1].sx,
-	   TLVertices[1].sy,
-	   TLVertices[1].sz,
-	   TLVertices[1].color ));
-
-  TLVertices[2].sx      = D3DVAL( VB->Win[v3][0] );
-  TLVertices[2].sy      = D3DVAL( (height - VB->Win[v3][1]) );
-  TLVertices[2].sz      = D3DVAL( (VB->Win[v3][2] + ctx->PolygonZoffset) );
-  TLVertices[2].tu      = D3DVAL( VB->TexCoord[v3][0] );
-  TLVertices[2].tv      = D3DVAL( VB->TexCoord[v3][1] );
-  TLVertices[2].rhw     = D3DVAL( (1.0 / VB->Clip[v3][3]) );
-  TLVertices[2].color   = (ctx->Light.ShadeModel == GL_FLAT) ? dwPVColor :
-                          (VB->Color[v3][3]<<24) | (VB->Color[v3][0]<<16) | (VB->Color[v3][1]<<8) | VB->Color[v3][2];
-  DPF(( DBG_PRIM_INFO, "V3 -> x:%f y:%f z:%f c:%x",
-	   TLVertices[2].sx,
-	   TLVertices[2].sy,
-	   TLVertices[2].sz,
-	   TLVertices[2].color ));
-
-  /* Draw the triangle. */
-  DrawPrimitiveHAL( pContext->pShared, D3DPT_TRIANGLELIST, &TLVertices[0], 3 );
-}
-/*===========================================================================*/
-/*                                                                           */
-/*===========================================================================*/
-/* RETURN: TRUE, FALSE.                                                      */
-/*===========================================================================*/
-void RenderOneLine( GLcontext *ctx, GLuint v1, GLuint v2, GLuint pv )
-{
-  D3DMESACONTEXT     	*pContext = (D3DMESACONTEXT *)ctx->DriverCtx;
-  struct vertex_buffer 	*VB = ctx->VB;
-  int                  	height = (pContext->pShared->rectW.bottom - pContext->pShared->rectW.top);
-  DWORD                	dwPVColor;
-  static D3DTLVERTEX	TLVertices[2];
-
-  DPF(( DBG_FUNC, "RenderOneLine" ));
-  DPF(( DBG_PRIM_INFO, "RenderLine( 1 )" ));
-
-  if ( VB->MonoColor )
-    dwPVColor = (pContext->aCurrent<<24) | (pContext->rCurrent<<16) | (pContext->gCurrent<<8) | pContext->bCurrent;
-  else 	
-    dwPVColor = (VB->Color[pv][3]<<24) | (VB->Color[pv][0]<<16) | (VB->Color[pv][1]<<8) | VB->Color[pv][2];
-
-   TLVertices[0].sx      = D3DVAL( VB->Win[v1][0] );
-   TLVertices[0].sy      = D3DVAL( (height - VB->Win[v1][1]) );
-   TLVertices[0].sz      = D3DVAL( (VB->Win[v1][2] + ctx->LineZoffset) );
-   TLVertices[0].tu      = D3DVAL( VB->TexCoord[v1][0] );
-   TLVertices[0].tv      = D3DVAL( VB->TexCoord[v1][1] );
-   TLVertices[0].rhw     = D3DVAL( (1.0 / VB->Clip[v1][3]) );
-   TLVertices[0].color   = (ctx->Light.ShadeModel == GL_FLAT) ? dwPVColor :
-                           (VB->Color[v1][3]<<24) | (VB->Color[v1][0]<<16) | (VB->Color[v1][1]<<8) | VB->Color[v1][2];
-
-   TLVertices[1].sx      = D3DVAL( VB->Win[v2][0] );
-   TLVertices[1].sy      = D3DVAL( (height - VB->Win[v2][1]) );
-   TLVertices[1].sz      = D3DVAL( (VB->Win[v2][2] + ctx->LineZoffset) );
-   TLVertices[1].tu      = D3DVAL( VB->TexCoord[v2][0] );
-   TLVertices[1].tv      = D3DVAL( VB->TexCoord[v2][1] );
-   TLVertices[1].rhw     = D3DVAL( (1.0 / VB->Clip[v2][3]) );
-   TLVertices[1].color   = (ctx->Light.ShadeModel == GL_FLAT) ? dwPVColor :
-                           (VB->Color[v2][3]<<24) | (VB->Color[v2][0]<<16) | (VB->Color[v2][1]<<8) | VB->Color[v2][2];
-
-   /* Draw line from (x0,y0) to (x1,y1) with current pixel color/index */
-   DrawPrimitiveHAL( pContext->pShared, D3DPT_LINELIST, &TLVertices[0], 2 );
-}
-/*===========================================================================*/
-/*  This function was written to convert points into triangles.  I did this  */
-/* as all card accelerate triangles and most drivers do this anyway.  In hind*/
-/* thought this might be a bad idea as some cards do better.                 */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-static void RenderPointsVB( GLcontext *ctx, GLuint start, GLuint end )
-{
-  D3DMESACONTEXT 		*pContext = (D3DMESACONTEXT *)ctx->DriverCtx;
-  struct vertex_buffer 	*VB = ctx->VB;
-  struct pixel_buffer 	*PB = ctx->PB;
-  GLuint 				index;
-  GLfloat                radius, z,
-                         xmin, ymin,
-                         xmax, ymax;
-  GLint				cVertex,
-                         height = (pContext->pShared->rectW.bottom - pContext->pShared->rectW.top);
-  DWORD				dwPVColor;
-
-  DPF(( DBG_FUNC, "RenderPointsVB();" ));
-
-  radius = CLAMP( ctx->Point.Size, MIN_POINT_SIZE, MAX_POINT_SIZE ) * 0.5F;
-
-  for( index = start, cVertex = 0; index <= end; index++ )
-  {
-    if ( VB->ClipMask[index] == 0 )
-    {
-	 xmin = D3DVAL( VB->Win[index][0] - radius );
-	 xmax = D3DVAL( VB->Win[index][0] + radius );
-	 ymin = D3DVAL( height - VB->Win[index][1] - radius );
-	 ymax = D3DVAL( height - VB->Win[index][1] + radius );
-	 z    = D3DVAL( (VB->Win[index][2] + ctx->PointZoffset) );
-
-	 dwPVColor = (VB->Color[index][3]<<24) |
-	             (VB->Color[index][0]<<16) |
-	             (VB->Color[index][1]<<8) |
-                  VB->Color[index][2];
-
-	 D3DTLVertices[cVertex].sx	  = xmin;
-	 D3DTLVertices[cVertex].sy      = ymax;
-	 D3DTLVertices[cVertex].sz      = z;
-	 D3DTLVertices[cVertex].tu      = 0.0;
-	 D3DTLVertices[cVertex].tv      = 0.0;
-	 D3DTLVertices[cVertex].rhw     = D3DVAL( (1.0 / VB->Clip[index][3]) );
-	 D3DTLVertices[cVertex++].color = dwPVColor;
-
-	 D3DTLVertices[cVertex].sx      = xmin;
-	 D3DTLVertices[cVertex].sy      = ymin;
-	 D3DTLVertices[cVertex].sz      = z;
-	 D3DTLVertices[cVertex].tu      = 0.0;
-	 D3DTLVertices[cVertex].tv      = 0.0;
-	 D3DTLVertices[cVertex].rhw     = D3DVAL( (1.0 / VB->Clip[index][3]) );
-	 D3DTLVertices[cVertex++].color = dwPVColor;
-
-	 D3DTLVertices[cVertex].sx      = xmax;
-	 D3DTLVertices[cVertex].sy      = ymin;
-	 D3DTLVertices[cVertex].sz      = z;
-	 D3DTLVertices[cVertex].tu      = 0.0;
-	 D3DTLVertices[cVertex].tv      = 0.0;
-	 D3DTLVertices[cVertex].rhw     = D3DVAL( (1.0 / VB->Clip[index][3]) );
-	 D3DTLVertices[cVertex++].color = dwPVColor;
-
-	 D3DTLVertices[cVertex].sx      = xmax;
-	 D3DTLVertices[cVertex].sy      = ymin;
-	 D3DTLVertices[cVertex].sz      = z;
-	 D3DTLVertices[cVertex].tu      = 0.0;
-	 D3DTLVertices[cVertex].tv      = 0.0;
-	 D3DTLVertices[cVertex].rhw     = D3DVAL( (1.0 / VB->Clip[index][3]) );
-	 D3DTLVertices[cVertex++].color = dwPVColor;
-
-	 D3DTLVertices[cVertex].sx	  = xmax;
-	 D3DTLVertices[cVertex].sy      = ymax;
-	 D3DTLVertices[cVertex].sz      = z;
-	 D3DTLVertices[cVertex].tu      = 0.0;
-	 D3DTLVertices[cVertex].tv      = 0.0;
-	 D3DTLVertices[cVertex].rhw     = D3DVAL( (1.0 / VB->Clip[index][3]) );
-	 D3DTLVertices[cVertex++].color = dwPVColor;
-
-	 D3DTLVertices[cVertex].sx	  = xmin;
-	 D3DTLVertices[cVertex].sy      = ymax;
-	 D3DTLVertices[cVertex].sz      = z;
-	 D3DTLVertices[cVertex].tu      = 0.0;
-	 D3DTLVertices[cVertex].tv      = 0.0;
-	 D3DTLVertices[cVertex].rhw     = D3DVAL( (1.0 / VB->Clip[index][3]) );
-	 D3DTLVertices[cVertex++].color = dwPVColor;
-    }
-  }
-
-  /* Render the converted vertex buffer. */
-  if ( cVertex )
-    DrawPrimitiveHAL( pContext->pShared, D3DPT_TRIANGLELIST, &D3DTLVertices[0], cVertex );
-}
-/*===========================================================================*/
-/*  This gets call before we render any primitives so that the current OGL   */
-/* states will be mapped the D3D context.  I'm still not sure how D3D works  */
-/* but I'm finding that it doesn't act like a state machine as OGL is.  It   */
-/* looks like the state gets set back to the defaults after a DrawPrimitives */
-/* or an EndScene.  Also I set states that are the default even though this  */
-/* is redundant as the defaults seem screwed up.                             */
-/* TODO: make a batch call.                                                  */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-static void SetRenderStates( GLcontext *ctx )
-{
-   D3DMESACONTEXT	*pContext = (D3DMESACONTEXT *)ctx->DriverCtx;
-   DWORD          	dwFunc;
-   static	BOOL		bTexture = FALSE;
-   static int		texName = -1;
-
-   DPF(( DBG_FUNC, "SetRenderStates();" ));
-
-   if ( g_DBGMask & DBG_STATES )
-	DebugRenderStates( ctx, FALSE );
-
-   SetStateHAL( pContext->pShared, D3DRENDERSTATE_CULLMODE, D3DCULL_NONE );
-   SetStateHAL( pContext->pShared, D3DRENDERSTATE_DITHERENABLE, (ctx->Color.DitherFlag) ? TRUE : FALSE );
-
-   /*================================================*/
-   /* Check too see if there are new TEXTURE states. */
-   /*================================================*/
-   if ( ctx->Texture._EnabledUnits )
-   {
-      switch( ctx->Texture.Set[ctx->Texture.CurrentSet].EnvMode )
-      {
-        case GL_MODULATE:
-		if ( ctx->Texture.Set[ctx->Texture.CurrentSet].Current->Image[0][0]->Format == GL_RGBA )
-		  dwFunc = pContext->pShared->dwTexFunc[d3dtblend_modulatealpha];
-		else
-		  dwFunc = pContext->pShared->dwTexFunc[d3dtblend_modulate];
-		break;
-
-	   case GL_BLEND:
-		dwFunc = pContext->pShared->dwTexFunc[d3dtblend_decalalpha];
-		break;
-
-        case GL_REPLACE:
-		dwFunc = pContext->pShared->dwTexFunc[d3dtblend_decal];
-		break;
-
-        case GL_DECAL:
-		if ( ctx->Texture.Set[ctx->Texture.CurrentSet].Current->Image[0][0]->Format == GL_RGBA )
-		  dwFunc = pContext->pShared->dwTexFunc[d3dtblend_decalalpha];
-		else
-		  dwFunc = pContext->pShared->dwTexFunc[d3dtblend_decal];
-		break;
-      }
-      SetStateHAL( pContext->pShared, D3DRENDERSTATE_TEXTUREMAPBLEND, dwFunc );
-
-      switch( ctx->Texture.Set[ctx->Texture.CurrentSet].Current->MagFilter )
-      {
-	   case GL_NEAREST:
-		dwFunc = D3DFILTER_NEAREST;
-		break;
-        case GL_LINEAR:
-		dwFunc = D3DFILTER_LINEAR;
-		break;
-        case GL_NEAREST_MIPMAP_NEAREST:
-		dwFunc = D3DFILTER_MIPNEAREST;
-		break;
-        case GL_LINEAR_MIPMAP_NEAREST:
-		dwFunc = D3DFILTER_LINEARMIPNEAREST;
-		break;
-        case GL_NEAREST_MIPMAP_LINEAR:
-		dwFunc = D3DFILTER_MIPLINEAR;
-		break;
-        case GL_LINEAR_MIPMAP_LINEAR:
-		dwFunc = D3DFILTER_LINEARMIPLINEAR;
-		break;
-      }
-      SetStateHAL( pContext->pShared, D3DRENDERSTATE_TEXTUREMAG, dwFunc );
-
-      switch( ctx->Texture.Set[ctx->Texture.CurrentSet].Current->MinFilter )
-      {
-	   case GL_NEAREST:
-		dwFunc = D3DFILTER_NEAREST;
-		break;
-        case GL_LINEAR:
-		dwFunc = D3DFILTER_LINEAR;
-		break;
-        case GL_NEAREST_MIPMAP_NEAREST:
-		dwFunc = D3DFILTER_MIPNEAREST;
-		break;
-        case GL_LINEAR_MIPMAP_NEAREST:
-		dwFunc = D3DFILTER_LINEARMIPNEAREST;
-		break;
-        case GL_NEAREST_MIPMAP_LINEAR:
-		dwFunc = D3DFILTER_MIPLINEAR;
-		break;
-        case GL_LINEAR_MIPMAP_LINEAR:
-		dwFunc = D3DFILTER_LINEARMIPLINEAR;
-		break;
-      }
-      SetStateHAL( pContext->pShared, D3DRENDERSTATE_TEXTUREMIN, dwFunc  );
-
-	 /* Another hack to cut down on redundant texture binding. */
-	 //	 if ( texName != ctx->Texture.Set[ctx->Texture.CurrentSet].Current->Name )
-	 //	 {
-	   texName = ctx->Texture.Set[ctx->Texture.CurrentSet].Current->Name;
-	   CreateTMgrHAL( pContext->pShared,
-				   texName,
-				   0,
-				   ctx->Texture.Set[ctx->Texture.CurrentSet].Current->Image[0][0]->Format,
-				   (RECT *)NULL,
-				   ctx->Texture.Set[ctx->Texture.CurrentSet].Current->Image[0][0]->Width,
-				   ctx->Texture.Set[ctx->Texture.CurrentSet].Current->Image[0][0]->Height,
-				   TM_ACTION_BIND,
-				   (void *)ctx->Texture.Set[ctx->Texture.CurrentSet].Current->Image[0][0]->Data );
-	   //	 }
-	 bTexture = TRUE;
-   }
-   else
-   {
-	/* This is nasty but should cut down on the number of redundant calls. */
-	if ( bTexture == TRUE )
-	{
-	  DisableTMgrHAL( pContext->pShared );
-	  bTexture = FALSE;
-	}
-   }
-
-   /*===============================================*/
-   /* Check too see if there are new RASTER states. */
-   /*===============================================*/
-
-   // TODO: no concept of front & back.
-   switch( ctx->Polygon.FrontMode )
-   {
-     case GL_POINT:
-	  SetStateHAL( pContext->pShared, D3DRENDERSTATE_FILLMODE, D3DFILL_POINT );
-	  break;
-     case GL_LINE:
-	  SetStateHAL( pContext->pShared, D3DRENDERSTATE_FILLMODE, D3DFILL_WIREFRAME );
-	  break;
-     case GL_FILL:
-	  SetStateHAL( pContext->pShared, D3DRENDERSTATE_FILLMODE, D3DFILL_SOLID );
-	  break;
-   }
-
-   /*************/
-   /* Z-Buffer. */
-   /*************/
-   if ( ctx->Depth.Test == GL_TRUE )
-   {
-	switch( ctx->Depth.Func )
-	{
-	  case GL_NEVER:
-	    dwFunc = D3DCMP_NEVER;
-	    break;
-	  case GL_LESS:
-	    dwFunc = D3DCMP_LESS;
-	    break;
-  	  case GL_GEQUAL:
-	    dwFunc = D3DCMP_GREATEREQUAL;
-	    break;
-  	  case GL_LEQUAL:
-	    dwFunc = D3DCMP_LESSEQUAL;
-	    break;
-	  case GL_GREATER:
-	    dwFunc = D3DCMP_GREATER;
-	    break;
-	  case GL_NOTEQUAL:
-	    dwFunc = D3DCMP_NOTEQUAL;
-	    break;
-	  case GL_EQUAL:
-	    dwFunc = D3DCMP_EQUAL;
-	    break;
-	  case GL_ALWAYS:
-	    dwFunc = D3DCMP_ALWAYS;
-	    break;
-	}
-	SetStateHAL( pContext->pShared, D3DRENDERSTATE_ZFUNC, dwFunc );
-	SetStateHAL( pContext->pShared, D3DRENDERSTATE_ZENABLE, TRUE );
-   }	
-   else
-   {
-	SetStateHAL( pContext->pShared, D3DRENDERSTATE_ZENABLE, FALSE );
-   }
-
-   /*******************/
-   /* Z-Write Enable. */
-   /*******************/
-   SetStateHAL( pContext->pShared, D3DRENDERSTATE_ZWRITEENABLE , (ctx->Depth.Mask == GL_TRUE) ? TRUE : FALSE );
-
-   /***************/
-   /* Alpha test. */
-   /***************/
-   if ( ctx->Color.AlphaEnabled == GL_TRUE )
-   {
-	switch( ctx->Color.AlphaFunc )
-     {
-	  case GL_NEVER:
-	    dwFunc = D3DCMP_NEVER;
-	    break;
-	  case GL_LESS:
-	    dwFunc = D3DCMP_LESS;
-	    break;
-  	  case GL_GEQUAL:
-	    dwFunc = D3DCMP_GREATEREQUAL;
-	    break;
-  	  case GL_LEQUAL:
-	    dwFunc = D3DCMP_LESSEQUAL;
-	    break;
-	  case GL_GREATER:
-	    dwFunc = D3DCMP_GREATER;
-	    break;
-	  case GL_NOTEQUAL:
-	    dwFunc = D3DCMP_NOTEQUAL;
-	    break;
-	  case GL_EQUAL:
-	    dwFunc = D3DCMP_EQUAL;
-	    break;
-	  case GL_ALWAYS:
-	    dwFunc = D3DCMP_ALWAYS;
-	    break;
-	}
-	SetStateHAL( pContext->pShared, D3DRENDERSTATE_ALPHAFUNC , dwFunc );
-	SetStateHAL( pContext->pShared, D3DRENDERSTATE_ALPHATESTENABLE, TRUE );
-   }
-   else
-   {
-	SetStateHAL( pContext->pShared, D3DRENDERSTATE_ALPHATESTENABLE, FALSE );
-   }
-
-   /****************/
-   /* Alpha blend. */
-   /****************/
-   if ( ctx->Color.BlendEnabled == GL_TRUE )
-   {
-	switch( ctx->Color.BlendSrc )
-	{
-	  case GL_ZERO:	    			
-	    dwFunc = pContext->pShared->dwSrcBlendCaps[s_zero];
-	    break;
-       case GL_ONE:
-	    dwFunc = pContext->pShared->dwSrcBlendCaps[s_one];
-	    break;
-       case GL_DST_COLOR:
-	    dwFunc = pContext->pShared->dwSrcBlendCaps[s_dst_color];
-	    break;
-       case GL_ONE_MINUS_DST_COLOR:
-	    dwFunc = pContext->pShared->dwSrcBlendCaps[s_one_minus_dst_color];
-	    break;
-       case GL_SRC_ALPHA:
-	    dwFunc = pContext->pShared->dwSrcBlendCaps[s_src_alpha];
-	    break;
-       case GL_ONE_MINUS_SRC_ALPHA:
-	    dwFunc = pContext->pShared->dwSrcBlendCaps[s_one_minus_src_alpha];
-	    break;
-       case GL_DST_ALPHA:
-	    dwFunc = pContext->pShared->dwSrcBlendCaps[s_dst_alpha];
-	    break;
-       case GL_ONE_MINUS_DST_ALPHA:
-	    dwFunc = pContext->pShared->dwSrcBlendCaps[s_one_minus_dst_alpha];
-	    break;
-       case GL_SRC_ALPHA_SATURATE:
-	    dwFunc = pContext->pShared->dwSrcBlendCaps[s_src_alpha_saturate];
-	    break;
-       case GL_CONSTANT_COLOR:
-	    dwFunc = pContext->pShared->dwSrcBlendCaps[s_constant_color];
-	    break;
-       case GL_ONE_MINUS_CONSTANT_COLOR:
-	    dwFunc = pContext->pShared->dwSrcBlendCaps[s_one_minus_constant_color];
-	    break;
-       case GL_CONSTANT_ALPHA:
-	    dwFunc = pContext->pShared->dwSrcBlendCaps[s_constant_alpha];
-	    break;
-       case GL_ONE_MINUS_CONSTANT_ALPHA:
-	    dwFunc = pContext->pShared->dwSrcBlendCaps[s_one_minus_constant_alpha];
-	    break;
-	}
-	SetStateHAL( pContext->pShared, D3DRENDERSTATE_SRCBLEND, dwFunc );
-
-	switch( ctx->Color.BlendDst )
-	{
-       case GL_ZERO:                  	
-	    dwFunc = pContext->pShared->dwDestBlendCaps[d_zero];
-	    break;
-       case GL_ONE:
-	    dwFunc = pContext->pShared->dwDestBlendCaps[d_one];
-	    break;
-       case GL_SRC_COLOR:
-	    dwFunc = pContext->pShared->dwDestBlendCaps[d_src_color];
-	    break;
-       case GL_ONE_MINUS_SRC_COLOR:
-	    dwFunc = pContext->pShared->dwDestBlendCaps[d_one_minus_src_color];
-	    break;
-       case GL_SRC_ALPHA:
-	    dwFunc = pContext->pShared->dwDestBlendCaps[d_src_alpha];
-	    break;
-       case GL_ONE_MINUS_SRC_ALPHA:
-	    dwFunc = pContext->pShared->dwDestBlendCaps[d_one_minus_src_alpha];
-	    break;
-       case GL_DST_ALPHA:
-	    dwFunc = pContext->pShared->dwDestBlendCaps[d_dst_alpha];
-	    break;
-       case GL_ONE_MINUS_DST_ALPHA:
-	    dwFunc = pContext->pShared->dwDestBlendCaps[d_one_minus_dst_alpha];
-	    break;
-       case GL_CONSTANT_COLOR:
-	    dwFunc = pContext->pShared->dwDestBlendCaps[d_constant_color];
-	    break;
-       case GL_ONE_MINUS_CONSTANT_COLOR:
-	    dwFunc = pContext->pShared->dwDestBlendCaps[d_one_minus_constant_color];
-	    break;
-       case GL_CONSTANT_ALPHA:
-	    dwFunc = pContext->pShared->dwDestBlendCaps[d_constant_alpha];
-	    break;
-       case GL_ONE_MINUS_CONSTANT_ALPHA:
-	    dwFunc = pContext->pShared->dwDestBlendCaps[d_one_minus_constant_alpha];
-	    break;
-	}
-	SetStateHAL( pContext->pShared, D3DRENDERSTATE_DESTBLEND, dwFunc );
-	SetStateHAL( pContext->pShared, D3DRENDERSTATE_ALPHABLENDENABLE, TRUE );
-   }
-   else
-   {
-	SetStateHAL( pContext->pShared, D3DRENDERSTATE_ALPHABLENDENABLE, FALSE );
-   }
-}
-/*===========================================================================*/
-/*  If this function is called it will track the changes to the current      */
-/* states that I'm setting in Direct3D.  I did this so that the DPF's would  */
-/* be under control!                                                         */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-static void DebugRenderStates( GLcontext *ctx, BOOL bForce )
-{
-   D3DMESACONTEXT	*pContext = (D3DMESACONTEXT *)ctx->DriverCtx;
-   DWORD			dwFunc;
-   static int		dither = -1,
-	               texture = -1,
-                    textName = -1,
-	               textEnv = -1,
-                    textMin = -1,
-                    textMag = -1,
-                    polyMode = -1,
-	               depthTest = -1,
-	               depthFunc = -1,
-	               depthMask = -1,
-	               alphaTest = -1,
-                    alphaFunc = -1,
-	               blend = -1,
-                    blendSrc = -1,
-                    blendDest = -1;
-
-   /* Force a displayed update of all current states. */
-   if ( bForce )
-   {
-	dither = texture = textName = textEnv = textMin = textMag = -1;
-	polyMode = depthTest = depthFunc = depthMask = -1;
-	alphaTest = alphaFunc = blend = blendSrc = blendDest = -1;
-   }
-
-   if ( dither != ctx->Color.DitherFlag )
-   {
-	dither = ctx->Color.DitherFlag;
-	DPF(( 0, "\tDither\t\t%s", (dither) ? "ENABLED" : "--------" ));
-   }
-   if ( depthTest != ctx->Depth.Test )
-   {
-	depthTest = ctx->Depth.Test;
-	DPF(( 0, "\tDepth Test\t%s", (depthTest) ? "ENABLED" : "--------" ));
-   }
-   if ( alphaTest != ctx->Color.AlphaEnabled )
-   {	
-	alphaTest = ctx->Color.AlphaEnabled;
-	
-	DPF(( 0, "\tAlpha Test\t%s", (alphaTest) ? "ENABLED" : "--------" ));
-   }
-   if ( blend != ctx->Color.BlendEnabled )
-   {	
-	blend = ctx->Color.BlendEnabled;
-	
-	DPF(( 0, "\tBlending\t%s", (blend) ? "ENABLED" : "--------" ));
-   }
-
-   /*================================================*/
-   /* Check too see if there are new TEXTURE states. */
-   /*================================================*/
-   if ( texture != ctx->Texture._EnabledUnits )
-   {
-	texture = ctx->Texture._EnabledUnits;
-	DPF(( 0, "\tTexture\t\t%s", (texture) ? "ENABLED" : "--------" ));
-   }	
-
-   if ( ctx->Texture.Set[ctx->Texture.CurrentSet].Current )
-   {
-	if ( ctx->Texture.Set[ctx->Texture.CurrentSet].Current->Name != textName )
-	{
-	  textName = ctx->Texture.Set[ctx->Texture.CurrentSet].Current->Name;
-	  DPF(( 0, "\tTexture Name:\t%d", textName ));
-	  DPF(( 0, "\tTexture Format:\t%s",
-		   (ctx->Texture.Set[ctx->Texture.CurrentSet].Current->Image[0][0]->Format == GL_RGBA) ?
-		   "GL_RGBA" : "GLRGB" ));
-	}
-
-	if ( textEnv != ctx->Texture.Set[ctx->Texture.CurrentSet].EnvMode )
-	{
-	  textEnv = ctx->Texture.Set[ctx->Texture.CurrentSet].EnvMode;
-
-	  switch( textEnv )
-	  {
-       case GL_MODULATE:
-	    DPF(( 0, "\tTexture\tMode\tGL_MODULATE" ));
-	    break;
-       case GL_BLEND:
-	    DPF(( 0, "\tTexture\tMode\tGL_BLEND" ));
-	    break;
-       case GL_REPLACE:
-	    DPF(( 0, "\tTexture\tMode\tGL_REPLACE" ));
-	    break;
-       case GL_DECAL:
-	    DPF(( 0, "\tTexture\tMode\tGL_DECAL" ));
-	    break;
-	  }
-	}
-
-	if ( textMag != ctx->Texture.Set[ctx->Texture.CurrentSet].Current->MagFilter )
-	{
-	  textMag = ctx->Texture.Set[ctx->Texture.CurrentSet].Current->MagFilter;
-	
-	  switch( textMag )
-	  {
-       case GL_NEAREST:
-	    DPF(( 0, "\tTexture MAG\tGL_NEAREST" ));
-	    break;
-       case GL_LINEAR:
-	    DPF(( 0, "\tTexture MAG\tGL_LINEAR" ));
-	    break;
-       case GL_NEAREST_MIPMAP_NEAREST:
-	    DPF(( 0, "\tTexture MAG\tGL_NEAREST_MIPMAP_NEAREST" ));
-	    break;
-       case GL_LINEAR_MIPMAP_NEAREST:
-	    DPF(( 0, "\tTexture MAG\tGL_LINEAR_MIPMAP_NEAREST" ));
-	    break;
-       case GL_NEAREST_MIPMAP_LINEAR:
-	    DPF(( 0, "\tTexture MAG\tGL_NEAREST_MIPMAP_LINEAR" ));
-	    break;
-       case GL_LINEAR_MIPMAP_LINEAR:
-	    DPF(( 0, "\tTexture MAG\tGL_LINEAR_MIPMAP_LINEAR" ));
-	    break;
-	  }
-	}
-
-	if ( textMin != ctx->Texture.Set[ctx->Texture.CurrentSet].Current->MinFilter )
-	{
-	  textMin = ctx->Texture.Set[ctx->Texture.CurrentSet].Current->MinFilter;
-
-	  switch( textMin )
-	  {
-       case GL_NEAREST:
-	    DPF(( 0, "\tTexture MIN\tGL_NEAREST" ));
-	    break;
-       case GL_LINEAR:
-	    DPF(( 0, "\tTexture MIN\tGL_LINEAR" ));
-	    break;
-       case GL_NEAREST_MIPMAP_NEAREST:
-	    DPF(( 0, "\tTexture MIN\tGL_NEAREST_MIPMAP_NEAREST" ));
-	    break;
-       case GL_LINEAR_MIPMAP_NEAREST:
-	    DPF(( 0, "\tTexture MIN\tGL_LINEAR_MIPMAP_NEAREST" ));
-	    break;
-       case GL_NEAREST_MIPMAP_LINEAR:
-	    DPF(( 0, "\tTexture MIN\tGL_LINEAR_MIPMAP_LINEAR" ));
-	    break;
-       case GL_LINEAR_MIPMAP_LINEAR:
-	    DPF(( 0, "\tTexture MIN\tGL_LINEAR_MIPMAP_LINEAR" ));
-	    break;
-	  }
-	}	
-   }
-
-   if ( ctx->Polygon.FrontMode != polyMode )
-   {
-	polyMode = ctx->Polygon.FrontMode;
-
-	switch( polyMode )
-	{
-       case GL_POINT:
-	    DPF(( 0, "\tMode\t\tGL_POINT" ));
-	    break;
-       case GL_LINE:
-	    DPF(( 0, "\tMode\t\tGL_LINE" ));
-	    break;
-       case GL_FILL:
-	    DPF(( 0, "\tMode\t\tGL_FILL" ));
-	    break;
-	}
-   }
-
-   if ( depthFunc != ctx->Depth.Func )
-   {
-	depthFunc = ctx->Depth.Func;
-
-	switch( depthFunc )
-	{
-       case GL_NEVER:
-	    DPF(( 0, "\tDepth Func\tGL_NEVER" ));
-	    break;
-       case GL_LESS:
-	    DPF(( 0, "\tDepth Func\tGL_LESS" ));
-	    break;
-       case GL_GEQUAL:
-	    DPF(( 0, "\tDepth Func\tGL_GEQUAL" ));
-	    break;
-       case GL_LEQUAL:
-	    DPF(( 0, "\tDepth Func\tGL_LEQUAL" ));
-	    break;
-       case GL_GREATER:
-	    DPF(( 0, "\tDepth Func\tGL_GREATER" ));
-	    break;
-       case GL_NOTEQUAL:
- 	    DPF(( 0, "\tDepth Func\tGL_NOTEQUAL" ));
-	    break;
-       case GL_EQUAL:
-	    DPF(( 0, "\tDepth Func\tGL_EQUAL" ));
-	    break;
-       case GL_ALWAYS:
-	    DPF(( 0, "\tDepth Func\tGL_ALWAYS" ));
-	    break;
-	}
-   }	
-
-   if ( depthMask != ctx->Depth.Mask )
-   {
-	depthMask = ctx->Depth.Mask;
-	DPF(( 0, "\tZWrite\t\t%s", (depthMask) ? "ENABLED" : "--------" ));
-   }
-
-   if ( alphaFunc != ctx->Color.AlphaFunc )
-   {
-	alphaFunc = ctx->Color.AlphaFunc;
-
-	switch( alphaFunc )
-     {
-	  case GL_NEVER:
-	    DPF(( 0, "\tAlpha Func\tGL_NEVER" ));
-	    break;
-	  case GL_LESS:
-	    DPF(( 0, "\tAlpha Func\tGL_LESS" ));
-	    break;
-  	  case GL_GEQUAL:
-	    DPF(( 0, "\tAlpha Func\tGL_GEQUAL" ));
-	    break;
-  	  case GL_LEQUAL:
-	    DPF(( 0, "\tAlpha Func\tGL_LEQUAL" ));
-	    break;
-	  case GL_GREATER:
-	    DPF(( 0, "\tAlpha Func\tGL_GREATER" ));
-	    break;
-	  case GL_NOTEQUAL:
-	    DPF(( 0, "\tAlpha Func\tGL_NOTEQUAL" ));
-	    break;
-	  case GL_EQUAL:
-	    DPF(( 0, "\tAlpha Func\tGL_EQUAL" ));
-	    break;
-	  case GL_ALWAYS:
-	    DPF(( 0, "\tAlpha Func\tGL_ALWAYS" ));
-	    break;
-	}
-   }
-
-   if ( blendSrc != ctx->Color.BlendSrc )
-   {
-	blendSrc = ctx->Color.BlendSrc;
-
-	switch( blendSrc )
-	{
-	  case GL_ZERO:	    			
-	    DPF(( 0, "\tSRC Blend\tGL_ZERO" ));
-	    break;
-       case GL_ONE:
-	    DPF(( 0, "\tSRC Blend\tGL_ONE" ));
-	    break;
-       case GL_DST_COLOR:
-	    DPF(( 0, "\tSRC Blend\tGL_DST_COLOR" ));
-	    break;
-       case GL_ONE_MINUS_DST_COLOR:
-	    DPF(( 0, "\tSRC Blend\tGL_ONE_MINUS_DST_COLOR" ));
-	    break;
-       case GL_SRC_ALPHA:
-	    DPF(( 0, "\tSRC Blend\tGL_SRC_ALPHA" ));
-	    break;
-       case GL_ONE_MINUS_SRC_ALPHA:
-	    DPF(( 0, "\tSRC Blend\tGL_MINUS_SRC_ALPHA" ));
-	    break;
-       case GL_DST_ALPHA:
-	    DPF(( 0, "\tSRC Blend\tGL_DST_ALPHA" ));
-	    break;
-       case GL_ONE_MINUS_DST_ALPHA:
-	    DPF(( 0, "\tSRC Blend\tGL_ONE_MINUS_DST_ALPHA" ));
-	    break;
-       case GL_SRC_ALPHA_SATURATE:
-	    DPF(( 0, "\tSRC Blend\tGL_SRC_ALPHA_SATURATE" ));
-	    break;
-       case GL_CONSTANT_COLOR:
-	    DPF(( 0, "\tSRC Blend\tGL_CONSTANT_COLOR" ));
-	    break;
-       case GL_ONE_MINUS_CONSTANT_COLOR:
-	    DPF(( 0, "\tSRC Blend\tGL_ONE_MINUS_CONSTANT_COLOR" ));
-	    break;
-       case GL_CONSTANT_ALPHA:
-	    DPF(( 0, "\tSRC Blend\tGL_CONSTANT_ALPHA" ));
-	    break;
-       case GL_ONE_MINUS_CONSTANT_ALPHA:
-	    DPF(( 0, "\tSRC Blend\tGL_ONE_MINUS_CONSTANT_ALPHA" ));
-	    break;
-	}
-   }
-
-   if ( blendDest != ctx->Color.BlendDst )
-   {
-	blendDest = ctx->Color.BlendDst;
-
-	switch( blendDest )
-	{
-       case GL_ZERO:                  	
-	    DPF(( 0, "\tDST Blend\tGL_ZERO" ));
-	    break;
-       case GL_ONE:
-	    DPF(( 0, "\tDST Blend\tGL_ONE" ));
-	    break;
-       case GL_SRC_COLOR:
-	    DPF(( 0, "\tDST Blend\tGL_SRC_COLOR" ));
-	    break;
-       case GL_ONE_MINUS_SRC_COLOR:
-	    DPF(( 0, "\tDST Blend\tGL_ONE_MINUS_SRC_COLOR" ));
-	    break;
-       case GL_SRC_ALPHA:
-	    DPF(( 0, "\tDST Blend\tGL_SRC_ALPHA" ));
-	    break;
-       case GL_ONE_MINUS_SRC_ALPHA:
-	    DPF(( 0, "\tDST Blend\tGL_ONE_MINUS_SRC_ALPHA" ));
-	    break;
-       case GL_DST_ALPHA:
-	    DPF(( 0, "\tDST Blend\tGL_DST_ALPHA" ));
-	    break;
-       case GL_ONE_MINUS_DST_ALPHA:
-	    DPF(( 0, "\tDST Blend\tGL_ONE_MINUS_DST_ALPHA" ));
-	    break;
-       case GL_CONSTANT_COLOR:
-	    DPF(( 0, "\tDST Blend\tGL_CONSTANT_COLOR" ));
-	    break;
-       case GL_ONE_MINUS_CONSTANT_COLOR:
-	    DPF(( 0, "\tDST Blend\tGL_ONE_MINUS_CONSTANT_COLOR" ));
-	    break;
-       case GL_CONSTANT_ALPHA:
-	    DPF(( 0, "\tDST Blend\tGL_CONSTANT_ALPHA" ));
-	    break;
-       case GL_ONE_MINUS_CONSTANT_ALPHA:
-	    DPF(( 0, "\tDST Blend\tGL_ONE_MINUS_CONSTANT_ALPHA" ));
-	    break;
-	}
-   }	
-}
diff --git a/src/mesa/drivers/d3d/DDrawPROCS.c b/src/mesa/drivers/d3d/DDrawPROCS.c
deleted file mode 100644
index 10dcfdbabb..0000000000
--- a/src/mesa/drivers/d3d/DDrawPROCS.c
+++ /dev/null
@@ -1,399 +0,0 @@
-/*===========================================================================*/
-/*                                                                           */
-/* Mesa-3.0 DirectX 6 Driver                                	             */
-/*                                                                           */
-/* By Leigh McRae                                                            */
-/*                                                                           */
-/* http://www.altsoftware.com/                                               */
-/*                                                                           */
-/* Copyright (c) 1999-1998  alt.software inc.  All Rights Reserved           */
-/*===========================================================================*/
-#include "D3DMesa.h"
-/*===========================================================================*/
-/*  This call will clear the render surface using the pixel info built from  */
-/* the surface at creation time.  The call uses Lock/Unlock to access the    */
-/* surface.  The call also special cases a full clear or a dirty rectangle.  */
-/*  Finally the call returns the new clear mask that reflects that the color */
-/* buffer was cleared.                                                       */
-/*===========================================================================*/
-/* RETURN: the original mask with the bits cleared that represents the buffer*/
-/* or buffers we just cleared.                                               */
-/*===========================================================================*/
-GLbitfield ClearBuffers( GLcontext *ctx, GLbitfield mask, GLboolean all, GLint x, GLint y, GLint width, GLint height )
-{
-   D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx;
-   DDSURFACEDESC2 *pddsd2;
-   UCHAR          *pBuffer,
-                  *pScanLine;
-   int            index,
-	              index2;
-   DWORD          dwColor;
-
-   if ( mask & GL_COLOR_BUFFER_BIT )
-   {
-	/* Lock the surface to get the surface pointer. */
-	pddsd2 = LockHAL( pContext->pShared, TRUE );
-   
-	/* Solve the color once only. */
-	dwColor =  ( ((DWORD)((float)pContext->rClear * pContext->pShared->pixel.rScale)) << pContext->pShared->pixel.rShift );
-	dwColor |= ( ((DWORD)((float)pContext->gClear * pContext->pShared->pixel.gScale)) << pContext->pShared->pixel.gShift );
-	dwColor |= ( ((DWORD)((float)pContext->bClear * pContext->pShared->pixel.bScale)) << pContext->pShared->pixel.bShift );
-   
-	if ( all ) 
-	{
-	  for( index = 0, pScanLine = (UCHAR *)pddsd2->lpSurface; index < pContext->pShared->dwHeight; index++, pScanLine += pddsd2->lPitch )
-	    for( pBuffer = pScanLine, index2 = 0; index2 < pContext->pShared->dwWidth; index2++, pBuffer += pContext->pShared->pixel.cb )
-               memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb );
-	}
-	else
-	{
-	  pScanLine = ((UCHAR *)pddsd2->lpSurface) +
-          	    ( (FLIP( pContext->pShared->dwHeight, (y+height)) * pddsd2->lPitch) + (x * pContext->pShared->pixel.cb) );
-
-	  for( index = 0; index < height; index++, pScanLine += pddsd2->lPitch )
-	  {
-	    for( index2 = 0, pBuffer = pScanLine; index2 < width; index2++, pBuffer += pContext->pShared->pixel.cb )
-		 memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb );
-	  }
-	}
-   
-	UnlockHAL( pContext->pShared, TRUE );
-   }
-   
-   return (mask & ~GL_COLOR_BUFFER_BIT);
-}
-/*===========================================================================*/
-/*  This proc (as all others) has been written for the general case. I use   */
-/* the PIXELINFO structure to pack the pixel from RGB24 to whatever the Off- */
-/* Screen render surface uses.  The alpha is ignored as Mesa does it in SW.  */
-/*===========================================================================*/
-/* RETURN:                                                                   */ 
-/*===========================================================================*/
-void WSpanRGB( const GLcontext* ctx, GLuint n, GLint x, GLint y, const GLubyte rgb[][3], const GLubyte mask[] )
-{
-   D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx;
-   DDSURFACEDESC2 *pddsd2;
-   UCHAR          *pBuffer;
-   int            index;
-   DWORD          dwColor;
-
-   /* Get the surface pointer and the pitch. */
-   pddsd2 = LockHAL( pContext->pShared, TRUE );
-
-   /* Find the start of the span. Invert y for Windows. */
-   pBuffer = (UCHAR *)pddsd2->lpSurface + (FLIP(pContext->pShared->dwHeight,y) * pddsd2->lPitch) + (x*pContext->pShared->pixel.cb);
-
-   if ( mask ) 
-   {
-	for( index = 0; index < n; index++, pBuffer += pContext->pShared->pixel.cb )
-	{
-	  if ( mask[index] )
-	  {
-	    /* Pack the color components. */
-	    dwColor =  ( ((DWORD)((float)rgb[index][RCOMP] * pContext->pShared->pixel.rScale)) << pContext->pShared->pixel.rShift );
-	    dwColor |= ( ((DWORD)((float)rgb[index][GCOMP] * pContext->pShared->pixel.gScale)) << pContext->pShared->pixel.gShift );
-	    dwColor |= ( ((DWORD)((float)rgb[index][BCOMP] * pContext->pShared->pixel.bScale)) << pContext->pShared->pixel.bShift );
-	    memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb );
-	  }
-	}	
-   }
-   else
-   {
-	for( index = 0; index < n; index++, pBuffer += pContext->pShared->pixel.cb )
-	{
-	  /* Pack the color components. */
-	  dwColor =  ( ((DWORD)((float)rgb[index][RCOMP] * pContext->pShared->pixel.rScale)) << pContext->pShared->pixel.rShift );
-	  dwColor |= ( ((DWORD)((float)rgb[index][GCOMP] * pContext->pShared->pixel.gScale)) << pContext->pShared->pixel.gShift );
-	  dwColor |= ( ((DWORD)((float)rgb[index][BCOMP] * pContext->pShared->pixel.bScale)) << pContext->pShared->pixel.bShift );
-	  memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb );
-	}
-   }
-
-   /* Giver back. */
-   UnlockHAL( pContext->pShared, TRUE );
-}
-/*===========================================================================*/
-/*  This proc (as all others) has been written for the general case. I use   */
-/* the PIXELINFO structure to pack the pixel from RGB24 to whatever the Off- */
-/* Screen render surface uses.  The alpha is ignored as Mesa does it in SW.  */
-/*===========================================================================*/
-/* RETURN:                                                                   */ 
-/*===========================================================================*/
-void WSpanRGBA( const GLcontext* ctx, GLuint n, GLint x, GLint y, const GLubyte rgba[][4], const GLubyte mask[] )
-{
-   D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx;
-   DDSURFACEDESC2 *pddsd2;
-   UCHAR          *pBuffer;
-   int            index;
-   DWORD          dwColor;
-
-   /* Get the surface pointer and the pitch. */
-   pddsd2 = LockHAL( pContext->pShared, TRUE );
-
-   /* Find the start of the span. Invert y for Windows. */
-   pBuffer = (UCHAR *)pddsd2->lpSurface + (FLIP(pContext->pShared->dwHeight,y) * pddsd2->lPitch) + (x*pContext->pShared->pixel.cb);
-
-   if ( mask ) 
-   {
-	for( index = 0; index < n; index++, pBuffer += pContext->pShared->pixel.cb )
-	{
-	  if ( mask[index] )
-	  {
-         /* Pack the color components. */
-	    dwColor =  ( ((DWORD)((float)rgba[index][RCOMP] * pContext->pShared->pixel.rScale)) << pContext->pShared->pixel.rShift );
-	    dwColor |= ( ((DWORD)((float)rgba[index][GCOMP] * pContext->pShared->pixel.gScale)) << pContext->pShared->pixel.gShift );
-	    dwColor |= ( ((DWORD)((float)rgba[index][BCOMP] * pContext->pShared->pixel.bScale)) << pContext->pShared->pixel.bShift );
-	    memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb );
-	  }
-	}	
-   }
-   else
-   {
-	for( index = 0; index < n; index++, pBuffer += pContext->pShared->pixel.cb )
-	{
-	  /* Pack the color components. */
-	  dwColor =  ( ((DWORD)((float)rgba[index][RCOMP] * pContext->pShared->pixel.rScale)) << pContext->pShared->pixel.rShift );
-	  dwColor |= ( ((DWORD)((float)rgba[index][GCOMP] * pContext->pShared->pixel.gScale)) << pContext->pShared->pixel.gShift );
-	  dwColor |= ( ((DWORD)((float)rgba[index][BCOMP] * pContext->pShared->pixel.bScale)) << pContext->pShared->pixel.bShift );
-	  memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb );
-	}
-   }
-
-   /* Giver back. */
-   UnlockHAL( pContext->pShared, TRUE );
-}
-/*===========================================================================*/
-/*  This proc (as all others) has been written for the general case. I use   */
-/* the PIXELINFO structure to pack the pixel from RGB24 to whatever the Off- */
-/* Screen render surface uses.  The color is solved once from the current    */
-/* color components.  The alpha is ignored as Mesa is doing it in SW.        */
-/*===========================================================================*/
-/* RETURN:                                                                   */ 
-/*===========================================================================*/
-void WSpanRGBAMono( const GLcontext* ctx, GLuint n, GLint x, GLint y, const GLubyte mask[] )
-{
-   D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx;
-   DDSURFACEDESC2 *pddsd2;
-   UCHAR          *pBuffer;
-   int            index;
-   DWORD          dwColor;
-
-   /* Lock the surface to get the surface pointer and the pitch. */
-   pddsd2 = LockHAL( pContext->pShared, TRUE );
-
-   /* Solve the color once only. (no alpha) */
-   dwColor =  ( ((DWORD)((float)pContext->rCurrent * pContext->pShared->pixel.rScale)) << pContext->pShared->pixel.rShift );
-   dwColor |= ( ((DWORD)((float)pContext->gCurrent * pContext->pShared->pixel.gScale)) << pContext->pShared->pixel.gShift );
-   dwColor |= ( ((DWORD)((float)pContext->bCurrent * pContext->pShared->pixel.bScale)) << pContext->pShared->pixel.bShift );
-
-   /* Find the start of the span. Invert y for Windows. */
-   pBuffer = (UCHAR *)pddsd2->lpSurface + (FLIP(pContext->pShared->dwHeight,y) * pddsd2->lPitch) + (x*pContext->pShared->pixel.cb);
-
-   if ( mask ) 
-   {
-	for( index = 0; index < n; index++, pBuffer += pContext->pShared->pixel.cb )
-	  if ( mask[index] )
-	    memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb );
-   }
-   else
-   {
-	for( index = 0; index < n; index++, pBuffer += pContext->pShared->pixel.cb )
-	  memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb );
-   }
-
-   /* Giver back. */
-   UnlockHAL( pContext->pShared, TRUE );
-}
-/*===========================================================================*/
-/*  This proc (as all others) has been written for the general case. I use   */
-/* the PIXELINFO structure to pack the pixel from RGB24 to whatever the Off- */
-/* Screen render surface uses.  The alpha is ignored as Mesa does it in SW.  */
-/*===========================================================================*/
-/* RETURN:                                                                   */ 
-/*===========================================================================*/
-void WPixelsRGBA( const GLcontext* ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte rgba[][4], const GLubyte mask[] )
-{
-   D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx;
-   DDSURFACEDESC2 *pddsd2;
-   UCHAR          *pBuffer;
-   int            index;
-   DWORD          dwColor;
-
-   /* Get the surface pointer and the pitch. */
-   pddsd2 = LockHAL( pContext->pShared, TRUE );
-
-   if ( mask ) 
-   {
-	for( index = 0; index < n; index++ )
-	{
-	  if ( mask[index] )
-	  {
-	    /* Pack the color components. */
-	    dwColor =  ( ((DWORD)((float)rgba[index][RCOMP] * pContext->pShared->pixel.rScale)) << pContext->pShared->pixel.rShift );
-	    dwColor |= ( ((DWORD)((float)rgba[index][GCOMP] * pContext->pShared->pixel.gScale)) << pContext->pShared->pixel.gShift );
-	    dwColor |= ( ((DWORD)((float)rgba[index][BCOMP] * pContext->pShared->pixel.bScale)) << pContext->pShared->pixel.bShift );
-
-	    /* Find the pixel. Invert y for Windows. */
-	    pBuffer = (UCHAR *)pddsd2->lpSurface + (FLIP(pContext->pShared->dwHeight,y[index]) * pddsd2->lPitch) + (x[index]*pContext->pShared->pixel.cb);
-	    memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb );
-	  }
-	}
-   }
-   else
-   {
-	for( index = 0; index < n; index++ )
-	{
-	  /* Pack the color components. */
-	  dwColor =  ( ((DWORD)((float)rgba[index][RCOMP] * pContext->pShared->pixel.rScale)) << pContext->pShared->pixel.rShift );
-	  dwColor |= ( ((DWORD)((float)rgba[index][GCOMP] * pContext->pShared->pixel.gScale)) << pContext->pShared->pixel.gShift );
-	  dwColor |= ( ((DWORD)((float)rgba[index][BCOMP] * pContext->pShared->pixel.bScale)) << pContext->pShared->pixel.bShift );
-
-	  /* Find the pixel. Invert y for Windows. */
-	  pBuffer = (UCHAR *)pddsd2->lpSurface + (FLIP(pContext->pShared->dwHeight,y[index]) * pddsd2->lPitch) + (x[index]*pContext->pShared->pixel.cb);
-	  memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb );
-	}
-   }
-
-   /* Giver back. */
-   UnlockHAL( pContext->pShared, TRUE );
-}
-/*===========================================================================*/
-/*  This proc (as all others) has been written for the general case. I use   */
-/* the PIXELINFO structure to pack the pixel from RGB24 to whatever the Off- */
-/* Screen render surface uses.  The color is solved once from the current    */
-/* color components.  The alpha is ignored as Mesa is doing it in SW.        */
-/*===========================================================================*/
-/* RETURN:                                                                   */ 
-/*===========================================================================*/
-void WPixelsRGBAMono( const GLcontext* ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte mask[] )
-{
-   D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx;
-   DDSURFACEDESC2 *pddsd2;
-   UCHAR          *pBuffer;
-   int            index;
-   DWORD          dwColor;
-
-   /* Get the surface pointer and the pitch. */
-   pddsd2 = LockHAL( pContext->pShared, TRUE );
-
-   /* Solve the color once only. I don't uses the alpha. */
-   dwColor =  ( ((DWORD)((float)pContext->rCurrent * pContext->pShared->pixel.rScale)) << pContext->pShared->pixel.rShift );
-   dwColor |= ( ((DWORD)((float)pContext->gCurrent * pContext->pShared->pixel.gScale)) << pContext->pShared->pixel.gShift );
-   dwColor |= ( ((DWORD)((float)pContext->bCurrent * pContext->pShared->pixel.bScale)) << pContext->pShared->pixel.bShift );
-
-   if ( mask ) 
-   {
-	/* We store the surface pointer as a UCHAR so that pixel.cb (count in btyles) will work for all. */
-	for( index = 0; index < n; index++ )
-	{
-	  if ( mask[index] )
-	  {
-	    /* Find the pixel. Invert y for Windows. */
-	    pBuffer = (UCHAR *)pddsd2->lpSurface + (FLIP(pContext->pShared->dwHeight,y[index]) * pddsd2->lPitch) + (x[index]*pContext->pShared->pixel.cb);
-	    memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb );
-	  }
-	}
-   }
-   else
-   {
-	/* We store the surface pointer as a UCHAR so that pixel.cb (count in btyles) will work for all. */
-	for( index = 0; index < n; index++ )
-	{
-	  /* Find the pixel. Invert y for Windows. */
-	  pBuffer = (UCHAR *)pddsd2->lpSurface + (FLIP(pContext->pShared->dwHeight,y[index]) * pddsd2->lPitch) + (x[index]*pContext->pShared->pixel.cb);
-	  memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb );
-	}
-   }
-
-   /* Giver back. */
-   UnlockHAL( pContext->pShared, TRUE );
-}
-/*===========================================================================*/
-/*  This proc isn't written for speed rather its to handle the general case. */
-/* I grab each pixel from the surface and unpack the info using the PIXELINFO*/
-/* structure that was generated from the OffScreen surface pixelformat.  The */
-/* function will not fill in the alpha value as Mesa I have Mesa allocate its*/
-/* own alpha channel when the context was created.  I did this as I didn't   */
-/* feel that it was worth the effort to try and get HW to work (bus bound).  */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-void RSpanRGBA( const GLcontext* ctx, GLuint n, GLint x, GLint y, GLubyte rgba[][4] )
-{
-   D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx;
-   DDSURFACEDESC2 *pddsd2;
-   UCHAR          *pBuffer;
-   int            index;
-   DWORD          *pdwColor;
-
-   /* Get the surface pointer and the pitch. */
-   pddsd2 = LockHAL( pContext->pShared, TRUE );
-
-   /* Find the start of the span. Invert y for Windows. */
-   pBuffer = (UCHAR *)pddsd2->lpSurface + 
-	                 (FLIP(pContext->pShared->dwHeight,y) * pddsd2->lPitch) + 
-	                 (x*pContext->pShared->pixel.cb);
-
-   /* We store the surface pointer as a UCHAR so that pixel.cb (count in btyles) will work for all. */
-   for( index = 0; index < n; index++, pBuffer += pContext->pShared->pixel.cb )
-   {
-	pdwColor = (DWORD *)pBuffer;
-	rgba[index][RCOMP] = (GLubyte)((float)((*pdwColor & pContext->pShared->pixel.dwRMask) >> pContext->pShared->pixel.rShift) / pContext->pShared->pixel.rScale);
-	rgba[index][GCOMP] = (GLubyte)((float)((*pdwColor & pContext->pShared->pixel.dwGMask) >> pContext->pShared->pixel.gShift) / pContext->pShared->pixel.gScale);
-	rgba[index][BCOMP] = (GLubyte)((float)((*pdwColor & pContext->pShared->pixel.dwBMask) >> pContext->pShared->pixel.bShift) / pContext->pShared->pixel.bScale);
-   }
-
-   /* Giver back. */
-   UnlockHAL( pContext->pShared, TRUE );
-}
-/*===========================================================================*/
-/*  This proc isn't written for speed rather its to handle the general case. */
-/* I grab each pixel from the surface and unpack the info using the PIXELINFO*/
-/* structure that was generated from the OffScreen surface pixelformat.  The */
-/* function will not fill in the alpha value as Mesa I have Mesa allocate its*/
-/* own alpha channel when the context was created.  I did this as I didn't   */
-/* feel that it was worth the effort to try and get HW to work (bus bound).  */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-void RPixelsRGBA( const GLcontext* ctx, GLuint n, const GLint x[], const GLint y[], GLubyte rgba[][4], const GLubyte mask[] )
-{
-   D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx;
-   DDSURFACEDESC2 *pddsd2;
-   int            index;
-   DWORD          *pdwColor;
-
-   /* Get the surface pointer and the pitch. */
-   pddsd2 = LockHAL( pContext->pShared, TRUE );
-
-   if ( mask )
-   {
-	/* We store the surface pointer as a UCHAR so that pixel.cb (count in btyles) will work for all. */
-	for( index = 0; index < n; index++ )
-	{
-	  if ( mask[index] )
-	  {
-	    /* Find the start of the pixel. Invert y for Windows. */
-	    pdwColor = (DWORD *)((UCHAR *)pddsd2->lpSurface + (FLIP(pContext->pShared->dwHeight,y[index]) * pddsd2->lPitch) + (x[index]*pContext->pShared->pixel.cb));
-	    rgba[index][RCOMP] = (GLubyte)((float)((*pdwColor & pContext->pShared->pixel.dwRMask) >> pContext->pShared->pixel.rShift) / pContext->pShared->pixel.rScale);
-	    rgba[index][GCOMP] = (GLubyte)((float)((*pdwColor & pContext->pShared->pixel.dwGMask) >> pContext->pShared->pixel.gShift) / pContext->pShared->pixel.gScale);
-	    rgba[index][BCOMP] = (GLubyte)((float)((*pdwColor & pContext->pShared->pixel.dwBMask) >> pContext->pShared->pixel.bShift) / pContext->pShared->pixel.bScale);
-	  }
-	}
-   }
-   else
-   {
-	/* We store the surface pointer as a UCHAR so that pixel.cb (count in btyles) will work for all. */
-	for( index = 0; index < n; index++ )
-	{
-	  /* Find the start of the pixel. Invert y for Windows. */
-	  pdwColor = (DWORD *)((UCHAR *)pddsd2->lpSurface + (FLIP(pContext->pShared->dwHeight,y[index]) * pddsd2->lPitch) + (x[index]*pContext->pShared->pixel.cb));
-	  rgba[index][RCOMP] = (GLubyte)((float)((*pdwColor & pContext->pShared->pixel.dwRMask) >> pContext->pShared->pixel.rShift) / pContext->pShared->pixel.rScale);
-	  rgba[index][GCOMP] = (GLubyte)((float)((*pdwColor & pContext->pShared->pixel.dwGMask) >> pContext->pShared->pixel.gShift) / pContext->pShared->pixel.gScale);
-	  rgba[index][BCOMP] = (GLubyte)((float)((*pdwColor & pContext->pShared->pixel.dwBMask) >> pContext->pShared->pixel.bShift) / pContext->pShared->pixel.bScale);
-	}
-   }
-
-   /* Giver back. */
-   UnlockHAL( pContext->pShared, TRUE );
-}
diff --git a/src/mesa/drivers/d3d/DEBUG.C b/src/mesa/drivers/d3d/DEBUG.C
deleted file mode 100644
index 79e273903a..0000000000
--- a/src/mesa/drivers/d3d/DEBUG.C
+++ /dev/null
@@ -1,143 +0,0 @@
-/*===========================================================================*/
-/*                                                                           */
-/* Mesa-3.0 DirectX 6 Driver                                                 */
-/*                                                                           */
-/* By Leigh McRae                                                            */
-/*                                                                           */
-/* http://www.altsoftware.com/                                               */
-/*                                                                           */
-/* Copyright (c) 1999-1998  alt.software inc.  All Rights Reserved           */
-/*===========================================================================*/
-#include "Debug.h"
-/*===========================================================================*/
-/* Global variables.                                                         */
-/*===========================================================================*/
-DWORD	g_DBGMask = DBG_ALL_ERROR;
-/*===========================================================================*/
-/*  This is your basic DPF function with printf like support.  The function  */
-/* also works with a global debug mask variable.  I have written support that*/
-/* allows for the user's enviroment variable space to be read and set the    */
-/* masks.  This is done when the dll starts and is only in the debug version.*/
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-void _cdecl DebugPrint( int mask, char *pszFormat, ... )
-{
-  char	buffer[512];
-  va_list	args;
-
-  /* A mask of 0 will always pass. Easy to remeber. */
-  if ( (mask == 0) || (mask & g_DBGMask) ) 
-  {
-    va_start( args, pszFormat );
-
-    if ( mask & DBG_ALL_ERROR ) 
-	 OutputDebugString( "MesaD3D: (ERROR)" ); 
-    else
-	 OutputDebugString( "MesaD3D: " ); 
-
-    vsprintf( buffer, pszFormat, args );
-    strcat( buffer, "\n" );
-    OutputDebugString( buffer );
-
-    va_end( args );
-  }
-}
-/*===========================================================================*/
-/*  This call reads the users enviroment variables and sets any debug mask   */
-/* that they have set to TRUE.  Now the value must be "TRUE".                */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-void	ReadDBGEnv( void )
-{
-  g_DBGMask = DBG_ALL_ERROR;
-
-#define IS_VAR_SET(v)	if ( getenv( # v ) && !strcmp(getenv( # v ),"TRUE") ) g_DBGMask |= v;
-  
-  IS_VAR_SET( DBG_FUNC );
-  IS_VAR_SET( DBG_STATES );
-
-  IS_VAR_SET( DBG_CNTX_INFO );
-  IS_VAR_SET( DBG_CNTX_WARN );
-  IS_VAR_SET( DBG_CNTX_PROFILE );
-  IS_VAR_SET( DBG_CNTX_ERROR );
-  IS_VAR_SET( DBG_CNTX_ALL );
-
-  IS_VAR_SET( DBG_PRIM_INFO );
-  IS_VAR_SET( DBG_PRIM_WARN );
-  IS_VAR_SET( DBG_PRIM_PROFILE );
-  IS_VAR_SET( DBG_PRIM_ERROR );
-  IS_VAR_SET( DBG_PRIM_ALL );
-
-  IS_VAR_SET( DBG_TXT_INFO );
-  IS_VAR_SET( DBG_TXT_WARN );
-  IS_VAR_SET( DBG_TXT_PROFILE );
-  IS_VAR_SET( DBG_TXT_ERROR );
-  IS_VAR_SET( DBG_TXT_ALL );
-
-  IS_VAR_SET( DBG_ALL_INFO );
-  IS_VAR_SET( DBG_ALL_WARN );
-  IS_VAR_SET( DBG_ALL_PROFILE );
-  IS_VAR_SET( DBG_ALL_ERROR );
-  IS_VAR_SET( DBG_ALL );
-
-#undef IS_VAR_SET
-}
-/*===========================================================================*/
-/*  This function will take a pointer to a DDSURFACEDESC2 structure & display*/
-/* the parsed information using a DPF call.                                  */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-void	DebugPixelFormat( char *pszSurfaceName, DDPIXELFORMAT *pddpf )
-{
-  char	buffer[256];
-
-  /* Parse the flag type and write the string equivalent. */
-  if ( pddpf->dwFlags & DDPF_ALPHA )
-	strcat( buffer, "DDPF_ALPHA " );
-  if ( pddpf->dwFlags & DDPF_ALPHAPIXELS )
-	strcat( buffer, "DDPF_ALPHAPIXELS " );
-  if ( pddpf->dwFlags & DDPF_ALPHAPREMULT )
-	strcat( buffer, "DDPF_ALPHAPREMULT " );
-  if ( pddpf->dwFlags & DDPF_BUMPLUMINANCE )
-	strcat( buffer, "DDPF_BUMPLUMINANCE " );
-  if ( pddpf->dwFlags & DDPF_BUMPDUDV )
-	strcat( buffer, "DDPF_BUMPDUDV " );
-  if ( pddpf->dwFlags & DDPF_COMPRESSED )
-	strcat( buffer, "DDPF_COMPRESSED " );
-  if ( pddpf->dwFlags & DDPF_FOURCC )
-	strcat( buffer, "DDPF_FOURCC " );
-  if ( pddpf->dwFlags & DDPF_LUMINANCE )
-	strcat( buffer, "DDPF_LUMINANCE " );
-  if ( pddpf->dwFlags & DDPF_PALETTEINDEXED1 )
-	strcat( buffer, "DDPF_PALETTEINDEXED1 " );
-  if ( pddpf->dwFlags & DDPF_PALETTEINDEXED2 )
-	strcat( buffer, "DDPF_PALETTEINDEXED2 " );
-  if ( pddpf->dwFlags & DDPF_PALETTEINDEXED4 )
-	strcat( buffer, "DDPF_PALETTEINDEXED4 " );
-  if ( pddpf->dwFlags & DDPF_PALETTEINDEXED8 )
-	strcat( buffer, "DDPF_PALETTEINDEXED8 " );
-  if ( pddpf->dwFlags & DDPF_PALETTEINDEXEDTO8 )
-	strcat( buffer, "DDPF_PALETTEINDEXEDTO8 " );
-  if ( pddpf->dwFlags & DDPF_RGB )
-	strcat( buffer, "DDPF_RGB  " );
-  if ( pddpf->dwFlags & DDPF_RGBTOYUV )
-	strcat( buffer, "DDPF_RGBTOYUV  " );
-  if ( pddpf->dwFlags & DDPF_STENCILBUFFER )
-	strcat( buffer, "DDPF_STENCILBUFFER  " );
-  if ( pddpf->dwFlags & DDPF_YUV )
-	strcat( buffer, "DDPF_YUV  " );
-  if ( pddpf->dwFlags & DDPF_ZBUFFER )
-	strcat( buffer, "DDPF_ZBUFFER  " );
-  if ( pddpf->dwFlags & DDPF_ZPIXELS )
-	strcat( buffer, "DDPF_ZPIXELS  " );
-
-  DPF(( (DBG_TXT_INFO|DBG_CNTX_INFO),"%s", buffer ));
-}
-
-
-
-
-
diff --git a/src/mesa/drivers/d3d/DEBUG.H b/src/mesa/drivers/d3d/DEBUG.H
deleted file mode 100644
index daeeb72278..0000000000
--- a/src/mesa/drivers/d3d/DEBUG.H
+++ /dev/null
@@ -1,90 +0,0 @@
-/*===========================================================================*/
-/*                                                                           */
-/* Mesa-3.0 DirectX 6 Driver                                                 */
-/*                                                                           */
-/* By Leigh McRae                                                            */
-/*                                                                           */
-/* http://www.altsoftware.com/                                               */
-/*                                                                           */
-/* Copyright (c) 1999-1998  alt.software inc.  All Rights Reserved           */
-/*===========================================================================*/
-#ifndef _DEBUG_H
-#define _DEBUG_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*===========================================================================*/
-/* Includes.                                                                 */
-/*===========================================================================*/
-#include <stdio.h>
-#include <string.h>
-#include <ddraw.h>
-#include <d3d.h>
-#include "D3DShared.h"
-/*===========================================================================*/
-/* Magic numbers.                                                            */
-/*===========================================================================*/
-/*===========================================================================*/
-/* Macros defines.                                                           */
-/*===========================================================================*/
-#define DBG_FUNC                        0x00000001
-#define DBG_STATES              0x00000002
-
-#define DBG_CNTX_INFO           0x00000010
-#define DBG_CNTX_WARN           0x00000020
-#define DBG_CNTX_PROFILE        0x00000040
-#define DBG_CNTX_ERROR          0x00000080
-#define DBG_CNTX_ALL            0x000000F0
-
-#define DBG_PRIM_INFO           0x00000100
-#define DBG_PRIM_WARN           0x00000200
-#define DBG_PRIM_PROFILE        0x00000400
-#define DBG_PRIM_ERROR          0x00000800
-#define DBG_PRIM_ALL            0x00000F00
-
-#define DBG_TXT_INFO            0x00001000
-#define DBG_TXT_WARN            0x00002000
-#define DBG_TXT_PROFILE 0x00004000
-#define DBG_TXT_ERROR           0x00008000
-#define DBG_TXT_ALL             0x0000F000
-
-#define DBG_ALL_INFO            0x11111110
-#define DBG_ALL_WARN            0x22222220
-#define DBG_ALL_PROFILE 0x44444440
-#define DBG_ALL_ERROR           0x88888880
-#define DBG_ALL                 0xFFFFFFFF
-
-#ifdef D3D_DEBUG
-#       define  DPF(arg)                        DebugPrint arg 
-#       define  RIP(pH,msg,err) OutputDebugString(msg); \
-							OutputDebugString(err); \
-							OutputDebugString("\n"); \
-							FatalShutDown(pH)
-#else
-#       define  DPF(arg)
-#       define  RIP(pH,msg,err) FatalShutDown(pH)
-#endif
-/*===========================================================================*/
-/* Type defines.                                                             */
-/*===========================================================================*/
-/*===========================================================================*/
-/* Function prototypes.                                                      */
-/*===========================================================================*/
-extern void ReadDBGEnv( void );
-extern void _cdecl DebugPrint( int mask, char *pszFormat, ... );
-extern void DebugPixelFormat( char *pszSurfaceName, DDPIXELFORMAT *pddpf );
-/*===========================================================================*/
-/* Global variables.                                                         */
-/*===========================================================================*/
-extern DWORD    g_DBGMask;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
-
diff --git a/src/mesa/drivers/d3d/DbgEnv.bat b/src/mesa/drivers/d3d/DbgEnv.bat
deleted file mode 100644
index acea045856..0000000000
--- a/src/mesa/drivers/d3d/DbgEnv.bat
+++ /dev/null
@@ -1,25 +0,0 @@
-SET DBG_FUNC=FALSE
-
-SET DBG_CNTX_INFO=TRUE
-SET DBG_CNTX_WARN=TRUE
-SET DBG_CNTX_PROFILE=FALSE
-SET DBG_CNTX_ERROR=TRUE
-SET DBG_CNTX_ALL=TRUE
-
-SET DBG_PRIM_INFO=FALSE
-SET DBG_PRIM_WARN=FALSE
-SET DBG_PRIM_PROFILE=FALSE
-SET DBG_PRIM_ERROR=TRUE
-SET DBG_PRIM_ALL=FALSE
-
-SET DBG_TXT_INFO=FALSE
-SET DBG_TXT_WARN=TRUE
-SET DBG_TXT_PROFILE=FALSE
-SET DBG_TXT_ERROR=TRUE
-SET DBG_TXT_ALL=FALSE
-
-SET DBG_ALL_INFO=FALSE
-SET DBG_ALL_WARN=TRUE
-SET DBG_ALL_PROFILE=FALSE
-SET DBG_ALL_ERROR=TRUE
-SET DBG_ALL=FALSE
diff --git a/src/mesa/drivers/d3d/MAKEFILE b/src/mesa/drivers/d3d/MAKEFILE
deleted file mode 100644
index 6aa88f3cef..0000000000
--- a/src/mesa/drivers/d3d/MAKEFILE
+++ /dev/null
@@ -1,101 +0,0 @@
-##############################################################################
-# 
-# Mesa-3.0 Makefile for DirectX 6 Driver                             
-#
-# By Leigh McRae
-#
-# http://www.altsoftware.com/
-#
-# Copyright (c) 1999-1998  alt.software inc.  All Rights Reserved     
-##############################################################################
-NAME=
-TARGET= WGL Driver (D3DHAL)
-
-D3D_DIR=$(MAKEDIR)\D3D
-TARGET_DIR=e:\WinNT\System32
-TEMP_DIR=c:\Temp
-
-SPACE=-
-LINKER=link.exe
-
-INCLUDE=$(SDKROOT)\include;$(INCLUDE)
-LIB=$(SDKROOT)\lib;$(LIB)
-##############################################################################
-CFLAGS  = /c /nologo /W1 /G5 /I..\ /I..\..\Include \
-		/D "_WIN32" /D "WIN32" /D "_WINDOWS" /D "__WIN32__" /D "__MSC__"  /D "MESAD3D"
-CPPFLAGS= /c /nologo /W1 /G5 /I..\ /I..\..\Include \
-		/D "_WIN32" /D "WIN32" /D "_WINDOWS" /D "__WIN32__" /D "__MSC__"  /D "MESAD3D"
-
-!IF "$(DEBUG)" == "1"
-
-CFLAGS   = /MTd /Od /Z7 /Yd /D "_DEBUG" /D "D3D_DEBUG" $(CFLAGS)
-CPPFLAGS = /MTd /Od /Z7 /Yd /D "_DEBUG" /D "D3D_DEBUG" $(CPPFLAGS)
-BUILD_TYPE=debug
-
-!ELSE
-
-CFLAGS   = /MT /Ox /D "NDEBUG" $(CFLAGS)
-CPPFLAGS = /MT /Ox /D "NDEBUG" $(CPPFLAGS)
-BUILD_TYPE=release
-
-!ENDIF
-##############################################################################
-SRCS_WGL = wgl.c D3Dvbrender.c DDrawPROCS.c NULLProcs.c Debug.c
-SRCS_HAL = D3DInit.cpp D3DRaster.cpp D3DTextureMgr.cpp D3DUtils.cpp D3DCaps.cpp
-OBJS_WGL = $(SRCS_WGL:.c=.obj)
-OBJS_HAL = $(SRCS_HAL:.cpp=.obj)
-
-WINLIBS = kernel32.lib user32.lib gdi32.lib oldnames.lib 
-DXLIBS = 
-LIBS = $(WINLIBS) $(DXLIBS) 
-###############################################################################
-# Primary Targets                                                             #
-###############################################################################
-
-default: header WGL HAL footer
-
-all: default 
-
-WGL : $(OBJS_WGL) 
-        
-HAL : $(OBJS_HAL)
-
-install : forceit
-	@echo $(SPACE)
-	@echo ========================================
-	@echo Install files created.
-	@echo ========================================
-
-        
-###############################################################################
-# Secondary Targets                                                           #
-###############################################################################
-
-clean:
-	@echo ========================================
-	@echo Cleaning $(TARGET)
-	@del *.obj 
-	@del *.dep 
-	@del *.exp 
-	@del *.ncb
-	@del *.plg
-	@del *.lib
-	@echo ========================================
-
-header:
-	@echo ============================================================
-	@echo Building $(TARGET)  ($(BUILD_TYPE) version)
-	@echo ============================================================
-	@echo $(SPACE)
-
-footer:
-	@echo $(SPACE)
-	@echo ============================================================
-	@echo DONE building $(TARGET)  ($(BUILD_TYPE) version)
-	@echo ============================================================
-
-forceit:
-
-
-
-
diff --git a/src/mesa/drivers/d3d/NULLProcs.h b/src/mesa/drivers/d3d/NULLProcs.h
deleted file mode 100644
index f0bbd2162d..0000000000
--- a/src/mesa/drivers/d3d/NULLProcs.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*===========================================================================*/
-/*                                                                           */
-/* Mesa-3.0 DirectX 6 Driver                                                 */
-/*                                                                           */
-/* By Leigh McRae                                                            */
-/*                                                                           */
-/* http://www.altsoftware.com/                                               */
-/*                                                                           */
-/* Copyright (c) 1999-1998  alt.software inc.  All Rights Reserved           */
-/*===========================================================================*/
-#ifndef NULL_MESA_PROCS_INC
-#define NULL_MESA_PROCS_INC
-/*===========================================================================*/
-/* Includes.                                                                 */
-/*===========================================================================*/
-#include "matrix.h"
-#include "context.h"
-#include "types.h"
-#include "vb.h"
-/*===========================================================================*/
-/* Macros.                                                                   */
-/*===========================================================================*/
-/*===========================================================================*/
-/* Magic numbers.                                                            */
-/*===========================================================================*/
-/*===========================================================================*/
-/* Type defines.                                                             */
-/*===========================================================================*/
-void NULLSetColor( GLcontext *ctx, GLubyte r, GLubyte g, GLubyte b, GLubyte a );
-void NULLClearColor( GLcontext *ctx, GLubyte r, GLubyte g, GLubyte b, GLubyte a );
-GLboolean NULLSetBuffer( GLcontext *ctx, GLenum mode );
-void NULLGetBufferSize( GLcontext *ctx, GLuint *width, GLuint *height );
-GLbitfield NULLClearBuffers( GLcontext *ctx, GLbitfield m, GLboolean a, GLint x, GLint y, GLint w, GLint h );
-void NULLWrSpRGB( const GLcontext* ctx, GLuint n, GLint x, GLint y, const GLubyte r[][3], const GLubyte m[] );
-void NULLWrSpRGBA( const GLcontext* ctx, GLuint n, GLint x, GLint y, const GLubyte r[][4], const GLubyte m[] );
-void NULLWrSpRGBAMono( const GLcontext* ctx, GLuint n, GLint x, GLint y, const GLubyte m[] );
-void NULLWrPiRGBA( const GLcontext* ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte r[][4], const GLubyte m[] );
-void NULLWrPiRGBAMono( const GLcontext* ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte m[] );
-void NULLReSpRGBA( const GLcontext* ctx, GLuint n, GLint x, GLint y, GLubyte r[][4] );
-void NULLRePiRGBA( const GLcontext* ctx, GLuint n, const GLint x[], const GLint y[], GLubyte r[][4], const GLubyte m[] );
-/*===========================================================================*/
-/* Extern function prototypes.                                               */
-/*===========================================================================*/
-/*===========================================================================*/
-/* Global variables.                                                         */
-/*===========================================================================*/
-
-#endif
-
diff --git a/src/mesa/drivers/d3d/NullProcs.c b/src/mesa/drivers/d3d/NullProcs.c
deleted file mode 100644
index d6fb598074..0000000000
--- a/src/mesa/drivers/d3d/NullProcs.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*===========================================================================*/
-/*                                                                           */
-/* Mesa-3.0 DirectX 6 Driver                                                 */
-/*                                                                           */
-/* By Leigh McRae                                                            */
-/*                                                                           */
-/* http://www.altsoftware.com/                                               */
-/*                                                                           */
-/* Copyright (c) 1999-1998  alt.software inc.  All Rights Reserved           */
-/*===========================================================================*/
-#ifndef NULL_MESA_PROCS_INC
-#define NULL_MESA_PROCS_INC
-/*===========================================================================*/
-/* Includes.                                                                 */
-/*===========================================================================*/
-#include "matrix.h"
-#include "context.h"
-#include "mtypes.h"
-#include "vb.h"
-/*===========================================================================*/
-/* Macros.                                                                   */
-/*===========================================================================*/
-/*===========================================================================*/
-/* Magic numbers.                                                            */
-/*===========================================================================*/
-/*===========================================================================*/
-/* Type defines.                                                             */
-/*===========================================================================*/
-void NULLSetColor( GLcontext *ctx, GLubyte r, GLubyte g, GLubyte b, GLubyte a );
-void NULLClearColor( GLcontext *ctx, GLubyte r, GLubyte g, GLubyte b, GLubyte a );
-GLboolean NULLSetBuffer( GLcontext *ctx, GLframebuffer *buffer, GLuint bit );
-void NULLGetBufferSize( GLcontext *ctx, GLuint *width, GLuint *height );
-GLbitfield NULLClearBuffers( GLcontext *ctx, GLbitfield m, GLboolean a, GLint x, GLint y, GLint w, GLint h );
-void NULLWrSpRGB( const GLcontext* ctx, GLuint n, GLint x, GLint y, const GLubyte r[][3], const GLubyte m[] );
-void NULLWrSpRGBA( const GLcontext* ctx, GLuint n, GLint x, GLint y, const GLubyte r[][4], const GLubyte m[] );
-void NULLWrSpRGBAMono( const GLcontext* ctx, GLuint n, GLint x, GLint y, const GLubyte m[] );
-void NULLWrPiRGBA( const GLcontext* ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte r[][4], const GLubyte m[] );
-void NULLWrPiRGBAMono( const GLcontext* ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte m[] );
-void NULLReSpRGBA( const GLcontext* ctx, GLuint n, GLint x, GLint y, GLubyte r[][4] );
-void NULLRePiRGBA( const GLcontext* ctx, GLuint n, const GLint x[], const GLint y[], GLubyte r[][4], const GLubyte m[] );
-/*===========================================================================*/
-/* Extern function prototypes.                                               */
-/*===========================================================================*/
-/*===========================================================================*/
-/* Global variables.                                                         */
-/*===========================================================================*/
-
-#endif
-
diff --git a/src/mesa/drivers/d3d/OPENGL32.DEF b/src/mesa/drivers/d3d/OPENGL32.DEF
deleted file mode 100644
index bc0304da33..0000000000
--- a/src/mesa/drivers/d3d/OPENGL32.DEF
+++ /dev/null
@@ -1,442 +0,0 @@
-;===========================================================================
-;                                                                           
-; Mesa-3.0 DirectX 6 Driver                                       
-;                                                                           
-; By Leigh McRae                                                            
-;                                                                           
-; http://www.altsoftware.com/                                               
-;                                                                           
-; Copyright (c) 1999-1998  alt.software inc.  All Rights Reserved           
-;===========================================================================
-NAME OpenGL32.DLL
-DESCRIPTION "Mesa-3.0 DX6 Driver Version 0.5"
-
-EXPORTS
-	DllMain
-	glAccum
-	glAlphaFunc
-	glAreTexturesResident
-	glAreTexturesResidentEXT
-	glArrayElement
-	glArrayElementEXT
-	glBegin
-	glBindTexture
-	glBindTextureEXT
-	glBitmap
-	glBlendColorEXT
-	glBlendEquationEXT
-	glBlendFunc
-	glCallList
-	glCallLists
-	glClear
-	glClearAccum
-	glClearColor
-	glClearDepth
-	glClearIndex
-	glClearStencil
-	glClipPlane
-	glColor3b
-	glColor3bv
-	glColor3d
-	glColor3dv
-	glColor3f
-	glColor3fv
-	glColor3i
-	glColor3iv
-	glColor3s
-	glColor3sv
-	glColor3ub
-	glColor3ubv
-	glColor3ui
-	glColor3uiv
-	glColor3us
-	glColor3usv
-	glColor4b
-	glColor4bv
-	glColor4d
-	glColor4dv
-	glColor4f
-	glColor4fv
-	glColor4i
-	glColor4iv
-	glColor4s
-	glColor4sv
-	glColor4ub
-	glColor4ubv
-	glColor4ui
-	glColor4uiv
-	glColor4us
-	glColor4usv
-	glColorMask
-	glColorMaterial
-	glColorPointer
-	glColorPointerEXT
-	glColorSubTableEXT
-	glColorTableEXT
-	glCopyPixels
-	glCopyTexImage1D
-	glCopyTexImage2D
-	glCopyTexSubImage1D
-	glCopyTexSubImage2D
-	glCopyTexSubImage3DEXT
-	glCullFace
-	glDeleteLists
-	glDeleteTextures
-	glDeleteTexturesEXT
-	glDepthFunc
-	glDepthMask
-	glDepthRange
-	glDisable
-	glDisableClientState
-	glDrawArrays
-	glDrawArraysEXT
-	glDrawBuffer
-	glDrawElements
-	glDrawPixels
-	glEdgeFlag
-	glEdgeFlagPointer
-	glEdgeFlagPointerEXT
-	glEdgeFlagv
-	glEnable
-	glEnableClientState
-	glEnd
-	glEndList
-	glEvalCoord1d
-	glEvalCoord1dv
-	glEvalCoord1f
-	glEvalCoord1fv
-	glEvalCoord2d
-	glEvalCoord2dv
-	glEvalCoord2f
-	glEvalCoord2fv
-	glEvalMesh1
-	glEvalMesh2
-	glEvalPoint1
-	glEvalPoint2
-	glFeedbackBuffer
-	glFinish
-	glFlush
-	glFogf
-	glFogfv
-	glFogi
-	glFogiv
-	glFrontFace
-	glFrustum
-	glGenLists
-	glGenTextures
-	glGenTexturesEXT
-	glGetBooleanv
-	glGetClipPlane
-	glGetColorTableEXT
-	glGetColorTableParameterfvEXT
-	glGetColorTableParameterivEXT
-	glGetDoublev
-	glGetError
-	glGetFloatv
-	glGetIntegerv
-	glGetLightfv
-	glGetLightiv
-	glGetMapdv
-	glGetMapfv
-	glGetMapiv
-	glGetMaterialfv
-	glGetMaterialiv
-	glGetPixelMapfv
-	glGetPixelMapuiv
-	glGetPixelMapusv
-	glGetPointerv
-	glGetPointervEXT
-	glGetPolygonStipple
-	glGetString
-	glGetTexEnvfv
-	glGetTexEnviv
-	glGetTexGendv
-	glGetTexGenfv
-	glGetTexGeniv
-	glGetTexImage
-	glGetTexLevelParameterfv
-	glGetTexLevelParameteriv
-	glGetTexParameterfv
-	glGetTexParameteriv
-	glHint
-	glIndexd
-	glIndexdv
-	glIndexf
-	glIndexfv
-	glIndexi
-	glIndexiv
-	glIndexMask
-	glIndexPointer
-	glIndexPointerEXT
-	glIndexs
-	glIndexsv
-	glIndexub
-	glIndexubv
-	glInitNames
-	glInterleavedArrays
-	glIsEnabled
-	glIsList
-	glIsTexture
-	glIsTextureEXT
-	glLightf
-	glLightfv
-	glLighti
-	glLightiv
-	glLightModelf
-	glLightModelfv
-	glLightModeli
-	glLightModeliv
-	glLineStipple
-	glLineWidth
-	glListBase
-	glLoadIdentity
-	glLoadMatrixd
-	glLoadMatrixf
-	glLoadName
-	glLogicOp
-	glMap1d
-	glMap1f
-	glMap2d
-	glMap2f
-	glMapGrid1d
-	glMapGrid1f
-	glMapGrid2d
-	glMapGrid2f
-	glMaterialf
-	glMaterialfv
-	glMateriali
-	glMaterialiv
-	glMatrixMode
-	glMultMatrixd
-	glMultMatrixf
-	glNewList
-	glNormal3b
-	glNormal3bv
-	glNormal3d
-	glNormal3dv
-	glNormal3f
-	glNormal3fv
-	glNormal3i
-	glNormal3iv
-	glNormal3s
-	glNormal3sv
-	glNormalPointer
-	glNormalPointerEXT
-	glOrtho
-	glPassThrough
-	glPixelMapfv
-	glPixelMapuiv
-	glPixelMapusv
-	glPixelStoref
-	glPixelStorei
-	glPixelTransferf
-	glPixelTransferi
-	glPixelZoom
-	glPointParameterfEXT
-	glPointParameterfvEXT
-	glPointSize
-	glPolygonMode
-	glPolygonOffset
-	glPolygonOffsetEXT
-	glPolygonStipple
-	glPopAttrib
-	glPopClientAttrib
-	glPopMatrix
-	glPopName
-	glPrioritizeTextures
-	glPrioritizeTexturesEXT
-	glPushAttrib
-	glPushClientAttrib
-	glPushMatrix
-	glPushName
-	glRasterPos2d
-	glRasterPos2dv
-	glRasterPos2f
-	glRasterPos2fv
-	glRasterPos2i
-	glRasterPos2iv
-	glRasterPos2s
-	glRasterPos2sv
-	glRasterPos3d
-	glRasterPos3dv
-	glRasterPos3f
-	glRasterPos3fv
-	glRasterPos3i
-	glRasterPos3iv
-	glRasterPos3s
-	glRasterPos3sv
-	glRasterPos4d
-	glRasterPos4dv
-	glRasterPos4f
-	glRasterPos4fv
-	glRasterPos4i
-	glRasterPos4iv
-	glRasterPos4s
-	glRasterPos4sv
-	glReadBuffer
-	glReadPixels
-	glRectd
-	glRectdv
-	glRectf
-	glRectfv
-	glRecti
-	glRectiv
-	glRects
-	glRectsv
-	glRenderMode
-	glResizeBuffersMESA
-	glRotated
-	glRotatef
-	glScaled
-	glScalef
-	glScissor
-	glSelectBuffer
-	glShadeModel
-	glStencilFunc
-	glStencilMask
-	glStencilOp
-	glTexCoord1d
-	glTexCoord1dv
-	glTexCoord1f
-	glTexCoord1fv
-	glTexCoord1i
-	glTexCoord1iv
-	glTexCoord1s
-	glTexCoord1sv
-	glTexCoord2d
-	glTexCoord2dv
-	glTexCoord2f
-	glTexCoord2fv
-	glTexCoord2i
-	glTexCoord2iv
-	glTexCoord2s
-	glTexCoord2sv
-	glTexCoord3d
-	glTexCoord3dv
-	glTexCoord3f
-	glTexCoord3fv
-	glTexCoord3i
-	glTexCoord3iv
-	glTexCoord3s
-	glTexCoord3sv
-	glTexCoord4d
-	glTexCoord4dv
-	glTexCoord4f
-	glTexCoord4fv
-	glTexCoord4i
-	glTexCoord4iv
-	glTexCoord4s
-	glTexCoord4sv
-	glTexCoordPointer
-	glTexCoordPointerEXT
-	glTexEnvf
-	glTexEnvfv
-	glTexEnvi
-	glTexEnviv
-	glTexGend
-	glTexGendv
-	glTexGenf
-	glTexGenfv
-	glTexGeni
-	glTexGeniv
-	glTexImage1D
-	glTexImage2D
-	glTexImage3DEXT
-	glTexParameterf
-	glTexParameterfv
-	glTexParameteri
-	glTexParameteriv
-	glTexSubImage1D
-	glTexSubImage2D
-	glTexSubImage3DEXT
-	glTranslated
-	glTranslatef
-	glVertex2d
-	glVertex2dv
-	glVertex2f
-	glVertex2fv
-	glVertex2i
-	glVertex2iv
-	glVertex2s
-	glVertex2sv
-	glVertex3d
-	glVertex3dv
-	glVertex3f
-	glVertex3fv
-	glVertex3i
-	glVertex3iv
-	glVertex3s
-	glVertex3sv
-	glVertex4d
-	glVertex4dv
-	glVertex4f
-	glVertex4fv
-	glVertex4i
-	glVertex4iv
-	glVertex4s
-	glVertex4sv
-	glVertexPointer
-	glVertexPointerEXT
-	glViewport
-	glWindowPos2dMESA
-	glWindowPos2dvMESA
-	glWindowPos2fMESA
-	glWindowPos2fvMESA
-	glWindowPos2iMESA
-	glWindowPos2ivMESA
-	glWindowPos2sMESA
-	glWindowPos2svMESA
-	glWindowPos3dMESA
-	glWindowPos3dvMESA
-	glWindowPos3fMESA
-	glWindowPos3fvMESA
-	glWindowPos3iMESA
-	glWindowPos3ivMESA
-	glWindowPos3sMESA
-	glWindowPos3svMESA
-	glWindowPos4dMESA
-	glWindowPos4dvMESA
-	glWindowPos4fMESA
-	glWindowPos4fvMESA
-	glWindowPos4iMESA
-	glWindowPos4ivMESA
-	glWindowPos4sMESA
-	glWindowPos4svMESA
-;    WMesaCreateContext
-;    WMesaDestroyContext
-;    WMesaMakeCurrent
-;    WMesaPaletteChange
-;    WMesaSwapBuffers
-;    OSMesaCreateContext
-;    OSMesaDestroyContext
-;    OSMesaMakeCurrent
-;    OSMesaGetCurrentContext
-;    OSMesaPixelStore
-;    OSMesaGetIntegerv
-;    OSMesaGetDepthBuffer
-	wglCopyContext
-	wglCreateContext
-	wglCreateLayerContext
-	wglDeleteContext
-;	wglDescribeLayerPlane
-	wglGetCurrentContext
-	wglGetCurrentDC
-;	wglGetLayerPaletteEntries
-	wglGetProcAddress
-	wglMakeCurrent
-;	wglRealizeLayerPalette
-;	wglSetLayerPaletteEntries
-	wglShareLists
-	wglSwapLayerBuffers
-	wglUseFontBitmapsA
-	wglUseFontBitmapsW
-	wglUseFontOutlinesA
-	wglUseFontOutlinesW
-	wglChoosePixelFormat
-	wglDescribePixelFormat
-	wglGetPixelFormat
-	wglSetPixelFormat
-	wglSwapBuffers
-    
-
-
diff --git a/src/mesa/drivers/d3d/WGL.C b/src/mesa/drivers/d3d/WGL.C
deleted file mode 100644
index 170d094ed4..0000000000
--- a/src/mesa/drivers/d3d/WGL.C
+++ /dev/null
@@ -1,1262 +0,0 @@
-/*===========================================================================*/
-/*                                                                           */
-/* Mesa-3.0 Makefile for DirectX 6                                           */
-/*                                                                           */
-/* By Leigh McRae                                                            */
-/*                                                                           */
-/* http://www.altsoftware.com/                                               */
-/*                                                                           */
-/* Copyright (c) 1998-1997  alt.software inc.  All Rights Reserved           */
-/*===========================================================================*/
-#include "D3DMesa.h"
-/*===========================================================================*/
-/* Window managment.                                                         */
-/*===========================================================================*/
-static BOOL    InitOpenGL( HINSTANCE hInst );
-static BOOL    TermOpenGL( HINSTANCE hInst );
-static BOOL     ResizeContext( GLcontext *ctx );
-static BOOL    MakeCurrent( D3DMESACONTEXT *pContext );
-static void    DestroyContext( D3DMESACONTEXT *pContext );
-static BOOL    UnBindWindow( D3DMESACONTEXT *pContext );
-LONG APIENTRY  wglMonitorProc( HWND hwnd, UINT message, UINT wParam, LONG lParam );
-/*===========================================================================*/
-/* Mesa hooks.                                                               */
-/*===========================================================================*/
-static void SetupDDPointers( GLcontext *ctx );
-static void SetupSWDDPointers( GLcontext *ctx );
-static void SetupHWDDPointers( GLcontext *ctx );
-static void SetupNULLDDPointers( GLcontext *ctx );
-static const char *RendererString( void );
-
-/* State Management hooks. */
-static void       SetColor( GLcontext *ctx, GLubyte r, GLubyte g, GLubyte b, GLubyte a );
-static void       ClearColor( GLcontext *ctx, GLubyte r, GLubyte g, GLubyte b, GLubyte a );
-static GLboolean SetBuffer( GLcontext *ctx, GLenum buffer );
-
-/* Window Management hooks. */
-static void GetBufferSize( GLcontext *ctx, GLuint *width, GLuint *height );
-static void SetViewport( GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h );
-static void Flush( GLcontext *ctx );
-
-/* Span rendering hooks. */
-void WSpanRGB( const GLcontext* ctx, GLuint n, GLint x, GLint y, const GLubyte rgb[][3], const GLubyte mask[] );
-void WSpanRGBA( const GLcontext* ctx, GLuint n, GLint x, GLint y, const GLubyte rgba[][4], const GLubyte mask[] );
-void WSpanRGBAMono( const GLcontext* ctx, GLuint n, GLint x, GLint y, const GLubyte mask[] );
-void WPixelsRGBA( const GLcontext* ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte rgba[][4], const GLubyte mask[] );
-void WPixelsRGBAMono( const GLcontext* ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte mask[] );
-void RSpanRGBA( const GLcontext* ctx, GLuint n, GLint x, GLint y, GLubyte rgba[][4] );
-void RPixelsRGBA( const GLcontext* ctx, GLuint n, const GLint x[], const GLint y[], GLubyte rgba[][4], const GLubyte mask[] );
-GLbitfield ClearBuffers( GLcontext *ctx, GLbitfield mask, GLboolean all, GLint x, GLint y, GLint width, GLint height );
-
-/* Primitve rendering hooks. */
-GLboolean  RenderVertexBuffer( GLcontext *ctx, GLboolean allDone );
-void             RenderOneTriangle( GLcontext *ctx, GLuint v1, GLuint v2, GLuint v3, GLuint pv );
-void     RenderOneLine( GLcontext *ctx, GLuint v1, GLuint v2, GLuint pv );
-GLbitfield ClearBuffersD3D( GLcontext *ctx, GLbitfield mask, GLboolean all, GLint x, GLint y, GLint width, GLint height );
-
-/* Texture Management hooks. */
-static void TextureBind( GLcontext *ctx, GLenum target, struct gl_texture_object *tObj );
-static void TextureLoad( GLcontext *ctx, GLenum target, struct gl_texture_object *tObj, GLint level, GLint internalFormat, const struct gl_texture_image *image );
-static void TextureSubImage( GLcontext *ctx, GLenum target, struct gl_texture_object *tObj, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLint internalFormat, const struct gl_texture_image *image );
-/*===========================================================================*/
-/* Global variables.                                                         */
-/*===========================================================================*/
-D3DMESACONTEXT *pD3DCurrent,     
-	       *pD3DDefault;     /* Thin support context. */
-
-struct __extensions__   ext[] = {
-
-    { (PROC)glPolygonOffsetEXT,        "glPolygonOffsetEXT"       },
-    { (PROC)glBlendEquationEXT,        "glBlendEquationEXT"       },
-    { (PROC)glBlendColorEXT,           "glBlendColorExt"          },
-    { (PROC)glVertexPointerEXT,        "glVertexPointerEXT"       },
-    { (PROC)glNormalPointerEXT,        "glNormalPointerEXT"       },
-    { (PROC)glColorPointerEXT,         "glColorPointerEXT"        },
-    { (PROC)glIndexPointerEXT,         "glIndexPointerEXT"        },
-    { (PROC)glTexCoordPointerEXT,      "glTexCoordPointer"        },
-    { (PROC)glEdgeFlagPointerEXT,      "glEdgeFlagPointerEXT"     },
-    { (PROC)glGetPointervEXT,          "glGetPointervEXT"         },
-    { (PROC)glArrayElementEXT,         "glArrayElementEXT"        },
-    { (PROC)glDrawArraysEXT,           "glDrawArrayEXT"           },
-    { (PROC)glAreTexturesResidentEXT,  "glAreTexturesResidentEXT" },
-    { (PROC)glBindTextureEXT,          "glBindTextureEXT"         },
-    { (PROC)glDeleteTexturesEXT,       "glDeleteTexturesEXT"      },
-    { (PROC)glGenTexturesEXT,          "glGenTexturesEXT"         },
-    { (PROC)glIsTextureEXT,            "glIsTextureEXT"           },
-    { (PROC)glPrioritizeTexturesEXT,   "glPrioritizeTexturesEXT"  },
-    { (PROC)glCopyTexSubImage3DEXT,    "glCopyTexSubImage3DEXT"   },
-    { (PROC)glTexImage3DEXT,           "glTexImage3DEXT"          },
-    { (PROC)glTexSubImage3DEXT,        "glTexSubImage3DEXT"       },
-};
-
-int             qt_ext = sizeof(ext) / sizeof(ext[0]);
-float   g_DepthScale,
-	  g_MaxDepth;
-/*===========================================================================*/
-/*  When a process loads this DLL we will setup the linked list for context  */
-/* management and create a default context that will support the API until   */
-/* the user creates and binds thier own.  This THIN default context is useful*/
-/* to have around.                                                           */
-/*  When the process terminates we will clean up all resources here.         */
-/*===========================================================================*/
-/* RETURN: TRUE, FALSE.                                                      */
-/*===========================================================================*/
-BOOL APIENTRY   DllMain( HINSTANCE hInst, DWORD reason, LPVOID reserved )
-{
-  switch( reason ) 
-  {
-    case DLL_PROCESS_ATTACH:
-	 return InitOpenGL( hInst );
-
-    case DLL_PROCESS_DETACH:
-	 return TermOpenGL( hInst );
-  }     
-
-  return TRUE;
-}
-/*===========================================================================*/
-/*  The first thing we do when this dll is hit is connect to the dll that has*/
-/* handles all the DirectX 6 rendering.  I decided to use another dll as DX6 */
-/* is all C++ and Mesa-3.0 is C (thats a good thing).  This way I can write  */
-/* the DX6 in C++ and Mesa-3.0 in C without having to worry about linkage.   */
-/* I feel this is easy and better then using static wrappers as it is likely */
-/* faster and it allows me to just develope the one without compiling the    */
-/* other.                                                                    */
-/*  NOTE that at this point we don't have much other than a very thin context*/
-/* that will support the API calls only to the point of not causing the app  */
-/* to crash from the API table being empty.                                  */
-/*===========================================================================*/
-/* RETURN: TRUE, FALSE.                                                      */
-/*===========================================================================*/
-static BOOL  InitOpenGL( HINSTANCE hInst )
-{
-  /* Allocate and clear the default context. */
-  pD3DDefault = (PD3DMESACONTEXT)ALLOC( sizeof(D3DMESACONTEXT) );
-  if ( pD3DDefault == NULL )
-    return FALSE;
-  memset( pD3DDefault, 0, sizeof(D3DMESACONTEXT) );
-
-  /*  Clear the D3D vertex buffer so that values not used will be zero.  This */
-  /* save me from some redundant work.                                        */
-  memset( &D3DTLVertices, 0, sizeof(D3DTLVertices) );
-
-  /*  Update the link.  We uses a circular list so that it is easy to  */
-  /* add and search.  This context will also be used for head and tail.*/
-  pD3DDefault->next = pD3DDefault;
-
-  /*========================================================================*/
-  /* Do all core Mesa stuff.                                                */
-  /*========================================================================*/
-  pD3DDefault->gl_visual = _mesa_create_visual( TRUE,
-						FALSE,      /* db_flag */
-						GL_FALSE,   /* stereo */
-						8,8,8,8,    /* r, g, b, a bits */
-						0,          /* index bits */
-						16,         /* depth_bits */
-						8,          /* stencil_bits */
-						8,8,8,8,    /* accum_bits */
-                                                1 );
-
-  if ( pD3DDefault->gl_visual == NULL)  
-  {
-    FREE( pD3DDefault );
-    return FALSE;
-  }
-
-  /* Allocate a new Mesa context */
-  pD3DDefault->gl_ctx = _mesa_create_context( pD3DDefault->gl_visual, NULL, pD3DDefault, GL_TRUE );
-  if ( pD3DDefault->gl_ctx == NULL ) 
-  {
-    _mesa_destroy_visual( pD3DDefault->gl_visual );
-    FREE( pD3DDefault );
-    return FALSE;
-  }
-
-  /* Allocate a new Mesa frame buffer */
-  pD3DDefault->gl_buffer = _mesa_create_framebuffer( pD3DDefault->gl_visual );
-  if ( pD3DDefault->gl_buffer == NULL )
-  {
-    _mesa_destroy_visual( pD3DDefault->gl_visual );
-    _mesa_destroy_context( pD3DDefault->gl_ctx );
-    FREE( pD3DDefault );
-    return FALSE;
-  }
-  SetupDDPointers( pD3DDefault->gl_ctx );
-  _mesa_make_current( pD3DDefault->gl_ctx, pD3DDefault->gl_buffer );
-
-  return TRUE;
-}
-/*===========================================================================*/
-/*  This function will create a new D3D context but will not create the D3D  */
-/* surfaces or even an instance of D3D (see at GetBufferSize). The only stuff*/
-/* done here is the internal Mesa stuff and some Win32 handles.              */
-/*===========================================================================*/
-/* RETURN: casted pointer to the context, NULL.                              */
-/*===========================================================================*/
-HGLRC APIENTRY wglCreateContext( HDC hdc )
-{
-  D3DMESACONTEXT        *pNewContext;
-  DWORD                 dwCoopFlags = DDSCL_NORMAL;
-  RECT                  rectClient;
-  POINT                 pt;
-
-  /* ALLOC and clear the new context. */
-  pNewContext = (PD3DMESACONTEXT)ALLOC( sizeof(D3DMESACONTEXT) );
-  if ( pNewContext == NULL )
-  {
-    SetLastError( 0 );
-    return (HGLRC)NULL;
-  }
-  memset( pNewContext, 0, sizeof(D3DMESACONTEXT) );
-
-  /*========================================================================*/
-  /* Do all core Mesa stuff.                                                */
-  /*========================================================================*/
-
-  /* TODO: support more then one visual. */
-  pNewContext->gl_visual = _mesa_create_visual( TRUE,
-                                                TRUE,       /* db_flag */
-                                                GL_FALSE,   /* stereo */
-                                                8,8,8,8,    /* r, g, b, a bits */
-                                                0,          /* index bits */
-                                                16,         /* depth_bits */
-                                                8,          /* stencil_bits */
-                                                16,16,16,16,/* accum_bits */
-                                                1 );
-  if ( pNewContext->gl_visual == NULL) 
-  {
-    FREE( pNewContext );
-    SetLastError( 0 );
-    return (HGLRC)NULL;
-  }
-
-  /* Allocate a new Mesa context */
-  pNewContext->gl_ctx = _mesa_create_context( pNewContext->gl_visual, NULL, pNewContext, GL_TRUE );
-  if ( pNewContext->gl_ctx == NULL ) 
-  {
-    _mesa_destroy_visual( pNewContext->gl_visual );
-    FREE( pNewContext );
-    SetLastError( 0 );
-    return (HGLRC)NULL;
-  }
-
-  /* Allocate a new Mesa frame buffer */
-  pNewContext->gl_buffer = _mesa_create_framebuffer( pNewContext->gl_visual );
-  if ( pNewContext->gl_buffer == NULL )
-  {
-    _mesa_destroy_visual( pNewContext->gl_visual );
-    _mesa_destroy_context( pNewContext->gl_ctx );
-    FREE( pNewContext );
-    SetLastError( 0 );
-    return (HGLRC)NULL;
-  }
-
-  /*========================================================================*/
-  /* Do all the driver stuff.                                               */
-  /*========================================================================*/
-  pNewContext->hdc  = hdc;
-  pNewContext->next = pD3DDefault->next;
-  pD3DDefault->next = pNewContext; /* Add to circular list. */
-
-  /* Create the HAL for the new context. */
-  pNewContext->pShared = InitHAL( WindowFromDC(hdc) );
-
-  return (HGLRC)pNewContext;
-}
-/*===========================================================================*/
-/*  This is a wrapper function that is supported by MakeCurrent.             */
-/*===========================================================================*/
-/* RETURN: TRUE, FALSE.                                                      */
-/*===========================================================================*/
-BOOL APIENTRY  wglMakeCurrent( HDC hdc, HGLRC hglrc )
-{
-   return MakeCurrent((D3DMESACONTEXT *)hglrc);
-}
-/*===========================================================================*/
-/*  MakeCurrent will unbind whatever context is current (if any) & then bind */
-/* the supplied context.  A context that is bound has it's window proc hooked*/
-/* with the wglMonitorProc and the context pointer is saved in pD3DCurrent.    */
-/* Once the context is bound we update the Mesa-3.0 hooks (SetDDPointers) and*/
-/* the viewport (Mesa-.30 and DX6).                                          */
-/*                                                                           */
-/* TODO: this function can't fail.                                           */
-/*===========================================================================*/
-/* RETURN: TRUE                                                              */
-/*===========================================================================*/
-static BOOL MakeCurrent( D3DMESACONTEXT *pContext )
-{
-   D3DMESACONTEXT *pNext;
-
-   /*====================================================================*/
-   /* This is a special case that is a request to have no context bound. */
-   /*====================================================================*/
-   if ( pContext == NULL )
-   {
-	/* Walk the whole list. We start and end at the Default context. */
-	for( pNext = pD3DDefault->next; pNext != pD3DDefault; pNext = pNext->next )
-	  UnBindWindow( pNext );
-      
-	return TRUE;
-   }
-
-   /*=================================================*/
-   /* Make for a fast redundant use of this function. */
-   /*=================================================*/
-   if ( pD3DCurrent == pContext )
-      return TRUE;
-
-   /*=============================*/
-   /* Unbind the current context. */
-   /*=============================*/
-   UnBindWindow( pD3DCurrent );
-
-   /*=====================================*/
-   /* Let Mesa-3.0 we have a new context. */
-   /*=====================================*/
-   SetupDDPointers( pContext->gl_ctx );
-   _mesa_make_current( pContext->gl_ctx, pContext->gl_buffer );
-
-   /*  We are done so set the internal current context. */
-   if ( pContext != pD3DDefault )
-   {
-	ResizeContext( pContext->gl_ctx );
-	pContext->hOldProc = (WNDPROC)GetWindowLong( pContext->pShared->hwnd, GWL_WNDPROC );
-	SetWindowLong( pContext->pShared->hwnd, GWL_WNDPROC, (LONG)wglMonitorProc );
-   }
-   pD3DCurrent = pContext;
-
-   return TRUE;
-}
-/*===========================================================================*/
-/*  This function will only return the current window size.  I have re-done  */   
-/* this function so that it doesn't check the current size and react to it as*/   
-/* I should be able to have all the react code in the WM_SIZE message.  The  */   
-/* old version would check the current window size and create/resize the HAL */   
-/* surfaces if they have changed.  I needed to delay the creation if the     */   
-/* surfaces because sometimes I wouldn't have a window size so this is where */   
-/* I delayed it.  If you are reading this then all went ok!                  */   
-/*  The default context will return a zero sized window and I'm not sure if  */
-/* this is ok at this point (TODO).                                          */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-static void GetBufferSize( GLcontext *ctx, GLuint *width, GLuint *height )
-{
-  D3DMESACONTEXT        *pContext = (D3DMESACONTEXT *)ctx->DriverCtx;
-
-  /* Fall through for the default because that is one of the uses for it. */
-  if ( pContext == pD3DDefault )
-  {
-    *width  = 0;
-    *height = 0;
-  }
-  else
-  {
-    *width  = pContext->pShared->dwWidth;
-    *height = pContext->pShared->dwHeight;
-  }
-}
-/*===========================================================================*/
-/*                                                                           */
-/*                                                                           */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-static BOOL ResizeContext( GLcontext *ctx )
-{
-  D3DMESACONTEXT        *pContext = (D3DMESACONTEXT *)ctx->DriverCtx,
-		    *pCurrentTemp;
-  RECT                  rectClient;
-  POINT                 pt;
-  DWORD                 dwWidth,
-		    dwHeight;
-  static BOOL           bDDrawLock = FALSE;
-
-  /* Make sure we have some values. */
-  if ( (pContext->hdc == NULL ) || 
-	  (pContext->pShared->hwnd != WindowFromDC(pContext->hdc)) ||
-       (pContext == pD3DDefault) )
-    return FALSE;
-
-  /* Having problems with DDraw sending resize messages before I was done. */
-  if( bDDrawLock == TRUE )
-    return FALSE;
-
-  // TODO: don't think I need this anymore.
-  pCurrentTemp = pD3DCurrent;
-  pD3DCurrent = pD3DDefault;
-  bDDrawLock = TRUE;
-
-  /* Get the current window dimentions. */
-  UpdateScreenPosHAL( pContext->pShared );
-  dwWidth  = pContext->pShared->rectW.right - pContext->pShared->rectW.left;
-  dwHeight = pContext->pShared->rectW.bottom - pContext->pShared->rectW.top;
-
-  /* Is the size of the OffScreen Render different? */
-  if ( (dwWidth != pContext->pShared->dwWidth) || (dwHeight != pContext->pShared->dwHeight) )
-  {
-    /* Create all the D3D surfaces and device. */
-    CreateHAL( pContext->pShared );
-
-    /*  I did this so that software rendering would still work as */
-    /* I don't need to scale the z values twice.                  */
-    g_DepthScale        = (pContext->pShared->bHardware) ? 1.0 : ((float)0x00FFFFFF);
-    g_MaxDepth          = (pContext->pShared->bHardware) ? 1.0 : ((float)0x00FFFFFF);
-    gl_DepthRange( pContext->gl_ctx, ctx->Viewport.Near, ctx->Viewport.Far );
-
-    /* Make sure we have a viewport. */
-    gl_Viewport( pContext->gl_ctx, 0, 0, dwWidth, dwHeight );
-
-    /* Update Mesa as we might have changed from SW <-> HW. */
-    SetupDDPointers( pContext->gl_ctx );
-    _mesa_make_current( pContext->gl_ctx, pContext->gl_buffer );
-
-    /*  If we are in HW we need to load the current texture if there is one already. */
-    //    if ( (ctx->Texture.Set[ctx->Texture.CurrentSet].Current != NULL) &&
-    //      (pContext->pShared->bHardware == TRUE) )
-    //    {
-    //   CreateTMgrHAL( pContext->pShared,
-    //                           ctx->Texture.Set[ctx->Texture.CurrentSet].Current->Name,
-    //                           0,     
-    //                           ctx->Texture.Set[ctx->Texture.CurrentSet].Current->Image[0]->Format,
-    //                           (RECT *)NULL,
-    //                           ctx->Texture.Set[ctx->Texture.CurrentSet].Current->Image[0]->Width,
-    //                           ctx->Texture.Set[ctx->Texture.CurrentSet].Current->Image[0]->Height,
-    //                           TM_ACTION_BIND,
-    //                           (void *)ctx->Texture.Set[ctx->Texture.CurrentSet].Current->Image[0]->Data );
-    //    }
-  }
-
-  // TODO: don't think I need this anymore.
-  pD3DCurrent = pCurrentTemp;
-  bDDrawLock = FALSE;
-
-  return TRUE;
-}
-
-/*===========================================================================*
-/*  This function will Blt the render buffer to the PRIMARY surface. I repeat*/
-/* this code for the other SwapBuffer like functions and the flush (didn't   */
-/* want the function calling overhead).  Thsi could have been a macro...     */
-/*                                                                           */
-/* TODO: there are some problems with viewport/scissoring.                   */
-/*===========================================================================*/
-/* RETURN: TRUE, FALSE.                                                      */
-/*===========================================================================*/
-BOOL APIENTRY  wglSwapBuffers( HDC hdc )
-{
-  /* Fall through for the default because that is one of the uses for it. */
-  if ( pD3DCurrent == pD3DDefault )
-    return FALSE;
-
-  SwapBuffersHAL( pD3DCurrent->pShared );
-
-  return TRUE;
-}
-/*===========================================================================*/
-/*  Same as wglSwapBuffers.                                                  */
-/*===========================================================================*/
-/* RETURN: TRUE, FALSE.                                                      */
-/*===========================================================================*/
-BOOL APIENTRY  SwapBuffers( HDC hdc )
-{
-  /* Fall through for the default because that is one of the uses for it. */
-  if ( pD3DCurrent == pD3DDefault )
-    return FALSE;
-
-  SwapBuffersHAL( pD3DCurrent->pShared );
-
-  return TRUE;
-}
-/*===========================================================================*/
-/*  This should be ok as none of the SwapBuffers will cause a redundant Blt  */
-/* as none of my Swap functions will call flush.  This should also allow     */
-/* sinlge buffered applications to work (not really worried though).  Some   */
-/* applications may flush then swap but then this is there fault IMHO.       */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-static void Flush( GLcontext *ctx )
-{
-  /* Fall through for the default because that is one of the uses for it. */
-  if ( pD3DCurrent == pD3DDefault )
-    return;
-
-  SwapBuffersHAL( pD3DCurrent->pShared );
-}
-/*===========================================================================*/
-/*  For now this function will ignore the supplied PF. If I'm going to allow */
-/* the user to choice the mode and device at startup I'm going to have to do */
-/* something different.                                                      */
-/*                                                                           */
-/* TODO: use the linked list of modes to build a pixel format to be returned */
-/*      to the caller.                                                       */
-/*===========================================================================*/
-/* RETURN: 1.                                                                */
-/*===========================================================================*/
-int APIENTRY   wglChoosePixelFormat( HDC hdc, CONST PIXELFORMATDESCRIPTOR *ppfd )
-{
-   return 1;
-}
-/*===========================================================================*/
-/*  See wglChoosePixelFormat.                                                */
-/*===========================================================================*/
-/* RETURN: 1.                                                                */
-/*===========================================================================*/
-int APIENTRY   ChoosePixelFormat( HDC hdc, CONST PIXELFORMATDESCRIPTOR *ppfd )
-{
-  return wglChoosePixelFormat(hdc,ppfd);
-}
-/*===========================================================================*/
-/*  This function (for now) returns a static PF everytime.  This is just to  */
-/* allow things to continue.                                                 */
-/*===========================================================================*/
-/* RETURN: 1.                                                                */
-/*===========================================================================*/
-int APIENTRY   wglDescribePixelFormat( HDC hdc, int iPixelFormat, UINT nBytes, LPPIXELFORMATDESCRIPTOR ppfd )
-{
-   static PIXELFORMATDESCRIPTOR  pfd = 
-   {
-      sizeof(PIXELFORMATDESCRIPTOR),   /* size */
-      1,                               /* version */
-      PFD_SUPPORT_OPENGL |
-      PFD_DRAW_TO_WINDOW |
-      PFD_DOUBLEBUFFER,                /* support double-buffering */
-      PFD_TYPE_RGBA,                   /* color type */
-      16,                              /* prefered color depth */
-      0, 0, 0, 0, 0, 0,                /* color bits (ignored) */
-      0,                               /* no alpha buffer */
-      0,                               /* alpha bits (ignored) */
-      0,                               /* no accumulation buffer */
-      0, 0, 0, 0,                      /* accum bits (ignored) */
-      16,                              /* depth buffer */
-      0,                               /* no stencil buffer */
-      0,                               /* no auxiliary buffers */
-      PFD_MAIN_PLANE,                  /* main layer */
-      0,                               /* reserved */
-      0, 0, 0,                         /* no layer, visible, damage masks */
-   };
-
-   /* Return the address of this static PF if one was requested. */
-   if ( ppfd != NULL )
-      memcpy( ppfd, &pfd, sizeof(PIXELFORMATDESCRIPTOR) );
-
-  return 1;
-}
-/*===========================================================================*/
-/*  See wglDescribePixelFormat.                                              */
-/*===========================================================================*/
-/* RETURN: 1.                                                                */
-/*===========================================================================*/
-int APIENTRY   DescribePixelFormat( HDC hdc, int iPixelFormat, UINT nBytes, LPPIXELFORMATDESCRIPTOR ppfd )
-{
-  return wglDescribePixelFormat(hdc,iPixelFormat,nBytes,ppfd);
-}
-/*===========================================================================*/
-/*  This function will always return 1 for now.  Just to allow for support.  */
-/*===========================================================================*/
-/* RETURN: 1.                                                                */
-/*===========================================================================*/
-int APIENTRY   wglGetPixelFormat( HDC hdc )
-{
-   return 1;
-}
-/*===========================================================================*/
-/*  See wglGetPixelFormat.                                                   */
-/*===========================================================================*/
-/* RETURN: 1.                                                                */
-/*===========================================================================*/
-int APIENTRY   GetPixelFormat( HDC hdc )
-{
-   return wglGetPixelFormat(hdc);
-}
-/*===========================================================================*/
-/*  This will aways work for now.                                            */
-/*===========================================================================*/
-/* RETURN: TRUE.                                                             */
-/*===========================================================================*/
-BOOL APIENTRY  wglSetPixelFormat( HDC hdc, int iPixelFormat, CONST PIXELFORMATDESCRIPTOR *ppfd )
-{
-   return TRUE;
-}
-/*===========================================================================*/
-/*  See wglSetPixelFormat.                                                   */
-/*===========================================================================*/
-/* RETURN: TRUE, FALSE.                                                      */
-/*===========================================================================*/
-BOOL APIENTRY  SetPixelFormat( HDC hdc, int iPixelFormat, CONST PIXELFORMATDESCRIPTOR *ppfd )
-{
-   return wglSetPixelFormat(hdc,iPixelFormat,ppfd);
-}
-/*===========================================================================*/
-/*  This is a wrapper function that is supported by my own internal function.*/
-/* that takes my own D3D Mesa context structure.  This so I can reuse the    */
-/* function (no need for speed).                                             */
-/*===========================================================================*/
-/* RETURN: TRUE.                                                             */
-/*===========================================================================*/
-BOOL APIENTRY  wglDeleteContext( HGLRC hglrc )
-{
-   DestroyContext( (D3DMESACONTEXT *)hglrc );
-
-   return TRUE;
-}
-/*===========================================================================*/
-/*  Simple getter function that uses a cast.                                 */
-/*===========================================================================*/
-/* RETURN: casted pointer to the context, NULL.                              */
-/*===========================================================================*/
-HGLRC APIENTRY wglGetCurrentContext( VOID )
-{
-   return (pD3DCurrent) ? (HGLRC)pD3DCurrent : (HGLRC)NULL;
-}
-/*===========================================================================*/
-/* No support.                                                               */
-/*===========================================================================*/
-/* RETURN: FALSE.                                                            */
-/*===========================================================================*/
-BOOL APIENTRY  wglCopyContext( HGLRC hglrcSrc, HGLRC hglrcDst, UINT mask )
-{
-   SetLastError( 0 );
-   return FALSE;
-}
-/*===========================================================================*/
-/* No support.                                                               */
-/*===========================================================================*/
-/* RETURN: NULL.                                                             */
-/*===========================================================================*/
-HGLRC APIENTRY wglCreateLayerContext( HDC hdc,int iLayerPlane )
-{
-   SetLastError( 0 );
-   return (HGLRC)NULL;
-}
-/*===========================================================================*/
-/*  Simple getter function.                                                  */
-/*===========================================================================*/
-/* RETURN: FALSE.                                                            */
-/*===========================================================================*/
-HDC APIENTRY   wglGetCurrentDC( VOID )
-{
-   return (pD3DCurrent) ? pD3DCurrent->hdc : (HDC)NULL;
-}
-/*===========================================================================*/
-/*  Simply call that searches the supported extensions for a match & returns */
-/* the pointer to the function that lends support.                           */
-/*===========================================================================*/
-/* RETURN: pointer to API call, NULL.                                        */
-/*===========================================================================*/
-PROC APIENTRY  wglGetProcAddress( LPCSTR lpszProc )
-{
-   int   index;
-
-   for( index = 0; index < qt_ext; index++ )
-      if( !strcmp(lpszProc,ext[index].name) )
-	 return ext[index].proc;
-
-   SetLastError( 0 );
-   return NULL;
-}
-/*===========================================================================*/
-/*  No support.                                                              */
-/*===========================================================================*/
-/* RETURN: FALSE.                                                            */
-/*===========================================================================*/
-BOOL APIENTRY  wglShareLists( HGLRC hglrc1, HGLRC hglrc2 )
-{
-   SetLastError( 0 );
-   return FALSE;
-}
-/*===========================================================================*/
-/*  No support.                                                              */
-/*===========================================================================*/
-/* RETURN: FALSE.                                                            */
-/*===========================================================================*/
-BOOL APIENTRY  wglUseFontBitmaps( HDC fontDevice, DWORD firstChar, DWORD numChars, DWORD listBase )
-{
-   SetLastError( 0 );
-   return FALSE;
-}
-/*===========================================================================*/
-/*  No support.                                                              */
-/*===========================================================================*/
-/* RETURN: FALSE.                                                            */
-/*===========================================================================*/
-BOOL APIENTRY  wglUseFontBitmapsW( HDC hdc,DWORD first,DWORD count,DWORD listBase )
-{
-   SetLastError( 0 );
-   return FALSE;
-}
-/*===========================================================================*/
-/*  No support.                                                              */
-/*===========================================================================*/
-/* RETURN: FALSE.                                                            */
-/*===========================================================================*/
-BOOL APIENTRY  wglUseFontOutlinesA( HDC hdc, DWORD first, DWORD count, DWORD listBase, FLOAT deviation, FLOAT extrusion, int format, LPGLYPHMETRICSFLOAT lpgmf )
-{
-   SetLastError( 0 );
-   return FALSE;
-}
-/*===========================================================================*/
-/*  No support.                                                              */
-/*===========================================================================*/
-/* RETURN: FALSE.                                                            */
-/*===========================================================================*/
-BOOL APIENTRY  wglUseFontOutlinesW( HDC hdc,DWORD first,DWORD count, DWORD listBase,FLOAT deviation, FLOAT extrusion,int format, LPGLYPHMETRICSFLOAT lpgmf )
-{
-   SetLastError( 0 );
-   return FALSE ;
-}
-/*===========================================================================*/
-/*  No support.                                                              */
-/*===========================================================================*/
-/* RETURN: FALSE.                                                            */
-/*===========================================================================*/
-BOOL APIENTRY  wglSwapLayerBuffers( HDC hdc, UINT fuPlanes )
-{
-   SetLastError( 0 );
-   return FALSE;
-}
-/*===========================================================================*/
-/*  This function will be hooked into the window that has been bound.  Right */
-/* now it is used to track the window size and position.  Also the we clean  */
-/* up the currrent context when the window is close/destroyed.               */
-/*                                                                           */
-/* TODO: there might be something wrong here as some games (Heretic II) don't*/
-/*      track the window quit right.                                         */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-LONG APIENTRY  wglMonitorProc( HWND hwnd, UINT message, UINT wParam, LONG lParam )
-{
-  WNDPROC       hOldProc;
-  GLint width,
-	  height;
-
-  switch( message ) 
-  {
-//      case WM_PAINT:
-//        break;
-//      case WM_ACTIVATE:
-//         break;
-//      case WM_SHOWWINDOW:
-//         break;
-
-    case UM_FATALSHUTDOWN:
-	 /* Support the API until we die... */
-	 MakeCurrent( pD3DDefault );
-	 break;
-
-    case WM_MOVE:
-    case WM_DISPLAYCHANGE:
-    case WM_SIZE:
-	 ResizeContext( pD3DCurrent->gl_ctx );
-	 break;
-
-    case WM_CLOSE:
-    case WM_DESTROY:
-	 /* Support the API until we die... */
-	 hOldProc = pD3DCurrent->hOldProc;
-	 DestroyContext( pD3DCurrent );
-	 return (hOldProc)(hwnd,message,wParam,lParam);
-  }
-
-  return (pD3DCurrent->hOldProc)(hwnd,message,wParam,lParam);
-}
-
-/**********************************************************************/
-/*****              Miscellaneous device driver funcs             *****/
-/**********************************************************************/
-
-/*===========================================================================*/
-/*  Not reacting to this as I'm only supporting drawing to the back buffer   */
-/* right now.                                                                */
-/*===========================================================================*/
-/* RETURN: TRUE.                                                             */
-/*===========================================================================*/
-static GLboolean SetBuffer( GLcontext *ctx, GLenum buffer )
-{
-   if (buffer == GL_BACK_LEFT)
-      return GL_TRUE;
-   else
-      return GL_FALSE;
-}
-/*===========================================================================*/
-/*  This proc will be called by Mesa when the viewport has been set.  So if  */
-/* we have a context and it isn't the default then we should let D3D know of */
-/* the change.                                                               */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-static void SetViewport( GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h )
-{
-   D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx;
-   RECT           rect;
-
-   /* Make sure we can set a viewport. */
-   if ( pContext->pShared && (pContext != pD3DDefault) )
-   {
-	 // TODO: might be needed.
-     UpdateScreenPosHAL( pContext->pShared );
-	rect.left   = x;
-	rect.right  = x + w;
-	rect.top    = y;
-	rect.bottom = y + h;
-
-	// TODO: shared struct should make this call smaller
-     SetViewportHAL( pContext->pShared, &rect, 0.0F, 1.0F );
-   }
-}
-/*===========================================================================*/
-/*  This function could be better I guess but I decided just to grab the four*/
-/* components and store then seperately.  Makes it easier to use IMHO.       */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-static void ClearColor( GLcontext *ctx, GLubyte r, GLubyte g, GLubyte b, GLubyte a )
-{
-   D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx;
-
-   pContext->aClear = a;
-   pContext->bClear = b;
-   pContext->gClear = g;
-   pContext->rClear = r;
-}
-/*===========================================================================*/
-/*  This function could be better I guess but I decided just to grab the four*/
-/* components and store then seperately.  Makes it easier to use IMHO.       */
-/* (is there an echo in here?)                                               */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-static void SetColor( GLcontext *ctx, GLubyte r, GLubyte g, GLubyte b, GLubyte a )
-{
-   D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx;
-
-   pContext->aCurrent = a;
-   pContext->bCurrent = b;
-   pContext->gCurrent = g;
-   pContext->rCurrent = r;
-}
-/*===========================================================================*/
-/*                                                                           */
-/*                                                                           */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-static const char *RendererString( void )
-{
-  static char pszRender[64];
-
-  strcpy( pszRender, "altD3D " );
-
-  if ( pD3DCurrent->pShared->bHardware )
-    strcat( pszRender, "(HW)");
-  else
-    strcat( pszRender, "(SW)");
-
-  return (const char *)pszRender;
-}
-/*===========================================================================*/
-/*  This function will choose which set of pointers Mesa will use based on   */
-/* whether we hard using hardware or software.  I have added another set of  */
-/* pointers that will do nothing but stop the API from crashing.             */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-static void SetupDDPointers( GLcontext *ctx )
-{
-   D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx;
-
-   // TODO: write a generic NULL support for the span render. 
-   if ( pContext->pShared && pContext->pShared->bHardware )
-   {
-	ctx->Driver.UpdateState = SetupHWDDPointers;
-   }
-   else if ( pContext == pD3DDefault )
-   {
-	ctx->Driver.UpdateState = SetupNULLDDPointers;
-   }
-   else
-   {
-	ctx->Driver.UpdateState = SetupSWDDPointers;
-   }
-}
-/*===========================================================================*/
-/*  This function will populate all the Mesa driver hooks. This version of   */
-/* hooks will do nothing but support the API when we don't have a valid      */
-/* context bound.  This is mostly for applications that don't behave right   */
-/* and also to help exit as clean as possable when we have a FatalError.     */
-/*===========================================================================*/
-/* RETURN: pointer to the specific function.                                 */
-/*===========================================================================*/
-static void SetupNULLDDPointers( GLcontext *ctx )
-{
-   D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx;
-
-   /* Initialize all the pointers in the DD struct.  Do this whenever */
-   /* a new context is made current or we change buffers via set_buffer! */
-   ctx->Driver.UpdateState          = SetupNULLDDPointers;
-
-   /* State management hooks. */
-   ctx->Driver.Color                = NULLSetColor;
-   ctx->Driver.ClearColor           = NULLClearColor;
-   ctx->Driver.Clear                = NULLClearBuffers;
-   ctx->Driver.SetBuffer            = NULLSetBuffer;
-
-   /* Window management hooks. */
-   ctx->Driver.GetBufferSize        = NULLGetBufferSize;
-
-   /* Primitive rendering hooks. */
-   ctx->Driver.TriangleFunc         = NULL;
-   ctx->Driver.RenderVB             = NULL;
-
-   /* Pixel/span writing functions: */
-   ctx->Driver.WriteRGBASpan        = NULLWrSpRGBA;
-   ctx->Driver.WriteRGBSpan         = NULLWrSpRGB;
-   ctx->Driver.WriteMonoRGBASpan    = NULLWrSpRGBAMono;
-   ctx->Driver.WriteRGBAPixels      = NULLWrPiRGBA;
-   ctx->Driver.WriteMonoRGBAPixels  = NULLWrPiRGBAMono;
-
-   /* Pixel/span reading functions: */
-   ctx->Driver.ReadRGBASpan         = NULLReSpRGBA;
-   ctx->Driver.ReadRGBAPixels       = NULLRePiRGBA;
-
-   /* Misc. hooks. */
-   ctx->Driver.RendererString    = RendererString;
-}
-/*===========================================================================*/
-/*  This function will populate all the Mesa driver hooks. There are two of  */
-/* these functions.  One if we have hardware support and one is there is only*/
-/* software.  These functions will be called by Mesa and by the wgl.c when we*/
-/* have resized (or created) the buffers.  The thing is that if a window gets*/
-/* resized we may loose hardware support or gain it...                       */
-/*===========================================================================*/
-/* RETURN: pointer to the specific function.                                 */
-/*===========================================================================*/
-static void SetupSWDDPointers( GLcontext *ctx )
-{
-   D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx;
-
-   /* Initialize all the pointers in the DD struct.  Do this whenever */
-   /* a new context is made current or we change buffers via set_buffer! */
-   ctx->Driver.UpdateState          = SetupSWDDPointers;
-
-   /* State management hooks. */
-   ctx->Driver.Color                = SetColor;
-   ctx->Driver.ClearColor           = ClearColor;
-   ctx->Driver.Clear                = ClearBuffers;
-   ctx->Driver.SetBuffer            = SetBuffer;
-
-   /* Window management hooks. */
-   ctx->Driver.GetBufferSize        = GetBufferSize;
-   ctx->Driver.Viewport             = SetViewport;
-
-   /* Primitive rendering hooks. */
-   ctx->Driver.TriangleFunc         = NULL;
-   ctx->Driver.RenderVB             = NULL;
-
-   /* Texture management hooks. */
-
-   /* Pixel/span writing functions: */
-   ctx->Driver.WriteRGBASpan        = WSpanRGBA;
-   ctx->Driver.WriteRGBSpan         = WSpanRGB;
-   ctx->Driver.WriteMonoRGBASpan    = WSpanRGBAMono;
-   ctx->Driver.WriteRGBAPixels      = WPixelsRGBA;
-   ctx->Driver.WriteMonoRGBAPixels  = WPixelsRGBAMono;
-
-   /* Pixel/span reading functions: */
-   ctx->Driver.ReadRGBASpan         = RSpanRGBA;
-   ctx->Driver.ReadRGBAPixels       = RPixelsRGBA;
-
-   /* Misc. hooks. */
-   ctx->Driver.Flush                = Flush;
-   ctx->Driver.RendererString    = RendererString;
-}
-/*===========================================================================*/
-/*  This function will populate all the Mesa driver hooks. There are two of  */
-/* these functions.  One if we have hardware support and one is there is only*/
-/* software.  These functions will be called by Mesa and by the wgl.c when we*/
-/* have resized (or created) the buffers.  The thing is that if a window gets*/
-/* resized we may loose hardware support or gain it...                       */
-/*===========================================================================*/
-/* RETURN: pointer to the specific function.                                 */
-/*===========================================================================*/
-static void SetupHWDDPointers( GLcontext *ctx )
-{
-   D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx;
-
-   /* Initialize all the pointers in the DD struct.  Do this whenever */
-   /* a new context is made current or we change buffers via set_buffer! */
-   ctx->Driver.UpdateState          = SetupHWDDPointers;
-
-   /* State management hooks. */
-   ctx->Driver.Color                = SetColor;
-   ctx->Driver.ClearColor           = ClearColor;
-   ctx->Driver.Clear                = ClearBuffersD3D;
-   ctx->Driver.SetBuffer            = SetBuffer;
-
-   /* Window management hooks. */
-   ctx->Driver.GetBufferSize        = GetBufferSize;
-   ctx->Driver.Viewport             = SetViewport;
-
-   /* Primitive rendering hooks. */
-   ctx->Driver.TriangleFunc         = RenderOneTriangle;
-   ctx->Driver.LineFunc                          = RenderOneLine;
-   ctx->Driver.RenderVB             = RenderVertexBuffer;
-
-   /* Pixel/span writing functions: */
-   ctx->Driver.WriteRGBASpan        = WSpanRGBA;
-   ctx->Driver.WriteRGBSpan         = WSpanRGB;
-   ctx->Driver.WriteMonoRGBASpan    = WSpanRGBAMono;
-   ctx->Driver.WriteRGBAPixels      = WPixelsRGBA;
-   ctx->Driver.WriteMonoRGBAPixels  = WPixelsRGBAMono;
-
-   /* Pixel/span reading functions: */
-   ctx->Driver.ReadRGBASpan         = RSpanRGBA;
-   ctx->Driver.ReadRGBAPixels       = RPixelsRGBA;
-
-   /* Texture management hooks. */
-   //   ctx->Driver.BindTexture          = TextureBind;
-   ctx->Driver.TexImage             = TextureLoad;
-   ctx->Driver.TexSubImage          = TextureSubImage;
-
-   /* Misc. hooks. */
-   ctx->Driver.Flush                = Flush;
-   ctx->Driver.RendererString    = RendererString;
-}
-/*===========================================================================*/
-/*  This function will release all resources used by the DLL.  Every context */
-/* will be clobbered by releaseing all driver desources and then freeing the */
-/* context memory.  Most all the work is done in DestroyContext.             */
-/*===========================================================================*/
-/* RETURN: TRUE.                                                             */
-/*===========================================================================*/
-static BOOL  TermOpenGL( HINSTANCE hInst )
-{
-  D3DMESACONTEXT *pTmp,
-		 *pNext;
-
-  /* Just incase we are still getting paint msg. */
-  MakeCurrent( pD3DDefault );
-
-  /* Walk the list until we get back to the default context. */
-  for( pTmp = pD3DDefault->next; pTmp != pD3DDefault; pTmp = pNext )
-  {
-    pNext = pTmp->next;
-    DestroyContext( pTmp );
-  }
-  DestroyContext( pD3DDefault );
-
-  return TRUE;
-}
-/*===========================================================================*/
-/*  This function is an internal function that will clean up all the Mesa    */
-/* context bound to this D3D context.  Also any D3D stuff that this context  */
-/* uses will be unloaded.                                                    */
-/*===========================================================================*/
-/* RETURN: TRUE, FALSE.                                                      */
-/*===========================================================================*/
-static void DestroyContext( D3DMESACONTEXT *pContext )
-{
-  D3DMESACONTEXT        *pTmp;
-
-  /* Walk the list until we find the context before this one. */
-  for( pTmp = pD3DDefault; pTmp && (pTmp->next != pContext); pTmp = pTmp->next )
-    if ( pTmp == pTmp->next )
-	 break;
-
-  /* If we never found it it must already be deleted. */
-  if ( pTmp->next != pContext )
-    return;
-
-  /* Make sure we are not using this context. */
-  if ( pContext == pD3DCurrent )
-    MakeCurrent( pD3DDefault );
-
-   /* Free the Mesa stuff. */
-   if ( pContext->gl_visual ) 
-   {
-      _mesa_destroy_visual( pContext->gl_visual );
-      pContext->gl_visual = NULL;
-   }
-   if ( pContext->gl_buffer ) 
-   {
-      _mesa_destroy_framebuffer( pContext->gl_buffer );
-      pContext->gl_buffer = NULL;
-   }
-   if ( pContext->gl_ctx )    
-   {
-      _mesa_destroy_context( pContext->gl_ctx );
-      pContext->gl_ctx = NULL;
-   }
-
-   /* Now dump the D3D. */
-   if ( pContext->pShared )
-	TermHAL( pContext->pShared );
-
-   /* Update the previous context's link. */
-   pTmp->next = pContext->next;
-
-   /* Gonzo. */
-   FREE( pContext );
-}
-/*===========================================================================*/
-/*  This function will pull the supplied context away from Win32.  Basicly it*/
-/* will remove the hook from the window Proc.                                */
-/*                                                                           */
-/* TODO: might want to serialize this stuff...                               */
-/*===========================================================================*/
-/* RETURN: TRUE, FALSE.                                                      */
-/*===========================================================================*/
-static BOOL UnBindWindow( D3DMESACONTEXT *pContext )
-{
-  if ( pContext == NULL )
-    return FALSE;
-
-  if ( pContext == pD3DDefault )
-    return TRUE;
-
-  /* Make sure we always have a context bound. */
-  if ( pContext == pD3DCurrent )
-    pD3DCurrent = pD3DDefault;
-
-  SetWindowLong( pContext->pShared->hwnd, GWL_WNDPROC, (LONG)pContext->hOldProc );
-  pContext->hOldProc   = NULL;
-
-  return TRUE;
-}
-/*===========================================================================*/
-/*  There are two cases that allow for a faster clear when we know that the  */
-/* whole buffer is cleared and that there is no clipping.                    */
-/*===========================================================================*/
-/* RETURN: the original mask with the bits cleared that represents the buffer*
-/* or buffers we just cleared.                                               */
-/*===========================================================================*/
-GLbitfield ClearBuffersD3D( GLcontext *ctx, GLbitfield mask, GLboolean all, GLint x, GLint y, GLint width, GLint height )
-{
-  D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx;
-  DWORD          dwFlags = 0;
-
-  if ( mask & GL_COLOR_BUFFER_BIT )
-  {
-    dwFlags |= D3DCLEAR_TARGET;
-    mask &= ~GL_COLOR_BUFFER_BIT;
-  }
-  if ( mask & GL_DEPTH_BUFFER_BIT )
-  {
-    dwFlags |= D3DCLEAR_ZBUFFER;
-    mask &= ~GL_DEPTH_BUFFER_BIT;
-  }
-  if ( dwFlags == 0 )
-    return mask;
-
-  ClearHAL( pContext->pShared, 
-		  dwFlags, 
-		  all, 
-		  x, y, 
-		  width, height, 
-		  ((pContext->aClear<<24) | (pContext->rClear<<16) | (pContext->gClear<<8) | (pContext->bClear)), 
-		  ctx->Depth.Clear, 
-		  0 );
-
-  return mask;
-}
-
-
-
-/*===========================================================================*/
-/*  TEXTURE MANAGER: ok here is how I did textures.  Mesa-3.0 will keep track*/
-/* of all the textures for us.  So this means that at anytime we can go to   */
-/* the Mesa context and get the current texture.  With this in mind this is  */
-/* what I did.  I really don't care about what textures get or are loaded    */
-/* until I actually have to draw a tri that is textured.  At this point I    */
-/* must have the texture so I demand the texture by destorying all other     */
-/* texture surfaces if need be and load the current one.  This allows for the*/
-/* best preformance on low memory cards as time is not wasted loading and    */
-/* unload textures.                                                          */
-/*===========================================================================*/
-
-
-
-
-
-/*===========================================================================*/
-/*  TextureLoad will try and create a D3D surface from the supplied texture  */
-/* object if its level 0 (first).  The surface will be fully filled with the */
-/* texture.                                                                  */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-static void TextureLoad( GLcontext *ctx, GLenum target, struct gl_texture_object *tObj, GLint level, GLint internalFormat, const struct gl_texture_image *image )
-{
-  D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx;
-
-  /* TODO: only doing first LOD. */
-  if ( (ctx->DriverCtx == NULL) || (level != 0) )
-    return;
-
-  CreateTMgrHAL( pContext->pShared, 
-			  tObj->Name, 
-			  level,
-			  tObj->Image[level]->Format,
-			  (RECT *)NULL,
-			  tObj->Image[level]->Width, 
-			  tObj->Image[level]->Height,
-			  TM_ACTION_LOAD,
-			  (void *)tObj->Image[level]->Data );
-}
-/*===========================================================================*/
-/*  TextureBind make sure that the texture is on the card.  Thats it.        */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-static void TextureBind( GLcontext *ctx, GLenum target, struct gl_texture_object *tObj )
-{
-  D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx;
-
-  /* TODO: only doing first LOD. */
-  if ( (tObj->Image[0] == NULL) || (ctx->DriverCtx == NULL) )
-    return;
-
-  CreateTMgrHAL( pContext->pShared, 
-			  tObj->Name, 
-			  0,
-			  tObj->Image[0]->Format,
-			  (RECT *)NULL,
-			  tObj->Image[0]->Width, 
-			  tObj->Image[0]->Height,
-			  TM_ACTION_BIND,
-			  (void *)tObj->Image[0]->Data );
-}
-/*===========================================================================*/
-/*  TextureSubImage will make sure that the texture being updated is updated */
-/* if its on the card.                                                       */
-/*===========================================================================*/
-/* RETURN:                                                                   */
-/*===========================================================================*/
-static void TextureSubImage( GLcontext *ctx, GLenum target, struct gl_texture_object *tObj, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLint internalFormat, const struct gl_texture_image *image )
-{
-  D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx;
-  RECT           rect;
-
-  /* TODO: only doing first LOD. */
-  if ( (ctx->DriverCtx == NULL) || (level > 0) )
-    return;
-
-  /* Create a dirty rectangle structure. */
-  rect.left   = xoffset;
-  rect.right  = xoffset + width;
-  rect.top    = yoffset;
-  rect.bottom = yoffset + height;
-  
-  CreateTMgrHAL( pContext->pShared, 
-			  tObj->Name, 
-			  0,
-			  tObj->Image[0]->Format, 
-			  &rect,
-			  tObj->Image[0]->Width, 
-			  tObj->Image[0]->Height,
-			  TM_ACTION_UPDATE,
-			  (void *)tObj->Image[0]->Data );
-}
-
diff --git a/src/mesa/drivers/d3d/d3dText.h b/src/mesa/drivers/d3d/d3dText.h
deleted file mode 100644
index 9ff0650518..0000000000
--- a/src/mesa/drivers/d3d/d3dText.h
+++ /dev/null
@@ -1,53 +0,0 @@
-#ifndef D3D_TEXT_H
-#define D3D_TEXT_H
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*===========================================================================*/
-/* Includes.                                                                 */
-/*===========================================================================*/
-#include <windows.h>
-#include <ddraw.h>
-#include <d3d.h>
-/*===========================================================================*/
-/* Magic numbers.                                                            */
-/*===========================================================================*/
-#define	D3DLTEXT_BITSUSED		0xFFFFFFFF
-#define	MAX_VERTICES			700  // (14*40) 14 per character, 40 characters
-/*===========================================================================*/
-/* Macros defines.                                                           */
-/*===========================================================================*/
-/*===========================================================================*/
-/* Type defines.                                                             */
-/*===========================================================================*/
-typedef struct _d3dText_metrics
-{
-  float		   	fntYScale,
-                    fntXScale;
-
-  int		   	fntXSpacing,
-	               fntYSpacing;
-
-  DWORD			dwColor;
-  LPDIRECT3DDEVICE3 lpD3DDevice;
-
-} D3DFONTMETRICS, *PD3DFONTMETRICS;
-/*===========================================================================*/
-/* Function prototypes.                                                      */
-/*===========================================================================*/
-extern BOOL InitD3DText( void );
-extern void d3dTextDrawCharacter( char *c, int x, int y, PD3DFONTMETRICS pfntMetrics );
-extern void d3dTextDrawString( char *pszString, int x, int y, PD3DFONTMETRICS pfntMetrics );
-/*===========================================================================*/
-/* Global variables.                                                         */
-/*===========================================================================*/
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif
-- 
cgit v1.2.3


From b5c3199afe0d90787223cb57c35ff22e38b3c920 Mon Sep 17 00:00:00 2001
From: Kristian Høgsberg <krh@bitplanet.net>
Date: Thu, 25 Feb 2010 15:55:00 -0500
Subject: Remove dos driver

---
 Makefile                        |    3 -
 include/GL/Makefile.am          |    2 +-
 src/mesa/drivers/dos/blit.S     | 1040 ---------------------------------------
 src/mesa/drivers/dos/dmesa.c    |  359 --------------
 src/mesa/drivers/dos/dpmi.c     |  166 -------
 src/mesa/drivers/dos/internal.h |  105 ----
 src/mesa/drivers/dos/null.c     |  224 ---------
 src/mesa/drivers/dos/null.h     |   41 --
 src/mesa/drivers/dos/vesa.c     |  719 ---------------------------
 src/mesa/drivers/dos/vesa.h     |   65 ---
 src/mesa/drivers/dos/vga.c      |  289 -----------
 src/mesa/drivers/dos/vga.h      |   42 --
 src/mesa/drivers/dos/video.c    |  442 -----------------
 src/mesa/drivers/dos/video.h    |   56 ---
 14 files changed, 1 insertion(+), 3552 deletions(-)
 delete mode 100644 src/mesa/drivers/dos/blit.S
 delete mode 100644 src/mesa/drivers/dos/dmesa.c
 delete mode 100644 src/mesa/drivers/dos/dpmi.c
 delete mode 100644 src/mesa/drivers/dos/internal.h
 delete mode 100644 src/mesa/drivers/dos/null.c
 delete mode 100644 src/mesa/drivers/dos/null.h
 delete mode 100644 src/mesa/drivers/dos/vesa.c
 delete mode 100644 src/mesa/drivers/dos/vesa.h
 delete mode 100644 src/mesa/drivers/dos/vga.c
 delete mode 100644 src/mesa/drivers/dos/vga.h
 delete mode 100644 src/mesa/drivers/dos/video.c
 delete mode 100644 src/mesa/drivers/dos/video.h

(limited to 'src/mesa')

diff --git a/Makefile b/Makefile
index 0527fa0d82..659e11c5fb 100644
--- a/Makefile
+++ b/Makefile
@@ -270,7 +270,6 @@ MAIN_FILES = \
 	$(DIRECTORY)/src/mesa/drivers/beos/Makefile			\
 	$(DIRECTORY)/src/mesa/drivers/common/*.[ch]			\
 	$(DIRECTORY)/src/mesa/drivers/common/descrip.mms		\
-	$(DIRECTORY)/src/mesa/drivers/dos/*.[chS]			\
 	$(DIRECTORY)/src/mesa/drivers/fbdev/Makefile			\
 	$(DIRECTORY)/src/mesa/drivers/fbdev/glfbdev.c			\
 	$(DIRECTORY)/src/mesa/drivers/glide/*.[ch]			\
@@ -472,8 +471,6 @@ GLUT_FILES = \
 	$(DIRECTORY)/src/glut/beos/*.[ch]		\
 	$(DIRECTORY)/src/glut/beos/*.cpp		\
 	$(DIRECTORY)/src/glut/beos/Makefile		\
-	$(DIRECTORY)/src/glut/dos/*.[ch]		\
-	$(DIRECTORY)/src/glut/dos/PC_HW/*.[chS]		\
 	$(DIRECTORY)/src/glut/ggi/*.[ch]		\
 	$(DIRECTORY)/src/glut/ggi/Makefile		\
 	$(DIRECTORY)/src/glut/fbdev/Makefile		\
diff --git a/include/GL/Makefile.am b/include/GL/Makefile.am
index ca528f606d..a62495766c 100644
--- a/include/GL/Makefile.am
+++ b/include/GL/Makefile.am
@@ -28,7 +28,7 @@ if NEED_GLUT
 sel_inc_glut = $(INC_GLUT)
 endif
 
-EXTRA_HEADERS = amesa.h dosmesa.h foomesa.h glut_h.dja mesa_wgl.h mglmesa.h \
+EXTRA_HEADERS = amesa.h foomesa.h glut_h.dja mesa_wgl.h mglmesa.h \
 	vms_x_fix.h wmesa.h \
 	$(INC_GGI) $(INC_OSMESA) $(INC_SVGA) $(INC_X11) $(INC_GLUT)
 
diff --git a/src/mesa/drivers/dos/blit.S b/src/mesa/drivers/dos/blit.S
deleted file mode 100644
index 02dc8400d8..0000000000
--- a/src/mesa/drivers/dos/blit.S
+++ /dev/null
@@ -1,1040 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  4.0
- * 
- * Copyright (C) 1999  Brian Paul   All Rights Reserved.
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * DOS/DJGPP device driver for Mesa
- *
- *  Author: Daniel Borca
- *  Email : dborca@yahoo.com
- *  Web   : http://www.geocities.com/dborca
- */
-
-
-		.file	"blit.S"
-
-/*
- * extern unsigned int vesa_gran_mask, vesa_gran_shift;
- * extern int vl_video_selector;
-
- * extern void *vl_current_draw_buffer;
- * extern int vl_current_stride, vl_current_height;
- * extern int vl_current_offset, vl_current_delta;
- */
-
-		.text
-
-/* Desc: VESA bank switching routine (BIOS)
- *
- * In  : EBX=0, EDX = bank number
- * Out : -
- *
- * Note: thrashes EAX
- */
-		.p2align 5,,31
-_vesa_swbankBIOS:
-		movw	$0x4f05, %ax
-		int	$0x10
-		ret
-
-		.p2align 2,,3
-		.global	_vesa_swbank
-_vesa_swbank:	.long	_vesa_swbankBIOS
-
-/* Desc: void vesa_b_dump_virtual (void);
- *
- * In  : -
- * Out : -
- *
- * Note: uses current draw buffer
- */
-		.p2align 5,,31
-		.global	_vesa_b_dump_virtual
-_vesa_b_dump_virtual:
-		cld
-		pushl	%es
-		pushl	%ebx
-		pushl	%esi
-		pushl	%edi
-		pushl	%ebp
-		movl	_vl_video_selector, %es
-		movl	_vl_current_draw_buffer, %esi
-		movl	_vl_current_offset, %edi
-		movl	_vesa_gran_shift, %ecx
-		movl	_vesa_gran_mask, %ebp
-		movl	%edi, %edx
-		xorl	%ebx, %ebx
-		andl	%ebp, %edi
-		shrl	%cl, %edx
-		incl	%ebp
-		call	*_vesa_swbank
-		movl	_vl_current_stride, %ecx
-		movl	_vl_current_height, %eax
-		movl	_vl_current_delta, %ebx
-		shrl	$2, %ecx
-		.balign	4
-	0:
-		pushl	%ecx
-		.balign	4
-	1:
-		cmpl	%ebp, %edi
-		jb	2f
-		pushl	%eax
-		pushl	%ebx
-		incl	%edx
-		xorl	%ebx, %ebx
-		call	*_vesa_swbank
-		popl	%ebx
-		popl	%eax
-		subl	%ebp, %edi
-		.balign	4
-	2:
-		movsl
-		decl	%ecx
-		jnz	1b
-		popl	%ecx
-		addl	%ebx, %edi
-		decl	%eax
-		jnz	0b
-		popl	%ebp
-		popl	%edi
-		popl	%esi
-		popl	%ebx
-		popl	%es
-		ret
-
-/* Desc: void vesa_l_dump_virtual (void);
- *
- * In  : -
- * Out : -
- *
- * Note: uses current draw buffer
- */
-		.p2align 5,,31
-		.global	_vesa_l_dump_virtual
-_vesa_l_dump_virtual:
-		cld
-		pushl	%es
-		pushl	%esi
-		pushl	%edi
-		movl	_vl_video_selector, %es
-		movl	_vl_current_draw_buffer, %esi
-		movl	_vl_current_offset, %edi
-		movl	_vl_current_stride, %ecx
-		movl	_vl_current_height, %edx
-		movl	_vl_current_delta, %eax
-		shrl	$2, %ecx
-		.balign	4
-	0:
-		pushl	%ecx
-		rep;	movsl
-		popl	%ecx
-		addl	%eax, %edi
-		decl	%edx
-		jnz	0b
-		popl	%edi
-		popl	%esi
-		popl	%es
-		ret
-
-/* Desc: void vesa_l_dump_virtual_mmx (void);
- *
- * In  : -
- * Out : -
- *
- * Note: uses current draw buffer
- */
-		.p2align 5,,31
-		.global	_vesa_l_dump_virtual_mmx
-_vesa_l_dump_virtual_mmx:
-#ifdef USE_MMX_ASM
-		pushl	%esi
-		pushl	%edi
-		movl	_vl_video_selector, %fs
-		movl	_vl_current_draw_buffer, %esi
-		movl	_vl_current_offset, %edi
-		movl	_vl_current_stride, %ecx
-		movl	_vl_current_height, %edx
-		movl	_vl_current_delta, %eax
-		shrl	$3, %ecx
-		.balign	4
-	0:
-		pushl	%ecx
-		.balign	4
-	1:
-		movq	(%esi), %mm0
-		addl	$8, %esi
-		movq	%mm0, %fs:(%edi)
-		addl	$8, %edi
-		decl	%ecx
-		jnz	1b
-		popl	%ecx
-		addl	%eax, %edi
-		decl	%edx
-		jnz	0b
-		popl	%edi
-		popl	%esi
-		emms
-#endif
-		ret
-
-
-
-#define CVT_32_TO_16(s, tmp)			\
-    /* SRC = bbbbbbbbggggggggrrrrrrrr******** */\
-		movl	%e##s##x, %tmp		;\
-    /* TMP = bbbbbbbbggggggggrrrrrrrr******** */\
-		shrb	$2, %s##h		;\
-    /* SRC = bbbbbbbbgggggg00rrrrrrrr******** */\
-		andl	$0xF80000, %tmp		;\
-    /* TMP = 0000000000000000000rrrrr00000000 */\
-		shrw	$3, %s##x		;\
-    /* SRC = bbbbbgggggg00000rrrrrrrr******** */\
-		shrl	$8, %tmp		;\
-    /* TMP = 00000000000rrrrr0000000000000000 */\
-		orl	%tmp, %e##s##x		;\
-    /* SRC = bbbbbggggggrrrrrrrrrrrrr******** */
-
-#define CVT_32_TO_15(s, tmp)			\
-    /* SRC = bbbbbbbbggggggggrrrrrrrr******** */\
-		movl	%e##s##x, %tmp		;\
-    /* TMP = bbbbbbbbggggggggrrrrrrrr******** */\
-		shrb	$3, %s##h		;\
-    /* SRC = bbbbbbbbgggggg00rrrrrrrr******** */\
-		andl	$0xF80000, %tmp		;\
-    /* TMP = 0000000000000000000rrrrr00000000 */\
-		shrw	$3, %s##x		;\
-    /* SRC = bbbbbgggggg00000rrrrrrrr******** */\
-		shrl	$9, %tmp		;\
-    /* TMP = 00000000000rrrrr0000000000000000 */\
-		orl	%tmp, %e##s##x		;\
-    /* SRC = bbbbbggggggrrrrrrrrrrrrr******** */
-
-#define CVT_16_TO_15(src, tmp)			\
-    /* SRC = bbbbbggggggrrrrrBBBBBGGGGGGRRRRR */\
-		movl	%src, %tmp		;\
-    /* TMP = bbbbbggggggrrrrrBBBBBGGGGGGRRRRR */\
-		andl	$0x1F001F, %src		;\
-    /* SRC = bbbbb00000000000BBBBB00000000000 */\
-		andl	$0xFFC0FFC0, %tmp	;\
-    /* TMP = 000000gggggrrrrr000000GGGGGRRRRR */\
-		shrl	%tmp			;\
-    /* TMP = 00000gggggrrrrr000000GGGGGRRRRR0 */\
-		orl	%tmp, %src		;\
-    /* SRC = bbbbbgggggrrrrr0BBBBBGGGGGRRRRR0 */\
-
-
-
-/* transform BGRA to BGR */
-		.p2align 5,,31
-		.global	_vesa_l_dump_32_to_24
-_vesa_l_dump_32_to_24:
-		pushl	%ebx
-		pushl	%esi
-		pushl	%edi
-		movl	_vl_video_selector, %fs
-		movl	_vl_current_draw_buffer, %esi
-		movl	_vl_current_offset, %edi
-		movl	_vl_current_stride, %ecx
-		movl	_vl_current_height, %edx
-		movl	_vl_current_delta, %ebx
-		.balign	4
-	0:
-		pushl	%ecx
-	1:
-		movl	(%esi), %eax
-		addl	$4, %esi
-		movw	%ax, %fs:(%edi)
-		shrl	$16, %eax
-		movb	%al, %fs:2(%edi)
-		addl	$3, %edi
-		subl	$3, %ecx
-		jnz	1b
-		popl	%ecx
-		addl	%ebx, %edi
-		decl	%edx
-		jnz	0b
-		popl	%edi
-		popl	%esi
-		popl	%ebx
-		ret
-
-/* transform BGRA to B5G6R5 */
-		.p2align 5,,31
-		.global	_vesa_l_dump_32_to_16
-_vesa_l_dump_32_to_16:
-		pushl	%ebp
-		pushl	%ebx
-		pushl	%esi
-		pushl	%edi
-		movl	_vl_video_selector, %fs
-		movl	_vl_current_draw_buffer, %esi
-		movl	_vl_current_offset, %edi
-		movl	_vl_current_stride, %ecx
-		movl	_vl_current_height, %edx
-		movl	_vl_current_delta, %ebx
-		.balign	4
-	0:
-		pushl	%ecx
-	1:
-		movl	(%esi), %eax
-		addl	$4, %esi
-		CVT_32_TO_16(a, ebp)
-		movw	%ax, %fs:(%edi)
-		addl	$2, %edi
-		subl	$2, %ecx
-		jnz	1b
-		popl	%ecx
-		addl	%ebx, %edi
-		decl	%edx
-		jnz	0b
-		popl	%edi
-		popl	%esi
-		popl	%ebx
-		popl	%ebp
-		ret
-
-/* transform BGRA to B5G5R5 */
-		.p2align 5,,31
-		.global	_vesa_l_dump_32_to_15
-_vesa_l_dump_32_to_15:
-		pushl	%ebp
-		pushl	%ebx
-		pushl	%esi
-		pushl	%edi
-		movl	_vl_video_selector, %fs
-		movl	_vl_current_draw_buffer, %esi
-		movl	_vl_current_offset, %edi
-		movl	_vl_current_stride, %ecx
-		movl	_vl_current_height, %edx
-		movl	_vl_current_delta, %ebx
-		.balign	4
-	0:
-		pushl	%ecx
-	1:
-		movl	(%esi), %eax
-		addl	$4, %esi
-		CVT_32_TO_15(a, ebp)
-		movw	%ax, %fs:(%edi)
-		addl	$2, %edi
-		subl	$2, %ecx
-		jnz	1b
-		popl	%ecx
-		addl	%ebx, %edi
-		decl	%edx
-		jnz	0b
-		popl	%edi
-		popl	%esi
-		popl	%ebx
-		popl	%ebp
-		ret
-
-/* transform BGRA to fake8 */
-		.p2align 5,,31
-		.global	_vesa_l_dump_32_to_8
-_vesa_l_dump_32_to_8:
-		pushl	%ebp
-		pushl	%ebx
-		pushl	%esi
-		pushl	%edi
-		movl	_vl_video_selector, %fs
-		movl	_vl_current_draw_buffer, %esi
-		movl	_vl_current_offset, %edi
-		movl	_vl_current_stride, %ecx
-		movl	_vl_current_height, %edx
-		movl	_vl_current_delta, %ebx
-		.balign	4
-	0:
-		pushl	%edx
-		pushl	%ecx
-		pushl	%ebx
-	1:
-		movl	(%esi), %eax
-		addl	$4, %esi
-#if 1
-		xorl	%ebx, %ebx
-		movl	%eax, %edx
-		movb	%ah, %bl
-		shrl	$16, %edx
-		andl	$0xFF, %edx
-		andl	$0xFF, %eax
-
-		movb	_array_b(%eax), %al
-		movb	_array_r(%edx), %dl
-		movb	_array_g(%ebx), %bl
-
-		imull	$36, %eax
-		imull	$6, %ebx
-		addl	%edx, %eax
-		addl	%ebx, %eax
-#endif
-		movb	%al, %fs:(%edi)
-		incl	%edi
-		decl	%ecx
-		jnz	1b
-		popl	%ebx
-		popl	%ecx
-		popl	%edx
-		addl	%ebx, %edi
-		decl	%edx
-		jnz	0b
-		popl	%edi
-		popl	%esi
-		popl	%ebx
-		popl	%ebp
-		ret
-
-/* transform BGR to BGRx */
-		.p2align 5,,31
-		.global	_vesa_l_dump_24_to_32
-_vesa_l_dump_24_to_32:
-		pushl	%ebx
-		pushl	%esi
-		pushl	%edi
-		movl	_vl_video_selector, %fs
-		movl	_vl_current_draw_buffer, %esi
-		movl	_vl_current_offset, %edi
-		movl	_vl_current_stride, %ecx
-		movl	_vl_current_height, %edx
-		movl	_vl_current_delta, %ebx
-		.balign	4
-	0:
-		pushl	%ecx
-	1:
-		movl	(%esi), %eax
-		addl	$3, %esi
-		movl	%eax, %fs:(%edi)
-		addl	$4, %edi
-		subl	$4, %ecx
-		jnz	1b
-		popl	%ecx
-		addl	%ebx, %edi
-		decl	%edx
-		jnz	0b
-		popl	%edi
-		popl	%esi
-		popl	%ebx
-		ret
-
-/* transform BGR to fake8 */
-		.p2align 5,,31
-		.global	_vesa_l_dump_24_to_8
-_vesa_l_dump_24_to_8:
-		pushl	%ebp
-		pushl	%ebx
-		pushl	%esi
-		pushl	%edi
-		movl	_vl_video_selector, %fs
-		movl	_vl_current_draw_buffer, %esi
-		movl	_vl_current_offset, %edi
-		movl	_vl_current_stride, %ecx
-		movl	_vl_current_height, %edx
-		movl	_vl_current_delta, %ebx
-		.balign	4
-	0:
-		pushl	%edx
-		pushl	%ecx
-		pushl	%ebx
-	1:
-		movl	(%esi), %eax
-		addl	$3, %esi
-#if 1
-		xorl	%ebx, %ebx
-		movl	%eax, %edx
-		movb	%ah, %bl
-		shrl	$16, %edx
-		andl	$0xFF, %edx
-		andl	$0xFF, %eax
-
-		movb	_array_b(%eax), %al
-		movb	_array_r(%edx), %dl
-		movb	_array_g(%ebx), %bl
-
-		imull	$36, %eax
-		imull	$6, %ebx
-		addl	%edx, %eax
-		addl	%ebx, %eax
-#endif
-		movb	%al, %fs:(%edi)
-		incl	%edi
-		decl	%ecx
-		jnz	1b
-		popl	%ebx
-		popl	%ecx
-		popl	%edx
-		addl	%ebx, %edi
-		decl	%edx
-		jnz	0b
-		popl	%edi
-		popl	%esi
-		popl	%ebx
-		popl	%ebp
-		ret
-
-/* transform B5G6R5 to B5G5R5 */
-		.p2align 5,,31
-		.global	_vesa_l_dump_16_to_15
-_vesa_l_dump_16_to_15:
-		pushl	%ebp
-		pushl	%ebx
-		pushl	%esi
-		pushl	%edi
-		movl	_vl_video_selector, %fs
-		movl	_vl_current_draw_buffer, %esi
-		movl	_vl_current_offset, %edi
-		movl	_vl_current_stride, %ecx
-		movl	_vl_current_height, %edx
-		movl	_vl_current_delta, %ebx
-		.balign	4
-	0:
-		pushl	%ecx
-	1:
-		movl	(%esi), %eax
-		addl	$4, %esi
-		CVT_16_TO_15(eax, ebp)
-		movl	%eax, %fs:(%edi)
-		addl	$4, %edi
-		subl	$4, %ecx
-		jnz	1b
-		popl	%ecx
-		addl	%ebx, %edi
-		decl	%edx
-		jnz	0b
-		popl	%edi
-		popl	%esi
-		popl	%ebx
-		popl	%ebp
-		ret
-
-/* transform B5G6R5 to fake8 */
-		.p2align 5,,31
-		.global	_vesa_l_dump_16_to_8
-_vesa_l_dump_16_to_8:
-		pushl	%ebp
-		pushl	%ebx
-		pushl	%esi
-		pushl	%edi
-		movl	_vl_video_selector, %fs
-		movl	_vl_current_draw_buffer, %esi
-		movl	_vl_current_offset, %edi
-		movl	_vl_current_stride, %ecx
-		movl	_vl_current_height, %edx
-		movl	_vl_current_delta, %ebx
-		.balign	4
-	0:
-		pushl	%ecx
-		pushl	%ebx
-	1:
-		movl	(%esi), %eax
-		addl	$4, %esi
-#if 1
-		movl	%eax, %ebx
-		andl	$0xFFFF, %eax
-		shrl	$16, %ebx
-		movb	_tab_16_8(%eax), %al
-		movb	_tab_16_8(%ebx), %ah
-#endif
-		movw	%ax, %fs:(%edi)
-		addl	$2, %edi
-		subl	$2, %ecx
-		jnz	1b
-		popl	%ebx
-		popl	%ecx
-		addl	%ebx, %edi
-		decl	%edx
-		jnz	0b
-		popl	%edi
-		popl	%esi
-		popl	%ebx
-		popl	%ebp
-		ret
-
-
-
-		.p2align 5,,31
-		.global	_vesa_b_dump_32_to_24
-_vesa_b_dump_32_to_24:
-		pushl	%ebx
-		pushl	%esi
-		pushl	%edi
-		pushl	%ebp
-		movl	_vl_video_selector, %fs
-		movl	_vl_current_draw_buffer, %esi
-		movl	_vl_current_offset, %edi
-		movl	_vesa_gran_shift, %ecx
-		movl	_vesa_gran_mask, %ebp
-		movl	%edi, %edx
-		xorl	%ebx, %ebx
-		andl	%ebp, %edi
-		shrl	%cl, %edx
-		incl	%ebp
-		call	*_vesa_swbank
-		movl	_vl_current_stride, %ecx
-		movl	_vl_current_height, %eax
-		movl	$0x00FFFFFF, %ebx
-		.balign	4
-	0:
-		pushl	%eax
-		pushl	%ecx
-		.balign	4
-	1:
-		cmpl	%ebp, %edi
-		jb	2f
-		pushl	%ebx
-		incl	%edx
-		xorl	%ebx, %ebx
-		call	*_vesa_swbank
-		popl	%ebx
-		subl	%ebp, %edi
-		.balign	4
-	2:
-		movb	(%esi), %al	/* XXX too many accesses */
-		incl	%esi
-		rorl	$8, %ebx
-		jnc	2b
-		movb	%al, %fs:(%edi)
-		incl	%edi
-		decl	%ecx
-		jnz	1b
-		popl	%ecx
-		popl	%eax
-		addl	_vl_current_delta, %edi
-		decl	%eax
-		jnz	0b
-		popl	%ebp
-		popl	%edi
-		popl	%esi
-		popl	%ebx
-		ret
-
-		.p2align 5,,31
-		.global	_vesa_b_dump_32_to_16
-_vesa_b_dump_32_to_16:
-		pushl	%ebx
-		pushl	%esi
-		pushl	%edi
-		pushl	%ebp
-		movl	_vl_video_selector, %fs
-		movl	_vl_current_draw_buffer, %esi
-		movl	_vl_current_offset, %edi
-		movl	_vesa_gran_shift, %ecx
-		movl	_vesa_gran_mask, %ebp
-		movl	%edi, %edx
-		xorl	%ebx, %ebx
-		andl	%ebp, %edi
-		shrl	%cl, %edx
-		incl	%ebp
-		call	*_vesa_swbank
-		movl	_vl_current_stride, %ecx
-		movl	_vl_current_height, %eax
-		.balign	4
-	0:
-		pushl	%eax
-		pushl	%ecx
-		.balign	4
-	1:
-		cmpl	%ebp, %edi
-		jb	2f
-		incl	%edx
-		xorl	%ebx, %ebx
-		call	*_vesa_swbank
-		subl	%ebp, %edi
-		.balign	4
-	2:
-		movl	(%esi), %eax
-		addl	$4, %esi
-		CVT_32_TO_16(a, ebx)
-		movw	%ax, %fs:(%edi)
-		addl	$2, %edi
-		subl	$2, %ecx
-		jnz	1b
-		popl	%ecx
-		popl	%eax
-		addl	_vl_current_delta, %edi
-		decl	%eax
-		jnz	0b
-		popl	%ebp
-		popl	%edi
-		popl	%esi
-		popl	%ebx
-		ret
-
-		.p2align 5,,31
-		.global	_vesa_b_dump_32_to_15
-_vesa_b_dump_32_to_15:
-		pushl	%ebx
-		pushl	%esi
-		pushl	%edi
-		pushl	%ebp
-		movl	_vl_video_selector, %fs
-		movl	_vl_current_draw_buffer, %esi
-		movl	_vl_current_offset, %edi
-		movl	_vesa_gran_shift, %ecx
-		movl	_vesa_gran_mask, %ebp
-		movl	%edi, %edx
-		xorl	%ebx, %ebx
-		andl	%ebp, %edi
-		shrl	%cl, %edx
-		incl	%ebp
-		call	*_vesa_swbank
-		movl	_vl_current_stride, %ecx
-		movl	_vl_current_height, %eax
-		.balign	4
-	0:
-		pushl	%eax
-		pushl	%ecx
-		.balign	4
-	1:
-		cmpl	%ebp, %edi
-		jb	2f
-		incl	%edx
-		xorl	%ebx, %ebx
-		call	*_vesa_swbank
-		subl	%ebp, %edi
-		.balign	4
-	2:
-		movl	(%esi), %eax
-		addl	$4, %esi
-		CVT_32_TO_15(a, ebx)
-		movw	%ax, %fs:(%edi)
-		addl	$2, %edi
-		subl	$2, %ecx
-		jnz	1b
-		popl	%ecx
-		popl	%eax
-		addl	_vl_current_delta, %edi
-		decl	%eax
-		jnz	0b
-		popl	%ebp
-		popl	%edi
-		popl	%esi
-		popl	%ebx
-		ret
-
-		.p2align 5,,31
-		.global	_vesa_b_dump_32_to_8
-_vesa_b_dump_32_to_8:
-		pushl	%ebx
-		pushl	%esi
-		pushl	%edi
-		pushl	%ebp
-		movl	_vl_video_selector, %fs
-		movl	_vl_current_draw_buffer, %esi
-		movl	_vl_current_offset, %edi
-		movl	_vesa_gran_shift, %ecx
-		movl	_vesa_gran_mask, %ebp
-		movl	%edi, %edx
-		xorl	%ebx, %ebx
-		andl	%ebp, %edi
-		shrl	%cl, %edx
-		incl	%ebp
-		call	*_vesa_swbank
-		movl	_vl_current_stride, %ecx
-		movl	_vl_current_height, %eax
-		.balign	4
-	0:
-		pushl	%eax
-		pushl	%ecx
-		pushl	%edx
-		.balign	4
-	1:
-		cmpl	%ebp, %edi
-		jb	2f
-		popl	%edx
-		incl	%edx
-		pushl	%edx
-		xorl	%ebx, %ebx
-		call	*_vesa_swbank
-		subl	%ebp, %edi
-		.balign	4
-	2:
-		movl	(%esi), %eax
-		addl	$4, %esi
-#if 1
-		xorl	%ebx, %ebx
-		movl	%eax, %edx
-		movb	%ah, %bl
-		shrl	$16, %edx
-		andl	$0xFF, %edx
-		andl	$0xFF, %eax
-
-		movb	_array_b(%eax), %al
-		movb	_array_r(%edx), %dl
-		movb	_array_g(%ebx), %bl
-
-		imull	$36, %eax
-		imull	$6, %ebx
-		addl	%edx, %eax
-		addl	%ebx, %eax
-#endif
-		movb	%al, %fs:(%edi)
-		incl	%edi
-		decl	%ecx
-		jnz	1b
-		popl	%edx
-		popl	%ecx
-		popl	%eax
-		addl	_vl_current_delta, %edi
-		decl	%eax
-		jnz	0b
-		popl	%ebp
-		popl	%edi
-		popl	%esi
-		popl	%ebx
-		ret
-
-		.p2align 5,,31
-		.global	_vesa_b_dump_24_to_32
-_vesa_b_dump_24_to_32:
-		pushl	%ebx
-		pushl	%esi
-		pushl	%edi
-		pushl	%ebp
-		movl	_vl_video_selector, %fs
-		movl	_vl_current_draw_buffer, %esi
-		movl	_vl_current_offset, %edi
-		movl	_vesa_gran_shift, %ecx
-		movl	_vesa_gran_mask, %ebp
-		movl	%edi, %edx
-		xorl	%ebx, %ebx
-		andl	%ebp, %edi
-		shrl	%cl, %edx
-		incl	%ebp
-		call	*_vesa_swbank
-		movl	_vl_current_stride, %ecx
-		movl	_vl_current_height, %eax
-		movl	_vl_current_delta, %ebx
-		.balign	4
-	0:
-		pushl	%eax
-		pushl	%ecx
-		.balign	4
-	1:
-		cmpl	%ebp, %edi
-		jb	2f
-		pushl	%ebx
-		incl	%edx
-		xorl	%ebx, %ebx
-		call	*_vesa_swbank
-		popl	%ebx
-		subl	%ebp, %edi
-		.balign	4
-	2:
-		movl	(%esi), %eax
-		addl	$3, %esi
-		movl	%eax, %fs:(%edi)
-		addl	$4, %edi
-		subl	$4, %ecx
-		jnz	1b
-		popl	%ecx
-		popl	%eax
-		addl	%ebx, %edi
-		decl	%eax
-		jnz	0b
-		popl	%ebp
-		popl	%edi
-		popl	%esi
-		popl	%ebx
-		ret
-
-		.p2align 5,,31
-		.global	_vesa_b_dump_24_to_8
-_vesa_b_dump_24_to_8:
-		pushl	%ebx
-		pushl	%esi
-		pushl	%edi
-		pushl	%ebp
-		movl	_vl_video_selector, %fs
-		movl	_vl_current_draw_buffer, %esi
-		movl	_vl_current_offset, %edi
-		movl	_vesa_gran_shift, %ecx
-		movl	_vesa_gran_mask, %ebp
-		movl	%edi, %edx
-		xorl	%ebx, %ebx
-		andl	%ebp, %edi
-		shrl	%cl, %edx
-		incl	%ebp
-		call	*_vesa_swbank
-		movl	_vl_current_stride, %ecx
-		movl	_vl_current_height, %eax
-		.balign	4
-	0:
-		pushl	%eax
-		pushl	%ecx
-		pushl	%edx
-		.balign	4
-	1:
-		cmpl	%ebp, %edi
-		jb	2f
-		popl	%edx
-		incl	%edx
-		pushl	%edx
-		xorl	%ebx, %ebx
-		call	*_vesa_swbank
-		subl	%ebp, %edi
-		.balign	4
-	2:
-		movl	(%esi), %eax
-		addl	$3, %esi
-#if 1
-		xorl	%ebx, %ebx
-		movl	%eax, %edx
-		movb	%ah, %bl
-		shrl	$16, %edx
-		andl	$0xFF, %edx
-		andl	$0xFF, %eax
-
-		movb	_array_b(%eax), %al
-		movb	_array_r(%edx), %dl
-		movb	_array_g(%ebx), %bl
-
-		imull	$36, %eax
-		imull	$6, %ebx
-		addl	%edx, %eax
-		addl	%ebx, %eax
-#endif
-		movb	%al, %fs:(%edi)
-		incl	%edi
-		decl	%ecx
-		jnz	1b
-		popl	%edx
-		popl	%ecx
-		popl	%eax
-		addl	_vl_current_delta, %edi
-		decl	%eax
-		jnz	0b
-		popl	%ebp
-		popl	%edi
-		popl	%esi
-		popl	%ebx
-		ret
-
-		.p2align 5,,31
-		.global	_vesa_b_dump_16_to_15
-_vesa_b_dump_16_to_15:
-		pushl	%ebx
-		pushl	%esi
-		pushl	%edi
-		pushl	%ebp
-		movl	_vl_video_selector, %fs
-		movl	_vl_current_draw_buffer, %esi
-		movl	_vl_current_offset, %edi
-		movl	_vesa_gran_shift, %ecx
-		movl	_vesa_gran_mask, %ebp
-		movl	%edi, %edx
-		xorl	%ebx, %ebx
-		andl	%ebp, %edi
-		shrl	%cl, %edx
-		incl	%ebp
-		call	*_vesa_swbank
-		movl	_vl_current_stride, %ecx
-		movl	_vl_current_height, %eax
-		.balign	4
-	0:
-		pushl	%eax
-		pushl	%ecx
-		.balign	4
-	1:
-		cmpl	%ebp, %edi
-		jb	2f
-		incl	%edx
-		xorl	%ebx, %ebx
-		call	*_vesa_swbank
-		subl	%ebp, %edi
-		.balign	4
-	2:
-		movw	(%esi), %ax
-		addl	$2, %esi
-		CVT_16_TO_15(eax, ebx)
-		movw	%ax, %fs:(%edi)
-		addl	$2, %edi
-		subl	$2, %ecx
-		jnz	1b
-		popl	%ecx
-		popl	%eax
-		addl	_vl_current_delta, %edi
-		decl	%eax
-		jnz	0b
-		popl	%ebp
-		popl	%edi
-		popl	%esi
-		popl	%ebx
-		ret
-
-		.p2align 5,,31
-		.global	_vesa_b_dump_16_to_8
-_vesa_b_dump_16_to_8:
-		pushl	%ebx
-		pushl	%esi
-		pushl	%edi
-		pushl	%ebp
-		movl	_vl_video_selector, %fs
-		movl	_vl_current_draw_buffer, %esi
-		movl	_vl_current_offset, %edi
-		movl	_vesa_gran_shift, %ecx
-		movl	_vesa_gran_mask, %ebp
-		movl	%edi, %edx
-		xorl	%ebx, %ebx
-		andl	%ebp, %edi
-		shrl	%cl, %edx
-		incl	%ebp
-		call	*_vesa_swbank
-		movl	_vl_current_stride, %ecx
-		movl	_vl_current_height, %eax
-		movl	_vl_current_delta, %ebx
-		.balign	4
-	0:
-		pushl	%eax
-		pushl	%ecx
-		.balign	4
-	1:
-		cmpl	%ebp, %edi
-		jb	2f
-		pushl	%ebx
-		incl	%edx
-		xorl	%ebx, %ebx
-		call	*_vesa_swbank
-		popl	%ebx
-		subl	%ebp, %edi
-		.balign	4
-	2:
-		movw	(%esi), %ax
-		addl	$2, %esi
-#if 1
-		andl	$0xFFFF, %eax
-		movb	_tab_16_8(%eax), %al
-#endif
-		movb	%al, %fs:(%edi)
-		addl	$1, %edi
-		subl	$1, %ecx
-		jnz	1b
-		popl	%ecx
-		popl	%eax
-		addl	%ebx, %edi
-		decl	%eax
-		jnz	0b
-		popl	%ebp
-		popl	%edi
-		popl	%esi
-		popl	%ebx
-		ret
diff --git a/src/mesa/drivers/dos/dmesa.c b/src/mesa/drivers/dos/dmesa.c
deleted file mode 100644
index 003c06a8ff..0000000000
--- a/src/mesa/drivers/dos/dmesa.c
+++ /dev/null
@@ -1,359 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  6.3
- * 
- * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * DOS/DJGPP device driver for Mesa
- *
- *  Author: Daniel Borca
- *  Email : dborca@users.sourceforge.net
- *  Web   : http://www.geocities.com/dborca
- */
-
-
-#include "main/context.h"
-#include "main/imports.h"
-#include "main/mtypes.h"
-
-#include "video.h"
-
-#include "GL/osmesa.h"
-#include "GL/dmesa.h"
-
-
-/*
- * This has nothing to do with Mesa Visual structure.
- * We keep this one around for backwards compatibility,
- * and to store video mode data for DMesaCreateContext.
- */
-struct dmesa_visual {
-    GLenum format;		/* OSMesa framebuffer format */
-    GLint depthBits;
-    GLint stencilBits;
-    GLint accumBits;
-};
-
-/*
- * This has nothing to do with Mesa Buffer structure.
- * We keep this one around for backwards compatibility,
- * and to store various data.
- */
-struct dmesa_buffer {
-    int xpos, ypos;              /* position */
-    int width, height;           /* size in pixels */
-    GLenum type;
-    void *the_window;            /* your window handle, etc */
-};
-
-/*
- * This has nothing to do with Mesa Context structure.
- * We keep this one around for backwards compatibility,
- * and to store real off-screen context.
- */
-struct dmesa_context {
-    OSMesaContext osmesa;
-    DMesaBuffer buffer;
-};
-
-
-static DMesaContext ctx;
-
-
-/****************************************************************************
- * DMesa Public API Functions
- ***************************************************************************/
-
-/*
- * The exact arguments to this function will depend on your window system
- */
-DMesaVisual
-DMesaCreateVisual (GLint width,
-                   GLint height,
-                   GLint colDepth,
-                   GLint refresh,
-                   GLboolean dbFlag,
-                   GLboolean rgbFlag,
-                   GLint alphaSize,
-                   GLint depthSize,
-                   GLint stencilSize,
-                   GLint accumSize)
-{
-    DMesaVisual visual;
-    GLenum format;
-    int fbbits;
-
-    if (dbFlag) {
-	return NULL;
-    }
-
-    if (!rgbFlag) {
-	format = OSMESA_COLOR_INDEX;
-	fbbits = 8;
-    } else if (alphaSize) {
-	format = OSMESA_BGRA;
-	fbbits = 32;
-    } else if (colDepth == 15 || colDepth == 16) {
-	format = OSMESA_RGB_565;
-	fbbits = 16;
-    } else {
-	format = OSMESA_BGR;
-	fbbits = 24;
-    }
-
-    if ((visual = (DMesaVisual)CALLOC_STRUCT(dmesa_visual)) == NULL) {
-	return NULL;
-    }
-
-    if (vl_video_init(width, height, colDepth, rgbFlag, refresh, fbbits) <= 0) {
-	FREE(visual);
-	return NULL;
-    }
-
-    visual->format = format;
-    visual->depthBits = depthSize;
-    visual->stencilBits = stencilSize;
-    visual->accumBits = accumSize;
-    return visual;
-}
-
-
-void
-DMesaDestroyVisual (DMesaVisual visual)
-{
-   vl_video_exit();
-   FREE(visual);
-}
-
-
-DMesaBuffer
-DMesaCreateBuffer (DMesaVisual visual,
-                   GLint xpos, GLint ypos,
-                   GLint width, GLint height)
-{
-    DMesaBuffer buffer;
-    GLenum type;
-    int bytesPerPixel;
-
-    switch (visual->format) {
-	case OSMESA_COLOR_INDEX:
-	    bytesPerPixel = 1;
-	    type = CHAN_TYPE;
-	    break;
-	case OSMESA_RGB_565:
-	    bytesPerPixel = 2;
-	    type = GL_UNSIGNED_SHORT_5_6_5;
-	    break;
-	case OSMESA_BGR:
-	    bytesPerPixel = 3;
-	    type = CHAN_TYPE;
-	    break;
-	default:
-	    bytesPerPixel = 4;
-	    type = CHAN_TYPE;
-    }
-
-    if ((buffer = (DMesaBuffer)CALLOC_STRUCT(dmesa_buffer)) != NULL) {
-	buffer->xpos = xpos;
-	buffer->ypos = ypos;
-	buffer->width = width;
-	buffer->height = height;
-	buffer->type = type;
-	buffer->the_window = MALLOC(width * height * bytesPerPixel + 1);
-	if (buffer->the_window == NULL) {
-	    FREE(buffer);
-	    buffer = NULL;
-	}
-    }
-
-    return buffer;
-}
-
-
-void
-DMesaDestroyBuffer (DMesaBuffer buffer)
-{
-    FREE(buffer->the_window);
-    FREE(buffer);
-}
-
-
-DMesaContext
-DMesaCreateContext (DMesaVisual visual, DMesaContext share)
-{
-    DMesaContext dmesa;
-    if ((dmesa = (DMesaContext)CALLOC_STRUCT(dmesa_context)) != NULL) {
-	dmesa->osmesa = OSMesaCreateContextExt(
-				visual->format,
-				visual->depthBits,
-				visual->stencilBits,
-				visual->accumBits,
-				(share != NULL) ? share->osmesa : NULL);
-	if (dmesa->osmesa == NULL) {
-	    FREE(dmesa);
-	    dmesa = NULL;
-	}
-    }
-    return dmesa;
-}
-
-
-void
-DMesaDestroyContext (DMesaContext dmesa)
-{
-    OSMesaDestroyContext(dmesa->osmesa);
-    FREE(dmesa);
-}
-
-
-GLboolean
-DMesaMoveBuffer (GLint xpos, GLint ypos)
-{
-    const DMesaContext dmesa = DMesaGetCurrentContext();
-    DMesaBuffer b = dmesa->buffer;
-
-    if (vl_sync_buffer(&b->the_window, xpos, ypos, b->width, b->height) == 0) {
-	b->xpos = xpos;
-	b->ypos = ypos;
-	return GL_TRUE;
-    }
-
-    return GL_FALSE;
-}
-
-
-GLboolean
-DMesaResizeBuffer (GLint width, GLint height)
-{
-    const DMesaContext dmesa = DMesaGetCurrentContext();
-    DMesaBuffer b = dmesa->buffer;
-
-    if (vl_sync_buffer(&b->the_window, b->xpos, b->ypos, width, height) == 0) {
-	b->width = width;
-	b->height = height;
-	return GL_TRUE;
-    }
-
-    return GL_FALSE;
-}
-
-
-GLboolean
-DMesaMakeCurrent (DMesaContext dmesa, DMesaBuffer buffer)
-{
-    if (dmesa == NULL || buffer == NULL) {
-	ctx = NULL;
-	return GL_TRUE;
-    }
-    if (OSMesaMakeCurrent(dmesa->osmesa, buffer->the_window,
-			  buffer->type,
-			  buffer->width, buffer->height) &&
-	vl_sync_buffer(&buffer->the_window, buffer->xpos, buffer->ypos, buffer->width, buffer->height) == 0) {
-	OSMesaPixelStore(OSMESA_Y_UP, GL_FALSE);
-	dmesa->buffer = buffer;
-	ctx = dmesa;
-	return GL_TRUE;
-    }
-    return GL_FALSE;
-}
-
-
-void
-DMesaSwapBuffers (DMesaBuffer buffer)
-{
-    /* copy/swap back buffer to front if applicable */
-    GET_CURRENT_CONTEXT(ctx);
-    _mesa_notifySwapBuffers(ctx);
-    vl_flip();
-    (void)buffer;
-}
-
-
-void
-DMesaSetCI (int ndx, GLfloat red, GLfloat green, GLfloat blue)
-{
-    vl_setCI(ndx, red, green, blue);
-}
-
-
-DMesaContext
-DMesaGetCurrentContext (void)
-{
-   return ctx;
-}
-
-
-DMesaBuffer
-DMesaGetCurrentBuffer (void)
-{
-    const DMesaContext dmesa = DMesaGetCurrentContext();
-
-    if (dmesa != NULL) {
-	return dmesa->buffer;
-    }
-
-    return NULL;
-}
-
-
-DMesaProc
-DMesaGetProcAddress (const char *name)
-{
-   DMesaProc p = (DMesaProc)_glapi_get_proc_address(name);
-
-   /* TODO: handle DMesa* namespace
-   if (p == NULL) {
-   }
-   */
-
-   return p;
-}
-
-
-int
-DMesaGetIntegerv (GLenum pname, GLint *params)
-{
-    switch (pname) {
-	case DMESA_GET_SCREEN_SIZE:
-	    vl_get(VL_GET_SCREEN_SIZE, params);
-	    break;
-	case DMESA_GET_DRIVER_CAPS:
-	    params[0] = 0;
-	    break;
-	case DMESA_GET_VIDEO_MODES:
-	    return vl_get(VL_GET_VIDEO_MODES, params);
-	case DMESA_GET_BUFFER_ADDR: {
-	    const DMesaContext dmesa = DMesaGetCurrentContext();
-	    if (dmesa != NULL) {
-		DMesaBuffer b = dmesa->buffer;
-		if (b != NULL) {
-		    params[0] = (GLint)b->the_window;
-		}
-	    }
-	    break;
-	}
-	default:
-	    return -1;
-    }
-
-    return 0;
-}
diff --git a/src/mesa/drivers/dos/dpmi.c b/src/mesa/drivers/dos/dpmi.c
deleted file mode 100644
index bd33b8856c..0000000000
--- a/src/mesa/drivers/dos/dpmi.c
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  4.0
- * 
- * Copyright (C) 1999  Brian Paul   All Rights Reserved.
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * DOS/DJGPP device driver for Mesa
- *
- *  Author: Daniel Borca
- *  Email : dborca@yahoo.com
- *  Web   : http://www.geocities.com/dborca
- */
-
-
-#include <dpmi.h>
-
-#include "internal.h"
-
-
-#ifndef MAX
-#define MAX(x, y) (((x) < (y)) ? (y) : (x))
-#endif
-
-
-/* _create_linear_mapping:
- *  Maps a physical address range into linear memory.
- */
-int
-_create_linear_mapping (unsigned long *linear, unsigned long physaddr, int size)
-{
-   __dpmi_meminfo meminfo;
-
-   if (physaddr >= 0x100000) {
-      /* map into linear memory */
-      meminfo.address = physaddr;
-      meminfo.size = size;
-      if (__dpmi_physical_address_mapping(&meminfo) != 0) {
-         return -1;
-      }
-
-      *linear = meminfo.address;
-   } else {
-      /* exploit 1 -> 1 physical to linear mapping in low megabyte */
-      *linear = physaddr;
-   }
-
-   return 0;
-}
-
-
-/* _remove_linear_mapping:
- *  Frees the DPMI resources being used to map a linear address range.
- */
-void
-_remove_linear_mapping (unsigned long *linear)
-{
-   __dpmi_meminfo meminfo;
-
-   if (*linear) {
-      if (*linear >= 0x100000) {
-         meminfo.address = *linear;
-         __dpmi_free_physical_address_mapping(&meminfo);
-      }
-
-      *linear = 0;
-   }
-}
-
-
-/* _create_selector:
- *  Allocates a selector to access a region of linear memory.
- */
-int
-_create_selector (int *segment, unsigned long base, int size)
-{
-   /* allocate an ldt descriptor */
-   if ((*segment=__dpmi_allocate_ldt_descriptors(1)) < 0) {
-      *segment = 0;
-      return -1;
-   }
-
-   /* create the linear mapping */
-   if (_create_linear_mapping(&base, base, size)) {
-      __dpmi_free_ldt_descriptor(*segment);
-      *segment = 0;
-      return -1;
-   }
-
-   /* set the descriptor base and limit */
-   __dpmi_set_segment_base_address(*segment, base);
-   __dpmi_set_segment_limit(*segment, MAX(size-1, 0xFFFF));
-
-   return 0;
-}
-
-
-/* _remove_selector:
- *  Frees a DPMI segment selector.
- */
-void
-_remove_selector (int *segment)
-{
-   if (*segment) {
-      unsigned long base;
-      __dpmi_get_segment_base_address(*segment, &base);
-      _remove_linear_mapping(&base);
-      __dpmi_free_ldt_descriptor(*segment);
-      *segment = 0;
-   }
-}
-
-
-/* Desc: retrieve CPU MMX capability
- *
- * In  : -
- * Out : FALSE if CPU cannot do MMX
- *
- * Note: -
- */
-int
-_can_mmx (void)
-{
-#ifdef USE_MMX_ASM
-   int x86_cpu_features = 0;
-   __asm("\n\
-		pushfl			\n\
-		popl	%%eax		\n\
-		movl	%%eax, %%ecx	\n\
-		xorl	$0x200000, %%eax\n\
-		pushl	%%eax		\n\
-		popfl			\n\
-		pushfl			\n\
-		popl	%%eax		\n\
-		pushl	%%ecx		\n\
-		popfl			\n\
-		xorl	%%ecx, %%eax	\n\
-		jz 0f			\n\
-		movl	$1, %%eax	\n\
-		cpuid			\n\
-		movl	%%edx, %0	\n\
-	0:				\n\
-   ":"=g"(x86_cpu_features)::"%eax", "%ebx", "%ecx", "%edx");
-   return (x86_cpu_features & 0x00800000);
-#else
-   return 0;
-#endif
-}
diff --git a/src/mesa/drivers/dos/internal.h b/src/mesa/drivers/dos/internal.h
deleted file mode 100644
index 0fa7c77222..0000000000
--- a/src/mesa/drivers/dos/internal.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  4.0
- * 
- * Copyright (C) 1999  Brian Paul   All Rights Reserved.
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * DOS/DJGPP device driver for Mesa
- *
- *  Author: Daniel Borca
- *  Email : dborca@users.sourceforge.net
- *  Web   : http://www.geocities.com/dborca
- */
-
-
-#ifndef INTERNAL_H_included
-#define INTERNAL_H_included
-
-#include "../main/mtypes.h"
-
-
-/*
- * general purpose defines, etc.
- */
-#ifndef FALSE
-#define FALSE 0
-#define TRUE !FALSE
-#endif
-
-#define __PACKED__ __attribute__((packed))
-
-typedef unsigned char word8;
-typedef unsigned short word16;
-typedef unsigned long word32;
-
-#define _16_ *(word16 *)&
-#define _32_ *(word32 *)&
-
-typedef void (*BLTFUNC) (void);
-
-
-/*
- * video mode structure
- */
-typedef struct vl_mode {
-   int xres, yres;
-   int bpp;
-
-   int mode;
-   int scanlen;
-
-   int sel;
-   int gran;
-} vl_mode;
-
-
-/*
- * video driver structure
- */
-typedef struct {
-   vl_mode *(*init) (void);
-   int (*entermode) (vl_mode *p, int refresh, int fbbits);
-   void (*blit) (void);
-   void (*setCI_f) (int index, float red, float green, float blue);
-   void (*setCI_i) (int index, int red, int green, int blue);
-   int (*get) (int pname, int *params);
-   void (*restore) (void);
-   void (*fini) (void);
-} vl_driver;
-
-
-/*
- * memory mapping
- */
-int _create_linear_mapping (unsigned long *linear, unsigned long physaddr, int size);
-void _remove_linear_mapping (unsigned long *linear);
-int _create_selector (int *segment, unsigned long base, int size);
-void _remove_selector (int *segment);
-
-
-/*
- * system routines
- */
-int _can_mmx (void);
-
-
-#endif
diff --git a/src/mesa/drivers/dos/null.c b/src/mesa/drivers/dos/null.c
deleted file mode 100644
index 55846299fb..0000000000
--- a/src/mesa/drivers/dos/null.c
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  4.1
- * 
- * Copyright (C) 1999  Brian Paul   All Rights Reserved.
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * DOS/DJGPP device driver for Mesa
- *
- *  Author: Daniel Borca
- *  Email : dborca@users.sourceforge.net
- *  Web   : http://www.geocities.com/dborca
- */
-
-
-#include <stdlib.h>
-#include <sys/segments.h>
-
-#include "video.h"
-#include "null.h"
-
-
-static vl_mode *modes;
-
-#define null_color_precision 8
-
-
-static void
-null_blit_nop (void)
-{
-}
-
-
-/* Desc: Attempts to detect NUL, check video modes and create selectors.
- *
- * In  : -
- * Out : mode array
- *
- * Note: -
- */
-static vl_mode *
-null_init (void)
-{
-   static int m[][2] = {
-      {  320,  200 },
-      {  320,  240 },
-      {  400,  300 },
-      {  512,  384 },
-      {  640,  400 },
-      {  640,  480 },
-      {  800,  600 },
-      { 1024,  768 },
-      { 1280, 1024 },
-      { 1600, 1200 }
-   };
-   static int b[] = {
-      8,
-      15,
-      16,
-      24,
-      32
-   };
-   const unsigned int m_count = sizeof(m) / sizeof(m[0]);
-   const unsigned int b_count = sizeof(b) / sizeof(b[0]);
-
-   unsigned int i, j, k;
-
-   if (modes == NULL) {
-      modes = malloc(sizeof(vl_mode) * (1 + m_count * b_count));
-
-      if (modes != NULL) {
-         for (k = 0, i = 0; i < m_count; i++) {
-            for (j = 0; j < b_count; j++, k++) {
-               modes[k].xres    = m[i][0];
-               modes[k].yres    = m[i][1];
-               modes[k].bpp     = b[j];
-               modes[k].mode    = 0x4000;
-               modes[k].scanlen = m[i][0] * ((b[j] + 7) / 8);
-               modes[k].sel     = -1;
-               modes[k].gran    = -1;
-            }
-         }
-         modes[k].xres    = -1;
-         modes[k].yres    = -1;
-         modes[k].bpp     = -1;
-         modes[k].mode    = 0xffff;
-         modes[k].scanlen = -1;
-         modes[k].sel     = -1;
-         modes[k].gran    = -1;
-      }
-   }
-
-   return modes;
-}
-
-
-/* Desc: Frees all resources allocated by NUL init code.
- *
- * In  : -
- * Out : -
- *
- * Note: -
- */
-static void
-null_fini (void)
-{
-   if (modes != NULL) {
-      free(modes);
-      modes = NULL;
-   }
-}
-
-
-/* Desc: Attempts to enter specified video mode.
- *
- * In  : ptr to mode structure, refresh rate
- * Out : 0 if success
- *
- * Note: -
- */
-static int
-null_entermode (vl_mode *p, int refresh, int fbbits)
-{
-   NUL.blit = null_blit_nop;
-
-   return 0;
-
-   (void)(p && refresh && fbbits); /* silence compiler warning */
-}
-
-
-/* Desc: Restores to the mode prior to first call to null_entermode.
- *
- * In  : -
- * Out : -
- *
- * Note: -
- */
-static void
-null_restore (void)
-{
-}
-
-
-/* Desc: set one palette entry
- *
- * In  : color index, R, G, B
- * Out : -
- *
- * Note: uses integer values
- */
-static void
-null_setCI_i (int index, int red, int green, int blue)
-{
-   (void)(index && red && green && blue); /* silence compiler warning */
-}
-
-
-/* Desc: set one palette entry
- *
- * In  : color index, R, G, B
- * Out : -
- *
- * Note: uses normalized values
- */
-static void
-null_setCI_f (int index, float red, float green, float blue)
-{
-   float max = (1 << null_color_precision) - 1;
-
-   null_setCI_i(index, (int)(red * max), (int)(green * max), (int)(blue * max));
-}
-
-
-/* Desc: state retrieval
- *
- * In  : parameter name, ptr to storage
- * Out : 0 if request successfully processed
- *
- * Note: -
- */
-static int
-null_get (int pname, int *params)
-{
-   switch (pname) {
-      default:
-         params[0] = params[0]; /* silence compiler warning */
-         return -1;
-   }
-   return 0;
-}
-
-
-/*
- * the driver
- */
-vl_driver NUL = {
-   null_init,
-   null_entermode,
-   NULL,
-   null_setCI_f,
-   null_setCI_i,
-   null_get,
-   null_restore,
-   null_fini
-};
diff --git a/src/mesa/drivers/dos/null.h b/src/mesa/drivers/dos/null.h
deleted file mode 100644
index bbdc7966e0..0000000000
--- a/src/mesa/drivers/dos/null.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  4.0
- * 
- * Copyright (C) 1999  Brian Paul   All Rights Reserved.
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * DOS/DJGPP device driver for Mesa
- *
- *  Author: Daniel Borca
- *  Email : dborca@yahoo.com
- *  Web   : http://www.geocities.com/dborca
- */
-
-
-#ifndef NULL_H_included
-#define NULL_H_included
-
-#include "internal.h"
-
-extern vl_driver NUL;
-
-#endif
diff --git a/src/mesa/drivers/dos/vesa.c b/src/mesa/drivers/dos/vesa.c
deleted file mode 100644
index 3fdd3e25db..0000000000
--- a/src/mesa/drivers/dos/vesa.c
+++ /dev/null
@@ -1,719 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  4.1
- * 
- * Copyright (C) 1999  Brian Paul   All Rights Reserved.
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * DOS/DJGPP device driver for Mesa
- *
- *  Author: Daniel Borca
- *  Email : dborca@users.sourceforge.net
- *  Web   : http://www.geocities.com/dborca
- */
-
-
-#include <dpmi.h>
-#include <pc.h>
-#include <stdlib.h>
-#include <stubinfo.h>
-#include <sys/exceptn.h>
-#include <sys/segments.h>
-#include <sys/farptr.h>
-#include <sys/movedata.h>
-
-#include "video.h"
-#include "vesa.h"
-
-
-static vl_mode modes[128];
-
-static word16 vesa_ver;
-static int banked_selector, linear_selector;
-static int oldmode = -1;
-
-static int vesa_color_precision = 6;
-
-static word16 *vesa_pmcode;
-unsigned int vesa_gran_mask, vesa_gran_shift;
-
-
-/*
- * VESA info
- */
-#define V_SIGN     0
-#define V_MINOR    4
-#define V_MAJOR    5
-#define V_OEM_OFS  6
-#define V_OEM_SEG  8
-#define V_MODE_OFS 14
-#define V_MODE_SEG 16
-#define V_MEMORY   18
-
-/*
- * mode info
- */
-#define M_ATTR     0
-#define M_GRAN     4
-#define M_SCANLEN  16
-#define M_XRES     18
-#define M_YRES     20
-#define M_BPP      25
-#define M_RED      31
-#define M_GREEN    33
-#define M_BLUE     35
-#define M_PHYS_PTR 40
-
-/*
- * VESA 3.0 CRTC timings structure
- */
-typedef struct CRTCInfoBlock {
-    unsigned short HorizontalTotal;
-    unsigned short HorizontalSyncStart;
-    unsigned short HorizontalSyncEnd;
-    unsigned short VerticalTotal;
-    unsigned short VerticalSyncStart;
-    unsigned short VerticalSyncEnd;
-    unsigned char  Flags;
-    unsigned long  PixelClock;	/* units of Hz */
-    unsigned short RefreshRate;	/* units of 0.01 Hz */
-    unsigned char  reserved[40];
-} __PACKED__ CRTCInfoBlock;
-
-#define HNEG         (1 << 2)
-#define VNEG         (1 << 3)
-#define DOUBLESCAN   (1 << 0)
-
-
-/* Desc: Attempts to detect VESA, check video modes and create selectors.
- *
- * In  : -
- * Out : mode array
- *
- * Note: -
- */
-static vl_mode *
-vesa_init (void)
-{
-    __dpmi_regs r;
-    word16 *p;
-    vl_mode *q;
-    char vesa_info[512], tmp[512];
-    int maxsize = 0;
-    word32 linearfb = 0;
-
-    if (vesa_ver) {
-	return modes;
-    }
-
-    _farpokel(_stubinfo->ds_selector, 0, 0x32454256);
-    r.x.ax = 0x4f00;
-    r.x.di = 0;
-    r.x.es = _stubinfo->ds_segment;
-    __dpmi_int(0x10, &r);
-    movedata(_stubinfo->ds_selector, 0, _my_ds(), (unsigned)vesa_info, 512);
-    if ((r.x.ax != 0x004f) || ((_32_ vesa_info[V_SIGN]) != 0x41534556)) {
-	return NULL;
-    }
-
-    p = (word16 *)(((_16_ vesa_info[V_MODE_SEG]) << 4) + (_16_ vesa_info[V_MODE_OFS]));
-    q = modes;
-    do {
-	if ((q->mode = _farpeekw(__djgpp_dos_sel, (unsigned long)(p++))) == 0xffff) {
-	    break;
-	}
-
-	r.x.ax = 0x4f01;
-	r.x.cx = q->mode;
-	r.x.di = 512;
-	r.x.es = _stubinfo->ds_segment;
-	__dpmi_int(0x10, &r);
-	movedata(_stubinfo->ds_selector, 512, _my_ds(), (unsigned)tmp, 256);
-	switch (tmp[M_BPP]) {
-	    case 16:
-		q->bpp = tmp[M_RED] + tmp[M_GREEN] + tmp[M_BLUE];
-		break;
-	    case 8:
-	    case 15:
-	    case 24:
-	    case 32:
-		q->bpp = tmp[M_BPP];
-		break;
-	    default:
-		q->bpp = 0;
-	}
-	if ((r.x.ax == 0x004f) && ((tmp[M_ATTR] & 0x11) == 0x11) && q->bpp) {
-	    q->xres = _16_ tmp[M_XRES];
-	    q->yres = _16_ tmp[M_YRES];
-	    q->scanlen = _16_ tmp[M_SCANLEN];
-	    q->gran = (_16_ tmp[M_GRAN]) << 10;
-	    if (tmp[M_ATTR] & 0x80) {
-		vl_mode *q1 = q + 1;
-		*q1 = *q++;
-		linearfb = _32_ tmp[M_PHYS_PTR];
-		q->mode |= 0x4000;
-	    }
-	    if (maxsize < (q->scanlen * q->yres)) {
-		maxsize = q->scanlen * q->yres;
-	    }
-	    q++;
-	}
-    } while (TRUE);
-
-    if (q == modes) {
-	return NULL;
-    }
-    if (_create_selector(&banked_selector, 0xa0000, modes[0].gran)) {
-	return NULL;
-    }
-    if (linearfb) {
-	maxsize = ((maxsize + 0xfffUL) & ~0xfffUL);
-	if (_create_selector(&linear_selector, linearfb, maxsize)) {
-	    linear_selector = banked_selector;
-	}
-    }
-
-    for (q = modes; q->mode != 0xffff; q++) {
-	q->sel = banked_selector;
-	if (q->mode & 0x4000) {
-	    if (linear_selector != banked_selector) {
-		q->sel = linear_selector;
-	    } else {
-		q->mode &= ~0x4000;
-	    }
-	}
-    }
-
-    if (vesa_info[V_MAJOR] >= 2) {
-	r.x.ax = 0x4f0a;
-	r.x.bx = 0;
-	__dpmi_int(0x10, &r);
-	if (r.x.ax == 0x004f) {
-	    vesa_pmcode = (word16 *)malloc(r.x.cx);
-	    if (vesa_pmcode != NULL) {
-		movedata(__djgpp_dos_sel, (r.x.es << 4) + r.x.di, _my_ds(), (unsigned)vesa_pmcode, r.x.cx);
-		if (vesa_pmcode[3]) {
-		    p = (word16 *)((long)vesa_pmcode + vesa_pmcode[3]);
-		    while (*p++ != 0xffff) {
-		    }
-		} else {
-		    p = NULL;
-		}
-		if (p && (*p != 0xffff)) {
-		    free(vesa_pmcode);
-		    vesa_pmcode = NULL;
-		} else {
-		    vesa_swbank = (void *)((long)vesa_pmcode + vesa_pmcode[0]);
-		}
-	    }
-	}
-    }
-
-    vesa_ver = _16_ vesa_info[V_MINOR];
-    return modes;
-}
-
-
-/* Desc: Frees all resources allocated by VESA init code.
- *
- * In  : -
- * Out : -
- *
- * Note: -
- */
-static void
-vesa_fini (void)
-{
-    if (vesa_ver) {
-	_remove_selector(&linear_selector);
-	_remove_selector(&banked_selector);
-	if (vesa_pmcode != NULL) {
-	    free(vesa_pmcode);
-	    vesa_pmcode = NULL;
-	}
-    }
-}
-
-
-/* Desc: Uses VESA 3.0 function 0x4F0B to find the closest pixel clock to the requested value.
- *
- * In  : mode, clock
- * Out : desired clock
- *
- * Note: -
- */
-static unsigned long
-_closest_pixclk (int mode_no, unsigned long vclk)
-{
-    __dpmi_regs r;
-
-    r.x.ax = 0x4F0B;
-    r.h.bl = 0;
-    r.d.ecx = vclk;
-    r.x.dx = mode_no;
-    __dpmi_int(0x10, &r);
-
-    return (r.x.ax == 0x004f) ? r.d.ecx : 0;
-}
-
-
-/* Desc: Calculates CRTC mode timings.
- *
- * In  : crtc block, geometry, adjust
- * Out :
- *
- * Note:
- */
-static void
-_crtc_timing (CRTCInfoBlock *crtc, int xres, int yres, int xadjust, int yadjust)
-{
-    int HTotal, VTotal;
-    int HDisp, VDisp;
-    int HSS, VSS;
-    int HSE, VSE;
-    int HSWidth, VSWidth;
-    int SS, SE;
-    int doublescan = FALSE;
-
-    if (yres < 400) {
-	doublescan = TRUE;
-	yres *= 2;
-    }
-
-    HDisp = xres;
-    HTotal = (int)(HDisp * 1.27) & ~0x7;
-    HSWidth = (int)((HTotal - HDisp) / 5) & ~0x7;
-    HSS = HDisp + 16;
-    HSE = HSS + HSWidth;
-    VDisp = yres;
-    VTotal = VDisp * 1.07;
-    VSWidth = (VTotal / 100) + 1;
-    VSS = VDisp + ((int)(VTotal - VDisp) / 5) + 1;
-    VSE = VSS + VSWidth;
-
-    SS = HSS + xadjust;
-    SE = HSE + xadjust;
-
-    if (xadjust < 0) {
-	if (SS < (HDisp + 8)) {
-	    SS = HDisp + 8;
-	    SE = SS + HSWidth;
-	}
-    } else {
-	if ((HTotal - 24) < SE) {
-	    SE = HTotal - 24;
-	    SS = SE - HSWidth;
-	}
-    }
-
-    HSS = SS;
-    HSE = SE;
-
-    SS = VSS + yadjust;
-    SE = VSE + yadjust;
-
-    if (yadjust < 0) {
-	if (SS < (VDisp + 3)) {
-	    SS = VDisp + 3;
-	    SE = SS + VSWidth;
-	}
-    } else {
-	if ((VTotal - 4) < SE) {
-	    SE = VTotal - 4;
-	    SS = SE - VSWidth;
-	}
-    }
-
-    VSS = SS;
-    VSE = SE;
-
-    crtc->HorizontalTotal     = HTotal;
-    crtc->HorizontalSyncStart = HSS;
-    crtc->HorizontalSyncEnd   = HSE;
-    crtc->VerticalTotal       = VTotal;
-    crtc->VerticalSyncStart   = VSS;
-    crtc->VerticalSyncEnd     = VSE;
-    crtc->Flags               = HNEG | VNEG;
-
-    if (doublescan) {
-	crtc->Flags |= DOUBLESCAN;
-    }
-}
-
-
-/* Desc: Attempts to choose a suitable blitter.
- *
- * In  : ptr to mode structure, software framebuffer bits
- * Out : blitter funciton, or NULL
- *
- * Note: -
- */
-static BLTFUNC
-_choose_blitter (vl_mode *p, int fbbits)
-{
-    BLTFUNC blitter;
-
-    if (p->mode & 0x4000) {
-	blitter = _can_mmx() ? vesa_l_dump_virtual_mmx : vesa_l_dump_virtual;
-	    switch (p->bpp) {
-		case 8:
-		    switch (fbbits) {
-			case 8:
-			    break;
-			case 16:
-			    blitter = vesa_l_dump_16_to_8;
-			    break;
-			case 24:
-			    blitter = vesa_l_dump_24_to_8;
-			    break;
-			case 32:
-			    blitter = vesa_l_dump_32_to_8;
-			    break;
-			case 15:
-			default:
-			    return NULL;
-		    }
-		    break;
-		case 15:
-		    switch (fbbits) {
-			case 16:
-			    blitter = vesa_l_dump_16_to_15;
-			    break;
-			case 32:
-			    blitter = vesa_l_dump_32_to_15;
-			    break;
-			case 8:
-			case 15:
-			case 24:
-			default:
-			    return NULL;
-		    }
-		    break;
-		case 16:
-		    switch (fbbits) {
-			case 16:
-			    break;
-			case 32:
-			    blitter = vesa_l_dump_32_to_16;
-			    break;
-			case 8:
-			case 15:
-			case 24:
-			default:
-			    return NULL;
-		    }
-		    break;
-		case 24:
-		    switch (fbbits) {
-			case 24:
-			    break;
-			case 32:
-			    blitter = vesa_l_dump_32_to_24;
-			    break;
-			case 8:
-			case 15:
-			case 16:
-			default:
-			    return NULL;
-		    }
-		    break;
-		case 32:
-		    switch (fbbits) {
-			case 24:
-			    blitter = vesa_l_dump_24_to_32;
-			    break;
-			case 32:
-			    break;
-			case 8:
-			case 15:
-			case 16:
-			default:
-			    return NULL;
-		    }
-		    break;
-	    }
-    } else {
-	blitter = vesa_b_dump_virtual;
-	    switch (p->bpp) {
-		case 8:
-		    switch (fbbits) {
-			case 8:
-			    break;
-			case 16:
-			    blitter = vesa_b_dump_16_to_8;
-			    break;
-			case 24:
-			    blitter = vesa_b_dump_24_to_8;
-			    break;
-			case 32:
-			    blitter = vesa_b_dump_32_to_8;
-			    break;
-			case 15:
-			default:
-			    return NULL;
-		    }
-		    break;
-		case 15:
-		    switch (fbbits) {
-			case 16:
-			    blitter = vesa_b_dump_16_to_15;
-			    break;
-			case 32:
-			    blitter = vesa_b_dump_32_to_15;
-			    break;
-			case 8:
-			case 15:
-			case 24:
-			default:
-			    return NULL;
-		    }
-		    break;
-		case 16:
-		    switch (fbbits) {
-			case 16:
-			    break;
-			case 32:
-			    blitter = vesa_b_dump_32_to_16;
-			    break;
-			case 8:
-			case 15:
-			case 24:
-			default:
-			    return NULL;
-		    }
-		    break;
-		case 24:
-		    switch (fbbits) {
-			case 24:
-			    break;
-			case 32:
-			    blitter = vesa_b_dump_32_to_24;
-			    break;
-			case 8:
-			case 15:
-			case 16:
-			default:
-			    return NULL;
-		    }
-		    break;
-		case 32:
-		    switch (fbbits) {
-			case 24:
-			    blitter = vesa_b_dump_24_to_32;
-			    break;
-			case 32:
-			    break;
-			case 8:
-			case 15:
-			case 16:
-			default:
-			    return NULL;
-		    }
-		    break;
-	    }
-    }
-
-    return blitter;
-}
-
-
-/* Desc: Attempts to enter specified video mode.
- *
- * In  : ptr to mode structure, refresh rate
- * Out : 0 if success
- *
- * Note: -
- */
-static int
-vesa_entermode (vl_mode *p, int refresh, int fbbits)
-{
-    __dpmi_regs r;
-
-    if (!(p->mode & 0x4000)) {
-	{ int n; for (vesa_gran_shift = 0, n = p->gran; n; vesa_gran_shift++, n >>= 1); }
-	vesa_gran_mask = (1 << (--vesa_gran_shift)) - 1;
-	if ((unsigned)p->gran != (vesa_gran_mask + 1)) {
-	    return !0;
-	}
-    }
-
-    VESA.blit = _choose_blitter(p, fbbits);
-    if (VESA.blit == NULL) {
-	return !0;
-    }
-
-    if (oldmode == -1) {
-	r.x.ax = 0x4f03;
-	__dpmi_int(0x10, &r);
-	oldmode = r.x.bx;
-    }
-
-    r.x.ax = 0x4f02;
-    r.x.bx = p->mode;
-
-    if (refresh && ((vesa_ver >> 8) >= 3)) {
-	/* VESA 3.0 stuff for controlling the refresh rate */
-	CRTCInfoBlock crtc;
-	unsigned long vclk;
-	double f0;
-
-	_crtc_timing(&crtc, p->xres, p->yres, 0, 0);
-
-	vclk = (double)crtc.HorizontalTotal * crtc.VerticalTotal * refresh;
-	vclk = _closest_pixclk(p->mode, vclk);
-
-	if (vclk != 0) {
-	    f0 = (double)vclk / (crtc.HorizontalTotal * crtc.VerticalTotal);
-	    /*_current_refresh_rate = (int)(f0 + 0.5);*/
-
-	    crtc.PixelClock  = vclk;
-	    crtc.RefreshRate = refresh * 100;
-
-	    movedata(_my_ds(), (unsigned)&crtc, _stubinfo->ds_selector, 0, sizeof(crtc));
-
-	    r.x.di = 0;
-	    r.x.es = _stubinfo->ds_segment;
-	    r.x.bx |= 0x0800;
-	}
-    }
-
-    __dpmi_int(0x10, &r);
-    if (r.x.ax != 0x004f) {
-	return !0;
-    }
-
-    if (p->bpp == 8) {
-	r.x.ax = 0x4f08;
-	r.x.bx = 0x0800;
-	__dpmi_int(0x10, &r);
-	if (r.x.ax == 0x004f) {
-	    r.x.ax = 0x4f08;
-	    r.h.bl = 0x01;
-	    __dpmi_int(0x10, &r);
-	    vesa_color_precision = r.h.bh;
-	}
-    }
-
-    return 0;
-}
-
-
-/* Desc: Restores to the mode prior to first call to vesa_entermode.
- *
- * In  : -
- * Out : -
- *
- * Note: -
- */
-static void
-vesa_restore (void)
-{
-    __dpmi_regs r;
-
-    if (oldmode != -1) {
-	if (oldmode < 0x100) {
-	    __asm("int $0x10"::"a"(oldmode));
-	} else {
-	    r.x.ax = 0x4f02;
-	    r.x.bx = oldmode;
-	    __dpmi_int(0x10, &r);
-	}
-	oldmode = -1;
-    }
-}
-
-
-/* Desc: set one palette entry
- *
- * In  : color index, R, G, B
- * Out : -
- *
- * Note: uses integer values
- */
-static void
-vesa_setCI_i (int index, int red, int green, int blue)
-{
-#if 0
-  __asm("\n\
-		movw	$0x1010, %%ax	\n\
-		movb	%1, %%dh	\n\
-		movb	%2, %%ch	\n\
-		int	$0x10		\n\
-   "::"b"(index), "m"(red), "m"(green), "c"(blue):"%eax", "%edx");
-#else
-    outportb(0x03C8, index);
-    outportb(0x03C9, red);
-    outportb(0x03C9, green);
-    outportb(0x03C9, blue);
-#endif
-}
-
-
-/* Desc: set one palette entry
- *
- * In  : color index, R, G, B
- * Out : -
- *
- * Note: uses normalized values
- */
-static void
-vesa_setCI_f (int index, float red, float green, float blue)
-{
-    float max = (1 << vesa_color_precision) - 1;
-
-    vesa_setCI_i(index, (int)(red * max), (int)(green * max), (int)(blue * max));
-}
-
-
-/* Desc: state retrieval
- *
- * In  : parameter name, ptr to storage
- * Out : 0 if request successfully processed
- *
- * Note: -
- */
-static int
-vesa_get (int pname, int *params)
-{
-    switch (pname) {
-	case VL_GET_CI_PREC:
-	    params[0] = vesa_color_precision;
-	    break;
-	default:
-	    return -1;
-    }
-    return 0;
-}
-
-
-/*
- * the driver
- */
-vl_driver VESA = {
-    vesa_init,
-    vesa_entermode,
-    NULL,
-    vesa_setCI_f,
-    vesa_setCI_i,
-    vesa_get,
-    vesa_restore,
-    vesa_fini
-};
diff --git a/src/mesa/drivers/dos/vesa.h b/src/mesa/drivers/dos/vesa.h
deleted file mode 100644
index 4b3c3ab832..0000000000
--- a/src/mesa/drivers/dos/vesa.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  4.0
- * 
- * Copyright (C) 1999  Brian Paul   All Rights Reserved.
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * DOS/DJGPP device driver for Mesa
- *
- *  Author: Daniel Borca
- *  Email : dborca@yahoo.com
- *  Web   : http://www.geocities.com/dborca
- */
-
-
-#ifndef VESA_H_included
-#define VESA_H_included
-
-#include "internal.h"
-
-extern void *vesa_swbank;
-
-extern void vesa_b_dump_virtual (void);
-extern void vesa_l_dump_virtual (void);
-extern void vesa_l_dump_virtual_mmx (void);
-
-extern void vesa_l_dump_32_to_24 (void);
-extern void vesa_l_dump_32_to_16 (void);
-extern void vesa_l_dump_32_to_15 (void);
-extern void vesa_l_dump_32_to_8 (void);
-extern void vesa_l_dump_24_to_32 (void);
-extern void vesa_l_dump_24_to_8 (void);
-extern void vesa_l_dump_16_to_15 (void);
-extern void vesa_l_dump_16_to_8 (void);
-
-extern void vesa_b_dump_32_to_24 (void);
-extern void vesa_b_dump_32_to_16 (void);
-extern void vesa_b_dump_32_to_15 (void);
-extern void vesa_b_dump_32_to_8 (void);
-extern void vesa_b_dump_24_to_32 (void);
-extern void vesa_b_dump_24_to_8 (void);
-extern void vesa_b_dump_16_to_15 (void);
-extern void vesa_b_dump_16_to_8 (void);
-
-extern vl_driver VESA;
-
-#endif
diff --git a/src/mesa/drivers/dos/vga.c b/src/mesa/drivers/dos/vga.c
deleted file mode 100644
index 5a6447dd87..0000000000
--- a/src/mesa/drivers/dos/vga.c
+++ /dev/null
@@ -1,289 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  4.1
- * 
- * Copyright (C) 1999  Brian Paul   All Rights Reserved.
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * DOS/DJGPP device driver for Mesa
- *
- *  Author: Daniel Borca
- *  Email : dborca@users.sourceforge.net
- *  Web   : http://www.geocities.com/dborca
- */
-
-
-#include <pc.h>
-#include <stdlib.h>
-
-#include "video.h"
-#include "vga.h"
-
-
-static vl_mode modes[] = {
-   {
-    /* .xres    = */ 320,
-    /* .yres    = */ 200,
-    /* .bpp     = */ 8,
-    /* .mode    = */ 0x13 | 0x4000,
-    /* .scanlen = */ 320,
-    /* .sel     = */ -1,
-    /* .gran    = */ 320*200
-   },
-   {
-    /* .xres    = */ -1,
-    /* .yres    = */ -1,
-    /* .bpp     = */ -1,
-    /* .mode    = */ 0xffff,
-    /* .scanlen = */ -1,
-    /* .sel     = */ -1,
-    /* .gran    = */ -1
-   }
-};
-
-static word16 vga_ver;
-static int linear_selector;
-static int oldmode = -1;
-
-#define vga_color_precision 6
-
-
-/* Desc: Attempts to detect VGA, check video modes and create selectors.
- *
- * In  : -
- * Out : mode array
- *
- * Note: -
- */
-static vl_mode *
-vga_init (void)
-{
-   int rv = 0;
-
-   if (vga_ver) {
-      return modes;
-   }
-
-   __asm("\n\
-		movw	$0x1a00, %%ax	\n\
-		int	$0x10		\n\
-		cmpb	$0x1a, %%al	\n\
-		jne	0f		\n\
-		cmpb	$0x07, %%bl	\n\
-		jb	0f		\n\
-		andl	$0xff, %%ebx	\n\
-		movl	%%ebx, %0	\n\
-   0:":"=g"(rv)::"%eax", "%ebx");
-   if (rv == 0) {
-      return NULL;
-   }
-
-   if (_create_selector(&linear_selector, 0xa0000, 0x10000)) {
-      return NULL;
-   }
-
-   modes[0].sel = linear_selector;
-
-   vga_ver = rv;
-   return modes;
-}
-
-
-/* Desc: Frees all resources allocated by VGA init code.
- *
- * In  : -
- * Out : -
- *
- * Note: -
- */
-static void
-vga_fini (void)
-{
-   if (vga_ver) {
-      _remove_selector(&linear_selector);
-   }
-}
-
-
-/* Desc: Attempts to choose a suitable blitter.
- *
- * In  : ptr to mode structure, software framebuffer bits
- * Out : blitter funciton, or NULL
- *
- * Note: -
- */
-static BLTFUNC
-_choose_blitter (vl_mode *p, int fbbits)
-{
-    BLTFUNC blitter;
-
-    switch (fbbits) {
-	case 8:
-	    blitter = _can_mmx() ? vesa_l_dump_virtual_mmx : vesa_l_dump_virtual;
-	    break;
-	case 16:
-	    blitter = vesa_l_dump_16_to_8;
-	    break;
-	case 24:
-	    blitter = vesa_l_dump_24_to_8;
-	    break;
-	case 32:
-	    blitter = vesa_l_dump_32_to_8;
-	    break;
-	default:
-	    return NULL;
-    }
-
-    return blitter;
-
-    (void)p;
-}
-
-
-/* Desc: Attempts to enter specified video mode.
- *
- * In  : ptr to mode structure, refresh rate
- * Out : 0 if success
- *
- * Note: -
- */
-static int
-vga_entermode (vl_mode *p, int refresh, int fbbits)
-{
-    if (!(p->mode & 0x4000)) {
-	return -1;
-    }
-
-    VGA.blit = _choose_blitter(p, fbbits);
-    if (VGA.blit == NULL) {
-	return !0;
-    }
-
-    if (oldmode == -1) {
-	__asm("\n\
-		movb	$0x0f, %%ah	\n\
-		int	$0x10		\n\
-		andl	$0xff, %%eax	\n\
-		movl	%%eax, %0	\n\
-	":"=g"(oldmode)::"%eax", "%ebx");
-    }
-
-    __asm("int $0x10"::"a"(p->mode&0xff));
-
-    return 0;
-
-    (void)refresh; /* silence compiler warning */
-}
-
-
-/* Desc: Restores to the mode prior to first call to vga_entermode.
- *
- * In  : -
- * Out : -
- *
- * Note: -
- */
-static void
-vga_restore (void)
-{
-   if (oldmode != -1) {
-      __asm("int $0x10"::"a"(oldmode));
-      oldmode = -1;
-   }
-}
-
-
-/* Desc: set one palette entry
- *
- * In  : color index, R, G, B
- * Out : -
- *
- * Note: uses integer values
- */
-static void
-vga_setCI_i (int index, int red, int green, int blue)
-{
-#if 0
-   __asm("\n\
-		movw	$0x1010, %%ax	\n\
-		movb	%1, %%dh	\n\
-		movb	%2, %%ch	\n\
-		int	$0x10		\n\
-   "::"b"(index), "m"(red), "m"(green), "c"(blue):"%eax", "%edx");
-#else
-   outportb(0x03C8, index);
-   outportb(0x03C9, red);
-   outportb(0x03C9, green);
-   outportb(0x03C9, blue);
-#endif
-}
-
-
-/* Desc: set one palette entry
- *
- * In  : color index, R, G, B
- * Out : -
- *
- * Note: uses normalized values
- */
-static void
-vga_setCI_f (int index, float red, float green, float blue)
-{
-    float max = (1 << vga_color_precision) - 1;
-
-    vga_setCI_i(index, (int)(red * max), (int)(green * max), (int)(blue * max));
-}
-
-
-/* Desc: state retrieval
- *
- * In  : parameter name, ptr to storage
- * Out : 0 if request successfully processed
- *
- * Note: -
- */
-static int
-vga_get (int pname, int *params)
-{
-   switch (pname) {
-      case VL_GET_CI_PREC:
-         params[0] = vga_color_precision;
-         break;
-      default:
-         return -1;
-   }
-   return 0;
-}
-
-
-/*
- * the driver
- */
-vl_driver VGA = {
-   vga_init,
-   vga_entermode,
-   NULL,
-   vga_setCI_f,
-   vga_setCI_i,
-   vga_get,
-   vga_restore,
-   vga_fini
-};
diff --git a/src/mesa/drivers/dos/vga.h b/src/mesa/drivers/dos/vga.h
deleted file mode 100644
index 7c17625a3c..0000000000
--- a/src/mesa/drivers/dos/vga.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  4.0
- * 
- * Copyright (C) 1999  Brian Paul   All Rights Reserved.
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * DOS/DJGPP device driver for Mesa
- *
- *  Author: Daniel Borca
- *  Email : dborca@yahoo.com
- *  Web   : http://www.geocities.com/dborca
- */
-
-
-#ifndef VGA_H_included
-#define VGA_H_included
-
-#include "internal.h"
-#include "vesa.h"
-
-extern vl_driver VGA;
-
-#endif
diff --git a/src/mesa/drivers/dos/video.c b/src/mesa/drivers/dos/video.c
deleted file mode 100644
index 468207fbf6..0000000000
--- a/src/mesa/drivers/dos/video.c
+++ /dev/null
@@ -1,442 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  4.0
- * 
- * Copyright (C) 1999  Brian Paul   All Rights Reserved.
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * DOS/DJGPP device driver for Mesa
- *
- *  Author: Daniel Borca
- *  Email : dborca@users.sourceforge.net
- *  Web   : http://www.geocities.com/dborca
- *
- * Thanks to CrazyPyro (Neil Funk) for FakeColor
- */
-
-
-#include <stdlib.h>
-
-#include "internal.h"
-#include "vesa.h"
-#include "vga.h"
-#include "null.h"
-#include "video.h"
-
-
-static vl_driver *drv;
-/* based upon mode specific data: valid entire session */
-int vl_video_selector;
-static vl_mode *video_mode;
-static int video_scanlen, video_bypp;
-/* valid until next buffer */
-void *vl_current_draw_buffer, *vl_current_read_buffer;
-int vl_current_stride, vl_current_width, vl_current_height, vl_current_bytes;
-int vl_current_offset, vl_current_delta;
-
-
-void (*vl_flip) (void);
-
-
-/* FakeColor data */
-#define R_CNT 6
-#define G_CNT 6
-#define B_CNT 6
-
-#define R_BIAS 7
-#define G_BIAS 7
-#define B_BIAS 7
-
-static word32 VGAPalette[256];
-word8 array_r[256];
-word8 array_g[256];
-word8 array_b[256];
-word8 tab_16_8[0x10000];
-
-
-/* lookup table for scaling 5 bit colors up to 8 bits */
-static int _rgb_scale_5[32] = {
-   0,   8,   16,  25,  33,  41,  49,  58,
-   66,  74,  82,  90,  99,  107, 115, 123,
-   132, 140, 148, 156, 165, 173, 181, 189,
-   197, 206, 214, 222, 230, 239, 247, 255
-};
-
-/* lookup table for scaling 6 bit colors up to 8 bits */
-static int _rgb_scale_6[64] = {
-   0,   4,   8,   12,  16,  20,  24,  28,
-   32,  36,  40,  45,  49,  53,  57,  61,
-   65,  69,  73,  77,  81,  85,  89,  93,
-   97,  101, 105, 109, 113, 117, 121, 125,
-   130, 134, 138, 142, 146, 150, 154, 158,
-   162, 166, 170, 174, 178, 182, 186, 190,
-   194, 198, 202, 206, 210, 215, 219, 223,
-   227, 231, 235, 239, 243, 247, 251, 255
-};
-
-
-/* Desc: color composition (w/o ALPHA)
- *
- * In  : array of integers (R, G, B)
- * Out : color
- *
- * Note: -
- */
-static int
-v_mixrgb8fake (const unsigned char rgb[])
-{
-   return array_b[rgb[2]]*G_CNT*R_CNT
-        + array_g[rgb[1]]*R_CNT
-        + array_r[rgb[0]];
-}
-
-
-/* Desc: color decomposition
- *
- * In  : pixel offset, array of integers to hold color components (R, G, B, A)
- * Out : -
- *
- * Note: uses current read buffer
- */
-static void
-v_getrgb8fake6 (unsigned int offset, unsigned char rgb[])
-{
-   word32 c = VGAPalette[((word8 *)vl_current_read_buffer)[offset]];
-   rgb[0] = _rgb_scale_6[(c >> 16) & 0x3F];
-   rgb[1] = _rgb_scale_6[(c >> 8)  & 0x3F];
-   rgb[2] = _rgb_scale_6[ c        & 0x3F];
-}
-static void
-v_getrgb8fake8 (unsigned int offset, unsigned char rgb[])
-{
-   word32 c = VGAPalette[((word8 *)vl_current_read_buffer)[offset]];
-   rgb[0] = c >> 16;
-   rgb[1] = c >> 8;
-   rgb[2] = c;
-}
-
-
-/* Desc: create R5G6B5 to FakeColor table lookup
- *
- * In  : -
- * Out : -
- *
- * Note: -
- */
-static void
-init_tab_16_8 (void)
-{
-    int i;
-    for (i = 0; i < 0x10000; i++) {
-	unsigned char rgb[3];
-	rgb[0] = _rgb_scale_5[(i >> 11) & 0x1F];
-	rgb[1] = _rgb_scale_6[(i >>  5) & 0x3F];
-	rgb[2] = _rgb_scale_5[ i        & 0x1F];
-	tab_16_8[i] = v_mixrgb8fake(rgb);
-    }
-    (void)v_getrgb8fake6;
-    (void)v_getrgb8fake8;
-}
-
-
-/* Desc: set one palette entry
- *
- * In  : index, R, G, B
- * Out : -
- *
- * Note: color components are in range [0.0 .. 1.0]
- */
-void
-vl_setCI (int index, float red, float green, float blue)
-{
-   drv->setCI_f(index, red, green, blue);
-}
-
-
-/* Desc: set one palette entry
- *
- * In  : color, R, G, B
- * Out : -
- *
- * Note: -
- */
-static void
-fake_setcolor (int c, int r, int g, int b)
-{
-   VGAPalette[c] = 0xff000000 | (r<<16) | (g<<8) | b;
-
-   drv->setCI_i(c, r, g, b);
-}
-
-
-/* Desc: build FakeColor palette
- *
- * In  : CI precision in bits
- * Out : -
- *
- * Note: -
- */
-static void
-fake_buildpalette (int bits)
-{
-   double c_r, c_g, c_b;
-   int r, g, b, color = 0;
-
-   double max = (1 << bits) - 1;
-
-   for (b = 0; b < B_CNT; ++b) {
-      for (g = 0; g < G_CNT; ++g) {
-         for (r = 0; r < R_CNT; ++r) {
-            c_r = 0.5 + (double)r * (max-R_BIAS) / (R_CNT-1.) + R_BIAS;
-            c_g = 0.5 + (double)g * (max-G_BIAS) / (G_CNT-1.) + G_BIAS;
-            c_b = 0.5 + (double)b * (max-B_BIAS) / (B_CNT-1.) + B_BIAS;
-            fake_setcolor(color++, (int)c_r, (int)c_g, (int)c_b);
-         }
-      }
-   }
-
-   for (color = 0; color < 256; color++) {
-      c_r = (double)color * R_CNT / 256.;
-      c_g = (double)color * G_CNT / 256.;
-      c_b = (double)color * B_CNT / 256.;
-      array_r[color] = (int)c_r;
-      array_g[color] = (int)c_g;
-      array_b[color] = (int)c_b;
-   }
-}
-
-
-/* Desc: initialize hardware
- *
- * In  : -
- * Out : list of available modes
- *
- * Note: when returning non-NULL, global variable `drv' is guaranteed to be ok
- */
-static vl_mode *
-v_init_hw (void)
-{
-   static vl_mode *q = NULL;
-
-   if (q == NULL) {
-      /* are we forced to NUL driver? */
-      if (getenv("DMESA_NULDRV")) {
-         if ((q = NUL.init()) != NULL) {
-            drv = &NUL;
-         }
-         return q;
-      }
-      /* initialize hardware */
-      if ((q = VESA.init()) != NULL) {
-         drv = &VESA;
-      } else if ((q = VGA.init()) != NULL) {
-         drv = &VGA;
-      } else {
-         drv = NULL;
-      }
-   }
-
-   return q;
-}
-
-
-/* Desc: sync buffer with video hardware
- *
- * In  : ptr to old buffer, position, size
- * Out : 0 if success
- *
- * Note: -
- */
-int
-vl_sync_buffer (void **buffer, int x, int y, int width, int height)
-{
-   if ((/*XXX*/width & 7) || (x < 0) || (y < 0) || (x+width > video_mode->xres) || (y+height > video_mode->yres)) {
-      return -1;
-   } else {
-      void *newbuf = *buffer;
-
-      if ((newbuf == NULL) || (vl_current_width != width) || (vl_current_height != height)) {
-         newbuf = realloc(newbuf, width * height * video_bypp);
-      }
-
-      if (newbuf == NULL) {
-         return -2;
-      }
-
-      vl_current_width = width;
-      vl_current_height = height;
-      vl_current_stride = vl_current_width * video_bypp;
-      vl_current_bytes = vl_current_stride * height;
-
-      vl_current_offset = video_scanlen * y + video_bypp * x;
-      vl_current_delta = video_scanlen - vl_current_stride;
-
-      vl_current_draw_buffer = vl_current_read_buffer = *buffer = newbuf;
-      return 0;
-   }
-}
-
-
-/* Desc: state retrieval
- *
- * In  : name, storage
- * Out : -1 for an error
- *
- * Note: -
- */
-int
-vl_get (int pname, int *params)
-{
-   switch (pname) {
-      case VL_GET_SCREEN_SIZE:
-         params[0] = video_mode->xres;
-         params[1] = video_mode->yres;
-         break;
-      case VL_GET_VIDEO_MODES: {
-         int n;
-         vl_mode *q;
-         if ((q = v_init_hw()) == NULL) {
-            return -1;
-         }
-         /* count available visuals */
-         for (n = 0; q->mode != 0xffff; q++) {
-            if ((q + 1)->mode == (q->mode | 0x4000)) {
-               /* same mode, but linear */
-               q++;
-            }
-            if (params) {
-               params[n] = (int)q;
-            }
-            n++;
-         }
-         return n;
-      }
-      default:
-         return (drv != NULL) ? drv->get(pname, params) : -1;
-   }
-   return 0;
-}
-
-
-/* Desc: setup mode
- *
- * In  : ptr to mode definition
- * Out : 0 if success
- *
- * Note: -
- */
-static int
-vl_setup_mode (vl_mode *p)
-{
-   if (p == NULL) {
-      return -1;
-   }
-
-   switch (p->bpp) {
-      case 8:
-         break;
-      case 15:
-         break;
-      case 16:
-         break;
-      case 24:
-         break;
-      case 32:
-         break;
-      default:
-         return -1;
-   }
-
-   video_mode = p;
-   video_bypp = (p->bpp+7)/8;
-   video_scanlen = p->scanlen;
-   vl_video_selector = p->sel;
-
-   return 0;
-}
-
-
-/* Desc: restore to the mode prior to first call to `vl_video_init'.
- *
- * In  : -
- * Out : -
- *
- * Note: -
- */
-void
-vl_video_exit (void)
-{
-   drv->restore();
-   drv->fini();
-   video_mode = NULL;
-}
-
-
-/* Desc: enter mode
- *
- * In  : xres, yres, bits/pixel, RGB, refresh rate
- * Out : pixel width in bits if success
- *
- * Note: -
- */
-int
-vl_video_init (int width, int height, int bpp, int rgb, int refresh, int fbbits)
-{
-   int fake;
-   vl_mode *p, *q;
-   unsigned int min;
-
-   fake = 0;
-   if (!rgb) {
-      bpp = 8;
-   } else if (bpp == 8) {
-      fake = 1;
-   }
-
-   /* initialize hardware */
-   if ((q = v_init_hw()) == NULL) {
-      return 0;
-   }
-
-   /* search for a mode that fits our request */
-   for (min = -1, p = NULL; q->mode != 0xffff; q++) {
-      if ((q->xres >= width) && (q->yres >= height) && (q->bpp == bpp)) {
-         if (min >= (unsigned)(q->xres * q->yres)) {
-            min = q->xres * q->yres;
-            p = q;
-         }
-      }
-   }
-
-    /* setup and enter mode */
-    if ((vl_setup_mode(p) == 0) && (drv->entermode(p, refresh, fbbits) == 0)) {
-	vl_flip = drv->blit;
-	if (fake) {
-	    drv->get(VL_GET_CI_PREC, (int *)(&min));
-	    fake_buildpalette(min);
-	    init_tab_16_8();
-	}
-	return bpp;
-    }
-
-   /* abort */
-   return 0;
-}
diff --git a/src/mesa/drivers/dos/video.h b/src/mesa/drivers/dos/video.h
deleted file mode 100644
index e084116742..0000000000
--- a/src/mesa/drivers/dos/video.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  4.0
- * 
- * Copyright (C) 1999  Brian Paul   All Rights Reserved.
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * DOS/DJGPP device driver for Mesa
- *
- *  Author: Daniel Borca
- *  Email : dborca@users.sourceforge.net
- *  Web   : http://www.geocities.com/dborca
- */
-
-
-#ifndef VIDEO_H_included
-#define VIDEO_H_included
-
-typedef int fixed;
-
-#define VL_GET_CARD_NAME   0x0100
-#define VL_GET_VRAM        0x0101
-#define VL_GET_CI_PREC     0x0200
-#define VL_GET_HPIXELS     0x0201
-#define VL_GET_SCREEN_SIZE 0x0202
-#define VL_GET_VIDEO_MODES 0x0300
-
-extern void (*vl_flip) (void);
-
-void vl_setCI (int index, float red, float green, float blue);
-
-int vl_sync_buffer (void **buffer, int x, int y, int width, int height);
-int vl_get (int pname, int *params);
-
-void vl_video_exit (void);
-int vl_video_init (int width, int height, int bpp, int rgb, int refresh, int fbbits);
-
-#endif
-- 
cgit v1.2.3


From 230d263aca86854104645c589d75f2862c50abe6 Mon Sep 17 00:00:00 2001
From: Kristian Høgsberg <krh@bitplanet.net>
Date: Thu, 25 Feb 2010 16:00:45 -0500
Subject: Remove GGI support

---
 Makefile                                           |  11 -
 progs/ggi/asc-view.c                               | 377 --------
 progs/ggi/blah                                     |   2 -
 progs/ggi/blat                                     |   7 -
 progs/ggi/box.asc                                  |  66 --
 progs/ggi/cone.asc                                 | 198 -----
 progs/ggi/gears.c                                  | 339 --------
 progs/ggi/gears2.c                                 | 390 ---------
 progs/ggi/sphere.asc                               | 132 ---
 progs/ggi/torus.asc                                | 264 ------
 progs/ggi/tube.asc                                 | 396 ---------
 src/glut/ggi/Makefile                              |  53 --
 src/glut/ggi/debug.h                               | 259 ------
 src/glut/ggi/ggiglut.c                             | 959 ---------------------
 src/mesa/drivers/ggi/default/.gitignore            |   1 -
 src/mesa/drivers/ggi/default/genkgi.conf.in        |   4 -
 src/mesa/drivers/ggi/default/genkgi.h              |  76 --
 src/mesa/drivers/ggi/default/genkgi_mode.c         |  97 ---
 src/mesa/drivers/ggi/default/genkgi_visual.c       | 190 ----
 src/mesa/drivers/ggi/default/linear.c              | 409 ---------
 src/mesa/drivers/ggi/default/linear_15.c           |  36 -
 src/mesa/drivers/ggi/default/linear_16.c           |  36 -
 src/mesa/drivers/ggi/default/linear_24.c           |  36 -
 src/mesa/drivers/ggi/default/linear_32.c           |  36 -
 src/mesa/drivers/ggi/default/linear_8.c            |  36 -
 src/mesa/drivers/ggi/default/stubs.c               | 512 -----------
 src/mesa/drivers/ggi/display/.gitignore            |   1 -
 src/mesa/drivers/ggi/display/fbdev.conf.in         |   4 -
 src/mesa/drivers/ggi/display/fbdev_mode.c          | 130 ---
 src/mesa/drivers/ggi/display/fbdev_visual.c        | 138 ---
 src/mesa/drivers/ggi/ggimesa.c                     | 670 --------------
 src/mesa/drivers/ggi/ggimesa.conf.in               |  13 -
 src/mesa/drivers/ggi/include/ggi/mesa/debug.h      | 260 ------
 .../drivers/ggi/include/ggi/mesa/display_fbdev.h   |  20 -
 src/mesa/drivers/ggi/include/ggi/mesa/ggimesa.h    |  84 --
 .../drivers/ggi/include/ggi/mesa/ggimesa_int.h     |  44 -
 36 files changed, 6286 deletions(-)
 delete mode 100644 progs/ggi/asc-view.c
 delete mode 100644 progs/ggi/blah
 delete mode 100644 progs/ggi/blat
 delete mode 100644 progs/ggi/box.asc
 delete mode 100644 progs/ggi/cone.asc
 delete mode 100644 progs/ggi/gears.c
 delete mode 100644 progs/ggi/gears2.c
 delete mode 100644 progs/ggi/sphere.asc
 delete mode 100644 progs/ggi/torus.asc
 delete mode 100644 progs/ggi/tube.asc
 delete mode 100644 src/glut/ggi/Makefile
 delete mode 100644 src/glut/ggi/debug.h
 delete mode 100644 src/glut/ggi/ggiglut.c
 delete mode 100644 src/mesa/drivers/ggi/default/.gitignore
 delete mode 100644 src/mesa/drivers/ggi/default/genkgi.conf.in
 delete mode 100644 src/mesa/drivers/ggi/default/genkgi.h
 delete mode 100644 src/mesa/drivers/ggi/default/genkgi_mode.c
 delete mode 100644 src/mesa/drivers/ggi/default/genkgi_visual.c
 delete mode 100644 src/mesa/drivers/ggi/default/linear.c
 delete mode 100644 src/mesa/drivers/ggi/default/linear_15.c
 delete mode 100644 src/mesa/drivers/ggi/default/linear_16.c
 delete mode 100644 src/mesa/drivers/ggi/default/linear_24.c
 delete mode 100644 src/mesa/drivers/ggi/default/linear_32.c
 delete mode 100644 src/mesa/drivers/ggi/default/linear_8.c
 delete mode 100644 src/mesa/drivers/ggi/default/stubs.c
 delete mode 100644 src/mesa/drivers/ggi/display/.gitignore
 delete mode 100644 src/mesa/drivers/ggi/display/fbdev.conf.in
 delete mode 100644 src/mesa/drivers/ggi/display/fbdev_mode.c
 delete mode 100644 src/mesa/drivers/ggi/display/fbdev_visual.c
 delete mode 100644 src/mesa/drivers/ggi/ggimesa.c
 delete mode 100644 src/mesa/drivers/ggi/ggimesa.conf.in
 delete mode 100644 src/mesa/drivers/ggi/include/ggi/mesa/debug.h
 delete mode 100644 src/mesa/drivers/ggi/include/ggi/mesa/display_fbdev.h
 delete mode 100644 src/mesa/drivers/ggi/include/ggi/mesa/ggimesa.h
 delete mode 100644 src/mesa/drivers/ggi/include/ggi/mesa/ggimesa_int.h

(limited to 'src/mesa')

diff --git a/Makefile b/Makefile
index 659e11c5fb..b99a87b8ba 100644
--- a/Makefile
+++ b/Makefile
@@ -211,7 +211,6 @@ MAIN_FILES = \
 	$(DIRECTORY)/docs/*.spec					\
 	$(DIRECTORY)/include/GL/internal/glcore.h			\
 	$(DIRECTORY)/include/GL/dmesa.h					\
-	$(DIRECTORY)/include/GL/ggimesa.h				\
 	$(DIRECTORY)/include/GL/gl.h					\
 	$(DIRECTORY)/include/GL/glext.h					\
 	$(DIRECTORY)/include/GL/gl_mangle.h				\
@@ -273,13 +272,6 @@ MAIN_FILES = \
 	$(DIRECTORY)/src/mesa/drivers/fbdev/Makefile			\
 	$(DIRECTORY)/src/mesa/drivers/fbdev/glfbdev.c			\
 	$(DIRECTORY)/src/mesa/drivers/glide/*.[ch]			\
-	$(DIRECTORY)/src/mesa/drivers/ggi/*.[ch]			\
-	$(DIRECTORY)/src/mesa/drivers/ggi/ggimesa.conf.in		\
-	$(DIRECTORY)/src/mesa/drivers/ggi/default/*.c			\
-	$(DIRECTORY)/src/mesa/drivers/ggi/default/genkgi.conf.in	\
-	$(DIRECTORY)/src/mesa/drivers/ggi/display/*.c			\
-	$(DIRECTORY)/src/mesa/drivers/ggi/display/fbdev.conf.in		\
-	$(DIRECTORY)/src/mesa/drivers/ggi/include/ggi/mesa/*.h		\
 	$(DIRECTORY)/src/mesa/drivers/osmesa/Makefile			\
 	$(DIRECTORY)/src/mesa/drivers/osmesa/Makefile.win		\
 	$(DIRECTORY)/src/mesa/drivers/osmesa/descrip.mms		\
@@ -458,7 +450,6 @@ DEMO_FILES = \
 	$(DIRECTORY)/progs/windml/Makefile.ugl		\
 	$(DIRECTORY)/progs/windml/*.c			\
 	$(DIRECTORY)/progs/windml/*.bmp			\
-	$(DIRECTORY)/progs/ggi/*.c
 
 GLUT_FILES = \
 	$(DIRECTORY)/include/GL/glut.h			\
@@ -471,8 +462,6 @@ GLUT_FILES = \
 	$(DIRECTORY)/src/glut/beos/*.[ch]		\
 	$(DIRECTORY)/src/glut/beos/*.cpp		\
 	$(DIRECTORY)/src/glut/beos/Makefile		\
-	$(DIRECTORY)/src/glut/ggi/*.[ch]		\
-	$(DIRECTORY)/src/glut/ggi/Makefile		\
 	$(DIRECTORY)/src/glut/fbdev/Makefile		\
 	$(DIRECTORY)/src/glut/fbdev/*[ch]		\
 	$(DIRECTORY)/src/glut/mini/*[ch]		\
diff --git a/progs/ggi/asc-view.c b/progs/ggi/asc-view.c
deleted file mode 100644
index d37fba9d9f..0000000000
--- a/progs/ggi/asc-view.c
+++ /dev/null
@@ -1,377 +0,0 @@
-/*
-    test program for the ggi-mesa driver
-
-    Copyright (C) 1997,1998  Uwe Maurer - uwe_maurer@t-online.de
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#include <sys/time.h>
-#include <stdio.h>
-#include <string.h>
-#include <math.h>
-#include <GL/gl.h>
-#include <GL/ggimesa.h>
-#include <ggi/ggi.h>
-#include <stdlib.h>
-
-ggi_visual_t vis,vis_mem;
-
-GGIMesaContext ctx;
-
-int screen_x=GGI_AUTO,screen_y=GGI_AUTO;
-ggi_graphtype bpp=GT_AUTO;
-
-//#define ZBUFFER
-
-//#define SMOOTH_NORMALS
-
-void Init()
-{
-	GLfloat h=(GLfloat)3/4;
-	GLfloat pos[4]={5,5,-20,0};
-	GLfloat specular[4]={.4,.4,.4,1};
-	GLfloat diffuse[4]={.3,.3,.3,1};
-	GLfloat ambient[4]={.2,.2,.2,1};
-
-	int err;
-
-	if (ggiInit()<0)
-	{
-		printf("ggiInit() failed\n");
-		exit(1);
-	}
-	ctx=GGIMesaCreateContext();
-	if (ctx==NULL)
-	{
-		printf("Can't create Context!\n");
-		exit(1);
-	}
-
-	vis=ggiOpen(NULL);
-	vis_mem=ggiOpen("display-memory",NULL);
-	if (vis==NULL || vis_mem==NULL)
-	{
-		printf("Can't open ggi_visuals!\n");
-		exit(1);
-	}	
-	err=ggiSetGraphMode(vis,screen_x,screen_y,screen_x,screen_y,bpp);
-	err+=ggiSetGraphMode(vis_mem,screen_x,screen_y,screen_x,screen_y,bpp);
-	if (err)
-	{
-		printf("Can't set %ix%i\n",screen_x,screen_y);
-		exit(1);
-	}
-
-	if (GGIMesaSetVisual(ctx,vis_mem,GL_TRUE,GL_FALSE)<0)
-	{
-		printf("GGIMesaSetVisual() failed!\n");
-		exit(1);
-	}
-
-	GGIMesaMakeCurrent(ctx);
-
-	glViewport(0,0,screen_x,screen_y);
-	glMatrixMode(GL_PROJECTION);
-	glLoadIdentity();
-	glFrustum(-1,1,-h,h,1,50);
-	glMatrixMode(GL_MODELVIEW);
-	glLoadIdentity();
-	glTranslatef(0,0,-9);
-	glShadeModel(GL_FLAT);
-
-	glFrontFace(GL_CW);
-	glEnable(GL_CULL_FACE);
-	glEnable(GL_LIGHTING);
-	glEnable(GL_LIGHT0);
-	
-	glLightfv(GL_LIGHT0,GL_POSITION,pos);
-	
-	glLightfv(GL_LIGHT0,GL_DIFFUSE,diffuse);
-	glLightfv(GL_LIGHT0,GL_AMBIENT,ambient);
-	glLightfv(GL_LIGHT0,GL_SPECULAR,specular);
-
-	#ifdef ZBUFFER
-		glEnable(GL_DEPTH_TEST);
-	#endif
-}
-
-
-#define MAX_VERTS 1000
-#define MAX_TRIS  2000
-#define MAX_LEN 1024
-#define MAX_F 100000000
-
-void LoadAsc(GLuint *list,char *file)
-{
-	FILE *fp;
-
-	GLfloat p[MAX_VERTS][3];
-	GLfloat normal[MAX_VERTS][3];
-	float ncount[MAX_VERTS];
-	int v[MAX_TRIS][3];
-	char line[MAX_LEN];
-	char *s;
-	int  i,j;
-	int verts,faces;
-	GLuint v0,v1,v2;
-	GLfloat n[3];
-	GLfloat len,k;
-	GLfloat min[3]={MAX_F,MAX_F,MAX_F};
-	GLfloat max[3]={-MAX_F,-MAX_F,-MAX_F};
-	char *coord_str[]={"X","Z","Y"};
-
-	fp=fopen(file,"r");
-	if (!fp) 
-	{
-		printf("Can't open %s!\n",file);	
-		exit(1);
-	}
-
-	while (strncmp(fgets(line,MAX_LEN,fp),"Tri-mesh",8)) ;
-	
-	s=strstr(line,":")+1;
-	verts=atoi(s);
-	s=strstr(s,":")+1;
-	faces=atoi(s);
-
-	if (verts>MAX_VERTS)	
-	{	
-		printf("Too many vertices..\n");
-		exit(1);
-	}
-	
-	while (strncmp(fgets(line,MAX_LEN,fp),"Vertex list",11)) ;	
-
-	for (i=0;i<verts;i++)
-	{
-		while (strncmp(fgets(line,MAX_LEN,fp),"Vertex",6)) ;	
-		for (j=0;j<3;j++)
-		{	
-			s=strstr(line,coord_str[j])+2;
-			k=atoi(s);
-			if (k>max[j]) max[j]=k;
-			if (k<min[j]) min[j]=k;
-			p[i][j]=k;
-		}
-		
-	}
-	len=0;
-	for (i=0;i<3;i++)
-	{
-		k=max[i]-min[i];
-		if (k>len) {len=k;j=i;}
-		n[i]=(max[i]+min[i])/2;
-	}
-
-	len/=2;
-
-	for (i=0;i<verts;i++)
-	{
-		for (j=0;j<3;j++)
-		{
-			p[i][j]-=n[j];
-			p[i][j]/=len;
-		}
-	}
-
-	*list=glGenLists(1);
-	glNewList(*list,GL_COMPILE);
-	glBegin(GL_TRIANGLES);
-
-	memset(ncount,0,sizeof(ncount));
-	memset(normal,0,sizeof(normal));
-
-	while (strncmp(fgets(line,MAX_LEN,fp),"Face list",9)) ;	
-	for (i=0;i<faces;i++)
-	{
-		while (strncmp(fgets(line,MAX_LEN,fp),"Face",4)) ;	
-		s=strstr(line,"A")+2;
-		v0=v[i][0]=atoi(s);
-		s=strstr(line,"B")+2;
-		v1=v[i][1]=atoi(s);
-		s=strstr(line,"C")+2;
-		v2=v[i][2]=atoi(s);
-		n[0]=((p[v1][1]-p[v0][1])*(p[v2][2]-p[v0][2]) 
-			- (p[v1][2]-p[v0][2])*(p[v2][1]-p[v0][1])); 
-		n[1]=((p[v1][2]-p[v0][2])*(p[v2][0]-p[v0][0]) 
-			- (p[v1][0]-p[v0][0])*(p[v2][2]-p[v0][2])); 
-		n[2]=((p[v1][0]-p[v0][0])*(p[v2][1]-p[v0][1]) 
-			- (p[v1][1]-p[v0][1])*(p[v2][0]-p[v0][0])); 
-		len=n[0]*n[0]+n[1]*n[1]+n[2]*n[2];
-		len=sqrt(len);
-		n[0]/=len;
-		n[1]/=len;
-		n[2]/=len;
-	#ifdef SMOOTH_NORMALS	
-		for (j=0;j<3;j++){
-			normal[v[i][j]][0]+=n[0];
-			normal[v[i][j]][1]+=n[1];
-			normal[v[i][j]][2]+=n[2];
-			ncount[v[i][j]]++;
-		}
-	#else
-		glNormal3fv(n);
-		for (j=0;j<3;j++)
-			glVertex3fv(p[v[i][j]]);
-	#endif
-	}
-
-	#ifdef SMOOTH_NORMALS
-		for (i=0;i<verts;i++) {
-			for (j=0;j<3;j++) {
-				normal[i][j]/=ncount[i];
-			}
-		}
-		for (i=0;i<faces;i++) {
-			for (j=0;j<3;j++) {
-				glNormal3f(normal[v[i][j]][0],
-					   normal[v[i][j]][1],
-					   normal[v[i][j]][2]);
-				glVertex3fv(p[v[i][j]]);
-			}
-		}
-	#endif
-
-	glEnd();
-	glEndList();
-	fclose(fp);
-}
-
-double Display(GLuint l,int *maxframes)
-{
-	int x,y;
-	GLfloat col[]={.25,0,.25,1};
-	int frames=0;
-	struct timeval start,stop;
-	double len;
-	GLfloat rotate=0;
-
-	gettimeofday(&start,NULL);
-
-
-	while(1)
-	{
-		glClearColor(0,0,0,0);
-		glClearIndex(0);
-
-		#ifdef ZBUFFER
-			glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
-		#else
-			glClear(GL_COLOR_BUFFER_BIT);
-		#endif	
-
-		glPushMatrix();
-	
-		glRotatef(30,1,0,0);
-		glRotatef(rotate/10,0,0,1);
-		glTranslatef(-6,-4,0);
-		for (y=0;y<3;y++)
-		{
-			glPushMatrix();
-			for (x=0;x<5;x++)
-			{
-				glPushMatrix();
-				glRotatef(rotate,y+1,-x-1,0);
-
-				col[0]=(GLfloat)(x+1)/4;
-				col[1]=0;
-				col[2]=(GLfloat)(y+1)/2;
-				glMaterialfv(GL_FRONT,GL_AMBIENT,col);
-				glCallList(l);
-				glPopMatrix();
-				glTranslatef(3,0,0);
-			}
-			glPopMatrix();
-			glTranslatef(0,4,0);
-		}
-		glPopMatrix();
-		glFinish();
-
-		ggiPutBox(vis,0,0,screen_x,screen_y,ggiDBGetBuffer(vis,0)->read);
-		rotate+=10;
-		frames++;
-		if (frames==(*maxframes)) break;
-
-		if (ggiKbhit(vis))
-		{
-			*maxframes=frames;
-			break;
-		}
-	}
-
-	gettimeofday(&stop,NULL);
-	len=(double)(stop.tv_sec-start.tv_sec)+
-		(double)(stop.tv_usec-start.tv_usec)/1e6;	
-	return len;
-}
-
-void visible(int vis)
-{
-	if (vis == GLUT_VISIBLE)
-	  glutIdleFunc(idle);
-	else
-	  glutIdleFunc(NULL);
-}
-
-int main(int argc, char *argv[])
-{
-	glutInit(&argc, argv);
-	glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
-	
-	glutInitWindowPosition(0, 0);
-	glutInitWindowSize(300, 300);
-	glutCreateWindow("asc-view");
-	init();
-	
-	glutDisplayFunc(draw);
-	glutReshapeFunc(reshape);
-	glutKeyboardFunc(key);
-	glutSpecialFunc(special);
-	glutVisibilityFunc(visible);
-	
-	glutMainLoop();
-#if 0
-	GLuint l;
-	char *file;
-	int maxframes=0;
-	double len;
-
-	Init();
-
-	file=(argc>1) ? argv[1] : "asc/box.asc";
-	if (argc>2) maxframes=atoi(argv[2]);
-
-	if (argc==1)
-	{
-		printf("usage: %s filename.asc\n",argv[0]);
-	}
-
-	LoadAsc(&l,file);
-
-	len=Display(l,&maxframes);
-
-	printf("\ttime: %.3f sec\n",len);
-	printf("\tframes: %i\n",maxframes);
-	printf("\tfps: %.3f \n",(double)maxframes/len);
-
-	GGIMesaDestroyContext(ctx);
-	ggiClose(vis);
-	ggiClose(vis_mem);
-	ggiExit();
-#endif
-	return 0;
-}
-
diff --git a/progs/ggi/blah b/progs/ggi/blah
deleted file mode 100644
index 2c1664d7d0..0000000000
--- a/progs/ggi/blah
+++ /dev/null
@@ -1,2 +0,0 @@
-Terminating on signal 11
-
diff --git a/progs/ggi/blat b/progs/ggi/blat
deleted file mode 100644
index 7ff64a9d10..0000000000
--- a/progs/ggi/blat
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/sh
-
-function foobar() {
-	echo "foo!"
-}
-
-foobar
diff --git a/progs/ggi/box.asc b/progs/ggi/box.asc
deleted file mode 100644
index f8b23fd85a..0000000000
--- a/progs/ggi/box.asc
+++ /dev/null
@@ -1,66 +0,0 @@
-Ambient light color: Red=0.039216 Green=0.039216 Blue=0.039216
-
-Named object: "Object01"
-Tri-mesh, Vertices: 8     Faces: 12
-Vertex list:
-Vertex 0:  X: -20     Y: -19.999998     Z: 20.000002
-Vertex 1:  X: 20     Y: -19.999998     Z: 20.000002
-Vertex 2:  X: 20     Y: 20.000002     Z: 19.999998
-Vertex 3:  X: -20     Y: 20.000002     Z: 19.999998
-Vertex 4:  X: -20     Y: -20.000002     Z: -19.999998
-Vertex 5:  X: 20     Y: -20.000002     Z: -19.999998
-Vertex 6:  X: 20     Y: 19.999998     Z: -20.000002
-Vertex 7:  X: -20     Y: 19.999998     Z: -20.000002
-Face list:
-Face 0:    A:0 B:1 C:2 AB:1 BC:1 CA:0
-Smoothing:  1
-Face 1:    A:0 B:2 C:3 AB:0 BC:1 CA:1
-Smoothing:  1
-Face 2:    A:0 B:4 C:5 AB:1 BC:1 CA:0
-Smoothing:  2
-Face 3:    A:0 B:5 C:1 AB:0 BC:1 CA:1
-Smoothing:  2
-Face 4:    A:1 B:5 C:6 AB:1 BC:1 CA:0
-Smoothing:  3
-Face 5:    A:1 B:6 C:2 AB:0 BC:1 CA:1
-Smoothing:  3
-Face 6:    A:2 B:6 C:7 AB:1 BC:1 CA:0
-Smoothing:  4
-Face 7:    A:2 B:7 C:3 AB:0 BC:1 CA:1
-Smoothing:  4
-Face 8:    A:3 B:7 C:4 AB:1 BC:1 CA:0
-Smoothing:  5
-Face 9:    A:3 B:4 C:0 AB:0 BC:1 CA:1
-Smoothing:  5
-Face 10:    A:4 B:7 C:6 AB:1 BC:1 CA:0
-Smoothing:  6
-Face 11:    A:4 B:6 C:5 AB:0 BC:1 CA:1
-Smoothing:  6
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-                                     Page 1
-
-
-
diff --git a/progs/ggi/cone.asc b/progs/ggi/cone.asc
deleted file mode 100644
index 5c52285996..0000000000
--- a/progs/ggi/cone.asc
+++ /dev/null
@@ -1,198 +0,0 @@
-Ambient light color: Red=0.039216 Green=0.039216 Blue=0.039216
-
-Named object: "Object01"
-Tri-mesh, Vertices: 34     Faces: 64
-Vertex list:
-Vertex 0:  X: 60.167416     Y: -87.419525     Z: -53.3088
-Vertex 1:  X: 76.70787     Y: -87.419518     Z: -29.84565
-Vertex 2:  X: 83.0103     Y: -87.419518     Z: -1.838764
-Vertex 3:  X: 78.115204     Y: -87.419518     Z: 26.448057
-Vertex 4:  X: 62.767834     Y: -87.41951     Z: 50.708401
-Vertex 5:  X: 39.304672     Y: -87.41951     Z: 67.248848
-Vertex 6:  X: 11.297782     Y: -87.41951     Z: 73.551254
-Vertex 7:  X: -16.989004     Y: -87.41951     Z: 68.656158
-Vertex 8:  X: -41.249344     Y: -87.41951     Z: 53.308777
-Vertex 9:  X: -57.789783     Y: -87.419518     Z: 29.845612
-Vertex 10:  X: -64.092194     Y: -87.419518     Z: 1.838721
-Vertex 11:  X: -59.197079     Y: -87.419518     Z: -26.448097
-Vertex 12:  X: -43.849678     Y: -87.419525     Z: -50.708427
-Vertex 13:  X: -20.386503     Y: -87.419525     Z: -67.248856
-Vertex 14:  X: 7.62039     Y: -87.419525     Z: -73.551239
-Vertex 15:  X: 35.907204     Y: -87.419525     Z: -68.656105
-Vertex 16:  X: 101.684875     Y: 94.590591     Z: -96.955391
-Vertex 17:  X: 131.767838     Y: 94.590591     Z: -54.281792
-Vertex 18:  X: 143.230377     Y: 94.590599     Z: -3.344275
-Vertex 19:  X: 134.327423     Y: 94.590607     Z: 48.102379
-Vertex 20:  X: 106.414383     Y: 94.590607     Z: 92.225876
-Vertex 21:  X: 63.740765     Y: 94.590607     Z: 122.3088
-Vertex 22:  X: 12.803238     Y: 94.590614     Z: 133.771301
-Vertex 23:  X: -38.643349     Y: 94.590607     Z: 124.868355
-Vertex 24:  X: -82.766846     Y: 94.590607     Z: 96.955307
-Vertex 25:  X: -112.849762     Y: 94.590607     Z: 54.281677
-Vertex 26:  X: -124.312256     Y: 94.590599     Z: 3.344152
-Vertex 27:  X: -115.409271     Y: 94.590591     Z: -48.102493
-Vertex 28:  X: -87.496201     Y: 94.590591     Z: -92.225967
-Vertex 29:  X: -44.822552     Y: 94.590591     Z: -122.308861
-Vertex 30:  X: 6.114983     Y: 94.590584     Z: -133.771332
-Vertex 31:  X: 57.561623     Y: 94.590591     Z: -124.868301
-Vertex 32:  X: 9.459057     Y: -87.419518     Z: 0.000008
-Vertex 33:  X: 9.459057     Y: 94.590599     Z: -0.000008
-Face list:
-Face 0:    A:0 B:1 C:32 AB:1 BC:0 CA:0
-Smoothing:  1
-Face 1:    A:1 B:2 C:32 AB:1 BC:0 CA:0
-Smoothing:  1
-Face 2:    A:2 B:3 C:32 AB:1 BC:0 CA:0
-Smoothing:  1
-Face 3:    A:3 B:4 C:32 AB:1 BC:0 CA:0
-Smoothing:  1
-Face 4:    A:4 B:5 C:32 AB:1 BC:0 CA:0
-Smoothing:  1
-Face 5:    A:5 B:6 C:32 AB:1 BC:0 CA:0
-Smoothing:  1
-Face 6:    A:6 B:7 C:32 AB:1 BC:0 CA:0
-Smoothing:  1
-Face 7:    A:7 B:8 C:32 AB:1 BC:0 CA:0
-Smoothing:  1
-Face 8:    A:8 B:9 C:32 AB:1 BC:0 CA:0
-Smoothing:  1
-Face 9:    A:9 B:10 C:32 AB:1 BC:0 CA:0
-Smoothing:  1
-Face 10:    A:10 B:11 C:32 AB:1 BC:0 CA:0
-
-                                     Page 1
-
-
-
-Smoothing:  1
-Face 11:    A:11 B:12 C:32 AB:1 BC:0 CA:0
-Smoothing:  1
-Face 12:    A:12 B:13 C:32 AB:1 BC:0 CA:0
-Smoothing:  1
-Face 13:    A:13 B:14 C:32 AB:1 BC:0 CA:0
-Smoothing:  1
-Face 14:    A:14 B:15 C:32 AB:1 BC:0 CA:0
-Smoothing:  1
-Face 15:    A:15 B:0 C:32 AB:1 BC:0 CA:0
-Smoothing:  1
-Face 16:    A:0 B:16 C:17 AB:1 BC:1 CA:0
-Smoothing:  2
-Face 17:    A:0 B:17 C:1 AB:0 BC:1 CA:1
-Smoothing:  2
-Face 18:    A:1 B:17 C:18 AB:1 BC:1 CA:0
-Smoothing:  3
-Face 19:    A:1 B:18 C:2 AB:0 BC:1 CA:1
-Smoothing:  3
-Face 20:    A:2 B:18 C:19 AB:1 BC:1 CA:0
-Smoothing:  4
-Face 21:    A:2 B:19 C:3 AB:0 BC:1 CA:1
-Smoothing:  4
-Face 22:    A:3 B:19 C:20 AB:1 BC:1 CA:0
-Smoothing:  5
-Face 23:    A:3 B:20 C:4 AB:0 BC:1 CA:1
-Smoothing:  5
-Face 24:    A:4 B:20 C:21 AB:1 BC:1 CA:0
-Smoothing:  6
-Face 25:    A:4 B:21 C:5 AB:0 BC:1 CA:1
-Smoothing:  6
-Face 26:    A:5 B:21 C:22 AB:1 BC:1 CA:0
-Smoothing:  7
-Face 27:    A:5 B:22 C:6 AB:0 BC:1 CA:1
-Smoothing:  7
-Face 28:    A:6 B:22 C:23 AB:1 BC:1 CA:0
-Smoothing:  8
-Face 29:    A:6 B:23 C:7 AB:0 BC:1 CA:1
-Smoothing:  8
-Face 30:    A:7 B:23 C:24 AB:1 BC:1 CA:0
-Smoothing:  9
-Face 31:    A:7 B:24 C:8 AB:0 BC:1 CA:1
-Smoothing:  9
-Face 32:    A:8 B:24 C:25 AB:1 BC:1 CA:0
-Smoothing:  10
-Face 33:    A:8 B:25 C:9 AB:0 BC:1 CA:1
-Smoothing:  10
-Face 34:    A:9 B:25 C:26 AB:1 BC:1 CA:0
-Smoothing:  11
-Face 35:    A:9 B:26 C:10 AB:0 BC:1 CA:1
-Smoothing:  11
-Face 36:    A:10 B:26 C:27 AB:1 BC:1 CA:0
-Smoothing:  12
-Face 37:    A:10 B:27 C:11 AB:0 BC:1 CA:1
-Smoothing:  12
-Face 38:    A:11 B:27 C:28 AB:1 BC:1 CA:0
-Smoothing:  13
-Face 39:    A:11 B:28 C:12 AB:0 BC:1 CA:1
-Smoothing:  13
-Face 40:    A:12 B:28 C:29 AB:1 BC:1 CA:0
-Smoothing:  14
-
-                                     Page 2
-
-
-
-Face 41:    A:12 B:29 C:13 AB:0 BC:1 CA:1
-Smoothing:  14
-Face 42:    A:13 B:29 C:30 AB:1 BC:1 CA:0
-Smoothing:  15
-Face 43:    A:13 B:30 C:14 AB:0 BC:1 CA:1
-Smoothing:  15
-Face 44:    A:14 B:30 C:31 AB:1 BC:1 CA:0
-Smoothing:  16
-Face 45:    A:14 B:31 C:15 AB:0 BC:1 CA:1
-Smoothing:  16
-Face 46:    A:15 B:31 C:16 AB:1 BC:1 CA:0
-Smoothing:  17
-Face 47:    A:15 B:16 C:0 AB:0 BC:1 CA:1
-Smoothing:  17
-Face 48:    A:16 B:33 C:17 AB:0 BC:0 CA:1
-Smoothing:  18
-Face 49:    A:17 B:33 C:18 AB:0 BC:0 CA:1
-Smoothing:  18
-Face 50:    A:18 B:33 C:19 AB:0 BC:0 CA:1
-Smoothing:  18
-Face 51:    A:19 B:33 C:20 AB:0 BC:0 CA:1
-Smoothing:  18
-Face 52:    A:20 B:33 C:21 AB:0 BC:0 CA:1
-Smoothing:  18
-Face 53:    A:21 B:33 C:22 AB:0 BC:0 CA:1
-Smoothing:  18
-Face 54:    A:22 B:33 C:23 AB:0 BC:0 CA:1
-Smoothing:  18
-Face 55:    A:23 B:33 C:24 AB:0 BC:0 CA:1
-Smoothing:  18
-Face 56:    A:24 B:33 C:25 AB:0 BC:0 CA:1
-Smoothing:  18
-Face 57:    A:25 B:33 C:26 AB:0 BC:0 CA:1
-Smoothing:  18
-Face 58:    A:26 B:33 C:27 AB:0 BC:0 CA:1
-Smoothing:  18
-Face 59:    A:27 B:33 C:28 AB:0 BC:0 CA:1
-Smoothing:  18
-Face 60:    A:28 B:33 C:29 AB:0 BC:0 CA:1
-Smoothing:  18
-Face 61:    A:29 B:33 C:30 AB:0 BC:0 CA:1
-Smoothing:  18
-Face 62:    A:30 B:33 C:31 AB:0 BC:0 CA:1
-Smoothing:  18
-Face 63:    A:31 B:33 C:16 AB:0 BC:0 CA:1
-Smoothing:  18
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-                                     Page 3
-
-
-
diff --git a/progs/ggi/gears.c b/progs/ggi/gears.c
deleted file mode 100644
index 2b3231d8ae..0000000000
--- a/progs/ggi/gears.c
+++ /dev/null
@@ -1,339 +0,0 @@
-
-/*
- * 3-D gear wheels.  This program is in the public domain.
- *
- * Brian Paul
- */
-
-/* Conversion to GLUT by Mark J. Kilgard */
-
-#include <math.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <GL/glut.h>
-
-#ifndef M_PI
-#define M_PI 3.14159265
-#endif
-
-static GLint T0 = 0;
-static GLint Frames = 0;
-
-
-/**
-
-  Draw a gear wheel.  You'll probably want to call this function when
-  building a display list since we do a lot of trig here.
- 
-  Input:  inner_radius - radius of hole at center
-          outer_radius - radius at center of teeth
-          width - width of gear
-          teeth - number of teeth
-          tooth_depth - depth of tooth
-
- **/
-
-static void
-gear(GLfloat inner_radius, GLfloat outer_radius, GLfloat width,
-  GLint teeth, GLfloat tooth_depth)
-{
-  GLint i;
-  GLfloat r0, r1, r2;
-  GLfloat angle, da;
-  GLfloat u, v, len;
-
-  r0 = inner_radius;
-  r1 = outer_radius - tooth_depth / 2.0;
-  r2 = outer_radius + tooth_depth / 2.0;
-
-  da = 2.0 * M_PI / teeth / 4.0;
-
-  glShadeModel(GL_FLAT);
-
-  glNormal3f(0.0, 0.0, 1.0);
-
-  /* draw front face */
-  glBegin(GL_QUAD_STRIP);
-  for (i = 0; i <= teeth; i++) {
-    angle = i * 2.0 * M_PI / teeth;
-    glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
-    glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
-    if (i < teeth) {
-      glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
-      glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5);
-    }
-  }
-  glEnd();
-
-  /* draw front sides of teeth */
-  glBegin(GL_QUADS);
-  da = 2.0 * M_PI / teeth / 4.0;
-  for (i = 0; i < teeth; i++) {
-    angle = i * 2.0 * M_PI / teeth;
-
-    glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
-    glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5);
-    glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), width * 0.5);
-    glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5);
-  }
-  glEnd();
-
-  glNormal3f(0.0, 0.0, -1.0);
-
-  /* draw back face */
-  glBegin(GL_QUAD_STRIP);
-  for (i = 0; i <= teeth; i++) {
-    angle = i * 2.0 * M_PI / teeth;
-    glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
-    glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
-    if (i < teeth) {
-      glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5);
-      glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
-    }
-  }
-  glEnd();
-
-  /* draw back sides of teeth */
-  glBegin(GL_QUADS);
-  da = 2.0 * M_PI / teeth / 4.0;
-  for (i = 0; i < teeth; i++) {
-    angle = i * 2.0 * M_PI / teeth;
-
-    glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5);
-    glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), -width * 0.5);
-    glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5);
-    glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
-  }
-  glEnd();
-
-  /* draw outward faces of teeth */
-  glBegin(GL_QUAD_STRIP);
-  for (i = 0; i < teeth; i++) {
-    angle = i * 2.0 * M_PI / teeth;
-
-    glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
-    glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
-    u = r2 * cos(angle + da) - r1 * cos(angle);
-    v = r2 * sin(angle + da) - r1 * sin(angle);
-    len = sqrt(u * u + v * v);
-    u /= len;
-    v /= len;
-    glNormal3f(v, -u, 0.0);
-    glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5);
-    glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5);
-    glNormal3f(cos(angle), sin(angle), 0.0);
-    glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), width * 0.5);
-    glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), -width * 0.5);
-    u = r1 * cos(angle + 3 * da) - r2 * cos(angle + 2 * da);
-    v = r1 * sin(angle + 3 * da) - r2 * sin(angle + 2 * da);
-    glNormal3f(v, -u, 0.0);
-    glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5);
-    glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5);
-    glNormal3f(cos(angle), sin(angle), 0.0);
-  }
-
-  glVertex3f(r1 * cos(0), r1 * sin(0), width * 0.5);
-  glVertex3f(r1 * cos(0), r1 * sin(0), -width * 0.5);
-
-  glEnd();
-
-  glShadeModel(GL_SMOOTH);
-
-  /* draw inside radius cylinder */
-  glBegin(GL_QUAD_STRIP);
-  for (i = 0; i <= teeth; i++) {
-    angle = i * 2.0 * M_PI / teeth;
-    glNormal3f(-cos(angle), -sin(angle), 0.0);
-    glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
-    glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
-  }
-  glEnd();
-
-}
-
-static GLfloat view_rotx = 20.0, view_roty = 30.0, view_rotz = 0.0;
-static GLint gear1, gear2, gear3;
-static GLfloat angle = 0.0;
-
-static void
-draw(void)
-{
-  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
-  glPushMatrix();
-  glRotatef(view_rotx, 1.0, 0.0, 0.0);
-  glRotatef(view_roty, 0.0, 1.0, 0.0);
-  glRotatef(view_rotz, 0.0, 0.0, 1.0);
-
-  glPushMatrix();
-  glTranslatef(-3.0, -2.0, 0.0);
-  glRotatef(angle, 0.0, 0.0, 1.0);
-  glCallList(gear1);
-  glPopMatrix();
-
-  glPushMatrix();
-  glTranslatef(3.1, -2.0, 0.0);
-  glRotatef(-2.0 * angle - 9.0, 0.0, 0.0, 1.0);
-  glCallList(gear2);
-  glPopMatrix();
-
-  glPushMatrix();
-  glTranslatef(-3.1, 4.2, 0.0);
-  glRotatef(-2.0 * angle - 25.0, 0.0, 0.0, 1.0);
-  glCallList(gear3);
-  glPopMatrix();
-
-  glPopMatrix();
-
-  glutSwapBuffers();
-
-  Frames++;
-  {
-     GLint t = glutGet(GLUT_ELAPSED_TIME);
-     if (t - T0 >= 5000) {
-        GLfloat seconds = (t - T0) / 1000.0;
-        GLfloat fps = Frames / seconds;
-        printf("%d frames in %g seconds = %g FPS\n", Frames, seconds, fps);
-        T0 = t;
-        Frames = 0;
-     }
-  }
-}
-
-
-static void
-idle(void)
-{
-  angle += 2.0;
-  glutPostRedisplay();
-}
-
-/* change view angle, exit upon ESC */
-/* ARGSUSED1 */
-static void
-key(unsigned char k, int x, int y)
-{
-  switch (k) {
-  case 'z':
-    view_rotz += 5.0;
-    break;
-  case 'Z':
-    view_rotz -= 5.0;
-    break;
-  case 27:  /* Escape */
-    exit(0); /* FIXME: Shutdown and free resources cleanly in ggiglut */
-    break;
-  default:
-    return;
-  }
-  glutPostRedisplay();
-}
-
-/* change view angle */
-/* ARGSUSED1 */
-static void
-special(int k, int x, int y)
-{
-  switch (k) {
-  case GLUT_KEY_UP:
-    view_rotx += 5.0;
-    break;
-  case GLUT_KEY_DOWN:
-    view_rotx -= 5.0;
-    break;
-  case GLUT_KEY_LEFT:
-    view_roty += 5.0;
-    break;
-  case GLUT_KEY_RIGHT:
-    view_roty -= 5.0;
-    break;
-  default:
-    return;
-  }
-  glutPostRedisplay();
-}
-
-/* new window size or exposure */
-static void
-reshape(int width, int height)
-{
-  GLfloat h = (GLfloat) height / (GLfloat) width;
-
-  glViewport(0, 0, (GLint) width, (GLint) height);
-  glMatrixMode(GL_PROJECTION);
-  glLoadIdentity();
-  glFrustum(-1.0, 1.0, -h, h, 5.0, 60.0);
-  glMatrixMode(GL_MODELVIEW);
-  glLoadIdentity();
-  glTranslatef(0.0, 0.0, -40.0);
-}
-
-static void
-init(void)
-{
-  static GLfloat pos[4] =
-  {5.0, 5.0, 10.0, 0.0};
-  static GLfloat red[4] =
-  {0.8, 0.1, 0.0, 1.0};
-  static GLfloat green[4] =
-  {0.0, 0.8, 0.2, 1.0};
-  static GLfloat blue[4] =
-  {0.2, 0.2, 1.0, 1.0};
-
-  glLightfv(GL_LIGHT0, GL_POSITION, pos);
-  glEnable(GL_CULL_FACE);
-  glEnable(GL_LIGHTING);
-  glEnable(GL_LIGHT0);
-  glEnable(GL_DEPTH_TEST);
-
-  /* make the gears */
-  gear1 = glGenLists(1);
-  glNewList(gear1, GL_COMPILE);
-  glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red);
-  gear(1.0, 4.0, 1.0, 20, 0.7);
-  glEndList();
-
-  gear2 = glGenLists(1);
-  glNewList(gear2, GL_COMPILE);
-  glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green);
-  gear(0.5, 2.0, 2.0, 10, 0.7);
-  glEndList();
-
-  gear3 = glGenLists(1);
-  glNewList(gear3, GL_COMPILE);
-  glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue);
-  gear(1.3, 2.0, 0.5, 10, 0.7);
-  glEndList();
-
-  glEnable(GL_NORMALIZE);
-}
-
-void 
-visible(int vis)
-{
-  if (vis == GLUT_VISIBLE)
-    glutIdleFunc(idle);
-  else
-    glutIdleFunc(NULL);
-}
-
-int main(int argc, char *argv[])
-{
-	glutInit(&argc, argv);
-	glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
-
-//	glutInitWindowPosition(0, 0);
-//	glutInitWindowSize(300, 300);
-	glutCreateWindow("Gears");
-	init();
-
-	glutDisplayFunc(draw);
-	glutReshapeFunc(reshape);
-	glutKeyboardFunc(key);
-	glutSpecialFunc(special);
-	glutVisibilityFunc(visible);
-
-	glutMainLoop();
-	
-	return 0;
-}
diff --git a/progs/ggi/gears2.c b/progs/ggi/gears2.c
deleted file mode 100644
index 9468c03177..0000000000
--- a/progs/ggi/gears2.c
+++ /dev/null
@@ -1,390 +0,0 @@
-/* gears.c */
-
-/*
- * 3-D gear wheels.  This program is in the public domain.
- *
- * Brian Paul
- * modified by Uwe Maurer (uwe_maurer@t-online.de)
- */
-
-#include <string.h>
-#include <math.h>
-#include <stdlib.h>
-#include <ggi/ggi.h>
-#include <GL/ggimesa.h>
-#ifndef M_PI
-#  define M_PI 3.14159265
-#endif
-
-
-ggi_visual_t vis;
-char text[100];
-int db_flag,vis_x, vis_y, vir_x, vir_y, gt;
-
-/*
- * Draw a gear wheel.  You'll probably want to call this function when
- * building a display list since we do a lot of trig here.
- *
- * Input:  inner_radius - radius of hole at center
- *         outer_radius - radius at center of teeth
- *         width - width of gear
- *         teeth - number of teeth
- *         tooth_depth - depth of tooth
- */
-static void gear( GLfloat inner_radius, GLfloat outer_radius, GLfloat width,
-		  GLint teeth, GLfloat tooth_depth )
-{
-   GLint i;
-   GLfloat r0, r1, r2;
-   GLfloat angle, da;
-   GLfloat u, v, len;
-
-   r0 = inner_radius;
-   r1 = outer_radius - tooth_depth/2.0;
-   r2 = outer_radius + tooth_depth/2.0;
-
-   da = 2.0*M_PI / teeth / 4.0;
-
-   glShadeModel( GL_FLAT );
-
-   glNormal3f( 0.0, 0.0, 1.0 );
-
-   /* draw front face */
-   glBegin( GL_QUAD_STRIP );
-   for (i=0;i<=teeth;i++) {
-      angle = i * 2.0*M_PI / teeth;
-      glVertex3f( r0*cos(angle), r0*sin(angle), width*0.5 );
-      glVertex3f( r1*cos(angle), r1*sin(angle), width*0.5 );
-      glVertex3f( r0*cos(angle), r0*sin(angle), width*0.5 );
-      glVertex3f( r1*cos(angle+3*da), r1*sin(angle+3*da), width*0.5 );
-   }
-   glEnd();
-
-   /* draw front sides of teeth */
-   glBegin( GL_QUADS );
-   da = 2.0*M_PI / teeth / 4.0;
-   for (i=0;i<teeth;i++) {
-      angle = i * 2.0*M_PI / teeth;
-
-      glVertex3f( r1*cos(angle),      r1*sin(angle),      width*0.5 );
-      glVertex3f( r2*cos(angle+da),   r2*sin(angle+da),   width*0.5 );
-      glVertex3f( r2*cos(angle+2*da), r2*sin(angle+2*da), width*0.5 );
-      glVertex3f( r1*cos(angle+3*da), r1*sin(angle+3*da), width*0.5 );
-   }
-   glEnd();
-
-
-   glNormal3f( 0.0, 0.0, -1.0 );
-
-   /* draw back face */
-   glBegin( GL_QUAD_STRIP );
-   for (i=0;i<=teeth;i++) {
-      angle = i * 2.0*M_PI / teeth;
-      glVertex3f( r1*cos(angle), r1*sin(angle), -width*0.5 );
-      glVertex3f( r0*cos(angle), r0*sin(angle), -width*0.5 );
-      glVertex3f( r1*cos(angle+3*da), r1*sin(angle+3*da), -width*0.5 );
-      glVertex3f( r0*cos(angle), r0*sin(angle), -width*0.5 );
-   }
-   glEnd();
-
-   /* draw back sides of teeth */
-   glBegin( GL_QUADS );
-   da = 2.0*M_PI / teeth / 4.0;
-   for (i=0;i<teeth;i++) {
-      angle = i * 2.0*M_PI / teeth;
-
-      glVertex3f( r1*cos(angle+3*da), r1*sin(angle+3*da), -width*0.5 );
-      glVertex3f( r2*cos(angle+2*da), r2*sin(angle+2*da), -width*0.5 );
-      glVertex3f( r2*cos(angle+da),   r2*sin(angle+da),   -width*0.5 );
-      glVertex3f( r1*cos(angle),      r1*sin(angle),      -width*0.5 );
-   }
-   glEnd();
-
-
-   /* draw outward faces of teeth */
-   glBegin( GL_QUAD_STRIP );
-   for (i=0;i<teeth;i++) {
-      angle = i * 2.0*M_PI / teeth;
-
-      glVertex3f( r1*cos(angle),      r1*sin(angle),       width*0.5 );
-      glVertex3f( r1*cos(angle),      r1*sin(angle),      -width*0.5 );
-      u = r2*cos(angle+da) - r1*cos(angle);
-      v = r2*sin(angle+da) - r1*sin(angle);
-      len = sqrt( u*u + v*v );
-      u /= len;
-      v /= len;
-      glNormal3f( v, -u, 0.0 );
-      glVertex3f( r2*cos(angle+da),   r2*sin(angle+da),    width*0.5 );
-      glVertex3f( r2*cos(angle+da),   r2*sin(angle+da),   -width*0.5 );
-      glNormal3f( cos(angle), sin(angle), 0.0 );
-      glVertex3f( r2*cos(angle+2*da), r2*sin(angle+2*da),  width*0.5 );
-      glVertex3f( r2*cos(angle+2*da), r2*sin(angle+2*da), -width*0.5 );
-      u = r1*cos(angle+3*da) - r2*cos(angle+2*da);
-      v = r1*sin(angle+3*da) - r2*sin(angle+2*da);
-      glNormal3f( v, -u, 0.0 );
-      glVertex3f( r1*cos(angle+3*da), r1*sin(angle+3*da),  width*0.5 );
-      glVertex3f( r1*cos(angle+3*da), r1*sin(angle+3*da), -width*0.5 );
-      glNormal3f( cos(angle), sin(angle), 0.0 );
-   }
-
-   glVertex3f( r1*cos(0), r1*sin(0), width*0.5 );
-   glVertex3f( r1*cos(0), r1*sin(0), -width*0.5 );
-
-   glEnd();
-
-
-   glShadeModel( GL_SMOOTH );
-
-   /* draw inside radius cylinder */
-   glBegin( GL_QUAD_STRIP );
-   for (i=0;i<=teeth;i++) {
-      angle = i * 2.0*M_PI / teeth;
-      glNormal3f( -cos(angle), -sin(angle), 0.0 );
-      glVertex3f( r0*cos(angle), r0*sin(angle), -width*0.5 );
-      glVertex3f( r0*cos(angle), r0*sin(angle), width*0.5 );
-   }
-   glEnd();
-      
-}
-
-
-static GLfloat view_rotx=20.0, view_roty=30.0, view_rotz=0.0;
-static GLint gear1, gear2, gear3;
-static GLfloat angle = 0.0;
-
-static GLuint limit;
-static GLuint count = 1;
-
-
-static void draw( void )
-{
-   static int n = 0;
-   glClearColor(0,0,0,0);
-   glClearIndex(0);
-   glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
-
-   glPushMatrix();
-   glRotatef( view_rotx, 1.0, 0.0, 0.0 );
-   glRotatef( view_roty, 0.0, 1.0, 0.0 );
-   glRotatef( view_rotz, 0.0, 0.0, 1.0 );
-
-   glPushMatrix();
-   glTranslatef( -3.0, -2.0, 0.0 );
-   glRotatef( angle, 0.0, 0.0, 1.0 );
-   glCallList(gear1);
-   glPopMatrix();
-
-   glPushMatrix();
-   glTranslatef( 3.1, -2.0, 0.0 );
-   glRotatef( -2.0*angle-9.0, 0.0, 0.0, 1.0 );
-   glCallList(gear2);
-   glPopMatrix();
-
-   glPushMatrix();
-   glTranslatef( -3.1, 4.2, 0.0 );
-   glRotatef( -2.0*angle-25.0, 0.0, 0.0, 1.0 );
-   glCallList(gear3);
-   glPopMatrix();
-
-   glPopMatrix();
-   glFlush();
-   glFinish();
-
-#if 0
-   ggiSetGCForeground(vis,255);
-   ggiPuts(vis,0,0,"Mesa  ->  GGI");
-   ggiPuts(vis,0,ggiGetInfo(vis)->mode->visible.y," Mesa -> GGI");
-
-   ggiPuts(vis,0,16,text);
-   ggiPuts(vis,0,ggiGetInfo(vis)->mode->visible.y+16,text);
-#endif
-
-    if(db_flag)
-   ggiMesaSwapBuffers();
- 			
-   count++;
-   if (count==limit) {
-      exit(1);
-   }
-    ++n;
-    /*
-   if (!(n%10)){
-	ggi_color rgb = { 10000, 10000, 10000 };
-	ggiSetSimpleMode(vis,vis_x+(n/10),vis_y+(n/10),db_flag?2:1, gt); 
-	glViewport(0, 0,vis_x+(n/10),vis_y+(n/10));
-	ggiSetGCForeground(vis, ggiMapColor(vis, &rgb));
-	ggiDrawBox(vis, 20, 20, 100, 100);
-	if(db_flag)
-	  ggiSetWriteFrame(vis, 1);
-    }
-    */
-}
-
-static void idle( void )
-{
-   angle += 2.0;
-   draw();
-}
-
-/* new window size or exposure */
-static void reshape( int width, int height )
-{
-   GLfloat  h = (GLfloat) height / (GLfloat) width;
-
-    if(db_flag)
-	glDrawBuffer(GL_BACK);
-    else
-	glDrawBuffer(GL_FRONT);
-   glViewport(0, 0, (GLint)width, (GLint)height);
-   glMatrixMode(GL_PROJECTION);
-   glLoadIdentity();
-   glFrustum( -1.0, 1.0, -h, h, 5.0, 60.0 );
-   glMatrixMode(GL_MODELVIEW);
-   glLoadIdentity();
-   glTranslatef( 0.0, 0.0, -40.0 );
-   glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
-
-}
-
-
-static void init( void )
-{
-   static GLfloat pos[4] = {5.0, 5.0, 10.0, 0.0 };
-   static GLfloat red[4] = {0.9, 0.9, 0.9, 1.0 };
-   static GLfloat green[4] = {0.0, 0.8, 0.9, 1.0 };
-   static GLfloat blue[4] = {0.2, 0.2, 1.0, 1.0 };
-
-   glLightfv( GL_LIGHT0, GL_POSITION, pos );
-   glEnable( GL_CULL_FACE );
-   glEnable( GL_LIGHTING );
-   glEnable( GL_LIGHT0 );
-   glEnable( GL_DEPTH_TEST );
-
-   /* make the gears */
-   gear1 = glGenLists(1);
-   glNewList(gear1, GL_COMPILE);
-   glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red );
-   glIndexi(1);
-   gear( 1.0, 4.0, 1.0, 20, 0.7 );
-   glEndList();
-
-   gear2 = glGenLists(1);
-   glNewList(gear2, GL_COMPILE);
-   glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green );
-  glIndexi(2);
-   gear( 0.5, 2.0, 2.0, 10, 0.7 );
-   glEndList();
-
-   gear3 = glGenLists(1);
-   glNewList(gear3, GL_COMPILE);
-   glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue );
-  glIndexi(3);
-   gear( 1.3, 2.0, 0.5, 10, 0.7 );
-   glEndList();
-
-   glEnable( GL_NORMALIZE );
-}
-
-static void usage(char *s)
-{
- printf("%s visible_x visible_y virtual_x virtual_y bpp db_flag\n",s);
- printf("example:\n");
- printf("%s 320 200 320 400 8 1\n",s);
- exit(1);
-}
-
-int main( int argc, char *argv[] )
-{
-	ggi_mesa_context_t ctx;
-	ggi_mode mode;
-	int bpp;
-
-	limit=0;
-
-	if (argc<7) usage(argv[0]);
-
-	vis_x=atoi(argv[1]);
-	vis_y=atoi(argv[2]);
-	vir_x=atoi(argv[3]);
-	vir_y=atoi(argv[4]);
-	bpp=atoi(argv[5]);
-	db_flag=atoi(argv[6]);
-
-	switch(bpp)
-	{
-		case 4: gt=GT_4BIT;break;
-		case 8: gt=GT_8BIT;break;
-		case 15:gt=GT_15BIT;break;
-		case 16:gt=GT_16BIT;break;
-		case 24:gt=GT_24BIT;break;
-		case 32:gt=GT_32BIT;break;
-		default:
-			printf("%i Bits per Pixel ???\n",bpp);
-			exit(1);
-	} 
-	sprintf(text,"%sx%s %i colors, RGB mode, %s",
-		argv[1],argv[2],1<<bpp,
-		(db_flag) ? "doublebuffer" : "no doublebuffer");
- 
-	if (ggiInit()<0) 
-	{
-		printf("ggiInit() failed\n");
-		exit(1);
-	}
- 
-	if (ggiMesaInit() < 0)
-	{
-		printf("ggiMesaInit failed\n");
-		exit(1);
-	}
-	
-	vis=ggiOpen(NULL);
-	if (vis==NULL)
-	{
-		printf("ggiOpen() failed\n");
-		exit(1);
-	}
-
-	if (ggiSetSimpleMode(vis,vis_x,vis_y,db_flag ? 2 : 1,gt)<0) 
-	{
-		printf("%s: can't set graphmode (%i %i %i %i)  %i BPP\n",
-			argv[0],vis_x,vis_y,vir_x,vir_y,bpp);
-		exit(1);
-	}
-
-	if (ggiMesaAttach(vis) < 0)
-	{
-		printf("ggiMesaAttach failed\n");
-		exit(1);
-	}
-	if (ggiMesaExtendVisual(vis, GL_FALSE, GL_FALSE, 16,
-	                        0, 0, 0, 0, 0, 1)  < 0)
-	{
-		printf ("GGIMesaSetVisual() failed\n");
-		exit(1);
-	}
-
-	ctx = ggiMesaCreateContext(vis); 
-	if (ctx==NULL)
-	{
-		printf("GGIMesaCreateContext() failed\n");
-		exit(1);
-	}
-
-	ggiMesaMakeCurrent(ctx, vis);
-	ggiGetMode(vis,&mode);
-
-	reshape(mode.visible.x,mode.visible.y);
-
-	init();
- 
-	while (!ggiKbhit(vis)) { /*sleep(1);*/ idle(); }
-
-	ggiMesaDestroyContext(ctx);
-	ggiClose(vis);
-
-	printf("%s\n",text);
-
-	ggiExit(); 
-	return 0;
-}
diff --git a/progs/ggi/sphere.asc b/progs/ggi/sphere.asc
deleted file mode 100644
index cf7cebf224..0000000000
--- a/progs/ggi/sphere.asc
+++ /dev/null
@@ -1,132 +0,0 @@
-Ambient light color: Red=0.039216 Green=0.039216 Blue=0.039216
-
-Named object: "Object01"
-Tri-mesh, Vertices: 20     Faces: 36
-Vertex list:
-Vertex 0:  X: -210     Y: -432.781738     Z: 180.000031
-Vertex 1:  X: -610.810303     Y: 144.260559     Z: 103.580154
-Vertex 2:  X: 56.586655     Y: 144.260544     Z: -128.902023
-Vertex 3:  X: -75.776352     Y: 144.260605     Z: 565.321838
-Vertex 4:  X: -462.815979     Y: -347.937683     Z: 131.797302
-Vertex 5:  X: -616.506042     Y: -126.67173     Z: 102.494209
-Vertex 6:  X: -41.847229     Y: -347.937683     Z: -14.843644
-Vertex 7:  X: 60.375015     Y: -126.671753     Z: -133.291641
-Vertex 8:  X: -125.336807     Y: -347.937653     Z: 423.046448
-Vertex 9:  X: -73.868958     Y: -126.671692     Z: 570.797424
-Vertex 10:  X: -448.353271     Y: 237.304672     Z: -92.34951
-Vertex 11:  X: -192.440964     Y: 237.304672     Z: -181.494431
-Vertex 12:  X: 145.038193     Y: 237.304672     Z: 109.754745
-Vertex 13:  X: 94.283768     Y: 237.304688     Z: 375.953766
-Vertex 14:  X: -326.684937     Y: 237.304733     Z: 522.594727
-Vertex 15:  X: -531.842834     Y: 237.304718     Z: 345.540588
-Vertex 16:  X: -331.419525     Y: -225.964966     Z: -168.564438
-Vertex 17:  X: 152.575485     Y: -225.964935     Z: 249.129868
-Vertex 18:  X: -451.155914     Y: -225.964905     Z: 459.434662
-Vertex 19:  X: -298.413483     Y: 423.31897     Z: 163.142761
-Face list:
-Face 0:    A:0 B:4 C:6 AB:1 BC:1 CA:1
-Face 1:    A:4 B:5 C:16 AB:1 BC:1 CA:1
-Face 2:    A:4 B:16 C:6 AB:1 BC:1 CA:1
-Face 3:    A:6 B:16 C:7 AB:1 BC:1 CA:1
-Face 4:    A:5 B:1 C:10 AB:1 BC:1 CA:1
-Face 5:    A:5 B:10 C:16 AB:1 BC:1 CA:1
-Face 6:    A:16 B:10 C:11 AB:1 BC:1 CA:1
-Face 7:    A:16 B:11 C:7 AB:1 BC:1 CA:1
-Face 8:    A:7 B:11 C:2 AB:1 BC:1 CA:1
-Face 9:    A:0 B:6 C:8 AB:1 BC:1 CA:1
-Face 10:    A:6 B:7 C:17 AB:1 BC:1 CA:1
-Face 11:    A:6 B:17 C:8 AB:1 BC:1 CA:1
-Face 12:    A:8 B:17 C:9 AB:1 BC:1 CA:1
-Face 13:    A:7 B:2 C:12 AB:1 BC:1 CA:1
-Face 14:    A:7 B:12 C:17 AB:1 BC:1 CA:1
-Face 15:    A:17 B:12 C:13 AB:1 BC:1 CA:1
-Face 16:    A:17 B:13 C:9 AB:1 BC:1 CA:1
-Face 17:    A:9 B:13 C:3 AB:1 BC:1 CA:1
-Face 18:    A:0 B:8 C:4 AB:1 BC:1 CA:1
-Face 19:    A:8 B:9 C:18 AB:1 BC:1 CA:1
-Face 20:    A:8 B:18 C:4 AB:1 BC:1 CA:1
-Face 21:    A:4 B:18 C:5 AB:1 BC:1 CA:1
-Face 22:    A:9 B:3 C:14 AB:1 BC:1 CA:1
-Face 23:    A:9 B:14 C:18 AB:1 BC:1 CA:1
-Face 24:    A:18 B:14 C:15 AB:1 BC:1 CA:1
-Face 25:    A:18 B:15 C:5 AB:1 BC:1 CA:1
-Face 26:    A:5 B:15 C:1 AB:1 BC:1 CA:1
-Face 27:    A:1 B:15 C:10 AB:1 BC:1 CA:1
-Face 28:    A:15 B:14 C:19 AB:1 BC:1 CA:1
-Face 29:    A:15 B:19 C:10 AB:1 BC:1 CA:1
-Face 30:    A:10 B:19 C:11 AB:1 BC:1 CA:1
-Face 31:    A:14 B:3 C:13 AB:1 BC:1 CA:1
-Face 32:    A:14 B:13 C:19 AB:1 BC:1 CA:1
-Face 33:    A:19 B:13 C:12 AB:1 BC:1 CA:1
-Face 34:    A:19 B:12 C:11 AB:1 BC:1 CA:1
-
-                                     Page 1
-
-
-
-Face 35:    A:11 B:12 C:2 AB:1 BC:1 CA:1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-                                     Page 2
-
-
-
diff --git a/progs/ggi/torus.asc b/progs/ggi/torus.asc
deleted file mode 100644
index 605a62baa4..0000000000
--- a/progs/ggi/torus.asc
+++ /dev/null
@@ -1,264 +0,0 @@
-Ambient light color: Red=0.039216 Green=0.039216 Blue=0.039216
-
-Named object: "Object01"
-Tri-mesh, Vertices: 40     Faces: 80
-Vertex list:
-Vertex 0:  X: -50.170624     Y: -0.000026     Z: -240.147842
-Vertex 1:  X: -80.584503     Y: -63.958851     Z: -205.014572
-Vertex 2:  X: -129.795166     Y: -39.528744     Z: -148.16774
-Vertex 3:  X: -129.795166     Y: 39.528721     Z: -148.16774
-Vertex 4:  X: -80.584503     Y: 63.958797     Z: -205.014572
-Vertex 5:  X: 85.963654     Y: -0.000002     Z: 31.490465
-Vertex 6:  X: 39.614838     Y: -63.958828     Z: 34.827602
-Vertex 7:  X: -35.37915     Y: -39.528728     Z: 40.227196
-Vertex 8:  X: -35.37912     Y: 39.528736     Z: 40.227188
-Vertex 9:  X: 39.614838     Y: 63.95882     Z: 34.827595
-Vertex 10:  X: -9.852051     Y: 0.000023     Z: 319.829254
-Vertex 11:  X: -44.985352     Y: -63.958805     Z: 289.415405
-Vertex 12:  X: -101.832199     Y: -39.528709     Z: 240.204758
-Vertex 13:  X: -101.832184     Y: 39.528755     Z: 240.204773
-Vertex 14:  X: -44.985352     Y: 63.958843     Z: 289.415405
-Vertex 15:  X: -281.490326     Y: 0.000035     Z: 455.963654
-Vertex 16:  X: -284.827484     Y: -63.958794     Z: 409.614868
-Vertex 17:  X: -290.227112     Y: -39.528702     Z: 334.62085
-Vertex 18:  X: -290.227112     Y: 39.528763     Z: 334.62088
-Vertex 19:  X: -284.827484     Y: 63.958855     Z: 409.614838
-Vertex 20:  X: -569.829163     Y: 0.000026     Z: 360.14798
-Vertex 21:  X: -539.415344     Y: -63.958801     Z: 325.014709
-Vertex 22:  X: -490.204712     Y: -39.528709     Z: 268.167847
-Vertex 23:  X: -490.204712     Y: 39.528755     Z: 268.167847
-Vertex 24:  X: -539.415344     Y: 63.958847     Z: 325.014679
-Vertex 25:  X: -705.963684     Y: 0.000002     Z: 88.509598
-Vertex 26:  X: -659.614807     Y: -63.958824     Z: 85.172462
-Vertex 27:  X: -584.62085     Y: -39.528725     Z: 79.77285
-Vertex 28:  X: -584.62085     Y: 39.52874     Z: 79.77285
-Vertex 29:  X: -659.614868     Y: 63.958824     Z: 85.172447
-Vertex 30:  X: -610.147827     Y: -0.000023     Z: -199.829361
-Vertex 31:  X: -575.014587     Y: -63.958847     Z: -169.415497
-Vertex 32:  X: -518.167725     Y: -39.528744     Z: -120.204819
-Vertex 33:  X: -518.167725     Y: 39.528721     Z: -120.204834
-Vertex 34:  X: -575.014587     Y: 63.958801     Z: -169.415497
-Vertex 35:  X: -338.509338     Y: -0.000035     Z: -335.963745
-Vertex 36:  X: -335.172241     Y: -63.958858     Z: -289.614868
-Vertex 37:  X: -329.772675     Y: -39.528751     Z: -214.620865
-Vertex 38:  X: -329.772675     Y: 39.528713     Z: -214.620865
-Vertex 39:  X: -335.172241     Y: 63.95879     Z: -289.614899
-Face list:
-Face 0:    A:0 B:6 C:1 AB:0 BC:1 CA:1
-Smoothing:  1
-Face 1:    A:0 B:5 C:6 AB:1 BC:1 CA:0
-Smoothing:  1
-Face 2:    A:1 B:7 C:2 AB:0 BC:1 CA:1
-Smoothing:  2
-Face 3:    A:1 B:6 C:7 AB:1 BC:1 CA:0
-Smoothing:  2
-Face 4:    A:2 B:8 C:3 AB:0 BC:1 CA:1
-Smoothing:  3
-Face 5:    A:2 B:7 C:8 AB:1 BC:1 CA:0
-Smoothing:  3
-Face 6:    A:3 B:9 C:4 AB:0 BC:1 CA:1
-Smoothing:  4
-Face 7:    A:3 B:8 C:9 AB:1 BC:1 CA:0
-
-                                     Page 1
-
-
-
-Smoothing:  4
-Face 8:    A:4 B:5 C:0 AB:0 BC:1 CA:1
-Smoothing:  5
-Face 9:    A:4 B:9 C:5 AB:1 BC:1 CA:0
-Smoothing:  5
-Face 10:    A:5 B:11 C:6 AB:0 BC:1 CA:1
-Smoothing:  6
-Face 11:    A:5 B:10 C:11 AB:1 BC:1 CA:0
-Smoothing:  6
-Face 12:    A:6 B:12 C:7 AB:0 BC:1 CA:1
-Smoothing:  7
-Face 13:    A:6 B:11 C:12 AB:1 BC:1 CA:0
-Smoothing:  7
-Face 14:    A:7 B:13 C:8 AB:0 BC:1 CA:1
-Smoothing:  8
-Face 15:    A:7 B:12 C:13 AB:1 BC:1 CA:0
-Smoothing:  8
-Face 16:    A:8 B:14 C:9 AB:0 BC:1 CA:1
-Smoothing:  9
-Face 17:    A:8 B:13 C:14 AB:1 BC:1 CA:0
-Smoothing:  9
-Face 18:    A:9 B:10 C:5 AB:0 BC:1 CA:1
-Smoothing:  10
-Face 19:    A:9 B:14 C:10 AB:1 BC:1 CA:0
-Smoothing:  10
-Face 20:    A:10 B:16 C:11 AB:0 BC:1 CA:1
-Smoothing:  11
-Face 21:    A:10 B:15 C:16 AB:1 BC:1 CA:0
-Smoothing:  11
-Face 22:    A:11 B:17 C:12 AB:0 BC:1 CA:1
-Smoothing:  12
-Face 23:    A:11 B:16 C:17 AB:1 BC:1 CA:0
-Smoothing:  12
-Face 24:    A:12 B:18 C:13 AB:0 BC:1 CA:1
-Smoothing:  13
-Face 25:    A:12 B:17 C:18 AB:1 BC:1 CA:0
-Smoothing:  13
-Face 26:    A:13 B:19 C:14 AB:0 BC:1 CA:1
-Smoothing:  14
-Face 27:    A:13 B:18 C:19 AB:1 BC:1 CA:0
-Smoothing:  14
-Face 28:    A:14 B:15 C:10 AB:0 BC:1 CA:1
-Smoothing:  15
-Face 29:    A:14 B:19 C:15 AB:1 BC:1 CA:0
-Smoothing:  15
-Face 30:    A:15 B:21 C:16 AB:0 BC:1 CA:1
-Smoothing:  16
-Face 31:    A:15 B:20 C:21 AB:1 BC:1 CA:0
-Smoothing:  16
-Face 32:    A:16 B:22 C:17 AB:0 BC:1 CA:1
-Smoothing:  17
-Face 33:    A:16 B:21 C:22 AB:1 BC:1 CA:0
-Smoothing:  17
-Face 34:    A:17 B:23 C:18 AB:0 BC:1 CA:1
-Smoothing:  18
-Face 35:    A:17 B:22 C:23 AB:1 BC:1 CA:0
-Smoothing:  18
-Face 36:    A:18 B:24 C:19 AB:0 BC:1 CA:1
-Smoothing:  19
-Face 37:    A:18 B:23 C:24 AB:1 BC:1 CA:0
-Smoothing:  19
-
-                                     Page 2
-
-
-
-Face 38:    A:19 B:20 C:15 AB:0 BC:1 CA:1
-Smoothing:  20
-Face 39:    A:19 B:24 C:20 AB:1 BC:1 CA:0
-Smoothing:  20
-Face 40:    A:20 B:26 C:21 AB:0 BC:1 CA:1
-Smoothing:  21
-Face 41:    A:20 B:25 C:26 AB:1 BC:1 CA:0
-Smoothing:  21
-Face 42:    A:21 B:27 C:22 AB:0 BC:1 CA:1
-Smoothing:  22
-Face 43:    A:21 B:26 C:27 AB:1 BC:1 CA:0
-Smoothing:  22
-Face 44:    A:22 B:28 C:23 AB:0 BC:1 CA:1
-Smoothing:  23
-Face 45:    A:22 B:27 C:28 AB:1 BC:1 CA:0
-Smoothing:  23
-Face 46:    A:23 B:29 C:24 AB:0 BC:1 CA:1
-Smoothing:  24
-Face 47:    A:23 B:28 C:29 AB:1 BC:1 CA:0
-Smoothing:  24
-Face 48:    A:24 B:25 C:20 AB:0 BC:1 CA:1
-Smoothing:  25
-Face 49:    A:24 B:29 C:25 AB:1 BC:1 CA:0
-Smoothing:  25
-Face 50:    A:25 B:31 C:26 AB:0 BC:1 CA:1
-Smoothing:  26
-Face 51:    A:25 B:30 C:31 AB:1 BC:1 CA:0
-Smoothing:  26
-Face 52:    A:26 B:32 C:27 AB:0 BC:1 CA:1
-Smoothing:  27
-Face 53:    A:26 B:31 C:32 AB:1 BC:1 CA:0
-Smoothing:  27
-Face 54:    A:27 B:33 C:28 AB:0 BC:1 CA:1
-Smoothing:  28
-Face 55:    A:27 B:32 C:33 AB:1 BC:1 CA:0
-Smoothing:  28
-Face 56:    A:28 B:34 C:29 AB:0 BC:1 CA:1
-Smoothing:  29
-Face 57:    A:28 B:33 C:34 AB:1 BC:1 CA:0
-Smoothing:  29
-Face 58:    A:29 B:30 C:25 AB:0 BC:1 CA:1
-Smoothing:  30
-Face 59:    A:29 B:34 C:30 AB:1 BC:1 CA:0
-Smoothing:  30
-Face 60:    A:30 B:36 C:31 AB:0 BC:1 CA:1
-Smoothing:  31
-Face 61:    A:30 B:35 C:36 AB:1 BC:1 CA:0
-Smoothing:  31
-Face 62:    A:31 B:37 C:32 AB:0 BC:1 CA:1
-Smoothing:  32
-Face 63:    A:31 B:36 C:37 AB:1 BC:1 CA:0
-Smoothing:  32
-Face 64:    A:32 B:38 C:33 AB:0 BC:1 CA:1
-Smoothing:  1
-Face 65:    A:32 B:37 C:38 AB:1 BC:1 CA:0
-Smoothing:  1
-Face 66:    A:33 B:39 C:34 AB:0 BC:1 CA:1
-Smoothing:  2
-Face 67:    A:33 B:38 C:39 AB:1 BC:1 CA:0
-Smoothing:  2
-Face 68:    A:34 B:35 C:30 AB:0 BC:1 CA:1
-
-                                     Page 3
-
-
-
-Smoothing:  3
-Face 69:    A:34 B:39 C:35 AB:1 BC:1 CA:0
-Smoothing:  3
-Face 70:    A:35 B:1 C:36 AB:0 BC:1 CA:1
-Smoothing:  4
-Face 71:    A:35 B:0 C:1 AB:1 BC:1 CA:0
-Smoothing:  4
-Face 72:    A:36 B:2 C:37 AB:0 BC:1 CA:1
-Smoothing:  5
-Face 73:    A:36 B:1 C:2 AB:1 BC:1 CA:0
-Smoothing:  5
-Face 74:    A:37 B:3 C:38 AB:0 BC:1 CA:1
-Smoothing:  6
-Face 75:    A:37 B:2 C:3 AB:1 BC:1 CA:0
-Smoothing:  6
-Face 76:    A:38 B:4 C:39 AB:0 BC:1 CA:1
-Smoothing:  7
-Face 77:    A:38 B:3 C:4 AB:1 BC:1 CA:0
-Smoothing:  7
-Face 78:    A:39 B:0 C:35 AB:0 BC:1 CA:1
-Smoothing:  8
-Face 79:    A:39 B:4 C:0 AB:1 BC:1 CA:0
-Smoothing:  8
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-                                     Page 4
-
-
-
diff --git a/progs/ggi/tube.asc b/progs/ggi/tube.asc
deleted file mode 100644
index 0b5dd0d810..0000000000
--- a/progs/ggi/tube.asc
+++ /dev/null
@@ -1,396 +0,0 @@
-Ambient light color: Red=0.039216 Green=0.039216 Blue=0.039216
-
-Named object: "Object01"
-Tri-mesh, Vertices: 64     Faces: 128
-Vertex list:
-Vertex 0:  X: 61.483898     Y: 37.836231     Z: -70.94294
-Vertex 1:  X: 82.867447     Y: 37.836235     Z: -41.288902
-Vertex 2:  X: 91.275154     Y: 37.836239     Z: -5.70901
-Vertex 3:  X: 85.427025     Y: 37.836243     Z: 30.380013
-Vertex 4:  X: 66.213379     Y: 37.836243     Z: 61.483936
-Vertex 5:  X: 36.559322     Y: 37.836246     Z: 82.86747
-Vertex 6:  X: 0.979424     Y: 37.836246     Z: 91.275154
-Vertex 7:  X: -35.109554     Y: 37.836246     Z: 85.42701
-Vertex 8:  X: -66.213478     Y: 37.836246     Z: 66.213356
-Vertex 9:  X: -87.597     Y: 37.836243     Z: 36.559303
-Vertex 10:  X: -96.004677     Y: 37.836239     Z: 0.979406
-Vertex 11:  X: -90.156517     Y: 37.836235     Z: -35.109615
-Vertex 12:  X: -70.942848     Y: 37.836235     Z: -66.213516
-Vertex 13:  X: -41.288776     Y: 37.836231     Z: -87.597023
-Vertex 14:  X: -5.708872     Y: 37.836231     Z: -96.004692
-Vertex 15:  X: 30.380142     Y: 37.836231     Z: -90.156502
-Vertex 16:  X: 61.483898     Y: -38.14529     Z: -70.942932
-Vertex 17:  X: 82.867447     Y: -38.145287     Z: -41.288895
-Vertex 18:  X: 91.275154     Y: -38.145283     Z: -5.709003
-Vertex 19:  X: 85.427025     Y: -38.145279     Z: 30.38002
-Vertex 20:  X: 66.213379     Y: -38.145279     Z: 61.483944
-Vertex 21:  X: 36.559322     Y: -38.145275     Z: 82.867477
-Vertex 22:  X: 0.979424     Y: -38.145275     Z: 91.275162
-Vertex 23:  X: -35.109554     Y: -38.145275     Z: 85.427017
-Vertex 24:  X: -66.213478     Y: -38.145275     Z: 66.213364
-Vertex 25:  X: -87.597     Y: -38.145279     Z: 36.559311
-Vertex 26:  X: -96.004677     Y: -38.145283     Z: 0.979412
-Vertex 27:  X: -90.156517     Y: -38.145287     Z: -35.109608
-Vertex 28:  X: -70.942848     Y: -38.145287     Z: -66.213516
-Vertex 29:  X: -41.288776     Y: -38.14529     Z: -87.597015
-Vertex 30:  X: -5.708872     Y: -38.14529     Z: -96.004684
-Vertex 31:  X: 30.380142     Y: -38.14529     Z: -90.156494
-Vertex 32:  X: 29.53923     Y: 37.836235     Z: -36.632011
-Vertex 33:  X: 40.224194     Y: 37.836239     Z: -21.814436
-Vertex 34:  X: 44.425369     Y: 37.836239     Z: -4.035822
-Vertex 35:  X: 41.503166     Y: 37.836239     Z: 13.997195
-Vertex 36:  X: 31.902466     Y: 37.836243     Z: 29.539249
-Vertex 37:  X: 17.084883     Y: 37.836243     Z: 40.224201
-Vertex 38:  X: -0.693734     Y: 37.836243     Z: 44.425365
-Vertex 39:  X: -18.726728     Y: 37.836243     Z: 41.503159
-Vertex 40:  X: -34.26878     Y: 37.836243     Z: 31.902454
-Vertex 41:  X: -44.953732     Y: 37.836239     Z: 17.084871
-Vertex 42:  X: -49.154892     Y: 37.836239     Z: -0.693745
-Vertex 43:  X: -46.232677     Y: 37.836239     Z: -18.726759
-Vertex 44:  X: -36.631962     Y: 37.836235     Z: -34.268806
-Vertex 45:  X: -21.814371     Y: 37.836235     Z: -44.953747
-Vertex 46:  X: -4.035751     Y: 37.836235     Z: -49.1549
-Vertex 47:  X: 13.997261     Y: 37.836235     Z: -46.23267
-Vertex 48:  X: 29.53923     Y: -38.145287     Z: -36.632004
-Vertex 49:  X: 40.224194     Y: -38.145283     Z: -21.814428
-Vertex 50:  X: 44.425369     Y: -38.145283     Z: -4.035816
-Vertex 51:  X: 41.503166     Y: -38.145283     Z: 13.997201
-Vertex 52:  X: 31.902466     Y: -38.145279     Z: 29.539257
-Vertex 53:  X: 17.084883     Y: -38.145279     Z: 40.224209
-Vertex 54:  X: -0.693734     Y: -38.145279     Z: 44.425373
-Vertex 55:  X: -18.726728     Y: -38.145279     Z: 41.503166
-
-                                     Page 1
-
-
-
-Vertex 56:  X: -34.26878     Y: -38.145279     Z: 31.902462
-Vertex 57:  X: -44.953732     Y: -38.145283     Z: 17.084879
-Vertex 58:  X: -49.154892     Y: -38.145283     Z: -0.693738
-Vertex 59:  X: -46.232677     Y: -38.145283     Z: -18.726751
-Vertex 60:  X: -36.631962     Y: -38.145287     Z: -34.268799
-Vertex 61:  X: -21.814371     Y: -38.145287     Z: -44.953739
-Vertex 62:  X: -4.035751     Y: -38.145287     Z: -49.154892
-Vertex 63:  X: 13.997261     Y: -38.145287     Z: -46.232662
-Face list:
-Face 0:    A:0 B:1 C:17 AB:1 BC:1 CA:0
-Smoothing:  1
-Face 1:    A:0 B:17 C:16 AB:0 BC:1 CA:1
-Smoothing:  1
-Face 2:    A:1 B:2 C:18 AB:1 BC:1 CA:0
-Smoothing:  2
-Face 3:    A:1 B:18 C:17 AB:0 BC:1 CA:1
-Smoothing:  2
-Face 4:    A:2 B:3 C:19 AB:1 BC:1 CA:0
-Smoothing:  3
-Face 5:    A:2 B:19 C:18 AB:0 BC:1 CA:1
-Smoothing:  3
-Face 6:    A:3 B:4 C:20 AB:1 BC:1 CA:0
-Smoothing:  4
-Face 7:    A:3 B:20 C:19 AB:0 BC:1 CA:1
-Smoothing:  4
-Face 8:    A:4 B:5 C:21 AB:1 BC:1 CA:0
-Smoothing:  5
-Face 9:    A:4 B:21 C:20 AB:0 BC:1 CA:1
-Smoothing:  5
-Face 10:    A:5 B:6 C:22 AB:1 BC:1 CA:0
-Smoothing:  6
-Face 11:    A:5 B:22 C:21 AB:0 BC:1 CA:1
-Smoothing:  6
-Face 12:    A:6 B:7 C:23 AB:1 BC:1 CA:0
-Smoothing:  7
-Face 13:    A:6 B:23 C:22 AB:0 BC:1 CA:1
-Smoothing:  7
-Face 14:    A:7 B:8 C:24 AB:1 BC:1 CA:0
-Smoothing:  8
-Face 15:    A:7 B:24 C:23 AB:0 BC:1 CA:1
-Smoothing:  8
-Face 16:    A:8 B:9 C:25 AB:1 BC:1 CA:0
-Smoothing:  9
-Face 17:    A:8 B:25 C:24 AB:0 BC:1 CA:1
-Smoothing:  9
-Face 18:    A:9 B:10 C:26 AB:1 BC:1 CA:0
-Smoothing:  10
-Face 19:    A:9 B:26 C:25 AB:0 BC:1 CA:1
-Smoothing:  10
-Face 20:    A:10 B:11 C:27 AB:1 BC:1 CA:0
-Smoothing:  11
-Face 21:    A:10 B:27 C:26 AB:0 BC:1 CA:1
-Smoothing:  11
-Face 22:    A:11 B:12 C:28 AB:1 BC:1 CA:0
-Smoothing:  12
-Face 23:    A:11 B:28 C:27 AB:0 BC:1 CA:1
-Smoothing:  12
-Face 24:    A:12 B:13 C:29 AB:1 BC:1 CA:0
-Smoothing:  13
-Face 25:    A:12 B:29 C:28 AB:0 BC:1 CA:1
-Smoothing:  13
-
-                                     Page 2
-
-
-
-Face 26:    A:13 B:14 C:30 AB:1 BC:1 CA:0
-Smoothing:  14
-Face 27:    A:13 B:30 C:29 AB:0 BC:1 CA:1
-Smoothing:  14
-Face 28:    A:14 B:15 C:31 AB:1 BC:1 CA:0
-Smoothing:  15
-Face 29:    A:14 B:31 C:30 AB:0 BC:1 CA:1
-Smoothing:  15
-Face 30:    A:15 B:0 C:16 AB:1 BC:1 CA:0
-Smoothing:  16
-Face 31:    A:15 B:16 C:31 AB:0 BC:1 CA:1
-Smoothing:  16
-Face 32:    A:32 B:49 C:33 AB:0 BC:1 CA:1
-Smoothing:  17
-Face 33:    A:32 B:48 C:49 AB:1 BC:1 CA:0
-Smoothing:  17
-Face 34:    A:33 B:50 C:34 AB:0 BC:1 CA:1
-Smoothing:  18
-Face 35:    A:33 B:49 C:50 AB:1 BC:1 CA:0
-Smoothing:  18
-Face 36:    A:34 B:51 C:35 AB:0 BC:1 CA:1
-Smoothing:  19
-Face 37:    A:34 B:50 C:51 AB:1 BC:1 CA:0
-Smoothing:  19
-Face 38:    A:35 B:52 C:36 AB:0 BC:1 CA:1
-Smoothing:  20
-Face 39:    A:35 B:51 C:52 AB:1 BC:1 CA:0
-Smoothing:  20
-Face 40:    A:36 B:53 C:37 AB:0 BC:1 CA:1
-Smoothing:  21
-Face 41:    A:36 B:52 C:53 AB:1 BC:1 CA:0
-Smoothing:  21
-Face 42:    A:37 B:54 C:38 AB:0 BC:1 CA:1
-Smoothing:  22
-Face 43:    A:37 B:53 C:54 AB:1 BC:1 CA:0
-Smoothing:  22
-Face 44:    A:38 B:55 C:39 AB:0 BC:1 CA:1
-Smoothing:  23
-Face 45:    A:38 B:54 C:55 AB:1 BC:1 CA:0
-Smoothing:  23
-Face 46:    A:39 B:56 C:40 AB:0 BC:1 CA:1
-Smoothing:  24
-Face 47:    A:39 B:55 C:56 AB:1 BC:1 CA:0
-Smoothing:  24
-Face 48:    A:40 B:57 C:41 AB:0 BC:1 CA:1
-Smoothing:  25
-Face 49:    A:40 B:56 C:57 AB:1 BC:1 CA:0
-Smoothing:  25
-Face 50:    A:41 B:58 C:42 AB:0 BC:1 CA:1
-Smoothing:  26
-Face 51:    A:41 B:57 C:58 AB:1 BC:1 CA:0
-Smoothing:  26
-Face 52:    A:42 B:59 C:43 AB:0 BC:1 CA:1
-Smoothing:  27
-Face 53:    A:42 B:58 C:59 AB:1 BC:1 CA:0
-Smoothing:  27
-Face 54:    A:43 B:60 C:44 AB:0 BC:1 CA:1
-Smoothing:  28
-Face 55:    A:43 B:59 C:60 AB:1 BC:1 CA:0
-Smoothing:  28
-Face 56:    A:44 B:61 C:45 AB:0 BC:1 CA:1
-
-                                     Page 3
-
-
-
-Smoothing:  29
-Face 57:    A:44 B:60 C:61 AB:1 BC:1 CA:0
-Smoothing:  29
-Face 58:    A:45 B:62 C:46 AB:0 BC:1 CA:1
-Smoothing:  30
-Face 59:    A:45 B:61 C:62 AB:1 BC:1 CA:0
-Smoothing:  30
-Face 60:    A:46 B:63 C:47 AB:0 BC:1 CA:1
-Smoothing:  31
-Face 61:    A:46 B:62 C:63 AB:1 BC:1 CA:0
-Smoothing:  31
-Face 62:    A:47 B:48 C:32 AB:0 BC:1 CA:1
-Smoothing:  32
-Face 63:    A:47 B:63 C:48 AB:1 BC:1 CA:0
-Smoothing:  32
-Face 64:    A:0 B:32 C:33 AB:0 BC:1 CA:0
-Smoothing:  1
-Face 65:    A:0 B:33 C:1 AB:0 BC:0 CA:1
-Smoothing:  1
-Face 66:    A:1 B:33 C:34 AB:0 BC:1 CA:0
-Smoothing:  1
-Face 67:    A:1 B:34 C:2 AB:0 BC:0 CA:1
-Smoothing:  1
-Face 68:    A:2 B:34 C:35 AB:0 BC:1 CA:0
-Smoothing:  1
-Face 69:    A:2 B:35 C:3 AB:0 BC:0 CA:1
-Smoothing:  1
-Face 70:    A:3 B:35 C:36 AB:0 BC:1 CA:0
-Smoothing:  1
-Face 71:    A:3 B:36 C:4 AB:0 BC:0 CA:1
-Smoothing:  1
-Face 72:    A:4 B:36 C:37 AB:0 BC:1 CA:0
-Smoothing:  1
-Face 73:    A:4 B:37 C:5 AB:0 BC:0 CA:1
-Smoothing:  1
-Face 74:    A:5 B:37 C:38 AB:0 BC:1 CA:0
-Smoothing:  1
-Face 75:    A:5 B:38 C:6 AB:0 BC:0 CA:1
-Smoothing:  1
-Face 76:    A:6 B:38 C:39 AB:0 BC:1 CA:0
-Smoothing:  1
-Face 77:    A:6 B:39 C:7 AB:0 BC:0 CA:1
-Smoothing:  1
-Face 78:    A:7 B:39 C:40 AB:0 BC:1 CA:0
-Smoothing:  1
-Face 79:    A:7 B:40 C:8 AB:0 BC:0 CA:1
-Smoothing:  1
-Face 80:    A:8 B:40 C:41 AB:0 BC:1 CA:0
-Smoothing:  1
-Face 81:    A:8 B:41 C:9 AB:0 BC:0 CA:1
-Smoothing:  1
-Face 82:    A:9 B:41 C:42 AB:0 BC:1 CA:0
-Smoothing:  1
-Face 83:    A:9 B:42 C:10 AB:0 BC:0 CA:1
-Smoothing:  1
-Face 84:    A:10 B:42 C:43 AB:0 BC:1 CA:0
-Smoothing:  1
-Face 85:    A:10 B:43 C:11 AB:0 BC:0 CA:1
-Smoothing:  1
-Face 86:    A:11 B:43 C:44 AB:0 BC:1 CA:0
-Smoothing:  1
-
-                                     Page 4
-
-
-
-Face 87:    A:11 B:44 C:12 AB:0 BC:0 CA:1
-Smoothing:  1
-Face 88:    A:12 B:44 C:45 AB:0 BC:1 CA:0
-Smoothing:  1
-Face 89:    A:12 B:45 C:13 AB:0 BC:0 CA:1
-Smoothing:  1
-Face 90:    A:13 B:45 C:46 AB:0 BC:1 CA:0
-Smoothing:  1
-Face 91:    A:13 B:46 C:14 AB:0 BC:0 CA:1
-Smoothing:  1
-Face 92:    A:14 B:46 C:47 AB:0 BC:1 CA:0
-Smoothing:  1
-Face 93:    A:14 B:47 C:15 AB:0 BC:0 CA:1
-Smoothing:  1
-Face 94:    A:15 B:47 C:32 AB:0 BC:1 CA:0
-Smoothing:  1
-Face 95:    A:15 B:32 C:0 AB:0 BC:0 CA:1
-Smoothing:  1
-Face 96:    A:16 B:17 C:49 AB:1 BC:0 CA:0
-Smoothing:  2
-Face 97:    A:16 B:49 C:48 AB:0 BC:1 CA:0
-Smoothing:  2
-Face 98:    A:17 B:18 C:50 AB:1 BC:0 CA:0
-Smoothing:  2
-Face 99:    A:17 B:50 C:49 AB:0 BC:1 CA:0
-Smoothing:  2
-Face 100:    A:18 B:19 C:51 AB:1 BC:0 CA:0
-Smoothing:  2
-Face 101:    A:18 B:51 C:50 AB:0 BC:1 CA:0
-Smoothing:  2
-Face 102:    A:19 B:20 C:52 AB:1 BC:0 CA:0
-Smoothing:  2
-Face 103:    A:19 B:52 C:51 AB:0 BC:1 CA:0
-Smoothing:  2
-Face 104:    A:20 B:21 C:53 AB:1 BC:0 CA:0
-Smoothing:  2
-Face 105:    A:20 B:53 C:52 AB:0 BC:1 CA:0
-Smoothing:  2
-Face 106:    A:21 B:22 C:54 AB:1 BC:0 CA:0
-Smoothing:  2
-Face 107:    A:21 B:54 C:53 AB:0 BC:1 CA:0
-Smoothing:  2
-Face 108:    A:22 B:23 C:55 AB:1 BC:0 CA:0
-Smoothing:  2
-Face 109:    A:22 B:55 C:54 AB:0 BC:1 CA:0
-Smoothing:  2
-Face 110:    A:23 B:24 C:56 AB:1 BC:0 CA:0
-Smoothing:  2
-Face 111:    A:23 B:56 C:55 AB:0 BC:1 CA:0
-Smoothing:  2
-Face 112:    A:24 B:25 C:57 AB:1 BC:0 CA:0
-Smoothing:  2
-Face 113:    A:24 B:57 C:56 AB:0 BC:1 CA:0
-Smoothing:  2
-Face 114:    A:25 B:26 C:58 AB:1 BC:0 CA:0
-Smoothing:  2
-Face 115:    A:25 B:58 C:57 AB:0 BC:1 CA:0
-Smoothing:  2
-Face 116:    A:26 B:27 C:59 AB:1 BC:0 CA:0
-Smoothing:  2
-Face 117:    A:26 B:59 C:58 AB:0 BC:1 CA:0
-
-                                     Page 5
-
-
-
-Smoothing:  2
-Face 118:    A:27 B:28 C:60 AB:1 BC:0 CA:0
-Smoothing:  2
-Face 119:    A:27 B:60 C:59 AB:0 BC:1 CA:0
-Smoothing:  2
-Face 120:    A:28 B:29 C:61 AB:1 BC:0 CA:0
-Smoothing:  2
-Face 121:    A:28 B:61 C:60 AB:0 BC:1 CA:0
-Smoothing:  2
-Face 122:    A:29 B:30 C:62 AB:1 BC:0 CA:0
-Smoothing:  2
-Face 123:    A:29 B:62 C:61 AB:0 BC:1 CA:0
-Smoothing:  2
-Face 124:    A:30 B:31 C:63 AB:1 BC:0 CA:0
-Smoothing:  2
-Face 125:    A:30 B:63 C:62 AB:0 BC:1 CA:0
-Smoothing:  2
-Face 126:    A:31 B:16 C:48 AB:1 BC:0 CA:0
-Smoothing:  2
-Face 127:    A:31 B:48 C:63 AB:0 BC:1 CA:0
-Smoothing:  2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-                                     Page 6
-
-
-
diff --git a/src/glut/ggi/Makefile b/src/glut/ggi/Makefile
deleted file mode 100644
index c23dfcac10..0000000000
--- a/src/glut/ggi/Makefile
+++ /dev/null
@@ -1,53 +0,0 @@
-# Makefile for GLUT for ggi
-
-TOP = ../../..
-
-include $(TOP)/configs/current
-
-
-##### MACROS #####
-
-GLUT_MAJOR = 3
-GLUT_MINOR = 7
-GLUT_TINY = 1
-
-SOURCES = \
-	ggiglut.c
-
-
-OBJECTS = $(SOURCES:.c=.o)
-
-
-##### RULES #####
-
-.c.o:
-	$(CC) -c -I$(TOP)/include $(CFLAGS) $(GLUT_CFLAGS) $<
-
-
-
-##### TARGETS #####
-
-default: $(TOP)/$(LIB_DIR)/$(GLUT_LIB_NAME)
-
-
-# Make the library
-$(TOP)/$(LIB_DIR)/$(GLUT_LIB_NAME): depend $(OBJECTS)
-	$(MKLIB) -o $(GLUT_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
-		-major $(GLUT_MAJOR) -minor $(GLUT_MINOR) \
-		-patch $(GLUT_TINY) $(MKLIB_OPTIONS) -install $(TOP)/$(LIB_DIR) \
-		$(GLUT_LIB_DEPS) $(OBJECTS)
-
-
-clean:
-	-rm -f *.o *~
-	-rm -f *.lo
-	-rm -f *.la
-	-rm -rf .libs
-
-
-depend: $(SOURCES)
-	rm -f depend
-	touch depend
-	$(MKDEP) $(MKDEP_OPTIONS) -I$(TOP)/include $(SOURCES)
-
-include depend
diff --git a/src/glut/ggi/debug.h b/src/glut/ggi/debug.h
deleted file mode 100644
index 09fa960670..0000000000
--- a/src/glut/ggi/debug.h
+++ /dev/null
@@ -1,259 +0,0 @@
-/* 
-******************************************************************************
-
-   GGIMesa debugging macros
-
-   Copyright (C) 1998-1999 Marcus Sundberg	[marcus@ggi-project.org]
-   Copyright (C) 1999-2000 Jon Taylor		[taylorj@ggi-project.org]
-  
-   Permission is hereby granted, free of charge, to any person obtaining a
-   copy of this software and associated documentation files (the "Software"),
-   to deal in the Software without restriction, including without limitation
-   the rights to use, copy, modify, merge, publish, distribute, sublicense,
-   and/or sell copies of the Software, and to permit persons to whom the
-   Software is furnished to do so, subject to the following conditions:
-
-   The above copyright notice and this permission notice shall be included in
-   all copies or substantial portions of the Software.
-
-   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
-   THE AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-   IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-******************************************************************************
-*/
-
-#ifndef _GGI_GLUT_INTERNAL_DEBUG_H
-#define _GGI_GLUT_INTERNAL_DEBUG_H
-
-#define DEBUG
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <ggi/types.h>
-#include <ggi/gg.h>
-
-
-__BEGIN_DECLS
-
-/* Exported variables */
-#ifdef BUILDING_GGIGLUT
-extern uint32     _ggiglutDebugState;
-extern int        _ggiglutDebugSync;
-#else
-IMPORTVAR uint32  _ggiglutDebugState;
-IMPORTVAR int     _ggiglutDebugSync;
-#endif
-
-__END_DECLS
-
-
-/* Debugging types
- * bit 0 is reserved! */
-
-#define GGIGLUTDEBUG_CORE		(1<<1)	/*   2 */
-#define GGIGLUTDEBUG_MODE		(1<<2)	/*   4 */
-#define GGIGLUTDEBUG_COLOR		(1<<3)	/*   8 */
-#define GGIGLUTDEBUG_DRAW		(1<<4)	/*  16 */
-#define GGIGLUTDEBUG_MISC		(1<<5)	/*  32 */
-#define GGIGLUTDEBUG_LIBS		(1<<6)	/*  64 */
-#define GGIGLUTDEBUG_EVENTS		(1<<7)	/* 128 */
-
-#define GGIGLUTDEBUG_ALL	0xffffffff
-
-#ifdef __GNUC__
-
-#ifdef DEBUG
-#define GGIGLUTDPRINT(form,args...)	   if (_ggiglutDebugState) { ggDPrintf(_ggiglutDebugSync, "GGIGLUT",form, ##args); }
-#define GGIGLUTDPRINT_CORE(form,args...)   if (_ggiglutDebugState & GGIGLUTDEBUG_CORE) { ggDPrintf(_ggiglutDebugSync,"GGIGLUT",form, ##args); }
-#define GGIGLUTDPRINT_MODE(form,args...)   if (_ggiglutDebugState & GGIGLUTDEBUG_MODE) { ggDPrintf(_ggiglutDebugSync,"GGIGLUT",form, ##args); }
-#define GGIGLUTDPRINT_COLOR(form,args...)  if (_ggiglutDebugState & GGIGLUTDEBUG_COLOR) { ggDPrintf(_ggiglutDebugSync,"GGIGLUT",form, ##args); }
-#define GGIGLUTDPRINT_DRAW(form,args...)   if (_ggiglutDebugState & GGIGLUTDEBUG_DRAW) { ggDPrintf(_ggiglutDebugSync,"GGIGLUT",form, ##args); }
-#define GGIGLUTDPRINT_MISC(form,args...)   if (_ggiglutDebugState & GGIGLUTDEBUG_MISC) { ggDPrintf(_ggiglutDebugSync,"GGIGLUT",form, ##args); }
-#define GGIGLUTDPRINT_LIBS(form,args...)   if (_ggiglutDebugState & GGIGLUTDEBUG_LIBS) { ggDPrintf(_ggiglutDebugSync,"GGIGLUT",form, ##args); }
-#define GGIGLUTDPRINT_EVENTS(form,args...) if (_ggiglutDebugState & GGIGLUTDEBUG_EVENTS) { ggDPrintf(_ggiglutDebugSync,"GGIGLUT",form, ##args); }
-#else /* DEBUG */
-#define GGIGLUTDPRINT(form,args...)		do{}while(0)
-#define GGIGLUTDPRINT_CORE(form,args...)	do{}while(0)
-#define GGIGLUTDPRINT_MODE(form,args...)	do{}while(0)
-#define GGIGLUTDPRINT_COLOR(form,args...)	do{}while(0)
-#define GGIGLUTDPRINT_DRAW(form,args...)	do{}while(0)
-#define GGIGLUTDPRINT_MISC(form,args...)	do{}while(0)
-#define GGIGLUTDPRINT_LIBS(form,args...)	do{}while(0)
-#define GGIGLUTDPRINT_EVENTS(form,args...)	do{}while(0)
-#endif /* DEBUG */
-
-#else /* __GNUC__ */
-
-__BEGIN_DECLS
-
-static inline void GGIGLUTDPRINT(const char *form,...)
-{
-#ifdef DEBUG
-	if (_ggiDebugState) {
-		va_list args;
-
-		fprintf(stderr, "GGIGLUT: ");
-		va_start(args, form);
-		vfprintf(stderr, form, args);
-		va_end(args);
-		if (_ggiglutDebugSync) fflush(stderr);
-	}
-#endif
-}
-
-static inline void GGIGLUTDPRINT_CORE(const char *form,...)
-{
-#ifdef DEBUG
-	if (_ggiDebugState & GGIDEBUG_CORE) {
-		va_list args;
-
-		fprintf(stderr, "GGIGLUT: ");
-		va_start(args, form);
-		vfprintf(stderr, form, args);
-		va_end(args);
-		if (_ggiglutDebugSync) fflush(stderr);
-	}
-#endif
-}
-
-static inline void GGIGLUTDPRINT_MODE(const char *form,...)
-{
-#ifdef DEBUG
-	if (_ggiDebugState & GGIDEBUG_MODE) {
-		va_list args;
-
-		fprintf(stderr, "GGIGLUT: ");
-		va_start(args, form);
-		vfprintf(stderr, form, args);
-		va_end(args);
-		if (_ggiglutDebugSync) fflush(stderr);
-	}
-#endif
-}
-
-static inline void GGIGLUTDPRINT_COLOR(const char *form,...)
-{
-#ifdef DEBUG
-	if (_ggiDebugState & GGIDEBUG_COLOR) {
-		va_list args;
-
-		fprintf(stderr, "GGIGLUT: ");
-		va_start(args, form);
-		vfprintf(stderr, form, args);
-		va_end(args);
-		if (_ggiglutDebugSync) fflush(stderr);
-	}
-#endif
-}
-
-static inline void GGIGLUTDPRINT_DRAW(const char *form,...)
-{
-#ifdef DEBUG
-	if (_ggiDebugState & GGIDEBUG_DRAW) {
-		va_list args;
-
-		fprintf(stderr, "GGIGLUT: ");
-		va_start(args, form);
-		vfprintf(stderr, form, args);
-		va_end(args);
-		if (_ggiglutDebugSync) fflush(stderr);
-	}
-#endif
-}
-
-static inline void GGIGLUTDPRINT_MISC(const char *form,...)
-{
-#ifdef DEBUG
-	if (_ggiDebugState & GGIDEBUG_MISC) {
-		va_list args;
-
-		fprintf(stderr, "GGIGLUT: ");
-		va_start(args, form);
-		vfprintf(stderr, form, args);
-		va_end(args);
-		if (_ggiglutDebugSync) fflush(stderr);
-	}
-#endif
-}
-
-static inline void GGIGLUTDPRINT_LIBS(const char *form,...)
-{
-#ifdef DEBUG
-	if (_ggiDebugState & GGIDEBUG_LIBS) {
-		va_list args;
-
-		fprintf(stderr, "GGIGLUT: ");
-		va_start(args, form);
-		vfprintf(stderr, form, args);
-		va_end(args);
-		if (_ggiglutDebugSync) fflush(stderr);
-	}
-#endif
-}
-
-static inline void GGIGLUTDPRINT_EVENTS(const char *form,...)
-{
-#ifdef DEBUG
-	if (_ggiDebugState & GGIDEBUG_EVENTS) {
-		va_list args;
-
-		fprintf(stderr, "GGIGLUT: ");
-		va_start(args, form);
-		vfprintf(stderr, form, args);
-		va_end(args);
-		if (_ggiglutDebugSync) fflush(stderr);
-	}
-#endif
-}
-
-__END_DECLS
-
-#endif /* __GNUC__ */
-
-#ifdef DEBUG
-#define GGIGLUT_ASSERT(x,str) \
-{ if (!(x)) { \
-	fprintf(stderr,"GGIGLUT:%s:%d: INTERNAL ERROR: %s\n",__FILE__,__LINE__,str); \
-	exit(1); \
-} }
-#define GGIGLUT_APPASSERT(x,str) \
-{ if (!(x)) { \
-	fprintf(stderr,"GGIGLUT:%s:%d: APPLICATION ERROR: %s\n",__FILE__,__LINE__,str); \
-	exit(1); \
-} }
-#else /* DEBUG */
-#define GGIGLUT_ASSERT(x,str)	do{}while(0)
-#define GGIGLUT_APPASSERT(x,str)	do{}while(0)
-#endif /* DEBUG */
-
-#ifdef DEBUG
-# define GGIGLUTD0(x)	x
-#else
-# define GGIGLUTD0(x)	/* empty */
-#endif
-
-#ifdef GGIGLUTDLEV
-# if GGIGLUTDLEV == 1
-#  define GGIGLUTD1(x)	x
-#  define GGIGLUTD2(x)	/* empty */
-#  define GGIGLUTD3(x)	/* empty */
-# elif GGIGLUTDLEV == 2
-#  define GGIGLUTD1(x)	x
-#  define GGIGLUTD2(x)	x
-#  define GGIGLUTD3(x)	/* empty */
-# elif GGIGLUTDLEV > 2
-#  define GGIGLUTD1(x)	x
-#  define GGIGLUTD2(x)	x
-#  define GGIGLUTD3(x)	x
-# endif
-#else
-# define GGIGLUTD1(x)	/* empty */
-# define GGIGLUTD2(x)	/* empty */
-# define GGIGLUTD3(x)	/* empty */
-#endif
-
-#endif /* _GGI_MESA_INTERNAL_DEBUG_H */
diff --git a/src/glut/ggi/ggiglut.c b/src/glut/ggi/ggiglut.c
deleted file mode 100644
index 2fe65a154c..0000000000
--- a/src/glut/ggi/ggiglut.c
+++ /dev/null
@@ -1,959 +0,0 @@
-/* **************************************************************************
- * ggiglut.c
- * **************************************************************************
- * 
- * Copyright (C) 1998 Uwe Maurer - uwe_maurer@t-online.de 
- * Copyright (C) 1999 James Simmons
- * Copyright (C) 1999 Jon Taylor
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- * 
- * **************************************************************************
- * To-do:
- * - Make everything use the portable ggi_* types
- * 
- */
-
-#define BUILDING_GGIGLUT
-
-#define WIDTH	640
-#define HEIGHT	480
-#define GRAPHTYPE_RGB	GT_16BIT
-#define GRAPHTYPE_INDEX	GT_8BIT
-
-/*************************************************************************/
-
-#include <GL/gl.h>
-#include <GL/glu.h>
-#include <GL/glut.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <string.h>
-#include "GL/ggimesa.h"
-#include "debug.h"
-
-#include <ggi/ggi.h>
-#include <ggi/gii.h>
-
-int _ggiglutDebugSync = 0;
-uint32 _ggiglutDebugState = 0;
-
-char *__glutProgramName = "GGI";
-
-static ggi_visual_t __glut_vis;
-
-static ggi_mesa_context_t __glut_ctx;
-
-//static int __glut_width = WIDTH;
-//static int __glut_height = HEIGHT;
-//static ggi_graphtype __glut_gt_rgb = GRAPHTYPE_RGB;
-//static ggi_graphtype __glut_gt_index = GRAPHTYPE_INDEX;
-static int __glut_width = GGI_AUTO;
-static int __glut_height = GGI_AUTO;
-static ggi_graphtype __glut_gt_rgb = GT_AUTO;
-static ggi_graphtype __glut_gt_index = GT_8BIT;
-static int __glut_init = GL_FALSE;
-
-static int mousex = WIDTH / 2;
-static int mousey = HEIGHT / 2;
-static int mouse_moved = GL_FALSE;
-static int mouse_down = GL_FALSE;
-static int mouse_showcursor = GL_FALSE;
-
-static void (*__glut_reshape)(int, int);
-static void (*__glut_display)(void);
-static void (*__glut_idle)(void);
-static void (*__glut_keyboard)(unsigned char, int, int);
-static void (*__glut_special)(int, int, int);
-static void (*__glut_mouse)(int, int, int, int);
-static void (*__glut_motion)(int, int);
-static void (*__glut_passive_motion)(int, int);
-static void (*__glut_visibility)(int);
-
-static unsigned int __glut_mode = GLUT_RGB | GLUT_SINGLE | GLUT_DEPTH;
-
-static int __glut_mod_keys = 0;
-
-static int __glut_redisplay = GL_FALSE;
-
-/* Menu */
-static int __glut_menubutton = -1;
-static int __glut_menuactive = GL_FALSE;
-
-#define MAX_ENTRIES	64
-
-typedef struct menu_s
-{
-	char *label[MAX_ENTRIES];
-	int value[MAX_ENTRIES];
-	struct menu_s * submenu[MAX_ENTRIES];
-	void (*func)(int);		
-	int max_strlen;
-	int num_entries;
-} menu_t;
-
-static menu_t *mainmenu;
-static menu_t *curmenu;
-static menu_t *activemenu;
-
-void glutInit(int *argc, char **argv)
-{
-	ggi_graphtype gt;
-	int i, k;
-	char *str;
-	
-	GGIGLUTDPRINT_CORE("glutInit() called\n");
-
-	#define REMOVE  {for (k=i;k<*argc-1;k++) argv[k]=argv[k+1];  \
-				(*argc)--; i--; }
-
-	if (__glut_init) return;
-	
-        str = getenv("GGIGLUT_DEBUG");
-	if (str != NULL) {
-		_ggiglutDebugState = atoi(str);
-		fprintf(stderr, "Debugging=%d\n", _ggiglutDebugState);
-		GGIGLUTDPRINT_CORE("Debugging=%d\n", _ggiglutDebugState);
-	}
-	
-	str = getenv("GGIGLUT_DEBUGSYNC");
-	if (str != NULL) {
-		_ggiglutDebugSync = 1;
-	}
-
-	if (argc && argv)
-	{
-
-		for (i = 1; i < *argc; i++)
-		{
-			if (strcmp(argv[i], "-mouse") == 0)
-			{
-				mouse_showcursor = GL_TRUE;	
-				REMOVE;
-			}
-			else
-			if (strcmp(argv[i], "-bpp") == 0 && (i + 1) < (*argc))
-			{
-				switch(atoi(argv[i + 1]))
-				{
-					case 4: gt = GT_4BIT; break;
-					case 8: gt = GT_8BIT; break;
-					case 15: gt = GT_15BIT; break;
-					case 16: gt = GT_16BIT; break;
-					case 24: gt = GT_24BIT; break;
-					case 32: gt = GT_32BIT; break;
-					default:
-					ggiPanic("\"%s\" bits per pixel?\n", argv[i+1]);
-				}
-				__glut_gt_rgb = __glut_gt_index = gt;
-				REMOVE;
-				REMOVE;
-			} 
-			else
-			if (strcmp(argv[i], "-size") == 0 && (i + 2) < (*argc))
-			{
-				__glut_width = atoi(argv[i + 1]);
-				__glut_height = atoi(argv[i + 2]);
-				REMOVE;
-				REMOVE;
-				REMOVE;
-			}
-		}
-	}
-	
-	if (ggiInit() < 0)
-	{
-		ggiPanic("ggiInit() failed!\n");
-	}
-	__glut_init = GL_TRUE;
-
-#undef REMOVE
-}
-
-void glutInitWindowPosition(int x, int y)
-{
-	GGIGLUTDPRINT_CORE("glutInitWindowPosition() called\n");
-}
-
-void glutInitWindowSize(int x, int y)
-{
-	GGIGLUTDPRINT_CORE("glutInitWindowsSize() called\n");
-}
-
-void glutFullScreen(void)
-{
-	GGIGLUTDPRINT_CORE("glutFullScreen() called\n");
-}
-
-void glutInitDisplayMode(unsigned int mode)
-{
-	GGIGLUTDPRINT_CORE("glutInitDisplayMode() called\n");
-	
-	__glut_mode = mode;
-}
-
-void glutInitDisplayString(const char *string)
-{
-	GGIGLUTDPRINT_CORE("glutInitDisplayString(%s) called\n", string);
-}
-
-int glutCreateWindow(const char *title)
-{
-	ggi_graphtype gt;
-	ggi_mode mode = 
-	{
-		1,
-		{ GGI_AUTO, GGI_AUTO },
-		{ GGI_AUTO, GGI_AUTO },
-		{ 0, 0 },
-		GT_AUTO,
-		{ GGI_AUTO, GGI_AUTO }
-	};
-	int frames;
-	int rgb;
-	int err;
-
-	GGIGLUTDPRINT_CORE("glutCreateWindow() called\n");
-	
-	if (!__glut_init) 
-	  glutInit(NULL, NULL);
-
-	GGIGLUTDPRINT("GGIGLUT: %s\n", title);
-
-	rgb = !(__glut_mode & GLUT_INDEX);
-	frames = (__glut_mode & GLUT_DOUBLE) ? 2 : 1;
-	
-	gt = (rgb) ? __glut_gt_rgb : __glut_gt_index;
-	
-	__glut_vis = ggiOpen(NULL);
-	if (__glut_vis == NULL) 
-	{
-	  ggiPanic("ggiOpen() failed!\n");
-	  /* return GL_FALSE; */
-	}
-	
-	ggiSetFlags(__glut_vis, GGIFLAG_ASYNC);
-	
-	ggiCheckMode(__glut_vis, &mode);
-	
-	err = ggiSetMode(__glut_vis, &mode);
-	if (err < 0) 
-	{
-	  ggiPanic("Can't set graphic mode!\n");
-	  /* return GL_FALSE; */
-	}
-	
-	if (ggiMesaExtendVisual(__glut_vis, GL_FALSE, GL_FALSE, 
-	                        16, 0, 0, 0, 0, 0, 1) < 0) 
-	{
-		ggiPanic("GGIMesaSetVisual failed!\n");
-	}
-	
-	__glut_ctx = ggiMesaCreateContext(__glut_vis);
-	
-	if (__glut_ctx == NULL) 
-	  ggiPanic("Can't create mesa-context\n");
-
-	ggiGetMode(__glut_vis, &mode);
-
-	
-	__glut_width = mode.visible.x;
-	__glut_height = mode.visible.y;
-	
-	mousex = mode.visible.x / 2;
-	mousey = mode.visible.y / 2;
-	
-	ggiMesaMakeCurrent(__glut_ctx, __glut_vis);
-	
-	if (__glut_reshape) 
-	  __glut_reshape(__glut_width, __glut_height);
-	
-	return GL_TRUE;
-}
-
-void glutReshapeFunc(void (*func)(int, int))
-{
-	GGIGLUTDPRINT_CORE("glutReshapeFunc() called\n");
-	
-	__glut_reshape = func;
-	if (__glut_vis && __glut_reshape) 
-	  __glut_reshape(__glut_width, __glut_height);
-}
-
-void glutKeyboardFunc(void (*keyboard)(unsigned char key, int x, int y))
-{
-	GGIGLUTDPRINT_CORE("glutKeyBoardFunc() called\n");
-
-	__glut_keyboard = keyboard;
-}
-
-int glutGetModifiers(void)
-{
-	GGIGLUTDPRINT_CORE("glutGetModifiers() called\n");
-
-	return __glut_mod_keys;
-}
-
-void glutEntryFunc(void (*func)(int state))
-{
-	GGIGLUTDPRINT_CORE("glutEntryFunc() called\n");
-}
-
-void glutVisibilitFunc(void (*func)(int state))
-{
-	GGIGLUTDPRINT_CORE("glutVisibilityFunc() called\n");
-}
-
-void glutTimerFunc(unsigned int millis, void (*func)(int value), int value)
-{
-	GGIGLUTDPRINT_CORE("glutTimerFunc() called\n");
-}
-
-void glutMenuStateFunc(void (*func)(int state))
-{
-	GGIGLUTDPRINT_CORE("glutMenuStateFunc() called\n");
-}
-
-int glutGet(GLenum type)
-{
-	GGIGLUTDPRINT_CORE("glutGet() called\n");
-	
-	switch(type)
-	{
-		case GLUT_WINDOW_X:	
-		return 0;
-		case GLUT_WINDOW_Y:
-		return 0;
-		case GLUT_WINDOW_WIDTH:
-		return __glut_width;
-		case GLUT_WINDOW_HEIGHT:
-		return __glut_height;
-		case GLUT_MENU_NUM_ITEMS:
-		if (curmenu) 
-		  return curmenu->num_entries;
-		else 
-		  return 0;
-		default:
-		GGIGLUTDPRINT("glutGet: unknown type %i\n", type);
-	}
-	return 0;
-}
-
-void glutSpecialFunc(void (*special)(int key, int x, int y))
-{
-	GGIGLUTDPRINT_CORE("glutSpecialFunc() called\n");
-	
-	__glut_special=special;
-}
-
-void glutDisplayFunc(void (*disp)(void))
-{
-	GGIGLUTDPRINT_CORE("glutDisplayFunc() called\n");
-	__glut_display=disp;
-}
-
-void glutSetColor(int index, GLfloat red, GLfloat green, GLfloat blue)
-{
-	ggi_color c;
-	GLfloat max;
-  
-	GGIGLUTDPRINT_CORE("glutSetColor() called\n");
-	
-	if (red > 1.0) red = 1.0;
-	if (red < 0.0) red = 0.0;
-	if (green > 1.0) green = 1.0;
-	if (green < 0.0) green = 0.0;
-	if (blue > 1.0) blue = 1.0;
-	if (blue < 0.0) blue = 0.0;
-  
-	max = (float)((1 << GGI_COLOR_PRECISION) - 1);
-	
-	c.r = (int)(max * red);
-	c.g = (int)(max * green);
-	c.b = (int)(max * blue);
-	ggiSetPalette(__glut_vis, index, 1, &c);
-}
-
-void glutPostRedisplay(void)
-{
-	GGIGLUTDPRINT_CORE("glutPostRedisplay() called\n");
-
-	__glut_redisplay = GL_TRUE;
-}
-
-void glutPostWindowRedisplay(int win)
-{
-	GGIGLUTDPRINT_CORE("glutPostWindowRedisplay() called\n");
-	
-	__glut_redisplay = GL_TRUE;
-}
-
-void glutSwapBuffers(void)
-{
-	GGIGLUTDPRINT_CORE("glutSwapBuffers() called\n");
-
-	ggiMesaSwapBuffers();
-}
-
-void glutIdleFunc(void (*idle)(void))
-{
-	GGIGLUTDPRINT_CORE("glutIdleFunc() called\n");
-	
-	__glut_idle = idle;
-}
-
-static void keyboard(ggi_event *ev)
-{
-	int sym;
-	int modifer = 0, key = 0;
-  
-	GGIGLUTDPRINT_CORE("keyboard() called\n");
-	
-	sym = ev->key.sym;
-  
-	modifer = ev->key.modifiers;
-	if (modifer == GII_KM_SHIFT)
-	  __glut_mod_keys |= GLUT_ACTIVE_SHIFT;
-	if (modifer == GII_KM_CTRL)
-	  __glut_mod_keys |= GLUT_ACTIVE_CTRL;
-	if (modifer == GII_KM_ALT)
-	  __glut_mod_keys |= GLUT_ACTIVE_ALT;
-
-	/* if (__glut_special && key) __glut_special(GII_KTYP(key),0,0); */
-  
-	if (__glut_keyboard) 
-//	  __glut_keyboard(GII_UNICODE(sym), 0, 0);
-	  __glut_keyboard(sym, 0, 0);
-}
-
-static void mouseabs(ggi_event *ev)
-{
-	int oldx = mousex;
-	int oldy = mousey;
-  
-	mousex = ev->pmove.x;
-	mousey = ev->pmove.y;
-  
-	if (mousex < 0) mousex = 0;
-	if (mousey < 0) mousey = 0;
-	if (mousex >= __glut_width) mousex = __glut_width - 1;
-	if (mousey >= __glut_height) mousey = __glut_height - 1;
-	
-	if (mousex != oldx || mousey != oldy) mouse_moved = GL_TRUE;
-}
-
-static void mouse(ggi_event *ev)
-{
-	int oldx = mousex;
-	int oldy = mousey;
-  
-	GGIGLUTDPRINT_CORE("mouse() called\n");
-	
-	mousex += ev->pmove.x >> 1;
-	mousey += ev->pmove.y >> 1;
-	
-	if (mousex < 0) mousex = 0;
-	if (mousey < 0) mousey = 0;
-	if (mousex >= __glut_width) mousex = __glut_width - 1;
-	if (mousey >= __glut_height) mousey = __glut_height - 1;
-	
-	if (mousex != oldx || mousey != oldy) mouse_moved = GL_TRUE;
-  
-}
-
-static void showmenu(void);
-static int clickmenu(void);
-static void updatemouse(void);
-static void drawmouse(void);
-
-static void mousemove(void)
-{
-	GGIGLUTDPRINT_CORE("mousemove() called\n");
-
-	if (mouse_moved) {
-		if (__glut_motion && mouse_down) {
-			__glut_motion(mousex,mousey);
-		}
-		
-		if (__glut_passive_motion && (!mouse_down)) {
-			__glut_passive_motion(mousex,mousey);
-		}
-		
-		if (__glut_menuactive) updatemouse();
-		mouse_moved=GL_FALSE;
-	}
-}
-
-static void button(ggi_event *ev)
-{
-	int i;
-	int btn[4] = {
-		0,
-		GLUT_LEFT_BUTTON,
-		GLUT_RIGHT_BUTTON,
-		GLUT_MIDDLE_BUTTON
-	};
-	
-	GGIGLUTDPRINT_CORE("button() called\n");
-	
-	mousemove();
-	
-	if (ev->pbutton.button <= 3) { /* GGI can have >3 buttons ! */ 
-		char state = ev->any.type == evPtrButtonPress ? GLUT_DOWN : GLUT_UP;
-		if (__glut_menuactive) {
-			if (state == GLUT_UP && clickmenu()) {
-				glutPostRedisplay();
-				__glut_menuactive = GL_FALSE;
-			}
-		} else
-		  if (btn[ev->pbutton.button] == __glut_menubutton) {
-			  __glut_menuactive = GL_TRUE;
-			  activemenu = mainmenu;
-			  showmenu();
-		  } else 
-		  if (__glut_mouse) {
-			  __glut_mouse(btn[ev->pbutton.button], state, mousex, mousey);
-		  }
-		if (state == GLUT_DOWN) {
-			mouse_down |= (1 << (ev->pbutton.button - 1));
-		}
-		else mouse_down &= ~( 1 << (ev->pbutton.button - 1));
-	}
-}
-
-void glutMainLoop(void)
-{
-	ggi_event ev;
-	ggi_event_mask evmask = (emKeyPress | emKeyRepeat | emPtrMove | emPtrButton);
-
-	GGIGLUTDPRINT_CORE("glutMainLoop() called\n");
-
-	ggiSetEventMask(__glut_vis, evmask);
-
-	glutPostRedisplay();
-	
-	if (__glut_visibility) 
-	  __glut_visibility(GLUT_VISIBLE);
-	
-	while (1) 
-	{
-		if (!__glut_menuactive) 
-		{
-			if (__glut_idle) 
-			  __glut_idle();
-			if (__glut_redisplay && __glut_display) 
-			{
-				__glut_redisplay = GL_FALSE;
-				__glut_display();
-			}
-		}
-		
-		while (1) 
-		{
-			struct timeval t = {0, 0};
-			
-			if (ggiEventPoll(__glut_vis, evmask, &t) == 0) 
-			  break;
-			
-			ggiEventRead(__glut_vis, &ev, evmask);
-      
-			switch (ev.any.type) 
-			{
-				case evKeyPress:
-				case evKeyRepeat:
-				keyboard(&ev);
-				break;
-				case evPtrAbsolute:
-				mouseabs(&ev);
-				break;
-				case evPtrRelative:
-				mouse(&ev);
-				break;
-				case evPtrButtonPress:
-				case evPtrButtonRelease:
-				button(&ev);
-				break;
-			}
-		}
-		mousemove();
-	}
-}
-
-static void showmenu()
-{
-	int y,i;
-	ggi_color col = { 0xffff, 0xffff, 0xffff };
-	
-	GGIGLUTDPRINT_CORE("showmenu() called\n");
-	
-	ggiSetGCForeground(__glut_vis,ggiMapColor(__glut_vis,&col));
-	ggiSetOrigin(__glut_vis,0,0);
-	
-	for (y = i = 0; i < activemenu->num_entries; i++, y += 8) {
-		ggiPuts(__glut_vis, 0, y, activemenu->label[i]);
-	}
-	drawmouse();
-}
-
-static int clickmenu(void)
-{
-	int i;
-	int w, h;
-  
-	GGIGLUTDPRINT_CORE("clickmenu() called\n");
-	
-	i = mousey / 8;
-  
-	if (i >= activemenu->num_entries) return GL_TRUE;
-	if (mousex >= 8 * strlen(activemenu->label[i])) return GL_TRUE;
-  
-	if (activemenu->submenu[i]) {
-		ggi_color col={0,0,0};
-		ggiSetGCForeground(__glut_vis,ggiMapColor(__glut_vis,&col));
-		h=activemenu->num_entries*8;
-		w=activemenu->max_strlen*8;
-		ggiDrawBox(__glut_vis,0,0,w,h);
-		activemenu=activemenu->submenu[i];
-		showmenu();
-		return GL_FALSE;
-	}
-	curmenu=activemenu;
-	activemenu->func(activemenu->value[i]);
-	return GL_TRUE;
-}
-
-static int oldx=-1;
-static int oldy=-1;
-static char buffer[16*16*4];
-
-static void updatemouse()
-{
-	GGIGLUTDPRINT_CORE("updatemouse() called\n");
-
-	ggiPutBox(__glut_vis,oldx,oldy,16,16,buffer);
-	drawmouse();
-}
-
-static void drawmouse()
-{
-	int x,y;
-	
-	GGIGLUTDPRINT_CORE("drawmouse() called\n");
-	
-	x=mousex-8;
-	if (x<0) x=0;
-	y=mousey-8;
-	if (y<0) y=0;
-	ggiGetBox(__glut_vis,x,y,16,16,buffer);
-	ggiDrawLine(__glut_vis,mousex-2,mousey,mousex+2,mousey);
-	ggiDrawLine(__glut_vis,mousex,mousey-2,mousex,mousey+2);
-	oldx=x;
-	oldy=y;
-}
-
-int glutCreateMenu(void(*func)(int))
-{
-	menu_t *m;
-	
-	GGIGLUTDPRINT_CORE("glutCreateMenu() called\n");
-	
-	m=malloc(sizeof(menu_t));
-	memset(m,0,sizeof(menu_t));
-	curmenu=m;
-	curmenu->func=func;
-	return (int)curmenu;
-}
-
-static void addEntry(const char *label,int value,menu_t *submenu)
-{
-	int i=curmenu->num_entries;
-	
-	GGIGLUTDPRINT_CORE("addEntry() called\n");
-	
-	/* printf("%i %i %s %p\n",i,value,label,submenu); */
-	if (i<MAX_ENTRIES) {
-		curmenu->label[i]=strdup(label);
-		curmenu->value[i]=value;
-		curmenu->submenu[i]=submenu;
-    
-		if (strlen(label)>curmenu->max_strlen)
-		  curmenu->max_strlen=strlen(label);
-		curmenu->num_entries++;
-	}
-}
-
-void glutAddMenuEntry(const char *label,int value)
-{
-	GGIGLUTDPRINT_CORE("glutAddMenuEntry() called\n");
-
-	addEntry(label,value,NULL);
-}
-
-void glutAddSubMenu(const char *label,int submenu)
-{
-	char text[100];
-	
-	GGIGLUTDPRINT_CORE("glutAddSubMenu() called\n");
-	
-	if (!curmenu) return;
-	strncpy(text,label,98);
-	text[98]=0;
-	text[strlen(text)+1]=0;
-	text[strlen(text)]='>';
-	
-	addEntry(text,0,(menu_t *) submenu);
-}
-
-void glutAttachMenu(int button)
-{
-	GGIGLUTDPRINT_CORE("glutAttachMenu() called\n");
-
-	mainmenu=curmenu;
-	__glut_menubutton=button;
-}
-
-void glutDetachMenu(int button)
-{
-	GGIGLUTDPRINT_CORE("glutDetachMenu() called\n");
-}
-
-void glutVisibilityFunc(void (*func)(int state))
-{
-	GGIGLUTDPRINT_CORE("glutVisibilityFunc() called\n");
-
-	__glut_visibility=func;
-}
-
-void glutMouseFunc(void (*mouse)(int, int, int, int))
-{
-	GGIGLUTDPRINT_CORE("glutMouseFunc() called\n");
-	
-	__glut_mouse=mouse;	
-}
-
-void glutMotionFunc(void (*motion)(int,int))
-{
-	GGIGLUTDPRINT_CORE("glutMotionFunc() called\n");
-	
-	__glut_motion=motion;
-}
-
-void glutPassiveMotionFunc(void (*motion)(int,int))
-{
-	GGIGLUTDPRINT_CORE("glutPassiveMotionFunc() called\n");
-	
-	__glut_passive_motion=motion;
-}
-
-void glutSetWindowTitle(const char *title)
-{
-	GGIGLUTDPRINT_CORE("glutSetWindowTitle() called\n");
-}
-
-void glutSetIconTitle(const char *title)
-{
-	GGIGLUTDPRINT_CORE("glutSetIconTitle() called\n");
-}
-
-void glutChangeToMenuEntry(int item,const char *label,int value)
-{
-	GGIGLUTDPRINT_CORE("glutChangeToMenuEntry() called\n");
-
-	if (item>0 && item<=curmenu->num_entries) {
-		item--;
-		free(curmenu->label[item]);
-		curmenu->label[item]=strdup(label);
-		curmenu->value[item]=value;
-		curmenu->submenu[item]=NULL;
-	}
-}
-void glutChangeToSubMenu(int item,const char *label,int submenu)
-{
-	GGIGLUTDPRINT_CORE("glutChengeToSubMenu() called\n");
-	
-	if (item>0 && item<=curmenu->num_entries) {
-		item--;
-		free(curmenu->label[item]);
-		curmenu->label[item]=strdup(label);
-		curmenu->value[item]=0;
-		curmenu->submenu[item]=(menu_t *)submenu;
-	}
-}
-
-void glutDestroyMenu(int menu)
-{
-	menu_t *m=(menu_t *)menu;
-	int i;
-	
-	GGIGLUTDPRINT_CORE("glutDestroyMenu() called\n");
-	
-	for (i=0;i<m->num_entries;i++) {
-		free(m->label[i]);
-	}
-	free(m);
-}
-
-int glutCreateSubWindow(int win,int x,int y,int w,int h)
-{
-	GGIGLUTDPRINT_CORE("glutCreateSubWindow() called\n");
-
-	return 0;
-}
-
-void glutDestroyWindow(int win)
-{
-	GGIGLUTDPRINT_CORE("glutDestroyWindow() called\n");
-}
-
-int glutGetWindow(void)
-{
-	GGIGLUTDPRINT_CORE("glutGetWindow() called\n");
-	
-	return 0;
-}
-
-void glutSetWindow(int win)
-{
-	GGIGLUTDPRINT_CORE("glutSetWindow() called\n");
-}
-
-void glutPositionWindow(int x,int y)
-{
-	GGIGLUTDPRINT_CORE("glutPositionWindow() called\n");
-}
-
-void glutReshapeWindow(int x,int y)
-{
-	GGIGLUTDPRINT_CORE("glutReshapeWindow() called\n");
-}
-
-void glutPushWindow(void)
-{
-	GGIGLUTDPRINT_CORE("glutPushWindow() called\n");
-}
-
-void glutPopWindow(void)
-{
-	GGIGLUTDPRINT_CORE("glutPopWindow() called\n");
-}
-
-void glutIconifyWindow(void)
-{
-	GGIGLUTDPRINT_CORE("glutIconifyWindow() called\n");
-}
-
-void glutShowWindow()
-{
-	GGIGLUTDPRINT_CORE("glutShowWindow() called\n");
-}
-
-void glutHideWindow()
-{
-	GGIGLUTDPRINT_CORE("glutHideWindow() called\n");
-}
-
-void glutSetCursor(int cursor)
-{
-	GGIGLUTDPRINT_CORE("glutSetCursor() called\n");
-}
-
-void glutWarpPointer(int x,int y)
-{
-	GGIGLUTDPRINT_CORE("glutWarpPointer() called\n");
-}
-
-void glutEstablishOverlay(void)
-{
-	GGIGLUTDPRINT_CORE("glutEstablishOverlay() called\n");
-}
-
-void glutRemoveOverlay(void)
-{
-	GGIGLUTDPRINT_CORE("glutRemoveOverlay() called\n");
-}
-
-void glutUseLayer(GLenum layer)
-{
-	GGIGLUTDPRINT_CORE("glutUseLayer() called\n");
-}
-
-int glutLayerGet(GLenum type)
-{
-	GGIGLUTDPRINT_CORE("glutLayerGet() called\n");
-	return 0;
-}
-
-void glutPostOverlayRedisplay(void)
-{
-	GGIGLUTDPRINT_CORE("glutPostOverlayRedisplay() called\n");
-}
-
-void glutPostWindowOverlayRedisplay(int w)
-{
-	GGIGLUTDPRINT_CORE("glutPostWindowOverlayRedisplay() called\n");
-}
-
-void glutShowOverlay(void)
-{
-	GGIGLUTDPRINT_CORE("glutShowOverlay() called\n");
-}
-
-void glutHideOverlay(void)
-{
-	GGIGLUTDPRINT_CORE("glutHideOverlay() called\n");
-}
-
-int glutGetMenu(void)
-{
-	GGIGLUTDPRINT_CORE("glutGetMenu() called\n");
-	return 0;
-}
-
-void glutSetMenu(int menu)
-{
-	GGIGLUTDPRINT_CORE("glutSetMenu() called\n");
-}
-
-void glutRemoveMenuItem(int item)
-{
-	GGIGLUTDPRINT_CORE("glutRemoveMenuItem() called\n");
-}
-
-void glutSpaceBallMotionFunc(void (*func)(int key,int x,int y))
-{
-	GGIGLUTDPRINT_CORE("glutSpaceBallMotionFunc() called\n");
-}
-
-void glutSpaceBallRotateFunc(void (*func)(int x,int y,int z))
-{
-	GGIGLUTDPRINT_CORE("glutSpaceBallRotateFunc() called\n");
-}
-
-void glutSpaceBallButtonFunc(void (*func)(int button,int state))
-{
-	GGIGLUTDPRINT_CORE("glutSpaceBallButtonFunc() called\n");
-}
-
-void glutCopyColormap(int win)
-{
-	GGIGLUTDPRINT_CORE("glutCopyColormap() called\n");
-}
-
-int glutDeviceGet(GLenum param)
-{
-	GGIGLUTDPRINT_CORE("glutDeviceGet() called\n");
-	
-	return 0;
-}
diff --git a/src/mesa/drivers/ggi/default/.gitignore b/src/mesa/drivers/ggi/default/.gitignore
deleted file mode 100644
index c8a526b14d..0000000000
--- a/src/mesa/drivers/ggi/default/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-genkgi.conf
diff --git a/src/mesa/drivers/ggi/default/genkgi.conf.in b/src/mesa/drivers/ggi/default/genkgi.conf.in
deleted file mode 100644
index 02acad2a19..0000000000
--- a/src/mesa/drivers/ggi/default/genkgi.conf.in
+++ /dev/null
@@ -1,4 +0,0 @@
-# GGIMesa genkgi helper configuration
-.root: @ggi_libdir@/ggi/mesa/default
-
-tgt-fbdev-kgicon-d3dim-mesa	d3dim.so
diff --git a/src/mesa/drivers/ggi/default/genkgi.h b/src/mesa/drivers/ggi/default/genkgi.h
deleted file mode 100644
index 6d0963416f..0000000000
--- a/src/mesa/drivers/ggi/default/genkgi.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/* 
-******************************************************************************
-
-   GGIMesa - KGIcon specific overrides for fbcon-mesa
-   API header
-
-   Copyright (C) 1999 Jon Taylor [taylorj@ggi-project.org]
-
-   Permission is hereby granted, free of charge, to any person obtaining a
-   copy of this software and associated documentation files (the "Software"),
-   to deal in the Software without restriction, including without limitation
-   the rights to use, copy, modify, merge, publish, distribute, sublicense,
-   and/or sell copies of the Software, and to permit persons to whom the
-   Software is furnished to do so, subject to the following conditions:
-
-   The above copyright notice and this permission notice shall be included in
-   all copies or substantial portions of the Software.
-
-   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
-   THE AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-   IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-******************************************************************************
-*/
-
-#ifndef _GENKGI_MESA_H
-#define _GENKGI_MESA_H
-
-#undef KGI_USE_PPBUFS
-
-#include <unistd.h>
-#include <sys/mman.h>
-
-#include <ggi/internal/ggi-dl.h>
-#include <ggi/mesa/display_fbdev.h>
-#include <kgi/kgi.h>
-
-#ifndef MAP_FAILED
-#define MAP_FAILED ((void *)-1)
-#endif
-
-/* FIXME: LibGGI needs to export its genkgi.h */
-struct genkgi_priv
-{
-	ggi_gc *mapped_gc;
-	unsigned int gc_size;
-	ggifunc_drawline *drawline;
-	ggifunc_drawbox *drawbox;
-	ggifunc_fillscreen *fillscreen;
-	int fd_gc;
-	int close_gc;
-	int fd_kgicommand;
-	uint8 *mapped_kgicommand;
-	uint8 *kgicommand_ptr;
-	unsigned int kgicommand_buffersize;
-};
-
-#define GENKGI_PRIV(vis) ((struct genkgi_priv *)FBDEV_PRIV(vis)->accelpriv)
-
-extern ggifunc_getapi GGIMesa_genkgi_getapi;
-extern ggifunc_flush  GGIMesa_genkgi_flush;
-
-struct genkgi_priv_mesa
-{
-	char accel[100];
-	int have_accel;
-	void *accelpriv; /* Private data of subdrivers */
-	struct genkgi_priv *oldpriv; /* LibGGI's private data */
-};
-
-#define GENKGI_PRIV_MESA(vis) ((struct genkgi_priv_mesa *)FBDEV_PRIV_MESA(vis)->accelpriv)
-
-#endif /* _GENKHI_MESA_H */
diff --git a/src/mesa/drivers/ggi/default/genkgi_mode.c b/src/mesa/drivers/ggi/default/genkgi_mode.c
deleted file mode 100644
index f81d6a45bd..0000000000
--- a/src/mesa/drivers/ggi/default/genkgi_mode.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/* 
-******************************************************************************
-
-   display-fbdev-kgicon-generic-mesa
-
-   Copyright (C) 1999 Jon Taylor [taylorj@ggi-project.org]
-
-   Permission is hereby granted, free of charge, to any person obtaining a
-   copy of this software and associated documentation files (the "Software"),
-   to deal in the Software without restriction, including without limitation
-   the rights to use, copy, modify, merge, publish, distribute, sublicense,
-   and/or sell copies of the Software, and to permit persons to whom the
-   Software is furnished to do so, subject to the following conditions:
-
-   The above copyright notice and this permission notice shall be included in
-   all copies or substantial portions of the Software.
-
-   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
-   THE AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-   IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-******************************************************************************
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/ioctl.h>
-#include <sys/mman.h>
-
-#include <ggi/internal/ggi-dl.h>
-#include <ggi/mesa/ggimesa_int.h>
-#include <ggi/mesa/debug.h>
-#include "genkgi.h"
-
-int GGIMesa_genkgi_getapi(ggi_visual *vis, int num, char *apiname, char *arguments)
-{
-	struct genkgi_priv_mesa *priv = GENKGI_PRIV_MESA(vis);
-	
-	GGIMESADPRINT_CORE("Entered mesa_genkgi_getapi, num=%d\n", num);
-	
-	strcpy(arguments, "");
-
-	switch(num) 
-	{
-		case 0:
-		if (priv->have_accel)
-		{
-			strcpy(apiname, priv->accel);
-			return 0;
-		}
-		break;
-	}
-	return -1;
-}
-
-int GGIMesa_genkgi_flush(ggi_visual *vis, int x, int y, int w, int h, int tryflag)
-{
-	struct genkgi_priv_mesa *priv = GENKGI_PRIV_MESA(vis);
-	int junkval; 
-
-	priv->oldpriv->kgicommand_ptr += getpagesize(); 
-	(kgiu32)(priv->oldpriv->kgicommand_ptr) &= 0xfffff000;
-	junkval = *((int *)(priv->oldpriv->kgicommand_ptr));
-	
-	/* Check if we are now in the last page, and reset the
-	 * FIFO if so.  We can't use the last page to send
-	 * more commands, since there's no page after it that
-	 * we can touch to fault in the last page's commands.
-	 * 
-	 * FIXME: This will be replaced with a flush-and-reset handler
-	 * on the end-of-buffer pagefault at some point....
-	 * 
-	 */
-	if ((priv->oldpriv->kgicommand_ptr - priv->oldpriv->mapped_kgicommand)
-	    >= (priv->oldpriv->kgicommand_buffersize - getpagesize()))
-	{
-		munmap(priv->oldpriv->mapped_kgicommand, priv->oldpriv->kgicommand_buffersize);
-		if ((priv->oldpriv->mapped_kgicommand = 
-		     mmap(NULL, 
-			  priv->oldpriv->kgicommand_buffersize, 
-			  PROT_READ | PROT_WRITE,
-			  MAP_SHARED,
-			  priv->oldpriv->fd_kgicommand, 
-			  0)) == MAP_FAILED)
-		{
-			ggiPanic("Failed to remap kgicommand!");
-		}
-		priv->oldpriv->kgicommand_ptr = priv->oldpriv->mapped_kgicommand;
-	}
-	return 0;
-}
diff --git a/src/mesa/drivers/ggi/default/genkgi_visual.c b/src/mesa/drivers/ggi/default/genkgi_visual.c
deleted file mode 100644
index d7838cae6e..0000000000
--- a/src/mesa/drivers/ggi/default/genkgi_visual.c
+++ /dev/null
@@ -1,190 +0,0 @@
-/* 
-******************************************************************************
-
-   genkgi_visual.c: visual handling for the generic KGI helper
-   
-   Copyright (C) 1999 Jon Taylor [taylorj@ggi-project.org]
-
-   Permission is hereby granted, free of charge, to any person obtaining a
-   copy of this software and associated documentation files (the "Software"),
-   to deal in the Software without restriction, including without limitation
-   the rights to use, copy, modify, merge, publish, distribute, sublicense,
-   and/or sell copies of the Software, and to permit persons to whom the
-   Software is furnished to do so, subject to the following conditions:
-
-   The above copyright notice and this permission notice shall be included in
-   all copies or substantial portions of the Software.
-
-   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
-   THE AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-   IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-******************************************************************************
-*/
-
-#include <ggi/internal/ggi-dl.h>
-#include <ggi/mesa/ggimesa_int.h>
-#include <ggi/mesa/display_fbdev.h>
-#include <ggi/mesa/debug.h>
-#include "genkgi.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <errno.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-
-#ifdef HAVE_SYS_VT_H
-#include <sys/vt.h>
-#else
-#include <linux/vt.h>
-#endif
-#ifdef HAVE_LINUX_KDEV_T_H
-#include <linux/kdev_t.h>
-#endif
-#include <linux/tty.h>
-
-#define DEFAULT_FBNUM	0
-
-static char accel_prefix[] = "tgt-fbdev-kgicon-";
-#define PREFIX_LEN	(sizeof(accel_prefix))
-
-typedef struct {
-	int   async;
-	char *str;
-} accel_info;
-
-static accel_info accel_strings[] = 
-{
-	{ 0, "d3dim" },		/* Direct3D Immediate Mode     		*/
-};
-
-#define NUM_ACCELS	(sizeof(accel_strings)/sizeof(accel_info))
-
-/* FIXME: These should be defined in the makefile system */
-#define CONF_FILE "/usr/local/etc/ggi/mesa/targets/genkgi.conf"
-void *_configHandle;
-char confstub[512] = CONF_FILE;
-char *conffile = confstub;
-
-static int changed(ggi_visual_t vis, int whatchanged)
-{
-	GGIMESADPRINT_CORE("Entered ggimesa_genkgi_changed\n");
-	
-	switch (whatchanged)
-	{
-		case GGI_CHG_APILIST:
-		{
-			char api[256];
-			char args[256];
-			int i;
-			const char *fname;
-			ggi_dlhandle *lib;
-			
-			for (i = 0; ggiGetAPI(vis, i, api, args) == 0; i++)
-			{
-				strcat(api, "-mesa");
-				GGIMESADPRINT_CORE("ggimesa_genkgi_changed: api=%s, i=%d\n", api, i);
-				fname = ggMatchConfig(_configHandle, api, NULL);
-				if (fname == NULL)
-				{
-					/* No special implementation for this sublib */
-					continue;
-				}
-				
-				lib = ggiExtensionLoadDL(vis, fname, args, NULL);
-			}
-		} 
-		break;
-	}
-	return 0;
-}
-
-static int GGIdlinit(ggi_visual *vis, struct ggi_dlhandle *dlh,
-			const char *args, void *argptr, uint32 *dlret)
-{
-	struct genkgi_priv_mesa *priv;
-	char libname[256], libargs[256];
-	int id, err;
-	struct stat junk;
-	ggifunc_getapi *oldgetapi;
-
-	GGIMESADPRINT_CORE("display-fbdev-kgicon-mesa: GGIdlinit start\n");
-	
-	GENKGI_PRIV_MESA(vis) = priv = malloc(sizeof(struct genkgi_priv_mesa));
-	if (priv == NULL) 
-	{
-		fprintf(stderr, "Failed to allocate genkgi private data\n");
-		return GGI_DL_ERROR;
-	}
-	
-	priv->oldpriv = GENKGI_PRIV(vis);
-#if 0
-	err = ggLoadConfig(conffile, &_configHandle);
-	if (err != GGI_OK)
-	{
-		gl_ggiPrint("display-fbdev-kgicon-mesa: Couldn't open %s\n", conffile);
-		return err;
-	}
-
-	/* Hack city here.  We need to probe the KGI driver properly for
-	 * suggest-strings to discover the acceleration type(s).
-	 */
-	priv->have_accel = 0;
-
-	if (stat("/proc/gfx0", &junk) == 0)
-	{
-		sprintf(priv->accel, "%s%s", accel_prefix, "d3dim");
-		priv->have_accel = 1;
-		GGIMESADPRINT_CORE("display-fbdev-kgicon-mesa: Using accel: \"%s\"\n", priv->accel);
-	}
-
-	/* Mode management */
-	vis->opdisplay->getapi = GGIMesa_genkgi_getapi;	
-	ggiIndicateChange(vis, GGI_CHG_APILIST);
-	
-	/* Give the accel sublibs a chance to set up a driver */
-	if (priv->have_accel == 1)
-	{
-		oldgetapi = vis->opdisplay->getapi;
-		vis->opdisplay->getapi = GGIMesa_genkgi_getapi;
-		changed(vis, GGI_CHG_APILIST);
-		/* If the accel sublibs didn't produce, back up
-		 * and keep looking */
-		if ((LIBGGI_MESAEXT(vis)->update_state == NULL) ||
-		    (LIBGGI_MESAEXT(vis)->setup_driver == NULL))
-		  vis->opdisplay->getapi = oldgetapi;
-	}
-	
-	LIBGGI_MESAEXT(vis)->update_state = genkgi_update_state;
-	LIBGGI_MESAEXT(vis)->setup_driver = genkgi_setup_driver;
-#endif	
-	GGIMESADPRINT_CORE("display-fbdev-kgicon-mesa: GGIdlinit finished\n");
-
-	*dlret = GGI_DL_OPDRAW;
-	return 0;
-}
-
-int MesaGGIdl_fbdev(int func, void **funcptr)
-{
-	switch (func) {
-		case GGIFUNC_open:
-			*funcptr = GGIopen;
-			return 0;
-		case GGIFUNC_exit:
-		case GGIFUNC_close:
-			*funcptr = NULL;
-			return 0;
-		default:
-			*funcptr = NULL;
-	}
-	return GGI_ENOTFOUND;
-}
-
-#include <ggi/internal/ggidlinit.h>
diff --git a/src/mesa/drivers/ggi/default/linear.c b/src/mesa/drivers/ggi/default/linear.c
deleted file mode 100644
index 9d29761ad5..0000000000
--- a/src/mesa/drivers/ggi/default/linear.c
+++ /dev/null
@@ -1,409 +0,0 @@
-/* GGI-Driver for MESA
- * 
- * Copyright (C) 1997  Uwe Maurer
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- * ---------------------------------------------------------------------
- * This code was derived from the following source of information:
- *
- * svgamesa.c and ddsample.c by Brian Paul
- * 
- */
-
-#include <ggi/mesa/ggimesa.h>
-#include <ggi/mesa/ggimesa_int.h>
-#include <ggi/mesa/debug.h>
-#include "swrast/swrast.h"
-
-#define RMASK ((1<<R)-1)
-#define GMASK ((1<<G)-1)
-#define BMASK ((1<<B)-1)
-
-#define RS (8-R)
-#define GS (8-G)
-#define BS (8-B)
-
-#define PACK(color) (((color[RCOMP]>>RS) << (G+B)) |  \
-                     ((color[GCOMP]>>GS) << B)     |  \
-                     ((color[BCOMP]>>BS)))
-
-#define FLIP(coord) (LIBGGI_VIRTY(ggi_ctx->ggi_visual) - (coord) - 1)
-
-
-/**********************************************************************/
-/*****            Write spans of pixels                           *****/
-/**********************************************************************/
-
-void GGIwrite_ci32_span(const GLcontext *ctx, GLuint n, GLint x, GLint y,
-			const GLuint ci[], const GLubyte mask[])
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-	FB_TYPE *fb;
-	fb = (FB_TYPE *)((char *)LIBGGI_CURWRITE(ggi_ctx->ggi_visual) +
-			 FLIP(y)*LIBGGI_FB_W_STRIDE(ggi_ctx->ggi_visual)) + x;
-
-	if (mask) {
-		while (n--) {
-			if (*mask++)
-				*fb = *ci;
-			fb++;
-			ci++;
-		}
-	} else {
-		while (n--) *fb++ = *ci++;
-	}
-}
-
-void GGIwrite_ci8_span(const GLcontext *ctx, GLuint n, GLint x, GLint y,
-		       const GLubyte ci[], const GLubyte mask[])
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-	FB_TYPE *fb;
-	fb = (FB_TYPE *)((char *)LIBGGI_CURWRITE(ggi_ctx->ggi_visual) +
-			 FLIP(y)*LIBGGI_FB_W_STRIDE(ggi_ctx->ggi_visual)) + x;
-
-	if (mask) {
-		while (n--) {
-			if (*mask++)
-				*fb = *ci;
-			fb++;
-			ci++;
-		}	
-	} else {
-		while (n--) *fb++ = *ci++;
-	}
-}
-
-
-void GGIwrite_rgba_span(const GLcontext *ctx, GLuint n, GLint x, GLint y,
-                        const GLchan rgba[][4], const GLubyte mask[])
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-	FB_TYPE *fb;
-	fb = (FB_TYPE *)((char *)LIBGGI_CURWRITE(ggi_ctx->ggi_visual) +
-			 FLIP(y)*LIBGGI_FB_W_STRIDE(ggi_ctx->ggi_visual)) + x;
-
-	if (mask) {
-		while (n--) {
-			if (*mask++)
-				*fb = PACK(rgba[0]);
-			fb++;
-			rgba++;
-		}
-	} else {
-		while (n--) {
-			*fb++ = PACK(rgba[0]);
-			rgba++;
-		}
-	}
-}
-
-void GGIwrite_rgb_span(const GLcontext *ctx, GLuint n, GLint x, GLint y,
-		       const GLchan rgba[][3], const GLubyte mask[])
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-	FB_TYPE *fb;
-	fb = (FB_TYPE *)((char *)LIBGGI_CURWRITE(ggi_ctx->ggi_visual) +
-			 FLIP(y)*LIBGGI_FB_W_STRIDE(ggi_ctx->ggi_visual)) + x;
-
-	if (mask) {
-		while (n--) {
-			if (*mask++)
-				*fb = PACK(rgba[0]);
-			fb++;
-			rgba++;
-		}
-	} else {
-		while (n--) {
-			*fb++ = PACK(rgba[0]);
-			rgba++;
-		}
-	}
-}
-
-
-void GGIwrite_mono_rgba_span(const GLcontext *ctx, GLuint n, GLint x, GLint y,
-			     const GLchan color[4], const GLubyte mask[])
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-	FB_TYPE *fb;
-	fb = (FB_TYPE *)((char *)LIBGGI_CURWRITE(ggi_ctx->ggi_visual) +
-			 FLIP(y)*LIBGGI_FB_W_STRIDE(ggi_ctx->ggi_visual)) + x;
-
-	if (mask) {
-		while (n--){
-			if (*mask++)
-				*fb = PACK(color);
-			++fb;
-		}
-	} else {
-		while (n--) 
-			*fb++ = PACK(color);
-
-	        /* Alternatively we could write a potentialy faster HLine
-		ggiSetGCForeground(ggi_ctx->ggi_visual, color);
-		ggiDrawHLine(ggi_ctx->ggi_visual,x,FLIP(y),n);
-		*/
-	}
-}
-
-void GGIwrite_mono_ci_span(const GLcontext *ctx, GLuint n, GLint x, GLint y,
-			   const GLuint ci, const GLubyte mask[])
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-	FB_TYPE *fb;
-	fb = (FB_TYPE *)((char *)LIBGGI_CURWRITE(ggi_ctx->ggi_visual) +
-			 FLIP(y)*LIBGGI_FB_W_STRIDE(ggi_ctx->ggi_visual)) + x;
-
-	if (mask){
-		while (n--){
-			if (*mask++)
-				*fb = ci;
-			++fb;
-		}
-	} else {
-		while (n--) 
-		        *fb++ = ci;
-
-	        /* Alternatively we could write a potentialy faster HLine
-		ggiSetGCForeground(ggi_ctx->ggi_visual, ci);
-		ggiDrawHLine(ggi_ctx->ggi_visual, x, FLIP(y), n);
-		*/
-	}
-}
-
-
-/**********************************************************************/
-/*****                 Read spans of pixels                       *****/
-/**********************************************************************/
-
-
-void GGIread_ci32_span(const GLcontext *ctx,
-		       GLuint n, GLint x, GLint y, GLuint ci[])
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-	FB_TYPE *fb;
-	fb = (FB_TYPE *)((char *)LIBGGI_CURWRITE(ggi_ctx->ggi_visual) +
-			 FLIP(y)*LIBGGI_FB_W_STRIDE(ggi_ctx->ggi_visual)) + x;
-
-	while (n--)
-		*ci++ = (GLuint)*fb++;
-}
-
-void GGIread_rgba_span(const GLcontext *ctx,
-		       GLuint n, GLint x, GLint y, GLchan rgba[][4])
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-	FB_TYPE color;
-	FB_TYPE *fb;
-	fb = (FB_TYPE *)((char *)LIBGGI_CURWRITE(ggi_ctx->ggi_visual) +
-			 FLIP(y)*LIBGGI_FB_W_STRIDE(ggi_ctx->ggi_visual)) + x;
-	
-	while (n--) {
-		color = *fb++;
-		rgba[0][RCOMP] = (GLubyte) (color>>(G+B))<<RS;  
-		rgba[0][GCOMP] = (GLubyte) ((color>>B)& ((1<<G)-1))<<GS;  
-		rgba[0][BCOMP] = (GLubyte) (color & ((1<<B)-1))<<BS;  
-		rgba[0][ACOMP] = 0;
-		rgba++;
-	}
-}
-
-/**********************************************************************/
-/*****                  Write arrays of pixels                    *****/
-/**********************************************************************/
-
-void GGIwrite_ci32_pixels(const GLcontext *ctx,
-			  GLuint n, const GLint x[], const GLint y[],
-			  const GLuint ci[], const GLubyte mask[])
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-	int stride = LIBGGI_FB_W_STRIDE(ggi_ctx->ggi_visual);
-	char *fb = (char *)LIBGGI_CURWRITE(ggi_ctx->ggi_visual);
-
-	while (n--) {
-		if (*mask++){
-			FB_TYPE *dst = (FB_TYPE*)(fb + FLIP(*y)*stride) + *x;
-			*dst = *ci;
-		}
-		ci++;
-		x++;
-		y++;
-	}
-}
-
-void GGIwrite_mono_ci_pixels(const GLcontext *ctx,
-			     GLuint n, const GLint x[], const GLint y[],
-			     GLuint ci, const GLubyte mask[])
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-	int stride = LIBGGI_FB_W_STRIDE(ggi_ctx->ggi_visual);
-	char *fb = (char *)LIBGGI_CURWRITE(ggi_ctx->ggi_visual);
-
-	while (n--) {
-		if (*mask++){
-			FB_TYPE *dst = (FB_TYPE*)(fb + FLIP(*y)*stride) + *x;
-			*dst = ci;
-		}
-		x++;
-		y++;
-	}
-}
-
-void GGIwrite_rgba_pixels(const GLcontext *ctx,
-			  GLuint n, const GLint x[], const GLint y[],
-			  const GLchan rgba[][4], const GLubyte mask[])
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-	int stride = LIBGGI_FB_W_STRIDE(ggi_ctx->ggi_visual);
-	char *fb = (char *)LIBGGI_CURWRITE(ggi_ctx->ggi_visual);
-
-	while (n--) {
-		if (*mask++){
-			FB_TYPE *dst = (FB_TYPE*)(fb + FLIP(*y)*stride) + *x;
-			*dst = PACK(rgba[0]);
-		}
-		x++;
-		y++;
-		rgba++;
-	}
-}
-
-void GGIwrite_mono_rgba_pixels(const GLcontext *ctx,
-			       GLuint n, const GLint x[], const GLint y[],
-			       const GLchan rgba[4], const GLubyte mask[])
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-	int stride = LIBGGI_FB_W_STRIDE(ggi_ctx->ggi_visual);
-	char *fb = (char *)LIBGGI_CURWRITE(ggi_ctx->ggi_visual);
-
-	while (n--) {
-		if (*mask++){
-			FB_TYPE *dst = (FB_TYPE*)(fb + FLIP(*y)*stride) + *x;
-			*dst = PACK(rgba);
-		}
-		
-		x++;
-		y++;
-	}
-}
-
-/**********************************************************************/
-/*****                   Read arrays of pixels                    *****/
-/**********************************************************************/
-
-void GGIread_ci32_pixels(const GLcontext *ctx,
-			 GLuint n, const GLint x[], const GLint y[],
-			 GLuint ci[], const GLubyte mask[])
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-	int stride = LIBGGI_FB_W_STRIDE(ggi_ctx->ggi_visual);
-	char *fb = (char *)LIBGGI_CURWRITE(ggi_ctx->ggi_visual);
-
-	while (n--) {
-		if (*mask++){
-			FB_TYPE *src = (FB_TYPE*)(fb + FLIP(*y)*stride) + *x;
-			*ci = *src;
-		}
-		ci++;
-		x++;
-		y++;
-	}
-}
-
-void GGIread_rgba_pixels(const GLcontext *ctx,
-			 GLuint n, const GLint x[], const GLint y[],
-			 GLubyte rgba[][4], const GLubyte mask[])
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-	int stride = LIBGGI_FB_W_STRIDE(ggi_ctx->ggi_visual);
-	char *fb = (char *)LIBGGI_CURWRITE(ggi_ctx->ggi_visual);
-	FB_TYPE color;
-
-	while (n--) {
-		if (*mask++) {	
-			FB_TYPE *src = (FB_TYPE*)(fb + FLIP(*y)*stride) + *x;
-			color = *src;
-
-			rgba[0][RCOMP] = (GLubyte)(color>>(G+B))<<RS;  
-			rgba[0][GCOMP] = (GLubyte)((color>>B)& ((1<<G)-1))<<GS;
-			rgba[0][BCOMP] = (GLubyte) (color & ((1<<B)-1))<<BS;  
-			rgba[0][ACOMP] = 0;
-		}	
-		x++;
-		y++;
-		rgba++;
-	}
-}
-
-void GGIset_buffer(GLcontext *ctx, GLframebuffer *buffer, GLenum mode)
-{
-}
-
-int GGIsetup_driver(ggi_mesa_context_t ggi_ctx)
-{
-	struct swrast_device_driver *swdd =
-		_swrast_GetDeviceDriverReference(ggi_ctx->gl_ctx);
-
-	GGIMESADPRINT_LIBS("linear_%d: GGIsetup_driver\n", sizeof(FB_TYPE)*8);
-	
-	swdd->WriteRGBASpan	= GGIwrite_rgba_span;
-	swdd->WriteRGBSpan	= GGIwrite_rgb_span;
-	swdd->WriteMonoRGBASpan	= GGIwrite_mono_rgba_span;
-	swdd->WriteRGBAPixels	= GGIwrite_rgba_pixels;
-	swdd->WriteMonoRGBAPixels = GGIwrite_mono_rgba_pixels;
-
-	swdd->WriteCI32Span       = GGIwrite_ci32_span;
-	swdd->WriteCI8Span       = GGIwrite_ci8_span;
-	swdd->WriteMonoCISpan   = GGIwrite_mono_ci_span;
-	swdd->WriteCI32Pixels     = GGIwrite_ci32_pixels;
-	swdd->WriteMonoCIPixels = GGIwrite_mono_ci_pixels;
-
-	swdd->ReadCI32Span = GGIread_ci32_span;
-	swdd->ReadRGBASpan = GGIread_rgba_span;
-	swdd->ReadCI32Pixels = GGIread_ci32_pixels;
-	swdd->ReadRGBAPixels = GGIread_rgba_pixels;
-
-	swdd->SetBuffer = GGIset_buffer;	
-
-	return 0;
-}
-
-static int GGIopen(ggi_visual_t vis,struct ggi_dlhandle *dlh,
-		   const char *args,void *argptr, uint32 *dlret)
-{
-	GGIMESADPRINT_CORE("linear_%d: GGIOpen\n", sizeof(FB_TYPE)*8);
-	LIBGGI_MESAEXT(vis)->setup_driver = GGIsetup_driver;
-
-	*dlret = GGI_DL_OPDRAW;
-	return 0;
-}
-
-int DLOPENFUNC(int func, void **funcptr)
-{
-	switch (func) {
-	case GGIFUNC_open:
-		*funcptr = GGIopen;
-		return 0;
-	case GGIFUNC_exit:
-	case GGIFUNC_close:
-		*funcptr = NULL;
-		return 0;
-	default:
-		*funcptr = NULL;
-	}
-	return GGI_ENOTFOUND;
-}
-
diff --git a/src/mesa/drivers/ggi/default/linear_15.c b/src/mesa/drivers/ggi/default/linear_15.c
deleted file mode 100644
index ead7cc5847..0000000000
--- a/src/mesa/drivers/ggi/default/linear_15.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* GGI-Driver for MESA
- * 
- * Copyright (C) 1997  Uwe Maurer
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- * ---------------------------------------------------------------------
- * This code was derived from the following source of information:
- *
- * svgamesa.c and ddsample.c by Brian Paul
- * 
- */
-
-#include <ggi/mesa/ggimesa.h>
-
-#define R 5
-#define G 5
-#define B 5
-
-#define FB_TYPE uint16
-#define FB_BITS 15
-#define DLOPENFUNC MesaGGIdl_linear_15
-
-#include "linear.c"
-
diff --git a/src/mesa/drivers/ggi/default/linear_16.c b/src/mesa/drivers/ggi/default/linear_16.c
deleted file mode 100644
index 6028699bbc..0000000000
--- a/src/mesa/drivers/ggi/default/linear_16.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* GGI-Driver for MESA
- * 
- * Copyright (C) 1997  Uwe Maurer
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- * ---------------------------------------------------------------------
- * This code was derived from the following source of information:
- *
- * svgamesa.c and ddsample.c by Brian Paul
- * 
- */
-
-#include <ggi/mesa/ggimesa.h>
-
-#define R 5
-#define G 6
-#define B 5
-
-#define FB_TYPE uint16
-#define FB_BITS 16
-#define DLOPENFUNC MesaGGIdl_linear_16
-
-#include "linear.c"
-
diff --git a/src/mesa/drivers/ggi/default/linear_24.c b/src/mesa/drivers/ggi/default/linear_24.c
deleted file mode 100644
index 7a2236f124..0000000000
--- a/src/mesa/drivers/ggi/default/linear_24.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* GGI-Driver for MESA
- * 
- * Copyright (C) 1997  Uwe Maurer
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- * ---------------------------------------------------------------------
- * This code was derived from the following source of information:
- *
- * svgamesa.c and ddsample.c by Brian Paul
- * 
- */
-
-#include <ggi/mesa/ggimesa.h>
-
-#define R 8
-#define G 8
-#define B 8
-
-#define FB_TYPE uint32
-#define FB_BITS 24
-#define DLOPENFUNC MesaGGIdl_linear_24
-
-#include "linear.c"
-
diff --git a/src/mesa/drivers/ggi/default/linear_32.c b/src/mesa/drivers/ggi/default/linear_32.c
deleted file mode 100644
index 7cbf945f35..0000000000
--- a/src/mesa/drivers/ggi/default/linear_32.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* GGI-Driver for MESA
- * 
- * Copyright (C) 1997  Uwe Maurer
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- * ---------------------------------------------------------------------
- * This code was derived from the following source of information:
- *
- * svgamesa.c and ddsample.c by Brian Paul
- * 
- */
-
-#include <ggi/mesa/ggimesa.h>
-
-#define R 8
-#define G 8
-#define B 8
-
-#define FB_TYPE uint32
-#define FB_BITS 32
-#define DLOPENFUNC MesaGGIdl_linear_32
-
-#include "linear.c"
-
diff --git a/src/mesa/drivers/ggi/default/linear_8.c b/src/mesa/drivers/ggi/default/linear_8.c
deleted file mode 100644
index 9c7b5d712f..0000000000
--- a/src/mesa/drivers/ggi/default/linear_8.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* GGI-Driver for MESA
- * 
- * Copyright (C) 1997  Uwe Maurer
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- * ---------------------------------------------------------------------
- * This code was derived from the following source of information:
- *
- * svgamesa.c and ddsample.c by Brian Paul
- * 
- */
-
-#include <ggi/mesa/ggimesa.h>
-
-#define R 3
-#define G 3
-#define B 2
-
-#define FB_TYPE uint8
-#define FB_BITS 8
-#define DLOPENFUNC MesaGGIdl_linear_8
-
-#include "linear.c"
-
diff --git a/src/mesa/drivers/ggi/default/stubs.c b/src/mesa/drivers/ggi/default/stubs.c
deleted file mode 100644
index 62722972b2..0000000000
--- a/src/mesa/drivers/ggi/default/stubs.c
+++ /dev/null
@@ -1,512 +0,0 @@
-/* GGI-Driver for MESA
- * 
- * Copyright (C) 1997  Uwe Maurer
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- * ---------------------------------------------------------------------
- * This code was derived from the following source of information:
- *
- * svgamesa.c and ddsample.c by Brian Paul
- * 
- */
-
-#include <stdio.h>
-
-#include <ggi/internal/ggi-dl.h>
-#include <ggi/mesa/ggimesa_int.h>
-#include <ggi/mesa/debug.h>
-
-#include "swrast/swrast.h"
-//#include "swrast_setup/swrast_setup.h"
-//#include "swrast/s_context.h"
-//#include "swrast/s_depth.h"
-//#include "swrast/s_triangle.h"
-
-#define FLIP(coord) (LIBGGI_MODE(ggi_ctx->ggi_visual)->visible.y-(coord)-1)
-
-/**********************************************************************/
-/*****            Write spans of pixels                           *****/
-/**********************************************************************/
-
-void GGIwrite_ci32_span(const GLcontext *ctx,
-                         GLuint n, GLint x, GLint y,
-                         const GLuint ci[],
-                         const GLubyte mask[] )
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-	y = FLIP(y);
-	if (mask)
-	{
-		while (n--) {
-			if (*mask++)
-				ggiPutPixel(ggi_ctx->ggi_visual, x, y, *ci);
-			x++;
-			ci++;
-		}
-	}
-	else
-	{
-		while (n--)
-			ggiPutPixel(ggi_ctx->ggi_visual, x++, y, *ci++);
-	}
-}
-
-void GGIwrite_ci8_span(const GLcontext *ctx,
-                         GLuint n, GLint x, GLint y,
-                         const GLubyte ci[],
-                         const GLubyte mask[] )
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-	y = FLIP(y);
-	if (mask)
-	{
-		while (n--) {
-			if (*mask++)
-				ggiPutPixel(ggi_ctx->ggi_visual, x, y, *ci);
-			x++;
-			ci++;
-		}
-	}
-	else
-	{
-		while (n--)
-			ggiPutPixel(ggi_ctx->ggi_visual, x++, y, *ci++);
-	}
-}
-
-void GGIwrite_mono_ci_span(const GLcontext *ctx, GLuint n, GLint x, GLint y,
-			   const GLuint ci, const GLubyte mask[])
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-	y = FLIP(y);
-	if (mask)
-	{
-		while (n--) {
-			if (*mask++)
-				ggiPutPixel(ggi_ctx->ggi_visual, x, y, ci);
-			x++;
-		}
-	}
-	else
-	{
-		while (n--)
-			ggiPutPixel(ggi_ctx->ggi_visual, x++, y, ci);
-	}
-}
-
-void GGIwrite_mono_rgba_span(const GLcontext *ctx, GLuint n, GLint x, GLint y,
-			     const GLchan rgba[4], const GLubyte mask[])
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-	ggi_color rgb;
-	ggi_pixel col;	
-
-	y = FLIP(y);
-
-	rgb.r = (uint16)(rgba[RCOMP]) << SHIFT;
-	rgb.g = (uint16)(rgba[GCOMP]) << SHIFT;
-	rgb.b = (uint16)(rgba[BCOMP]) << SHIFT;
-	col = ggiMapColor(ggi_ctx->ggi_visual, &rgb);
-
-	if (mask)
-	{
-		while (n--) {
-			if (*mask++)
-				ggiPutPixel(ggi_ctx->ggi_visual, x, y, col);
-			x++;
-		}
-	}
-	else
-	{
-		ggiDrawHLine(ggi_ctx->ggi_visual, x, y, n);
-	}
-}
-
-void GGIwrite_rgba_span( const GLcontext *ctx,
-                          GLuint n, GLint x, GLint y,
-                          const GLubyte rgba[][4],
-                          const GLubyte mask[])
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-	ggi_color rgb;
-	ggi_pixel col;	
-	y = FLIP(y);
-
-	if (mask)
-	{
-		while (n--) {
-			if (*mask++) 
-			{
-				rgb.r = (uint16)(rgba[0][RCOMP]) << SHIFT;
-				rgb.g = (uint16)(rgba[0][GCOMP]) << SHIFT;
-				rgb.b = (uint16)(rgba[0][BCOMP]) << SHIFT;
-				col = ggiMapColor(ggi_ctx->ggi_visual, &rgb);
-				ggiPutPixel(ggi_ctx->ggi_visual, x, y, col);
-			}
-			x++;
-			rgba++;
-		}
-	}
-	else
-	{
-		while (n--)
-		{
-			rgb.r = (uint16)(rgba[0][RCOMP]) << SHIFT;
-			rgb.g = (uint16)(rgba[0][GCOMP]) << SHIFT;
-			rgb.b = (uint16)(rgba[0][BCOMP]) << SHIFT;
-			col = ggiMapColor(ggi_ctx->ggi_visual, &rgb);
-			ggiPutPixel(ggi_ctx->ggi_visual, x++, y, col);
-			rgba++;
-		}
-	}
-}
-
-void GGIwrite_rgb_span( const GLcontext *ctx,
-                          GLuint n, GLint x, GLint y,
-                          const GLubyte rgba[][3],
-                          const GLubyte mask[] )
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-	ggi_color rgb;
-	ggi_pixel col;	
-	y = FLIP(y);
-
-	if (mask)
-	{
-		while (n--) {
-			if (*mask++) 
-			{
-				rgb.r = (uint16)(rgba[0][RCOMP]) << SHIFT;
-				rgb.g = (uint16)(rgba[0][GCOMP]) << SHIFT;
-				rgb.b = (uint16)(rgba[0][BCOMP]) << SHIFT;
-				col = ggiMapColor(ggi_ctx->ggi_visual, &rgb);
-				ggiPutPixel(ggi_ctx->ggi_visual, x, y, col);
-			}
-			x++;
-			rgba++;
-		}
-	}
-	else
-	{
-		while (n--)
-		{
-			rgb.r = (uint16)(rgba[0][RCOMP]) << SHIFT;
-			rgb.g = (uint16)(rgba[0][GCOMP]) << SHIFT;
-			rgb.b = (uint16)(rgba[0][BCOMP]) << SHIFT;
-			col = ggiMapColor(ggi_ctx->ggi_visual, &rgb);
-			ggiPutPixel(ggi_ctx->ggi_visual, x++, y, col);
-			rgba++;
-		}
-	}
-}
-
-
-
-/**********************************************************************/
-/*****                 Read spans of pixels                       *****/
-/**********************************************************************/
-
-
-void GGIread_ci32_span( const GLcontext *ctx,
-                         GLuint n, GLint x, GLint y, GLuint ci[])
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-	y = FLIP(y);
-	while (n--)
-		ggiGetPixel(ggi_ctx->ggi_visual, x++, y, ci++);
-}
-
-void GGIread_rgba_span( const GLcontext *ctx,
-                         GLuint n, GLint x, GLint y,
-                         GLubyte rgba[][4])
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-	ggi_color rgb;
-	ggi_pixel col;
-
-	y = FLIP(y);
-
-	while (n--)
-	{
-		ggiGetPixel(ggi_ctx->ggi_visual, x++, y, &col);
-		ggiUnmapPixel(ggi_ctx->ggi_visual, col, &rgb);
-		rgba[0][RCOMP] = (GLubyte) (rgb.r >> SHIFT);
-		rgba[0][GCOMP] = (GLubyte) (rgb.g >> SHIFT);
-		rgba[0][BCOMP] = (GLubyte) (rgb.b >> SHIFT);
-		rgba[0][ACOMP] = 0;
-		rgba++;
-	}
-}
-
-/**********************************************************************/
-/*****                  Write arrays of pixels                    *****/
-/**********************************************************************/
-
-void GGIwrite_ci32_pixels( const GLcontext *ctx,
-                            GLuint n, const GLint x[], const GLint y[],
-                            const GLuint ci[], const GLubyte mask[] )
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-	while (n--) {
-		if (*mask++)
-			ggiPutPixel(ggi_ctx->ggi_visual, *x, FLIP(*y), *ci);
-		ci++;
-		x++;
-		y++;
-	}
-}
-
-void GGIwrite_mono_ci_pixels(const GLcontext *ctx,
-			     GLuint n, const GLint x[], const GLint y[],
-			     GLuint ci, const GLubyte mask[])
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-	while (n--) {
-		if (*mask++)
-			ggiPutPixel(ggi_ctx->ggi_visual, *x, FLIP(*y), ci);
-		x++;
-		y++;
-	}
-}
-
-void GGIwrite_rgba_pixels( const GLcontext *ctx,
-                            GLuint n, const GLint x[], const GLint y[],
-                            const GLubyte rgba[][4],
-                            const GLubyte mask[] )
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-	ggi_pixel col;
-	ggi_color rgb;
-	while (n--) {
-		if (*mask++) {
-			rgb.r = (uint16)(rgba[0][RCOMP]) << SHIFT;
-			rgb.g = (uint16)(rgba[0][GCOMP]) << SHIFT;
-			rgb.b = (uint16)(rgba[0][BCOMP]) << SHIFT;
-			col = ggiMapColor(ggi_ctx->ggi_visual, &rgb);
-			ggiPutPixel(ggi_ctx->ggi_visual, *x, FLIP(*y), col);
-		}
-		x++;
-		y++;
-		rgba++;
-	}
-}
-
-void GGIwrite_mono_rgba_pixels(const GLcontext *ctx,
-			       GLuint n, const GLint x[], const GLint y[],
-			       const GLchan rgba[4], const GLubyte mask[])
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-	ggi_color rgb;
-	ggi_pixel col;	
-
-	rgb.r = (uint16)(rgba[RCOMP]) << SHIFT;
-	rgb.g = (uint16)(rgba[GCOMP]) << SHIFT;
-	rgb.b = (uint16)(rgba[BCOMP]) << SHIFT;
-	col = ggiMapColor(ggi_ctx->ggi_visual, &rgb);
-	
-	while (n--) {
-		if (*mask++)
-			ggiPutPixel(ggi_ctx->ggi_visual, *x, FLIP(*y), col);
-		x++;
-		y++;
-	}
-}
-
-/**********************************************************************/
-/*****                   Read arrays of pixels                    *****/
-/**********************************************************************/
-
-void GGIread_ci32_pixels( const GLcontext *ctx,
-                           GLuint n, const GLint x[], const GLint y[],
-                           GLuint ci[], const GLubyte mask[])
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-	while (n--) {
-		if (*mask++) 
-			ggiGetPixel(ggi_ctx->ggi_visual, *x, FLIP(*y), ci);
-		ci++;
-		x++;
-		y++;
-	}
-}
-
-void GGIread_rgba_pixels( const GLcontext *ctx,
-                           GLuint n, const GLint x[], const GLint y[],
-                           GLubyte rgba[][4],
-                           const GLubyte mask[] )
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-	ggi_color rgb;
-	ggi_pixel col;
-
-	while (n--)
-	{
-		if (*mask++)
-		{
-			ggiGetPixel(ggi_ctx->ggi_visual, *x, FLIP(*y), &col);
-			ggiUnmapPixel(ggi_ctx->ggi_visual, col, &rgb);
-			rgba[0][RCOMP] = rgb.r >> SHIFT; 
-			rgba[0][GCOMP] = rgb.g >> SHIFT;
-			rgba[0][BCOMP] = rgb.b >> SHIFT;
-			rgba[0][ACOMP] = 0;
-		}	
-		x++;
-		y++;
-		rgba++;
-	}
-}
-
-int GGIextend_visual(ggi_visual_t vis)
-{
-	return 0;
-}
-
-//static swrast_tri_func ggimesa_stubs_get_triangle_func(GLcontext *ctx);
-
-int GGIsetup_driver(ggi_mesa_context_t ggi_ctx)
-{
-	struct swrast_device_driver *swdd =
-		_swrast_GetDeviceDriverReference(ggi_ctx->gl_ctx);
-
-	GGIMESADPRINT_CORE("stubs: setup_driver\n");
-	
-	swdd->WriteRGBASpan	= GGIwrite_rgba_span;
-	swdd->WriteRGBSpan	= GGIwrite_rgb_span;
-	swdd->WriteMonoRGBASpan = GGIwrite_mono_rgba_span;
-	swdd->WriteRGBAPixels   = GGIwrite_rgba_pixels;
-	swdd->WriteMonoRGBAPixels = GGIwrite_mono_rgba_pixels;
-
-	swdd->WriteCI32Span     = GGIwrite_ci32_span;
-	swdd->WriteCI8Span      = GGIwrite_ci8_span;
-	swdd->WriteMonoCISpan	= GGIwrite_mono_ci_span;
-	swdd->WriteCI32Pixels   = GGIwrite_ci32_pixels;
-	swdd->WriteMonoCIPixels = GGIwrite_mono_ci_pixels;
-
-	swdd->ReadCI32Span 	= GGIread_ci32_span;
-	swdd->ReadRGBASpan	= GGIread_rgba_span;
-	swdd->ReadCI32Pixels	= GGIread_ci32_pixels;
-	swdd->ReadRGBAPixels	= GGIread_rgba_pixels;
-	
-	return 0;
-}
-
-void GGIupdate_state(ggi_mesa_context_t *ctx)
-{
-	//ctx->Driver.TriangleFunc = _swsetup_Triangle;
-}
-
-/*
-void GGItriangle_flat(GLcontext *ctx, const SWvertex *v0, const SWvertex *v1, const SWvertex *v2)
-{
-//#define INTERP_Z 1
-#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE	  
-	
-#define SETUP_CODE	       	\
-	ggi_color color;	\
-	color.r = v0->color[0];	\
-	color.g = v0->color[1];	\
-	color.b = v0->color[2];	\
-	color.a = v0->color[3];	\
-	ggiSetGCForeground(VIS, ggiMapColor(VIS, &color));
-
-#define INNER_LOOP(LEFT,RIGHT,Y)				\
-		ggiDrawHLine(VIS,LEFT,FLIP(Y),RIGHT-LEFT);	
-		
-#include "swrast/s_tritemp.h"
-}
-
-
-static void GGItriangle_flat_depth(GLcontext *ctx, const SWvertex *v0, const SWvertex *v1, const SWvertex *v2)
-{
-#define INTERP_Z 1
-#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE
-
-#define SETUP_CODE	       	\
-	ggi_color color;	\
-	color.r = v0->color[0];	\
-	color.g = v0->color[1];	\
-	color.b = v0->color[2];	\
-	color.a = v0->color[3];	\
-	ggiSetGCForeground(VIS, ggiMapColor(VIS, &color));
-	
-#define INNER_LOOP(LEFT,RIGHT,Y)					\
-	{								\
-	GLint i,xx=LEFT,yy=FLIP(Y),n=RIGHT-LEFT,length=0;		\
-	GLint startx=xx;						\
-	for (i=0;i<n;i++){						\
-		GLdepth z=FixedToDepth(ffz);				\
-		if (z<zRow[i])						\
-		{							\
-			zRow[i]=z;					\
-			length++;					\
-		}							\
-		else							\
-		{							\
-			if (length)					\
-			{ 						\
-				ggiDrawHLine(VIS,startx,yy,length);	\
-				length=0;				\
-			}						\
-			startx=xx+i+1;					\
-		}							\
-		ffz+=fdzdx;						\
-	}								\
-	if (length) ggiDrawHLine(VIS,startx,yy,length);			\
-	}
-
-#include "swrast/s_tritemp.h"
-}
-
-
-static swrast_tri_func ggimesa_stubs_get_triangle_func(GLcontext *ctx)
-{
-	if (ctx->Stencil._Enabled) return NULL;
-	if (ctx->Polygon.SmoothFlag) return NULL;
-	if (ctx->Polygon.StippleFlag) return NULL;
-	if (ctx->Texture._ReallyEnabled) return NULL;  
-	if (ctx->Light.ShadeModel==GL_SMOOTH) return NULL;
-	if (ctx->Depth.Test && ctx->Depth.Func != GL_LESS) return NULL;
-
-	if (ctx->Depth.Test) 
-	  return GGItriangle_flat_depth;
-
-	return GGItriangle_flat;	
-}
-*/
-static int GGIopen(ggi_visual_t vis, struct ggi_dlhandle *dlh,
-			const char *args, void *argptr, uint32 *dlret)
-{
-       	LIBGGI_MESAEXT(vis)->update_state = GGIupdate_state;
-	LIBGGI_MESAEXT(vis)->setup_driver = GGIsetup_driver;
-
-	*dlret = GGI_DL_OPDRAW;
-	return 0;
-}
-
-int MesaGGIdl_stubs(int func, void **funcptr)
-{
-	switch (func) {
-	case GGIFUNC_open:
-		*funcptr = GGIopen;
-		return 0;
-	case GGIFUNC_exit:
-	case GGIFUNC_close:
-		*funcptr = NULL;
-		return 0;
-	default:
-		*funcptr = NULL;
-	}
-	return GGI_ENOTFOUND;
-}
diff --git a/src/mesa/drivers/ggi/display/.gitignore b/src/mesa/drivers/ggi/display/.gitignore
deleted file mode 100644
index 98858db2c0..0000000000
--- a/src/mesa/drivers/ggi/display/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-fbdev.conf
diff --git a/src/mesa/drivers/ggi/display/fbdev.conf.in b/src/mesa/drivers/ggi/display/fbdev.conf.in
deleted file mode 100644
index 2acb89426f..0000000000
--- a/src/mesa/drivers/ggi/display/fbdev.conf.in
+++ /dev/null
@@ -1,4 +0,0 @@
-# GGIMesa fbdev target configuration
-.root: @ggi_libdir@/ggi/mesa/default
-
-tgt-fbdev-kgicon-generic-mesa	genkgi.so
diff --git a/src/mesa/drivers/ggi/display/fbdev_mode.c b/src/mesa/drivers/ggi/display/fbdev_mode.c
deleted file mode 100644
index 85c35ffe0e..0000000000
--- a/src/mesa/drivers/ggi/display/fbdev_mode.c
+++ /dev/null
@@ -1,130 +0,0 @@
-/******************************************************************************
-
-   display-fbdev-mesa
-
-   Copyright (C) 1999 Jon Taylor [taylorj@ggi-project.org]
-
-   Permission is hereby granted, free of charge, to any person obtaining a
-   copy of this software and associated documentation files (the "Software"),
-   to deal in the Software without restriction, including without limitation
-   the rights to use, copy, modify, merge, publish, distribute, sublicense,
-   and/or sell copies of the Software, and to permit persons to whom the
-   Software is furnished to do so, subject to the following conditions:
-
-   The above copyright notice and this permission notice shall be included in
-   all copies or substantial portions of the Software.
-
-   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
-   THE AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-   IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-******************************************************************************
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/ioctl.h>
-#include <sys/mman.h>
-
-#include <linux/fb.h>
-
-#include <ggi/internal/ggi-dl.h>
-#include <ggi/mesa/ggimesa_int.h>
-#include <ggi/mesa/display_fbdev.h>
-#include <ggi/mesa/debug.h>
-
-#ifndef MAP_FAILED
-#define MAP_FAILED ((void*)-1)
-#endif
-
-#define FB_KLUDGE_FONTX  8
-#define FB_KLUDGE_FONTY  16
-#define FB_KLUDGE_TEXTMODE  13
-#define TIMINGFILE "/etc/fb.modes"
-
-int GGIMesa_fbdev_getapi(ggi_visual *vis, int num, char *apiname, char *arguments)
-{
-	struct fbdev_priv_mesa *priv = GGIMESA_PRIV(vis);
-	
-	arguments = '\0';
-
-	switch(num) {
-	case 0:
-		if (priv->oldpriv->have_accel) {
-			strcpy(apiname, priv->oldpriv->accel);
-			return 0;
-		}
-		break;
-	}
-
-	return -1;
-}
-
-static int do_setmode(ggi_visual *vis)
-{
-	struct fbdev_priv_mesa *priv = GGIMESA_PRIV(vis);
-	int err, id;
-	char libname[GGI_API_MAXLEN], libargs[GGI_API_MAXLEN];
-	ggi_graphtype gt;
-
-	_ggiZapMode(vis, ~GGI_DL_OPDISPLAY);
-	priv->have_accel = 0;
-
-	for (id = 1; GGIMesa_fbdev_getapi(vis, id, libname, libargs) == 0; id++) {
-		if (_ggiOpenDL(vis, libname, libargs, NULL) == 0) {
-			GGIMESADPRINT_LIBS(stderr, "display-fbdev-mesa: Error opening the "
-				"%s (%s) library.\n", libname, libargs);
-			return GGI_EFATAL;
-		}
-
-		GGIMESADPRINT_CORE("Success in loading %s (%s)\n",
-			libname, libargs);
-	}
-
-	if (priv->oldpriv->accel &&
-	    _ggiOpenDL(vis, priv->accel, NULL, NULL) != 0) {
-		priv->have_accel = 1;
-	} else {
-		priv->have_accel = 0;
-	}
-	vis->accelactive = 0;
-
-	ggiIndicateChange(vis, GGI_CHG_APILIST);
-
-	GGIMESADPRINT_CORE("display-fbdev-mesa: do_setmode SUCCESS\n");
-
-	return 0;
-}
-
-
-int GGIMesa_fbdev_setmode(ggi_visual *vis, ggi_mode *mode)
-{ 
-	int err;
-
-        if ((err = ggiCheckMode(vis, mode)) != 0) {
-		return err;
-	}
-
-	GGIMESADPRINT_CORE("display-fbdev-mesa: setmode %dx%d#%dx%dF%d[0x%02x]\n",
-		    mode->visible.x, mode->visible.y,
-		    mode->virt.x, mode->virt.y, 
-		    mode->frames, mode->graphtype);
-
-	memcpy(LIBGGI_MODE(vis), mode, sizeof(ggi_mode));
-
-	/* Now actually set the mode */
-	err = do_setmode(vis);
-	if (err != 0) {
-		return err;
-	}
-
-	GGIMESADPRINT_CORE("display-fbdev-mesa: setmode success.\n");
-
-	return 0;
-}
diff --git a/src/mesa/drivers/ggi/display/fbdev_visual.c b/src/mesa/drivers/ggi/display/fbdev_visual.c
deleted file mode 100644
index f0c1771c77..0000000000
--- a/src/mesa/drivers/ggi/display/fbdev_visual.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/******************************************************************************
-
-   display-fbdev-mesa: visual handling
-
-   Copyright (C) 1999 Jon Taylor [taylorj@ggi-project.org]
-
-   Permission is hereby granted, free of charge, to any person obtaining a
-   copy of this software and associated documentation files (the "Software"),
-   to deal in the Software without restriction, including without limitation
-   the rights to use, copy, modify, merge, publish, distribute, sublicense,
-   and/or sell copies of the Software, and to permit persons to whom the
-   Software is furnished to do so, subject to the following conditions:
-
-   The above copyright notice and this permission notice shall be included in
-   all copies or substantial portions of the Software.
-
-   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
-   THE AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-   IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-******************************************************************************
-*/
-
-#include <ggi/internal/ggi-dl.h>
-#include <ggi/mesa/ggimesa_int.h>
-#include <ggi/mesa/display_fbdev.h>
-#include <ggi/mesa/debug.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <errno.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-
-
-#ifdef HAVE_SYS_VT_H
-#include <sys/vt.h>
-#else
-#include <linux/vt.h>
-#endif
-#ifdef HAVE_LINUX_KDEV_T_H
-#include <linux/kdev_t.h>
-#endif
-#include <linux/tty.h>
-
-#define MAX_DEV_LEN	63
-#define DEFAULT_FBNUM	0
-
-static char accel_prefix[] = "tgt-fbdev-";
-#define PREFIX_LEN	(sizeof(accel_prefix))
-
-typedef struct {
-	int   async;
-	char *str;
-} accel_info;
-
-static accel_info accel_strings[] = {
-	{ 0, "kgicon-generic",},	/* no accel - check for KGIcon	*/
-	{ 0, NULL },			/* Atari Blitter		*/
-};
-
-#define NUM_ACCELS	(sizeof(accel_strings)/sizeof(accel_info))
-
-
-
-static int GGIopen(ggi_visual *vis, struct ggi_dlhandle *dlh,
-                   const char *args, void *argptr, uint32 *dlret)
-{
-	int err;
-	struct fbdev_priv_mesa *priv;
-	ggifunc_getapi *oldgetapi;
-
-
-	priv->oldpriv = LIBGGI_PRIVATE(vis);  /* Hook back */
-
-	GGIMESA_PRIV(vis) = priv = malloc(sizeof(struct fbdev_priv_mesa));
-	if (priv == NULL) {
-		fprintf(stderr, "GGIMesa: Failed to allocate fbdev private data\n");
-		return GGI_ENOMEM;
-	}
-	
-	oldgetapi = vis->opdisplay->getapi;
-	vis->opdisplay->getapi = GGIMesa_fbdev_getapi;
-	changed(vis, GGI_CHG_APILIST);	
-
-	/* If the accel sublibs didn't sucessfuly hook a driver,
-	 * back up and keep looking */
-	if ((LIBGGI_MESAEXT(vis)->update_state == NULL) ||
-	    (LIBGGI_MESAEXT(vis)->setup_driver == NULL))
-	{
-		vis->opdisplay->getapi = oldgetapi;
-	}
-
-	*dlret = GGI_DL_EXTENSION;
-	return 0;
-}
-
-
-static int GGIclose(ggi_visual *vis, struct ggi_dlhandle *dlh)
-{
-	struct fbdev_priv_mesa *priv = GGIMESA_PRIV(vis);
-
-	if (priv) {
-		LIBGGI_PRIVATE(vis) = priv->oldpriv;
-		free(priv);
-	}
-
-	return 0;
-}
-
-
-int MesaGGIdl_fbdev_mesa(int func, void **funcptr)
-{
-	switch (func) {
-	case GGIFUNC_open:
-		*funcptr = GGIopen;
-		return 0;
-	case GGIFUNC_exit:
-		*funcptr = NULL;
-		return 0;
-	case GGIFUNC_close:
-		*funcptr = GGIclose;
-		return 0;
-	default:
-		*funcptr = NULL;
-	}
-        
-	return GGI_ENOTFOUND;
-}
-
-
-#include <ggi/internal/ggidlinit.h>
diff --git a/src/mesa/drivers/ggi/ggimesa.c b/src/mesa/drivers/ggi/ggimesa.c
deleted file mode 100644
index bc08144d66..0000000000
--- a/src/mesa/drivers/ggi/ggimesa.c
+++ /dev/null
@@ -1,670 +0,0 @@
-/* GGI-Driver for MESA
- * 
- * Copyright (C) 1997-1998  Uwe Maurer  -  uwe_maurer@t-online.de 
- *                    2002  Filip Spacek
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- * ---------------------------------------------------------------------
- * This code was derived from the following source of information:
- *
- * svgamesa.c and ddsample.c by Brian Paul
- * 
- */
-
-#ifdef HAVE_CONFIG_H
-#include "conf.h"
-#endif
-
-#include <ggi/mesa/ggimesa_int.h>
-#include <ggi/mesa/debug.h>
-#include "main/extensions.h"
-#include "main/buffers.h"
-#include "main/colormac.h"
-#include "main/imports.h"
-#include "main/matrix.h"
-#include "main/teximage.h"
-#include "main/texformat.h"
-#include "main/texstore.h"
-#include "swrast/swrast.h"
-#include "swrast_setup/swrast_setup.h"
-#include "tnl/tnl.h"
-#include "tnl/t_context.h"
-#include "tnl/t_pipeline.h"
-#include "vbo/vbo.h"
-
-/* We use LibGG to manage config files */
-#include <ggi/gg.h>
-
-
-/* XXX: Those #defines should be provided via 
- * config.h
- */
-#define GGIMESAPATHTAG	"pAtHTAg"
-#define GGIMESACONFDIR	"pAtHTAg/usr/local/etc/ggi"
-#define GGIMESATAGLEN	7
-#define GGIMESACONFFILE	"ggimesa.conf"
-
-
-/* Static variables
- */
-static int _ggimesaLibIsUp = 0;
-static void *_ggimesaConfigHandle;
-static char _ggimesaconfstub[512] = GGIMESACONFDIR;
-static char *_ggimesaconfdir = _ggimesaconfstub+GGIMESATAGLEN;
-
-int _ggimesaDebugSync = 0;
-uint32 _ggimesaDebugState = 0;
-
-
-
-/* Extension ID. Defaulting to -1 should make segfault on abuse more likely...
- */
-ggi_extid _ggiMesaID = -1;
-
-
-#define SUBLIB_PREFIX	"MesaGGIdl_"
-
-
-/*
- * Returns the directory where global config files are kept
- */
- 
-const char *ggiMesaGetConfDir(void)
-{
-#ifdef __WIN32__
-	/* On Win32 we allow overriding of the compiled in path. */
-	const char *envdir = getenv("GGI_CONFDIR");
-	if (envdir) return envdir;
-#endif
-	return _ggimesaconfdir;
-}
-
-
-/* Dummy function which returns -1
-   We use this to reset the function pointers */
-static int _ggi_error(void)
-{
-	GGIMESADPRINT_CORE("_ggi_error() called\n");
-	
-	return -1;
-}
-
-
-static int changed(ggi_visual_t vis, int whatchanged)
-{
-	GLcontext *ctx;
-	ctx = _mesa_get_current_context();
-
-	GGIMESADPRINT_CORE("changed() called\n");
-		
-	switch (whatchanged) {
-	case GGI_CHG_APILIST:
-	{
-		char api[GGI_MAX_APILEN];
-		char args[GGI_MAX_APILEN];
-		int i;
-		const char *fname;
-		ggi_dlhandle *lib;
-
-		GLvisual *gl_vis = &(LIBGGI_MESAEXT(vis)->mesa_visual.gl_visual);
-		GLframebuffer *gl_fb = &(LIBGGI_MESAEXT(vis)->mesa_buffer);
-		
-		/* Initialize the framebuffer to provide all necessary
-		   buffers in software. The target libraries that are loaded
-		   next are free to modify this according to their
-		   capabilities. 
-		 */
-		 /* FIXME: if the target changes capabilities we'll leak 
-		    swrast's memory !!! Need to deallocate first */
-		_mesa_initialize_framebuffer(gl_fb, gl_vis,
-					 gl_vis->depthBits > 0,
-					 gl_vis->stencilBits > 0,
-					 gl_vis->accumRedBits > 0,
-					 gl_vis->alphaBits > 0);
-
-		for (i = 0; ggiGetAPI(vis, i, api, args) == 0; i++) {
-			strcat(api, "-mesa");
-			GGIMESADPRINT_CORE("GGIMesa: looking for"
-					"a sublib named %s\n", api);
-			fname = ggMatchConfig(_ggimesaConfigHandle, api, NULL);
-			if (fname == NULL) {
-				/* No special implementation for this sublib */
-				continue;
-			}
-			lib = ggiExtensionLoadDL(vis, fname, args, NULL,
-						 SUBLIB_PREFIX);
-		}
-
-		/* The targets have cleared everything they can do from 
-		   the framebuffer structure so we provide the rest in sw
-		 */
-		/*_swrast_alloc_buffers(gl_fb);*/
-		
-		break;
-	} 
-	}
-	return 0;
-}
-
-
-int ggiMesaInit()
-{
-	int err;
-	char *str;
-	char *conffile;
-	
-	GGIMESADPRINT_CORE("ggiMesaInit() called\n");
-	
-	_ggimesaLibIsUp++;
-	if (_ggimesaLibIsUp > 1) return 0; /* Initialize only at first call */
-	
-	str = getenv("GGIMESA_DEBUGSYNC");
-	if (str != NULL) {
-		_ggimesaDebugSync = 1;
-	}
-	
-	str = getenv("GGIMESA_DEBUG");
-	if (str != NULL) {
-		_ggimesaDebugState = atoi(str);
-		GGIMESADPRINT_CORE("%s Debugging=%d\n",
-			_ggimesaDebugSync ? "sync" : "async",
-			_ggimesaDebugState);
-	}
-	
-
-	conffile = malloc(strlen(ggiMesaGetConfDir()) + 1
-			  + strlen(GGIMESACONFFILE) +1);
-	if (conffile == NULL) {
-		fprintf(stderr, "GGIMesa: unable to allocate memory for config filename.\n");
-		return GGI_ENOMEM;
-	}
-	sprintf(conffile, "%s%c%s",
-		ggiMesaGetConfDir(), '/', GGIMESACONFFILE);
-	err = ggLoadConfig(conffile, &_ggimesaConfigHandle);
-	if (err != GGI_OK) {
-		fprintf(stderr, "GGIMesa: Couldn't open %s\n",
-			conffile);
-		free(conffile);
-		_ggimesaLibIsUp--;
-		return err;
-	}
-	free(conffile);
-	
-	_ggiMesaID = ggiExtensionRegister("GGIMesa",
-					 sizeof(struct ggi_mesa_ext), changed);
-	if (_ggiMesaID < 0) {
-		fprintf(stderr, "GGIMesa: failed to register as extension\n");
-		_ggimesaLibIsUp--;
-		ggFreeConfig(_ggimesaConfigHandle);
-		return _ggiMesaID;
-	}
-	
-	return 0;
-}
-
-int ggiMesaExit(void)
-{
-	int rc;
-
-	GGIMESADPRINT_CORE("ggiMesaExit() called\n");
-
-	if (!_ggimesaLibIsUp) return -1;
-
-	if (_ggimesaLibIsUp > 1) {
-		/* Exit only at last call */
-		_ggimesaLibIsUp--;
-		return 0;
-	}
-	
-	rc = ggiExtensionUnregister(_ggiMesaID);
-	ggFreeConfig(_ggimesaConfigHandle);
-
-	_ggimesaLibIsUp = 0;
-
-	return rc;
-}
-
-
-
-
-static void gl_ggiUpdateState(GLcontext *ctx, GLuint new_state);
-
-
-static void gl_ggiGetSize(GLframebuffer *fb, GLuint *width, GLuint *height)
-{
-	/* FIXME: this is a hack to work around the new interface */
-	GLcontext *ctx;
-	ggi_mesa_context_t ggi_ctx;
-	ctx = _mesa_get_current_context();
-	ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-	
-	GGIMESADPRINT_CORE("gl_ggiGetSize() called\n");
-	
-	*width = LIBGGI_VIRTX(ggi_ctx->ggi_visual);
-	*height = LIBGGI_VIRTY(ggi_ctx->ggi_visual);
-	printf("returning %d, %d\n", *width, *height);
-}
-
-/**
- * We only implement this function as a mechanism to check if the
- * framebuffer size has changed (and update corresponding state).
- */
-static void gl_ggiViewport(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h)
-{
-   GLuint newWidth, newHeight;
-   GLframebuffer *buffer = ctx->WinSysDrawBuffer;
-   gl_ggiGetSize( buffer, &newWidth, &newHeight );
-   if (buffer->Width != newWidth || buffer->Height != newHeight) {
-      _mesa_resize_framebuffer(ctx, buffer, newWidth, newHeight );
-   }
-}
-
-
-static void gl_ggiSetIndex(GLcontext *ctx, GLuint ci)
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-	
-	GGIMESADPRINT_CORE("gl_ggiSetIndex() called\n");
-	
-	ggiSetGCForeground(ggi_ctx->ggi_visual, ci);
-	ggi_ctx->color = (ggi_pixel)ci;
-}
-
-static void gl_ggiSetClearIndex(GLcontext *ctx, GLuint ci)
-{	
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-
-	GGIMESADPRINT_CORE("gl_ggiSetClearIndex() called\n");
-
-	ggiSetGCForeground(ggi_ctx->ggi_visual, ci);
-	ggi_ctx->clearcolor = (ggi_pixel)ci;
-}
-
-static void gl_ggiSetClearColor(GLcontext *ctx, const GLfloat color[4])
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-	ggi_color rgb;
-	ggi_pixel col;
-	GLubyte byteColor[3];
-
-	GGIMESADPRINT_CORE("gl_ggiSetClearColor() called\n");
-	
-	CLAMPED_FLOAT_TO_UBYTE(byteColor[0], color[0]);
-	CLAMPED_FLOAT_TO_UBYTE(byteColor[1], color[1]);
-	CLAMPED_FLOAT_TO_UBYTE(byteColor[2], color[2]);
-
-	rgb.r = (uint16)byteColor[0] << SHIFT;
-	rgb.g = (uint16)byteColor[1] << SHIFT;
-	rgb.b = (uint16)byteColor[2] << SHIFT;
-	col = ggiMapColor(ggi_ctx->ggi_visual, &rgb);
-	ggiSetGCForeground(ggi_ctx->ggi_visual, col);
-	ggi_ctx->clearcolor = col;
-}
-
-static void gl_ggiClear(GLcontext *ctx, GLbitfield mask)
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-        int x = ctx->DrawBuffer->_Xmin;
-        int y = ctx->DrawBuffer->_Ymin;
-        int w = ctx->DrawBuffer->_Xmax - x;
-        int h = ctx->DrawBuffer->_Ymax - y;
-        GLboolean all = (w == ctx->DrawBuffer->Width && h == ctx->DrawBuffer->height)
-	
-	GGIMESADPRINT_CORE("gl_ggiClear() called\n");
-
-	if (mask & (DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT)) {
-		ggiSetGCForeground(ggi_ctx->ggi_visual, ggi_ctx->clearcolor);
-
-		if (all) {
-			int w, h;
-			w = LIBGGI_VIRTX(ggi_ctx->ggi_visual);
-			h = LIBGGI_VIRTX(ggi_ctx->ggi_visual);
-			ggiDrawBox(ggi_ctx->ggi_visual, 0, 0, w, h);
-		} else {
-			ggiDrawBox(ggi_ctx->ggi_visual, x, y, //FLIP(y),
-				   width, height);
-		}
-		ggiSetGCForeground(ggi_ctx->ggi_visual, ggi_ctx->color);
-
-		mask &= ~(DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT);
-	}
-	_swrast_Clear(ctx, mask);
-	
-}
-
-
-/* Set the buffer used for reading */
-/* XXX support for separate read/draw buffers hasn't been tested */
-static GLboolean gl_ggiSetBuffer(GLcontext *ctx, GLframebuffer *buffer, GLuint bufferBit)
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-
-	printf("set read %d\n", bufferBit);
-	GGIMESADPRINT_CORE("gl_ggiSetBuffer() called\n");
-
-	if (bufferBit == DD_FRONT_LEFT_BIT) 
-	{
-		ggiSetReadFrame(ggi_ctx->ggi_visual,
-				ggiGetDisplayFrame(ggi_ctx->ggi_visual));
-		ggiSetWriteFrame(ggi_ctx->ggi_visual,
-				 ggiGetDisplayFrame(ggi_ctx->ggi_visual));
-		return GL_TRUE;
-	}
-	else if (bufferBit == DD_BACK_LEFT_BIT)
-	{
-		ggiSetReadFrame(ggi_ctx->ggi_visual,
-				ggiGetDisplayFrame(ggi_ctx->ggi_visual)?0 : 1);
-		ggiSetWriteFrame(ggi_ctx->ggi_visual,
-				 ggiGetDisplayFrame(ggi_ctx->ggi_visual)?0 : 1);
-		return GL_TRUE;
-	}
-	else
-		return GL_FALSE;
-}
-
-
-static const GLubyte * gl_ggiGetString(GLcontext *ctx, GLenum name)
-{
-	GGIMESADPRINT_CORE("gl_ggiGetString() called\n");
-
-	if (name == GL_RENDERER) {
-		return (GLubyte *) "Mesa GGI";
-	} else {
-		return NULL;
-	}
-}
-
-static void gl_ggiFlush(GLcontext *ctx)
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-
-	GGIMESADPRINT_CORE("gl_ggiFlush() called\n");
-	
-	ggiFlush(ggi_ctx->ggi_visual);
-}
-
-static void gl_ggiIndexMask(GLcontext *ctx, GLuint mask)
-{
-	GGIMESADPRINT_CORE("gl_ggiIndexMask() called\n");
-}
-
-static void gl_ggiColorMask(GLcontext *ctx, GLboolean rmask, GLboolean gmask,
-			    GLboolean bmask, GLboolean amask)
-{
-	GGIMESADPRINT_CORE("gl_ggiColorMask() called\n");
-}
-
-static void gl_ggiEnable(GLcontext *ctx, GLenum pname, GLboolean state)
-{
-	GGIMESADPRINT_CORE("gl_ggiEnable() called\n");
-}
-
-static void gl_ggiSetupPointers(GLcontext *ctx)
-{
-	TNLcontext *tnl;
-
-	GGIMESADPRINT_CORE("gl_ggiSetupPointers() called\n");
-
-	/* Plug in default driver functions */
-	_mesa_init_driver_functions(&ctx->Driver);
-
-	/* Plug in ggi-specific functions */
-	ctx->Driver.GetString = gl_ggiGetString;
-	ctx->Driver.GetBufferSize = gl_ggiGetSize;
-        ctx->Driver.Viewport = gl_ggiViewport;
-	ctx->Driver.Finish = gl_ggiFlush;
-	ctx->Driver.Flush = gl_ggiFlush;
-	ctx->Driver.Clear = gl_ggiClear;
-	ctx->Driver.ClearIndex = gl_ggiSetClearIndex; 
-	ctx->Driver.ClearColor = gl_ggiSetClearColor;
-	ctx->Driver.IndexMask = gl_ggiIndexMask;
-	ctx->Driver.ColorMask = gl_ggiColorMask;
-	ctx->Driver.Enable = gl_ggiEnable;
-	ctx->Driver.UpdateState = gl_ggiUpdateState;
-
-	/* Initialize TNL driver interface */
-	tnl = TNL_CONTEXT(ctx);
-	tnl->Driver.RunPipeline = _tnl_run_pipeline;
-	
-	/* Install setup for tnl */
-	_swsetup_Wakeup(ctx);
-}
-
-static void get_mode_info(ggi_visual_t vis, int *r, int *g, int *b,
-			  GLboolean *rgb, GLboolean *db, int *ci)
-{
-	unsigned int i;
-	
-	*r = 0;
-	*g = 0;
-	*b = 0;
-
-	for(i = 0; i < sizeof(ggi_pixel)*8; ++i) {
-		int mask = 1 << i;
-		if (LIBGGI_PIXFMT(vis)->red_mask & mask)
-			++(*r);
-		if (LIBGGI_PIXFMT(vis)->green_mask & mask)
-			++(*g);
-		if (LIBGGI_PIXFMT(vis)->blue_mask & mask)
-			++(*b);
-	}
-
-	*rgb = GT_SCHEME(LIBGGI_MODE(vis)->graphtype) == GT_TRUECOLOR;
-	*db = LIBGGI_MODE(vis)->frames > 1;
-	*ci = GT_SIZE(LIBGGI_MODE(vis)->graphtype);
-
-	printf("rgb (%d, %d, %d) db %d, rgb %d ci %d\n",*r,*g,*b,*db,*rgb,*ci);
-}
-	
-
-int ggiMesaAttach(ggi_visual_t vis)
-{
-	int rc;
-
-	GGIMESADPRINT_CORE("ggiMesaAttach() called\n");
-
-	rc = ggiExtensionAttach(vis, _ggiMesaID);
-	if (rc == 0)
-	{
-		int r, g, b, ci;
-		GLboolean rgb, db;
-		GLvisual *gl_visual;
-		
-		/* We are creating the primary instance */
-		memset(LIBGGI_MESAEXT(vis), 0, sizeof(struct ggi_mesa_ext));
-		LIBGGI_MESAEXT(vis)->update_state = (void *)_ggi_error;
-		LIBGGI_MESAEXT(vis)->setup_driver = (void *)_ggi_error;
-
-		/* Initialize default mesa visual */
-		get_mode_info(vis, &r, &g, &b, &rgb, &db, &ci);
-		gl_visual = &(LIBGGI_MESAEXT(vis)->mesa_visual.gl_visual);
-		_mesa_initialize_visual(gl_visual,
-					rgb, db, 0 /* No stereo */,
-					r, g, b, 0 /* No alpha */, ci,
-					0 /* No depth */, 0 /* No stencil */,
-					0, 0, 0, 0 /* No accum */, 0);
-		
-		/* Now fake an "API change" so the right libs get loaded */
-		changed(vis, GGI_CHG_APILIST);
-	}
-	
-	return rc;
-}
-
-int ggiMesaDetach(ggi_visual_t vis)
-{
-	GGIMESADPRINT_CORE("ggiMesaDetach() called\n");
-	
-	return ggiExtensionDetach(vis, _ggiMesaID);
-}
- 
-int ggiMesaExtendVisual(ggi_visual_t vis, GLboolean alpha_flag,
-			GLboolean stereo_flag, GLint depth_size,
-			GLint stencil_size, GLint accum_red_size,
-			GLint accum_green_size, GLint accum_blue_size,
-			GLint accum_alpha_size, GLint num_samples)
-{
-        GLvisual *gl_vis = &(LIBGGI_MESAEXT(vis)->mesa_visual.gl_visual);
-	int r, g, b, ci;
-	GLboolean db, rgb;
-
-	get_mode_info(vis, &r, &g, &b, &rgb, &db, &ci);
-       
-	/* Initialize the visual with the provided information */	
-	_mesa_initialize_visual(gl_vis,
-				rgb, db, stereo_flag,
-				r, g, b, 0 /* FIXME */, ci,
-				depth_size, stencil_size,
-				accum_red_size, accum_green_size,
-				accum_blue_size, accum_alpha_size, 0);
-
-	/* Now fake an "API change" so the right libs get loaded. After all,
-	   extending the visual by all these new buffers could be considered
-	   a "mode change" which requires an "API change".
-	 */
-	changed(vis, GGI_CHG_APILIST);
-	
-	return 0;
-}
-
-
-ggi_mesa_context_t ggiMesaCreateContext(ggi_visual_t vis)
-{
-	ggi_mesa_context_t ctx;
-	int err;
-
-	GGIMESADPRINT_CORE("ggiMesaCreateContext() called\n");
-	
-	ctx = (ggi_mesa_context_t)malloc(sizeof(struct ggi_mesa_context));
-	if (!ctx) 
-		return NULL;
-	
-	ctx->ggi_visual = vis;
-	ctx->color = 0;
-
-	ctx->gl_ctx =
-	  _mesa_create_context(&(LIBGGI_MESAEXT(vis)->mesa_visual.gl_visual),
-			       NULL, (void *) ctx, GL_FALSE);
-	if (!ctx->gl_ctx)
-		goto free_context;
-	
-        _mesa_enable_sw_extensions(ctx->gl_ctx);
-	
-	_swrast_CreateContext(ctx->gl_ctx);
-	_vbo_CreateContext(ctx->gl_ctx);
-	_tnl_CreateContext(ctx->gl_ctx);
-	_swsetup_CreateContext(ctx->gl_ctx);
-	
-	gl_ggiSetupPointers(ctx->gl_ctx);
-
-	/* Make sure that an appropriate sublib has been loaded */
-	if (!LIBGGI_MESAEXT(ctx->ggi_visual)->setup_driver){
-		GGIMESADPRINT_CORE("setup_driver==NULL!\n");
-		GGIMESADPRINT_CORE("Please check your config files!\n");
-		goto free_context;
-	}
-
-	/* Set up the sublib driver */
-	err = LIBGGI_MESAEXT(ctx->ggi_visual)->setup_driver(ctx);
-	if (err){
-		GGIMESADPRINT_CORE("setup_driver failed (err = %d)", err);
-		goto free_gl_context;
-	}
-
-	return ctx;
-	
-free_gl_context:
-	_mesa_destroy_context(ctx->gl_ctx);
-free_context:
-	free(ctx);
-	
-	return NULL;
-}
-
-void ggiMesaDestroyContext(ggi_mesa_context_t ctx)
-{
-	GGIMESADPRINT_CORE("ggiMesaDestroyContext() called\n");
-	
-	if(!ctx)
-		return;
-
-	_mesa_destroy_context(ctx->gl_ctx);
-	free(ctx);
-}
-
-void ggiMesaMakeCurrent(ggi_mesa_context_t ctx, ggi_visual_t vis)
-{
-	GGIMESADPRINT_CORE("ggiMesaMakeCurrent(ctx = %p) called\n", ctx);
-
-	/* FIXME: clean up where are ggi_vis */
-	if (ctx->ggi_visual != vis) {
-		GGIMESADPRINT_CORE("Cannot migrate GL contexts\n");
-		return;
-	}
-	
-	_mesa_make_current(ctx->gl_ctx, &LIBGGI_MESAEXT(vis)->mesa_buffer);
-}
-
-
-/*
- * Swap front/back buffers for current context if double buffered.
- */
-void ggiMesaSwapBuffers(void)
-{
-	GLcontext *ctx;
-	ggi_mesa_context_t ggi_ctx;
-	ctx = _mesa_get_current_context();
-	ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-	
-	GGIMESADPRINT_CORE("ggiMesaSwapBuffers() called\n");	
-	
-	_mesa_notifySwapBuffers(ctx);
-	gl_ggiFlush(ctx);
-
-	ggiSetDisplayFrame(ggi_ctx->ggi_visual,
-			   !ggiGetDisplayFrame(ggi_ctx->ggi_visual));
-	ggiSetWriteFrame(ggi_ctx->ggi_visual,
-			 !ggiGetWriteFrame(ggi_ctx->ggi_visual));
-	ggiSetReadFrame(ggi_ctx->ggi_visual,
-			 !ggiGetReadFrame(ggi_ctx->ggi_visual));
-
-	GGIMESADPRINT_CORE("swap disp: %d, write %d\n",
-			   ggiGetDisplayFrame(ggi_ctx->ggi_visual),
-			   ggiGetWriteFrame(ggi_ctx->ggi_visual));
-}
-
-static void gl_ggiUpdateState(GLcontext *ctx, GLuint new_state)
-{
-	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
-	
-	GGIMESADPRINT_CORE("gl_ggiUpdateState() called\n");
-		
-	/* Propogate statechange information to swrast and swrast_setup
-	 * modules.  The GGI driver has no internal GL-dependent state.
-	 */
-	_swrast_InvalidateState(ctx, new_state);
-	_swsetup_InvalidateState(ctx, new_state);
-	_tnl_InvalidateState(ctx, new_state);
-	
-	/* XXX: Better use an assertion that bails out here on failure */
-	if (!LIBGGI_MESAEXT(ggi_ctx->ggi_visual)->update_state) {
-		GGIMESADPRINT_CORE("update_state == NULL!\n");
-		GGIMESADPRINT_CORE("Please check your config files!\n");
-		ggiPanic("");
-	}
-
-	LIBGGI_MESAEXT(ggi_ctx->ggi_visual)->update_state(ggi_ctx);
-}
-
diff --git a/src/mesa/drivers/ggi/ggimesa.conf.in b/src/mesa/drivers/ggi/ggimesa.conf.in
deleted file mode 100644
index 72132334fd..0000000000
--- a/src/mesa/drivers/ggi/ggimesa.conf.in
+++ /dev/null
@@ -1,13 +0,0 @@
-# GGIMesa global configuration
-.root: @ggi_libdir@/ggi/mesa
-
-generic-stubs-mesa		default/stubs.so
-generic-linear-8-mesa		default/linear_8.so
-generic-linear-15-mesa		default/linear_15.so
-generic-linear-16-mesa		default/linear_16.so
-generic-linear-24-mesa		default/linear_24.so
-generic-linear-32-mesa		default/linear_32.so
-
-display-fbdev-mesa		display/fbdev.so
-
-# .include @ggi_confdir@/ggi/mesa/targets/fbdev.conf
diff --git a/src/mesa/drivers/ggi/include/ggi/mesa/debug.h b/src/mesa/drivers/ggi/include/ggi/mesa/debug.h
deleted file mode 100644
index f461fee72c..0000000000
--- a/src/mesa/drivers/ggi/include/ggi/mesa/debug.h
+++ /dev/null
@@ -1,260 +0,0 @@
-/* 
-******************************************************************************
-
-   GGIMesa debugging macros
-
-   Copyright (C) 1998-1999 Marcus Sundberg	[marcus@ggi-project.org]
-   Copyright (C) 1999-2000 Jon Taylor		[taylorj@ggi-project.org]
-  
-   Permission is hereby granted, free of charge, to any person obtaining a
-   copy of this software and associated documentation files (the "Software"),
-   to deal in the Software without restriction, including without limitation
-   the rights to use, copy, modify, merge, publish, distribute, sublicense,
-   and/or sell copies of the Software, and to permit persons to whom the
-   Software is furnished to do so, subject to the following conditions:
-
-   The above copyright notice and this permission notice shall be included in
-   all copies or substantial portions of the Software.
-
-   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
-   THE AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-   IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-******************************************************************************
-*/
-
-#ifndef _GGI_MESA_INTERNAL_DEBUG_H
-#define _GGI_MESA_INTERNAL_DEBUG_H
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <ggi/types.h>
-#include <ggi/gg.h>
-
-#ifndef DEBUG
-#define DEBUG
-#endif
-
-__BEGIN_DECLS
-
-/* Exported variables */
-#ifdef BUILDING_GGIMESA
-extern uint32     _ggimesaDebugState;
-extern int        _ggimesaDebugSync;
-#else
-IMPORTVAR uint32  _ggimesaDebugState;
-IMPORTVAR int     _ggimesaDebugSync;
-#endif
-
-__END_DECLS
-
-
-/* Debugging types
- * bit 0 is reserved! */
-
-#define GGIMESADEBUG_CORE		(1<<1)	/*   2 */
-#define GGIMESADEBUG_MODE		(1<<2)	/*   4 */
-#define GGIMESADEBUG_COLOR		(1<<3)	/*   8 */
-#define GGIMESADEBUG_DRAW		(1<<4)	/*  16 */
-#define GGIMESADEBUG_MISC		(1<<5)	/*  32 */
-#define GGIMESADEBUG_LIBS		(1<<6)	/*  64 */
-#define GGIMESADEBUG_EVENTS		(1<<7)	/* 128 */
-
-#define GGIMESADEBUG_ALL	0xffffffff
-
-#ifdef __GNUC__
-
-#ifdef DEBUG
-#define GGIMESADPRINT(args...)		if (_ggimesaDebugState) { ggDPrintf(_ggimesaDebugSync, "GGIMesa",args); }
-#define GGIMESADPRINT_CORE(args...)	if (_ggimesaDebugState & GGIMESADEBUG_CORE) { ggDPrintf(_ggimesaDebugSync,"GGIMesa",args); }
-#define GGIMESADPRINT_MODE(args...)	if (_ggimesaDebugState & GGIMESADEBUG_MODE) { ggDPrintf(_ggimesaDebugSync,"GGIMesa",args); }
-#define GGIMESADPRINT_COLOR(args...)	if (_ggimesaDebugState & GGIMESADEBUG_COLOR) { ggDPrintf(_ggimesaDebugSync,"GGIMesa",args); }
-#define GGIMESADPRINT_DRAW(args...)	if (_ggimesaDebugState & GGIMESADEBUG_DRAW) { ggDPrintf(_ggimesaDebugSync,"GGIMesa",args); }
-#define GGIMESADPRINT_MISC(args...)	if (_ggimesaDebugState & GGIMESADEBUG_MISC) { ggDPrintf(_ggimesaDebugSync,"GGIMesa",args); }
-#define GGIMESADPRINT_LIBS(args...)	if (_ggimesaDebugState & GGIMESADEBUG_LIBS) { ggDPrintf(_ggimesaDebugSync,"GGIMesa",args); }
-#define GGIMESADPRINT_EVENTS(args...)	if (_ggimesaDebugState & GGIMESADEBUG_EVENTS) { ggDPrintf(_ggimesaDebugSync,"GGIMesa",args); }
-#else /* DEBUG */
-#define GGIMESADPRINT(args...)		do{}while(0)
-#define GGIMESADPRINT_CORE(args...)	do{}while(0)
-#define GGIMESADPRINT_MODE(args...)	do{}while(0)
-#define GGIMESADPRINT_COLOR(args...)	do{}while(0)
-#define GGIMESADPRINT_DRAW(args...)	do{}while(0)
-#define GGIMESADPRINT_MISC(args...)	do{}while(0)
-#define GGIMESADPRINT_LIBS(args...)	do{}while(0)
-#define GGIMESADPRINT_EVENTS(args...)	do{}while(0)
-#endif /* DEBUG */
-
-#else /* __GNUC__ */
-
-__BEGIN_DECLS
-
-static inline void GGIMESADPRINT(const char *form,...)
-{
-#ifdef DEBUG
-	if (_ggiDebugState) {
-		va_list args;
-
-		fprintf(stderr, "GGIMesa: ");
-		va_start(args, form);
-		vfprintf(stderr, form, args);
-		va_end(args);
-		if (_ggimesaDebugSync) fflush(stderr);
-	}
-#endif
-}
-
-static inline void GGIMESADPRINT_CORE(const char *form,...)
-{
-#ifdef DEBUG
-	if (_ggiDebugState & GGIDEBUG_CORE) {
-		va_list args;
-
-		fprintf(stderr, "GGIMesa: ");
-		va_start(args, form);
-		vfprintf(stderr, form, args);
-		va_end(args);
-		if (_ggimesaDebugSync) fflush(stderr);
-	}
-#endif
-}
-
-static inline void GGIMESADPRINT_MODE(const char *form,...)
-{
-#ifdef DEBUG
-	if (_ggiDebugState & GGIDEBUG_MODE) {
-		va_list args;
-
-		fprintf(stderr, "GGIMesa: ");
-		va_start(args, form);
-		vfprintf(stderr, form, args);
-		va_end(args);
-		if (_ggimesaDebugSync) fflush(stderr);
-	}
-#endif
-}
-
-static inline void GGIMESADPRINT_COLOR(const char *form,...)
-{
-#ifdef DEBUG
-	if (_ggiDebugState & GGIDEBUG_COLOR) {
-		va_list args;
-
-		fprintf(stderr, "GGIMesa: ");
-		va_start(args, form);
-		vfprintf(stderr, form, args);
-		va_end(args);
-		if (_ggimesaDebugSync) fflush(stderr);
-	}
-#endif
-}
-
-static inline void GGIMESADPRINT_DRAW(const char *form,...)
-{
-#ifdef DEBUG
-	if (_ggiDebugState & GGIDEBUG_DRAW) {
-		va_list args;
-
-		fprintf(stderr, "GGIMesa: ");
-		va_start(args, form);
-		vfprintf(stderr, form, args);
-		va_end(args);
-		if (_ggimesaDebugSync) fflush(stderr);
-	}
-#endif
-}
-
-static inline void GGIMESADPRINT_MISC(const char *form,...)
-{
-#ifdef DEBUG
-	if (_ggiDebugState & GGIDEBUG_MISC) {
-		va_list args;
-
-		fprintf(stderr, "GGIMesa: ");
-		va_start(args, form);
-		vfprintf(stderr, form, args);
-		va_end(args);
-		if (_ggimesaDebugSync) fflush(stderr);
-	}
-#endif
-}
-
-static inline void GGIMESADPRINT_LIBS(const char *form,...)
-{
-#ifdef DEBUG
-	if (_ggiDebugState & GGIDEBUG_LIBS) {
-		va_list args;
-
-		fprintf(stderr, "GGIMesa: ");
-		va_start(args, form);
-		vfprintf(stderr, form, args);
-		va_end(args);
-		if (_ggimesaDebugSync) fflush(stderr);
-	}
-#endif
-}
-
-static inline void GGIMESADPRINT_EVENTS(const char *form,...)
-{
-#ifdef DEBUG
-	if (_ggiDebugState & GGIDEBUG_EVENTS) {
-		va_list args;
-
-		fprintf(stderr, "GGIMesa: ");
-		va_start(args, form);
-		vfprintf(stderr, form, args);
-		va_end(args);
-		if (_ggimesaDebugSync) fflush(stderr);
-	}
-#endif
-}
-
-__END_DECLS
-
-#endif /* __GNUC__ */
-
-#ifdef DEBUG
-#define GGIMESA_ASSERT(x,str) \
-{ if (!(x)) { \
-	fprintf(stderr,"GGIMESA:%s:%d: INTERNAL ERROR: %s\n",__FILE__,__LINE__,str); \
-	exit(1); \
-} }
-#define GGIMESA_APPASSERT(x,str) \
-{ if (!(x)) { \
-	fprintf(stderr,"GGIMESA:%s:%d: APPLICATION ERROR: %s\n",__FILE__,__LINE__,str); \
-	exit(1); \
-} }
-#else /* DEBUG */
-#define GGIMESA_ASSERT(x,str)	do{}while(0)
-#define GGIMESA_APPASSERT(x,str)	do{}while(0)
-#endif /* DEBUG */
-
-#ifdef DEBUG
-# define GGIMESAD0(x)	x
-#else
-# define GGIMESAD0(x)	/* empty */
-#endif
-
-#ifdef GGIMESADLEV
-# if GGIMESADLEV == 1
-#  define GGIMESAD1(x)	x
-#  define GGIMESAD2(x)	/* empty */
-#  define GGIMESAD3(x)	/* empty */
-# elif GGIMESADLEV == 2
-#  define GGIMESAD1(x)	x
-#  define GGIMESAD2(x)	x
-#  define GGIMESAD3(x)	/* empty */
-# elif GGIMESADLEV > 2
-#  define GGIMESAD1(x)	x
-#  define GGIMESAD2(x)	x
-#  define GGIMESAD3(x)	x
-# endif
-#else
-# define GGIMESAD1(x)	/* empty */
-# define GGIMESAD2(x)	/* empty */
-# define GGIMESAD3(x)	/* empty */
-#endif
-
-#endif /* _GGI_MESA_INTERNAL_DEBUG_H */
diff --git a/src/mesa/drivers/ggi/include/ggi/mesa/display_fbdev.h b/src/mesa/drivers/ggi/include/ggi/mesa/display_fbdev.h
deleted file mode 100644
index 5c3c1e290c..0000000000
--- a/src/mesa/drivers/ggi/include/ggi/mesa/display_fbdev.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef _GGIMESA_DISPLAY_FBDEV_H
-#define _GGIMESA_DISPLAY_FBDEV_H
-
-#include <ggi/internal/ggi-dl.h>
-#include <ggi/display/fbdev.h>
-
-ggifunc_setmode GGIMesa_fbdev_setmode;
-ggifunc_getapi GGIMesa_fbdev_getapi;
-
-#define FBDEV_PRIV_MESA(vis) ((struct fbdev_priv_mesa *)(FBDEV_PRIV(vis)->accelpriv))
-
-struct fbdev_priv_mesa
-{
-	char *accel;
-	int have_accel;
-	void *accelpriv;
-	ggi_fbdev_priv *oldpriv;	/* Hooks back to the LibGGI fbdev target's private data */
-};
-
-#endif /* _GGIMESA_DISPLAY_FBDEV_H */
diff --git a/src/mesa/drivers/ggi/include/ggi/mesa/ggimesa.h b/src/mesa/drivers/ggi/include/ggi/mesa/ggimesa.h
deleted file mode 100644
index ecdbe414f8..0000000000
--- a/src/mesa/drivers/ggi/include/ggi/mesa/ggimesa.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/* GGI-Driver for MESA
- *
- * Copyright (C) 1997  Uwe Maurer
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- * ---------------------------------------------------------------------
- * This code was derived from the following source of information:
- *
- * svgamesa.c and ddsample.c by Brian Paul
- *
- */
-
-#ifndef _GGIMESA_H
-#define _GGIMESA_H
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include "config.h"
-#include "context.h"
-#include "drawpix.h"
-#include "imports.h"
-#include "matrix.h"
-#include "state.h"
-#include "mtypes.h"
-#include "macros.h"
-#include "depth.h"
-
-#undef ASSERT		/* ASSERT is redefined */
-
-#include <ggi/internal/internal.h>
-#include <ggi/ggi_ext.h>
-#include <ggi/ggi.h>
-#include "GL/ggimesa.h"
-
-/*
- * GGIMesa visual configuration.
- * 
- * This structure "derives" from Mesa's GLvisual and extends it by
- * GGI's visual. Combination of these two structures is enough to fully
- * describe the mode the application is currently running in.  GGI
- * visual provides information about color configuration and buffering
- * method, GLvisual fills the rest.
- */
-struct ggi_mesa_visual {
-	GLvisual gl_visual;
-	ggi_visual_t ggi_visual;
-};
-
-/*
- * GGIMesa context.
- *
- * GGIMesa context expands the Mesa's context (it doesn't actualy derive
- * from it, but this ability isn't needed, and it is best if GL context
- * creation is left up to Mesa). It also contains a reference to the GGI
- * visual it is attached to, which is very useful for all Mesa callbacks.
- */
-struct ggi_mesa_context
-{
-	GLcontext *gl_ctx;
-	ggi_visual_t ggi_visual;
-	
-	ggi_pixel color;		/* Current color or index*/
-	ggi_pixel clearcolor;
-	
-	void *priv;
-};
-
-#define SHIFT (GGI_COLOR_PRECISION - 8)
-
-#endif
-
diff --git a/src/mesa/drivers/ggi/include/ggi/mesa/ggimesa_int.h b/src/mesa/drivers/ggi/include/ggi/mesa/ggimesa_int.h
deleted file mode 100644
index faafc779e6..0000000000
--- a/src/mesa/drivers/ggi/include/ggi/mesa/ggimesa_int.h
+++ /dev/null
@@ -1,44 +0,0 @@
-#ifndef _GGI_MESA_INT_H
-#define _GGI_MESA_INT_H
-
-#include <ggi/internal/internal.h>
-#include "ggimesa.h"
-
-
-extern ggi_extid _ggiMesaID;
-
-ggifunc_setmode GGIMesa_setmode;
-ggifunc_getapi GGIMesa_getapi;
-
-typedef struct ggi_mesa_ext
-{
-	/*
-	 * How mesa extends this visual; i.e., size of the depth buffer etc.
-	 *
-	 * By default (upon attaching) this structure is initialized to what
-	 * libggi is guaranteed to handle without any help: single buffered
-	 * visual without any ancilary buffers.
-	 */
-	struct ggi_mesa_visual mesa_visual;
-
-	/*
-	 * Mesa framebuffer is a collection of all ancilary buffers required.
-	 *
-	 * This structure contains the ancilary buffers provided in in
-	 * software. On each mode change it is loaded with the list of
-	 * required buffers and the target is expected to clear the ones
-	 * it can provide in hw. The remaining ones are then provided in sw.
-	 *
-	 */
-	GLframebuffer mesa_buffer;
-
-	void (*update_state)(ggi_mesa_context_t ctx);
-	int (*setup_driver)(ggi_mesa_context_t ctx);
-	
-	void *private;
-} ggi_mesa_ext_t;
-
-#define LIBGGI_MESAEXT(vis) ((ggi_mesa_ext_t *)LIBGGI_EXT(vis,_ggiMesaID))
-#define GGIMESA_PRIV(vis) ((LIBGGI_MESAEXT(vis)->priv))
-
-#endif /* _GGI_MISC_INT_H */
-- 
cgit v1.2.3


From e14a5b14b2db2ef2e744b49024ac341b998d1711 Mon Sep 17 00:00:00 2001
From: Kristian Høgsberg <krh@bitplanet.net>
Date: Thu, 25 Feb 2010 16:08:59 -0500
Subject: Drop glide driver

---
 Makefile                          |    3 -
 configs/linux-glide               |   23 -
 configs/linux-x86-glide           |   28 -
 src/mesa/drivers/glide/fxapi.c    |  951 ---------------
 src/mesa/drivers/glide/fxdd.c     | 2197 -----------------------------------
 src/mesa/drivers/glide/fxddspan.c |  638 ----------
 src/mesa/drivers/glide/fxddtex.c  | 1836 -----------------------------
 src/mesa/drivers/glide/fxdrv.h    |  773 -------------
 src/mesa/drivers/glide/fxg.c      | 2309 -------------------------------------
 src/mesa/drivers/glide/fxg.h      |  382 ------
 src/mesa/drivers/glide/fxglidew.c |  269 -----
 src/mesa/drivers/glide/fxglidew.h |  228 ----
 src/mesa/drivers/glide/fxsetup.c  | 2220 -----------------------------------
 src/mesa/drivers/glide/fxsetup.h  |  850 --------------
 src/mesa/drivers/glide/fxtexman.c |  874 --------------
 src/mesa/drivers/glide/fxtris.c   | 1832 -----------------------------
 src/mesa/drivers/glide/fxvb.c     |  838 --------------
 src/mesa/drivers/glide/fxvbtmp.h  |  370 ------
 18 files changed, 16621 deletions(-)
 delete mode 100644 configs/linux-glide
 delete mode 100644 configs/linux-x86-glide
 delete mode 100644 src/mesa/drivers/glide/fxapi.c
 delete mode 100644 src/mesa/drivers/glide/fxdd.c
 delete mode 100644 src/mesa/drivers/glide/fxddspan.c
 delete mode 100644 src/mesa/drivers/glide/fxddtex.c
 delete mode 100644 src/mesa/drivers/glide/fxdrv.h
 delete mode 100644 src/mesa/drivers/glide/fxg.c
 delete mode 100644 src/mesa/drivers/glide/fxg.h
 delete mode 100644 src/mesa/drivers/glide/fxglidew.c
 delete mode 100644 src/mesa/drivers/glide/fxglidew.h
 delete mode 100644 src/mesa/drivers/glide/fxsetup.c
 delete mode 100644 src/mesa/drivers/glide/fxsetup.h
 delete mode 100644 src/mesa/drivers/glide/fxtexman.c
 delete mode 100644 src/mesa/drivers/glide/fxtris.c
 delete mode 100644 src/mesa/drivers/glide/fxvb.c
 delete mode 100644 src/mesa/drivers/glide/fxvbtmp.h

(limited to 'src/mesa')

diff --git a/Makefile b/Makefile
index b99a87b8ba..f2ec3bf20f 100644
--- a/Makefile
+++ b/Makefile
@@ -118,7 +118,6 @@ linux-dri-xcb \
 linux-egl \
 linux-indirect \
 linux-fbdev \
-linux-glide \
 linux-ia64-icc \
 linux-ia64-icc-static \
 linux-icc \
@@ -149,7 +148,6 @@ linux-x86-64 \
 linux-x86-64-debug \
 linux-x86-64-profile \
 linux-x86-64-static \
-linux-x86-glide \
 linux-x86-profile \
 linux-x86-static \
 netbsd \
@@ -271,7 +269,6 @@ MAIN_FILES = \
 	$(DIRECTORY)/src/mesa/drivers/common/descrip.mms		\
 	$(DIRECTORY)/src/mesa/drivers/fbdev/Makefile			\
 	$(DIRECTORY)/src/mesa/drivers/fbdev/glfbdev.c			\
-	$(DIRECTORY)/src/mesa/drivers/glide/*.[ch]			\
 	$(DIRECTORY)/src/mesa/drivers/osmesa/Makefile			\
 	$(DIRECTORY)/src/mesa/drivers/osmesa/Makefile.win		\
 	$(DIRECTORY)/src/mesa/drivers/osmesa/descrip.mms		\
diff --git a/configs/linux-glide b/configs/linux-glide
deleted file mode 100644
index 31475c81d8..0000000000
--- a/configs/linux-glide
+++ /dev/null
@@ -1,23 +0,0 @@
-# Configuration for generic Linux with 3Dfx Glide driver
-
-include $(TOP)/configs/default
-
-CONFIG_NAME = linux-glide
-
-# Compiler and flags
-CC = gcc
-CXX = g++
-
-CFLAGS = -O3 -ansi -pedantic -fPIC -ffast-math -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DPTHREADS -I/usr/X11R6/include -DFX -I/usr/include/glide -I/usr/local/glide/include
-CXXFLAGS = -O3 -ansi -pedantic -fPIC -ffast-math -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE
-GLUT_CFLAGS = -fexceptions
-
-# Work around aliasing bugs - developers should comment this out
-CFLAGS += -fno-strict-aliasing
-CXXFLAGS += -fno-strict-aliasing
-
-# Library/program dependencies
-GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -L/usr/local/glide/lib -lglide3x -lm -lpthread
-GLUT_LIB_DEPS = -L$(TOP)/$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
-GLW_LIB_DEPS = -L$(TOP)/$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib -lXt -lX11
-APP_LIB_DEPS = -L$(TOP)/$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/local/glide/lib -lglide3x -lm
diff --git a/configs/linux-x86-glide b/configs/linux-x86-glide
deleted file mode 100644
index 603b2bf758..0000000000
--- a/configs/linux-x86-glide
+++ /dev/null
@@ -1,28 +0,0 @@
-# Configuration for Linux with 3Dfx Glide driver and x86 optimizations
-
-include $(TOP)/configs/default
-
-CONFIG_NAME = linux-x86-glide
-
-# Compiler and flags
-CC = gcc
-CXX = g++
-
-CFLAGS = -Wall -O3 -ansi -pedantic -fPIC -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM -DPTHREADS -I/usr/X11R6/include -DFX -I/usr/include/glide -I/usr/local/glide/include
-
-CXXFLAGS = -Wall -O3 -ansi -pedantic -fPIC -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE
-
-GLUT_CFLAGS = -fexceptions
-
-# Work around aliasing bugs - developers should comment this out
-CFLAGS += -fno-strict-aliasing
-CXXFLAGS += -fno-strict-aliasing
-
-MESA_ASM_SOURCES = $(X86_SOURCES)
-GLAPI_ASM_SOURCES = $(X86_API)
-
-# Library/program dependencies
-GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -L/usr/local/glide/lib -lglide3x -lm -lpthread
-GLUT_LIB_DEPS = -L$(TOP)/$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
-GLW_LIB_DEPS = -L$(TOP)/$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib -lXt -lX11
-APP_LIB_DEPS = -L$(TOP)/$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/local/glide/lib -lglide3x -lm
diff --git a/src/mesa/drivers/glide/fxapi.c b/src/mesa/drivers/glide/fxapi.c
deleted file mode 100644
index 238f491599..0000000000
--- a/src/mesa/drivers/glide/fxapi.c
+++ /dev/null
@@ -1,951 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  4.0
- *
- * Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/* Authors:
- *    David Bucciarelli
- *    Brian Paul
- *    Daryll Strauss
- *    Keith Whitwell
- *    Daniel Borca
- *    Hiroshi Morii
- */
-
-
-/* fxapi.c - public interface to FX/Mesa functions (fxmesa.h) */
-
-
-#ifdef HAVE_CONFIG_H
-#include "conf.h"
-#endif
-
-#if defined(FX)
-#include "fxdrv.h"
-
-#include "drivers/common/driverfuncs.h"
-#include "main/framebuffer.h"
-
-#ifndef TDFX_DEBUG
-int TDFX_DEBUG = (0
-/*		  | VERBOSE_VARRAY */
-/*		  | VERBOSE_TEXTURE */
-/*		  | VERBOSE_IMMEDIATE */
-/*		  | VERBOSE_PIPELINE */
-/*		  | VERBOSE_DRIVER */
-/*		  | VERBOSE_STATE */
-/*		  | VERBOSE_API */
-/*		  | VERBOSE_DISPLAY_LIST */
-/*		  | VERBOSE_LIGHTING */
-/*		  | VERBOSE_PRIMS */
-/*		  | VERBOSE_VERTS */
-   );
-#endif
-
-static fxMesaContext fxMesaCurrentCtx = NULL;
-
-/*
- * Status of 3Dfx hardware initialization
- */
-
-static int glbGlideInitialized = 0;
-static int glb3DfxPresent = 0;
-static int glbTotNumCtx = 0;
-
-static GrHwConfiguration glbHWConfig;
-static int glbCurrentBoard = 0;
-
-
-#if defined(__WIN32__)
-static int
-cleangraphics(void)
-{
-   glbTotNumCtx = 1;
-   fxMesaDestroyContext(fxMesaCurrentCtx);
-
-   return 0;
-}
-#elif defined(__linux__)
-static void
-cleangraphics(void)
-{
-   glbTotNumCtx = 1;
-   fxMesaDestroyContext(fxMesaCurrentCtx);
-}
-
-static void
-cleangraphics_handler(int s)
-{
-   fprintf(stderr, "fxmesa: ERROR: received a not handled signal %d\n", s);
-
-   cleangraphics();
-/*    abort(); */
-   exit(1);
-}
-#endif
-
-
-/*
- * Query 3Dfx hardware presence/kind
- */
-static GLboolean GLAPIENTRY fxQueryHardware (void)
-{
- if (TDFX_DEBUG & VERBOSE_DRIVER) {
-    fprintf(stderr, "fxQueryHardware()\n");
- }
-
- if (!glbGlideInitialized) {
-    grGlideInit();
-    glb3DfxPresent = FX_grSstQueryHardware(&glbHWConfig);
-
-    glbGlideInitialized = 1;
-
-#if defined(__WIN32__)
-    _onexit((_onexit_t) cleangraphics);
-#elif defined(__linux__)
-    /* Only register handler if environment variable is not defined. */
-    if (!getenv("MESA_FX_NO_SIGNALS")) {
-       atexit(cleangraphics);
-    }
-#endif
- }
-
- return glb3DfxPresent;
-}
-
-
-/*
- * Select the Voodoo board to use when creating
- * a new context.
- */
-GLint GLAPIENTRY fxMesaSelectCurrentBoard (int n)
-{
-   fxQueryHardware();
-
-   if ((n < 0) || (n >= glbHWConfig.num_sst))
-      return -1;
-
-   return glbHWConfig.SSTs[glbCurrentBoard = n].type;
-}
-
-
-fxMesaContext GLAPIENTRY fxMesaGetCurrentContext (void)
-{
- return fxMesaCurrentCtx;
-}
-
-
-void GLAPIENTRY fxGetScreenGeometry (GLint *w, GLint *h)
-{
- GLint width = 0;
- GLint height = 0;
- 
- if (fxMesaCurrentCtx != NULL) {
-    width = fxMesaCurrentCtx->screen_width;
-    height = fxMesaCurrentCtx->screen_height;
- }
-
- if (w != NULL) {
-    *w = width;
- }
- if (h != NULL) {
-    *h = height;
- }
-}
-
-
-/*
- * The 3Dfx Global Palette extension for GLQuake.
- * More a trick than a real extesion, use the shared global
- * palette extension. 
- */
-extern void GLAPIENTRY gl3DfxSetPaletteEXT(GLuint * pal);	/* silence warning */
-void GLAPIENTRY
-gl3DfxSetPaletteEXT(GLuint * pal)
-{
-   fxMesaContext fxMesa = fxMesaCurrentCtx;
-
-   if (TDFX_DEBUG & VERBOSE_DRIVER) {
-      int i;
-
-      fprintf(stderr, "gl3DfxSetPaletteEXT(...)\n");
-
-      for (i = 0; i < 256; i++) {
-	 fprintf(stderr, "\t%x\n", pal[i]);
-      }
-   }
-
-   if (fxMesa) {
-      fxMesa->haveGlobalPaletteTexture = 1;
-
-      grTexDownloadTable(GR_TEXTABLE_PALETTE, (GuTexPalette *) pal);
-   }
-}
-
-
-static GrScreenResolution_t fxBestResolution (int width, int height)
-{
- static int resolutions[][3] = {
-        { GR_RESOLUTION_320x200,    320,  200 },
-        { GR_RESOLUTION_320x240,    320,  240 },
-        { GR_RESOLUTION_400x256,    400,  256 },
-        { GR_RESOLUTION_512x384,    512,  384 },
-        { GR_RESOLUTION_640x200,    640,  200 },
-        { GR_RESOLUTION_640x350,    640,  350 },
-        { GR_RESOLUTION_640x400,    640,  400 },
-        { GR_RESOLUTION_640x480,    640,  480 },
-        { GR_RESOLUTION_800x600,    800,  600 },
-        { GR_RESOLUTION_960x720,    960,  720 },
-        { GR_RESOLUTION_856x480,    856,  480 },
-        { GR_RESOLUTION_512x256,    512,  256 },
-        { GR_RESOLUTION_1024x768,  1024,  768 },
-        { GR_RESOLUTION_1280x1024, 1280, 1024 },
-        { GR_RESOLUTION_1600x1200, 1600, 1200 },
-        { GR_RESOLUTION_400x300,    400,  300 },
-        { GR_RESOLUTION_1152x864,  1152,  864 },
-        { GR_RESOLUTION_1280x960,  1280,  960 },
-        { GR_RESOLUTION_1600x1024, 1600, 1024 },
-        { GR_RESOLUTION_1792x1344, 1792, 1344 },
-        { GR_RESOLUTION_1856x1392, 1856, 1392 },
-        { GR_RESOLUTION_1920x1440, 1920, 1440 },
-        { GR_RESOLUTION_2048x1536, 2048, 1536 },
-        { GR_RESOLUTION_2048x2048, 2048, 2048 }
- };
-
- int i, size;
- int lastvalidres = GR_RESOLUTION_640x480;
- int min = 2048 * 2048; /* max is GR_RESOLUTION_2048x2048 */
- GrResolution resTemplate = {
-              GR_QUERY_ANY,
-              GR_QUERY_ANY,
-              2 /*GR_QUERY_ANY */,
-              GR_QUERY_ANY
- };
- GrResolution *presSupported;
-
- fxQueryHardware();
-
- size = grQueryResolutions(&resTemplate, NULL);
- presSupported = malloc(size);
-        
- size /= sizeof(GrResolution);
- grQueryResolutions(&resTemplate, presSupported);
-
- for (i = 0; i < size; i++) {
-     int r = presSupported[i].resolution;
-     if ((width <= resolutions[r][1]) && (height <= resolutions[r][2])) {
-        if (min > (resolutions[r][1] * resolutions[r][2])) {
-           min = resolutions[r][1] * resolutions[r][2];
-           lastvalidres = r;
-        }
-     }
- }
-
- free(presSupported);
-
- return resolutions[lastvalidres][0];
-}
-
-
-fxMesaContext GLAPIENTRY
-fxMesaCreateBestContext(GLuint win, GLint width, GLint height,
-			const GLint attribList[])
-{
- int res = fxBestResolution(width, height);
-
- if (res == -1) {
-    return NULL;
- }
-
- return fxMesaCreateContext(win, res, GR_REFRESH_60Hz, attribList);
-}
-
-
-/*
- * Create a new FX/Mesa context and return a handle to it.
- */
-fxMesaContext GLAPIENTRY
-fxMesaCreateContext(GLuint win,
-		    GrScreenResolution_t res,
-		    GrScreenRefresh_t ref, const GLint attribList[])
-{
- fxMesaContext fxMesa = NULL;
- GLcontext *ctx = NULL, *shareCtx = NULL;
- struct dd_function_table functions;
-
- int i;
- const char *str;
- int sliaa, numSLI, samplesPerChip;
- struct SstCard_St *voodoo;
- struct tdfx_glide *Glide;
-
- GLboolean aux;
- GLboolean doubleBuffer;
- GLuint colDepth;
- GLuint depthSize, alphaSize, stencilSize, accumSize;
- GLuint redBits, greenBits, blueBits, alphaBits;
- GrPixelFormat_t pixFmt;
-   
- if (TDFX_DEBUG & VERBOSE_DRIVER) {
-    fprintf(stderr, "fxMesaCreateContext(...)\n");
- }
-
- /* Okay, first process the user flags */
- aux = GL_FALSE;
- doubleBuffer = GL_FALSE;
- colDepth = 16;
- depthSize = alphaSize = stencilSize = accumSize = 0;
-
- i = 0;
- while (attribList[i] != FXMESA_NONE) {
-       switch (attribList[i]) {
-              case FXMESA_COLORDEPTH:
-	           colDepth = attribList[++i];
-	           break;
-              case FXMESA_DOUBLEBUFFER:
-	           doubleBuffer = GL_TRUE;
-	           break;
-              case FXMESA_ALPHA_SIZE:
-	           if ((alphaSize = attribList[++i])) {
-	              aux = GL_TRUE;
-                   }
-	           break;
-              case FXMESA_DEPTH_SIZE:
-	           if ((depthSize = attribList[++i])) {
-	              aux = GL_TRUE;
-                   }
-	           break;
-              case FXMESA_STENCIL_SIZE:
-	           stencilSize = attribList[++i];
-	           break;
-              case FXMESA_ACCUM_SIZE:
-	           accumSize = attribList[++i];
-	           break;
-              /* XXX ugly hack here for sharing display lists */
-              case FXMESA_SHARE_CONTEXT:
-                   shareCtx = (GLcontext *)attribList[++i];
-	           break;
-              default:
-                   fprintf(stderr, "fxMesaCreateContext: ERROR: wrong parameter (%d) passed\n", attribList[i]);
-	           return NULL;
-       }
-       i++;
- }
-
- if (!fxQueryHardware()) {
-    str = "no Voodoo hardware!";
-    goto errorhandler;
- }
-
- grSstSelect(glbCurrentBoard);
- /*grEnable(GR_OPENGL_MODE_EXT);*/ /* [koolsmoky] */
- voodoo = &glbHWConfig.SSTs[glbCurrentBoard];
-
- fxMesa = (fxMesaContext)CALLOC_STRUCT(tfxMesaContext);
- if (!fxMesa) {
-    str = "private context";
-    goto errorhandler;
- }
-
- if (getenv("MESA_FX_INFO")) {
-    fxMesa->verbose = GL_TRUE;
- }
-
- fxMesa->type = voodoo->type;
- fxMesa->HavePalExt = voodoo->HavePalExt && !getenv("MESA_FX_IGNORE_PALEXT");
- fxMesa->HavePixExt = voodoo->HavePixExt && !getenv("MESA_FX_IGNORE_PIXEXT");
- fxMesa->HaveTexFmt = voodoo->HaveTexFmt && !getenv("MESA_FX_IGNORE_TEXFMT");
- fxMesa->HaveCmbExt = voodoo->HaveCmbExt && !getenv("MESA_FX_IGNORE_CMBEXT");
- fxMesa->HaveMirExt = voodoo->HaveMirExt && !getenv("MESA_FX_IGNORE_MIREXT");
- fxMesa->HaveTexUma = voodoo->HaveTexUma && !getenv("MESA_FX_IGNORE_TEXUMA");
- fxMesa->Glide = glbHWConfig.Glide;
- Glide = &fxMesa->Glide;
- fxMesa->HaveTexus2 = Glide->txImgQuantize &&
-                      Glide->txMipQuantize &&
-                      Glide->txPalToNcc && !getenv("MESA_FX_IGNORE_TEXUS2");
-
- /* Determine if we need vertex swapping, RGB order and SLI/AA */
- sliaa = 0;
- switch (fxMesa->type) {
-        case GR_SSTTYPE_VOODOO:
-        case GR_SSTTYPE_SST96:
-        case GR_SSTTYPE_Banshee:
-             fxMesa->bgrOrder = GL_TRUE;
-             fxMesa->snapVertices = (getenv("MESA_FX_NOSNAP") == NULL);
-             break;
-        case GR_SSTTYPE_Voodoo2:
-             fxMesa->bgrOrder = GL_TRUE;
-             fxMesa->snapVertices = GL_FALSE;
-             break;
-        case GR_SSTTYPE_Voodoo4:
-        case GR_SSTTYPE_Voodoo5:
-             /* number of SLI units and AA Samples per chip */
-             if ((str = Glide->grGetRegistryOrEnvironmentStringExt("SSTH3_SLI_AA_CONFIGURATION")) != NULL) {
-                sliaa = atoi(str);
-             }
-        case GR_SSTTYPE_Voodoo3:
-        default:
-             fxMesa->bgrOrder = GL_FALSE;
-             fxMesa->snapVertices = GL_FALSE;
-             break;
- }
- /* XXX todo - Add the old SLI/AA settings for Napalm. */
- switch(voodoo->numChips) {
- case 4: /* 4 chips */
-   switch(sliaa) {
-   case 8: /* 8 Sample AA */
-     numSLI         = 1;
-     samplesPerChip = 2;
-     break;
-   case 7: /* 4 Sample AA */
-     numSLI         = 1;
-     samplesPerChip = 1;
-     break;
-   case 6: /* 2 Sample AA */
-     numSLI         = 2;
-     samplesPerChip = 1;
-     break;
-   default:
-     numSLI         = 4;
-     samplesPerChip = 1;
-   }
-   break;
- case 2: /* 2 chips */
-   switch(sliaa) {
-   case 4: /* 4 Sample AA */
-     numSLI         = 1;
-     samplesPerChip = 2;
-     break;
-   case 3: /* 2 Sample AA */
-     numSLI         = 1;
-     samplesPerChip = 1;
-     break;
-   default:
-     numSLI         = 2;
-     samplesPerChip = 1;
-   }
-   break;
- default: /* 1 chip */
-   switch(sliaa) {
-   case 1: /* 2 Sample AA */
-     numSLI         = 1;
-     samplesPerChip = 2;
-     break;
-   default:
-     numSLI         = 1;
-     samplesPerChip = 1;
-   }
- }
-
- fxMesa->fsaa = samplesPerChip * voodoo->numChips / numSLI; /* 1:noFSAA, 2:2xFSAA, 4:4xFSAA, 8:8xFSAA */
-
- switch (fxMesa->colDepth = colDepth) {
-   case 15:
-     redBits   = 5;
-     greenBits = 5;
-     blueBits  = 5;
-     alphaBits = depthSize ? 1 : 8;
-     switch(fxMesa->fsaa) {
-       case 8:
-         pixFmt = GR_PIXFMT_AA_8_ARGB_1555;
-         break;
-       case 4:
-         pixFmt = GR_PIXFMT_AA_4_ARGB_1555;
-         break;
-       case 2:
-         pixFmt = GR_PIXFMT_AA_2_ARGB_1555;
-         break;
-       default:
-         pixFmt = GR_PIXFMT_ARGB_1555;
-     }
-     break;
-   case 16:
-     redBits   = 5;
-     greenBits = 6;
-     blueBits  = 5;
-     alphaBits = depthSize ? 0 : 8;
-     switch(fxMesa->fsaa) {
-       case 8:
-         pixFmt = GR_PIXFMT_AA_8_RGB_565;
-         break;
-       case 4:
-         pixFmt = GR_PIXFMT_AA_4_RGB_565;
-         break;
-       case 2:
-         pixFmt = GR_PIXFMT_AA_2_RGB_565;
-         break;
-       default:
-         pixFmt = GR_PIXFMT_RGB_565;
-     }
-     break;
-   case 24:
-     fxMesa->colDepth = 32;
-   case 32:
-     redBits   = 8;
-     greenBits = 8;
-     blueBits  = 8;
-     alphaBits = 8;
-     switch(fxMesa->fsaa) {
-       case 8:
-         pixFmt = GR_PIXFMT_AA_8_ARGB_8888;
-         break;
-       case 4:
-         pixFmt = GR_PIXFMT_AA_4_ARGB_8888;
-         break;
-       case 2:
-         pixFmt = GR_PIXFMT_AA_2_ARGB_8888;
-         break;
-       default:
-         pixFmt = GR_PIXFMT_ARGB_8888;
-     }
-     break;
-   default:
-     str = "pixelFormat";
-     goto errorhandler;
- }
-
- /* Tips:
-  * 1. we don't bother setting/checking AUX for stencil, because we'll decide
-  *    later whether we have HW stencil, based on depth buffer (thus AUX is
-  *    properly set)
-  * 2. when both DEPTH and ALPHA are enabled, depth should win. However, it is
-  *    not clear whether 15bpp and 32bpp require AUX alpha buffer. Furthermore,
-  *    alpha buffering is required only if destination alpha is used in alpha
-  *    blending; alpha blending modes that do not use destination alpha can be
-  *    used w/o alpha buffer.
-  * 3. `alphaBits' is what we can provide
-  *    `alphaSize' is what app requests
-  *    if we cannot provide enough bits for alpha buffer, we should fallback to
-  *    SW alpha. However, setting `alphaBits' to `alphaSize' might confuse some
-  *    of the span functions...
-  */
-
- fxMesa->haveHwAlpha = GL_FALSE;
- if (alphaSize && (alphaSize <= alphaBits)) {
-    alphaSize = alphaBits;
-    fxMesa->haveHwAlpha = GL_TRUE;
- }
-
- fxMesa->haveHwStencil = (fxMesa->HavePixExt && stencilSize && depthSize == 24);
-
- fxMesa->haveZBuffer = depthSize > 0;
- fxMesa->haveDoubleBuffer = doubleBuffer;
- fxMesa->haveGlobalPaletteTexture = GL_FALSE;
- fxMesa->board = glbCurrentBoard;
-
- fxMesa->haveTwoTMUs = (voodoo->nTexelfx > 1);
-
- if ((str = Glide->grGetRegistryOrEnvironmentStringExt("FX_GLIDE_NUM_TMU"))) {
-    if (atoi(str) <= 1) {
-       fxMesa->haveTwoTMUs = GL_FALSE;
-    }
- }
-
- if ((str = Glide->grGetRegistryOrEnvironmentStringExt("FX_GLIDE_SWAPPENDINGCOUNT"))) {
-    fxMesa->maxPendingSwapBuffers = atoi(str);
-    if (fxMesa->maxPendingSwapBuffers > 6) {
-       fxMesa->maxPendingSwapBuffers = 6;
-    } else if (fxMesa->maxPendingSwapBuffers < 0) {
-       fxMesa->maxPendingSwapBuffers = 0;
-    }
- } else {
-    fxMesa->maxPendingSwapBuffers = 2;
- }
-
- if ((str = Glide->grGetRegistryOrEnvironmentStringExt("FX_GLIDE_SWAPINTERVAL"))) {
-    fxMesa->swapInterval = atoi(str);
- } else {
-    fxMesa->swapInterval = 0;
- }
-
- BEGIN_BOARD_LOCK();
- if (fxMesa->HavePixExt) {
-    fxMesa->glideContext = Glide->grSstWinOpenExt((FxU32)win, res, ref,
-                                                  GR_COLORFORMAT_ABGR, GR_ORIGIN_LOWER_LEFT,
-                                                  pixFmt,
-                                                  2, aux);
- } else if (pixFmt == GR_PIXFMT_RGB_565) {
-    fxMesa->glideContext = grSstWinOpen((FxU32)win, res, ref,
-                                        GR_COLORFORMAT_ABGR, GR_ORIGIN_LOWER_LEFT,
-                                        2, aux);
- } else {
-    fxMesa->glideContext = 0;
- }
- END_BOARD_LOCK();
- if (!fxMesa->glideContext) {
-    str = "grSstWinOpen";
-    goto errorhandler;
- }
-
-   /* screen */
-   fxMesa->screen_width = FX_grSstScreenWidth();
-   fxMesa->screen_height = FX_grSstScreenHeight();
-
-   /* window inside screen */
-   fxMesa->width = fxMesa->screen_width;
-   fxMesa->height = fxMesa->screen_height;
-
-   /* scissor inside window */
-   fxMesa->clipMinX = 0;
-   fxMesa->clipMaxX = fxMesa->width;
-   fxMesa->clipMinY = 0;
-   fxMesa->clipMaxY = fxMesa->height;
-
-   if (fxMesa->verbose) {
-      FxI32 tmuRam, fbRam;
-
-      /* Not that it matters, but tmuRam and fbRam change after grSstWinOpen. */
-      tmuRam = voodoo->tmuConfig[GR_TMU0].tmuRam;
-      fbRam  = voodoo->fbRam;
-      BEGIN_BOARD_LOCK();
-      grGet(GR_MEMORY_TMU, 4, &tmuRam);
-      grGet(GR_MEMORY_FB, 4, &fbRam);
-      END_BOARD_LOCK();
-
-      fprintf(stderr, "Voodoo Using Glide %s\n", grGetString(GR_VERSION));
-      fprintf(stderr, "Voodoo Board: %d/%d, %s, %d GPU\n",
-                      fxMesa->board + 1,
-                      glbHWConfig.num_sst,
-                      grGetString(GR_HARDWARE),
-                      voodoo->numChips);
-      fprintf(stderr, "Voodoo Memory: FB = %ld, TM = %d x %ld\n",
-                      fbRam,
-                      voodoo->nTexelfx,
-                      tmuRam);
-      fprintf(stderr, "Voodoo Screen: %dx%d:%d %s, %svertex snapping\n",
-	              fxMesa->screen_width,
-                      fxMesa->screen_height,
-                      colDepth,
-                      fxMesa->bgrOrder ? "BGR" : "RGB",
-                      fxMesa->snapVertices ? "" : "no ");
-   }
-
-  sprintf(fxMesa->rendererString, "Mesa %s v0.63 %s%s",
-          grGetString(GR_RENDERER),
-          grGetString(GR_HARDWARE),
-          ((fxMesa->type < GR_SSTTYPE_Voodoo4) && (voodoo->numChips > 1)) ? " SLI" : "");
-
-   fxMesa->glVis = _mesa_create_visual(GL_TRUE,		/* RGB mode */
-				       doubleBuffer,
-				       GL_FALSE,	/* stereo */
-				       redBits,		/* RGBA.R bits */
-				       greenBits,	/* RGBA.G bits */
-				       blueBits,	/* RGBA.B bits */
-				       alphaSize,	/* RGBA.A bits */
-				       0,		/* index bits */
-				       depthSize,	/* depth_size */
-				       stencilSize,	/* stencil_size */
-				       accumSize,
-				       accumSize,
-				       accumSize,
-				       alphaSize ? accumSize : 0,
-                                       1);
-   if (!fxMesa->glVis) {
-      str = "_mesa_create_visual";
-      goto errorhandler;
-   }
-
-   _mesa_init_driver_functions(&functions);
-   ctx = fxMesa->glCtx = _mesa_create_context(fxMesa->glVis, shareCtx,
-					      &functions, (void *) fxMesa);
-   if (!ctx) {
-      str = "_mesa_create_context";
-      goto errorhandler;
-   }
-
-
-   if (!fxDDInitFxMesaContext(fxMesa)) {
-      str = "fxDDInitFxMesaContext";
-      goto errorhandler;
-   }
-
-
-   fxMesa->glBuffer = _mesa_create_framebuffer(fxMesa->glVis);
-#if 0
-/* XXX this is a complete mess :(
- *	_mesa_add_soft_renderbuffers
- *	driNewRenderbuffer
- */
-					       GL_FALSE,	/* no software depth */
-					       stencilSize && !fxMesa->haveHwStencil,
-					       fxMesa->glVis->accumRedBits > 0,
-					       alphaSize && !fxMesa->haveHwAlpha);
-#endif
-   if (!fxMesa->glBuffer) {
-      str = "_mesa_create_framebuffer";
-      goto errorhandler;
-   }
-
-   glbTotNumCtx++;
-
-   /* install signal handlers */
-#if defined(__linux__)
-   /* Only install if environment var. is not set. */
-   if (!getenv("MESA_FX_NO_SIGNALS")) {
-      signal(SIGINT, cleangraphics_handler);
-      signal(SIGHUP, cleangraphics_handler);
-      signal(SIGPIPE, cleangraphics_handler);
-      signal(SIGFPE, cleangraphics_handler);
-      signal(SIGBUS, cleangraphics_handler);
-      signal(SIGILL, cleangraphics_handler);
-      signal(SIGSEGV, cleangraphics_handler);
-      signal(SIGTERM, cleangraphics_handler);
-   }
-#endif
-
-   return fxMesa;
-
-errorhandler:
- if (fxMesa) {
-    if (fxMesa->glideContext) {
-       grSstWinClose(fxMesa->glideContext);
-       fxMesa->glideContext = 0;
-    }
-
-    if (fxMesa->state) {
-       FREE(fxMesa->state);
-    }
-    if (fxMesa->fogTable) {
-       FREE(fxMesa->fogTable);
-    }
-    if (fxMesa->glBuffer) {
-       _mesa_reference_framebuffer(&fxMesa->glBuffer, NULL);
-    }
-    if (fxMesa->glVis) {
-       _mesa_destroy_visual(fxMesa->glVis);
-    }
-    if (fxMesa->glCtx) {
-       _mesa_destroy_context(fxMesa->glCtx);
-    }
-    FREE(fxMesa);
- }
-
- fprintf(stderr, "fxMesaCreateContext: ERROR: %s\n", str);
- return NULL;
-}
-
-
-/*
- * Function to set the new window size in the context (mainly for the Voodoo Rush)
- */
-void GLAPIENTRY
-fxMesaUpdateScreenSize(fxMesaContext fxMesa)
-{
-   fxMesa->width = FX_grSstScreenWidth();
-   fxMesa->height = FX_grSstScreenHeight();
-}
-
-
-/*
- * Destroy the given FX/Mesa context.
- */
-void GLAPIENTRY
-fxMesaDestroyContext(fxMesaContext fxMesa)
-{
-   if (TDFX_DEBUG & VERBOSE_DRIVER) {
-      fprintf(stderr, "fxMesaDestroyContext(...)\n");
-   }
-
-   if (!fxMesa)
-      return;
-
-   if (fxMesa->verbose) {
-      fprintf(stderr, "Misc Stats:\n");
-      fprintf(stderr, "  # swap buffer: %u\n", fxMesa->stats.swapBuffer);
-
-      if (!fxMesa->stats.swapBuffer)
-	 fxMesa->stats.swapBuffer = 1;
-
-      fprintf(stderr, "Textures Stats:\n");
-      fprintf(stderr, "  Free texture memory on TMU0: %d\n",
-	      fxMesa->freeTexMem[FX_TMU0]);
-      if (fxMesa->haveTwoTMUs)
-	 fprintf(stderr, "  Free texture memory on TMU1: %d\n",
-		 fxMesa->freeTexMem[FX_TMU1]);
-      fprintf(stderr, "  # request to TMM to upload a texture objects: %u\n",
-	      fxMesa->stats.reqTexUpload);
-      fprintf(stderr,
-	      "  # request to TMM to upload a texture objects per swapbuffer: %.2f\n",
-	      fxMesa->stats.reqTexUpload / (float) fxMesa->stats.swapBuffer);
-      fprintf(stderr, "  # texture objects uploaded: %u\n",
-	      fxMesa->stats.texUpload);
-      fprintf(stderr, "  # texture objects uploaded per swapbuffer: %.2f\n",
-	      fxMesa->stats.texUpload / (float) fxMesa->stats.swapBuffer);
-      fprintf(stderr, "  # MBs uploaded to texture memory: %.2f\n",
-	      fxMesa->stats.memTexUpload / (float) (1 << 20));
-      fprintf(stderr,
-	      "  # MBs uploaded to texture memory per swapbuffer: %.2f\n",
-	      (fxMesa->stats.memTexUpload /
-	       (float) fxMesa->stats.swapBuffer) / (float) (1 << 20));
-   }
-
-   glbTotNumCtx--;
-
-   if (!glbTotNumCtx && getenv("MESA_FX_INFO")) {
-      GrSstPerfStats_t st;
-
-      FX_grSstPerfStats(&st);
-
-      fprintf(stderr, "Pixels Stats:\n");
-      fprintf(stderr, "  # pixels processed (minus buffer clears): %u\n",
-              (unsigned) st.pixelsIn);
-      fprintf(stderr, "  # pixels not drawn due to chroma key test failure: %u\n",
-              (unsigned) st.chromaFail);
-      fprintf(stderr, "  # pixels not drawn due to depth test failure: %u\n",
-              (unsigned) st.zFuncFail);
-      fprintf(stderr,
-              "  # pixels not drawn due to alpha test failure: %u\n",
-              (unsigned) st.aFuncFail);
-      fprintf(stderr, "  # pixels drawn (including buffer clears and LFB writes): %u\n",
-              (unsigned) st.pixelsOut);
-   }
-
-   /* close the hardware first,
-    * so we can debug atexit problems (memory leaks, etc).
-    */
-   grSstWinClose(fxMesa->glideContext);
-   fxCloseHardware();
-
-   fxDDDestroyFxMesaContext(fxMesa); /* must be before _mesa_destroy_context */
-   _mesa_destroy_visual(fxMesa->glVis);
-   _mesa_destroy_context(fxMesa->glCtx);
-   _mesa_reference_framebuffer(&fxMesa->glBuffer, NULL);
-   fxTMClose(fxMesa); /* must be after _mesa_destroy_context */
-
-   FREE(fxMesa);
-
-   if (fxMesa == fxMesaCurrentCtx)
-      fxMesaCurrentCtx = NULL;
-}
-
-
-/*
- * Make the specified FX/Mesa context the current one.
- */
-void GLAPIENTRY
-fxMesaMakeCurrent(fxMesaContext fxMesa)
-{
-   if (!fxMesa) {
-      _mesa_make_current(NULL, NULL, NULL);
-      fxMesaCurrentCtx = NULL;
-
-      if (TDFX_DEBUG & VERBOSE_DRIVER) {
-	 fprintf(stderr, "fxMesaMakeCurrent(NULL)\n");
-      }
-
-      return;
-   }
-
-   /* if this context is already the current one, we can return early */
-   if (fxMesaCurrentCtx == fxMesa
-       && fxMesaCurrentCtx->glCtx == _mesa_get_current_context()) {
-      if (TDFX_DEBUG & VERBOSE_DRIVER) {
-	 fprintf(stderr, "fxMesaMakeCurrent(NOP)\n");
-      }
-
-      return;
-   }
-
-   if (TDFX_DEBUG & VERBOSE_DRIVER) {
-      fprintf(stderr, "fxMesaMakeCurrent(...)\n");
-   }
-
-   if (fxMesaCurrentCtx)
-      grGlideGetState((GrState *) fxMesaCurrentCtx->state);
-
-   fxMesaCurrentCtx = fxMesa;
-
-   grSstSelect(fxMesa->board);
-   grGlideSetState((GrState *) fxMesa->state);
-
-   _mesa_make_current(fxMesa->glCtx, fxMesa->glBuffer, fxMesa->glBuffer);
-
-   fxSetupDDPointers(fxMesa->glCtx);
-}
-
-
-/*
- * Swap front/back buffers for current context if double buffered.
- */
-void GLAPIENTRY
-fxMesaSwapBuffers(void)
-{
-   if (TDFX_DEBUG & VERBOSE_DRIVER) {
-      fprintf(stderr, "fxMesaSwapBuffers()\n");
-   }
-
-   if (fxMesaCurrentCtx) {
-      _mesa_notifySwapBuffers(fxMesaCurrentCtx->glCtx);
-
-      if (fxMesaCurrentCtx->haveDoubleBuffer) {
-
-	 grBufferSwap(fxMesaCurrentCtx->swapInterval);
-
-#if 0
-	 /*
-	  * Don't allow swap buffer commands to build up!
-	  */
-	 while (FX_grGetInteger(GR_PENDING_BUFFERSWAPS) >
-		fxMesaCurrentCtx->maxPendingSwapBuffers)
-	    /* The driver is able to sleep when waiting for the completation
-	       of multiple swapbuffer operations instead of wasting
-	       CPU time (NOTE: you must uncomment the following line in the
-	       in order to enable this option) */
-	    /* usleep(10000); */
-	    ;
-#endif
-
-	 fxMesaCurrentCtx->stats.swapBuffer++;
-      }
-   }
-}
-
-
-/*
- * Shutdown Glide library
- */
-void GLAPIENTRY
-fxCloseHardware(void)
-{
-   if (glbGlideInitialized) {
-      if (glbTotNumCtx == 0) {
-	 grGlideShutdown();
-	 glbGlideInitialized = 0;
-      }
-   }
-}
-
-
-#else
-
-
-/*
- * Need this to provide at least one external definition.
- */
-extern int gl_fx_dummy_function_api(void);
-int
-gl_fx_dummy_function_api(void)
-{
-   return 0;
-}
-
-#endif /* FX */
diff --git a/src/mesa/drivers/glide/fxdd.c b/src/mesa/drivers/glide/fxdd.c
deleted file mode 100644
index b78b101240..0000000000
--- a/src/mesa/drivers/glide/fxdd.c
+++ /dev/null
@@ -1,2197 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  5.1
- *
- * Copyright (C) 1999-2003  Brian Paul   All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/* Authors:
- *    David Bucciarelli
- *    Brian Paul
- *    Daryll Strauss
- *    Keith Whitwell
- *    Daniel Borca
- *    Hiroshi Morii
- */
-
-/* fxdd.c - 3Dfx VooDoo Mesa device driver functions */
-
-
-#ifdef HAVE_CONFIG_H
-#include "conf.h"
-#endif
-
-#if defined(FX)
-
-#include "main/image.h"
-#include "main/mtypes.h"
-#include "fxdrv.h"
-#include "main/buffers.h"
-#include "main/enums.h"
-#include "main/extensions.h"
-#include "main/macros.h"
-#include "main/texstore.h"
-#include "main/teximage.h"
-#include "swrast/swrast.h"
-#include "swrast/s_context.h"
-#include "swrast_setup/swrast_setup.h"
-#include "tnl/tnl.h"
-#include "tnl/t_context.h"
-#include "tnl/t_pipeline.h"
-#include "vbo/vbo.h"
-
-
-
-/* lookup table for scaling 4 bit colors up to 8 bits */
-GLuint FX_rgb_scale_4[16] = {
-   0,   17,  34,  51,  68,  85,  102, 119,
-   136, 153, 170, 187, 204, 221, 238, 255
-};
-
-/* lookup table for scaling 5 bit colors up to 8 bits */
-GLuint FX_rgb_scale_5[32] = {
-   0,   8,   16,  25,  33,  41,  49,  58,
-   66,  74,  82,  90,  99,  107, 115, 123,
-   132, 140, 148, 156, 165, 173, 181, 189,
-   197, 206, 214, 222, 230, 239, 247, 255
-};
-
-/* lookup table for scaling 6 bit colors up to 8 bits */
-GLuint FX_rgb_scale_6[64] = {
-   0,   4,   8,   12,  16,  20,  24,  28,
-   32,  36,  40,  45,  49,  53,  57,  61,
-   65,  69,  73,  77,  81,  85,  89,  93,
-   97,  101, 105, 109, 113, 117, 121, 125,
-   130, 134, 138, 142, 146, 150, 154, 158,
-   162, 166, 170, 174, 178, 182, 186, 190,
-   194, 198, 202, 206, 210, 215, 219, 223,
-   227, 231, 235, 239, 243, 247, 251, 255
-};
-
-
-/*
- * Disable color by masking out R, G, B, A
- */
-static void fxDisableColor (fxMesaContext fxMesa)
-{
- if (fxMesa->colDepth == 32) {
-    /* 32bpp mode */
-    fxMesa->Glide.grColorMaskExt(FXFALSE, FXFALSE, FXFALSE, FXFALSE);
- } else {
-    /* 15/16 bpp mode */
-    grColorMask(FXFALSE, FXFALSE);
- }
-}
-
-
-/**********************************************************************/
-/*****                 Miscellaneous functions                    *****/
-/**********************************************************************/
-
-/* Return buffer size information */
-static void
-fxDDGetBufferSize(GLframebuffer *buffer, GLuint *width, GLuint *height)
-{
-   GET_CURRENT_CONTEXT(ctx);
-   if (ctx && FX_CONTEXT(ctx)) {
-      fxMesaContext fxMesa = FX_CONTEXT(ctx);
-
-      if (TDFX_DEBUG & VERBOSE_DRIVER) {
-         fprintf(stderr, "fxDDGetBufferSize(...)\n");
-      }
-
-      *width = fxMesa->width;
-      *height = fxMesa->height;
-   }
-}
-
-
-/**
- * We only implement this function as a mechanism to check if the
- * framebuffer size has changed (and update corresponding state).
- */
-static void
-fxDDViewport(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h)
-{
-   GLuint newWidth, newHeight;
-   GLframebuffer *buffer = ctx->WinSysDrawBuffer;
-   fxDDGetBufferSize( buffer, &newWidth, &newHeight );
-   if (buffer->Width != newWidth || buffer->Height != newHeight) {
-      _mesa_resize_framebuffer(ctx, buffer, newWidth, newHeight );
-   }
-}
-
-
-/* Implements glClearColor() */
-static void
-fxDDClearColor(GLcontext * ctx, const GLfloat color[4])
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   GLubyte col[4];
-
-   if (TDFX_DEBUG & VERBOSE_DRIVER) {
-      fprintf(stderr, "fxDDClearColor(%f, %f, %f, %f)\n",
-	              color[0], color[1], color[2], color[3]);
-   }
-
-   CLAMPED_FLOAT_TO_UBYTE(col[0], color[0]);
-   CLAMPED_FLOAT_TO_UBYTE(col[1], color[1]);
-   CLAMPED_FLOAT_TO_UBYTE(col[2], color[2]);
-   CLAMPED_FLOAT_TO_UBYTE(col[3], color[3]);
-
-   fxMesa->clearC = FXCOLOR4(col);
-   fxMesa->clearA = col[3];
-}
-
-
-/* Clear the color and/or depth buffers */
-static void fxDDClear( GLcontext *ctx, GLbitfield mask )
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   GLbitfield softwareMask = mask & (BUFFER_BIT_ACCUM);
-   const GLuint stencil_size = fxMesa->haveHwStencil ? ctx->Visual.stencilBits : 0;
-   const FxU32 clearD = (FxU32) (ctx->DrawBuffer->_DepthMaxF * ctx->Depth.Clear);
-   const FxU8 clearS = (FxU8) (ctx->Stencil.Clear & 0xff);
-
-   if ( TDFX_DEBUG & MESA_VERBOSE ) {
-      fprintf( stderr, "fxDDClear\n");
-   }
-
-   /* we can't clear accum buffers nor stereo */
-   mask &= ~(BUFFER_BIT_ACCUM | BUFFER_BIT_FRONT_RIGHT | BUFFER_BIT_BACK_RIGHT);
-
-   /* Need this check to respond to certain HW updates */
-   if (fxMesa->new_state & (FX_NEW_SCISSOR | FX_NEW_COLOR_MASK)) {
-      fxSetupScissor(ctx);
-      fxSetupColorMask(ctx);
-      fxMesa->new_state &= ~(FX_NEW_SCISSOR | FX_NEW_COLOR_MASK);
-   }
-
-   /*
-    * As per GL spec, color masking should be obeyed when clearing
-    */
-   if (ctx->Visual.greenBits != 8) {
-      /* can only do color masking if running in 24/32bpp on Napalm */
-      if (ctx->Color.ColorMask[RCOMP] != ctx->Color.ColorMask[GCOMP] ||
-          ctx->Color.ColorMask[GCOMP] != ctx->Color.ColorMask[BCOMP]) {
-         softwareMask |= (mask & (BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_BACK_LEFT));
-         mask &= ~(BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_BACK_LEFT);
-      }
-   }
-
-   if (fxMesa->haveHwStencil) {
-      /*
-       * If we want to clear stencil, it must be enabled
-       * in the HW, even if the stencil test is not enabled
-       * in the OGL state.
-       */
-      BEGIN_BOARD_LOCK();
-      if (mask & BUFFER_BIT_STENCIL) {
-	 fxMesa->Glide.grStencilMaskExt(fxMesa->unitsState.stencilWriteMask);
-	 /* set stencil ref value = desired clear value */
-	 fxMesa->Glide.grStencilFuncExt(GR_CMP_ALWAYS, clearS, 0xff);
-	 fxMesa->Glide.grStencilOpExt(GR_STENCILOP_REPLACE,
-                                   GR_STENCILOP_REPLACE, GR_STENCILOP_REPLACE);
-	 grEnable(GR_STENCIL_MODE_EXT);
-      }
-      else {
-	 grDisable(GR_STENCIL_MODE_EXT);
-      }
-      END_BOARD_LOCK();
-   } else if (mask & BUFFER_BIT_STENCIL) {
-      softwareMask |= (mask & (BUFFER_BIT_STENCIL));
-      mask &= ~(BUFFER_BIT_STENCIL);
-   }
-
-   /*
-    * This may be ugly, but it's needed in order to work around a number
-    * of Glide bugs.
-    */
-   BEGIN_CLIP_LOOP();
-   {
-      /*
-       * This could probably be done fancier but doing each possible case
-       * explicitly is less error prone.
-       */
-      switch (mask & ~BUFFER_BIT_STENCIL) {
-      case BUFFER_BIT_BACK_LEFT | BUFFER_BIT_DEPTH:
-	 /* back buffer & depth */
-         grDepthMask(FXTRUE);
-	 grRenderBuffer(GR_BUFFER_BACKBUFFER);
-	 if (stencil_size > 0) {
-            fxMesa->Glide.grBufferClearExt(fxMesa->clearC,
-                                           fxMesa->clearA,
-                                           clearD, clearS);
-         }
-	 else
-            grBufferClear(fxMesa->clearC,
-                          fxMesa->clearA,
-                          clearD);
-	 break;
-      case BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_DEPTH:
-	 /* XXX it appears that the depth buffer isn't cleared when
-	  * glRenderBuffer(GR_BUFFER_FRONTBUFFER) is set.
-	  * This is a work-around/
-	  */
-	 /* clear depth */
-         grDepthMask(FXTRUE);
-         fxDisableColor(fxMesa);
-	 grRenderBuffer(GR_BUFFER_BACKBUFFER);
-	 if (stencil_size > 0)
-            fxMesa->Glide.grBufferClearExt(fxMesa->clearC,
-                                           fxMesa->clearA,
-                                           clearD, clearS);
-	 else
-            grBufferClear(fxMesa->clearC,
-                          fxMesa->clearA,
-                          clearD);
-	 fxSetupColorMask(ctx);
-	 grDepthMask(FXFALSE);
-	 /* clear front */
-	 grRenderBuffer(GR_BUFFER_FRONTBUFFER);
-	 if (stencil_size > 0)
-            fxMesa->Glide.grBufferClearExt(fxMesa->clearC,
-                                           fxMesa->clearA,
-                                           clearD, clearS);
-	 else
-            grBufferClear(fxMesa->clearC,
-                          fxMesa->clearA,
-                          clearD);
-	 break;
-      case BUFFER_BIT_BACK_LEFT:
-	 /* back buffer only */
-	 grDepthMask(FXFALSE);
-	 grRenderBuffer(GR_BUFFER_BACKBUFFER);
-	 if (stencil_size > 0)
-            fxMesa->Glide.grBufferClearExt(fxMesa->clearC,
-                                           fxMesa->clearA,
-                                           clearD, clearS);
-	 else
-            grBufferClear(fxMesa->clearC,
-                          fxMesa->clearA,
-                          clearD);
-	 break;
-      case BUFFER_BIT_FRONT_LEFT:
-	 /* front buffer only */
-	 grDepthMask(FXFALSE);
-	 grRenderBuffer(GR_BUFFER_FRONTBUFFER);
-	 if (stencil_size > 0)
-            fxMesa->Glide.grBufferClearExt(fxMesa->clearC,
-                                           fxMesa->clearA,
-                                           clearD, clearS);
-	 else
-            grBufferClear(fxMesa->clearC,
-                          fxMesa->clearA,
-                          clearD);
-	 break;
-      case BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_BACK_LEFT:
-	 /* front and back */
-	 grDepthMask(FXFALSE);
-	 grRenderBuffer(GR_BUFFER_BACKBUFFER);
-	 if (stencil_size > 0)
-            fxMesa->Glide.grBufferClearExt(fxMesa->clearC,
-                                           fxMesa->clearA,
-                                           clearD, clearS);
-	 else
-            grBufferClear(fxMesa->clearC,
-                          fxMesa->clearA,
-                          clearD);
-	 grRenderBuffer(GR_BUFFER_FRONTBUFFER);
-	 if (stencil_size > 0)
-            fxMesa->Glide.grBufferClearExt(fxMesa->clearC,
-                                           fxMesa->clearA,
-                                           clearD, clearS);
-	 else
-            grBufferClear(fxMesa->clearC,
-                          fxMesa->clearA,
-                          clearD);
-	 break;
-      case BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_BACK_LEFT | BUFFER_BIT_DEPTH:
-	 /* clear back and depth */
-         grDepthMask(FXTRUE);
-	 grRenderBuffer(GR_BUFFER_BACKBUFFER);
-         if (stencil_size > 0)
-            fxMesa->Glide.grBufferClearExt(fxMesa->clearC,
-                                           fxMesa->clearA,
-                                           clearD, clearS);
-	 else
-            grBufferClear(fxMesa->clearC,
-                          fxMesa->clearA,
-                          clearD);
-	 /* clear front */
-	 grDepthMask(FXFALSE);
-	 grRenderBuffer(GR_BUFFER_FRONTBUFFER);
-	 if (stencil_size > 0)
-            fxMesa->Glide.grBufferClearExt(fxMesa->clearC,
-                                           fxMesa->clearA,
-                                           clearD, clearS);
-	 else
-            grBufferClear(fxMesa->clearC,
-                          fxMesa->clearA,
-                          clearD);
-	 break;
-      case BUFFER_BIT_DEPTH:
-	 /* just the depth buffer */
-         grDepthMask(FXTRUE);
-         fxDisableColor(fxMesa);
-	 grRenderBuffer(GR_BUFFER_BACKBUFFER);
-	 if (stencil_size > 0)
-            fxMesa->Glide.grBufferClearExt(fxMesa->clearC,
-                                           fxMesa->clearA,
-                                           clearD, clearS);
-	 else
-            grBufferClear(fxMesa->clearC,
-                          fxMesa->clearA,
-                          clearD);
-	 fxSetupColorMask(ctx);
-	 break;
-      default:
-         /* clear no color buffers or depth buffer but might clear stencil */
-	 if ((stencil_size > 0) && (mask & BUFFER_BIT_STENCIL)) {
-            /* XXX need this RenderBuffer call to work around Glide bug */
-            grDepthMask(FXFALSE);
-            grRenderBuffer(GR_BUFFER_BACKBUFFER);
-            fxDisableColor(fxMesa);
-            fxMesa->Glide.grBufferClearExt(fxMesa->clearC,
-                                           fxMesa->clearA,
-                                           clearD, clearS);
-            fxSetupColorMask(ctx);
-         }
-      }
-   }
-   END_CLIP_LOOP();
-
-   if (fxMesa->haveHwStencil) {
-      /* We changed the stencil state above.  Restore it! */
-      fxSetupStencil(ctx);
-   }
-   fxSetupDepthTest(ctx);
-   grRenderBuffer(fxMesa->currentFB);
-
-   if (softwareMask)
-      _swrast_Clear( ctx, softwareMask );
-}
-
-
-/* Set the buffer used for drawing */
-/* XXX support for separate read/draw buffers hasn't been tested */
-/* XXX GL_NONE disables color, but fails to correctly maintain state */
-static void
-fxDDSetDrawBuffer(GLcontext * ctx, GLenum mode)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-
-   if (TDFX_DEBUG & VERBOSE_DRIVER) {
-      fprintf(stderr, "fxDDSetDrawBuffer(%x)\n", (int)mode);
-   }
-
-   if (mode == GL_FRONT_LEFT) {
-      fxMesa->currentFB = GR_BUFFER_FRONTBUFFER;
-      grRenderBuffer(fxMesa->currentFB);
-   }
-   else if (mode == GL_BACK_LEFT) {
-      fxMesa->currentFB = GR_BUFFER_BACKBUFFER;
-      grRenderBuffer(fxMesa->currentFB);
-   }
-   else if (mode == GL_NONE) {
-      fxDisableColor(fxMesa);
-   }
-   else {
-      /* we'll need a software fallback */
-      /* XXX not implemented */
-   }
-
-   /* update s/w fallback state */
-   _swrast_DrawBuffer(ctx, mode);
-}
-
-
-static void
-fxDDDrawBitmap2 (GLcontext *ctx, GLint px, GLint py,
-		 GLsizei width, GLsizei height,
-		 const struct gl_pixelstore_attrib *unpack,
-		 const GLubyte *bitmap)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   SWcontext *swrast = SWRAST_CONTEXT(ctx);
-   GrLfbInfo_t info;
-   GrLfbWriteMode_t mode;
-   FxU16 color;
-   const struct gl_pixelstore_attrib *finalUnpack;
-   struct gl_pixelstore_attrib scissoredUnpack;
-
-   /* check if there's any raster operations enabled which we can't handle */
-   if (swrast->_RasterMask & (ALPHATEST_BIT |
-			      /*BLEND_BIT |*/   /* blending ok, through pixpipe */
-			      DEPTH_BIT |       /* could be done with RGB:DEPTH */
-			      FOG_BIT |         /* could be done with RGB:DEPTH */
-			      LOGIC_OP_BIT |
-			      /*CLIP_BIT |*/    /* clipping ok, below */
-			      STENCIL_BIT |
-			      MASKING_BIT |
-			      MULTI_DRAW_BIT |
-			      OCCLUSION_BIT |   /* nope! at least not yet */
-			      TEXTURE_BIT |
-			      FRAGPROG_BIT)) {
-      _swrast_Bitmap(ctx, px, py, width, height, unpack, bitmap);
-      return;
-   }
-
-   /* make sure the pixelpipe is configured correctly */
-   fxSetupFXUnits(ctx);
-
-   /* FIXME! _RasterMask & CLIP_BIT gets set if we're out of Viewport, also! */
-   if (ctx->Scissor.Enabled) {
-      /* This is a bit tricky, but by carefully adjusting the px, py,
-       * width, height, skipPixels and skipRows values we can do
-       * scissoring without special code in the rendering loop.
-       */
-
-      /* we'll construct a new pixelstore struct */
-      finalUnpack = &scissoredUnpack;
-      scissoredUnpack = *unpack;
-      if (scissoredUnpack.RowLength == 0)
-	 scissoredUnpack.RowLength = width;
-
-      /* clip left */
-      if (px < ctx->Scissor.X) {
-	 scissoredUnpack.SkipPixels += (ctx->Scissor.X - px);
-	 width -= (ctx->Scissor.X - px);
-	 px = ctx->Scissor.X;
-      }
-      /* clip right */
-      if (px + width >= ctx->Scissor.X + ctx->Scissor.Width) {
-	 width -= (px + width - (ctx->Scissor.X + ctx->Scissor.Width));
-      }
-      /* clip bottom */
-      if (py < ctx->Scissor.Y) {
-	 scissoredUnpack.SkipRows += (ctx->Scissor.Y - py);
-	 height -= (ctx->Scissor.Y - py);
-	 py = ctx->Scissor.Y;
-      }
-      /* clip top */
-      if (py + height >= ctx->Scissor.Y + ctx->Scissor.Height) {
-	 height -= (py + height - (ctx->Scissor.Y + ctx->Scissor.Height));
-      }
-
-      if (width <= 0 || height <= 0)
-	 return;
-   }
-   else {
-      finalUnpack = unpack;
-   }
-
-   /* compute pixel value */
-   {
-      GLint r = (GLint) (ctx->Current.RasterColor[RCOMP] * 255.0f);
-      GLint g = (GLint) (ctx->Current.RasterColor[GCOMP] * 255.0f);
-      GLint b = (GLint) (ctx->Current.RasterColor[BCOMP] * 255.0f);
-      GLint a = (GLint) (ctx->Current.RasterColor[ACOMP] * 255.0f);
-      if (fxMesa->colDepth == 15) {
-         color = TDFXPACKCOLOR1555(b, g, r, a);
-         mode = GR_LFBWRITEMODE_1555;
-      } else {
-         color = fxMesa->bgrOrder ? TDFXPACKCOLOR565(r, g, b) : TDFXPACKCOLOR565(b, g, r);
-         mode = GR_LFBWRITEMODE_565;
-      }
-   }
-
-   info.size = sizeof(info);
-   if (!grLfbLock(GR_LFB_WRITE_ONLY,
-		  fxMesa->currentFB,
-		  mode,
-		  GR_ORIGIN_LOWER_LEFT, FXTRUE, &info)) {
-      _swrast_Bitmap(ctx, px, py, width, height, finalUnpack, bitmap);
-      return;
-   }
-
-   {
-      const GLint winX = 0;
-      const GLint winY = 0;
-      /* The dest stride depends on the hardware and whether we're drawing
-       * to the front or back buffer.  This compile-time test seems to do
-       * the job for now.
-       */
-      const GLint dstStride = info.strideInBytes / 2;	/* stride in GLushorts */
-
-      GLint row;
-      /* compute dest address of bottom-left pixel in bitmap */
-      GLushort *dst = (GLushort *) info.lfbPtr
-	 + (winY + py) * dstStride + (winX + px);
-
-      for (row = 0; row < height; row++) {
-	 const GLubyte *src =
-	    (const GLubyte *) _mesa_image_address2d(finalUnpack,
-                                                    bitmap, width, height,
-                                                    GL_COLOR_INDEX, GL_BITMAP,
-                                                    row, 0);
-	 if (finalUnpack->LsbFirst) {
-	    /* least significan bit first */
-	    GLubyte mask = 1U << (finalUnpack->SkipPixels & 0x7);
-	    GLint col;
-	    for (col = 0; col < width; col++) {
-	       if (*src & mask) {
-		  dst[col] = color;
-	       }
-	       if (mask == 128U) {
-		  src++;
-		  mask = 1U;
-	       }
-	       else {
-		  mask = mask << 1;
-	       }
-	    }
-	    if (mask != 1)
-	       src++;
-	 }
-	 else {
-	    /* most significan bit first */
-	    GLubyte mask = 128U >> (finalUnpack->SkipPixels & 0x7);
-	    GLint col;
-	    for (col = 0; col < width; col++) {
-	       if (*src & mask) {
-		  dst[col] = color;
-	       }
-	       if (mask == 1U) {
-		  src++;
-		  mask = 128U;
-	       }
-	       else {
-		  mask = mask >> 1;
-	       }
-	    }
-	    if (mask != 128)
-	       src++;
-	 }
-	 dst += dstStride;
-      }
-   }
-
-   grLfbUnlock(GR_LFB_WRITE_ONLY, fxMesa->currentFB);
-}
-
-static void
-fxDDDrawBitmap4 (GLcontext *ctx, GLint px, GLint py,
-		 GLsizei width, GLsizei height,
-		 const struct gl_pixelstore_attrib *unpack,
-		 const GLubyte *bitmap)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   SWcontext *swrast = SWRAST_CONTEXT(ctx);
-   GrLfbInfo_t info;
-   FxU32 color;
-   const struct gl_pixelstore_attrib *finalUnpack;
-   struct gl_pixelstore_attrib scissoredUnpack;
-
-   /* check if there's any raster operations enabled which we can't handle */
-   if ((swrast->_RasterMask & (/*ALPHATEST_BIT |*/
-			      /*BLEND_BIT |*/   /* blending ok, through pixpipe */
-			      DEPTH_BIT |       /* could be done with RGB:DEPTH */
-			      FOG_BIT |         /* could be done with RGB:DEPTH */
-			      LOGIC_OP_BIT |
-			      /*CLIP_BIT |*/    /* clipping ok, below */
-			      STENCIL_BIT |
-			      /*MASKING_BIT |*/ /* masking ok, we're in 32bpp */
-			      MULTI_DRAW_BIT |
-			      OCCLUSION_BIT |   /* nope! at least not yet */
-			      TEXTURE_BIT |
-			      FRAGPROG_BIT))
-      ) {
-      _swrast_Bitmap(ctx, px, py, width, height, unpack, bitmap);
-      return;
-   }
-
-   /* make sure the pixelpipe is configured correctly */
-   fxSetupFXUnits(ctx);
-
-   /* FIXME! _RasterMask & CLIP_BIT gets set if we're out of Viewport, also! */
-   if (ctx->Scissor.Enabled) {
-      /* This is a bit tricky, but by carefully adjusting the px, py,
-       * width, height, skipPixels and skipRows values we can do
-       * scissoring without special code in the rendering loop.
-       */
-
-      /* we'll construct a new pixelstore struct */
-      finalUnpack = &scissoredUnpack;
-      scissoredUnpack = *unpack;
-      if (scissoredUnpack.RowLength == 0)
-	 scissoredUnpack.RowLength = width;
-
-      /* clip left */
-      if (px < ctx->Scissor.X) {
-	 scissoredUnpack.SkipPixels += (ctx->Scissor.X - px);
-	 width -= (ctx->Scissor.X - px);
-	 px = ctx->Scissor.X;
-      }
-      /* clip right */
-      if (px + width >= ctx->Scissor.X + ctx->Scissor.Width) {
-	 width -= (px + width - (ctx->Scissor.X + ctx->Scissor.Width));
-      }
-      /* clip bottom */
-      if (py < ctx->Scissor.Y) {
-	 scissoredUnpack.SkipRows += (ctx->Scissor.Y - py);
-	 height -= (ctx->Scissor.Y - py);
-	 py = ctx->Scissor.Y;
-      }
-      /* clip top */
-      if (py + height >= ctx->Scissor.Y + ctx->Scissor.Height) {
-	 height -= (py + height - (ctx->Scissor.Y + ctx->Scissor.Height));
-      }
-
-      if (width <= 0 || height <= 0)
-	 return;
-   }
-   else {
-      finalUnpack = unpack;
-   }
-
-   /* compute pixel value */
-   {
-      GLint r = (GLint) (ctx->Current.RasterColor[RCOMP] * 255.0f);
-      GLint g = (GLint) (ctx->Current.RasterColor[GCOMP] * 255.0f);
-      GLint b = (GLint) (ctx->Current.RasterColor[BCOMP] * 255.0f);
-      GLint a = (GLint) (ctx->Current.RasterColor[ACOMP] * 255.0f);
-      color = TDFXPACKCOLOR8888(b, g, r, a);
-   }
-
-   info.size = sizeof(info);
-   if (!grLfbLock(GR_LFB_WRITE_ONLY,
-		  fxMesa->currentFB,
-		  GR_LFBWRITEMODE_8888,
-		  GR_ORIGIN_LOWER_LEFT, FXTRUE, &info)) {
-      _swrast_Bitmap(ctx, px, py, width, height, finalUnpack, bitmap);
-      return;
-   }
-
-   {
-      const GLint winX = 0;
-      const GLint winY = 0;
-      /* The dest stride depends on the hardware and whether we're drawing
-       * to the front or back buffer.  This compile-time test seems to do
-       * the job for now.
-       */
-      const GLint dstStride = info.strideInBytes / 4;	/* stride in GLuints */
-
-      GLint row;
-      /* compute dest address of bottom-left pixel in bitmap */
-      GLuint *dst = (GLuint *) info.lfbPtr
-	 + (winY + py) * dstStride + (winX + px);
-
-      for (row = 0; row < height; row++) {
-	 const GLubyte *src =
-	    (const GLubyte *) _mesa_image_address2d(finalUnpack,
-                                                    bitmap, width, height,
-                                                    GL_COLOR_INDEX, GL_BITMAP,
-                                                    row, 0);
-	 if (finalUnpack->LsbFirst) {
-	    /* least significan bit first */
-	    GLubyte mask = 1U << (finalUnpack->SkipPixels & 0x7);
-	    GLint col;
-	    for (col = 0; col < width; col++) {
-	       if (*src & mask) {
-		  dst[col] = color;
-	       }
-	       if (mask == 128U) {
-		  src++;
-		  mask = 1U;
-	       }
-	       else {
-		  mask = mask << 1;
-	       }
-	    }
-	    if (mask != 1)
-	       src++;
-	 }
-	 else {
-	    /* most significan bit first */
-	    GLubyte mask = 128U >> (finalUnpack->SkipPixels & 0x7);
-	    GLint col;
-	    for (col = 0; col < width; col++) {
-	       if (*src & mask) {
-		  dst[col] = color;
-	       }
-	       if (mask == 1U) {
-		  src++;
-		  mask = 128U;
-	       }
-	       else {
-		  mask = mask >> 1;
-	       }
-	    }
-	    if (mask != 128)
-	       src++;
-	 }
-	 dst += dstStride;
-      }
-   }
-
-   grLfbUnlock(GR_LFB_WRITE_ONLY, fxMesa->currentFB);
-}
-
-
-static void
-fxDDReadPixels565 (GLcontext * ctx,
-		   GLint x, GLint y,
-		   GLsizei width, GLsizei height,
-		   GLenum format, GLenum type,
-		   const struct gl_pixelstore_attrib *packing,
-		   GLvoid *dstImage)
-{
-   if (ctx->_ImageTransferState/* & (IMAGE_SCALE_BIAS_BIT|IMAGE_MAP_COLOR_BIT)*/) {
-      _swrast_ReadPixels(ctx, x, y, width, height, format, type,
-			 packing, dstImage);
-      return;
-   }
-   else {
-      fxMesaContext fxMesa = FX_CONTEXT(ctx);
-      GrLfbInfo_t info;
-
-      BEGIN_BOARD_LOCK();
-      info.size = sizeof(info);
-      if (grLfbLock(GR_LFB_READ_ONLY,
-		    fxMesa->currentFB,
-		    GR_LFBWRITEMODE_ANY,
-		    GR_ORIGIN_UPPER_LEFT, FXFALSE, &info)) {
-	 const GLint winX = 0;
-	 const GLint winY = fxMesa->height - 1;
-	 const GLint srcStride = info.strideInBytes / 2;	/* stride in GLushorts */
-	 const GLushort *src = (const GLushort *) info.lfbPtr
-	    + (winY - y) * srcStride + (winX + x);
-	 GLubyte *dst = (GLubyte *) _mesa_image_address2d(packing, dstImage,
-							width, height, format,
-							type, 0, 0);
-	 GLint dstStride =
-	    _mesa_image_row_stride(packing, width, format, type);
-
-	 if (format == GL_RGB && type == GL_UNSIGNED_BYTE) {
-	    /* convert 5R6G5B into 8R8G8B */
-	    GLint row, col;
-	    const GLint halfWidth = width >> 1;
-	    const GLint extraPixel = (width & 1);
-	    for (row = 0; row < height; row++) {
-	       GLubyte *d = dst;
-	       for (col = 0; col < halfWidth; col++) {
-		  const GLuint pixel = ((const GLuint *) src)[col];
-                  *d++ = FX_rgb_scale_5[(pixel >> 11) & 0x1f];
-                  *d++ = FX_rgb_scale_6[(pixel >> 5)  & 0x3f];
-                  *d++ = FX_rgb_scale_5[ pixel        & 0x1f];
-                  *d++ = FX_rgb_scale_5[(pixel >> 27) & 0x1f];
-                  *d++ = FX_rgb_scale_6[(pixel >> 21) & 0x3f];
-                  *d++ = FX_rgb_scale_5[(pixel >> 16) & 0x1f];
-	       }
-	       if (extraPixel) {
-		  GLushort pixel = src[width - 1];
-                  *d++ = FX_rgb_scale_5[(pixel >> 11) & 0x1f];
-                  *d++ = FX_rgb_scale_6[(pixel >> 5)  & 0x3f];
-                  *d++ = FX_rgb_scale_5[ pixel        & 0x1f];
-	       }
-	       dst += dstStride;
-	       src -= srcStride;
-	    }
-	 }
-	 else if (format == GL_RGBA && type == GL_UNSIGNED_BYTE) {
-	    /* convert 5R6G5B into 8R8G8B8A */
-	    GLint row, col;
-	    const GLint halfWidth = width >> 1;
-	    const GLint extraPixel = (width & 1);
-	    for (row = 0; row < height; row++) {
-	       GLubyte *d = dst;
-	       for (col = 0; col < halfWidth; col++) {
-		  const GLuint pixel = ((const GLuint *) src)[col];
-                  *d++ = FX_rgb_scale_5[(pixel >> 11) & 0x1f];
-                  *d++ = FX_rgb_scale_6[(pixel >> 5)  & 0x3f];
-                  *d++ = FX_rgb_scale_5[ pixel        & 0x1f];
-		  *d++ = 255;
-                  *d++ = FX_rgb_scale_5[(pixel >> 27) & 0x1f];
-                  *d++ = FX_rgb_scale_6[(pixel >> 21) & 0x3f];
-                  *d++ = FX_rgb_scale_5[(pixel >> 16) & 0x1f];
-		  *d++ = 255;
-	       }
-	       if (extraPixel) {
-		  const GLushort pixel = src[width - 1];
-                  *d++ = FX_rgb_scale_5[(pixel >> 11) & 0x1f];
-                  *d++ = FX_rgb_scale_6[(pixel >> 5)  & 0x3f];
-                  *d++ = FX_rgb_scale_5[ pixel        & 0x1f];
-		  *d++ = 255;
-	       }
-	       dst += dstStride;
-	       src -= srcStride;
-	    }
-	 }
-	 else if (format == GL_RGB && type == GL_UNSIGNED_SHORT_5_6_5) {
-	    /* directly memcpy 5R6G5B pixels into client's buffer */
-	    const GLint widthInBytes = width * 2;
-	    GLint row;
-	    for (row = 0; row < height; row++) {
-	       memcpy(dst, src, widthInBytes);
-	       dst += dstStride;
-	       src -= srcStride;
-	    }
-	 }
-	 else {
-	    grLfbUnlock(GR_LFB_READ_ONLY, fxMesa->currentFB);
-	    END_BOARD_LOCK();
-	    _swrast_ReadPixels(ctx, x, y, width, height, format, type,
-			       packing, dstImage);
-	    return;
-	 }
-
-	 grLfbUnlock(GR_LFB_READ_ONLY, fxMesa->currentFB);
-      }
-      END_BOARD_LOCK();
-   }
-}
-
-static void
-fxDDReadPixels555 (GLcontext * ctx,
-		   GLint x, GLint y,
-		   GLsizei width, GLsizei height,
-		   GLenum format, GLenum type,
-		   const struct gl_pixelstore_attrib *packing,
-		   GLvoid *dstImage)
-{
-   if (ctx->_ImageTransferState/* & (IMAGE_SCALE_BIAS_BIT|IMAGE_MAP_COLOR_BIT)*/) {
-      _swrast_ReadPixels(ctx, x, y, width, height, format, type,
-			 packing, dstImage);
-      return;
-   }
-   else {
-      fxMesaContext fxMesa = FX_CONTEXT(ctx);
-      GrLfbInfo_t info;
-
-      BEGIN_BOARD_LOCK();
-      info.size = sizeof(info);
-      if (grLfbLock(GR_LFB_READ_ONLY,
-		    fxMesa->currentFB,
-		    GR_LFBWRITEMODE_ANY,
-		    GR_ORIGIN_UPPER_LEFT, FXFALSE, &info)) {
-	 const GLint winX = 0;
-	 const GLint winY = fxMesa->height - 1;
-	 const GLint srcStride = info.strideInBytes / 2;	/* stride in GLushorts */
-	 const GLushort *src = (const GLushort *) info.lfbPtr
-	    + (winY - y) * srcStride + (winX + x);
-	 GLubyte *dst = (GLubyte *) _mesa_image_address2d(packing, dstImage,
-							width, height, format,
-							type, 0, 0);
-	 GLint dstStride =
-	    _mesa_image_row_stride(packing, width, format, type);
-
-	 if (format == GL_RGB && type == GL_UNSIGNED_BYTE) {
-	    /* convert 5R5G5B into 8R8G8B */
-	    GLint row, col;
-	    const GLint halfWidth = width >> 1;
-	    const GLint extraPixel = (width & 1);
-	    for (row = 0; row < height; row++) {
-	       GLubyte *d = dst;
-	       for (col = 0; col < halfWidth; col++) {
-		  const GLuint pixel = ((const GLuint *) src)[col];
-                  *d++ = FX_rgb_scale_5[(pixel >> 10) & 0x1f];
-                  *d++ = FX_rgb_scale_5[(pixel >> 5)  & 0x1f];
-                  *d++ = FX_rgb_scale_5[ pixel        & 0x1f];
-                  *d++ = FX_rgb_scale_5[(pixel >> 26) & 0x1f];
-                  *d++ = FX_rgb_scale_5[(pixel >> 21) & 0x1f];
-                  *d++ = FX_rgb_scale_5[(pixel >> 16) & 0x1f];
-	       }
-	       if (extraPixel) {
-		  GLushort pixel = src[width - 1];
-                  *d++ = FX_rgb_scale_5[(pixel >> 10) & 0x1f];
-                  *d++ = FX_rgb_scale_5[(pixel >> 5)  & 0x1f];
-                  *d++ = FX_rgb_scale_5[ pixel        & 0x1f];
-	       }
-	       dst += dstStride;
-	       src -= srcStride;
-	    }
-	 }
-	 else if (format == GL_RGBA && type == GL_UNSIGNED_BYTE) {
-	    /* convert 5R6G5B into 8R8G8B8A */
-	    GLint row, col;
-	    const GLint halfWidth = width >> 1;
-	    const GLint extraPixel = (width & 1);
-	    for (row = 0; row < height; row++) {
-	       GLubyte *d = dst;
-	       for (col = 0; col < halfWidth; col++) {
-		  const GLuint pixel = ((const GLuint *) src)[col];
-                  *d++ = FX_rgb_scale_5[(pixel >> 10) & 0x1f];
-                  *d++ = FX_rgb_scale_5[(pixel >>  5) & 0x1f];
-                  *d++ = FX_rgb_scale_5[ pixel        & 0x1f];
-		  *d++ =  (pixel & 0x8000) ? 255 : 0;
-                  *d++ = FX_rgb_scale_5[(pixel >> 26) & 0x1f];
-                  *d++ = FX_rgb_scale_5[(pixel >> 21) & 0x1f];
-                  *d++ = FX_rgb_scale_5[(pixel >> 16) & 0x1f];
-		  *d++ =  (pixel & 0x80000000) ? 255 : 0;
-	       }
-	       if (extraPixel) {
-		  const GLushort pixel = src[width - 1];
-                  *d++ = FX_rgb_scale_5[(pixel >> 10) & 0x1f];
-                  *d++ = FX_rgb_scale_5[(pixel >>  5) & 0x1f];
-                  *d++ = FX_rgb_scale_5[ pixel        & 0x1f];
-		  *d++ =  (pixel & 0x8000) ? 255 : 0;
-	       }
-	       dst += dstStride;
-	       src -= srcStride;
-	    }
-	 }
-	 else if (format == GL_BGRA && type == GL_UNSIGNED_SHORT_1_5_5_5_REV) {
-	    /* directly memcpy 5R5G5B pixels into client's buffer */
-	    const GLint widthInBytes = width * 2;
-	    GLint row;
-	    for (row = 0; row < height; row++) {
-	       memcpy(dst, src, widthInBytes);
-	       dst += dstStride;
-	       src -= srcStride;
-	    }
-	 }
-	 else {
-	    grLfbUnlock(GR_LFB_READ_ONLY, fxMesa->currentFB);
-	    END_BOARD_LOCK();
-	    _swrast_ReadPixels(ctx, x, y, width, height, format, type,
-			       packing, dstImage);
-	    return;
-	 }
-
-	 grLfbUnlock(GR_LFB_READ_ONLY, fxMesa->currentFB);
-      }
-      END_BOARD_LOCK();
-   }
-}
-
-static void
-fxDDReadPixels8888 (GLcontext * ctx,
-		    GLint x, GLint y,
-		    GLsizei width, GLsizei height,
-		    GLenum format, GLenum type,
-		    const struct gl_pixelstore_attrib *packing,
-		    GLvoid *dstImage)
-{
-   if (ctx->_ImageTransferState/* & (IMAGE_SCALE_BIAS_BIT|IMAGE_MAP_COLOR_BIT)*/) {
-      _swrast_ReadPixels(ctx, x, y, width, height, format, type,
-			 packing, dstImage);
-      return;
-   }
-   else {
-      fxMesaContext fxMesa = FX_CONTEXT(ctx);
-      GrLfbInfo_t info;
-
-      BEGIN_BOARD_LOCK();
-      info.size = sizeof(info);
-      if (grLfbLock(GR_LFB_READ_ONLY,
-		    fxMesa->currentFB,
-		    GR_LFBWRITEMODE_ANY,
-		    GR_ORIGIN_UPPER_LEFT, FXFALSE, &info)) {
-	 const GLint winX = 0;
-	 const GLint winY = fxMesa->height - 1;
-	 const GLint srcStride = info.strideInBytes / 4;	/* stride in GLuints */
-	 const GLuint *src = (const GLuint *) info.lfbPtr
-	    + (winY - y) * srcStride + (winX + x);
-	 GLubyte *dst = (GLubyte *) _mesa_image_address2d(packing, dstImage,
-							width, height, format,
-							type, 0, 0);
-	 GLint dstStride =
-	    _mesa_image_row_stride(packing, width, format, type);
-
-	 if (format == GL_RGB && type == GL_UNSIGNED_BYTE) {
-	    /* convert 8A8R8G8B into 8R8G8B */
-	    GLint row, col;
-	    for (row = 0; row < height; row++) {
-	       GLubyte *d = dst;
-	       for (col = 0; col < width; col++) {
-		  const GLuint pixel = ((const GLuint *) src)[col];
-                  *d++ = pixel >> 16;
-                  *d++ = pixel >> 8;
-                  *d++ = pixel;
-	       }
-	       dst += dstStride;
-	       src -= srcStride;
-	    }
-	 }
-	 else if (format == GL_RGBA && type == GL_UNSIGNED_BYTE) {
-	    /* 8A8R8G8B pixels into client's buffer */
-	    GLint row, col;
-	    for (row = 0; row < height; row++) {
-	       GLubyte *d = dst;
-	       for (col = 0; col < width; col++) {
-		  const GLuint pixel = ((const GLuint *) src)[col];
-                  *d++ = pixel >> 16;
-                  *d++ = pixel >> 8;
-                  *d++ = pixel;
-                  *d++ = pixel >> 24;
-	       }
-	       dst += dstStride;
-	       src -= srcStride;
-	    }
-	 }
-	 else if (format == GL_RGB && type == GL_UNSIGNED_SHORT_5_6_5) {
-	    /* convert 8A8R8G8B into 5R6G5B */
-	    GLint row, col;
-	    for (row = 0; row < height; row++) {
-	       GLushort *d = (GLushort *)dst;
-	       for (col = 0; col < width; col++) {
-		  const GLuint pixel = ((const GLuint *) src)[col];
-                  *d++ = (((pixel >> 16) & 0xf8) << 8) |
-                         (((pixel >>  8) & 0xfc) << 3) |
-                          ((pixel        & 0xf8) >> 3);
-	       }
-	       dst += dstStride;
-	       src -= srcStride;
-	    }
-	 }
-	 else {
-	    grLfbUnlock(GR_LFB_READ_ONLY, fxMesa->currentFB);
-	    END_BOARD_LOCK();
-	    _swrast_ReadPixels(ctx, x, y, width, height, format, type,
-			       packing, dstImage);
-	    return;
-	 }
-
-	 grLfbUnlock(GR_LFB_READ_ONLY, fxMesa->currentFB);
-      }
-      END_BOARD_LOCK();
-   }
-}
-
-
-static void
-fxDDDrawPixels555 (GLcontext * ctx, GLint x, GLint y,
-                   GLsizei width, GLsizei height,
-                   GLenum format, GLenum type,
-                   const struct gl_pixelstore_attrib *unpack,
-                   const GLvoid * pixels)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   SWcontext *swrast = SWRAST_CONTEXT(ctx);
-   GrLfbInfo_t info;
-   const struct gl_pixelstore_attrib *finalUnpack;
-   struct gl_pixelstore_attrib scissoredUnpack;
-
-   if (ctx->Pixel.ZoomX != 1.0F ||
-       ctx->Pixel.ZoomY != 1.0F ||
-       (ctx->_ImageTransferState & (IMAGE_SCALE_BIAS_BIT|
-				    IMAGE_MAP_COLOR_BIT)) ||
-       (swrast->_RasterMask & (ALPHATEST_BIT |
-			      /*BLEND_BIT |*/   /* blending ok, through pixpipe */
-			      DEPTH_BIT |       /* could be done with RGB:DEPTH */
-			      FOG_BIT |         /* could be done with RGB:DEPTH */
-			      LOGIC_OP_BIT |
-			      /*CLIP_BIT |*/    /* clipping ok, below */
-			      STENCIL_BIT |
-			      MASKING_BIT |
-			      MULTI_DRAW_BIT |
-			      OCCLUSION_BIT |   /* nope! at least not yet */
-			      TEXTURE_BIT |
-			      FRAGPROG_BIT)) ||
-       fxMesa->fallback)
-   {
-      _swrast_DrawPixels( ctx, x, y, width, height, format, type,
-			  unpack, pixels );
-      return;
-   }
-
-   /* make sure the pixelpipe is configured correctly */
-   fxSetupFXUnits(ctx);
-
-   /* FIXME! _RasterMask & CLIP_BIT gets set if we're out of Viewport, also! */
-   if (ctx->Scissor.Enabled) {
-      /* This is a bit tricky, but by carefully adjusting the px, py,
-       * width, height, skipPixels and skipRows values we can do
-       * scissoring without special code in the rendering loop.
-       */
-
-      /* we'll construct a new pixelstore struct */
-      finalUnpack = &scissoredUnpack;
-      scissoredUnpack = *unpack;
-      if (scissoredUnpack.RowLength == 0)
-	 scissoredUnpack.RowLength = width;
-
-      /* clip left */
-      if (x < ctx->Scissor.X) {
-	 scissoredUnpack.SkipPixels += (ctx->Scissor.X - x);
-	 width -= (ctx->Scissor.X - x);
-	 x = ctx->Scissor.X;
-      }
-      /* clip right */
-      if (x + width >= ctx->Scissor.X + ctx->Scissor.Width) {
-	 width -= (x + width - (ctx->Scissor.X + ctx->Scissor.Width));
-      }
-      /* clip bottom */
-      if (y < ctx->Scissor.Y) {
-	 scissoredUnpack.SkipRows += (ctx->Scissor.Y - y);
-	 height -= (ctx->Scissor.Y - y);
-	 y = ctx->Scissor.Y;
-      }
-      /* clip top */
-      if (y + height >= ctx->Scissor.Y + ctx->Scissor.Height) {
-	 height -= (y + height - (ctx->Scissor.Y + ctx->Scissor.Height));
-      }
-
-      if (width <= 0 || height <= 0)
-	 return;
-   }
-   else {
-      finalUnpack = unpack;
-   }
-
-   info.size = sizeof(info);
-   if (!grLfbLock(GR_LFB_WRITE_ONLY,
-                  fxMesa->currentFB,
-                  GR_LFBWRITEMODE_1555,
-                  GR_ORIGIN_LOWER_LEFT, FXTRUE, &info)) {
-      _swrast_DrawPixels(ctx, x, y, width, height, format, type, finalUnpack, pixels);
-      return;
-   }
-
-   {
-      const GLint winX = 0;
-      const GLint winY = 0;
-
-      const GLint dstStride = info.strideInBytes / 2;	/* stride in GLushorts */
-      GLushort *dst = (GLushort *) info.lfbPtr + (winY + y) * dstStride + (winX + x);
-
-      if (format == GL_RGBA && type == GL_UNSIGNED_BYTE) {
-         GLint row;
-         for (row = 0; row < height; row++) {
-	     GLubyte *src = (GLubyte *) _mesa_image_address2d(finalUnpack,
-                                  pixels, width, height, format, type, row, 0);
-	     GLint col;
-	     for (col = 0; col < width; col++) {
-                 dst[col] = TDFXPACKCOLOR1555(src[2], src[1], src[0], src[3]);
-                 src += 4;
-             }
-             dst += dstStride;
-         }
-      }
-      else if (format == GL_RGB && type == GL_UNSIGNED_BYTE) {
-         GLint row;
-         for (row = 0; row < height; row++) {
-	     GLubyte *src = (GLubyte *) _mesa_image_address2d(finalUnpack,
-                                  pixels, width, height, format, type, row, 0);
-	     GLint col;
-	     for (col = 0; col < width; col++) {
-                 dst[col] = TDFXPACKCOLOR1555(src[2], src[1], src[0], 255);
-                 src += 3;
-             }
-             dst += dstStride;
-         }
-      }
-      else {
-         grLfbUnlock(GR_LFB_WRITE_ONLY, fxMesa->currentFB);
-         _swrast_DrawPixels(ctx, x, y, width, height, format, type, finalUnpack, pixels);
-         return;
-      }
-
-   }
-
-   grLfbUnlock(GR_LFB_WRITE_ONLY, fxMesa->currentFB);
-}
-
-
-static void
-fxDDDrawPixels565 (GLcontext * ctx, GLint x, GLint y,
-                   GLsizei width, GLsizei height,
-                   GLenum format, GLenum type,
-                   const struct gl_pixelstore_attrib *unpack,
-                   const GLvoid * pixels)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   SWcontext *swrast = SWRAST_CONTEXT(ctx);
-   GrLfbInfo_t info;
-   const struct gl_pixelstore_attrib *finalUnpack;
-   struct gl_pixelstore_attrib scissoredUnpack;
-
-   if (ctx->Pixel.ZoomX != 1.0F ||
-       ctx->Pixel.ZoomY != 1.0F ||
-       (ctx->_ImageTransferState & (IMAGE_SCALE_BIAS_BIT|
-				    IMAGE_MAP_COLOR_BIT)) ||
-       (swrast->_RasterMask & (ALPHATEST_BIT |
-			      /*BLEND_BIT |*/   /* blending ok, through pixpipe */
-			      DEPTH_BIT |       /* could be done with RGB:DEPTH */
-			      FOG_BIT |         /* could be done with RGB:DEPTH */
-			      LOGIC_OP_BIT |
-			      /*CLIP_BIT |*/    /* clipping ok, below */
-			      STENCIL_BIT |
-			      MASKING_BIT |
-			      MULTI_DRAW_BIT |
-			      OCCLUSION_BIT |   /* nope! at least not yet */
-			      TEXTURE_BIT |
-			      FRAGPROG_BIT)) ||
-       fxMesa->fallback)
-   {
-      _swrast_DrawPixels( ctx, x, y, width, height, format, type,
-			  unpack, pixels );
-      return;
-   }
-
-   /* make sure the pixelpipe is configured correctly */
-   fxSetupFXUnits(ctx);
-
-   /* FIXME! _RasterMask & CLIP_BIT gets set if we're out of Viewport, also! */
-   if (ctx->Scissor.Enabled) {
-      /* This is a bit tricky, but by carefully adjusting the px, py,
-       * width, height, skipPixels and skipRows values we can do
-       * scissoring without special code in the rendering loop.
-       */
-
-      /* we'll construct a new pixelstore struct */
-      finalUnpack = &scissoredUnpack;
-      scissoredUnpack = *unpack;
-      if (scissoredUnpack.RowLength == 0)
-	 scissoredUnpack.RowLength = width;
-
-      /* clip left */
-      if (x < ctx->Scissor.X) {
-	 scissoredUnpack.SkipPixels += (ctx->Scissor.X - x);
-	 width -= (ctx->Scissor.X - x);
-	 x = ctx->Scissor.X;
-      }
-      /* clip right */
-      if (x + width >= ctx->Scissor.X + ctx->Scissor.Width) {
-	 width -= (x + width - (ctx->Scissor.X + ctx->Scissor.Width));
-      }
-      /* clip bottom */
-      if (y < ctx->Scissor.Y) {
-	 scissoredUnpack.SkipRows += (ctx->Scissor.Y - y);
-	 height -= (ctx->Scissor.Y - y);
-	 y = ctx->Scissor.Y;
-      }
-      /* clip top */
-      if (y + height >= ctx->Scissor.Y + ctx->Scissor.Height) {
-	 height -= (y + height - (ctx->Scissor.Y + ctx->Scissor.Height));
-      }
-
-      if (width <= 0 || height <= 0)
-	 return;
-   }
-   else {
-      finalUnpack = unpack;
-   }
-
-   info.size = sizeof(info);
-   if (!grLfbLock(GR_LFB_WRITE_ONLY,
-                  fxMesa->currentFB,
-                  GR_LFBWRITEMODE_565,
-                  GR_ORIGIN_LOWER_LEFT, FXTRUE, &info)) {
-      _swrast_DrawPixels(ctx, x, y, width, height, format, type, finalUnpack, pixels);
-      return;
-   }
-
-   {
-      const GLint winX = 0;
-      const GLint winY = 0;
-
-      const GLint dstStride = info.strideInBytes / 2;	/* stride in GLushorts */
-      GLushort *dst = (GLushort *) info.lfbPtr + (winY + y) * dstStride + (winX + x);
-
-      if (format == GL_RGBA && type == GL_UNSIGNED_BYTE) {
-         GLint row;
-         for (row = 0; row < height; row++) {
-	     GLubyte *src = (GLubyte *) _mesa_image_address2d(finalUnpack,
-                                  pixels, width, height, format, type, row, 0);
-	     GLint col;
-	     for (col = 0; col < width; col++) {
-                 dst[col] = TDFXPACKCOLOR565(src[2], src[1], src[0]);
-                 src += 4;
-             }
-             dst += dstStride;
-         }
-      }
-      else if (format == GL_RGB && type == GL_UNSIGNED_BYTE) {
-         GLint row;
-         for (row = 0; row < height; row++) {
-	     GLubyte *src = (GLubyte *) _mesa_image_address2d(finalUnpack,
-                                  pixels, width, height, format, type, row, 0);
-	     GLint col;
-	     for (col = 0; col < width; col++) {
-                 dst[col] = TDFXPACKCOLOR565(src[2], src[1], src[0]);
-                 src += 3;
-             }
-             dst += dstStride;
-         }
-      }
-      else {
-         grLfbUnlock(GR_LFB_WRITE_ONLY, fxMesa->currentFB);
-         _swrast_DrawPixels(ctx, x, y, width, height, format, type, finalUnpack, pixels);
-         return;
-      }
-
-   }
-
-   grLfbUnlock(GR_LFB_WRITE_ONLY, fxMesa->currentFB);
-}
-
-
-static void
-fxDDDrawPixels565_rev (GLcontext * ctx, GLint x, GLint y,
-                   GLsizei width, GLsizei height,
-                   GLenum format, GLenum type,
-                   const struct gl_pixelstore_attrib *unpack,
-                   const GLvoid * pixels)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   SWcontext *swrast = SWRAST_CONTEXT(ctx);
-   GrLfbInfo_t info;
-   const struct gl_pixelstore_attrib *finalUnpack;
-   struct gl_pixelstore_attrib scissoredUnpack;
-
-   if (ctx->Pixel.ZoomX != 1.0F ||
-       ctx->Pixel.ZoomY != 1.0F ||
-       (ctx->_ImageTransferState & (IMAGE_SCALE_BIAS_BIT|
-				    IMAGE_MAP_COLOR_BIT)) ||
-       (swrast->_RasterMask & (ALPHATEST_BIT |
-			      /*BLEND_BIT |*/   /* blending ok, through pixpipe */
-			      DEPTH_BIT |       /* could be done with RGB:DEPTH */
-			      FOG_BIT |         /* could be done with RGB:DEPTH */
-			      LOGIC_OP_BIT |
-			      /*CLIP_BIT |*/    /* clipping ok, below */
-			      STENCIL_BIT |
-			      MASKING_BIT |
-			      MULTI_DRAW_BIT |
-			      OCCLUSION_BIT |   /* nope! at least not yet */
-			      TEXTURE_BIT |
-			      FRAGPROG_BIT)) ||
-       fxMesa->fallback)
-   {
-      _swrast_DrawPixels( ctx, x, y, width, height, format, type,
-			  unpack, pixels );
-      return;
-   }
-
-   /* make sure the pixelpipe is configured correctly */
-   fxSetupFXUnits(ctx);
-
-   /* FIXME! _RasterMask & CLIP_BIT gets set if we're out of Viewport, also! */
-   if (ctx->Scissor.Enabled) {
-      /* This is a bit tricky, but by carefully adjusting the px, py,
-       * width, height, skipPixels and skipRows values we can do
-       * scissoring without special code in the rendering loop.
-       */
-
-      /* we'll construct a new pixelstore struct */
-      finalUnpack = &scissoredUnpack;
-      scissoredUnpack = *unpack;
-      if (scissoredUnpack.RowLength == 0)
-	 scissoredUnpack.RowLength = width;
-
-      /* clip left */
-      if (x < ctx->Scissor.X) {
-	 scissoredUnpack.SkipPixels += (ctx->Scissor.X - x);
-	 width -= (ctx->Scissor.X - x);
-	 x = ctx->Scissor.X;
-      }
-      /* clip right */
-      if (x + width >= ctx->Scissor.X + ctx->Scissor.Width) {
-	 width -= (x + width - (ctx->Scissor.X + ctx->Scissor.Width));
-      }
-      /* clip bottom */
-      if (y < ctx->Scissor.Y) {
-	 scissoredUnpack.SkipRows += (ctx->Scissor.Y - y);
-	 height -= (ctx->Scissor.Y - y);
-	 y = ctx->Scissor.Y;
-      }
-      /* clip top */
-      if (y + height >= ctx->Scissor.Y + ctx->Scissor.Height) {
-	 height -= (y + height - (ctx->Scissor.Y + ctx->Scissor.Height));
-      }
-
-      if (width <= 0 || height <= 0)
-	 return;
-   }
-   else {
-      finalUnpack = unpack;
-   }
-
-   info.size = sizeof(info);
-   if (!grLfbLock(GR_LFB_WRITE_ONLY,
-                  fxMesa->currentFB,
-                  GR_LFBWRITEMODE_565,
-                  GR_ORIGIN_LOWER_LEFT, FXTRUE, &info)) {
-      _swrast_DrawPixels(ctx, x, y, width, height, format, type, finalUnpack, pixels);
-      return;
-   }
-
-   {
-      const GLint winX = 0;
-      const GLint winY = 0;
-
-      const GLint dstStride = info.strideInBytes / 2;	/* stride in GLushorts */
-      GLushort *dst = (GLushort *) info.lfbPtr + (winY + y) * dstStride + (winX + x);
-
-      if (format == GL_RGBA && type == GL_UNSIGNED_BYTE) {
-         GLint row;
-         for (row = 0; row < height; row++) {
-	     GLubyte *src = (GLubyte *) _mesa_image_address2d(finalUnpack,
-                                  pixels, width, height, format, type, row, 0);
-	     GLint col;
-	     for (col = 0; col < width; col++) {
-                 dst[col] = TDFXPACKCOLOR565(src[0], src[1], src[2]);
-                 src += 4;
-             }
-             dst += dstStride;
-         }
-      }
-      else if (format == GL_RGB && type == GL_UNSIGNED_BYTE) {
-         GLint row;
-         for (row = 0; row < height; row++) {
-	     GLubyte *src = (GLubyte *) _mesa_image_address2d(finalUnpack,
-                                  pixels, width, height, format, type, row, 0);
-	     GLint col;
-	     for (col = 0; col < width; col++) {
-                 dst[col] = TDFXPACKCOLOR565(src[0], src[1], src[2]);
-                 src += 3;
-             }
-             dst += dstStride;
-         }
-      }
-      else {
-         grLfbUnlock(GR_LFB_WRITE_ONLY, fxMesa->currentFB);
-         _swrast_DrawPixels(ctx, x, y, width, height, format, type, finalUnpack, pixels);
-         return;
-      }
-
-   }
-
-   grLfbUnlock(GR_LFB_WRITE_ONLY, fxMesa->currentFB);
-}
-
-
-static void
-fxDDDrawPixels8888 (GLcontext * ctx, GLint x, GLint y,
-                    GLsizei width, GLsizei height,
-                    GLenum format, GLenum type,
-                    const struct gl_pixelstore_attrib *unpack,
-                    const GLvoid * pixels)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   SWcontext *swrast = SWRAST_CONTEXT(ctx);
-   GrLfbInfo_t info;
-   const struct gl_pixelstore_attrib *finalUnpack;
-   struct gl_pixelstore_attrib scissoredUnpack;
-
-   if (ctx->Pixel.ZoomX != 1.0F ||
-       ctx->Pixel.ZoomY != 1.0F ||
-       (ctx->_ImageTransferState & (IMAGE_SCALE_BIAS_BIT|
-				    IMAGE_MAP_COLOR_BIT)) ||
-       (swrast->_RasterMask & (/*ALPHATEST_BIT |*/
-			      /*BLEND_BIT |*/   /* blending ok, through pixpipe */
-			      DEPTH_BIT |       /* could be done with RGB:DEPTH */
-			      FOG_BIT |         /* could be done with RGB:DEPTH */
-			      LOGIC_OP_BIT |
-			      /*CLIP_BIT |*/    /* clipping ok, below */
-			      STENCIL_BIT |
-			      /*MASKING_BIT |*/ /* masking ok, we're in 32bpp */
-			      MULTI_DRAW_BIT |
-			      OCCLUSION_BIT |   /* nope! at least not yet */
-			      TEXTURE_BIT |
-			      FRAGPROG_BIT)) ||
-       fxMesa->fallback)
-   {
-      _swrast_DrawPixels( ctx, x, y, width, height, format, type,
-			  unpack, pixels );
-      return;
-   }
-
-   /* make sure the pixelpipe is configured correctly */
-   fxSetupFXUnits(ctx);
-
-   /* FIXME! _RasterMask & CLIP_BIT gets set if we're out of Viewport, also! */
-   if (ctx->Scissor.Enabled) {
-      /* This is a bit tricky, but by carefully adjusting the px, py,
-       * width, height, skipPixels and skipRows values we can do
-       * scissoring without special code in the rendering loop.
-       */
-
-      /* we'll construct a new pixelstore struct */
-      finalUnpack = &scissoredUnpack;
-      scissoredUnpack = *unpack;
-      if (scissoredUnpack.RowLength == 0)
-	 scissoredUnpack.RowLength = width;
-
-      /* clip left */
-      if (x < ctx->Scissor.X) {
-	 scissoredUnpack.SkipPixels += (ctx->Scissor.X - x);
-	 width -= (ctx->Scissor.X - x);
-	 x = ctx->Scissor.X;
-      }
-      /* clip right */
-      if (x + width >= ctx->Scissor.X + ctx->Scissor.Width) {
-	 width -= (x + width - (ctx->Scissor.X + ctx->Scissor.Width));
-      }
-      /* clip bottom */
-      if (y < ctx->Scissor.Y) {
-	 scissoredUnpack.SkipRows += (ctx->Scissor.Y - y);
-	 height -= (ctx->Scissor.Y - y);
-	 y = ctx->Scissor.Y;
-      }
-      /* clip top */
-      if (y + height >= ctx->Scissor.Y + ctx->Scissor.Height) {
-	 height -= (y + height - (ctx->Scissor.Y + ctx->Scissor.Height));
-      }
-
-      if (width <= 0 || height <= 0)
-	 return;
-   }
-   else {
-      finalUnpack = unpack;
-   }
-
-   info.size = sizeof(info);
-   if (!grLfbLock(GR_LFB_WRITE_ONLY,
-                  fxMesa->currentFB,
-                  GR_LFBWRITEMODE_8888,
-                  GR_ORIGIN_LOWER_LEFT, FXTRUE, &info)) {
-      _swrast_DrawPixels(ctx, x, y, width, height, format, type, finalUnpack, pixels);
-      return;
-   }
-
-   {
-      const GLint winX = 0;
-      const GLint winY = 0;
-
-      const GLint dstStride = info.strideInBytes / 4;	/* stride in GLuints */
-      GLuint *dst = (GLuint *) info.lfbPtr + (winY + y) * dstStride + (winX + x);
-
-      if (format == GL_RGBA && type == GL_UNSIGNED_BYTE) {
-         /* directly memcpy 8A8R8G8B pixels to screen */
-         const GLint widthInBytes = width * 4;
-         GLint row;
-         for (row = 0; row < height; row++) {
-	     GLubyte *src = (GLubyte *) _mesa_image_address2d(finalUnpack,
-                                  pixels, width, height, format, type, row, 0);
-             memcpy(dst, src, widthInBytes);
-             dst += dstStride;
-         }
-      }
-      else if (format == GL_RGB && type == GL_UNSIGNED_BYTE) {
-         GLint row;
-         for (row = 0; row < height; row++) {
-	     GLubyte *src = (GLubyte *) _mesa_image_address2d(finalUnpack,
-                               pixels, width, height, format, type, row, 0);
-	     GLint col;
-	     for (col = 0; col < width; col++) {
-                 dst[col] = TDFXPACKCOLOR8888(src[2], src[1], src[0], 255);
-                 src += 3;
-             }
-             dst += dstStride;
-         }
-      }
-      else {
-         grLfbUnlock(GR_LFB_WRITE_ONLY, fxMesa->currentFB);
-         _swrast_DrawPixels(ctx, x, y, width, height, format, type, finalUnpack, pixels);
-         return;
-      }
-
-   }
-
-   grLfbUnlock(GR_LFB_WRITE_ONLY, fxMesa->currentFB);
-}
-
-
-static void
-fxDDFinish(GLcontext * ctx)
-{
-   grFlush();
-}
-
-
-
-
-
-/* KW: Put the word Mesa in the render string because quakeworld
- * checks for this rather than doing a glGet(GL_MAX_TEXTURE_SIZE).
- * Why?
- */
-static const GLubyte *
-fxDDGetString(GLcontext * ctx, GLenum name)
-{
- fxMesaContext fxMesa = FX_CONTEXT(ctx);
-
- switch (name) {
-        case GL_RENDERER:
-             return (GLubyte *)fxMesa->rendererString;
-#if __WIN32__ /* hack to advertise vanilla extension names */
-        case GL_EXTENSIONS:
-             if (ctx->Extensions.String == NULL) {
-                GLubyte *ext = _mesa_make_extension_string(ctx);
-                if (ext != NULL) {
-                   ctx->Extensions.String = malloc(strlen((char *)ext) + 256);
-                   if (ctx->Extensions.String != NULL) {
-                      strcpy((char *)ctx->Extensions.String, (char *)ext);
-                      /* put any additional extension names here */
-#if 0
-                      strcat((char *)ctx->Extensions.String, " 3DFX_set_global_palette");
-#endif
-#if __WIN32__
-                      strcat((char *)ctx->Extensions.String, " WGL_3DFX_gamma_control");
-                      strcat((char *)ctx->Extensions.String, " WGL_EXT_swap_control");
-                      strcat((char *)ctx->Extensions.String, " WGL_EXT_extensions_string WGL_ARB_extensions_string");
-#endif
-                      /* put any additional extension names here */
-                      free(ext);
-                   } else {
-                      ctx->Extensions.String = ext;
-                   }
-                }
-             }
-             return ctx->Extensions.String;
-#endif
-        default:
-             return NULL;
- }
-}
-
-static const struct tnl_pipeline_stage *fx_pipeline[] = {
-   &_tnl_vertex_transform_stage,	/* XXX todo - Add the fastpath here */
-   &_tnl_normal_transform_stage,
-   &_tnl_lighting_stage,
-   &_tnl_fog_coordinate_stage,
-   &_tnl_texgen_stage,
-   &_tnl_texture_transform_stage,
-   &_tnl_point_attenuation_stage,
-#if defined(FEATURE_NV_vertex_program) || defined(FEATURE_ARB_vertex_program)
-   &_tnl_vertex_program_stage,
-#endif
-   &_tnl_render_stage,
-   0,
-};
-
-
-
-
-int
-fxDDInitFxMesaContext(fxMesaContext fxMesa)
-{
-   GLcontext *ctx = fxMesa->glCtx;
-
-   FX_setupGrVertexLayout();
-
-   fxMesa->color = 0xffffffff;
-   fxMesa->clearC = 0;
-   fxMesa->clearA = 0;
-
-   fxMesa->stats.swapBuffer = 0;
-   fxMesa->stats.reqTexUpload = 0;
-   fxMesa->stats.texUpload = 0;
-   fxMesa->stats.memTexUpload = 0;
-
-   fxMesa->tmuSrc = FX_TMU_NONE;
-   fxMesa->lastUnitsMode = FX_UM_NONE;
-   fxTMInit(fxMesa);
-
-   /* FX units setup */
-
-   fxMesa->unitsState.alphaTestEnabled = GL_FALSE;
-   fxMesa->unitsState.alphaTestFunc = GL_ALWAYS;
-   fxMesa->unitsState.alphaTestRefValue = 0.0;
-
-   fxMesa->unitsState.blendEnabled = GL_FALSE;
-   fxMesa->unitsState.blendSrcFuncRGB = GR_BLEND_ONE;
-   fxMesa->unitsState.blendDstFuncRGB = GR_BLEND_ZERO;
-   fxMesa->unitsState.blendSrcFuncAlpha = GR_BLEND_ONE;
-   fxMesa->unitsState.blendDstFuncAlpha = GR_BLEND_ZERO;
-   fxMesa->unitsState.blendEqRGB = GR_BLEND_OP_ADD;
-   fxMesa->unitsState.blendEqAlpha = GR_BLEND_OP_ADD;
-
-   fxMesa->unitsState.depthTestEnabled = GL_FALSE;
-   fxMesa->unitsState.depthMask = GL_TRUE;
-   fxMesa->unitsState.depthTestFunc = GL_LESS;
-   fxMesa->unitsState.depthBias = 0;
-
-   fxMesa->unitsState.stencilWriteMask = 0xff;
-
-   if (fxMesa->colDepth == 32) {
-      /* 32bpp */
-      fxMesa->Glide.grColorMaskExt(FXTRUE, FXTRUE, FXTRUE, fxMesa->haveHwAlpha);
-   } else {
-      /* 15/16 bpp mode */
-      grColorMask(FXTRUE, fxMesa->haveHwAlpha);
-   }
-
-   fxMesa->currentFB = fxMesa->haveDoubleBuffer ? GR_BUFFER_BACKBUFFER : GR_BUFFER_FRONTBUFFER;
-   grRenderBuffer(fxMesa->currentFB);
-
-   fxMesa->state = MALLOC(FX_grGetInteger(GR_GLIDE_STATE_SIZE));
-   fxMesa->fogTable = (GrFog_t *) MALLOC(FX_grGetInteger(GR_FOG_TABLE_ENTRIES) *
-			     sizeof(GrFog_t));
-
-   if (!fxMesa->state || !fxMesa->fogTable) {
-      if (fxMesa->state)
-	 FREE(fxMesa->state);
-      if (fxMesa->fogTable)
-	 FREE(fxMesa->fogTable);
-      return 0;
-   }
-
-   if (fxMesa->haveZBuffer) {
-      grDepthBufferMode(GR_DEPTHBUFFER_ZBUFFER);
-   }
-
-   if (!fxMesa->bgrOrder) {
-      grLfbWriteColorFormat(GR_COLORFORMAT_ABGR);
-   }
-
-   if (fxMesa->Glide.grSetNumPendingBuffers != NULL) {
-      fxMesa->Glide.grSetNumPendingBuffers(fxMesa->maxPendingSwapBuffers);
-   }
-
-   fxMesa->textureAlign = FX_grGetInteger(GR_TEXTURE_ALIGN);
-   /* [koolsmoky] */
-   {
-    char *env;
-    int textureLevels = 0;
-    int textureSize = FX_grGetInteger(GR_MAX_TEXTURE_SIZE);
-    do {
-        textureLevels++;
-    } while ((textureSize >>= 0x1) & 0x7ff);
-    ctx->Const.MaxTextureLevels = textureLevels;
-    ctx->Const.MaxTextureLodBias = /*textureLevels - 1*/8; /* Glide bug */
-#if FX_RESCALE_BIG_TEXURES_HACK
-    fxMesa->textureMaxLod = textureLevels - 1;
-    if ((env = getenv("MESA_FX_MAXLOD")) != NULL) {
-       int maxLevels = atoi(env) + 1;
-       if ((maxLevels <= MAX_TEXTURE_LEVELS) && (maxLevels > textureLevels)) {
-          ctx->Const.MaxTextureLevels = maxLevels;
-       }
-    }
-#endif
-   }
-   ctx->Const.MaxTextureCoordUnits =
-   ctx->Const.MaxTextureImageUnits = fxMesa->haveTwoTMUs ? 2 : 1;
-   ctx->Const.MaxTextureUnits = MAX2(ctx->Const.MaxTextureImageUnits, ctx->Const.MaxTextureCoordUnits);
-
-   ctx->Const.MaxDrawBuffers = 1;
-
-   fxMesa->new_state = _NEW_ALL;
-   if (!fxMesa->haveHwStencil) {
-      /* don't touch stencil if there is none */
-      fxMesa->new_state &= ~FX_NEW_STENCIL;
-   }
-
-   /* Initialize the software rasterizer and helper modules.
-    */
-   _swrast_CreateContext(ctx);
-   _vbo_CreateContext(ctx);
-   _tnl_CreateContext(ctx);
-   _swsetup_CreateContext(ctx);
-
-   /* Install customized pipeline */
-   _tnl_destroy_pipeline(ctx);
-   _tnl_install_pipeline(ctx, fx_pipeline);
-
-   fxAllocVB(ctx);
-
-   fxSetupDDPointers(ctx);
-   fxDDInitTriFuncs(ctx);
-
-   /* Tell the software rasterizer to use pixel fog always.
-    */
-   _swrast_allow_vertex_fog(ctx, GL_FALSE);
-   _swrast_allow_pixel_fog(ctx, GL_TRUE);
-   _tnl_allow_vertex_fog( ctx, GL_FALSE );
-   _tnl_allow_pixel_fog( ctx, GL_TRUE );
-
-   /* Tell tnl not to calculate or use vertex fog factors.  (Needed to
-    * tell render stage not to clip fog coords).
-    */
-/*     _tnl_calculate_vertex_fog( ctx, GL_FALSE ); */
-
-   fxDDInitExtensions(ctx);
-
-#if 0
-   /* do we want dither? It just looks bad... */
-   grEnable(GR_ALLOW_MIPMAP_DITHER);
-#endif
-   grGlideGetState((GrState *) fxMesa->state);
-
-   return 1;
-}
-
-/* Undo the above.
- */
-void
-fxDDDestroyFxMesaContext(fxMesaContext fxMesa)
-{
-   _swsetup_DestroyContext(fxMesa->glCtx);
-   _tnl_DestroyContext(fxMesa->glCtx);
-   _vbo_DestroyContext(fxMesa->glCtx);
-   _swrast_DestroyContext(fxMesa->glCtx);
-
-   if (fxMesa->state)
-      FREE(fxMesa->state);
-   if (fxMesa->fogTable)
-      FREE(fxMesa->fogTable);
-   fxFreeVB(fxMesa->glCtx);
-}
-
-
-
-
-void
-fxDDInitExtensions(GLcontext * ctx)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-
-#if 1 /* multipass ColorSum stage */
-   _mesa_enable_extension(ctx, "GL_EXT_secondary_color");
-#endif
-
-   _mesa_enable_extension(ctx, "GL_ARB_point_sprite");
-   _mesa_enable_extension(ctx, "GL_EXT_point_parameters");
-   _mesa_enable_extension(ctx, "GL_EXT_paletted_texture");
-   _mesa_enable_extension(ctx, "GL_EXT_texture_lod_bias");
-   _mesa_enable_extension(ctx, "GL_EXT_shared_texture_palette");
-   _mesa_enable_extension(ctx, "GL_EXT_blend_func_separate");
-   _mesa_enable_extension(ctx, "GL_EXT_texture_env_add");
-   _mesa_enable_extension(ctx, "GL_EXT_stencil_wrap");
-   _mesa_enable_extension(ctx, "GL_EXT_stencil_two_side");
-
-   if (fxMesa->haveTwoTMUs) {
-      _mesa_enable_extension(ctx, "GL_ARB_multitexture");
-   }
-
-   if (fxMesa->type >= GR_SSTTYPE_Voodoo4) {
-      _mesa_enable_extension(ctx, "GL_3DFX_texture_compression_FXT1");
-      _mesa_enable_extension(ctx, "GL_EXT_texture_compression_s3tc");
-      _mesa_enable_extension(ctx, "GL_S3_s3tc");
-      _mesa_enable_extension(ctx, "GL_NV_blend_square");
-   } else {
-      /* [dBorca]
-       * We should enable generic texture compression functions,
-       * but some poorly written apps automatically assume S3TC.
-       * Binding NCC to GL_COMPRESSED_RGB[A] is an unnecessary hassle,
-       * since it's slow and ugly (better with palette textures, then).
-       * Moreover, NCC is not an OpenGL standard, so we can't use
-       * precompressed textures. Last, but not least, NCC runs amok
-       * when multitexturing on a Voodoo3 and up (see POINTCAST vs UMA).
-       * Note: this is also a problem with palette textures, but
-       * faking multitex by multipass is evil...
-       * Implementing NCC requires three stages:
-       * fxDDChooseTextureFormat:
-       *    bind GL_COMPRESSED_RGB[A] to _mesa_texformat_argb8888,
-       *    so we can quantize properly, at a later time
-       * fxDDTexImage:
-       *    if GL_COMPRESSED_RGB
-       *       use _mesa_texformat_l8 to get 1bpt and set GR_TEXFMT_YIQ_422
-       *    if GL_COMPRESSED_RGBA
-       *       use _mesa_texformat_al88 to get 2bpt and set GR_TEXFMT_AYIQ_8422
-       *    txMipQuantize(...);
-       *    if (level == 0) {
-       *       txPalToNcc((GuNccTable *)(&(ti->palette)), pxMip.pal);
-       *    }
-       * fxSetupSingleTMU_NoLock/fxSetupDoubleTMU_NoLock:
-       *    grTexDownloadTable(GR_TEXTABLE_NCC0, &(ti->palette));
-       */
-      _mesa_enable_extension(ctx, "GL_SGIS_generate_mipmap");
-   }
-
-   if (fxMesa->HaveCmbExt) {
-      _mesa_enable_extension(ctx, "GL_ARB_texture_env_combine");
-      _mesa_enable_extension(ctx, "GL_EXT_texture_env_combine");
-   }
-
-   if (fxMesa->HavePixExt) {
-      _mesa_enable_extension(ctx, "GL_EXT_blend_subtract");
-      _mesa_enable_extension(ctx, "GL_EXT_blend_equation_separate");
-   }
-
-   if (fxMesa->HaveMirExt) {
-      _mesa_enable_extension(ctx, "GL_ARB_texture_mirrored_repeat");
-   }
-
-   if (fxMesa->type >= GR_SSTTYPE_Voodoo2) {
-      _mesa_enable_extension(ctx, "GL_EXT_fog_coord");
-   }
-
-   /* core-level extensions */
-   /* dangerous */
-   if (getenv("MESA_FX_ALLOW_VP")) {
-      _mesa_enable_extension(ctx, "GL_ARB_vertex_program");
-      _mesa_enable_extension(ctx, "GL_NV_vertex_program");
-      _mesa_enable_extension(ctx, "GL_NV_vertex_program1_1");
-   }
-#if 0
-   /* this requires _tnl_vertex_cull_stage in the pipeline */
-   _mesa_enable_extension(ctx, "EXT_cull_vertex");
-#endif
-}
-
-
-/************************************************************************/
-/************************************************************************/
-/************************************************************************/
-
-/* Check if the hardware supports the current context
- *
- * Performs similar work to fxDDChooseRenderState() - should be merged.
- */
-GLuint
-fx_check_IsInHardware(GLcontext * ctx)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-
-   if (ctx->RenderMode != GL_RENDER) {
-      return FX_FALLBACK_RENDER_MODE;
-   }
-
-   if (ctx->Stencil._Enabled && !fxMesa->haveHwStencil) {
-      return FX_FALLBACK_STENCIL;
-   }
-
-   if ((ctx->DrawBuffer->_ColorDrawBufferIndexes[0] != BUFFER_BIT_FRONT_LEFT) &&
-       (ctx->DrawBuffer->_ColorDrawBufferIndexes[0] != BUFFER_BIT_BACK_LEFT)) {
-      return FX_FALLBACK_DRAW_BUFFER;
-   }
-
-   if (ctx->Color.BlendEnabled) {
-      if (ctx->Color.BlendEquationRGB != GL_FUNC_ADD) {
-         if (!fxMesa->HavePixExt ||
-             ((ctx->Color.BlendEquationRGB != GL_FUNC_SUBTRACT) &&
-              (ctx->Color.BlendEquationRGB != GL_FUNC_REVERSE_SUBTRACT))) {
-            return FX_FALLBACK_BLEND;
-         }
-      }
-
-      if (ctx->Color.BlendEquationA != GL_FUNC_ADD) {
-         if (!fxMesa->HavePixExt ||
-             ((ctx->Color.BlendEquationA != GL_FUNC_SUBTRACT) &&
-              (ctx->Color.BlendEquationA != GL_FUNC_REVERSE_SUBTRACT))) {
-            return FX_FALLBACK_BLEND;
-         }
-      }
-
-#if 0
-      /* [dBorca]
-       * We fail the spec here, unless certain blending modes:
-       * RGB: (GL_ONE + GL_*) or (GL_ZERO + GL_*) or ...
-       */
-      if (NEED_SECONDARY_COLOR(ctx)) {
-         if ((ctx->Color.BlendEquationRGB != GL_FUNC_ADD) &&
-             (ctx->Color.BlendSrcRGB != GL_ONE)) {
-            /* Can't use multipass to blend ColorSum stage */
-            return FX_FALLBACK_SPECULAR;
-         }
-      }
-#endif
-   }
-
-   /* [dBorca]
-    * We could avoid this for certain `sfactor/dfactor'
-    * I do not think that is even worthwhile to check
-    * because if someone is using blending they use more
-    * interesting settings and also it would add more
-    * state tracking to a lot of the code.
-    */
-   if (ctx->Color.ColorLogicOpEnabled && (ctx->Color.LogicOp != GL_COPY)) {
-      return FX_FALLBACK_LOGICOP;
-   }
-
-   if ((fxMesa->colDepth != 32) &&
-       ((ctx->Color.ColorMask[RCOMP] != ctx->Color.ColorMask[GCOMP]) ||
-        (ctx->Color.ColorMask[GCOMP] != ctx->Color.ColorMask[BCOMP]))) {
-      return FX_FALLBACK_COLORMASK;
-   }
-
-   /* Unsupported texture/multitexture cases */
-
-   /* we can only do 1D/2D textures */
-   if (ctx->Texture.Unit[0]._ReallyEnabled & ~(TEXTURE_1D_BIT|TEXTURE_2D_BIT))
-      return FX_FALLBACK_TEXTURE_MAP;
-
-   if (fxMesa->haveTwoTMUs) {
-      if (ctx->Texture.Unit[1]._ReallyEnabled & ~(TEXTURE_1D_BIT|TEXTURE_2D_BIT))
-	 return FX_FALLBACK_TEXTURE_MAP;
-
-      if (ctx->Texture.Unit[0]._ReallyEnabled) {
-         if (fxMesa->type < GR_SSTTYPE_Voodoo2)
-	 if (ctx->Texture.Unit[0].EnvMode == GL_BLEND &&
-	     (ctx->Texture.Unit[1]._ReallyEnabled ||
-	      ctx->Texture.Unit[0].EnvColor[0] != 0 ||
-	      ctx->Texture.Unit[0].EnvColor[1] != 0 ||
-	      ctx->Texture.Unit[0].EnvColor[2] != 0 ||
-	      ctx->Texture.Unit[0].EnvColor[3] != 1)) {
-	    return FX_FALLBACK_TEXTURE_ENV;
-	 }
-	 if (ctx->Texture.Unit[0]._Current->Image[0][0]->Border > 0)
-	    return FX_FALLBACK_TEXTURE_BORDER;
-      }
-
-      if (ctx->Texture.Unit[1]._ReallyEnabled) {
-         if (fxMesa->type < GR_SSTTYPE_Voodoo2)
-	 if (ctx->Texture.Unit[1].EnvMode == GL_BLEND)
-	    return FX_FALLBACK_TEXTURE_ENV;
-	 if (ctx->Texture.Unit[1]._Current->Image[0][0]->Border > 0)
-	    return FX_FALLBACK_TEXTURE_BORDER;
-      }
-
-      if (TDFX_DEBUG & (VERBOSE_DRIVER | VERBOSE_TEXTURE))
-	 fprintf(stderr, "fx_check_IsInHardware: envmode is %s/%s\n",
-		 _mesa_lookup_enum_by_nr(ctx->Texture.Unit[0].EnvMode),
-		 _mesa_lookup_enum_by_nr(ctx->Texture.Unit[1].EnvMode));
-
-      /* KW: This was wrong (I think) and I changed it... which doesn't mean
-       * it is now correct...
-       * BP: The old condition just seemed to test if both texture units
-       * were enabled.  That's easy!
-       */
-      if (ctx->Texture._EnabledUnits == 0x3) {
-#if 0
-	 /* Can't use multipass to blend a multitextured triangle - fall
-	  * back to software.
-	  */
-	 if (!fxMesa->haveTwoTMUs && ctx->Color.BlendEnabled) {
-	    return FX_FALLBACK_TEXTURE_MULTI;
-	 }
-#endif
-
-	 if (!fxMesa->HaveCmbExt &&
-	     (ctx->Texture.Unit[0].EnvMode != ctx->Texture.Unit[1].EnvMode) &&
-	     (ctx->Texture.Unit[0].EnvMode != GL_MODULATE) &&
-	     (ctx->Texture.Unit[0].EnvMode != GL_REPLACE)) {	/* q2, seems ok... */
-	    if (TDFX_DEBUG & VERBOSE_DRIVER)
-	       fprintf(stderr, "fx_check_IsInHardware: unsupported multitex env mode\n");
-	    return FX_FALLBACK_TEXTURE_MULTI;
-	 }
-      }
-   }
-   else {
-      /* we have just one texture unit */
-      if (ctx->Texture._EnabledUnits > 0x1) {
-	 return FX_FALLBACK_TEXTURE_MULTI;
-      }
-
-      if (fxMesa->type < GR_SSTTYPE_Voodoo2)
-      if (ctx->Texture.Unit[0]._ReallyEnabled &&
-	  (ctx->Texture.Unit[0].EnvMode == GL_BLEND)) {
-	 return FX_FALLBACK_TEXTURE_ENV;
-      }
-   }
-
-   return 0;
-}
-
-
-
-static void
-fxDDUpdateDDPointers(GLcontext * ctx, GLuint new_state)
-{
-   /* TNLcontext *tnl = TNL_CONTEXT(ctx); */
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-
-   if (TDFX_DEBUG & VERBOSE_DRIVER) {
-      fprintf(stderr, "fxDDUpdateDDPointers(%08x)\n", new_state);
-   }
-
-   _swrast_InvalidateState(ctx, new_state);
-   _vbo_InvalidateState(ctx, new_state);
-   _tnl_InvalidateState(ctx, new_state);
-   _swsetup_InvalidateState(ctx, new_state);
-
-   fxMesa->new_gl_state |= new_state;
-}
-
-
-
-
-void
-fxSetupDDPointers(GLcontext * ctx)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   /* TNLcontext *tnl = TNL_CONTEXT(ctx); */
-
-   if (TDFX_DEBUG & VERBOSE_DRIVER) {
-      fprintf(stderr, "fxSetupDDPointers()\n");
-   }
-
-   ctx->Driver.UpdateState = fxDDUpdateDDPointers;
-   ctx->Driver.GetString = fxDDGetString;
-   ctx->Driver.ClearIndex = NULL;
-   ctx->Driver.ClearColor = fxDDClearColor;
-   ctx->Driver.Clear = fxDDClear;
-   ctx->Driver.DrawBuffer = fxDDSetDrawBuffer;
-   ctx->Driver.GetBufferSize = fxDDGetBufferSize;
-   ctx->Driver.Viewport = fxDDViewport;
-   switch (fxMesa->colDepth) {
-      case 15:
-         ctx->Driver.DrawPixels = fxDDDrawPixels555;
-         ctx->Driver.ReadPixels = fxDDReadPixels555;
-         ctx->Driver.Bitmap = fxDDDrawBitmap2;
-         break;
-      case 16:
-         ctx->Driver.DrawPixels = !fxMesa->bgrOrder ? fxDDDrawPixels565 : fxDDDrawPixels565_rev;
-         ctx->Driver.ReadPixels = fxDDReadPixels565;
-         ctx->Driver.Bitmap = fxDDDrawBitmap2;
-         break;
-      case 32:
-         ctx->Driver.DrawPixels = fxDDDrawPixels8888;
-         ctx->Driver.ReadPixels = fxDDReadPixels8888;
-         ctx->Driver.Bitmap = fxDDDrawBitmap4;
-         break;
-   }
-   ctx->Driver.Finish = fxDDFinish;
-   ctx->Driver.Flush = NULL;
-   ctx->Driver.ChooseTextureFormat = fxDDChooseTextureFormat;
-   ctx->Driver.TexImage1D = fxDDTexImage1D;
-   ctx->Driver.TexImage2D = fxDDTexImage2D;
-   ctx->Driver.TexSubImage1D = fxDDTexSubImage1D;
-   ctx->Driver.TexSubImage2D = fxDDTexSubImage2D;
-   ctx->Driver.CompressedTexImage2D = fxDDCompressedTexImage2D;
-   ctx->Driver.CompressedTexSubImage2D = fxDDCompressedTexSubImage2D;
-   ctx->Driver.TestProxyTexImage = fxDDTestProxyTexImage;
-   ctx->Driver.TexEnv = fxDDTexEnv;
-   ctx->Driver.TexParameter = fxDDTexParam;
-   ctx->Driver.BindTexture = fxDDTexBind;
-   ctx->Driver.DeleteTexture = fxDDTexDel;
-   ctx->Driver.IsTextureResident = fxDDIsTextureResident;
-   ctx->Driver.UpdateTexturePalette = fxDDTexPalette;
-   ctx->Driver.AlphaFunc = fxDDAlphaFunc;
-   ctx->Driver.BlendFuncSeparate = fxDDBlendFuncSeparate;
-   ctx->Driver.BlendEquationSeparate = fxDDBlendEquationSeparate;
-   ctx->Driver.DepthFunc = fxDDDepthFunc;
-   ctx->Driver.DepthMask = fxDDDepthMask;
-   ctx->Driver.ColorMask = fxDDColorMask;
-   ctx->Driver.Fogfv = fxDDFogfv;
-   ctx->Driver.Scissor = fxDDScissor;
-   ctx->Driver.FrontFace = fxDDFrontFace;
-   ctx->Driver.CullFace = fxDDCullFace;
-   ctx->Driver.ShadeModel = fxDDShadeModel;
-   ctx->Driver.Enable = fxDDEnable;
-   if (fxMesa->haveHwStencil) {
-      ctx->Driver.StencilFuncSeparate	= fxDDStencilFuncSeparate;
-      ctx->Driver.StencilMaskSeparate	= fxDDStencilMaskSeparate;
-      ctx->Driver.StencilOpSeparate	= fxDDStencilOpSeparate;
-   }
-
-   fxSetupDDSpanPointers(ctx);
-   fxDDUpdateDDPointers(ctx, ~0);
-}
-
-
-#else
-
-
-/*
- * Need this to provide at least one external definition.
- */
-
-extern int gl_fx_dummy_function_dd(void);
-int
-gl_fx_dummy_function_dd(void)
-{
-   return 0;
-}
-
-#endif /* FX */
diff --git a/src/mesa/drivers/glide/fxddspan.c b/src/mesa/drivers/glide/fxddspan.c
deleted file mode 100644
index d3a58a301c..0000000000
--- a/src/mesa/drivers/glide/fxddspan.c
+++ /dev/null
@@ -1,638 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  4.0
- *
- * Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/* Authors:
- *    David Bucciarelli
- *    Brian Paul
- *    Daryll Strauss
- *    Keith Whitwell
- *    Daniel Borca
- *    Hiroshi Morii
- */
-
-
-/* fxdd.c - 3Dfx VooDoo Mesa span and pixel functions */
-
-
-#ifdef HAVE_CONFIG_H
-#include "conf.h"
-#endif
-
-#if defined(FX)
-
-#include "fxdrv.h"
-#include "fxglidew.h"
-#include "swrast/swrast.h"
-
-
-/************************************************************************/
-/*****                    Span functions                            *****/
-/************************************************************************/
-
-#define DBG 0
-
-
-#define LOCAL_VARS							\
-    GrBuffer_t currentFB = GR_BUFFER_BACKBUFFER;			\
-    GLuint pitch = info.strideInBytes;					\
-    GLuint height = fxMesa->height;					\
-    char *buf = (char *)((char *)info.lfbPtr + 0 /* x, y offset */);	\
-    GLuint p;								\
-    (void) buf; (void) p;
-
-#define CLIPPIXEL( _x, _y )	( _x >= minx && _x < maxx &&		\
-				  _y >= miny && _y < maxy )
-
-#define CLIPSPAN( _x, _y, _n, _x1, _n1, _i )				\
-    if ( _y < miny || _y >= maxy ) {					\
-	_n1 = 0, _x1 = x;						\
-    } else {								\
-	_n1 = _n;							\
-	_x1 = _x;							\
-	if ( _x1 < minx ) _i += (minx-_x1), n1 -= (minx-_x1), _x1 = minx;\
-	if ( _x1 + _n1 >= maxx ) n1 -= (_x1 + n1 - maxx);		\
-    }
-
-#define Y_FLIP(_y)		(height - _y - 1)
-
-#define HW_WRITE_LOCK()							\
-    fxMesaContext fxMesa = FX_CONTEXT(ctx);				\
-    GrLfbInfo_t info;							\
-    info.size = sizeof(GrLfbInfo_t);					\
-    if ( grLfbLock( GR_LFB_WRITE_ONLY,					\
-                   currentFB, LFB_MODE,					\
-		   GR_ORIGIN_UPPER_LEFT, FXFALSE, &info ) ) {
-
-#define HW_WRITE_UNLOCK()						\
-	grLfbUnlock( GR_LFB_WRITE_ONLY, currentFB );			\
-    }
-
-#define HW_READ_LOCK()							\
-    fxMesaContext fxMesa = FX_CONTEXT(ctx);				\
-    GrLfbInfo_t info;							\
-    info.size = sizeof(GrLfbInfo_t);					\
-    if ( grLfbLock( GR_LFB_READ_ONLY, currentFB,			\
-                    LFB_MODE, GR_ORIGIN_UPPER_LEFT, FXFALSE, &info ) ) {
-
-#define HW_READ_UNLOCK()						\
-	grLfbUnlock( GR_LFB_READ_ONLY, currentFB );			\
-    }
-
-#define HW_WRITE_CLIPLOOP()						\
-    do {								\
-	/* remember, we need to flip the scissor, too */		\
-	/* is it better to do it inside fxDDScissor? */			\
-	const int minx = fxMesa->clipMinX;				\
-	const int maxy = Y_FLIP(fxMesa->clipMinY);			\
-	const int maxx = fxMesa->clipMaxX;				\
-	const int miny = Y_FLIP(fxMesa->clipMaxY);
-
-#define HW_READ_CLIPLOOP()						\
-    do {								\
-	/* remember, we need to flip the scissor, too */		\
-	/* is it better to do it inside fxDDScissor? */			\
-	const int minx = fxMesa->clipMinX;				\
-	const int maxy = Y_FLIP(fxMesa->clipMinY);			\
-	const int maxx = fxMesa->clipMaxX;				\
-	const int miny = Y_FLIP(fxMesa->clipMaxY);
-
-#define HW_ENDCLIPLOOP()						\
-    } while (0)
-
-
-/* 16 bit, ARGB1555 color spanline and pixel functions */
-
-#undef LFB_MODE
-#define LFB_MODE	GR_LFBWRITEMODE_1555
-
-#undef BYTESPERPIXEL
-#define BYTESPERPIXEL 2
-
-#undef INIT_MONO_PIXEL
-#define INIT_MONO_PIXEL(p, color) \
-    p = TDFXPACKCOLOR1555( color[RCOMP], color[GCOMP], color[BCOMP], color[ACOMP] )
-
-#define WRITE_RGBA( _x, _y, r, g, b, a )				\
-    *(GLushort *)(buf + _x*BYTESPERPIXEL + _y*pitch) =			\
-					TDFXPACKCOLOR1555( r, g, b, a )
-
-#define WRITE_PIXEL( _x, _y, p )					\
-    *(GLushort *)(buf + _x*BYTESPERPIXEL + _y*pitch) = p
-
-#define READ_RGBA( rgba, _x, _y )					\
-    do {								\
-	GLushort p = *(GLushort *)(buf + _x*BYTESPERPIXEL + _y*pitch);	\
-	rgba[0] = FX_rgb_scale_5[(p >> 10) & 0x1F];			\
-	rgba[1] = FX_rgb_scale_5[(p >> 5)  & 0x1F];			\
-	rgba[2] = FX_rgb_scale_5[ p        & 0x1F];			\
-	rgba[3] = (p & 0x8000) ? 255 : 0;				\
-    } while (0)
-
-#define TAG(x) tdfx##x##_ARGB1555
-#include "../dri/common/spantmp.h"
-
-
-/* 16 bit, RGB565 color spanline and pixel functions */
-/* [dBorca] Hack alert:
- * This is wrong. The alpha value is lost, even when we provide
- * HW alpha (565 w/o depth buffering). To really update alpha buffer,
- * we would need to do the 565 writings via 8888 colorformat and rely
- * on the Voodoo to perform color scaling. In which case our 565 span
- * would look nicer! But this violates FSAA rules...
- */
-
-#undef LFB_MODE
-#define LFB_MODE	GR_LFBWRITEMODE_565
-
-#undef BYTESPERPIXEL
-#define BYTESPERPIXEL 2
-
-#undef INIT_MONO_PIXEL
-#define INIT_MONO_PIXEL(p, color) \
-    p = TDFXPACKCOLOR565( color[RCOMP], color[GCOMP], color[BCOMP] )
-
-#define WRITE_RGBA( _x, _y, r, g, b, a )				\
-    *(GLushort *)(buf + _x*BYTESPERPIXEL + _y*pitch) =			\
-					TDFXPACKCOLOR565( r, g, b )
-
-#define WRITE_PIXEL( _x, _y, p )					\
-    *(GLushort *)(buf + _x*BYTESPERPIXEL + _y*pitch) = p
-
-#define READ_RGBA( rgba, _x, _y )					\
-    do {								\
-	GLushort p = *(GLushort *)(buf + _x*BYTESPERPIXEL + _y*pitch);	\
-	rgba[0] = FX_rgb_scale_5[(p >> 11) & 0x1F];			\
-	rgba[1] = FX_rgb_scale_6[(p >> 5)  & 0x3F];			\
-	rgba[2] = FX_rgb_scale_5[ p        & 0x1F];			\
-	rgba[3] = 0xff;							\
-    } while (0)
-
-#define TAG(x) tdfx##x##_RGB565
-#include "../dri/common/spantmp.h"
-
-
-/* 32 bit, ARGB8888 color spanline and pixel functions */
-
-#undef LFB_MODE
-#define LFB_MODE	GR_LFBWRITEMODE_8888
-
-#undef BYTESPERPIXEL
-#define BYTESPERPIXEL 4
-
-#undef INIT_MONO_PIXEL
-#define INIT_MONO_PIXEL(p, color) \
-    p = TDFXPACKCOLOR8888( color[RCOMP], color[GCOMP], color[BCOMP], color[ACOMP] )
-
-#define WRITE_RGBA( _x, _y, r, g, b, a )				\
-    *(GLuint *)(buf + _x*BYTESPERPIXEL + _y*pitch) =			\
-					TDFXPACKCOLOR8888( r, g, b, a )
-
-#define WRITE_PIXEL( _x, _y, p )					\
-    *(GLuint *)(buf + _x*BYTESPERPIXEL + _y*pitch) = p
-
-#define READ_RGBA( rgba, _x, _y )					\
-    do {								\
-	GLuint p = *(GLuint *)(buf + _x*BYTESPERPIXEL + _y*pitch);	\
-        rgba[0] = (p >> 16) & 0xff;					\
-        rgba[1] = (p >>  8) & 0xff;					\
-        rgba[2] = (p >>  0) & 0xff;					\
-        rgba[3] = (p >> 24) & 0xff;					\
-    } while (0)
-
-#define TAG(x) tdfx##x##_ARGB8888
-#include "../dri/common/spantmp.h"
-
-
-/************************************************************************/
-/*****                    Depth functions                           *****/
-/************************************************************************/
-
-#define DBG 0
-
-#undef HW_WRITE_LOCK
-#undef HW_WRITE_UNLOCK
-#undef HW_READ_LOCK
-#undef HW_READ_UNLOCK
-
-#define HW_CLIPLOOP HW_WRITE_CLIPLOOP
-
-#define LOCAL_DEPTH_VARS						\
-    GLuint pitch = info.strideInBytes;					\
-    GLuint height = fxMesa->height;					\
-    char *buf = (char *)((char *)info.lfbPtr + 0 /* x, y offset */);	\
-    (void) buf;
-
-#define HW_WRITE_LOCK()							\
-    fxMesaContext fxMesa = FX_CONTEXT(ctx);				\
-    GrLfbInfo_t info;							\
-    info.size = sizeof(GrLfbInfo_t);					\
-    if ( grLfbLock( GR_LFB_WRITE_ONLY,					\
-                   GR_BUFFER_AUXBUFFER, LFB_MODE,			\
-		   GR_ORIGIN_UPPER_LEFT, FXFALSE, &info ) ) {
-
-#define HW_WRITE_UNLOCK()						\
-	grLfbUnlock( GR_LFB_WRITE_ONLY, GR_BUFFER_AUXBUFFER);		\
-    }
-
-#define HW_READ_LOCK()							\
-    fxMesaContext fxMesa = FX_CONTEXT(ctx);				\
-    GrLfbInfo_t info;							\
-    info.size = sizeof(GrLfbInfo_t);					\
-    if ( grLfbLock( GR_LFB_READ_ONLY, GR_BUFFER_AUXBUFFER,		\
-                    LFB_MODE, GR_ORIGIN_UPPER_LEFT, FXFALSE, &info ) ) {
-
-#define HW_READ_UNLOCK()						\
-	grLfbUnlock( GR_LFB_READ_ONLY, GR_BUFFER_AUXBUFFER);		\
-    }
-
-
-/* 16 bit, depth spanline and pixel functions */
-
-#undef LFB_MODE
-#define LFB_MODE	GR_LFBWRITEMODE_ZA16
-
-#undef BYTESPERPIXEL
-#define BYTESPERPIXEL 2
-
-#define VALUE_TYPE GLushort
-
-#define WRITE_DEPTH( _x, _y, d )					\
-    *(GLushort *)(buf + _x*BYTESPERPIXEL + _y*pitch) = d
-
-#define READ_DEPTH( d, _x, _y )						\
-    d = *(GLushort *)(buf + _x*BYTESPERPIXEL + _y*pitch)
-
-#define TAG(x) tdfx##x##_Z16
-#include "../dri/common/depthtmp.h"
-
-
-/* 24 bit, depth spanline and pixel functions (for use w/ stencil) */
-/* [dBorca] Hack alert:
- * This is evil. The incoming Mesa's 24bit depth value
- * is shifted left 8 bits, to obtain a full 32bit value,
- * which will be thrown into the framebuffer. We rely on
- * the fact that Voodoo hardware transforms a 32bit value
- * into 24bit value automatically and, MOST IMPORTANT, won't
- * alter the upper 8bits of the value already existing in the
- * framebuffer (where stencil resides).
- */
-
-#undef LFB_MODE
-#define LFB_MODE	GR_LFBWRITEMODE_Z32
-
-#undef BYTESPERPIXEL
-#define BYTESPERPIXEL 4
-
-#define VALUE_TYPE GLuint
-
-#define WRITE_DEPTH( _x, _y, d )					\
-    *(GLuint *)(buf + _x*BYTESPERPIXEL + _y*pitch) = d << 8
-
-#define READ_DEPTH( d, _x, _y )						\
-    d = (*(GLuint *)(buf + _x*BYTESPERPIXEL + _y*pitch)) & 0xffffff
-
-#define TAG(x) tdfx##x##_Z24
-#include "../dri/common/depthtmp.h"
-
-
-/* 32 bit, depth spanline and pixel functions (for use w/o stencil) */
-/* [dBorca] Hack alert:
- * This is more evil. We make Mesa run in 32bit depth, but
- * tha Voodoo HW can only handle 24bit depth. Well, exploiting
- * the pixel pipeline, we can achieve 24:8 format for greater
- * precision...
- * If anyone tells me how to really store 32bit values into the
- * depth buffer, I'll write the *_Z32 routines. Howver, bear in
- * mind that means running without stencil!
- */
-
-/************************************************************************/
-/*****                    Span functions (optimized)                *****/
-/************************************************************************/
-
-/*
- * Read a span of 15-bit RGB pixels.  Note, we don't worry about cliprects
- * since OpenGL says obscured pixels have undefined values.
- */
-static void fxReadRGBASpan_ARGB1555 (const GLcontext * ctx,
-                                     struct gl_renderbuffer *rb,
-                                     GLuint n,
-                                     GLint x, GLint y,
-                                     GLubyte rgba[][4])
-{
- fxMesaContext fxMesa = FX_CONTEXT(ctx);
- GrBuffer_t currentFB = GR_BUFFER_BACKBUFFER;
- GrLfbInfo_t info;
- info.size = sizeof(GrLfbInfo_t);
- if (grLfbLock(GR_LFB_READ_ONLY, currentFB,
-               GR_LFBWRITEMODE_ANY, GR_ORIGIN_UPPER_LEFT, FXFALSE, &info)) {
-    const GLint winX = 0;
-    const GLint winY = fxMesa->height - 1;
-    const GLushort *data16 = (const GLushort *)((const GLubyte *)info.lfbPtr +
-	                                        (winY - y) * info.strideInBytes +
-                                                (winX + x) * 2);
-    const GLuint *data32 = (const GLuint *) data16;
-    GLuint i, j;
-    GLuint extraPixel = (n & 1);
-    n -= extraPixel;
-
-    for (i = j = 0; i < n; i += 2, j++) {
-	GLuint pixel = data32[j];
-	rgba[i][0] = FX_rgb_scale_5[(pixel >> 10) & 0x1F];
-	rgba[i][1] = FX_rgb_scale_5[(pixel >> 5)  & 0x1F];
-	rgba[i][2] = FX_rgb_scale_5[ pixel        & 0x1F];
-	rgba[i][3] = (pixel & 0x8000) ? 255 : 0;
-	rgba[i+1][0] = FX_rgb_scale_5[(pixel >> 26) & 0x1F];
-	rgba[i+1][1] = FX_rgb_scale_5[(pixel >> 21) & 0x1F];
-	rgba[i+1][2] = FX_rgb_scale_5[(pixel >> 16) & 0x1F];
-	rgba[i+1][3] = (pixel & 0x80000000) ? 255 : 0;
-    }
-    if (extraPixel) {
-       GLushort pixel = data16[n];
-       rgba[n][0] = FX_rgb_scale_5[(pixel >> 10) & 0x1F];
-       rgba[n][1] = FX_rgb_scale_5[(pixel >> 5)  & 0x1F];
-       rgba[n][2] = FX_rgb_scale_5[ pixel        & 0x1F];
-       rgba[n][3] = (pixel & 0x8000) ? 255 : 0;
-    }
-
-    grLfbUnlock(GR_LFB_READ_ONLY, currentFB);
- }
-}
-
-/*
- * Read a span of 16-bit RGB pixels.  Note, we don't worry about cliprects
- * since OpenGL says obscured pixels have undefined values.
- */
-static void fxReadRGBASpan_RGB565 (const GLcontext * ctx,
-                                   struct gl_renderbuffer *rb,
-                                   GLuint n,
-                                   GLint x, GLint y,
-                                   GLubyte rgba[][4])
-{
- fxMesaContext fxMesa = FX_CONTEXT(ctx);
- GrBuffer_t currentFB = GR_BUFFER_BACKBUFFER;
- GrLfbInfo_t info;
- info.size = sizeof(GrLfbInfo_t);
- if (grLfbLock(GR_LFB_READ_ONLY, currentFB,
-               GR_LFBWRITEMODE_ANY, GR_ORIGIN_UPPER_LEFT, FXFALSE, &info)) {
-    const GLint winX = 0;
-    const GLint winY = fxMesa->height - 1;
-    const GLushort *data16 = (const GLushort *)((const GLubyte *)info.lfbPtr +
-	                                        (winY - y) * info.strideInBytes +
-                                                (winX + x) * 2);
-    const GLuint *data32 = (const GLuint *) data16;
-    GLuint i, j;
-    GLuint extraPixel = (n & 1);
-    n -= extraPixel;
-
-    for (i = j = 0; i < n; i += 2, j++) {
-        GLuint pixel = data32[j];
-	rgba[i][0] = FX_rgb_scale_5[(pixel >> 11) & 0x1F];
-	rgba[i][1] = FX_rgb_scale_6[(pixel >> 5)  & 0x3F];
-	rgba[i][2] = FX_rgb_scale_5[ pixel        & 0x1F];
-	rgba[i][3] = 255;
-	rgba[i+1][0] = FX_rgb_scale_5[(pixel >> 27) & 0x1F];
-	rgba[i+1][1] = FX_rgb_scale_6[(pixel >> 21) & 0x3F];
-	rgba[i+1][2] = FX_rgb_scale_5[(pixel >> 16) & 0x1F];
-	rgba[i+1][3] = 255;
-    }
-    if (extraPixel) {
-       GLushort pixel = data16[n];
-       rgba[n][0] = FX_rgb_scale_5[(pixel >> 11) & 0x1F];
-       rgba[n][1] = FX_rgb_scale_6[(pixel >> 5)  & 0x3F];
-       rgba[n][2] = FX_rgb_scale_5[ pixel        & 0x1F];
-       rgba[n][3] = 255;
-    }
-
-    grLfbUnlock(GR_LFB_READ_ONLY, currentFB);
- }
-}
-
-/*
- * Read a span of 32-bit RGB pixels.  Note, we don't worry about cliprects
- * since OpenGL says obscured pixels have undefined values.
- */
-static void fxReadRGBASpan_ARGB8888 (const GLcontext * ctx,
-                                     struct gl_renderbuffer *rb,
-                                     GLuint n,
-                                     GLint x, GLint y,
-                                     GLubyte rgba[][4])
-{
- fxMesaContext fxMesa = FX_CONTEXT(ctx);
- GrBuffer_t currentFB = GR_BUFFER_BACKBUFFER;
- GLuint i;
- grLfbReadRegion(currentFB, x, fxMesa->height - 1 - y, n, 1, n * 4, rgba);
- for (i = 0; i < n; i++) {
-     GLubyte c = rgba[i][0];
-     rgba[i][0] = rgba[i][2];
-     rgba[i][2] = c;
- }
-}
-
-
-/************************************************************************/
-/*****                    Depth functions (optimized)               *****/
-/************************************************************************/
-
-static void
-fxReadDepthSpan_Z16(GLcontext * ctx, struct gl_renderbuffer *rb,
-		    GLuint n, GLint x, GLint y, GLuint depth[])
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   GLint bottom = fxMesa->height - 1;
-   GLushort depth16[MAX_WIDTH];
-   GLuint i;
-
-   if (TDFX_DEBUG & VERBOSE_DRIVER) {
-      fprintf(stderr, "fxReadDepthSpan_Z16(...)\n");
-   }
-
-   grLfbReadRegion(GR_BUFFER_AUXBUFFER, x, bottom - y, n, 1, 0, depth16);
-   for (i = 0; i < n; i++) {
-      depth[i] = depth16[i];
-   }
-}
-
-
-static void
-fxReadDepthSpan_Z24(GLcontext * ctx, struct gl_renderbuffer *rb,
-		    GLuint n, GLint x, GLint y, GLuint depth[])
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   GLint bottom = fxMesa->height - 1;
-   GLuint i;
-
-   if (TDFX_DEBUG & VERBOSE_DRIVER) {
-      fprintf(stderr, "fxReadDepthSpan_Z24(...)\n");
-   }
-
-   grLfbReadRegion(GR_BUFFER_AUXBUFFER, x, bottom - y, n, 1, 0, depth);
-   for (i = 0; i < n; i++) {
-      depth[i] &= 0xffffff;
-   }
-}
-
-
-/************************************************************************/
-/*****                    Stencil functions (optimized)             *****/
-/************************************************************************/
-
-static void
-fxWriteStencilSpan (GLcontext *ctx, struct gl_renderbuffer *rb,
-                    GLuint n, GLint x, GLint y,
-                    const GLstencil stencil[], const GLubyte mask[])
-{
- /*
-  * XXX todo
-  */
-}
-
-static void
-fxReadStencilSpan(GLcontext * ctx, struct gl_renderbuffer *rb,
-		  GLuint n, GLint x, GLint y, GLstencil stencil[])
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   GLint bottom = fxMesa->height - 1;
-   GLuint zs32[MAX_WIDTH];
-   GLuint i;
-
-   if (TDFX_DEBUG & VERBOSE_DRIVER) {
-      fprintf(stderr, "fxReadStencilSpan(...)\n");
-   }
-
-   grLfbReadRegion(GR_BUFFER_AUXBUFFER, x, bottom - y, n, 1, 0, zs32);
-   for (i = 0; i < n; i++) {
-      stencil[i] = zs32[i] >> 24;
-   }
-}
-
-static void
-fxWriteStencilPixels (GLcontext *ctx, struct gl_renderbuffer *rb, GLuint n,
-                      const GLint x[], const GLint y[],
-                      const GLstencil stencil[],
-                      const GLubyte mask[])
-{
- /*
-  * XXX todo
-  */
-}
-
-static void
-fxReadStencilPixels (GLcontext *ctx, struct gl_renderbuffer *rb, GLuint n,
-                     const GLint x[], const GLint y[],
-                     GLstencil stencil[])
-{
- /*
-  * XXX todo
-  */
-}
-
-
-void
-fxSetupDDSpanPointers(GLcontext * ctx)
-{
-   struct swrast_device_driver *swdd = _swrast_GetDeviceDriverReference( ctx );
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-
-   switch (fxMesa->colDepth) {
-          case 15:
-               swdd->WriteRGBASpan = tdfxWriteRGBASpan_ARGB1555;
-               swdd->WriteRGBSpan = tdfxWriteRGBSpan_ARGB1555;
-               swdd->WriteRGBAPixels = tdfxWriteRGBAPixels_ARGB1555;
-               swdd->WriteMonoRGBASpan = tdfxWriteMonoRGBASpan_ARGB1555;
-               swdd->WriteMonoRGBAPixels = tdfxWriteMonoRGBAPixels_ARGB1555;
-               swdd->ReadRGBASpan = /*td*/fxReadRGBASpan_ARGB1555;
-               swdd->ReadRGBAPixels = tdfxReadRGBAPixels_ARGB1555;
-
-               swdd->WriteDepthSpan = tdfxWriteDepthSpan_Z16;
-               swdd->WriteDepthPixels = tdfxWriteDepthPixels_Z16;
-               swdd->ReadDepthSpan = /*td*/fxReadDepthSpan_Z16;
-               swdd->ReadDepthPixels = tdfxReadDepthPixels_Z16;
-               break;
-          case 16:
-               swdd->WriteRGBASpan = tdfxWriteRGBASpan_RGB565;
-               swdd->WriteRGBSpan = tdfxWriteRGBSpan_RGB565;
-               swdd->WriteRGBAPixels = tdfxWriteRGBAPixels_RGB565;
-               swdd->WriteMonoRGBASpan = tdfxWriteMonoRGBASpan_RGB565;
-               swdd->WriteMonoRGBAPixels = tdfxWriteMonoRGBAPixels_RGB565;
-               swdd->ReadRGBASpan = /*td*/fxReadRGBASpan_RGB565;
-               swdd->ReadRGBAPixels = tdfxReadRGBAPixels_RGB565;
-
-               swdd->WriteDepthSpan = tdfxWriteDepthSpan_Z16;
-               swdd->WriteDepthPixels = tdfxWriteDepthPixels_Z16;
-               swdd->ReadDepthSpan = /*td*/fxReadDepthSpan_Z16;
-               swdd->ReadDepthPixels = tdfxReadDepthPixels_Z16;
-               break;
-          case 32:
-               swdd->WriteRGBASpan = tdfxWriteRGBASpan_ARGB8888;
-               swdd->WriteRGBSpan = tdfxWriteRGBSpan_ARGB8888;
-               swdd->WriteRGBAPixels = tdfxWriteRGBAPixels_ARGB8888;
-               swdd->WriteMonoRGBASpan = tdfxWriteMonoRGBASpan_ARGB8888;
-               swdd->WriteMonoRGBAPixels = tdfxWriteMonoRGBAPixels_ARGB8888;
-               swdd->ReadRGBASpan = /*td*/fxReadRGBASpan_ARGB8888;
-               swdd->ReadRGBAPixels = tdfxReadRGBAPixels_ARGB8888;
-
-               swdd->WriteDepthSpan = tdfxWriteDepthSpan_Z24;
-               swdd->WriteDepthPixels = tdfxWriteDepthPixels_Z24;
-               swdd->ReadDepthSpan = /*td*/fxReadDepthSpan_Z24;
-               swdd->ReadDepthPixels = tdfxReadDepthPixels_Z24;
-               break;
-   }
-
-   if (fxMesa->haveHwStencil) {
-      swdd->WriteStencilSpan = fxWriteStencilSpan;
-      swdd->ReadStencilSpan = fxReadStencilSpan;
-      swdd->WriteStencilPixels = fxWriteStencilPixels;
-      swdd->ReadStencilPixels = fxReadStencilPixels;
-   }
-#if 0
-   swdd->WriteCI8Span		= NULL;
-   swdd->WriteCI32Span		= NULL;
-   swdd->WriteMonoCISpan	= NULL;
-   swdd->WriteCI32Pixels	= NULL;
-   swdd->WriteMonoCIPixels	= NULL;
-   swdd->ReadCI32Span		= NULL;
-   swdd->ReadCI32Pixels		= NULL;
-
-   swdd->SpanRenderStart        = tdfxSpanRenderStart; /* BEGIN_BOARD_LOCK */
-   swdd->SpanRenderFinish       = tdfxSpanRenderFinish; /* END_BOARD_LOCK */
-#endif
-}
-
-
-#else
-
-
-/*
- * Need this to provide at least one external definition.
- */
-
-extern int gl_fx_dummy_function_span(void);
-int
-gl_fx_dummy_function_span(void)
-{
-   return 0;
-}
-
-#endif /* FX */
diff --git a/src/mesa/drivers/glide/fxddtex.c b/src/mesa/drivers/glide/fxddtex.c
deleted file mode 100644
index b35874fffc..0000000000
--- a/src/mesa/drivers/glide/fxddtex.c
+++ /dev/null
@@ -1,1836 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  4.0
- *
- * Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/* Authors:
- *    David Bucciarelli
- *    Brian Paul
- *    Daryll Strauss
- *    Keith Whitwell
- *    Daniel Borca
- *    Hiroshi Morii
- */
-
-
-#ifdef HAVE_CONFIG_H
-#include "conf.h"
-#endif
-
-#if defined(FX)
-
-#include "fxdrv.h"
-#include "main/enums.h"
-#include "main/formats.h"
-#include "main/image.h"
-#include "main/teximage.h"
-#include "main/texstore.h"
-#include "main/texformat.h"
-#include "main/texcompress.h"
-#include "main/texobj.h"
-#include "main/texstore.h"
-
-
-/* no borders! can't halve 1x1! (stride > width * comp) not allowed */
-static void
-_mesa_halve2x2_teximage2d ( GLcontext *ctx,
-			    struct gl_texture_image *texImage,
-			    GLuint bytesPerPixel,
-			    GLint srcWidth, GLint srcHeight,
-			    const GLvoid *srcImage, GLvoid *dstImage )
-{
-   GLint i, j, k;
-   GLint dstWidth = srcWidth / 2;
-   GLint dstHeight = srcHeight / 2;
-   GLint srcRowStride = srcWidth * bytesPerPixel;
-   GLubyte *src = (GLubyte *)srcImage;
-   GLubyte *dst = dstImage;
-
-   GLuint bpt = 0;
-   GLubyte *_s = NULL;
-   GLubyte *_d = NULL;
-   GLenum _t = 0;
-
-   if (texImage->TexFormat->MesaFormat == MESA_FORMAT_RGB565) {
-      _t = GL_UNSIGNED_SHORT_5_6_5_REV;
-      bpt = bytesPerPixel;
-   } else if (texImage->TexFormat->MesaFormat == MESA_FORMAT_ARGB4444) {
-      _t = GL_UNSIGNED_SHORT_4_4_4_4_REV;
-      bpt = bytesPerPixel;
-   } else if (texImage->TexFormat->MesaFormat == MESA_FORMAT_ARGB1555) {
-      _t = GL_UNSIGNED_SHORT_1_5_5_5_REV;
-      bpt = bytesPerPixel;
-   }
-   if (bpt) {
-      bytesPerPixel = 4;
-      srcRowStride = srcWidth * bytesPerPixel;
-      if (dstWidth == 0) {
-         dstWidth = 1;
-      }
-      if (dstHeight == 0) {
-         dstHeight = 1;
-      }
-      _s = src = MALLOC(srcRowStride * srcHeight);
-      _d = dst = MALLOC(dstWidth * bytesPerPixel * dstHeight);
-      _mesa_texstore(ctx, 2, GL_RGBA,
-                     &_mesa_texformat_rgba8888_rev, src,
-                     0, 0, 0, /* dstX/Y/Zoffset */
-                     srcRowStride, /* dstRowStride */
-                     0, /* dstImageStride */
-                     srcWidth, srcHeight, 1,
-                     texImage->_BaseFormat, _t,
-                     srcImage, &ctx->DefaultPacking);
-   }
-
-   if (srcHeight == 1) {
-      for (i = 0; i < dstWidth; i++) {
-         for (k = 0; k < bytesPerPixel; k++) {
-            dst[0] = (src[0] + src[bytesPerPixel] + 1) / 2;
-            src++;
-            dst++;
-         }
-         src += bytesPerPixel;
-      }
-   } else if (srcWidth == 1) {
-      for (j = 0; j < dstHeight; j++) {
-         for (k = 0; k < bytesPerPixel; k++) {
-            dst[0] = (src[0] + src[srcRowStride] + 1) / 2;
-            src++;
-            dst++;
-         }
-         src += srcRowStride;
-      }
-   } else {
-      for (j = 0; j < dstHeight; j++) {
-         for (i = 0; i < dstWidth; i++) {
-            for (k = 0; k < bytesPerPixel; k++) {
-               dst[0] = (src[0] +
-                         src[bytesPerPixel] +
-                         src[srcRowStride] +
-                         src[srcRowStride + bytesPerPixel] + 2) / 4;
-               src++;
-               dst++;
-            }
-            src += bytesPerPixel;
-         }
-         src += srcRowStride;
-      }
-   }
-
-   if (bpt) {
-      src = _s;
-      dst = _d;
-      _mesa_texstore(ctx, 2, texImage->_BaseFormat,
-                     texImage->TexFormat, dstImage,
-                     0, 0, 0, /* dstX/Y/Zoffset */
-                     dstWidth * bpt,
-                     0, /* dstImageStride */
-                     dstWidth, dstHeight, 1,
-                     GL_BGRA, CHAN_TYPE, dst, &ctx->DefaultPacking);
-      FREE(dst);
-      FREE(src);
-   }
-}
-
-
-void
-fxPrintTextureData(tfxTexInfo * ti)
-{
-   fprintf(stderr, "Texture Data:\n");
-   if (ti->tObj) {
-      fprintf(stderr, "\tName: %d\n", ti->tObj->Name);
-      fprintf(stderr, "\tBaseLevel: %d\n", ti->tObj->BaseLevel);
-      fprintf(stderr, "\tSize: %d x %d\n",
-	      ti->tObj->Image[0][ti->tObj->BaseLevel]->Width,
-	      ti->tObj->Image[0][ti->tObj->BaseLevel]->Height);
-   }
-   else
-      fprintf(stderr, "\tName: UNNAMED\n");
-   fprintf(stderr, "\tLast used: %d\n", ti->lastTimeUsed);
-   fprintf(stderr, "\tTMU: %ld\n", ti->whichTMU);
-   fprintf(stderr, "\t%s\n", (ti->isInTM) ? "In TMU" : "Not in TMU");
-   if (ti->tm[0])
-      fprintf(stderr, "\tMem0: %x-%x\n", (unsigned) ti->tm[0]->startAddr,
-	      (unsigned) ti->tm[0]->endAddr);
-   if (ti->tm[1])
-      fprintf(stderr, "\tMem1: %x-%x\n", (unsigned) ti->tm[1]->startAddr,
-	      (unsigned) ti->tm[1]->endAddr);
-   fprintf(stderr, "\tMipmaps: %d-%d\n", ti->minLevel, ti->maxLevel);
-   fprintf(stderr, "\tFilters: min %d max %d\n",
-	   (int) ti->minFilt, (int) ti->maxFilt);
-   fprintf(stderr, "\tClamps: s %d t %d\n", (int) ti->sClamp,
-	   (int) ti->tClamp);
-   fprintf(stderr, "\tScales: s %f t %f\n", ti->sScale, ti->tScale);
-   fprintf(stderr, "\t%s\n",
-	   (ti->fixedPalette) ? "Fixed palette" : "Non fixed palette");
-   fprintf(stderr, "\t%s\n", (ti->validated) ? "Validated" : "Not validated");
-}
-
-
-/************************************************************************/
-/*************************** Texture Mapping ****************************/
-/************************************************************************/
-
-static void
-fxTexInvalidate(GLcontext * ctx, struct gl_texture_object *tObj)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   tfxTexInfo *ti;
-
-   ti = fxTMGetTexInfo(tObj);
-   if (ti->isInTM)
-      fxTMMoveOutTM(fxMesa, tObj);	/* TO DO: SLOW but easy to write */
-
-   ti->validated = GL_FALSE;
-   fxMesa->new_state |= FX_NEW_TEXTURING;
-}
-
-static tfxTexInfo *
-fxAllocTexObjData(fxMesaContext fxMesa)
-{
-   tfxTexInfo *ti;
-
-   if (!(ti = CALLOC(sizeof(tfxTexInfo)))) {
-      fprintf(stderr, "fxAllocTexObjData: ERROR: out of memory !\n");
-      fxCloseHardware();
-      exit(-1);
-   }
-
-   ti->validated = GL_FALSE;
-   ti->isInTM = GL_FALSE;
-
-   ti->whichTMU = FX_TMU_NONE;
-
-   ti->tm[FX_TMU0] = NULL;
-   ti->tm[FX_TMU1] = NULL;
-
-   ti->minFilt = GR_TEXTUREFILTER_POINT_SAMPLED;
-   ti->maxFilt = GR_TEXTUREFILTER_BILINEAR;
-
-   ti->sClamp = GR_TEXTURECLAMP_WRAP;
-   ti->tClamp = GR_TEXTURECLAMP_WRAP;
-
-   ti->mmMode = GR_MIPMAP_NEAREST;
-   ti->LODblend = FXFALSE;
-
-   return ti;
-}
-
-void
-fxDDTexBind(GLcontext * ctx, GLenum target, struct gl_texture_object *tObj)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   tfxTexInfo *ti;
-
-   if (TDFX_DEBUG & VERBOSE_DRIVER) {
-      fprintf(stderr, "fxDDTexBind(%d, %x)\n", tObj->Name, (GLuint)tObj->DriverData);
-   }
-
-   if ((target != GL_TEXTURE_1D) && (target != GL_TEXTURE_2D))
-      return;
-
-   if (!tObj->DriverData) {
-      tObj->DriverData = fxAllocTexObjData(fxMesa);
-   }
-   ti = fxTMGetTexInfo(tObj);
-
-   fxMesa->texBindNumber++;
-   ti->lastTimeUsed = fxMesa->texBindNumber;
-
-   fxMesa->new_state |= FX_NEW_TEXTURING;
-}
-
-void
-fxDDTexEnv(GLcontext * ctx, GLenum target, GLenum pname,
-	   const GLfloat * param)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-
-   if (TDFX_DEBUG & VERBOSE_DRIVER) {
-      if (param)
-	 fprintf(stderr, "fxDDTexEnv(%x, %x)\n", pname, (GLint) (*param));
-      else
-	 fprintf(stderr, "fxDDTexEnv(%x)\n", pname);
-   }
-
-   /* apply any lod biasing right now */
-   if (pname == GL_TEXTURE_LOD_BIAS_EXT) {
-      GLfloat bias = *param;
-      bias = CLAMP(bias,
-		   -ctx->Const.MaxTextureLodBias,
-		   ctx->Const.MaxTextureLodBias - 0.25);
-
-      grTexLodBiasValue(GR_TMU0, bias);
-
-      if (fxMesa->haveTwoTMUs) {
-	 grTexLodBiasValue(GR_TMU1, bias);
-      }
-
-   }
-
-   fxMesa->new_state |= FX_NEW_TEXTURING;
-}
-
-void
-fxDDTexParam(GLcontext * ctx, GLenum target, struct gl_texture_object *tObj,
-	     GLenum pname, const GLfloat * params)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   GLenum param = (GLenum) (GLint) params[0];
-   tfxTexInfo *ti;
-
-   if (TDFX_DEBUG & VERBOSE_DRIVER) {
-      fprintf(stderr, "fxDDTexParam(%d, %x, %s, %s)\n",
-                      tObj->Name, (GLuint) tObj->DriverData,
-                      _mesa_lookup_enum_by_nr(pname),
-                      _mesa_lookup_enum_by_nr(param));
-   }
-
-   if ((target != GL_TEXTURE_1D) && (target != GL_TEXTURE_2D))
-      return;
-
-   if (!tObj->DriverData)
-      tObj->DriverData = fxAllocTexObjData(fxMesa);
-   ti = fxTMGetTexInfo(tObj);
-
-   switch (pname) {
-   case GL_TEXTURE_MIN_FILTER:
-      switch (param) {
-      case GL_NEAREST:
-	 ti->mmMode = GR_MIPMAP_DISABLE;
-	 ti->minFilt = GR_TEXTUREFILTER_POINT_SAMPLED;
-	 ti->LODblend = FXFALSE;
-	 break;
-      case GL_LINEAR:
-	 ti->mmMode = GR_MIPMAP_DISABLE;
-	 ti->minFilt = GR_TEXTUREFILTER_BILINEAR;
-	 ti->LODblend = FXFALSE;
-	 break;
-      case GL_NEAREST_MIPMAP_LINEAR:
-         /* [dBorca]
-          * currently Napalm can't do single-pass trilinear,
-          * because the way its combiners are set. So we fall back
-          * to GL_NEAREST_MIPMAP_NEAREST. We'll let true trilinear
-          * enabled for V2, V3.
-          */
-         if (!fxMesa->HaveCmbExt) {
-	    if (fxMesa->haveTwoTMUs) {
-	       ti->mmMode = GR_MIPMAP_NEAREST;
-	       ti->LODblend = FXTRUE;
-            } else {
-	       ti->mmMode = GR_MIPMAP_NEAREST_DITHER;
-	       ti->LODblend = FXFALSE;
-            }
-	    ti->minFilt = GR_TEXTUREFILTER_POINT_SAMPLED;
-	    break;
-         }
-      case GL_NEAREST_MIPMAP_NEAREST:
-	 ti->mmMode = GR_MIPMAP_NEAREST;
-	 ti->minFilt = GR_TEXTUREFILTER_POINT_SAMPLED;
-	 ti->LODblend = FXFALSE;
-	 break;
-      case GL_LINEAR_MIPMAP_LINEAR:
-         /* [dBorca]
-          * currently Napalm can't do single-pass trilinear,
-          * because the way its combiners are set. So we fall back
-          * to GL_LINEAR_MIPMAP_NEAREST. We'll let true trilinear
-          * enabled for V2, V3.
-          */
-         if (!fxMesa->HaveCmbExt) {
-            if (fxMesa->haveTwoTMUs) {
-               ti->mmMode = GR_MIPMAP_NEAREST;
-               ti->LODblend = FXTRUE;
-            } else {
-               ti->mmMode = GR_MIPMAP_NEAREST_DITHER;
-               ti->LODblend = FXFALSE;
-            }
-            ti->minFilt = GR_TEXTUREFILTER_BILINEAR;
-            break;
-         }
-      case GL_LINEAR_MIPMAP_NEAREST:
-	 ti->mmMode = GR_MIPMAP_NEAREST;
-	 ti->minFilt = GR_TEXTUREFILTER_BILINEAR;
-	 ti->LODblend = FXFALSE;
-	 break;
-      default:
-	 break;
-      }
-      fxTexInvalidate(ctx, tObj);
-      break;
-
-   case GL_TEXTURE_MAG_FILTER:
-      switch (param) {
-      case GL_NEAREST:
-	 ti->maxFilt = GR_TEXTUREFILTER_POINT_SAMPLED;
-	 break;
-      case GL_LINEAR:
-	 ti->maxFilt = GR_TEXTUREFILTER_BILINEAR;
-	 break;
-      default:
-	 break;
-      }
-      fxMesa->new_state |= FX_NEW_TEXTURING;
-      break;
-
-   case GL_TEXTURE_WRAP_S:
-      switch (param) {
-      case GL_MIRRORED_REPEAT:
-         ti->sClamp = GR_TEXTURECLAMP_MIRROR_EXT;
-         break;
-      case GL_CLAMP_TO_BORDER: /* no-no, but don't REPEAT, either */
-      case GL_CLAMP_TO_EDGE: /* CLAMP discarding border */
-      case GL_CLAMP:
-	 ti->sClamp = GR_TEXTURECLAMP_CLAMP;
-	 break;
-      case GL_REPEAT:
-	 ti->sClamp = GR_TEXTURECLAMP_WRAP;
-	 break;
-      default:
-	 break;
-      }
-      fxMesa->new_state |= FX_NEW_TEXTURING;
-      break;
-
-   case GL_TEXTURE_WRAP_T:
-      switch (param) {
-      case GL_MIRRORED_REPEAT:
-         ti->tClamp = GR_TEXTURECLAMP_MIRROR_EXT;
-         break;
-      case GL_CLAMP_TO_BORDER: /* no-no, but don't REPEAT, either */
-      case GL_CLAMP_TO_EDGE: /* CLAMP discarding border */
-      case GL_CLAMP:
-	 ti->tClamp = GR_TEXTURECLAMP_CLAMP;
-	 break;
-      case GL_REPEAT:
-	 ti->tClamp = GR_TEXTURECLAMP_WRAP;
-	 break;
-      default:
-	 break;
-      }
-      fxMesa->new_state |= FX_NEW_TEXTURING;
-      break;
-
-   case GL_TEXTURE_BORDER_COLOR:
-      /* TO DO */
-      break;
-
-   case GL_TEXTURE_MIN_LOD:
-      /* TO DO */
-      break;
-   case GL_TEXTURE_MAX_LOD:
-      /* TO DO */
-      break;
-   case GL_TEXTURE_BASE_LEVEL:
-      fxTexInvalidate(ctx, tObj);
-      break;
-   case GL_TEXTURE_MAX_LEVEL:
-      fxTexInvalidate(ctx, tObj);
-      break;
-
-   default:
-      break;
-   }
-}
-
-void
-fxDDTexDel(GLcontext * ctx, struct gl_texture_object *tObj)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   tfxTexInfo *ti = fxTMGetTexInfo(tObj);
-
-   if (TDFX_DEBUG & VERBOSE_DRIVER) {
-      fprintf(stderr, "fxDDTexDel(%d, %p)\n", tObj->Name, (void *) ti);
-   }
-
-   if (!ti)
-      return;
-
-   fxTMFreeTexture(fxMesa, tObj);
-
-   FREE(ti);
-   tObj->DriverData = NULL;
-
-   /* Free mipmap images and the texture object itself */
-   _mesa_delete_texture_object(ctx, tObj);
-}
-
-
-/**
- * Allocate a new texture object.
- * Called via ctx->Driver.NewTextureObject.
- * Note: this function will be called during context creation to
- * allocate the default texture objects.
- */
-struct gl_texture_object *
-fxDDNewTextureObject( GLcontext *ctx, GLuint name, GLenum target )
-{
-   struct gl_texture_object *obj;
-   obj = _mesa_new_texture_object(ctx, name, target);
-   return obj;
-}
-
-
-/*
- * Return true if texture is resident, false otherwise.
- */
-GLboolean
-fxDDIsTextureResident(GLcontext *ctx, struct gl_texture_object *tObj)
-{
-   tfxTexInfo *ti = fxTMGetTexInfo(tObj);
-   return (ti && ti->isInTM);
-}
-
-
-
-/*
- * Convert a gl_color_table texture palette to Glide's format.
- */
-static GrTexTable_t
-convertPalette(const fxMesaContext fxMesa, FxU32 data[256], const struct gl_color_table *table)
-{
-   const GLubyte *tableUB = (const GLubyte *) table->Table;
-   GLint width = table->Size;
-   FxU32 r, g, b, a;
-   GLint i;
-
-   ASSERT(table->Type == GL_UNSIGNED_BYTE);
-
-   switch (table->_BaseFormat) {
-   case GL_INTENSITY:
-      for (i = 0; i < width; i++) {
-	 r = tableUB[i];
-	 g = tableUB[i];
-	 b = tableUB[i];
-	 a = tableUB[i];
-	 data[i] = (a << 24) | (r << 16) | (g << 8) | b;
-      }
-      return fxMesa->HavePalExt ? GR_TEXTABLE_PALETTE_6666_EXT : GR_TEXTABLE_PALETTE;
-   case GL_LUMINANCE:
-      for (i = 0; i < width; i++) {
-	 r = tableUB[i];
-	 g = tableUB[i];
-	 b = tableUB[i];
-	 a = 255;
-	 data[i] = (a << 24) | (r << 16) | (g << 8) | b;
-      }
-      return GR_TEXTABLE_PALETTE;
-   case GL_ALPHA:
-      for (i = 0; i < width; i++) {
-	 r = g = b = 255;
-	 a = tableUB[i];
-	 data[i] = (a << 24) | (r << 16) | (g << 8) | b;
-      }
-      return fxMesa->HavePalExt ? GR_TEXTABLE_PALETTE_6666_EXT : GR_TEXTABLE_PALETTE;
-   case GL_LUMINANCE_ALPHA:
-      for (i = 0; i < width; i++) {
-	 r = g = b = tableUB[i * 2 + 0];
-	 a = tableUB[i * 2 + 1];
-	 data[i] = (a << 24) | (r << 16) | (g << 8) | b;
-      }
-      return fxMesa->HavePalExt ? GR_TEXTABLE_PALETTE_6666_EXT : GR_TEXTABLE_PALETTE;
-   default:
-   case GL_RGB:
-      for (i = 0; i < width; i++) {
-	 r = tableUB[i * 3 + 0];
-	 g = tableUB[i * 3 + 1];
-	 b = tableUB[i * 3 + 2];
-	 a = 255;
-	 data[i] = (a << 24) | (r << 16) | (g << 8) | b;
-      }
-      return GR_TEXTABLE_PALETTE;
-   case GL_RGBA:
-      for (i = 0; i < width; i++) {
-	 r = tableUB[i * 4 + 0];
-	 g = tableUB[i * 4 + 1];
-	 b = tableUB[i * 4 + 2];
-	 a = tableUB[i * 4 + 3];
-	 data[i] = (a << 24) | (r << 16) | (g << 8) | b;
-      }
-      return fxMesa->HavePalExt ? GR_TEXTABLE_PALETTE_6666_EXT : GR_TEXTABLE_PALETTE;
-   }
-}
-
-
-void
-fxDDTexPalette(GLcontext * ctx, struct gl_texture_object *tObj)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-
-   if (tObj) {
-      /* per-texture palette */
-      tfxTexInfo *ti;
-      if (TDFX_DEBUG & VERBOSE_DRIVER) {
-	 fprintf(stderr, "fxDDTexPalette(%d, %x)\n",
-		 tObj->Name, (GLuint) tObj->DriverData);
-      }
-      /* This might be a proxy texture. */
-      if (!tObj->Palette.Table)
-         return;
-      if (!tObj->DriverData)
-         tObj->DriverData = fxAllocTexObjData(fxMesa);
-      ti = fxTMGetTexInfo(tObj);
-      ti->paltype = convertPalette(fxMesa, ti->palette.data, &tObj->Palette);
-      fxTexInvalidate(ctx, tObj);
-   }
-   else {
-      /* global texture palette */
-      if (TDFX_DEBUG & VERBOSE_DRIVER) {
-	 fprintf(stderr, "fxDDTexPalette(global)\n");
-      }
-      fxMesa->glbPalType = convertPalette(fxMesa, fxMesa->glbPalette.data, &ctx->Texture.Palette);
-      fxMesa->new_state |= FX_NEW_TEXTURING;
-
-      grTexDownloadTable(fxMesa->glbPalType, &(fxMesa->glbPalette));
-   }
-}
-
-
-void
-fxDDTexUseGlbPalette(GLcontext * ctx, GLboolean state)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-
-   if (TDFX_DEBUG & VERBOSE_DRIVER) {
-      fprintf(stderr, "fxDDTexUseGlbPalette(%d)\n", state);
-   }
-
-   fxMesa->haveGlobalPaletteTexture = state;
-   fxMesa->new_state |= FX_NEW_TEXTURING;
-}
-
-
-static int
-logbase2(int n)
-{
-   GLint i = 1;
-   GLint log2 = 0;
-
-   if (n < 0) {
-      return -1;
-   }
-
-   while (n > i) {
-      i *= 2;
-      log2++;
-   }
-   if (i != n) {
-      return -1;
-   }
-   else {
-      return log2;
-   }
-}
-
-
-/* fxTexGetInfo
- * w, h     - source texture width and height
- * lodlevel - Glide lod level token for the larger texture dimension
- * ar       - Glide aspect ratio token
- * sscale   - S scale factor used during triangle setup
- * tscale   - T scale factor used during triangle setup
- * wscale   - OpenGL -> Glide image width scale factor
- * hscale   - OpenGL -> Glide image height scale factor
- */
-int
-fxTexGetInfo(int w, int h, GrLOD_t * lodlevel, GrAspectRatio_t * ar,
-	     float *sscale, float *tscale,
-	     int *wscale, int *hscale)
-{
-   int logw, logh, ws, hs;
-   GrLOD_t l;
-   GrAspectRatio_t aspectratio;
-   float s, t;
-
-   logw = logbase2(w);
-   logh = logbase2(h);
-
-   l = MAX2(logw, logh);
-   aspectratio = logw - logh;
-   ws = hs = 1;
-   s = t = 256.0f;
-
-   /* hardware only allows a maximum aspect ratio of 8x1, so handle
-    * |aspectratio| > 3 by scaling the image and using an 8x1 aspect
-    * ratio
-    */
-   switch (aspectratio) {
-   case 0:
-      break;
-   case 1:
-      t = 128.0f;
-      break;
-   case 2:
-      t = 64.0f;
-      break;
-   case 3:
-      t = 32.0f;
-      break;
-   case -1:
-      s = 128.0f;
-      break;
-   case -2:
-      s = 64.0f;
-      break;
-   case -3:
-      s = 32.0f;
-      break;
-   default:
-      if (aspectratio > 3) {
-         t = 32.0f;
-         hs = 1 << (aspectratio - 3);
-         aspectratio = GR_ASPECT_LOG2_8x1;
-      } else /*if (aspectratio < -3)*/ {
-         s = 32.0f;
-         ws = 1 << (-aspectratio - 3);
-         aspectratio = GR_ASPECT_LOG2_1x8;
-      }
-   }
-
-   if (lodlevel)
-      (*lodlevel) = l;
-
-   if (ar)
-      (*ar) = aspectratio;
-
-   if (sscale)
-      (*sscale) = s;
-
-   if (tscale)
-      (*tscale) = t;
-
-   if (wscale)
-      (*wscale) = ws;
-
-   if (hscale)
-      (*hscale) = hs;
-
-
-   return 1;
-}
-
-static GLboolean
-fxIsTexSupported(GLenum target, GLint internalFormat,
-		 const struct gl_texture_image *image)
-{
-   if ((target != GL_TEXTURE_1D) && (target != GL_TEXTURE_2D))
-      return GL_FALSE;
-
-#if 0
-   if (!fxTexGetInfo(image->Width, image->Height, NULL, NULL, NULL, NULL, NULL, NULL))
-       return GL_FALSE;
-#endif
-
-   if (image->Border > 0)
-      return GL_FALSE;
-
-   return GL_TRUE;
-}
-
-
-/**********************************************************************/
-/**** NEW TEXTURE IMAGE FUNCTIONS                                  ****/
-/**********************************************************************/
-extern void
-fxt1_decode_1 (const void *texture, int width,
-               int i, int j, unsigned char *rgba);
-
-/* Texel-fetch functions for software texturing and glGetTexImage().
- * We should have been able to use some "standard" fetch functions (which
- * may get defined in texutil.c) but we have to account for scaled texture
- * images on tdfx hardware (the 8:1 aspect ratio limit).
- * Hence, we need special functions here.
- */
-
-static void
-fetch_intensity8(const struct gl_texture_image *texImage,
-		 GLint i, GLint j, GLint k, GLchan *rgba)
-{
-   const tfxMipMapLevel *mml = FX_MIPMAP_DATA(texImage);
-   const GLubyte *texel;
-
-   i = i * mml->wScale;
-   j = j * mml->hScale;
-
-   texel = ((GLubyte *) texImage->Data) + j * mml->width + i;
-   rgba[RCOMP] = *texel;
-   rgba[GCOMP] = *texel;
-   rgba[BCOMP] = *texel;
-   rgba[ACOMP] = *texel;
-}
-
-
-static void
-fetch_luminance8(const struct gl_texture_image *texImage,
-		 GLint i, GLint j, GLint k, GLchan *rgba)
-{
-   const tfxMipMapLevel *mml = FX_MIPMAP_DATA(texImage);
-   const GLubyte *texel;
-
-   i = i * mml->wScale;
-   j = j * mml->hScale;
-
-   texel = ((GLubyte *) texImage->Data) + j * mml->width + i;
-   rgba[RCOMP] = *texel;
-   rgba[GCOMP] = *texel;
-   rgba[BCOMP] = *texel;
-   rgba[ACOMP] = 255;
-}
-
-
-static void
-fetch_alpha8(const struct gl_texture_image *texImage,
-	     GLint i, GLint j, GLint k, GLchan *rgba)
-{
-   const tfxMipMapLevel *mml = FX_MIPMAP_DATA(texImage);
-   const GLubyte *texel;
-
-   i = i * mml->wScale;
-   j = j * mml->hScale;
-
-   texel = ((GLubyte *) texImage->Data) + j * mml->width + i;
-   rgba[RCOMP] = 255;
-   rgba[GCOMP] = 255;
-   rgba[BCOMP] = 255;
-   rgba[ACOMP] = *texel;
-}
-
-
-static void
-fetch_index8(const struct gl_texture_image *texImage,
-	     GLint i, GLint j, GLint k, GLchan *indexOut)
-{
-   const tfxMipMapLevel *mml = FX_MIPMAP_DATA(texImage);
-   const GLubyte *texel;
-
-   i = i * mml->wScale;
-   j = j * mml->hScale;
-
-   texel = ((GLubyte *) texImage->Data) + j * mml->width + i;
-   *indexOut = *texel;
-}
-
-
-static void
-fetch_luminance8_alpha8(const struct gl_texture_image *texImage,
-			GLint i, GLint j, GLint k, GLchan *rgba)
-{
-   const tfxMipMapLevel *mml = FX_MIPMAP_DATA(texImage);
-   const GLubyte *texel;
-
-   i = i * mml->wScale;
-   j = j * mml->hScale;
-
-   texel = ((GLubyte *) texImage->Data) + (j * mml->width + i) * 2;
-   rgba[RCOMP] = texel[0];
-   rgba[GCOMP] = texel[0];
-   rgba[BCOMP] = texel[0];
-   rgba[ACOMP] = texel[1];
-}
-
-
-static void
-fetch_r5g6b5(const struct gl_texture_image *texImage,
-	     GLint i, GLint j, GLint k, GLchan *rgba)
-{
-   const tfxMipMapLevel *mml = FX_MIPMAP_DATA(texImage);
-   const GLushort *texel;
-
-   i = i * mml->wScale;
-   j = j * mml->hScale;
-
-   texel = ((GLushort *) texImage->Data) + j * mml->width + i;
-   rgba[RCOMP] = FX_rgb_scale_5[(*texel >> 11) & 0x1F];
-   rgba[GCOMP] = FX_rgb_scale_6[(*texel >>  5) & 0x3F];
-   rgba[BCOMP] = FX_rgb_scale_5[ *texel        & 0x1F];
-   rgba[ACOMP] = 255;
-}
-
-
-static void
-fetch_r4g4b4a4(const struct gl_texture_image *texImage,
-	       GLint i, GLint j, GLint k, GLchan *rgba)
-{
-   const tfxMipMapLevel *mml = FX_MIPMAP_DATA(texImage);
-   const GLushort *texel;
-
-   i = i * mml->wScale;
-   j = j * mml->hScale;
-
-   texel = ((GLushort *) texImage->Data) + j * mml->width + i;
-   rgba[RCOMP] = FX_rgb_scale_4[(*texel >>  8) & 0xF];
-   rgba[GCOMP] = FX_rgb_scale_4[(*texel >>  4) & 0xF];
-   rgba[BCOMP] = FX_rgb_scale_4[ *texel        & 0xF];
-   rgba[ACOMP] = FX_rgb_scale_4[(*texel >> 12) & 0xF];
-}
-
-
-static void
-fetch_r5g5b5a1(const struct gl_texture_image *texImage,
-	       GLint i, GLint j, GLint k, GLchan *rgba)
-{
-   const tfxMipMapLevel *mml = FX_MIPMAP_DATA(texImage);
-   const GLushort *texel;
-
-   i = i * mml->wScale;
-   j = j * mml->hScale;
-
-   texel = ((GLushort *) texImage->Data) + j * mml->width + i;
-   rgba[RCOMP] = FX_rgb_scale_5[(*texel >> 10) & 0x1F];
-   rgba[GCOMP] = FX_rgb_scale_5[(*texel >>  5) & 0x1F];
-   rgba[BCOMP] = FX_rgb_scale_5[ *texel        & 0x1F];
-   rgba[ACOMP] = (*texel >> 15) * 255;
-}
-
-
-static void
-fetch_a8r8g8b8(const struct gl_texture_image *texImage,
-	       GLint i, GLint j, GLint k, GLchan *rgba)
-{
-    const tfxMipMapLevel *mml = FX_MIPMAP_DATA(texImage);
-    const GLuint *texel;
-
-    i = i * mml->wScale;
-    j = j * mml->hScale;
-
-    texel = ((GLuint *) texImage->Data) + j * mml->width + i;
-    rgba[RCOMP] = (((*texel) >> 16) & 0xff);
-    rgba[GCOMP] = (((*texel) >>  8) & 0xff);
-    rgba[BCOMP] = (((*texel)      ) & 0xff);
-    rgba[ACOMP] = (((*texel) >> 24) & 0xff);
-}
-
-
-static void
-fetch_rgb_fxt1(const struct gl_texture_image *texImage,
-	       GLint i, GLint j, GLint k, GLchan *rgba)
-{
-    const tfxMipMapLevel *mml = FX_MIPMAP_DATA(texImage);
-
-    i = i * mml->wScale;
-    j = j * mml->hScale;
-
-    fxt1_decode_1(texImage->Data, mml->width, i, j, rgba);
-    rgba[ACOMP] = 255;
-}
-
-
-static void
-fetch_rgba_fxt1(const struct gl_texture_image *texImage,
-		GLint i, GLint j, GLint k, GLchan *rgba)
-{
-    const tfxMipMapLevel *mml = FX_MIPMAP_DATA(texImage);
-
-    i = i * mml->wScale;
-    j = j * mml->hScale;
-
-    fxt1_decode_1(texImage->Data, mml->width, i, j, rgba);
-}
-
-
-static void
-fetch_rgb_dxt1(const struct gl_texture_image *texImage,
-	       GLint i, GLint j, GLint k, GLchan *rgba)
-{
-    const tfxMipMapLevel *mml = FX_MIPMAP_DATA(texImage);
-
-    i = i * mml->wScale;
-    j = j * mml->hScale;
-
-    _mesa_texformat_rgb_dxt1.FetchTexel2D(texImage, i, j, k, rgba);
-}
-
-
-static void
-fetch_rgba_dxt1(const struct gl_texture_image *texImage,
-		GLint i, GLint j, GLint k, GLchan *rgba)
-{
-    const tfxMipMapLevel *mml = FX_MIPMAP_DATA(texImage);
-
-    i = i * mml->wScale;
-    j = j * mml->hScale;
-
-    _mesa_texformat_rgba_dxt1.FetchTexel2D(texImage, i, j, k, rgba);
-}
-
-
-static void
-fetch_rgba_dxt3(const struct gl_texture_image *texImage,
-		GLint i, GLint j, GLint k, GLchan *rgba)
-{
-    const tfxMipMapLevel *mml = FX_MIPMAP_DATA(texImage);
-
-    i = i * mml->wScale;
-    j = j * mml->hScale;
-
-    _mesa_texformat_rgba_dxt3.FetchTexel2D(texImage, i, j, k, rgba);
-}
-
-
-static void
-fetch_rgba_dxt5(const struct gl_texture_image *texImage,
-		GLint i, GLint j, GLint k, GLchan *rgba)
-{
-    const tfxMipMapLevel *mml = FX_MIPMAP_DATA(texImage);
-
-    i = i * mml->wScale;
-    j = j * mml->hScale;
-
-    _mesa_texformat_rgba_dxt5.FetchTexel2D(texImage, i, j, k, rgba);
-}
-
-
-#if 0 /* break glass in case of emergency */
-static void
-PrintTexture(int w, int h, int c, const GLubyte * data)
-{
-   int i, j;
-   for (i = 0; i < h; i++) {
-      for (j = 0; j < w; j++) {
-	 if (c == 2)
-	    fprintf(stderr, "%02x %02x  ", data[0], data[1]);
-	 else if (c == 3)
-	    fprintf(stderr, "%02x %02x %02x  ", data[0], data[1], data[2]);
-	 data += c;
-      }
-      fprintf(stderr, "\n");
-   }
-}
-#endif
-
-
-gl_format
-fxDDChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
-                         GLenum srcFormat, GLenum srcType )
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   GLboolean allow32bpt = fxMesa->HaveTexFmt;
-
-   if (TDFX_DEBUG & VERBOSE_TEXTURE) {
-      fprintf(stderr, "fxDDChooseTextureFormat(...)\n");
-   }
-
-   switch (internalFormat) {
-   case GL_COMPRESSED_RGB:
-     /* intentional fall through */
-   case 3:
-   case GL_RGB:
-     if ( srcFormat == GL_RGB && srcType == GL_UNSIGNED_SHORT_5_6_5 ) {
-       return MESA_FORMAT_RGB565;
-     }
-     /* intentional fall through */
-   case GL_RGB8:
-   case GL_RGB10:
-   case GL_RGB12:
-   case GL_RGB16:
-      return (allow32bpt) ? MESA_FORMAT_ARGB8888
-                          : MESA_FORMAT_RGB565;
-   case GL_RGBA2:
-   case GL_RGBA4:
-      return MESA_FORMAT_ARGB4444;
-   case GL_COMPRESSED_RGBA:
-     /* intentional fall through */
-   case 4:
-   case GL_RGBA:
-     if ( srcFormat == GL_BGRA ) {
-       if ( srcType == GL_UNSIGNED_INT_8_8_8_8_REV ) {
-         return MESA_FORMAT_ARGB8888;
-       }
-       else if ( srcType == GL_UNSIGNED_SHORT_4_4_4_4_REV ) {
-         return MESA_FORMAT_ARGB4444;
-       }
-       else if ( srcType == GL_UNSIGNED_SHORT_1_5_5_5_REV ) {
-         return MESA_FORMAT_ARGB1555;
-       }
-     }
-     /* intentional fall through */
-   case GL_RGBA8:
-   case GL_RGB10_A2:
-   case GL_RGBA12:
-   case GL_RGBA16:
-      return (allow32bpt) ? MESA_FORMAT_ARGB8888
-                          : MESA_FORMAT_ARGB4444;
-   case GL_INTENSITY:
-   case GL_INTENSITY4:
-   case GL_INTENSITY8:
-   case GL_INTENSITY12:
-   case GL_INTENSITY16:
-   case GL_COMPRESSED_INTENSITY:
-      return MESA_FORMAT_I8;
-   case 1:
-   case GL_LUMINANCE:
-   case GL_LUMINANCE4:
-   case GL_LUMINANCE8:
-   case GL_LUMINANCE12:
-   case GL_LUMINANCE16:
-   case GL_COMPRESSED_LUMINANCE:
-      return MESA_FORMAT_L8;
-   case GL_ALPHA:
-   case GL_ALPHA4:
-   case GL_ALPHA8:
-   case GL_ALPHA12:
-   case GL_ALPHA16:
-   case GL_COMPRESSED_ALPHA:
-      return MESA_FORMAT_A8;
-   case GL_COLOR_INDEX:
-   case GL_COLOR_INDEX1_EXT:
-   case GL_COLOR_INDEX2_EXT:
-   case GL_COLOR_INDEX4_EXT:
-   case GL_COLOR_INDEX8_EXT:
-   case GL_COLOR_INDEX12_EXT:
-   case GL_COLOR_INDEX16_EXT:
-      return MESA_FORMAT_CI8;
-   case 2:
-   case GL_LUMINANCE_ALPHA:
-   case GL_LUMINANCE4_ALPHA4:
-   case GL_LUMINANCE6_ALPHA2:
-   case GL_LUMINANCE8_ALPHA8:
-   case GL_LUMINANCE12_ALPHA4:
-   case GL_LUMINANCE12_ALPHA12:
-   case GL_LUMINANCE16_ALPHA16:
-   case GL_COMPRESSED_LUMINANCE_ALPHA:
-      return MESA_FORMAT_AL88;
-   case GL_R3_G3_B2:
-   case GL_RGB4:
-   case GL_RGB5:
-      return MESA_FORMAT_RGB565;
-   case GL_RGB5_A1:
-      return MESA_FORMAT_ARGB1555;
-   /* GL_EXT_texture_compression_s3tc */
-   /* GL_S3_s3tc */
-   case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
-   case GL_RGB_S3TC:
-   case GL_RGB4_S3TC:
-      return MESA_FORMAT_RGB_DXT1;
-   case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
-      return MESA_FORMAT_RGBA_DXT1;
-   case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
-   case GL_RGBA_S3TC:
-   case GL_RGBA4_S3TC:
-      return MESA_FORMAT_RGBA_DXT3;
-   case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
-      return MESA_FORMAT_RGBA_DXT5;
-   /* GL_3DFX_texture_compression_FXT1 */
-   case GL_COMPRESSED_RGB_FXT1_3DFX:
-      return MESA_FORMAT_RGB_FXT1;
-   case GL_COMPRESSED_RGBA_FXT1_3DFX:
-      return MESA_FORMAT_RGBA_FXT1;
-   default:
-      _mesa_problem(NULL, "unexpected format in fxDDChooseTextureFormat");
-      return MESA_FORMAT_NONE;
-   }
-}
-
-
-static GrTextureFormat_t
-fxGlideFormat(GLint mesaFormat)
-{
-   switch (mesaFormat) {
-   case MESA_FORMAT_I8:
-      return GR_TEXFMT_ALPHA_8;
-   case MESA_FORMAT_A8:
-      return GR_TEXFMT_ALPHA_8;
-   case MESA_FORMAT_L8:
-      return GR_TEXFMT_INTENSITY_8;
-   case MESA_FORMAT_CI8:
-      return GR_TEXFMT_P_8;
-   case MESA_FORMAT_AL88:
-      return GR_TEXFMT_ALPHA_INTENSITY_88;
-   case MESA_FORMAT_RGB565:
-      return GR_TEXFMT_RGB_565;
-   case MESA_FORMAT_ARGB4444:
-      return GR_TEXFMT_ARGB_4444;
-   case MESA_FORMAT_ARGB1555:
-      return GR_TEXFMT_ARGB_1555;
-   case MESA_FORMAT_ARGB8888:
-      return GR_TEXFMT_ARGB_8888;
-   case MESA_FORMAT_RGB_FXT1:
-   case MESA_FORMAT_RGBA_FXT1:
-     return GR_TEXFMT_ARGB_CMP_FXT1;
-   case MESA_FORMAT_RGB_DXT1:
-   case MESA_FORMAT_RGBA_DXT1:
-     return GR_TEXFMT_ARGB_CMP_DXT1;
-   case MESA_FORMAT_RGBA_DXT3:
-     return GR_TEXFMT_ARGB_CMP_DXT3;
-   case MESA_FORMAT_RGBA_DXT5:
-     return GR_TEXFMT_ARGB_CMP_DXT5;
-   default:
-      _mesa_problem(NULL, "Unexpected format in fxGlideFormat");
-      return 0;
-   }
-}
-
-
-static FetchTexelFuncC
-fxFetchFunction(GLint mesaFormat)
-{
-   switch (mesaFormat) {
-   case MESA_FORMAT_I8:
-      return &fetch_intensity8;
-   case MESA_FORMAT_A8:
-      return &fetch_alpha8;
-   case MESA_FORMAT_L8:
-      return &fetch_luminance8;
-   case MESA_FORMAT_CI8:
-      return &fetch_index8;
-   case MESA_FORMAT_AL88:
-      return &fetch_luminance8_alpha8;
-   case MESA_FORMAT_RGB565:
-      return &fetch_r5g6b5;
-   case MESA_FORMAT_ARGB4444:
-      return &fetch_r4g4b4a4;
-   case MESA_FORMAT_ARGB1555:
-      return &fetch_r5g5b5a1;
-   case MESA_FORMAT_ARGB8888:
-      return &fetch_a8r8g8b8;
-   case MESA_FORMAT_RGB_FXT1:
-      return &fetch_rgb_fxt1;
-   case MESA_FORMAT_RGBA_FXT1:
-      return &fetch_rgba_fxt1;
-   case MESA_FORMAT_RGB_DXT1:
-      return &fetch_rgb_dxt1;
-   case MESA_FORMAT_RGBA_DXT1:
-      return &fetch_rgba_dxt1;
-   case MESA_FORMAT_RGBA_DXT3:
-      return &fetch_rgba_dxt3;
-   case MESA_FORMAT_RGBA_DXT5:
-      return &fetch_rgba_dxt5;
-   default:
-      _mesa_problem(NULL, "Unexpected format in fxFetchFunction");
-      return NULL;
-   }
-}
-
-
-static GLboolean
-adjust2DRatio (GLcontext *ctx,
-	       GLint xoffset, GLint yoffset,
-	       GLint width, GLint height,
-	       GLenum format, GLenum type, const GLvoid *pixels,
-	       const struct gl_pixelstore_attrib *packing,
-	       tfxMipMapLevel *mml,
-	       struct gl_texture_image *texImage,
-	       GLint texelBytes,
-	       GLint dstRowStride)
-{
-   const GLint newWidth = width * mml->wScale;
-   const GLint newHeight = height * mml->hScale;
-   GLvoid *tempImage;
-
-   if (!_mesa_is_format_compressed(texImage->TexFormat)) {
-      GLubyte *destAddr;
-
-      tempImage = MALLOC(width * height * texelBytes);
-      if (!tempImage) {
-         return GL_FALSE;
-      }
-
-      _mesa_texstore(ctx, 2, texImage->_BaseFormat,
-                     texImage->TexFormat, tempImage,
-                     0, 0, 0, /* dstX/Y/Zoffset */
-                     width * texelBytes, /* dstRowStride */
-                     0, /* dstImageStride */
-                     width, height, 1,
-                     format, type, pixels, packing);
-
-      /* now rescale */
-      /* compute address of dest subimage within the overal tex image */
-      destAddr = (GLubyte *) texImage->Data
-         + (yoffset * mml->hScale * mml->width
-            + xoffset * mml->wScale) * texelBytes;
-
-      _mesa_rescale_teximage2d(texelBytes,
-                               width,
-                               dstRowStride, /* dst stride */
-                               width, height,
-                               newWidth, newHeight,
-                               tempImage, destAddr);
-   } else {
-      const GLint rawBytes = 4;
-      GLvoid *rawImage = MALLOC(width * height * rawBytes);
-
-      if (!rawImage) {
-         return GL_FALSE;
-      }
-      tempImage = MALLOC(newWidth * newHeight * rawBytes);
-      if (!tempImage) {
-         return GL_FALSE;
-      }
-      /* unpack image, apply transfer ops and store in rawImage */
-      _mesa_texstore(ctx, 2, GL_RGBA,
-                     &_mesa_texformat_rgba8888_rev, rawImage,
-                     0, 0, 0, /* dstX/Y/Zoffset */
-                     width * rawBytes, /* dstRowStride */
-                     0, /* dstImageStride */
-                     width, height, 1,
-                     format, type, pixels, packing);
-      _mesa_rescale_teximage2d(rawBytes,
-                               width,
-                               newWidth * rawBytes, /* dst stride */
-                               width, height, /* src */
-                               newWidth, newHeight, /* dst */
-                               rawImage /*src*/, tempImage /*dst*/ );
-      _mesa_texstore(ctx, 2, texImage->_BaseFormat,
-                     texImage->TexFormat, texImage->Data,
-                     xoffset * mml->wScale, yoffset * mml->hScale, 0, /* dstX/Y/Zoffset */
-                     dstRowStride,
-                     0, /* dstImageStride */
-                     newWidth, newHeight, 1,
-                     GL_RGBA, CHAN_TYPE, tempImage, &ctx->DefaultPacking);
-      FREE(rawImage);
-   }
-
-   FREE(tempImage);
-
-   return GL_TRUE;
-}
-
-
-void
-fxDDTexImage2D(GLcontext * ctx, GLenum target, GLint level,
-	       GLint internalFormat, GLint width, GLint height, GLint border,
-	       GLenum format, GLenum type, const GLvoid * pixels,
-	       const struct gl_pixelstore_attrib *packing,
-	       struct gl_texture_object *texObj,
-	       struct gl_texture_image *texImage)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   tfxTexInfo *ti;
-   tfxMipMapLevel *mml;
-   GLint texelBytes, dstRowStride;
-
-   if (TDFX_DEBUG & VERBOSE_TEXTURE) {
-       fprintf(stderr, "fxDDTexImage2D: id=%d int 0x%x  format 0x%x  type 0x%x  %dx%d\n",
-                       texObj->Name, texImage->InternalFormat, format, type,
-                       texImage->Width, texImage->Height);
-   }
-
-   if (!fxIsTexSupported(target, internalFormat, texImage)) {
-      _mesa_problem(NULL, "fx Driver: unsupported texture in fxDDTexImg()\n");
-      return;
-   }
-
-   if (!texObj->DriverData) {
-      texObj->DriverData = fxAllocTexObjData(fxMesa);
-      if (!texObj->DriverData) {
-         _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage2D");
-         return;
-      }
-   }
-   ti = fxTMGetTexInfo(texObj);
-
-   if (!texImage->DriverData) {
-      texImage->DriverData = CALLOC(sizeof(tfxMipMapLevel));
-      if (!texImage->DriverData) {
-         _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage2D");
-         return;
-      }
-   }
-   mml = FX_MIPMAP_DATA(texImage);
-
-   fxTexGetInfo(width, height, NULL, NULL, NULL, NULL,
-		&mml->wScale, &mml->hScale);
-
-   mml->width = width * mml->wScale;
-   mml->height = height * mml->hScale;
-
-#if FX_COMPRESS_S3TC_AS_FXT1_HACK
-   /* [koolsmoky] substitute FXT1 for DXTn and Legacy S3TC */
-   if (!ctx->Mesa_DXTn && _mesa_is_format_compressed(texImage->TexFormat)) {
-     switch (internalFormat) {
-     case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
-     case GL_RGB_S3TC:
-     case GL_RGB4_S3TC:
-       internalFormat = GL_COMPRESSED_RGB_FXT1_3DFX;
-       break;
-     case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
-     case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
-     case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
-     case GL_RGBA_S3TC:
-     case GL_RGBA4_S3TC:
-       internalFormat = GL_COMPRESSED_RGBA_FXT1_3DFX;
-     }
-     texImage->InternalFormat = internalFormat;
-   }
-#endif
-#if FX_TC_NAPALM
-   if (fxMesa->type >= GR_SSTTYPE_Voodoo4) {
-      GLenum texNapalm = 0;
-      if (internalFormat == GL_COMPRESSED_RGB) {
-         texNapalm = GL_COMPRESSED_RGB_FXT1_3DFX;
-      } else if (internalFormat == GL_COMPRESSED_RGBA) {
-         texNapalm = GL_COMPRESSED_RGBA_FXT1_3DFX;
-      }
-      if (texNapalm) {
-         texImage->InternalFormat = internalFormat = texNapalm;
-      }
-   }
-#endif
-
-   texelBytes = _mesa_get_format_bytes(texImage->TexFormat->MesaFormat);
-   /*if (!fxMesa->HaveTexFmt) assert(texelBytes == 1 || texelBytes == 2);*/
-
-   mml->glideFormat = fxGlideFormat(texImage->TexFormat->MesaFormat);
-
-   /* allocate mipmap buffer */
-   assert(!texImage->Data);
-   if (_mesa_is_format_compressed(texImage->TexFormat)) {
-      texImage->CompressedSize = _mesa_format_image_size(texImage->TexFormat,
-                                                         mml->width,
-                                                         mml->height, 1);
-      dstRowStride = _mesa_format_row_stride(texImage->TexFormat, mml->width);
-      texImage->Data = malloc(texImage->CompressedSize);
-   } else {
-      dstRowStride = mml->width * texelBytes;
-      texImage->Data = malloc(mml->width * mml->height * texelBytes);
-   }
-   if (!texImage->Data) {
-      _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage2D");
-      return;
-   }
-
-   if (pixels != NULL) {
-      if (mml->wScale != 1 || mml->hScale != 1) {
-         /* rescale image to overcome 1:8 aspect limitation */
-         if (!adjust2DRatio(ctx,
-			    0, 0,
-			    width, height,
-			    format, type, pixels,
-			    packing,
-			    mml,
-			    texImage,
-			    texelBytes,
-			    dstRowStride)
-            ) {
-            _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage2D");
-            return;
-         }
-      }
-      else {
-         /* no rescaling needed */
-         /* unpack image, apply transfer ops and store in texImage->Data */
-         _mesa_texstore(ctx, 2, texImage->_BaseFormat,
-                        texImage->TexFormat, texImage->Data,
-                        0, 0, 0, /* dstX/Y/Zoffset */
-                        dstRowStride,
-                        0, /* dstImageStride */
-                        width, height, 1,
-                        format, type, pixels, packing);
-      }
-
-      /* GL_SGIS_generate_mipmap */
-      if (level == texObj->BaseLevel && texObj->GenerateMipmap) {
-         GLint mipWidth, mipHeight;
-         tfxMipMapLevel *mip;
-         struct gl_texture_image *mipImage;
-         const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
-         const GLint maxLevels = _mesa_max_texture_levels(ctx, texObj->Target);
-
-         assert(!_mesa_is_format_compressed(texImage->TexFormat));
-
-         while (level < texObj->MaxLevel && level < maxLevels - 1) {
-            mipWidth = width / 2;
-            if (!mipWidth) {
-               mipWidth = 1;
-            }
-            mipHeight = height / 2;
-            if (!mipHeight) {
-               mipHeight = 1;
-            }
-            if ((mipWidth == width) && (mipHeight == height)) {
-               break;
-            }
-            _mesa_TexImage2D(target, ++level, internalFormat,
-                             mipWidth, mipHeight, border,
-                             format, type,
-                             NULL);
-            mipImage = _mesa_select_tex_image(ctx, texUnit, target, level);
-            mip = FX_MIPMAP_DATA(mipImage);
-            _mesa_halve2x2_teximage2d(ctx,
-                                      texImage,
-                                      texelBytes,
-                                      mml->width, mml->height,
-                                      texImage->Data, mipImage->Data);
-            texImage = mipImage;
-            mml = mip;
-            width = mipWidth;
-            height = mipHeight;
-         }
-      }
-   }
-
-   ti->info.format = mml->glideFormat;
-   texImage->FetchTexelc = fxFetchFunction(texImage->TexFormat->MesaFormat);
-
-   fxTexInvalidate(ctx, texObj);
-}
-
-
-void
-fxDDTexSubImage2D(GLcontext * ctx, GLenum target, GLint level,
-		  GLint xoffset, GLint yoffset,
-		  GLsizei width, GLsizei height,
-		  GLenum format, GLenum type, const GLvoid * pixels,
-		  const struct gl_pixelstore_attrib *packing,
-		  struct gl_texture_object *texObj,
-		  struct gl_texture_image *texImage)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   tfxTexInfo *ti;
-   tfxMipMapLevel *mml;
-   GLint texelBytes, dstRowStride;
-
-   if (TDFX_DEBUG & VERBOSE_TEXTURE) {
-       fprintf(stderr, "fxDDTexSubImage2D: id=%d\n", texObj->Name);
-   }
-
-   if (!texObj->DriverData) {
-      _mesa_problem(ctx, "problem in fxDDTexSubImage2D");
-      return;
-   }
-
-   ti = fxTMGetTexInfo(texObj);
-   assert(ti);
-   mml = FX_MIPMAP_DATA(texImage);
-   assert(mml);
-
-   assert(texImage->Data);	/* must have an existing texture image! */
-   assert(texImage->_BaseFormat);
-
-   texelBytes = _mesa_get_format_bytes(texImage->TexFormat->MesaFormat);
-   if (_mesa_is_format_compressed(texImage->TexFormat)) {
-      dstRowStride = _mesa_format_row_stride(texImage->TexFormat, mml->width);
-   } else {
-      dstRowStride = mml->width * texelBytes;
-   }
-
-   if (mml->wScale != 1 || mml->hScale != 1) {
-      /* need to rescale subimage to match mipmap level's rescale factors */
-      if (!adjust2DRatio(ctx,
-			 xoffset, yoffset,
-			 width, height,
-			 format, type, pixels,
-			 packing,
-			 mml,
-			 texImage,
-			 texelBytes,
-			 dstRowStride)
-         ) {
-         _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexSubImage2D");
-         return;
-      }
-   }
-   else {
-      /* no rescaling needed */
-      _mesa_texstore(ctx, 2, texImage->_BaseFormat,
-                     texImage->TexFormat, (GLubyte *) texImage->Data,
-                     xoffset, yoffset, 0, /* dstX/Y/Zoffset */
-                     dstRowStride,
-                     0, /* dstImageStride */
-                     width, height, 1,
-                     format, type, pixels, packing);
-   }
-
-   /* GL_SGIS_generate_mipmap */
-   if (level == texObj->BaseLevel && texObj->GenerateMipmap) {
-      GLint mipWidth, mipHeight;
-      tfxMipMapLevel *mip;
-      struct gl_texture_image *mipImage;
-      const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
-      const GLint maxLevels = _mesa_max_texture_levels(ctx, texObj->Target);
-
-      assert(!_mesa_is_format_compressed(texImage->TexFormat));
-
-      width = texImage->Width;
-      height = texImage->Height;
-      while (level < texObj->MaxLevel && level < maxLevels - 1) {
-         mipWidth = width / 2;
-         if (!mipWidth) {
-            mipWidth = 1;
-         }
-         mipHeight = height / 2;
-         if (!mipHeight) {
-            mipHeight = 1;
-         }
-         if ((mipWidth == width) && (mipHeight == height)) {
-            break;
-         }
-         ++level;
-         mipImage = _mesa_select_tex_image(ctx, texUnit, target, level);
-         mip = FX_MIPMAP_DATA(mipImage);
-         _mesa_halve2x2_teximage2d(ctx,
-                                   texImage,
-                                   texelBytes,
-                                   mml->width, mml->height,
-                                   texImage->Data, mipImage->Data);
-         texImage = mipImage;
-         mml = mip;
-         width = mipWidth;
-         height = mipHeight;
-      }
-   }
-
-   if (ti->validated && ti->isInTM && !texObj->GenerateMipmap)
-      fxTMReloadMipMapLevel(fxMesa, texObj, level);
-   else
-      fxTexInvalidate(ctx, texObj);
-}
-
-
-void
-fxDDCompressedTexImage2D (GLcontext *ctx, GLenum target,
-                          GLint level, GLint internalFormat,
-                          GLsizei width, GLsizei height, GLint border,
-                          GLsizei imageSize, const GLvoid *data,
-                          struct gl_texture_object *texObj,
-                          struct gl_texture_image *texImage)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   tfxTexInfo *ti;
-   tfxMipMapLevel *mml;
-
-   if (TDFX_DEBUG & VERBOSE_TEXTURE) {
-       fprintf(stderr, "fxDDCompressedTexImage2D: id=%d int 0x%x  %dx%d\n",
-                       texObj->Name, internalFormat,
-                       width, height);
-   }
-
-   assert(_mesa_is_format_compressed(texImage->TexFormat));
-
-   if (!fxIsTexSupported(target, internalFormat, texImage)) {
-      _mesa_problem(NULL, "fx Driver: unsupported texture in fxDDCompressedTexImg()\n");
-      return;
-   }
-
-   if (!texObj->DriverData) {
-      texObj->DriverData = fxAllocTexObjData(fxMesa);
-      if (!texObj->DriverData) {
-         _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCompressedTexImage2D");
-         return;
-      }
-   }
-   ti = fxTMGetTexInfo(texObj);
-
-   if (!texImage->DriverData) {
-      texImage->DriverData = CALLOC(sizeof(tfxMipMapLevel));
-      if (!texImage->DriverData) {
-         _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCompressedTexImage2D");
-         return;
-      }
-   }
-   mml = FX_MIPMAP_DATA(texImage);
-
-   fxTexGetInfo(width, height, NULL, NULL, NULL, NULL,
-		&mml->wScale, &mml->hScale);
-
-   mml->width = width * mml->wScale;
-   mml->height = height * mml->hScale;
-
-   /* Determine the appropriate Glide texel format,
-    * given the user's internal texture format hint.
-    */
-   mml->glideFormat = fxGlideFormat(texImage->TexFormat->MesaFormat);
-
-   /* allocate new storage for texture image, if needed */
-   if (!texImage->Data) {
-      texImage->CompressedSize = _mesa_format_image_size(texImage->TexFormat,
-                                                         mml->width,
-                                                         mml->height, 1);
-      texImage->Data = malloc(texImage->CompressedSize);
-      if (!texImage->Data) {
-         _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCompressedTexImage2D");
-         return;
-      }
-   }
-
-   /* save the texture data */
-   if (mml->wScale != 1 || mml->hScale != 1) {
-      /* [dBorca] Hack alert:
-       * now we're screwed. We can't decompress,
-       * unless we do it in HW (via textureBuffer).
-       * We still have some chances:
-       * 1) we got FXT1 textures - we CAN decompress, rescale for
-       *    aspectratio, then compress back.
-       * 2) there is a chance that MIN("s", "t") won't be overflowed.
-       *    Thus, we don't care about textureclamp and we could lower
-       *    MIN("uscale", "vscale") below 32. We still have to have
-       *    our data aligned inside a 8:1 rectangle.
-       * 3) just in case if MIN("s", "t") gets overflowed with GL_REPEAT,
-       *    we replicate the data over the padded area.
-       * For now, we take 2) + 3) but texelfetchers will be wrong!
-       */
-      GLuint srcRowStride = _mesa_format_row_stride(texImage->TexFormat, width);
-
-      GLuint destRowStride = _mesa_format_row_stride(texImage->TexFormat,
-                                                     mml->width);
-
-      _mesa_upscale_teximage2d(srcRowStride, (height+3) / 4,
-                               destRowStride, (mml->height+3) / 4,
-                               1, data, srcRowStride,
-                               texImage->Data);
-      ti->padded = GL_TRUE;
-   } else {
-      memcpy(texImage->Data, data, texImage->CompressedSize);
-   }
-
-   ti->info.format = mml->glideFormat;
-   texImage->FetchTexelc = fxFetchFunction(texImage->TexFormat->MesaFormat);
-
-   /* GL_SGIS_generate_mipmap */
-   if (level == texObj->BaseLevel && texObj->GenerateMipmap) {
-      assert(!_mesa_is_format_compressed(texImage->TexFormat));
-   }
-
-   fxTexInvalidate(ctx, texObj);
-}
-
-
-void
-fxDDCompressedTexSubImage2D( GLcontext *ctx, GLenum target,
-                             GLint level, GLint xoffset,
-                             GLint yoffset, GLsizei width,
-                             GLint height, GLenum format,
-                             GLsizei imageSize, const GLvoid *data,
-                             struct gl_texture_object *texObj,
-                             struct gl_texture_image *texImage )
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   tfxTexInfo *ti;
-   tfxMipMapLevel *mml;
-   GLint destRowStride, srcRowStride;
-   GLint i, rows;
-   GLubyte *dest;
-
-   if (TDFX_DEBUG & VERBOSE_TEXTURE) {
-       fprintf(stderr, "fxDDCompressedTexSubImage2D: id=%d\n", texObj->Name);
-   }
-
-   ti = fxTMGetTexInfo(texObj);
-   assert(ti);
-   mml = FX_MIPMAP_DATA(texImage);
-   assert(mml);
-
-   srcRowStride = _mesa_format_row_stride(texImage->TexFormat, width);
-
-   destRowStride = _mesa_format_row_stride(texImage->TexFormat, mml->width);
-   dest = _mesa_compressed_image_address(xoffset, yoffset, 0,
-                                         texImage->InternalFormat,
-                                         mml->width,
-                              (GLubyte*) texImage->Data);
-
-   rows = height / 4; /* hardcoded 4, but works for FXT1/DXTC */
-
-   for (i = 0; i < rows; i++) {
-      memcpy(dest, data, srcRowStride);
-      dest += destRowStride;
-      data = (GLvoid *)((GLuint)data + (GLuint)srcRowStride);
-   }
-
-   /* [dBorca] Hack alert:
-    * see fxDDCompressedTexImage2D for caveats
-    */
-   if (mml->wScale != 1 || mml->hScale != 1) {
-      srcRowStride = _mesa_format_row_stride(texImage->TexFormat, texImage->Width);
-
-      destRowStride = _mesa_format_row_stride(texImage->TexFormat, mml->width);
-      _mesa_upscale_teximage2d(srcRowStride, texImage->Height / 4,
-                               destRowStride, mml->height / 4,
-                               1, texImage->Data, destRowStride,
-                               texImage->Data);
-   }
-
-   /* GL_SGIS_generate_mipmap */
-   if (level == texObj->BaseLevel && texObj->GenerateMipmap) {
-      assert(!_mesa_is_format_compressed(texImage->TexFormat));
-   }
-
-   if (ti->validated && ti->isInTM)
-      fxTMReloadMipMapLevel(fxMesa, texObj, level);
-   else
-      fxTexInvalidate(ctx, texObj);
-}
-
-
-void
-fxDDTexImage1D (GLcontext *ctx, GLenum target, GLint level,
-	        GLint internalFormat, GLint width, GLint border,
-	        GLenum format, GLenum type, const GLvoid *pixels,
-	        const struct gl_pixelstore_attrib *packing,
-	        struct gl_texture_object *texObj,
-	        struct gl_texture_image *texImage)
-{
- fxDDTexImage2D(ctx, target, level,
-	        internalFormat, width, 1, border,
-	        format, type, pixels,
-	        packing,
-	        texObj,
-	        texImage);
-}
-
-
-void
-fxDDTexSubImage1D(GLcontext * ctx, GLenum target, GLint level,
-		  GLint xoffset,
-		  GLsizei width,
-		  GLenum format, GLenum type, const GLvoid * pixels,
-		  const struct gl_pixelstore_attrib *packing,
-		  struct gl_texture_object *texObj,
-		  struct gl_texture_image *texImage)
-{
- fxDDTexSubImage2D(ctx, target, level,
-		   xoffset, 0, width, 1,
-		   format, type, pixels,
-		   packing,
-		   texObj,
-		   texImage);
-}
-
-
-GLboolean
-fxDDTestProxyTexImage (GLcontext *ctx, GLenum target,
-                       GLint level, GLint internalFormat,
-                       GLenum format, GLenum type,
-                       GLint width, GLint height,
-                       GLint depth, GLint border)
-{
- /* XXX todo - maybe through fxTexValidate() */
- return _mesa_test_proxy_teximage(ctx, target,
-                                  level, internalFormat,
-                                  format, type,
-                                  width, height,
-                                  depth, border);
-}
-
-
-#else /* FX */
-
-/*
- * Need this to provide at least one external definition.
- */
-
-extern int gl_fx_dummy_function_ddtex(void);
-int
-gl_fx_dummy_function_ddtex(void)
-{
-   return 0;
-}
-
-#endif /* FX */
diff --git a/src/mesa/drivers/glide/fxdrv.h b/src/mesa/drivers/glide/fxdrv.h
deleted file mode 100644
index bee10de2f4..0000000000
--- a/src/mesa/drivers/glide/fxdrv.h
+++ /dev/null
@@ -1,773 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  4.0
- *
- * Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/* Authors:
- *    David Bucciarelli
- *    Brian Paul
- *    Daryll Strauss
- *    Keith Whitwell
- *    Daniel Borca
- *    Hiroshi Morii
- */
-
-/* fxsetup.c - 3Dfx VooDoo rendering mode setup functions */
-
-
-#ifndef FXDRV_H
-#define FXDRV_H
-
-/* If you comment out this define, a variable takes its place, letting
- * you turn debugging on/off from the debugger.
- */
-
-#include "glheader.h"
-
-
-#if defined(__linux__)
-#include <signal.h>
-#endif
-
-#include "main/context.h"
-#include "main/imports.h"
-#include "main/macros.h"
-#include "main/matrix.h"
-#include "main/mtypes.h"
-
-#include "GL/fxmesa.h"
-#include "fxglidew.h"
-
-#include "math/m_vector.h"
-
-
-#define COPY_FLOAT(dst, src)    (dst) = (src)
-
-/* Define some shorter names for these things.
- */
-#define XCOORD   GR_VERTEX_X_OFFSET
-#define YCOORD   GR_VERTEX_Y_OFFSET
-#define ZCOORD   GR_VERTEX_OOZ_OFFSET
-#define OOWCOORD GR_VERTEX_OOW_OFFSET
-
-#define S0COORD  GR_VERTEX_SOW_TMU0_OFFSET
-#define T0COORD  GR_VERTEX_TOW_TMU0_OFFSET
-#define S1COORD  GR_VERTEX_SOW_TMU1_OFFSET
-#define T1COORD  GR_VERTEX_TOW_TMU1_OFFSET
-
-
-
-#ifdef __i386__
-#define FXCOLOR4( c )  (* (int *)c)
-#else
-#define FXCOLOR4( c ) (      \
-  ( ((unsigned int)(c[3]))<<24 ) | \
-  ( ((unsigned int)(c[2]))<<16 ) | \
-  ( ((unsigned int)(c[1]))<<8 )  | \
-  (  (unsigned int)(c[0])) )
-#endif
-
-#define TDFXPACKCOLOR1555( r, g, b, a )					   \
-   ((((r) & 0xf8) << 7) | (((g) & 0xf8) << 2) | (((b) & 0xf8) >> 3) |	   \
-    ((a) ? 0x8000 : 0))
-#define TDFXPACKCOLOR565( r, g, b )					   \
-   ((((r) & 0xf8) << 8) | (((g) & 0xfc) << 3) | (((b) & 0xf8) >> 3))
-#define TDFXPACKCOLOR8888( r, g, b, a )					   \
-   (((a) << 24) | ((r) << 16) | ((g) << 8) | (b))
-
-
-
-/* fastpath flags first
- */
-#define SETUP_TMU0 0x1
-#define SETUP_TMU1 0x2
-#define SETUP_RGBA 0x4
-#define SETUP_SNAP 0x8
-#define SETUP_XYZW 0x10
-#define SETUP_PTEX 0x20
-#define SETUP_PSIZ 0x40
-#define SETUP_SPEC 0x80
-#define SETUP_FOGC 0x100
-#define MAX_SETUP  0x200
-
-
-#define FX_NUM_TMU 2
-
-#define FX_TMU0      GR_TMU0
-#define FX_TMU1      GR_TMU1
-#define FX_TMU_SPLIT 98
-#define FX_TMU_BOTH  99
-#define FX_TMU_NONE  100
-
-/* Used for fxMesa->lastUnitsMode */
-
-#define FX_UM_NONE                  0x00000000
-
-#define FX_UM_E0_REPLACE            0x00000001
-#define FX_UM_E0_MODULATE           0x00000002
-#define FX_UM_E0_DECAL              0x00000004
-#define FX_UM_E0_BLEND              0x00000008
-#define FX_UM_E0_ADD		    0x00000010
-
-#define FX_UM_E1_REPLACE            0x00000020
-#define FX_UM_E1_MODULATE           0x00000040
-#define FX_UM_E1_DECAL              0x00000080
-#define FX_UM_E1_BLEND              0x00000100
-#define FX_UM_E1_ADD		    0x00000200
-
-#define FX_UM_E_ENVMODE             0x000003ff
-
-#define FX_UM_E0_ALPHA              0x00001000
-#define FX_UM_E0_LUMINANCE          0x00002000
-#define FX_UM_E0_LUMINANCE_ALPHA    0x00004000
-#define FX_UM_E0_INTENSITY          0x00008000
-#define FX_UM_E0_RGB                0x00010000
-#define FX_UM_E0_RGBA               0x00020000
-
-#define FX_UM_E1_ALPHA              0x00040000
-#define FX_UM_E1_LUMINANCE          0x00080000
-#define FX_UM_E1_LUMINANCE_ALPHA    0x00100000
-#define FX_UM_E1_INTENSITY          0x00200000
-#define FX_UM_E1_RGB                0x00400000
-#define FX_UM_E1_RGBA               0x00800000
-
-#define FX_UM_E_IFMT                0x00fff000
-
-#define FX_UM_COLOR_ITERATED        0x01000000
-#define FX_UM_COLOR_CONSTANT        0x02000000
-#define FX_UM_ALPHA_ITERATED        0x04000000
-#define FX_UM_ALPHA_CONSTANT        0x08000000
-
-
-/* for Voodoo3/Banshee's grColorCombine() and grAlphaCombine() */
-struct tdfx_combine {
-   GrCombineFunction_t Function;	/* Combine function */
-   GrCombineFactor_t Factor;		/* Combine scale factor */
-   GrCombineLocal_t Local;		/* Local combine source */
-   GrCombineOther_t Other;		/* Other combine source */
-   FxBool Invert;			/* Combine result inversion flag */
-};
-
-/* for Voodoo3's grTexCombine() */
-struct tdfx_texcombine {
-   GrCombineFunction_t FunctionRGB;
-   GrCombineFactor_t FactorRGB;
-   GrCombineFunction_t FunctionAlpha;
-   GrCombineFactor_t FactorAlpha;
-   FxBool InvertRGB;
-   FxBool InvertAlpha;
-};
-
-
-/* for Voodoo5's grColorCombineExt() */
-struct tdfx_combine_color_ext {
-   GrCCUColor_t SourceA;
-   GrCombineMode_t ModeA;
-   GrCCUColor_t SourceB;
-   GrCombineMode_t ModeB;
-   GrCCUColor_t SourceC;
-   FxBool InvertC;
-   GrCCUColor_t SourceD;
-   FxBool InvertD;
-   FxU32 Shift;
-   FxBool Invert;
-};
-
-/* for Voodoo5's grAlphaCombineExt() */
-struct tdfx_combine_alpha_ext {
-   GrACUColor_t SourceA;
-   GrCombineMode_t ModeA;
-   GrACUColor_t SourceB;
-   GrCombineMode_t ModeB;
-   GrACUColor_t SourceC;
-   FxBool InvertC;
-   GrACUColor_t SourceD;
-   FxBool InvertD;
-   FxU32 Shift;
-   FxBool Invert;
-};
-
-/* for Voodoo5's grTexColorCombineExt() */
-struct tdfx_color_texenv {
-   GrTCCUColor_t SourceA;
-   GrCombineMode_t ModeA;
-   GrTCCUColor_t SourceB;
-   GrCombineMode_t ModeB;
-   GrTCCUColor_t SourceC;
-   FxBool InvertC;
-   GrTCCUColor_t SourceD;
-   FxBool InvertD;
-   FxU32 Shift;
-   FxBool Invert;
-};
-
-/* for Voodoo5's grTexAlphaCombineExt() */
-struct tdfx_alpha_texenv {
-   GrTACUColor_t SourceA;
-   GrCombineMode_t ModeA;
-   GrTACUColor_t SourceB;
-   GrCombineMode_t ModeB;
-   GrTACUColor_t SourceC;
-   FxBool InvertC;
-   GrTCCUColor_t SourceD;
-   FxBool InvertD;
-   FxU32 Shift;
-   FxBool Invert;
-};
-
-/* Voodoo5's texture combine environment */
-struct tdfx_texcombine_ext {
-   struct tdfx_alpha_texenv Alpha;
-   struct tdfx_color_texenv Color;
-   GrColor_t EnvColor;
-};
-
-
-/*
-  Memory range from startAddr to endAddr-1
-*/
-typedef struct MemRange_t
-{
-   struct MemRange_t *next;
-   FxU32 startAddr, endAddr;
-}
-MemRange;
-
-typedef struct
-{
-   GLsizei width, height;	/* image size */
-   GLint wScale, hScale;	/* image scale factor */
-   GrTextureFormat_t glideFormat;	/* Glide image format */
-}
-tfxMipMapLevel;
-
-/*
- * TDFX-specific texture object data.  This hangs off of the
- * struct gl_texture_object DriverData pointer.
- */
-typedef struct tfxTexInfo_t
-{
-   struct tfxTexInfo_t *next;
-   struct gl_texture_object *tObj;
-
-   GLuint lastTimeUsed;
-   FxU32 whichTMU;
-   GLboolean isInTM;
-
-   MemRange *tm[FX_NUM_TMU];
-
-   GLint minLevel, maxLevel;
-   GLint baseLevelInternalFormat;
-
-   GrTexInfo info;
-
-   GrTextureFilterMode_t minFilt;
-   GrTextureFilterMode_t maxFilt;
-   FxBool LODblend;
-
-   GrTextureClampMode_t sClamp;
-   GrTextureClampMode_t tClamp;
-
-   GrMipMapMode_t mmMode;
-
-   GLfloat sScale, tScale;
-
-   GrTexTable_t paltype;
-   GuTexPalette palette;
-
-   GLboolean fixedPalette;
-   GLboolean validated;
-
-   GLboolean padded;
-}
-tfxTexInfo;
-
-typedef struct
-{
-   GLuint swapBuffer;
-   GLuint reqTexUpload;
-   GLuint texUpload;
-   GLuint memTexUpload;
-}
-tfxStats;
-
-
-
-typedef struct
-{
-   /* Alpha test */
-
-   GLboolean alphaTestEnabled;
-   GrCmpFnc_t alphaTestFunc;
-   GLfloat alphaTestRefValue;
-
-   /* Blend function */
-
-   GLboolean blendEnabled;
-   GrAlphaBlendFnc_t blendSrcFuncRGB;
-   GrAlphaBlendFnc_t blendDstFuncRGB;
-   GrAlphaBlendFnc_t blendSrcFuncAlpha;
-   GrAlphaBlendFnc_t blendDstFuncAlpha;
-   GrAlphaBlendOp_t blendEqRGB;
-   GrAlphaBlendOp_t blendEqAlpha;
-
-   /* Depth test */
-
-   GLboolean depthTestEnabled;
-   GLboolean depthMask;
-   GrCmpFnc_t depthTestFunc;
-   FxI32 depthBias;
-
-   /* Stencil */
-
-   GLboolean stencilEnabled;
-   GrCmpFnc_t stencilFunction;		/* Stencil function */
-   GrStencil_t stencilRefValue;		/* Stencil reference value */
-   GrStencil_t stencilValueMask;	/* Value mask */
-   GrStencil_t stencilWriteMask;	/* Write mask */
-   GrCmpFnc_t stencilFailFunc;		/* Stencil fail function */
-   GrCmpFnc_t stencilZFailFunc;		/* Stencil pass, depth fail function */
-   GrCmpFnc_t stencilZPassFunc;		/* Stencil pass, depth pass function */
-   GrStencil_t stencilClear;		/* Buffer clear value */
-}
-tfxUnitsState;
-
-
-
-
-/* Flags for fxMesa->new_state
- */
-#define FX_NEW_TEXTURING      0x1
-#define FX_NEW_BLEND          0x2
-#define FX_NEW_ALPHA          0x4
-#define FX_NEW_DEPTH          0x8
-#define FX_NEW_FOG            0x10
-#define FX_NEW_SCISSOR        0x20
-#define FX_NEW_COLOR_MASK     0x40
-#define FX_NEW_CULL           0x80
-#define FX_NEW_STENCIL        0x100
-
-
-#define FX_CONTEXT(ctx) ((fxMesaContext)((ctx)->DriverCtx))
-
-#define FX_TEXTURE_DATA(texUnit) fxTMGetTexInfo((texUnit)->_Current)
-
-#define fxTMGetTexInfo(o) ((tfxTexInfo*)((o)->DriverData))
-
-#define FX_MIPMAP_DATA(img)  ((tfxMipMapLevel *) (img)->DriverData)
-
-#define BEGIN_BOARD_LOCK()
-#define END_BOARD_LOCK()
-#define BEGIN_CLIP_LOOP()
-#define END_CLIP_LOOP()
-
-
-
-
-/* Covers the state referenced by IsInHardware:
- */
-#define _FX_NEW_IS_IN_HARDWARE (_NEW_TEXTURE|		\
-			        _NEW_HINT|		\
-			        _NEW_STENCIL|		\
-			        _NEW_BUFFERS|		\
-			        _NEW_COLOR|		\
-			        _NEW_LIGHT)
-
-/* Covers the state referenced by fxDDChooseRenderState
- */
-#define _FX_NEW_RENDERSTATE (_FX_NEW_IS_IN_HARDWARE |   \
-			     _DD_NEW_FLATSHADE |	\
-			     _DD_NEW_TRI_LIGHT_TWOSIDE| \
-			     _DD_NEW_TRI_OFFSET |	\
-			     _DD_NEW_TRI_UNFILLED |	\
-			     _DD_NEW_TRI_SMOOTH |	\
-			     _DD_NEW_TRI_STIPPLE |	\
-			     _DD_NEW_LINE_SMOOTH |	\
-			     _DD_NEW_LINE_STIPPLE |	\
-			     _DD_NEW_LINE_WIDTH |	\
-			     _DD_NEW_POINT_SMOOTH |	\
-			     _DD_NEW_POINT_SIZE |	\
-			     _NEW_LINE)
-
-
-/* Covers the state referenced by fxDDChooseSetupFunction.
- */
-#define _FX_NEW_SETUP_FUNCTION (_NEW_LIGHT|	\
-			        _NEW_FOG|	\
-			        _NEW_TEXTURE|	\
-			        _NEW_COLOR)	\
-
-
-/* lookup table for scaling y bit colors up to 8 bits */
-extern GLuint FX_rgb_scale_4[16];
-extern GLuint FX_rgb_scale_5[32];
-extern GLuint FX_rgb_scale_6[64];
-
-typedef void (*fx_tri_func) (fxMesaContext, GrVertex *, GrVertex *, GrVertex *);
-typedef void (*fx_line_func) (fxMesaContext, GrVertex *, GrVertex *);
-typedef void (*fx_point_func) (fxMesaContext, GrVertex *);
-
-struct tfxMesaContext
-{
-   GrTexTable_t glbPalType;
-   GuTexPalette glbPalette;
-
-   GLcontext *glCtx;		/* the core Mesa context */
-   GLvisual *glVis;		/* describes the color buffer */
-   GLframebuffer *glBuffer;	/* the ancillary buffers */
-
-   GLint board;			/* the board used for this context */
-   GLint width, height;		/* size of color buffer */
-
-   GrBuffer_t currentFB;
-
-   GLboolean bgrOrder;
-   GrColor_t color;
-   GrColor_t clearC;
-   GrAlpha_t clearA;
-   GLuint constColor;
-   GrCullMode_t cullMode;
-
-   tfxUnitsState unitsState;
-   tfxUnitsState restoreUnitsState;	/* saved during multipass */
-   GLboolean multipass;			/* true when drawing intermediate pass */
-
-   GLuint new_state;
-   GLuint new_gl_state;
-
-   /* Texture Memory Manager Data
-    */
-   GLuint texBindNumber;
-   GLint tmuSrc;
-   GLuint lastUnitsMode;
-   GLuint freeTexMem[FX_NUM_TMU];
-   MemRange *tmPool;
-   MemRange *tmFree[FX_NUM_TMU];
-
-   GLenum fogTableMode;
-   GLfloat fogDensity;
-   GLfloat fogStart, fogEnd;
-   GrFog_t *fogTable;
-   GLint textureAlign;
-   GLint textureMaxLod;
-
-   /* Vertex building and storage:
-    */
-   GLuint tmu_source[FX_NUM_TMU];
-   GLuint SetupIndex;
-   GLuint stw_hint_state;	/* for grHints */
-   GrVertex *verts;
-   GLboolean snapVertices;      /* needed for older Voodoo hardware */
-
-   /* Rasterization:
-    */
-   GLuint render_index;
-   GLuint fallback;
-   GLenum render_primitive;
-   GLenum raster_primitive;
-
-   /* Current rasterization functions
-    */
-   fx_point_func draw_point;
-   fx_line_func draw_line;
-   fx_tri_func draw_tri;
-
-
-   /* Keep texture scales somewhere handy:
-    */
-   GLfloat s0scale;
-   GLfloat s1scale;
-   GLfloat t0scale;
-   GLfloat t1scale;
-
-   GLfloat inv_s0scale;
-   GLfloat inv_s1scale;
-   GLfloat inv_t0scale;
-   GLfloat inv_t1scale;
-
-   /* Glide stuff
-    */
-   tfxStats stats;
-   void *state;
-
-   /* Options */
-
-   GLboolean verbose;
-   GLboolean haveTwoTMUs;	/* True if we really have 2 tmu's  */
-   GLboolean haveHwAlpha;
-   GLboolean haveHwStencil;
-   GLboolean haveZBuffer;
-   GLboolean haveDoubleBuffer;
-   GLboolean haveGlobalPaletteTexture;
-   GLint swapInterval;
-   GLint maxPendingSwapBuffers;
-
-   GrContext_t glideContext;
-
-   int screen_width;
-   int screen_height;
-   int clipMinX;
-   int clipMaxX;
-   int clipMinY;
-   int clipMaxY;
-
-   int colDepth;
-   GLboolean fsaa;
-
-   /* Glide (per card) capabilities. These get mirrored
-    * from `glbHWConfig' when creating a new context...
-    */
-   GrSstType type;
-   FxBool HavePalExt;	/* PALETTE6666 */
-   FxBool HavePixExt;	/* PIXEXT */
-   FxBool HaveTexFmt;	/* TEXFMT */
-   FxBool HaveCmbExt;	/* COMBINE */
-   FxBool HaveMirExt;	/* TEXMIRROR */
-   FxBool HaveTexUma;	/* TEXUMA */
-   FxBool HaveTexus2;	/* Texus 2 - FXT1 */
-   struct tdfx_glide Glide;
-   char rendererString[64];
-};
-
-
-extern void fxSetupFXUnits(GLcontext *);
-extern void fxSetupDDPointers(GLcontext *);
-
-/* fxvb.c:
- */
-extern void fxAllocVB(GLcontext * ctx);
-extern void fxFreeVB(GLcontext * ctx);
-extern void fxPrintSetupFlags(char *msg, GLuint flags );
-extern void fxCheckTexSizes( GLcontext *ctx );
-extern void fxBuildVertices( GLcontext *ctx, GLuint start, GLuint end,
-			     GLuint newinputs );
-extern void fxChooseVertexState( GLcontext *ctx );
-
-
-
-
-
-
-/* fxtrifuncs:
- */
-extern void fxDDInitTriFuncs(GLcontext *);
-extern void fxDDChooseRenderState(GLcontext * ctx);
-
-
-extern void fxUpdateDDSpanPointers(GLcontext *);
-extern void fxSetupDDSpanPointers(GLcontext *);
-
-extern void fxPrintTextureData(tfxTexInfo * ti);
-
-extern const struct gl_texture_format *
-fxDDChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
-                         GLenum srcFormat, GLenum srcType );
-extern void fxDDTexImage2D(GLcontext * ctx, GLenum target, GLint level,
-			   GLint internalFormat, GLint width, GLint height,
-			   GLint border, GLenum format, GLenum type,
-			   const GLvoid * pixels,
-			   const struct gl_pixelstore_attrib *packing,
-			   struct gl_texture_object *texObj,
-			   struct gl_texture_image *texImage);
-extern void fxDDTexSubImage2D(GLcontext * ctx, GLenum target, GLint level,
-			      GLint xoffset, GLint yoffset,
-			      GLsizei width, GLsizei height,
-			      GLenum format, GLenum type,
-			      const GLvoid * pixels,
-			      const struct gl_pixelstore_attrib *packing,
-			      struct gl_texture_object *texObj,
-			      struct gl_texture_image *texImage);
-extern void fxDDCompressedTexImage2D(GLcontext *ctx, GLenum target,
-                                     GLint level, GLint internalFormat,
-                                     GLsizei width, GLsizei height, GLint border,
-                                     GLsizei imageSize, const GLvoid *data,
-                                     struct gl_texture_object *texObj,
-                                     struct gl_texture_image *texImage);
-extern void fxDDCompressedTexSubImage2D(GLcontext *ctx, GLenum target,
-                                        GLint level, GLint xoffset,
-                                        GLint yoffset, GLsizei width,
-                                        GLint height, GLenum format,
-                                        GLsizei imageSize, const GLvoid *data,
-                                        struct gl_texture_object *texObj,
-                                        struct gl_texture_image *texImage);
-extern void fxDDTexImage1D(GLcontext * ctx, GLenum target, GLint level,
-			   GLint internalFormat, GLint width,
-			   GLint border, GLenum format, GLenum type,
-			   const GLvoid * pixels,
-			   const struct gl_pixelstore_attrib *packing,
-			   struct gl_texture_object *texObj,
-			   struct gl_texture_image *texImage);
-extern void fxDDTexSubImage1D(GLcontext * ctx, GLenum target, GLint level,
-			      GLint xoffset, GLint width,
-			      GLenum format, GLenum type,
-			      const GLvoid * pixels,
-			      const struct gl_pixelstore_attrib *packing,
-			      struct gl_texture_object *texObj,
-			      struct gl_texture_image *texImage);
-extern GLboolean fxDDTestProxyTexImage (GLcontext *ctx, GLenum target,
-                                        GLint level, GLint internalFormat,
-                                        GLenum format, GLenum type,
-                                        GLint width, GLint height,
-                                        GLint depth, GLint border);
-extern void fxDDTexEnv(GLcontext *, GLenum, GLenum, const GLfloat *);
-extern void fxDDTexParam(GLcontext *, GLenum, struct gl_texture_object *,
-			 GLenum, const GLfloat *);
-extern void fxDDTexBind(GLcontext *, GLenum, struct gl_texture_object *);
-extern struct gl_texture_object *fxDDNewTextureObject( GLcontext *ctx, GLuint name, GLenum target );
-extern void fxDDTexDel(GLcontext *, struct gl_texture_object *);
-extern GLboolean fxDDIsTextureResident(GLcontext *, struct gl_texture_object *);
-extern void fxDDTexPalette(GLcontext *, struct gl_texture_object *);
-extern void fxDDTexUseGlbPalette(GLcontext *, GLboolean);
-
-extern void fxDDEnable(GLcontext *, GLenum, GLboolean);
-extern void fxDDAlphaFunc(GLcontext *, GLenum, GLfloat);
-extern void fxDDBlendFuncSeparate(GLcontext *, GLenum, GLenum, GLenum, GLenum);
-extern void fxDDBlendEquationSeparate(GLcontext *, GLenum, GLenum);
-extern void fxDDDepthMask(GLcontext *, GLboolean);
-extern void fxDDDepthFunc(GLcontext *, GLenum);
-extern void fxDDStencilFuncSeparate (GLcontext *ctx, GLenum face, GLenum func, GLint ref, GLuint mask);
-extern void fxDDStencilMaskSeparate (GLcontext *ctx, GLenum face, GLuint mask);
-extern void fxDDStencilOpSeparate (GLcontext *ctx, GLenum face, GLenum sfail, GLenum zfail, GLenum zpass);
-
-extern void fxDDInitExtensions(GLcontext * ctx);
-
-extern void fxTMInit(fxMesaContext ctx);
-extern void fxTMClose(fxMesaContext ctx);
-extern void fxTMRestoreTextures_NoLock(fxMesaContext ctx);
-extern void fxTMMoveInTM(fxMesaContext, struct gl_texture_object *, GLint);
-extern void fxTMMoveOutTM(fxMesaContext, struct gl_texture_object *);
-#define fxTMMoveOutTM_NoLock fxTMMoveOutTM
-extern void fxTMFreeTexture(fxMesaContext, struct gl_texture_object *);
-extern void fxTMReloadMipMapLevel(fxMesaContext, struct gl_texture_object *,
-				  GLint);
-extern void fxTMReloadSubMipMapLevel(fxMesaContext,
-				     struct gl_texture_object *, GLint, GLint,
-				     GLint);
-extern int fxTMCheckStartAddr (fxMesaContext fxMesa, GLint tmu, tfxTexInfo *ti);
-
-extern void fxTexGetFormat(GLcontext *, GLenum, GrTextureFormat_t *, GLint *); /* [koolsmoky] */
-
-extern int fxTexGetInfo(int, int, GrLOD_t *, GrAspectRatio_t *,
-			float *, float *, int *, int *);
-
-extern void fxDDScissor(GLcontext * ctx,
-			GLint x, GLint y, GLsizei w, GLsizei h);
-extern void fxDDFogfv(GLcontext * ctx, GLenum pname, const GLfloat * params);
-extern void fxDDColorMask(GLcontext * ctx,
-			  GLboolean r, GLboolean g, GLboolean b, GLboolean a);
-
-extern void fxDDWriteDepthSpan(GLcontext * ctx, GLuint n, GLint x, GLint y,
-			       const GLuint depth[], const GLubyte mask[]);
-
-extern void fxDDReadDepthSpan(GLcontext * ctx, GLuint n, GLint x, GLint y,
-			      GLuint depth[]);
-
-extern void fxDDWriteDepthPixels(GLcontext * ctx, GLuint n,
-				 const GLint x[], const GLint y[],
-				 const GLuint depth[], const GLubyte mask[]);
-
-extern void fxDDReadDepthPixels(GLcontext * ctx, GLuint n,
-				const GLint x[], const GLint y[],
-				GLuint depth[]);
-
-extern void fxDDShadeModel(GLcontext * ctx, GLenum mode);
-
-extern void fxDDCullFace(GLcontext * ctx, GLenum mode);
-extern void fxDDFrontFace(GLcontext * ctx, GLenum mode);
-
-extern void fxPrintRenderState(const char *msg, GLuint state);
-extern void fxPrintHintState(const char *msg, GLuint state);
-
-extern int fxDDInitFxMesaContext(fxMesaContext fxMesa);
-extern void fxDDDestroyFxMesaContext(fxMesaContext fxMesa);
-
-
-extern void fxSetScissorValues(GLcontext * ctx);
-extern void fxTMMoveInTM_NoLock(fxMesaContext fxMesa,
-				struct gl_texture_object *tObj, GLint where);
-
-extern void fxCheckIsInHardware(GLcontext *ctx);
-
-/* fxsetup:
- * semi-private functions
- */
-void fxSetupCull (GLcontext * ctx);
-void fxSetupScissor (GLcontext * ctx);
-void fxSetupColorMask (GLcontext * ctx);
-void fxSetupBlend (GLcontext *ctx);
-void fxSetupDepthTest (GLcontext *ctx);
-void fxSetupTexture (GLcontext *ctx);
-void fxSetupStencil (GLcontext *ctx);
-void fxSetupStencilFace (GLcontext *ctx, GLint face);
-
-/* Flags for software fallback cases */
-#define FX_FALLBACK_TEXTURE_MAP		0x0001
-#define FX_FALLBACK_DRAW_BUFFER		0x0002
-#define FX_FALLBACK_SPECULAR		0x0004
-#define FX_FALLBACK_STENCIL		0x0008
-#define FX_FALLBACK_RENDER_MODE		0x0010
-#define FX_FALLBACK_LOGICOP		0x0020
-#define FX_FALLBACK_TEXTURE_ENV		0x0040
-#define FX_FALLBACK_TEXTURE_BORDER	0x0080
-#define FX_FALLBACK_COLORMASK		0x0100
-#define FX_FALLBACK_BLEND		0x0200
-#define FX_FALLBACK_TEXTURE_MULTI	0x0400
-
-extern GLuint fx_check_IsInHardware(GLcontext *ctx);
-
-/***
- *** CNORM: clamp float to [0,1] and map to float in [0,255]
- ***/
-#if defined(USE_IEEE) && !defined(DEBUG)
-#define IEEE_0996 0x3f7f0000	/* 0.996 or so */
-#define CNORM(N, F)				\
-        do {					\
-           fi_type __tmp;			\
-           __tmp.f = (F);			\
-           if (__tmp.i < 0)			\
-              N = 0;				\
-           else if (__tmp.i >= IEEE_0996)	\
-              N = 255.0f;			\
-           else {				\
-              N = (F) * 255.0f;			\
-           }					\
-        } while (0)
-#else
-#define CNORM(n, f) \
-	n = (CLAMP((f), 0.0F, 1.0F) * 255.0F)
-#endif
-
-/* run-time debugging */
-#ifndef FX_DEBUG
-#define FX_DEBUG 0
-#endif
-#if FX_DEBUG
-extern int TDFX_DEBUG;
-#else
-#define TDFX_DEBUG		0
-#endif
-
-/* dirty hacks */
-#define FX_RESCALE_BIG_TEXURES_HACK   1
-#define FX_COMPRESS_S3TC_AS_FXT1_HACK 1
-
-#endif
diff --git a/src/mesa/drivers/glide/fxg.c b/src/mesa/drivers/glide/fxg.c
deleted file mode 100644
index afb9441ade..0000000000
--- a/src/mesa/drivers/glide/fxg.c
+++ /dev/null
@@ -1,2309 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  5.0.1
- * 
- * Copyright (C) 1999-2003  Brian Paul   All Rights Reserved.
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * Mesa/FX device driver. Interface to Glide3.
- *
- *  Copyright (c) 2003 - Daniel Borca
- *  Email : dborca@users.sourceforge.net
- *  Web   : http://www.geocities.com/dborca
- */
-
-
-#ifdef FX
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <assert.h>
-
-#define FX_TRAP_GLIDE_internal
-#include "fxg.h"
-
-
-
-/****************************************************************************\
-* logging                                                                    *
-\****************************************************************************/
-#if FX_TRAP_GLIDE
-#define TRAP_LOG trp_printf
-#ifdef __GNUC__
-__attribute__ ((format(printf, 1, 2)))
-#endif /* __GNUC__ */
-int trp_printf (const char *format, ...)
-{
- va_list arg;
- int n;
- FILE *trap_file;
- va_start(arg, format);
- trap_file = fopen("trap.log", "a");
- if (trap_file == NULL) {
-    trap_file = stderr;
- }
- n = vfprintf(trap_file, format, arg);
- fclose(trap_file);
- va_end(arg);
- return n;
-}
-#else  /* FX_TRAP_GLIDE */
-#ifdef __GNUC__
-#define TRAP_LOG(format, ...) do {} while (0)
-#else  /* __GNUC__ */
-#define TRAP_LOG              0 && (unsigned long)
-#endif /* __GNUC__ */
-#endif /* FX_TRAP_GLIDE */
-
-
-
-#if FX_TRAP_GLIDE
-/****************************************************************************\
-* helpers                                                                    *
-\****************************************************************************/
-
-#define GOT "\t"
-
-const char *TRP_BOOL (FxBool b)
-{
- return b ? "FXTRUE" : "FXFALSE";
-}
-
-#define TRAP_CASE_STRING(name) case name: return #name
-#define TRAP_NODEFAULT default: assert(0)
-
-const char *TRP_PARAM (FxU32 mode)
-{
- switch (mode) {
-        TRAP_CASE_STRING(GR_PARAM_DISABLE);
-        TRAP_CASE_STRING(GR_PARAM_ENABLE);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_VTX (FxU32 param)
-{
- switch (param) {
-        TRAP_CASE_STRING(GR_PARAM_XY);
-        TRAP_CASE_STRING(GR_PARAM_Z);
-        TRAP_CASE_STRING(GR_PARAM_W);
-        TRAP_CASE_STRING(GR_PARAM_Q);
-        TRAP_CASE_STRING(GR_PARAM_FOG_EXT);
-        TRAP_CASE_STRING(GR_PARAM_A);
-        TRAP_CASE_STRING(GR_PARAM_RGB);
-        TRAP_CASE_STRING(GR_PARAM_PARGB);
-        TRAP_CASE_STRING(GR_PARAM_ST0);
-        TRAP_CASE_STRING(GR_PARAM_ST1);
-        TRAP_CASE_STRING(GR_PARAM_ST2);
-        TRAP_CASE_STRING(GR_PARAM_Q0);
-        TRAP_CASE_STRING(GR_PARAM_Q1);
-        TRAP_CASE_STRING(GR_PARAM_Q2);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_ARRAY (FxU32 mode)
-{
- switch (mode) {
-        TRAP_CASE_STRING(GR_POINTS);
-        TRAP_CASE_STRING(GR_LINE_STRIP);
-        TRAP_CASE_STRING(GR_LINES);
-        TRAP_CASE_STRING(GR_POLYGON);
-        TRAP_CASE_STRING(GR_TRIANGLE_STRIP);
-        TRAP_CASE_STRING(GR_TRIANGLE_FAN);
-        TRAP_CASE_STRING(GR_TRIANGLES);
-        TRAP_CASE_STRING(GR_TRIANGLE_STRIP_CONTINUE);
-        TRAP_CASE_STRING(GR_TRIANGLE_FAN_CONTINUE);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_BUFFER (GrBuffer_t buffer)
-{
- switch (buffer) {
-        TRAP_CASE_STRING(GR_BUFFER_FRONTBUFFER);
-        TRAP_CASE_STRING(GR_BUFFER_BACKBUFFER);
-        TRAP_CASE_STRING(GR_BUFFER_AUXBUFFER);
-        TRAP_CASE_STRING(GR_BUFFER_DEPTHBUFFER);
-        TRAP_CASE_STRING(GR_BUFFER_ALPHABUFFER);
-        TRAP_CASE_STRING(GR_BUFFER_TRIPLEBUFFER);
-        TRAP_CASE_STRING(GR_BUFFER_TEXTUREBUFFER_EXT);
-        TRAP_CASE_STRING(GR_BUFFER_TEXTUREAUXBUFFER_EXT);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_ORIGIN (GrOriginLocation_t origin_location)
-{
- switch (origin_location) {
-        TRAP_CASE_STRING(GR_ORIGIN_UPPER_LEFT);
-        TRAP_CASE_STRING(GR_ORIGIN_LOWER_LEFT);
-        TRAP_CASE_STRING(GR_ORIGIN_ANY);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_REFRESH (GrScreenRefresh_t refresh_rate)
-{
- switch (refresh_rate) {
-        TRAP_CASE_STRING(GR_REFRESH_60Hz);
-        TRAP_CASE_STRING(GR_REFRESH_70Hz);
-        TRAP_CASE_STRING(GR_REFRESH_72Hz);
-        TRAP_CASE_STRING(GR_REFRESH_75Hz);
-        TRAP_CASE_STRING(GR_REFRESH_80Hz);
-        TRAP_CASE_STRING(GR_REFRESH_90Hz);
-        TRAP_CASE_STRING(GR_REFRESH_100Hz);
-        TRAP_CASE_STRING(GR_REFRESH_85Hz);
-        TRAP_CASE_STRING(GR_REFRESH_120Hz);
-        TRAP_CASE_STRING(GR_REFRESH_NONE);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_COLFMT (GrColorFormat_t color_format)
-{
- switch (color_format) {
-        TRAP_CASE_STRING(GR_COLORFORMAT_ARGB);
-        TRAP_CASE_STRING(GR_COLORFORMAT_ABGR);
-        TRAP_CASE_STRING(GR_COLORFORMAT_RGBA);
-        TRAP_CASE_STRING(GR_COLORFORMAT_BGRA);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_RESOLUTION (GrScreenResolution_t screen_resolution)
-{
- switch (screen_resolution) {
-        TRAP_CASE_STRING(GR_RESOLUTION_320x200);
-        TRAP_CASE_STRING(GR_RESOLUTION_320x240);
-        TRAP_CASE_STRING(GR_RESOLUTION_400x256);
-        TRAP_CASE_STRING(GR_RESOLUTION_512x384);
-        TRAP_CASE_STRING(GR_RESOLUTION_640x200);
-        TRAP_CASE_STRING(GR_RESOLUTION_640x350);
-        TRAP_CASE_STRING(GR_RESOLUTION_640x400);
-        TRAP_CASE_STRING(GR_RESOLUTION_640x480);
-        TRAP_CASE_STRING(GR_RESOLUTION_800x600);
-        TRAP_CASE_STRING(GR_RESOLUTION_960x720);
-        TRAP_CASE_STRING(GR_RESOLUTION_856x480);
-        TRAP_CASE_STRING(GR_RESOLUTION_512x256);
-        TRAP_CASE_STRING(GR_RESOLUTION_1024x768);
-        TRAP_CASE_STRING(GR_RESOLUTION_1280x1024);
-        TRAP_CASE_STRING(GR_RESOLUTION_1600x1200);
-        TRAP_CASE_STRING(GR_RESOLUTION_400x300);
-        TRAP_CASE_STRING(GR_RESOLUTION_1152x864);
-        TRAP_CASE_STRING(GR_RESOLUTION_1280x960);
-        TRAP_CASE_STRING(GR_RESOLUTION_1600x1024);
-        TRAP_CASE_STRING(GR_RESOLUTION_1792x1344);
-        TRAP_CASE_STRING(GR_RESOLUTION_1856x1392);
-        TRAP_CASE_STRING(GR_RESOLUTION_1920x1440);
-        TRAP_CASE_STRING(GR_RESOLUTION_2048x1536);
-        TRAP_CASE_STRING(GR_RESOLUTION_2048x2048);
-        TRAP_CASE_STRING(GR_RESOLUTION_NONE);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_BLEND (GrAlphaBlendFnc_t func)
-{
- switch (func) {
-        TRAP_CASE_STRING(GR_BLEND_ZERO);
-        TRAP_CASE_STRING(GR_BLEND_SRC_ALPHA);
-        TRAP_CASE_STRING(GR_BLEND_SRC_COLOR);
-        /*TRAP_CASE_STRING(GR_BLEND_DST_COLOR); ==GR_BLEND_SRC_COLOR*/
-        TRAP_CASE_STRING(GR_BLEND_DST_ALPHA);
-        TRAP_CASE_STRING(GR_BLEND_ONE);
-        TRAP_CASE_STRING(GR_BLEND_ONE_MINUS_SRC_ALPHA);
-        TRAP_CASE_STRING(GR_BLEND_ONE_MINUS_SRC_COLOR);
-        /*TRAP_CASE_STRING(GR_BLEND_ONE_MINUS_DST_COLOR); ==GR_BLEND_ONE_MINUS_SRC_COLOR*/
-        TRAP_CASE_STRING(GR_BLEND_ONE_MINUS_DST_ALPHA);
-        TRAP_CASE_STRING(GR_BLEND_SAME_COLOR_EXT);
-        /*TRAP_CASE_STRING(GR_BLEND_RESERVED_8); ==GR_BLEND_SAME_COLOR_EXT*/
-        TRAP_CASE_STRING(GR_BLEND_ONE_MINUS_SAME_COLOR_EXT);
-        /*TRAP_CASE_STRING(GR_BLEND_RESERVED_9); ==GR_BLEND_ONE_MINUS_SAME_COLOR_EXT*/
-        TRAP_CASE_STRING(GR_BLEND_RESERVED_A);
-        TRAP_CASE_STRING(GR_BLEND_RESERVED_B);
-        TRAP_CASE_STRING(GR_BLEND_RESERVED_C);
-        TRAP_CASE_STRING(GR_BLEND_RESERVED_D);
-        TRAP_CASE_STRING(GR_BLEND_RESERVED_E);
-        TRAP_CASE_STRING(GR_BLEND_ALPHA_SATURATE);
-        /*TRAP_CASE_STRING(GR_BLEND_PREFOG_COLOR); ==GR_BLEND_ALPHA_SATURATE*/
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_CMBFUNC (GrCombineFunction_t cfunc)
-{
- switch (cfunc) {
-        TRAP_CASE_STRING(GR_COMBINE_FUNCTION_ZERO);
-        /*TRAP_CASE_STRING(GR_COMBINE_FUNCTION_NONE); ==GR_COMBINE_FUNCTION_ZERO*/
-        TRAP_CASE_STRING(GR_COMBINE_FUNCTION_LOCAL);
-        TRAP_CASE_STRING(GR_COMBINE_FUNCTION_LOCAL_ALPHA);
-        TRAP_CASE_STRING(GR_COMBINE_FUNCTION_SCALE_OTHER);
-        /*TRAP_CASE_STRING(GR_COMBINE_FUNCTION_BLEND_OTHER); ==GR_COMBINE_FUNCTION_SCALE_OTHER*/
-        TRAP_CASE_STRING(GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL);
-        TRAP_CASE_STRING(GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA);
-        TRAP_CASE_STRING(GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL);
-        TRAP_CASE_STRING(GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL);
-        /*TRAP_CASE_STRING(GR_COMBINE_FUNCTION_BLEND); ==GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL*/
-        TRAP_CASE_STRING(GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL_ALPHA);
-        TRAP_CASE_STRING(GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL);
-        /*TRAP_CASE_STRING(GR_COMBINE_FUNCTION_BLEND_LOCAL); ==GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL*/
-        TRAP_CASE_STRING(GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_CMBFACT (GrCombineFactor_t cfactor)
-{
- switch (cfactor) {
-        TRAP_CASE_STRING(GR_COMBINE_FACTOR_ZERO);
-        /*TRAP_CASE_STRING(GR_COMBINE_FACTOR_NONE); ==GR_COMBINE_FACTOR_ZERO*/
-        TRAP_CASE_STRING(GR_COMBINE_FACTOR_LOCAL);
-        TRAP_CASE_STRING(GR_COMBINE_FACTOR_OTHER_ALPHA);
-        TRAP_CASE_STRING(GR_COMBINE_FACTOR_LOCAL_ALPHA);
-        TRAP_CASE_STRING(GR_COMBINE_FACTOR_TEXTURE_ALPHA);
-        TRAP_CASE_STRING(GR_COMBINE_FACTOR_TEXTURE_RGB);
-        /*TRAP_CASE_STRING(GR_COMBINE_FACTOR_DETAIL_FACTOR); ==GR_COMBINE_FACTOR_TEXTURE_ALPHA*/
-        /*TRAP_CASE_STRING(GR_COMBINE_FACTOR_LOD_FRACTION); ==GR_COMBINE_FACTOR_TEXTURE_RGB ???*/
-        TRAP_CASE_STRING(GR_COMBINE_FACTOR_ONE);
-        TRAP_CASE_STRING(GR_COMBINE_FACTOR_ONE_MINUS_LOCAL);
-        TRAP_CASE_STRING(GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA);
-        TRAP_CASE_STRING(GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA);
-        TRAP_CASE_STRING(GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA);
-        /*TRAP_CASE_STRING(GR_COMBINE_FACTOR_ONE_MINUS_DETAIL_FACTOR); ==GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA*/
-        TRAP_CASE_STRING(GR_COMBINE_FACTOR_ONE_MINUS_LOD_FRACTION);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_CMBLOCAL (GrCombineLocal_t clocal)
-{
- switch (clocal) {
-        TRAP_CASE_STRING(GR_COMBINE_LOCAL_ITERATED);
-        TRAP_CASE_STRING(GR_COMBINE_LOCAL_CONSTANT);
-        /*TRAP_CASE_STRING(GR_COMBINE_LOCAL_NONE); ==GR_COMBINE_LOCAL_CONSTANT*/
-        TRAP_CASE_STRING(GR_COMBINE_LOCAL_DEPTH);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_CMBOTHER (GrCombineOther_t cother)
-{
- switch (cother) {
-        TRAP_CASE_STRING(GR_COMBINE_OTHER_ITERATED);
-        TRAP_CASE_STRING(GR_COMBINE_OTHER_TEXTURE);
-        TRAP_CASE_STRING(GR_COMBINE_OTHER_CONSTANT);
-        /*TRAP_CASE_STRING(GR_COMBINE_OTHER_NONE); ==GR_COMBINE_OTHER_CONSTANT*/
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_CMPFUNC (GrCmpFnc_t function)
-{
- switch (function) {
-        TRAP_CASE_STRING(GR_CMP_NEVER);
-        TRAP_CASE_STRING(GR_CMP_LESS);
-        TRAP_CASE_STRING(GR_CMP_EQUAL);
-        TRAP_CASE_STRING(GR_CMP_LEQUAL);
-        TRAP_CASE_STRING(GR_CMP_GREATER);
-        TRAP_CASE_STRING(GR_CMP_NOTEQUAL);
-        TRAP_CASE_STRING(GR_CMP_GEQUAL);
-        TRAP_CASE_STRING(GR_CMP_ALWAYS);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_CKMODE (GrChromakeyMode_t mode)
-{
- switch (mode) {
-        TRAP_CASE_STRING(GR_CHROMAKEY_DISABLE);
-        TRAP_CASE_STRING(GR_CHROMAKEY_ENABLE);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_CULLMODE (GrCullMode_t mode)
-{
- switch (mode) {
-        TRAP_CASE_STRING(GR_CULL_DISABLE);
-        TRAP_CASE_STRING(GR_CULL_NEGATIVE);
-        TRAP_CASE_STRING(GR_CULL_POSITIVE);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_DEPTHMODE (GrDepthBufferMode_t mode)
-{
- switch (mode) {
-        TRAP_CASE_STRING(GR_DEPTHBUFFER_DISABLE);
-        TRAP_CASE_STRING(GR_DEPTHBUFFER_ZBUFFER);
-        TRAP_CASE_STRING(GR_DEPTHBUFFER_WBUFFER);
-        TRAP_CASE_STRING(GR_DEPTHBUFFER_ZBUFFER_COMPARE_TO_BIAS);
-        TRAP_CASE_STRING(GR_DEPTHBUFFER_WBUFFER_COMPARE_TO_BIAS);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_DITHERMODE (GrDitherMode_t mode)
-{
- switch (mode) {
-        TRAP_CASE_STRING(GR_DITHER_DISABLE);
-        TRAP_CASE_STRING(GR_DITHER_2x2);
-        TRAP_CASE_STRING(GR_DITHER_4x4);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_FOGMODE (GrFogMode_t mode)
-{
- switch (mode) {
-        TRAP_CASE_STRING(GR_FOG_DISABLE);
-        TRAP_CASE_STRING(GR_FOG_WITH_TABLE_ON_FOGCOORD_EXT);
-        TRAP_CASE_STRING(GR_FOG_WITH_TABLE_ON_Q);
-        /*TRAP_CASE_STRING(GR_FOG_WITH_TABLE_ON_W); ==GR_FOG_WITH_TABLE_ON_Q*/
-        TRAP_CASE_STRING(GR_FOG_WITH_ITERATED_Z);
-        TRAP_CASE_STRING(GR_FOG_WITH_ITERATED_ALPHA_EXT);
-        TRAP_CASE_STRING(GR_FOG_MULT2);
-        TRAP_CASE_STRING(GR_FOG_ADD2);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_GETNAME (FxU32 pname)
-{
- switch (pname) {
-        TRAP_CASE_STRING(GR_BITS_DEPTH);
-        TRAP_CASE_STRING(GR_BITS_RGBA);
-        TRAP_CASE_STRING(GR_FIFO_FULLNESS);
-        TRAP_CASE_STRING(GR_FOG_TABLE_ENTRIES);
-        TRAP_CASE_STRING(GR_GAMMA_TABLE_ENTRIES);
-        TRAP_CASE_STRING(GR_GLIDE_STATE_SIZE);
-        TRAP_CASE_STRING(GR_GLIDE_VERTEXLAYOUT_SIZE);
-        TRAP_CASE_STRING(GR_IS_BUSY);
-        TRAP_CASE_STRING(GR_LFB_PIXEL_PIPE);
-        TRAP_CASE_STRING(GR_MAX_TEXTURE_SIZE);
-        TRAP_CASE_STRING(GR_MAX_TEXTURE_ASPECT_RATIO);
-        TRAP_CASE_STRING(GR_MEMORY_FB);
-        TRAP_CASE_STRING(GR_MEMORY_TMU);
-        TRAP_CASE_STRING(GR_MEMORY_UMA);
-        TRAP_CASE_STRING(GR_NUM_BOARDS);
-        TRAP_CASE_STRING(GR_NON_POWER_OF_TWO_TEXTURES);
-        TRAP_CASE_STRING(GR_NUM_FB);
-        TRAP_CASE_STRING(GR_NUM_SWAP_HISTORY_BUFFER);
-        TRAP_CASE_STRING(GR_NUM_TMU);
-        TRAP_CASE_STRING(GR_PENDING_BUFFERSWAPS);
-        TRAP_CASE_STRING(GR_REVISION_FB);
-        TRAP_CASE_STRING(GR_REVISION_TMU);
-        TRAP_CASE_STRING(GR_STATS_LINES);
-        TRAP_CASE_STRING(GR_STATS_PIXELS_AFUNC_FAIL);
-        TRAP_CASE_STRING(GR_STATS_PIXELS_CHROMA_FAIL);
-        TRAP_CASE_STRING(GR_STATS_PIXELS_DEPTHFUNC_FAIL);
-        TRAP_CASE_STRING(GR_STATS_PIXELS_IN);
-        TRAP_CASE_STRING(GR_STATS_PIXELS_OUT);
-        TRAP_CASE_STRING(GR_STATS_PIXELS);
-        TRAP_CASE_STRING(GR_STATS_POINTS);
-        TRAP_CASE_STRING(GR_STATS_TRIANGLES_IN);
-        TRAP_CASE_STRING(GR_STATS_TRIANGLES_OUT);
-        TRAP_CASE_STRING(GR_STATS_TRIANGLES);
-        TRAP_CASE_STRING(GR_SWAP_HISTORY);
-        TRAP_CASE_STRING(GR_SUPPORTS_PASSTHRU);
-        TRAP_CASE_STRING(GR_TEXTURE_ALIGN);
-        TRAP_CASE_STRING(GR_VIDEO_POSITION);
-        TRAP_CASE_STRING(GR_VIEWPORT);
-        TRAP_CASE_STRING(GR_WDEPTH_MIN_MAX);
-        TRAP_CASE_STRING(GR_ZDEPTH_MIN_MAX);
-        TRAP_CASE_STRING(GR_VERTEX_PARAMETER);
-        TRAP_CASE_STRING(GR_BITS_GAMMA);
-        TRAP_CASE_STRING(GR_GET_RESERVED_1);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_GETSTRING (FxU32 pname)
-{
- switch (pname) {
-        TRAP_CASE_STRING(GR_EXTENSION);
-        TRAP_CASE_STRING(GR_HARDWARE);
-        TRAP_CASE_STRING(GR_RENDERER);
-        TRAP_CASE_STRING(GR_VENDOR);
-        TRAP_CASE_STRING(GR_VERSION);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_ENABLE (GrEnableMode_t mode)
-{
- switch (mode) {
-        TRAP_CASE_STRING(GR_AA_ORDERED);
-        TRAP_CASE_STRING(GR_ALLOW_MIPMAP_DITHER);
-        TRAP_CASE_STRING(GR_PASSTHRU);
-        TRAP_CASE_STRING(GR_SHAMELESS_PLUG);
-        TRAP_CASE_STRING(GR_VIDEO_SMOOTHING);
-        TRAP_CASE_STRING(GR_TEXTURE_UMA_EXT);
-        TRAP_CASE_STRING(GR_STENCIL_MODE_EXT);
-        TRAP_CASE_STRING(GR_OPENGL_MODE_EXT);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_COORD (GrCoordinateSpaceMode_t mode)
-{
- switch (mode) {
-        TRAP_CASE_STRING(GR_WINDOW_COORDS);
-        TRAP_CASE_STRING(GR_CLIP_COORDS);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_STIPPLEMODE (GrStippleMode_t mode)
-{
- switch (mode) {
-        TRAP_CASE_STRING(GR_STIPPLE_DISABLE);
-        TRAP_CASE_STRING(GR_STIPPLE_PATTERN);
-        TRAP_CASE_STRING(GR_STIPPLE_ROTATE);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_LODLEVEL (GrLOD_t lod)
-{
- switch (lod) {
-        TRAP_CASE_STRING(GR_LOD_LOG2_2048);
-        TRAP_CASE_STRING(GR_LOD_LOG2_1024);
-        TRAP_CASE_STRING(GR_LOD_LOG2_512);
-        TRAP_CASE_STRING(GR_LOD_LOG2_256);
-        TRAP_CASE_STRING(GR_LOD_LOG2_128);
-        TRAP_CASE_STRING(GR_LOD_LOG2_64);
-        TRAP_CASE_STRING(GR_LOD_LOG2_32);
-        TRAP_CASE_STRING(GR_LOD_LOG2_16);
-        TRAP_CASE_STRING(GR_LOD_LOG2_8);
-        TRAP_CASE_STRING(GR_LOD_LOG2_4);
-        TRAP_CASE_STRING(GR_LOD_LOG2_2);
-        TRAP_CASE_STRING(GR_LOD_LOG2_1);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_ASPECTRATIO (GrAspectRatio_t aspect)
-{
- switch (aspect) {
-        TRAP_CASE_STRING(GR_ASPECT_LOG2_8x1);
-        TRAP_CASE_STRING(GR_ASPECT_LOG2_4x1);
-        TRAP_CASE_STRING(GR_ASPECT_LOG2_2x1);
-        TRAP_CASE_STRING(GR_ASPECT_LOG2_1x1);
-        TRAP_CASE_STRING(GR_ASPECT_LOG2_1x2);
-        TRAP_CASE_STRING(GR_ASPECT_LOG2_1x4);
-        TRAP_CASE_STRING(GR_ASPECT_LOG2_1x8);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_TEXFMT (GrTextureFormat_t fmt)
-{
- switch (fmt) {
-        TRAP_CASE_STRING(GR_TEXFMT_8BIT);
-        /*TRAP_CASE_STRING(GR_TEXFMT_RGB_332); ==GR_TEXFMT_8BIT*/
-        TRAP_CASE_STRING(GR_TEXFMT_YIQ_422);
-        TRAP_CASE_STRING(GR_TEXFMT_ALPHA_8);
-        TRAP_CASE_STRING(GR_TEXFMT_INTENSITY_8);
-        TRAP_CASE_STRING(GR_TEXFMT_ALPHA_INTENSITY_44);
-        TRAP_CASE_STRING(GR_TEXFMT_P_8);
-        TRAP_CASE_STRING(GR_TEXFMT_RSVD0);
-        /*TRAP_CASE_STRING(GR_TEXFMT_P_8_6666); ==GR_TEXFMT_RSVD0*/
-        /*TRAP_CASE_STRING(GR_TEXFMT_P_8_6666_EXT); ==GR_TEXFMT_RSVD0*/
-        TRAP_CASE_STRING(GR_TEXFMT_RSVD1);
-        TRAP_CASE_STRING(GR_TEXFMT_16BIT);
-        /*TRAP_CASE_STRING(GR_TEXFMT_ARGB_8332); ==GR_TEXFMT_16BIT*/
-        TRAP_CASE_STRING(GR_TEXFMT_AYIQ_8422);
-        TRAP_CASE_STRING(GR_TEXFMT_RGB_565);
-        TRAP_CASE_STRING(GR_TEXFMT_ARGB_1555);
-        TRAP_CASE_STRING(GR_TEXFMT_ARGB_4444);
-        TRAP_CASE_STRING(GR_TEXFMT_ALPHA_INTENSITY_88);
-        TRAP_CASE_STRING(GR_TEXFMT_AP_88);
-        TRAP_CASE_STRING(GR_TEXFMT_RSVD2);
-        /*TRAP_CASE_STRING(GR_TEXFMT_RSVD4); ==GR_TEXFMT_RSVD2*/
-        TRAP_CASE_STRING(GR_TEXFMT_ARGB_CMP_FXT1);
-        TRAP_CASE_STRING(GR_TEXFMT_ARGB_8888);
-        TRAP_CASE_STRING(GR_TEXFMT_YUYV_422);
-        TRAP_CASE_STRING(GR_TEXFMT_UYVY_422);
-        TRAP_CASE_STRING(GR_TEXFMT_AYUV_444);
-        TRAP_CASE_STRING(GR_TEXFMT_ARGB_CMP_DXT1);
-        TRAP_CASE_STRING(GR_TEXFMT_ARGB_CMP_DXT2);
-        TRAP_CASE_STRING(GR_TEXFMT_ARGB_CMP_DXT3);
-        TRAP_CASE_STRING(GR_TEXFMT_ARGB_CMP_DXT4);
-        TRAP_CASE_STRING(GR_TEXFMT_ARGB_CMP_DXT5);
-        TRAP_CASE_STRING(GR_TEXTFMT_RGB_888);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_EVENODD (FxU32 evenOdd)
-{
- switch (evenOdd) {
-        TRAP_CASE_STRING(GR_MIPMAPLEVELMASK_EVEN);
-        TRAP_CASE_STRING(GR_MIPMAPLEVELMASK_ODD);
-        TRAP_CASE_STRING(GR_MIPMAPLEVELMASK_BOTH);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_NCC (GrNCCTable_t table)
-{
- switch (table) {
-        TRAP_CASE_STRING(GR_NCCTABLE_NCC0);
-        TRAP_CASE_STRING(GR_NCCTABLE_NCC1);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_CLAMPMODE (GrTextureClampMode_t clampmode)
-{
- switch (clampmode) {
-        TRAP_CASE_STRING(GR_TEXTURECLAMP_WRAP);
-        TRAP_CASE_STRING(GR_TEXTURECLAMP_CLAMP);
-        TRAP_CASE_STRING(GR_TEXTURECLAMP_MIRROR_EXT);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_TEXFILTER (GrTextureFilterMode_t filter_mode)
-{
- switch (filter_mode) {
-        TRAP_CASE_STRING(GR_TEXTUREFILTER_POINT_SAMPLED);
-        TRAP_CASE_STRING(GR_TEXTUREFILTER_BILINEAR);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_TABLE (GrTexTable_t type)
-{
- switch (type) {
-        TRAP_CASE_STRING(GR_TEXTABLE_NCC0);
-        TRAP_CASE_STRING(GR_TEXTABLE_NCC1);
-        TRAP_CASE_STRING(GR_TEXTABLE_PALETTE);
-        TRAP_CASE_STRING(GR_TEXTABLE_PALETTE_6666_EXT);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_MIPMODE (GrMipMapMode_t mode)
-{
- switch (mode) {
-        TRAP_CASE_STRING(GR_MIPMAP_DISABLE);
-        TRAP_CASE_STRING(GR_MIPMAP_NEAREST);
-        TRAP_CASE_STRING(GR_MIPMAP_NEAREST_DITHER);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_TEXBASERANGE (GrTexBaseRange_t range)
-{
- switch (range) {
-        TRAP_CASE_STRING(GR_TEXBASE_2048);
-        TRAP_CASE_STRING(GR_TEXBASE_1024);
-        TRAP_CASE_STRING(GR_TEXBASE_512);
-        TRAP_CASE_STRING(GR_TEXBASE_256_TO_1);
-        TRAP_CASE_STRING(GR_TEXBASE_256);
-        TRAP_CASE_STRING(GR_TEXBASE_128);
-        TRAP_CASE_STRING(GR_TEXBASE_64);
-        TRAP_CASE_STRING(GR_TEXBASE_32_TO_1);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_LOCKTYPE (GrLock_t type)
-{
- switch (type) {
-        TRAP_CASE_STRING(GR_LFB_READ_ONLY);
-        TRAP_CASE_STRING(GR_LFB_WRITE_ONLY);
-        /*TRAP_CASE_STRING(GR_LFB_IDLE); ==GR_LFB_READ_ONLY*/
-        TRAP_CASE_STRING(GR_LFB_NOIDLE);
-        TRAP_CASE_STRING(GR_LFB_WRITE_ONLY_EXPLICIT_EXT);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_WRITEMODE (GrLfbWriteMode_t writeMode)
-{
- switch (writeMode) {
-        TRAP_CASE_STRING(GR_LFBWRITEMODE_565);
-        TRAP_CASE_STRING(GR_LFBWRITEMODE_555);
-        TRAP_CASE_STRING(GR_LFBWRITEMODE_1555);
-        TRAP_CASE_STRING(GR_LFBWRITEMODE_RESERVED1);
-        TRAP_CASE_STRING(GR_LFBWRITEMODE_888);
-        TRAP_CASE_STRING(GR_LFBWRITEMODE_8888);
-        TRAP_CASE_STRING(GR_LFBWRITEMODE_RESERVED2);
-        TRAP_CASE_STRING(GR_LFBWRITEMODE_RESERVED3);
-        TRAP_CASE_STRING(GR_LFBWRITEMODE_Z32);
-        TRAP_CASE_STRING(GR_LFBWRITEMODE_RESERVED5);
-        TRAP_CASE_STRING(GR_LFBWRITEMODE_RESERVED6);
-        TRAP_CASE_STRING(GR_LFBWRITEMODE_RESERVED7);
-        TRAP_CASE_STRING(GR_LFBWRITEMODE_565_DEPTH);
-        TRAP_CASE_STRING(GR_LFBWRITEMODE_555_DEPTH);
-        TRAP_CASE_STRING(GR_LFBWRITEMODE_1555_DEPTH);
-        TRAP_CASE_STRING(GR_LFBWRITEMODE_ZA16);
-        TRAP_CASE_STRING(GR_LFBWRITEMODE_ANY);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_SRCFMT (GrLfbSrcFmt_t src_format)
-{
- switch (src_format) {
-        TRAP_CASE_STRING(GR_LFB_SRC_FMT_565);
-        TRAP_CASE_STRING(GR_LFB_SRC_FMT_555);
-        TRAP_CASE_STRING(GR_LFB_SRC_FMT_1555);
-        TRAP_CASE_STRING(GR_LFB_SRC_FMT_888);
-        TRAP_CASE_STRING(GR_LFB_SRC_FMT_8888);
-        TRAP_CASE_STRING(GR_LFB_SRC_FMT_565_DEPTH);
-        TRAP_CASE_STRING(GR_LFB_SRC_FMT_555_DEPTH);
-        TRAP_CASE_STRING(GR_LFB_SRC_FMT_1555_DEPTH);
-        TRAP_CASE_STRING(GR_LFB_SRC_FMT_ZA16);
-        TRAP_CASE_STRING(GR_LFB_SRC_FMT_RLE16);
-        TRAP_CASE_STRING(GR_LFBWRITEMODE_Z32); /*???*/
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_CRMODE (GrChromaRangeMode_t mode)
-{
- switch (mode) {
-        TRAP_CASE_STRING(GR_CHROMARANGE_DISABLE_EXT);
-        /*TRAP_CASE_STRING(GR_CHROMARANGE_RGB_ALL_EXT); ==GR_CHROMARANGE_DISABLE_EXT*/
-        TRAP_CASE_STRING(GR_CHROMARANGE_ENABLE_EXT);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_PIXFMT (GrPixelFormat_t pixelformat)
-{
- switch (pixelformat) {
-        TRAP_CASE_STRING(GR_PIXFMT_I_8);
-        TRAP_CASE_STRING(GR_PIXFMT_AI_88);
-        TRAP_CASE_STRING(GR_PIXFMT_RGB_565);
-        TRAP_CASE_STRING(GR_PIXFMT_ARGB_1555);
-        TRAP_CASE_STRING(GR_PIXFMT_ARGB_8888);
-        TRAP_CASE_STRING(GR_PIXFMT_AA_2_RGB_565);
-        TRAP_CASE_STRING(GR_PIXFMT_AA_2_ARGB_1555);
-        TRAP_CASE_STRING(GR_PIXFMT_AA_2_ARGB_8888);
-        TRAP_CASE_STRING(GR_PIXFMT_AA_4_RGB_565);
-        TRAP_CASE_STRING(GR_PIXFMT_AA_4_ARGB_1555);
-        TRAP_CASE_STRING(GR_PIXFMT_AA_4_ARGB_8888);
-        TRAP_CASE_STRING(GR_PIXFMT_AA_8_RGB_565);
-        TRAP_CASE_STRING(GR_PIXFMT_AA_8_ARGB_1555);
-        TRAP_CASE_STRING(GR_PIXFMT_AA_8_ARGB_8888);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_STENCILOP (GrStencilOp_t op)
-{
- switch (op) {
-        TRAP_CASE_STRING(GR_STENCILOP_KEEP);
-        TRAP_CASE_STRING(GR_STENCILOP_ZERO);
-        TRAP_CASE_STRING(GR_STENCILOP_REPLACE);
-        TRAP_CASE_STRING(GR_STENCILOP_INCR_CLAMP);
-        TRAP_CASE_STRING(GR_STENCILOP_DECR_CLAMP);
-        TRAP_CASE_STRING(GR_STENCILOP_INVERT);
-        TRAP_CASE_STRING(GR_STENCILOP_INCR_WRAP);
-        TRAP_CASE_STRING(GR_STENCILOP_DECR_WRAP);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_BLENDOP (GrAlphaBlendOp_t op)
-{
- switch (op) {
-        TRAP_CASE_STRING(GR_BLEND_OP_ADD);
-        TRAP_CASE_STRING(GR_BLEND_OP_SUB);
-        TRAP_CASE_STRING(GR_BLEND_OP_REVSUB);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_CU (GrCCUColor_t a)
-{
- switch (a) {
-        TRAP_CASE_STRING(GR_CMBX_ZERO);
-        TRAP_CASE_STRING(GR_CMBX_TEXTURE_ALPHA);
-        TRAP_CASE_STRING(GR_CMBX_ALOCAL);
-        TRAP_CASE_STRING(GR_CMBX_AOTHER);
-        TRAP_CASE_STRING(GR_CMBX_B);
-        TRAP_CASE_STRING(GR_CMBX_CONSTANT_ALPHA);
-        TRAP_CASE_STRING(GR_CMBX_CONSTANT_COLOR);
-        TRAP_CASE_STRING(GR_CMBX_DETAIL_FACTOR);
-        TRAP_CASE_STRING(GR_CMBX_ITALPHA);
-        TRAP_CASE_STRING(GR_CMBX_ITRGB);
-        TRAP_CASE_STRING(GR_CMBX_LOCAL_TEXTURE_ALPHA);
-        TRAP_CASE_STRING(GR_CMBX_LOCAL_TEXTURE_RGB);
-        TRAP_CASE_STRING(GR_CMBX_LOD_FRAC);
-        TRAP_CASE_STRING(GR_CMBX_OTHER_TEXTURE_ALPHA);
-        TRAP_CASE_STRING(GR_CMBX_OTHER_TEXTURE_RGB);
-        TRAP_CASE_STRING(GR_CMBX_TEXTURE_RGB);
-        TRAP_CASE_STRING(GR_CMBX_TMU_CALPHA);
-        TRAP_CASE_STRING(GR_CMBX_TMU_CCOLOR);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_CMBMODE (GrCombineMode_t a_mode)
-{
- switch (a_mode) {
-        TRAP_CASE_STRING(GR_FUNC_MODE_ZERO);
-        TRAP_CASE_STRING(GR_FUNC_MODE_X);
-        TRAP_CASE_STRING(GR_FUNC_MODE_ONE_MINUS_X);
-        TRAP_CASE_STRING(GR_FUNC_MODE_NEGATIVE_X);
-        TRAP_CASE_STRING(GR_FUNC_MODE_X_MINUS_HALF);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_TMU (GrChipID_t tmu)
-{
- switch (tmu) {
-        TRAP_CASE_STRING(GR_TMU0);
-        TRAP_CASE_STRING(GR_TMU1);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_TXDITHER (FxU32 dither)
-{
- switch (dither) {
-        TRAP_CASE_STRING(TX_DITHER_NONE);
-        TRAP_CASE_STRING(TX_DITHER_4x4);
-        TRAP_CASE_STRING(TX_DITHER_ERR);
-        TRAP_NODEFAULT;
- }
-}
-
-const char *TRP_TXCOMPRESS (FxU32 compress)
-{
- switch (compress) {
-        TRAP_CASE_STRING(TX_COMPRESSION_STATISTICAL);
-        TRAP_CASE_STRING(TX_COMPRESSION_HEURISTIC);
-        TRAP_NODEFAULT;
- }
-}
-
-
-
-/****************************************************************************\
-* REAL POINTERS                                                              *
-\****************************************************************************/
-
-/*
-** glide extensions
-*/
-void (FX_CALL *real_grSetNumPendingBuffers) (FxI32 NumPendingBuffers);
-char * (FX_CALL *real_grGetRegistryOrEnvironmentStringExt) (char *theEntry);
-void (FX_CALL *real_grGetGammaTableExt) (FxU32 nentries, FxU32 *red, FxU32 *green, FxU32 *blue);
-void (FX_CALL *real_grChromaRangeModeExt) (GrChromakeyMode_t mode);
-void (FX_CALL *real_grChromaRangeExt) (GrColor_t color, GrColor_t range, GrChromaRangeMode_t match_mode);
-void (FX_CALL *real_grTexChromaModeExt) (GrChipID_t tmu, GrChromakeyMode_t mode);
-void (FX_CALL *real_grTexChromaRangeExt) (GrChipID_t tmu, GrColor_t min, GrColor_t max, GrTexChromakeyMode_t mode);
-
-/* pointcast */
-void (FX_CALL *real_grTexDownloadTableExt) (GrChipID_t tmu, GrTexTable_t type, void *data);
-void (FX_CALL *real_grTexDownloadTablePartialExt) (GrChipID_t tmu, GrTexTable_t type, void *data, int start, int end);
-void (FX_CALL *real_grTexNCCTableExt) (GrChipID_t tmu, GrNCCTable_t table);
-
-/* tbext */
-void (FX_CALL *real_grTextureBufferExt) (GrChipID_t tmu, FxU32 startAddress, GrLOD_t thisLOD, GrLOD_t largeLOD, GrAspectRatio_t aspectRatio, GrTextureFormat_t format, FxU32 odd_even_mask);
-void (FX_CALL *real_grTextureAuxBufferExt) (GrChipID_t tmu, FxU32 startAddress, GrLOD_t thisLOD, GrLOD_t largeLOD, GrAspectRatio_t aspectRatio, GrTextureFormat_t format, FxU32 odd_even_mask);
-void (FX_CALL *real_grAuxBufferExt) (GrBuffer_t buffer);
-
-/* napalm */
-GrContext_t (FX_CALL *real_grSstWinOpenExt) (FxU32 hWnd, GrScreenResolution_t resolution, GrScreenRefresh_t refresh, GrColorFormat_t format, GrOriginLocation_t origin, GrPixelFormat_t pixelformat, int nColBuffers, int nAuxBuffers);
-void (FX_CALL *real_grStencilFuncExt) (GrCmpFnc_t fnc, GrStencil_t ref, GrStencil_t mask);
-void (FX_CALL *real_grStencilMaskExt) (GrStencil_t value);
-void (FX_CALL *real_grStencilOpExt) (GrStencilOp_t stencil_fail, GrStencilOp_t depth_fail, GrStencilOp_t depth_pass);
-void (FX_CALL *real_grLfbConstantStencilExt) (GrStencil_t value);
-void (FX_CALL *real_grBufferClearExt) (GrColor_t color, GrAlpha_t alpha, FxU32 depth, GrStencil_t stencil);
-void (FX_CALL *real_grColorCombineExt) (GrCCUColor_t a, GrCombineMode_t a_mode, GrCCUColor_t b, GrCombineMode_t b_mode, GrCCUColor_t c, FxBool c_invert, GrCCUColor_t d, FxBool d_invert, FxU32 shift, FxBool invert);
-void (FX_CALL *real_grAlphaCombineExt) (GrACUColor_t a, GrCombineMode_t a_mode, GrACUColor_t b, GrCombineMode_t b_mode, GrACUColor_t c, FxBool c_invert, GrACUColor_t d, FxBool d_invert, FxU32 shift, FxBool invert);
-void (FX_CALL *real_grTexColorCombineExt) (GrChipID_t tmu, GrTCCUColor_t a, GrCombineMode_t a_mode, GrTCCUColor_t b, GrCombineMode_t b_mode, GrTCCUColor_t c, FxBool c_invert, GrTCCUColor_t d, FxBool d_invert, FxU32 shift, FxBool invert);
-void (FX_CALL *real_grTexAlphaCombineExt) (GrChipID_t tmu, GrTACUColor_t a, GrCombineMode_t a_mode, GrTACUColor_t b, GrCombineMode_t b_mode, GrTACUColor_t c, FxBool c_invert, GrTACUColor_t d, FxBool d_invert, FxU32 shift, FxBool invert);
-void (FX_CALL *real_grConstantColorValueExt) (GrChipID_t tmu, GrColor_t value);
-void (FX_CALL *real_grColorMaskExt) (FxBool r, FxBool g, FxBool b, FxBool a);
-void (FX_CALL *real_grAlphaBlendFunctionExt) (GrAlphaBlendFnc_t rgb_sf, GrAlphaBlendFnc_t rgb_df, GrAlphaBlendOp_t rgb_op, GrAlphaBlendFnc_t alpha_sf, GrAlphaBlendFnc_t alpha_df, GrAlphaBlendOp_t alpha_op);
-void (FX_CALL *real_grTBufferWriteMaskExt) (FxU32 tmask);
-
-/*
-** texus
-*/
-void (FX_CALL *real_txImgQuantize) (char *dst, char *src, int w, int h, FxU32 format, FxU32 dither);
-void (FX_CALL *real_txMipQuantize) (TxMip *pxMip, TxMip *txMip, int fmt, FxU32 d, FxU32 comp);
-void (FX_CALL *real_txPalToNcc) (GuNccTable *ncc_table, const FxU32 *pal);
-
-
-
-/****************************************************************************\
-* DEBUG HOOKS                                                                *
-\****************************************************************************/
-
-/*
-** rendering functions
-*/
-void FX_CALL trap_grDrawPoint (const void *pt)
-{
-#define FN_NAME "grDrawPoint"
- TRAP_LOG("%s(%p)\n", FN_NAME, pt);
- grDrawPoint(pt);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grDrawLine (const void *v1,
-                              const void *v2)
-{
-#define FN_NAME "grDrawLine"
- TRAP_LOG("%s(%p, %p)\n", FN_NAME, v1, v2);
- grDrawLine(v1, v2);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grDrawTriangle (const void *a,
-                                  const void *b,
-                                  const void *c)
-{
-#define FN_NAME "grDrawTriangle"
- TRAP_LOG("%s(%p, %p, %p)\n", FN_NAME, a, b, c);
- grDrawTriangle(a, b, c);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grVertexLayout (FxU32 param,
-                                  FxI32 offset,
-                                  FxU32 mode)
-{
-#define FN_NAME "grVertexLayout"
- TRAP_LOG("%s(%s, %ld, %s)\n", FN_NAME, TRP_VTX(param), offset, TRP_PARAM(mode));
- grVertexLayout(param, offset, mode);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grDrawVertexArray (FxU32 mode,
-                                     FxU32 Count,
-                                     void  *pointers)
-{
-#define FN_NAME "grDrawVertexArray"
- TRAP_LOG("%s(%s, %lu, %p)\n", FN_NAME, TRP_ARRAY(mode), Count, pointers);
- grDrawVertexArray(mode, Count, pointers);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grDrawVertexArrayContiguous (FxU32 mode,
-                                               FxU32 Count,
-                                               void  *pointers,
-                                               FxU32 stride)
-{
-#define FN_NAME "grDrawVertexArrayContiguous"
- TRAP_LOG("%s(%s, %lu, %p, %lu)\n", FN_NAME, TRP_ARRAY(mode), Count, pointers, stride);
- grDrawVertexArrayContiguous(mode, Count, pointers, stride);
-#undef FN_NAME
-}
-
-/*
-**  Antialiasing Functions
-*/
-void FX_CALL trap_grAADrawTriangle (const void *a,
-                                    const void *b,
-                                    const void *c,
-                                    FxBool     ab_antialias,
-                                    FxBool     bc_antialias,
-                                    FxBool     ca_antialias)
-{
-#define FN_NAME "grAADrawTriangle"
- TRAP_LOG("%s(%p, %p, %p, %s, %s, %s)\n", FN_NAME, a, b, c, TRP_BOOL(ab_antialias), TRP_BOOL(bc_antialias), TRP_BOOL(ca_antialias));
- grAADrawTriangle(a, b, c, ab_antialias, bc_antialias, ca_antialias);
-#undef FN_NAME
-}
-
-/*
-** buffer management
-*/
-void FX_CALL trap_grBufferClear (GrColor_t color,
-                                 GrAlpha_t alpha,
-                                 FxU32     depth)
-{
-#define FN_NAME "grBufferClear"
- TRAP_LOG("%s(%08lx, %02x, %08lx)\n", FN_NAME, color, alpha, depth);
- grBufferClear(color, alpha, depth);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grBufferSwap (FxU32 swap_interval)
-{
-#define FN_NAME "grBufferSwap"
- TRAP_LOG("%s(%lu)\n", FN_NAME, swap_interval);
- grBufferSwap(swap_interval);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grRenderBuffer (GrBuffer_t buffer)
-{
-#define FN_NAME "grRenderBuffer"
- TRAP_LOG("%s(%s)\n", FN_NAME, TRP_BUFFER(buffer));
- grRenderBuffer(buffer);
-#undef FN_NAME
-}
-
-/*
-** error management
-*/
-void FX_CALL trap_grErrorSetCallback (GrErrorCallbackFnc_t fnc)
-{
-#define FN_NAME "grErrorSetCallback"
- TRAP_LOG("%s(%p)\n", FN_NAME, (void *)fnc);
- grErrorSetCallback(fnc);
-#undef FN_NAME
-}
-
-/*
-** SST routines
-*/
-void FX_CALL trap_grFinish (void)
-{
-#define FN_NAME "grFinish"
- TRAP_LOG("%s()\n", FN_NAME);
- grFinish();
-#undef FN_NAME
-}
-
-void FX_CALL trap_grFlush (void)
-{
-#define FN_NAME "grFlush"
- TRAP_LOG("%s()\n", FN_NAME);
- grFlush();
-#undef FN_NAME
-}
-
-GrContext_t FX_CALL trap_grSstWinOpen (FxU32                hWnd,
-                                       GrScreenResolution_t screen_resolution,
-                                       GrScreenRefresh_t    refresh_rate,
-                                       GrColorFormat_t      color_format,
-                                       GrOriginLocation_t   origin_location,
-                                       int                  nColBuffers,
-                                       int                  nAuxBuffers)
-{
-#define FN_NAME "grSstWinOpen"
- GrContext_t rv;
- TRAP_LOG("%s(%08lx, %s, %s, %s, %s, %d, %d)\n", FN_NAME, hWnd, TRP_RESOLUTION(screen_resolution), TRP_REFRESH(refresh_rate), TRP_COLFMT(color_format), TRP_ORIGIN(origin_location), nColBuffers, nAuxBuffers);
- rv = grSstWinOpen(hWnd, screen_resolution, refresh_rate, color_format, origin_location, nColBuffers, nAuxBuffers);
- TRAP_LOG(GOT "%p\n", (void *)rv);
- return rv;
-#undef FN_NAME
-}
-
-FxBool FX_CALL trap_grSstWinClose (GrContext_t context)
-{
-#define FN_NAME "grSstWinClose"
- FxBool rv;
- TRAP_LOG("%s(%p)\n", FN_NAME, (void *)context);
- rv = grSstWinClose(context);
- TRAP_LOG(GOT "%s\n", TRP_BOOL(rv));
- return rv;
-#undef FN_NAME
-}
-
-FxBool FX_CALL trap_grSelectContext (GrContext_t context)
-{
-#define FN_NAME "grSelectContext"
- FxBool rv;
- TRAP_LOG("%s(%p)\n", FN_NAME, (void *)context);
- rv = grSelectContext(context);
- TRAP_LOG(GOT "%s\n", TRP_BOOL(rv));
- return rv;
-#undef FN_NAME
-}
-
-void FX_CALL trap_grSstOrigin (GrOriginLocation_t origin)
-{
-#define FN_NAME "grSstOrigin"
- TRAP_LOG("%s(%s)\n", FN_NAME, TRP_ORIGIN(origin));
- grSstOrigin(origin);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grSstSelect (int which_sst)
-{
-#define FN_NAME "grSstSelect"
- TRAP_LOG("%s(%d)\n", FN_NAME, which_sst);
- grSstSelect(which_sst);
-#undef FN_NAME
-}
-
-/*
-** Glide configuration and special effect maintenance functions
-*/
-void FX_CALL trap_grAlphaBlendFunction (GrAlphaBlendFnc_t rgb_sf,
-                                        GrAlphaBlendFnc_t rgb_df,
-                                        GrAlphaBlendFnc_t alpha_sf,
-                                        GrAlphaBlendFnc_t alpha_df)
-{
-#define FN_NAME "grAlphaBlendFunction"
- TRAP_LOG("%s(%s, %s, %s, %s)\n", FN_NAME, TRP_BLEND(rgb_sf), TRP_BLEND(rgb_df), TRP_BLEND(alpha_sf), TRP_BLEND(alpha_df));
- grAlphaBlendFunction(rgb_sf, rgb_df, alpha_sf, alpha_df);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grAlphaCombine (GrCombineFunction_t function,
-                                  GrCombineFactor_t   factor,
-                                  GrCombineLocal_t    local,
-                                  GrCombineOther_t    other,
-                                  FxBool              invert)
-{
-#define FN_NAME "grAlphaCombine"
- TRAP_LOG("%s(%s, %s, %s, %s, %s)\n", FN_NAME, TRP_CMBFUNC(function), TRP_CMBFACT(factor), TRP_CMBLOCAL(local), TRP_CMBOTHER(other), TRP_BOOL(invert));
- grAlphaCombine(function, factor, local, other, invert);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grAlphaControlsITRGBLighting (FxBool enable)
-{
-#define FN_NAME "grAlphaControlsITRGBLighting"
- TRAP_LOG("%s(%s)\n", FN_NAME, TRP_BOOL(enable));
- grAlphaControlsITRGBLighting(enable);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grAlphaTestFunction (GrCmpFnc_t function)
-{
-#define FN_NAME "grAlphaTestFunction"
- TRAP_LOG("%s(%s)\n", FN_NAME, TRP_CMPFUNC(function));
- grAlphaTestFunction(function);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grAlphaTestReferenceValue (GrAlpha_t value)
-{
-#define FN_NAME "grAlphaTestReferenceValue"
- TRAP_LOG("%s(%02x)\n", FN_NAME, value);
- grAlphaTestReferenceValue(value);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grChromakeyMode (GrChromakeyMode_t mode)
-{
-#define FN_NAME "grChromakeyMode"
- TRAP_LOG("%s(%s)\n", FN_NAME, TRP_CKMODE(mode));
- grChromakeyMode(mode);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grChromakeyValue (GrColor_t value)
-{
-#define FN_NAME "grChromakeyValue"
- TRAP_LOG("%s(%08lx)\n", FN_NAME, value);
- grChromakeyValue(value);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grClipWindow (FxU32 minx,
-                                FxU32 miny,
-                                FxU32 maxx,
-                                FxU32 maxy)
-{
-#define FN_NAME "grClipWindow"
- TRAP_LOG("%s(%lu, %lu, %lu, %lu)\n", FN_NAME, minx, miny, maxx, maxy);
- grClipWindow(minx, miny, maxx, maxy);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grColorCombine (GrCombineFunction_t function,
-                                  GrCombineFactor_t   factor,
-                                  GrCombineLocal_t    local,
-                                  GrCombineOther_t    other,
-                                  FxBool              invert)
-{
-#define FN_NAME "grColorCombine"
- TRAP_LOG("%s(%s, %s, %s, %s, %s)\n", FN_NAME, TRP_CMBFUNC(function), TRP_CMBFACT(factor), TRP_CMBLOCAL(local), TRP_CMBOTHER(other), TRP_BOOL(invert));
- grColorCombine(function, factor, local, other, invert);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grColorMask (FxBool rgb,
-                               FxBool a)
-{
-#define FN_NAME "grColorMask"
- TRAP_LOG("%s(%s, %s)\n", FN_NAME, TRP_BOOL(rgb), TRP_BOOL(a));
- grColorMask(rgb, a);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grCullMode (GrCullMode_t mode)
-{
-#define FN_NAME "grCullMode"
- TRAP_LOG("%s(%s)\n", FN_NAME, TRP_CULLMODE(mode));
- grCullMode(mode);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grConstantColorValue (GrColor_t value)
-{
-#define FN_NAME "grConstantColorValue"
- TRAP_LOG("%s(%08lx)\n", FN_NAME, value);
- grConstantColorValue(value);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grDepthBiasLevel (FxI32 level)
-{
-#define FN_NAME "grDepthBiasLevel"
- TRAP_LOG("%s(%ld)\n", FN_NAME, level);
- grDepthBiasLevel(level);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grDepthBufferFunction (GrCmpFnc_t function)
-{
-#define FN_NAME "grDepthBufferFunction"
- TRAP_LOG("%s(%s)\n", FN_NAME, TRP_CMPFUNC(function));
- grDepthBufferFunction(function);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grDepthBufferMode (GrDepthBufferMode_t mode)
-{
-#define FN_NAME "grDepthBufferMode"
- TRAP_LOG("%s(%s)\n", FN_NAME, TRP_DEPTHMODE(mode));
- grDepthBufferMode(mode);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grDepthMask (FxBool mask)
-{
-#define FN_NAME "grDepthMask"
- TRAP_LOG("%s(%s)\n", FN_NAME, TRP_BOOL(mask));
- grDepthMask(mask);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grDisableAllEffects (void)
-{
-#define FN_NAME "grDisableAllEffects"
- TRAP_LOG("%s()\n", FN_NAME);
- grDisableAllEffects();
-#undef FN_NAME
-}
-
-void FX_CALL trap_grDitherMode (GrDitherMode_t mode)
-{
-#define FN_NAME "grDitherMode"
- TRAP_LOG("%s(%s)\n", FN_NAME, TRP_DITHERMODE(mode));
- grDitherMode(mode);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grFogColorValue (GrColor_t fogcolor)
-{
-#define FN_NAME "grFogColorValue"
- TRAP_LOG("%s(%08lx)\n", FN_NAME, fogcolor);
- grFogColorValue(fogcolor);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grFogMode (GrFogMode_t mode)
-{
-#define FN_NAME "grFogMode"
- TRAP_LOG("%s(%s)\n", FN_NAME, TRP_FOGMODE(mode));
- grFogMode(mode);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grFogTable (const GrFog_t ft[])
-{
-#define FN_NAME "grFogTable"
- TRAP_LOG("%s(%p)\n", FN_NAME, ft);
- grFogTable(ft);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grLoadGammaTable (FxU32 nentries,
-                                    FxU32 *red,
-                                    FxU32 *green,
-                                    FxU32 *blue)
-{
-#define FN_NAME "grLoadGammaTable"
- TRAP_LOG("%s(%lu, %p, %p, %p)\n", FN_NAME, nentries, (void *)red, (void *)green, (void *)blue);
- grLoadGammaTable(nentries, red, green, blue);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grSplash (float x,
-                            float y,
-                            float width,
-                            float height,
-                            FxU32 frame)
-{
-#define FN_NAME "grSplash"
- TRAP_LOG("%s(%f, %f, %f, %f, %lu)\n", FN_NAME, x, y, width, height, frame);
- grSplash(x, y, width, height, frame);
-#undef FN_NAME
-}
-
-FxU32 FX_CALL trap_grGet (FxU32 pname,
-                          FxU32 plength,
-                          FxI32 *params)
-{
-#define FN_NAME "grGet"
- FxU32 rv, i;
- TRAP_LOG("%s(%s, %lu, %p)\n", FN_NAME, TRP_GETNAME(pname), plength, (void *)params);
- rv = grGet(pname, plength, params);
- TRAP_LOG(GOT "[");
- for (i = 0; i < (rv/sizeof(FxI32)); i++) {
-     TRAP_LOG("%s%ld", i ? ", " : "", params[i]);
- }
- TRAP_LOG("]\n");
- return rv;
-#undef FN_NAME
-}
-
-const char *FX_CALL trap_grGetString (FxU32 pname)
-{
-#define FN_NAME "grGetString"
- const char *rv;
- TRAP_LOG("%s(%s)\n", FN_NAME, TRP_GETSTRING(pname));
- rv = grGetString(pname);
- if (rv) {
-    TRAP_LOG(GOT "\"%s\"\n", rv);
- } else {
-    TRAP_LOG(GOT "NULL\n");
- }
- return rv;
-#undef FN_NAME
-}
-
-FxI32 FX_CALL trap_grQueryResolutions (const GrResolution *resTemplate,
-                                       GrResolution       *output)
-{
-#define FN_NAME "grQueryResolutions"
- FxI32 rv;
- TRAP_LOG("%s(%p, %p)\n", FN_NAME, (void *)resTemplate, (void *)output);
- rv = grQueryResolutions(resTemplate, output);
- TRAP_LOG(GOT "%ld\n", rv);
- return rv;
-#undef FN_NAME
-}
-
-FxBool FX_CALL trap_grReset (FxU32 what)
-{
-#define FN_NAME "grReset"
- FxBool rv;
- TRAP_LOG("%s(%s)\n", FN_NAME, TRP_GETNAME(what));
- rv = grReset(what);
- TRAP_LOG(GOT "%s\n", TRP_BOOL(rv));
- return rv;
-#undef FN_NAME
-}
-
-GrProc FX_CALL trap_grGetProcAddress (char *procName)
-{
-#define FN_NAME "grGetProcAddress"
- GrProc rv;
- TRAP_LOG("%s(%s)\n", FN_NAME, procName);
- rv = grGetProcAddress(procName);
- TRAP_LOG(GOT "%p\n", (void *)rv);
- return rv;
-#undef FN_NAME
-}
-
-void FX_CALL trap_grEnable (GrEnableMode_t mode)
-{
-#define FN_NAME "grEnable"
- TRAP_LOG("%s(%s)\n", FN_NAME, TRP_ENABLE(mode));
- grEnable(mode);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grDisable (GrEnableMode_t mode)
-{
-#define FN_NAME "grDisable"
- TRAP_LOG("%s(%s)\n", FN_NAME, TRP_ENABLE(mode));
- grDisable(mode);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grCoordinateSpace (GrCoordinateSpaceMode_t mode)
-{
-#define FN_NAME "grCoordinateSpace"
- TRAP_LOG("%s(%s)\n", FN_NAME, TRP_COORD(mode));
- grCoordinateSpace(mode);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grDepthRange (FxFloat n,
-                                FxFloat f)
-{
-#define FN_NAME "grDepthRange"
- TRAP_LOG("%s(%f, %f)\n", FN_NAME, n, f);
- grDepthRange(n, f);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grStippleMode (GrStippleMode_t mode)
-{
-#define FN_NAME "grStippleMode"
- TRAP_LOG("%s(%s)\n", FN_NAME, TRP_STIPPLEMODE(mode));
- grStippleMode(mode); /* some Glide libs don't have it; not used anyway */
-#undef FN_NAME
-}
-
-void FX_CALL trap_grStipplePattern (GrStipplePattern_t mode)
-{
-#define FN_NAME "grStipplePattern"
- TRAP_LOG("%s(%08lx)\n", FN_NAME, mode);
- grStipplePattern(mode); /* some Glide libs don't have it; not used anyway */
-#undef FN_NAME
-}
-
-void FX_CALL trap_grViewport (FxI32 x,
-                              FxI32 y,
-                              FxI32 width,
-                              FxI32 height)
-{
-#define FN_NAME "grViewport"
- TRAP_LOG("%s(%ld, %ld, %ld, %ld)\n", FN_NAME, x, y, width, height);
- grViewport(x, y, width, height);
-#undef FN_NAME
-}
-
-/*
-** texture mapping control functions
-*/
-FxU32 FX_CALL trap_grTexCalcMemRequired (GrLOD_t           lodmin,
-                                         GrLOD_t           lodmax,
-                                         GrAspectRatio_t   aspect,
-                                         GrTextureFormat_t fmt)
-{
-#define FN_NAME "grTexCalcMemRequired"
- FxU32 rv;
- TRAP_LOG("%s(%s, %s, %s, %s)\n", FN_NAME, TRP_LODLEVEL(lodmin), TRP_LODLEVEL(lodmax), TRP_ASPECTRATIO(aspect), TRP_TEXFMT(fmt));
- rv = grTexCalcMemRequired(lodmin, lodmax, aspect, fmt);
- TRAP_LOG(GOT "%lu\n", rv);
- return rv;
-#undef FN_NAME
-}
-
-FxU32 FX_CALL trap_grTexTextureMemRequired (FxU32     evenOdd,
-                                            GrTexInfo *info)
-{
-#define FN_NAME "grTexTextureMemRequired"
- FxU32 rv;
- TRAP_LOG("%s(%s, %p)\n", FN_NAME, TRP_EVENODD(evenOdd), (void *)info);
- rv = grTexTextureMemRequired(evenOdd, info);
- TRAP_LOG(GOT "%lu\n", rv);
- return rv;
-#undef FN_NAME
-}
-
-FxU32 FX_CALL trap_grTexMinAddress (GrChipID_t tmu)
-{
-#define FN_NAME "grTexMinAddress"
- FxU32 rv;
- TRAP_LOG("%s(%s)\n", FN_NAME, TRP_TMU(tmu));
- rv = grTexMinAddress(tmu);
- TRAP_LOG(GOT "%lu\n", rv);
- return rv;
-#undef FN_NAME
-}
-
-FxU32 FX_CALL trap_grTexMaxAddress (GrChipID_t tmu)
-{
-#define FN_NAME "grTexMaxAddress"
- FxU32 rv;
- TRAP_LOG("%s(%s)\n", FN_NAME, TRP_TMU(tmu));
- rv = grTexMaxAddress(tmu);
- TRAP_LOG(GOT "%lu\n", rv);
- return rv;
-#undef FN_NAME
-}
-
-void FX_CALL trap_grTexNCCTable (GrNCCTable_t table)
-{
-#define FN_NAME "grTexNCCTable"
- TRAP_LOG("%s(%s)\n", FN_NAME, TRP_NCC(table));
- grTexNCCTable(table);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grTexSource (GrChipID_t tmu,
-                               FxU32      startAddress,
-                               FxU32      evenOdd,
-                               GrTexInfo  *info)
-{
-#define FN_NAME "grTexSource"
- TRAP_LOG("%s(%s, %08lx, %s, %p)\n", FN_NAME, TRP_TMU(tmu), startAddress, TRP_EVENODD(evenOdd), (void *)info);
- grTexSource(tmu, startAddress, evenOdd, info);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grTexClampMode (GrChipID_t           tmu,
-                                  GrTextureClampMode_t s_clampmode,
-                                  GrTextureClampMode_t t_clampmode)
-{
-#define FN_NAME "grTexClampMode"
- TRAP_LOG("%s(%s, %s, %s)\n", FN_NAME, TRP_TMU(tmu), TRP_CLAMPMODE(s_clampmode), TRP_CLAMPMODE(t_clampmode));
- grTexClampMode(tmu, s_clampmode, t_clampmode);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grTexCombine (GrChipID_t          tmu,
-                                GrCombineFunction_t rgb_function,
-                                GrCombineFactor_t   rgb_factor,
-                                GrCombineFunction_t alpha_function,
-                                GrCombineFactor_t   alpha_factor,
-                                FxBool              rgb_invert,
-                                FxBool              alpha_invert)
-{
-#define FN_NAME "grTexCombine"
- TRAP_LOG("%s(%s, %s, %s, %s, %s, %s, %s)\n", FN_NAME, TRP_TMU(tmu), TRP_CMBFUNC(rgb_function), TRP_CMBFACT(rgb_factor), TRP_CMBFUNC(alpha_function), TRP_CMBFACT(alpha_factor), TRP_BOOL(rgb_invert), TRP_BOOL(alpha_invert));
- grTexCombine(tmu, rgb_function, rgb_factor, alpha_function, alpha_factor, rgb_invert, alpha_invert);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grTexDetailControl (GrChipID_t tmu,
-                                      int        lod_bias,
-                                      FxU8       detail_scale,
-                                      float      detail_max)
-{
-#define FN_NAME "grTexDetailControl"
- TRAP_LOG("%s(%s, %u, %d, %f)\n", FN_NAME, TRP_TMU(tmu), lod_bias, detail_scale, detail_max);
- grTexDetailControl(tmu, lod_bias, detail_scale, detail_max);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grTexFilterMode (GrChipID_t            tmu,
-                                   GrTextureFilterMode_t minfilter_mode,
-                                   GrTextureFilterMode_t magfilter_mode)
-{
-#define FN_NAME "grTexFilterMode"
- TRAP_LOG("%s(%s, %s, %s)\n", FN_NAME, TRP_TMU(tmu), TRP_TEXFILTER(minfilter_mode), TRP_TEXFILTER(magfilter_mode));
- grTexFilterMode(tmu, minfilter_mode, magfilter_mode);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grTexLodBiasValue (GrChipID_t tmu,
-                                     float      bias)
-{
-#define FN_NAME "grTexLodBiasValue"
- TRAP_LOG("%s(%s, %f)\n", FN_NAME, TRP_TMU(tmu), bias);
- grTexLodBiasValue(tmu, bias);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grTexDownloadMipMap (GrChipID_t tmu,
-                                       FxU32      startAddress,
-                                       FxU32      evenOdd,
-                                       GrTexInfo  *info)
-{
-#define FN_NAME "grTexDownloadMipMap"
- TRAP_LOG("%s(%s, %08lx, %s, %p)\n", FN_NAME, TRP_TMU(tmu), startAddress, TRP_EVENODD(evenOdd), (void *)info);
- grTexDownloadMipMap(tmu, startAddress, evenOdd, info);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grTexDownloadMipMapLevel (GrChipID_t        tmu,
-                                            FxU32             startAddress,
-                                            GrLOD_t           thisLod,
-                                            GrLOD_t           largeLod,
-                                            GrAspectRatio_t   aspectRatio,
-                                            GrTextureFormat_t format,
-                                            FxU32             evenOdd,
-                                            void              *data)
-{
-#define FN_NAME "grTexDownloadMipMapLevel"
- TRAP_LOG("%s(%s, %08lx, %s, %s, %s, %s, %s, %p)\n", FN_NAME, TRP_TMU(tmu), startAddress, TRP_LODLEVEL(thisLod), TRP_LODLEVEL(largeLod), TRP_ASPECTRATIO(aspectRatio), TRP_TEXFMT(format), TRP_EVENODD(evenOdd), data);
- grTexDownloadMipMapLevel(tmu, startAddress, thisLod, largeLod, aspectRatio, format, evenOdd, data);
-#undef FN_NAME
-}
-
-FxBool FX_CALL trap_grTexDownloadMipMapLevelPartial (GrChipID_t        tmu,
-                                                     FxU32             startAddress,
-                                                     GrLOD_t           thisLod,
-                                                     GrLOD_t           largeLod,
-                                                     GrAspectRatio_t   aspectRatio,
-                                                     GrTextureFormat_t format,
-                                                     FxU32             evenOdd,
-                                                     void              *data,
-                                                     int               start,
-                                                     int               end)
-{
-#define FN_NAME "grTexDownloadMipMapLevelPartial"
- FxBool rv;
- TRAP_LOG("%s(%s, %08lx, %s, %s, %s, %s, %s, %p, %d, %d)\n", FN_NAME, TRP_TMU(tmu), startAddress, TRP_LODLEVEL(thisLod), TRP_LODLEVEL(largeLod), TRP_ASPECTRATIO(aspectRatio), TRP_TEXFMT(format), TRP_EVENODD(evenOdd), data, start, end);
- rv = grTexDownloadMipMapLevelPartial(tmu, startAddress, thisLod, largeLod, aspectRatio, format, evenOdd, data, start, end);
- TRAP_LOG(GOT "%s\n", TRP_BOOL(rv));
- return rv;
-#undef FN_NAME
-}
-
-void FX_CALL trap_grTexDownloadTable (GrTexTable_t type,
-                                      void         *data)
-{
-#define FN_NAME "grTexDownloadTable"
- TRAP_LOG("%s(%s, %p)\n", FN_NAME, TRP_TABLE(type), data);
- grTexDownloadTable(type, data);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grTexDownloadTablePartial (GrTexTable_t type,
-                                             void         *data,
-                                             int          start,
-                                             int          end)
-{
-#define FN_NAME "grTexDownloadTablePartial"
- TRAP_LOG("%s(%s, %p, %d, %d)\n", FN_NAME, TRP_TABLE(type), data, start, end);
- grTexDownloadTablePartial(type, data, start, end);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grTexMipMapMode (GrChipID_t     tmu,
-                                   GrMipMapMode_t mode,
-                                   FxBool         lodBlend)
-{
-#define FN_NAME "grTexMipMapMode"
- TRAP_LOG("%s(%s, %s, %s)\n", FN_NAME, TRP_TMU(tmu), TRP_MIPMODE(mode), TRP_BOOL(lodBlend));
- grTexMipMapMode(tmu, mode, lodBlend);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grTexMultibase (GrChipID_t tmu,
-                                  FxBool     enable)
-{
-#define FN_NAME "grTexMultibase"
- TRAP_LOG("%s(%s, %s)\n", FN_NAME, TRP_TMU(tmu), TRP_BOOL(enable));
- grTexMultibase(tmu, enable);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grTexMultibaseAddress (GrChipID_t       tmu,
-                                         GrTexBaseRange_t range,
-                                         FxU32            startAddress,
-                                         FxU32            evenOdd,
-                                         GrTexInfo        *info)
-{
-#define FN_NAME "grTexMultibaseAddress"
- TRAP_LOG("%s(%s, %s, %08lx, %s, %p)\n", FN_NAME, TRP_TMU(tmu), TRP_TEXBASERANGE(range), startAddress, TRP_EVENODD(evenOdd), (void *)info);
- grTexMultibaseAddress(tmu, range, startAddress, evenOdd, info);
-#undef FN_NAME
-}
-
-/*
-** linear frame buffer functions
-*/
-FxBool FX_CALL trap_grLfbLock (GrLock_t           type,
-                               GrBuffer_t         buffer,
-                               GrLfbWriteMode_t   writeMode,
-                               GrOriginLocation_t origin,
-                               FxBool             pixelPipeline,
-                               GrLfbInfo_t        *info)
-{
-#define FN_NAME "grLfbLock"
- FxBool rv;
- TRAP_LOG("%s(%s, %s, %s, %s, %s, %p)\n", FN_NAME, TRP_LOCKTYPE(type), TRP_BUFFER(buffer), TRP_WRITEMODE(writeMode), TRP_ORIGIN(origin), TRP_BOOL(pixelPipeline), (void *)info);
- rv = grLfbLock(type, buffer, writeMode, origin, pixelPipeline, info);
- TRAP_LOG(GOT "%s\n", TRP_BOOL(rv));
- return rv;
-#undef FN_NAME
-}
-
-FxBool FX_CALL trap_grLfbUnlock (GrLock_t   type,
-                                 GrBuffer_t buffer)
-{
-#define FN_NAME "grLfbUnlock"
- FxBool rv;
- TRAP_LOG("%s(%s, %s)\n", FN_NAME, TRP_LOCKTYPE(type), TRP_BUFFER(buffer));
- rv = grLfbUnlock(type, buffer);
- TRAP_LOG(GOT "%s\n", TRP_BOOL(rv));
- return rv;
-#undef FN_NAME
-}
-
-void FX_CALL trap_grLfbConstantAlpha (GrAlpha_t alpha)
-{
-#define FN_NAME "grLfbConstantAlpha"
- TRAP_LOG("%s(%02x)\n", FN_NAME, alpha);
- grLfbConstantAlpha(alpha);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grLfbConstantDepth (FxU32 depth)
-{
-#define FN_NAME "grLfbConstantDepth"
- TRAP_LOG("%s(%08lx)\n", FN_NAME, depth);
- grLfbConstantDepth(depth);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grLfbWriteColorSwizzle (FxBool swizzleBytes,
-                                          FxBool swapWords)
-{
-#define FN_NAME "grLfbWriteColorSwizzle"
- TRAP_LOG("%s(%s, %s)\n", FN_NAME, TRP_BOOL(swizzleBytes), TRP_BOOL(swapWords));
- grLfbWriteColorSwizzle(swizzleBytes, swapWords);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grLfbWriteColorFormat (GrColorFormat_t colorFormat)
-{
-#define FN_NAME "grLfbWriteColorFormat"
- TRAP_LOG("%s(%s)\n", FN_NAME, TRP_COLFMT(colorFormat));
- grLfbWriteColorFormat(colorFormat);
-#undef FN_NAME
-}
-
-FxBool FX_CALL trap_grLfbWriteRegion (GrBuffer_t    dst_buffer,
-                                      FxU32         dst_x,
-                                      FxU32         dst_y,
-                                      GrLfbSrcFmt_t src_format,
-                                      FxU32         src_width,
-                                      FxU32         src_height,
-                                      FxBool        pixelPipeline,
-                                      FxI32         src_stride,
-                                      void          *src_data)
-{
-#define FN_NAME "grLfbWriteRegion"
- FxBool rv;
- TRAP_LOG("%s(%s, %lu, %lu, %s, %lu, %lu, %s, %ld, %p)\n", FN_NAME, TRP_BUFFER(dst_buffer), dst_x, dst_y, TRP_SRCFMT(src_format), src_width, src_height, TRP_BOOL(pixelPipeline), src_stride, src_data);
- rv = grLfbWriteRegion(dst_buffer, dst_x, dst_y, src_format, src_width, src_height, pixelPipeline, src_stride, src_data);
- TRAP_LOG(GOT "%s\n", TRP_BOOL(rv));
- return rv;
-#undef FN_NAME
-}
-
-FxBool FX_CALL trap_grLfbReadRegion (GrBuffer_t src_buffer,
-                                     FxU32      src_x,
-                                     FxU32      src_y,
-                                     FxU32      src_width,
-                                     FxU32      src_height,
-                                     FxU32      dst_stride,
-                                     void       *dst_data)
-{
-#define FN_NAME "grLfbReadRegion"
- FxBool rv;
- TRAP_LOG("%s(%s, %lu, %lu, %lu, %lu, %ld, %p)\n", FN_NAME, TRP_BUFFER(src_buffer), src_x, src_y, src_width, src_height, dst_stride, dst_data);
- rv = grLfbReadRegion(src_buffer, src_x, src_y, src_width, src_height, dst_stride, dst_data);
- TRAP_LOG(GOT "%s\n", TRP_BOOL(rv));
- return rv;
-#undef FN_NAME
-}
-
-/*
-** glide management functions
-*/
-void FX_CALL trap_grGlideInit (void)
-{
-#define FN_NAME "grGlideInit"
- TRAP_LOG("%s()\n", FN_NAME);
- grGlideInit();
-#undef FN_NAME
-}
-
-void FX_CALL trap_grGlideShutdown (void)
-{
-#define FN_NAME "grGlideShutdown"
- TRAP_LOG("%s()\n", FN_NAME);
- grGlideShutdown();
-#undef FN_NAME
-}
-
-void FX_CALL trap_grGlideGetState (void *state)
-{
-#define FN_NAME "grGlideGetState"
- TRAP_LOG("%s(%p)\n", FN_NAME, state);
- grGlideGetState(state);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grGlideSetState (const void *state)
-{
-#define FN_NAME "grGlideSetState"
- TRAP_LOG("%s(%p)\n", FN_NAME, state);
- grGlideSetState(state);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grGlideGetVertexLayout (void *layout)
-{
-#define FN_NAME "grGlideGetVertexLayout"
- TRAP_LOG("%s(%p)\n", FN_NAME, layout);
- grGlideGetVertexLayout(layout);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grGlideSetVertexLayout (const void *layout)
-{
-#define FN_NAME "grGlideSetVertexLayout"
- TRAP_LOG("%s(%p)\n", FN_NAME, layout);
- grGlideSetVertexLayout(layout);
-#undef FN_NAME
-}
-
-/*
-** glide utility functions
-*/
-void FX_CALL trap_guGammaCorrectionRGB (FxFloat red,
-                                        FxFloat green,
-                                        FxFloat blue)
-{
-#define FN_NAME "guGammaCorrectionRGB"
- TRAP_LOG("%s(%f, %f, %f)\n", FN_NAME, red, green, blue);
- guGammaCorrectionRGB(red, green, blue);
-#undef FN_NAME
-}
-
-float FX_CALL trap_guFogTableIndexToW (int i)
-{
-#define FN_NAME "guFogTableIndexToW"
- float rv;
- TRAP_LOG("%s(%d)\n", FN_NAME, i);
- rv = guFogTableIndexToW(i);
- TRAP_LOG(GOT "%f\n", rv);
- return rv;
-#undef FN_NAME
-}
-
-void FX_CALL trap_guFogGenerateExp (GrFog_t *fogtable,
-                                    float   density)
-{
-#define FN_NAME "guFogGenerateExp"
- TRAP_LOG("%s(%p, %f)\n", FN_NAME, fogtable, density);
- guFogGenerateExp(fogtable, density);
-#undef FN_NAME
-}
-
-void FX_CALL trap_guFogGenerateExp2 (GrFog_t *fogtable,
-                                     float   density)
-{
-#define FN_NAME "guFogGenerateExp2"
- TRAP_LOG("%s(%p, %f)\n", FN_NAME, fogtable, density);
- guFogGenerateExp2(fogtable, density);
-#undef FN_NAME
-}
-
-void FX_CALL trap_guFogGenerateLinear (GrFog_t *fogtable,
-                                       float   nearZ,
-                                       float   farZ)
-{
-#define FN_NAME "guFogGenerateLinear"
- TRAP_LOG("%s(%p, %f, %f)\n", FN_NAME, fogtable, nearZ, farZ);
- guFogGenerateLinear(fogtable, nearZ, farZ);
-#undef FN_NAME
-}
-
-/*
-** glide extensions
-*/
-void FX_CALL trap_grSetNumPendingBuffers (FxI32 NumPendingBuffers)
-{
-#define FN_NAME "grSetNumPendingBuffers"
- TRAP_LOG("%s(%ld)\n", FN_NAME, NumPendingBuffers);
- assert(real_grSetNumPendingBuffers);
- (*real_grSetNumPendingBuffers)(NumPendingBuffers);
-#undef FN_NAME
-}
-
-char *FX_CALL trap_grGetRegistryOrEnvironmentStringExt (char *theEntry)
-{
-#define FN_NAME "grGetRegistryOrEnvironmentStringExt"
- char *rv;
- TRAP_LOG("%s(\"%s\")\n", FN_NAME, theEntry);
- assert(real_grGetRegistryOrEnvironmentStringExt);
- rv = (*real_grGetRegistryOrEnvironmentStringExt)(theEntry);
- if (rv) {
-    TRAP_LOG(GOT "\"%s\"\n", rv);
- } else {
-    TRAP_LOG(GOT "NULL\n");
- }
- return rv;
-#undef FN_NAME
-}
-
-void FX_CALL trap_grGetGammaTableExt (FxU32 nentries,
-                                      FxU32 *red,
-                                      FxU32 *green,
-                                      FxU32 *blue)
-{
-#define FN_NAME "grGetGammaTableExt"
- TRAP_LOG("%s(%lu, %p, %p, %p)\n", FN_NAME, nentries, (void *)red, (void *)green, (void *)blue);
- assert(real_grGetGammaTableExt);
- (*real_grGetGammaTableExt)(nentries, red, green, blue);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grChromaRangeModeExt (GrChromakeyMode_t mode)
-{
-#define FN_NAME "grChromaRangeModeExt"
- TRAP_LOG("%s(%s)\n", FN_NAME, TRP_CKMODE(mode));
- assert(real_grChromaRangeModeExt);
- (*real_grChromaRangeModeExt)(mode);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grChromaRangeExt (GrColor_t           color,
-                                    GrColor_t           range,
-                                    GrChromaRangeMode_t match_mode)
-{
-#define FN_NAME "grChromaRangeExt"
- TRAP_LOG("%s(%08lx, %08lx, %s)\n", FN_NAME, color, range, TRP_CRMODE(match_mode));
- assert(real_grChromaRangeExt);
- (*real_grChromaRangeExt)(color, range, match_mode);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grTexChromaModeExt (GrChipID_t        tmu,
-                                      GrChromakeyMode_t mode)
-{
-#define FN_NAME "grTexChromaModeExt"
- TRAP_LOG("%s(%s, %s)\n", FN_NAME, TRP_TMU(tmu), TRP_CKMODE(mode));
- assert(real_grTexChromaModeExt);
- (*real_grTexChromaModeExt)(tmu, mode);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grTexChromaRangeExt (GrChipID_t           tmu,
-                                       GrColor_t            min,
-                                       GrColor_t            max,
-                                       GrTexChromakeyMode_t mode)
-{
-#define FN_NAME "grTexChromaRangeExt"
- TRAP_LOG("%s(%s, %08lx, %08lx, %s)\n", FN_NAME, TRP_TMU(tmu), min, max, TRP_CRMODE(mode));
- assert(real_grTexChromaRangeExt);
- (*real_grTexChromaRangeExt)(tmu, min, max, mode);
-#undef FN_NAME
-}
-
-        /* pointcast */
-void FX_CALL trap_grTexDownloadTableExt (GrChipID_t   tmu,
-                                         GrTexTable_t type,
-                                         void         *data)
-{
-#define FN_NAME "grTexDownloadTableExt"
- TRAP_LOG("%s(%s, %s, %p)\n", FN_NAME, TRP_TMU(tmu), TRP_TABLE(type), data);
- assert(real_grTexDownloadTableExt);
- (*real_grTexDownloadTableExt)(tmu, type, data);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grTexDownloadTablePartialExt (GrChipID_t   tmu,
-                                                GrTexTable_t type,
-                                                void         *data,
-                                                int          start,
-                                                int          end)
-{
-#define FN_NAME "grTexDownloadTablePartialExt"
- TRAP_LOG("%s(%s, %s, %p, %d, %d)\n", FN_NAME, TRP_TMU(tmu), TRP_TABLE(type), data, start, end);
- assert(real_grTexDownloadTablePartialExt);
- (*real_grTexDownloadTablePartialExt)(tmu, type, data, start, end);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grTexNCCTableExt (GrChipID_t   tmu,
-                                    GrNCCTable_t table)
-{
-#define FN_NAME "grTexNCCTableExt"
- TRAP_LOG("%s(%s, %s)\n", FN_NAME, TRP_TMU(tmu), TRP_NCC(table));
- assert(real_grTexNCCTableExt);
- (*real_grTexNCCTableExt)(tmu, table);
-#undef FN_NAME
-}
-
-        /* tbext */
-void FX_CALL trap_grTextureBufferExt (GrChipID_t        tmu,
-                                      FxU32             startAddress,
-                                      GrLOD_t           thisLOD,
-                                      GrLOD_t           largeLOD,
-                                      GrAspectRatio_t   aspectRatio,
-                                      GrTextureFormat_t format,
-                                      FxU32             odd_even_mask)
-{
-#define FN_NAME "grTextureBufferExt"
- TRAP_LOG("%s(%s, %08lx, %s, %s, %s, %s, %s)\n", FN_NAME, TRP_TMU(tmu), startAddress, TRP_LODLEVEL(thisLOD), TRP_LODLEVEL(largeLOD), TRP_ASPECTRATIO(aspectRatio), TRP_TEXFMT(format), TRP_EVENODD(odd_even_mask));
- assert(real_grTextureBufferExt);
- (*real_grTextureBufferExt)(tmu, startAddress, thisLOD, largeLOD, aspectRatio, format, odd_even_mask);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grTextureAuxBufferExt (GrChipID_t        tmu,
-                                         FxU32             startAddress,
-                                         GrLOD_t           thisLOD,
-                                         GrLOD_t           largeLOD,
-                                         GrAspectRatio_t   aspectRatio,
-                                         GrTextureFormat_t format,
-                                         FxU32             odd_even_mask)
-{
-#define FN_NAME "grTextureAuxBufferExt"
- TRAP_LOG("%s(%s, %08lx, %s, %s, %s, %s, %s)\n", FN_NAME, TRP_TMU(tmu), startAddress, TRP_LODLEVEL(thisLOD), TRP_LODLEVEL(largeLOD), TRP_ASPECTRATIO(aspectRatio), TRP_TEXFMT(format), TRP_EVENODD(odd_even_mask));
- assert(real_grTextureAuxBufferExt);
- (*real_grTextureAuxBufferExt)(tmu, startAddress, thisLOD, largeLOD, aspectRatio, format, odd_even_mask);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grAuxBufferExt (GrBuffer_t buffer)
-{
-#define FN_NAME "grAuxBufferExt"
- TRAP_LOG("%s(%s)\n", FN_NAME, TRP_BUFFER(buffer));
- assert(real_grAuxBufferExt);
- (*real_grAuxBufferExt)(buffer);
-#undef FN_NAME
-}
-
-        /* napalm */
-GrContext_t FX_CALL trap_grSstWinOpenExt (FxU32                hWnd,
-                                          GrScreenResolution_t resolution,
-                                          GrScreenRefresh_t    refresh,
-                                          GrColorFormat_t      format,
-                                          GrOriginLocation_t   origin,
-                                          GrPixelFormat_t      pixelformat,
-                                          int                  nColBuffers,
-                                          int                  nAuxBuffers)
-{
-#define FN_NAME "grSstWinOpenExt"
- GrContext_t rv;
- TRAP_LOG("%s(%08lx, %s, %s, %s, %s, %s, %d, %d)\n", FN_NAME, hWnd, TRP_RESOLUTION(resolution), TRP_REFRESH(refresh), TRP_COLFMT(format), TRP_ORIGIN(origin), TRP_PIXFMT(pixelformat), nColBuffers, nAuxBuffers);
- assert(real_grSstWinOpenExt);
- rv = (*real_grSstWinOpenExt)(hWnd, resolution, refresh, format, origin, pixelformat, nColBuffers, nAuxBuffers);
- TRAP_LOG(GOT "%p\n", (void *)rv);
- return rv;
-#undef FN_NAME
-}
-
-void FX_CALL trap_grStencilFuncExt (GrCmpFnc_t  fnc,
-                                    GrStencil_t ref,
-                                    GrStencil_t mask)
-{
-#define FN_NAME "grStencilFuncExt"
- TRAP_LOG("%s(%s, %02x, %02x)\n", FN_NAME, TRP_CMPFUNC(fnc), ref, mask);
- assert(real_grStencilFuncExt);
- (*real_grStencilFuncExt)(fnc, ref, mask);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grStencilMaskExt (GrStencil_t value)
-{
-#define FN_NAME "grStencilMaskExt"
- TRAP_LOG("%s(%02x)\n", FN_NAME, value);
- assert(real_grStencilMaskExt);
- (*real_grStencilMaskExt)(value);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grStencilOpExt (GrStencilOp_t stencil_fail,
-                                  GrStencilOp_t depth_fail,
-                                  GrStencilOp_t depth_pass)
-{
-#define FN_NAME "grStencilOpExt"
- TRAP_LOG("%s(%s, %s, %s)\n", FN_NAME, TRP_STENCILOP(stencil_fail), TRP_STENCILOP(depth_fail), TRP_STENCILOP(depth_pass));
- assert(real_grStencilOpExt);
- (*real_grStencilOpExt)(stencil_fail, depth_fail, depth_pass);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grLfbConstantStencilExt (GrStencil_t value)
-{
-#define FN_NAME "grLfbConstantStencilExt"
- TRAP_LOG("%s(%02x)\n", FN_NAME, value);
- assert(real_grLfbConstantStencilExt);
- (*real_grLfbConstantStencilExt)(value);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grBufferClearExt (GrColor_t   color,
-                                    GrAlpha_t   alpha,
-                                    FxU32       depth,
-                                    GrStencil_t stencil)
-{
-#define FN_NAME "grBufferClearExt"
- TRAP_LOG("%s(%08lx, %02x, %08lx, %02x)\n", FN_NAME, color, alpha, depth, stencil);
- assert(real_grBufferClearExt);
- (*real_grBufferClearExt)(color, alpha, depth, stencil);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grColorCombineExt (GrCCUColor_t    a,
-                                     GrCombineMode_t a_mode,
-                                     GrCCUColor_t    b,
-                                     GrCombineMode_t b_mode,
-                                     GrCCUColor_t    c,
-                                     FxBool          c_invert,
-                                     GrCCUColor_t    d,
-                                     FxBool          d_invert,
-                                     FxU32           shift,
-                                     FxBool          invert)
-{
-#define FN_NAME "grColorCombineExt"
- TRAP_LOG("%s(%s, %s, %s, %s, %s, %s, %s, %s, %lu, %s)\n", FN_NAME, TRP_CU(a), TRP_CMBMODE(a_mode), TRP_CU(b), TRP_CMBMODE(b_mode), TRP_CU(c), TRP_BOOL(c_invert), TRP_CU(d), TRP_BOOL(d_invert), shift, TRP_BOOL(invert));
- assert(real_grColorCombineExt);
- (*real_grColorCombineExt)(a, a_mode, b, b_mode, c, c_invert, d, d_invert, shift, invert);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grAlphaCombineExt (GrACUColor_t    a,
-                                     GrCombineMode_t a_mode,
-                                     GrACUColor_t    b,
-                                     GrCombineMode_t b_mode,
-                                     GrACUColor_t    c,
-                                     FxBool          c_invert,
-                                     GrACUColor_t    d,
-                                     FxBool          d_invert,
-                                     FxU32           shift,
-                                     FxBool          invert)
-{
-#define FN_NAME "grAlphaCombineExt"
- TRAP_LOG("%s(%s, %s, %s, %s, %s, %s, %s, %s, %lu, %s)\n", FN_NAME, TRP_CU(a), TRP_CMBMODE(a_mode), TRP_CU(b), TRP_CMBMODE(b_mode), TRP_CU(c), TRP_BOOL(c_invert), TRP_CU(d), TRP_BOOL(d_invert), shift, TRP_BOOL(invert));
- assert(real_grAlphaCombineExt);
- (*real_grAlphaCombineExt)(a, a_mode, b, b_mode, c, c_invert, d, d_invert, shift, invert);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grTexColorCombineExt (GrChipID_t      tmu,
-                                        GrTCCUColor_t   a,
-                                        GrCombineMode_t a_mode,
-                                        GrTCCUColor_t   b,
-                                        GrCombineMode_t b_mode,
-                                        GrTCCUColor_t   c,
-                                        FxBool          c_invert,
-                                        GrTCCUColor_t   d,
-                                        FxBool          d_invert,
-                                        FxU32           shift,
-                                        FxBool          invert)
-{
-#define FN_NAME "grTexColorCombineExt"
- TRAP_LOG("%s(%s, %s, %s, %s, %s, %s, %s, %s, %s, %lu, %s)\n", FN_NAME, TRP_TMU(tmu), TRP_CU(a), TRP_CMBMODE(a_mode), TRP_CU(b), TRP_CMBMODE(b_mode), TRP_CU(c), TRP_BOOL(c_invert), TRP_CU(d), TRP_BOOL(d_invert), shift, TRP_BOOL(invert));
- assert(real_grTexColorCombineExt);
- (*real_grTexColorCombineExt)(tmu, a, a_mode, b, b_mode, c, c_invert, d, d_invert, shift, invert);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grTexAlphaCombineExt (GrChipID_t      tmu,
-                                        GrTACUColor_t   a,
-                                        GrCombineMode_t a_mode,
-                                        GrTACUColor_t   b,
-                                        GrCombineMode_t b_mode,
-                                        GrTACUColor_t   c,
-                                        FxBool          c_invert,
-                                        GrTACUColor_t   d,
-                                        FxBool          d_invert,
-                                        FxU32           shift,
-                                        FxBool          invert)
-{
-#define FN_NAME "grTexAlphaCombineExt"
- TRAP_LOG("%s(%s, %s, %s, %s, %s, %s, %s, %s, %s, %lu, %s)\n", FN_NAME, TRP_TMU(tmu), TRP_CU(a), TRP_CMBMODE(a_mode), TRP_CU(b), TRP_CMBMODE(b_mode), TRP_CU(c), TRP_BOOL(c_invert), TRP_CU(d), TRP_BOOL(d_invert), shift, TRP_BOOL(invert));
- assert(real_grTexAlphaCombineExt);
- (*real_grTexAlphaCombineExt)(tmu, a, a_mode, b, b_mode, c, c_invert, d, d_invert, shift, invert);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grConstantColorValueExt (GrChipID_t tmu,
-                                           GrColor_t  value)
-{
-#define FN_NAME "grConstantColorValueExt"
- TRAP_LOG("%s(%s, %08lx)\n", FN_NAME, TRP_TMU(tmu), value);
- assert(real_grConstantColorValueExt);
- (*real_grConstantColorValueExt)(tmu, value);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grColorMaskExt (FxBool r,
-                                  FxBool g,
-                                  FxBool b,
-                                  FxBool a)
-{
-#define FN_NAME "grColorMaskExt"
- TRAP_LOG("%s(%s, %s, %s, %s)\n", FN_NAME, TRP_BOOL(r), TRP_BOOL(g), TRP_BOOL(b), TRP_BOOL(a));
- assert(real_grColorMaskExt);
- (*real_grColorMaskExt)(r, g, b, a);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grAlphaBlendFunctionExt (GrAlphaBlendFnc_t rgb_sf,
-                                           GrAlphaBlendFnc_t rgb_df,
-                                           GrAlphaBlendOp_t  rgb_op,
-                                           GrAlphaBlendFnc_t alpha_sf,
-                                           GrAlphaBlendFnc_t alpha_df,
-                                           GrAlphaBlendOp_t  alpha_op)
-{
-#define FN_NAME "grAlphaBlendFunctionExt"
- TRAP_LOG("%s(%s, %s, %s, %s, %s, %s)\n", FN_NAME, TRP_BLEND(rgb_sf), TRP_BLEND(rgb_df), TRP_BLENDOP(rgb_op), TRP_BLEND(alpha_sf), TRP_BLEND(alpha_df), TRP_BLENDOP(alpha_op));
- assert(real_grAlphaBlendFunctionExt);
- (*real_grAlphaBlendFunctionExt)(rgb_sf, rgb_df, rgb_op, alpha_sf, alpha_df, alpha_op);
-#undef FN_NAME
-}
-
-void FX_CALL trap_grTBufferWriteMaskExt (FxU32 tmask)
-{
-#define FN_NAME "grTBufferWriteMaskExt"
- TRAP_LOG("%s(%08lx)\n", FN_NAME, tmask);
- assert(real_grTBufferWriteMaskExt);
- (*real_grTBufferWriteMaskExt)(tmask);
-#undef FN_NAME
-}
-
-/*
-** texus functions
-*/
-void FX_CALL trap_txImgQuantize (char  *dst,
-                                 char  *src,
-                                 int   w,
-                                 int   h,
-                                 FxU32 format,
-                                 FxU32 dither)
-{
-#define FN_NAME "txImgQuantize"
- TRAP_LOG("%s(%p, %p, %d, %d, %s, %s)\n", FN_NAME, dst, src, w, h, TRP_TEXFMT(format), TRP_TXDITHER(dither));
- assert(real_txImgQuantize);
- (*real_txImgQuantize)(dst, src, w, h, format, dither);
-#undef FN_NAME
-}
-
-void FX_CALL trap_txMipQuantize (TxMip *pxMip,
-                                 TxMip *txMip,
-                                 int   fmt,
-                                 FxU32 d,
-                                 FxU32 comp)
-{
-#define FN_NAME "txMipQuantize"
- TRAP_LOG("%s(%p, %p, %s, %s, %s)\n", FN_NAME, (void *)pxMip, (void *)txMip, TRP_TEXFMT(fmt), TRP_TXDITHER(d), TRP_TXCOMPRESS(comp));
- assert(real_txMipQuantize);
- (*real_txMipQuantize)(pxMip, txMip, fmt, d, comp);
-#undef FN_NAME
-}
-
-void FX_CALL trap_txPalToNcc (GuNccTable *ncc_table,
-                              const FxU32 *pal)
-{
-#define FN_NAME "txPalToNcc"
- TRAP_LOG("%s(%p, %p)\n", FN_NAME, (void *)ncc_table, (void *)pal);
- assert(real_txPalToNcc);
- (*real_txPalToNcc)(ncc_table, pal);
-#undef FN_NAME
-}
-#endif
-
-
-
-/****************************************************************************\
-* housekeeping (fake pointers)                                               *
-\****************************************************************************/
-char *FX_CALL fake_grGetRegistryOrEnvironmentStringExt (char *theEntry)
-{
- return getenv(theEntry);
-}
-
-void FX_CALL fake_grTexDownloadTableExt (GrChipID_t   tmu,
-                                         GrTexTable_t type,
-                                         void         *data)
-{
- (void)tmu;
- grTexDownloadTable(type, data);
-}
-
-void FX_CALL fake_grTexDownloadTablePartialExt (GrChipID_t   tmu,
-                                                GrTexTable_t type,
-                                                void         *data,
-                                                int          start,
-                                                int          end)
-{
- (void)tmu;
- grTexDownloadTablePartial(type, data, start, end);
-}
-
-void FX_CALL fake_grTexNCCTableExt (GrChipID_t   tmu,
-                                    GrNCCTable_t table)
-{
- (void)tmu;
- grTexNCCTable(table);
-}
-
-
-
-/****************************************************************************\
-* interface                                                                  *
-\****************************************************************************/
-void tdfx_hook_glide (struct tdfx_glide *Glide, int pointcast)
-{
-/* GET_EXT_ADDR: get function pointer
- * GET_EXT_FAKE: get function pointer if possible, else use a fake function
- * GET_EXT_NULL: get function pointer if possible, else leave NULL pointer
- */
-#if FX_TRAP_GLIDE
-#define GET_EXT_ADDR(name) *(GrProc *)&real_##name = grGetProcAddress(#name), Glide->name = trap_##name
-#define GET_EXT_FAKE(name) GET_EXT_ADDR(name); if (real_##name == NULL) real_##name = fake_##name
-#define GET_EXT_NULL(name) GET_EXT_ADDR(name); if (real_##name == NULL) Glide->name = NULL
-#else  /* FX_TRAP_GLIDE */
-#define GET_EXT_ADDR(name) *(GrProc *)&Glide->name = grGetProcAddress(#name)
-#define GET_EXT_FAKE(name) GET_EXT_ADDR(name); if (Glide->name == NULL) Glide->name = fake_##name
-#define GET_EXT_NULL(name) GET_EXT_ADDR(name)
-#endif /* FX_TRAP_GLIDE */
-
- /*
- ** glide extensions
- */
- GET_EXT_NULL(grSetNumPendingBuffers);
- GET_EXT_FAKE(grGetRegistryOrEnvironmentStringExt);
- GET_EXT_ADDR(grGetGammaTableExt);
- GET_EXT_ADDR(grChromaRangeModeExt);
- GET_EXT_ADDR(grChromaRangeExt);
- GET_EXT_ADDR(grTexChromaModeExt);
- GET_EXT_ADDR(grTexChromaRangeExt);
- /* pointcast */
- if (pointcast) {
-    GET_EXT_FAKE(grTexDownloadTableExt);
-    GET_EXT_FAKE(grTexDownloadTablePartialExt);
-    GET_EXT_FAKE(grTexNCCTableExt);
- } else {
-    Glide->grTexDownloadTableExt = fake_grTexDownloadTableExt;
-    Glide->grTexDownloadTablePartialExt = fake_grTexDownloadTablePartialExt;
-    Glide->grTexNCCTableExt = fake_grTexNCCTableExt;
- }
- /* tbext */
- GET_EXT_ADDR(grTextureBufferExt);
- GET_EXT_ADDR(grTextureAuxBufferExt);
- GET_EXT_ADDR(grAuxBufferExt);
- /* napalm */
- GET_EXT_ADDR(grSstWinOpenExt);
- GET_EXT_ADDR(grStencilFuncExt);
- GET_EXT_ADDR(grStencilMaskExt);
- GET_EXT_ADDR(grStencilOpExt);
- GET_EXT_ADDR(grLfbConstantStencilExt);
- GET_EXT_ADDR(grBufferClearExt);
- GET_EXT_ADDR(grColorCombineExt);
- GET_EXT_ADDR(grAlphaCombineExt);
- GET_EXT_ADDR(grTexColorCombineExt);
- GET_EXT_ADDR(grTexAlphaCombineExt);
- GET_EXT_ADDR(grConstantColorValueExt);
- GET_EXT_ADDR(grColorMaskExt);
- GET_EXT_ADDR(grAlphaBlendFunctionExt);
- GET_EXT_ADDR(grTBufferWriteMaskExt);
-
- /*
- ** texus
- */
- GET_EXT_NULL(txImgQuantize);
- GET_EXT_NULL(txMipQuantize);
- GET_EXT_NULL(txPalToNcc);
-
-#undef GET_EXT_ADDR
-}
-
-#endif /* FX */
diff --git a/src/mesa/drivers/glide/fxg.h b/src/mesa/drivers/glide/fxg.h
deleted file mode 100644
index e712011168..0000000000
--- a/src/mesa/drivers/glide/fxg.h
+++ /dev/null
@@ -1,382 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  5.0.1
- * 
- * Copyright (C) 1999-2003  Brian Paul   All Rights Reserved.
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * Mesa/FX device driver. Interface to Glide3.
- *
- *  Copyright (c) 2003 - Daniel Borca
- *  Email : dborca@users.sourceforge.net
- *  Web   : http://www.geocities.com/dborca
- */
-
-
-#ifndef TDFX_GLIDE_H_included
-#define TDFX_GLIDE_H_included
-
-#include <glide.h>
-#include <g3ext.h>
-
-#ifndef FX_TRAP_GLIDE
-#define FX_TRAP_GLIDE 0
-#endif
-
-#if FX_TRAP_GLIDE
-/*
-** rendering functions
-*/
-void FX_CALL trap_grDrawPoint (const void *pt);
-void FX_CALL trap_grDrawLine (const void *v1, const void *v2);
-void FX_CALL trap_grDrawTriangle (const void *a, const void *b, const void *c);
-void FX_CALL trap_grVertexLayout (FxU32 param, FxI32 offset, FxU32 mode);
-void FX_CALL trap_grDrawVertexArray (FxU32 mode, FxU32 Count, void *pointers);
-void FX_CALL trap_grDrawVertexArrayContiguous (FxU32 mode, FxU32 Count, void *pointers, FxU32 stride);
-
-/*
-**  Antialiasing Functions
-*/
-void FX_CALL trap_grAADrawTriangle (const void *a, const void *b, const void *c, FxBool ab_antialias, FxBool bc_antialias, FxBool ca_antialias);
-
-/*
-** buffer management
-*/
-void FX_CALL trap_grBufferClear (GrColor_t color, GrAlpha_t alpha, FxU32 depth);
-void FX_CALL trap_grBufferSwap (FxU32 swap_interval);
-void FX_CALL trap_grRenderBuffer (GrBuffer_t buffer);
-
-/*
-** error management
-*/
-void FX_CALL trap_grErrorSetCallback (GrErrorCallbackFnc_t fnc);
-
-/*
-** SST routines
-*/
-void FX_CALL trap_grFinish (void);
-void FX_CALL trap_grFlush (void);
-GrContext_t FX_CALL trap_grSstWinOpen (FxU32 hWnd, GrScreenResolution_t screen_resolution, GrScreenRefresh_t refresh_rate, GrColorFormat_t color_format, GrOriginLocation_t origin_location, int nColBuffers, int nAuxBuffers);
-FxBool FX_CALL trap_grSstWinClose (GrContext_t context);
-FxBool FX_CALL trap_grSelectContext (GrContext_t context);
-void FX_CALL trap_grSstOrigin (GrOriginLocation_t origin);
-void FX_CALL trap_grSstSelect (int which_sst);
-
-/*
-** Glide configuration and special effect maintenance functions
-*/
-void FX_CALL trap_grAlphaBlendFunction (GrAlphaBlendFnc_t rgb_sf, GrAlphaBlendFnc_t rgb_df, GrAlphaBlendFnc_t alpha_sf, GrAlphaBlendFnc_t alpha_df);
-void FX_CALL trap_grAlphaCombine (GrCombineFunction_t function, GrCombineFactor_t factor, GrCombineLocal_t local, GrCombineOther_t other, FxBool invert);
-void FX_CALL trap_grAlphaControlsITRGBLighting (FxBool enable);
-void FX_CALL trap_grAlphaTestFunction (GrCmpFnc_t function);
-void FX_CALL trap_grAlphaTestReferenceValue (GrAlpha_t value);
-void FX_CALL trap_grChromakeyMode (GrChromakeyMode_t mode);
-void FX_CALL trap_grChromakeyValue (GrColor_t value);
-void FX_CALL trap_grClipWindow (FxU32 minx, FxU32 miny, FxU32 maxx, FxU32 maxy);
-void FX_CALL trap_grColorCombine (GrCombineFunction_t function, GrCombineFactor_t factor, GrCombineLocal_t local, GrCombineOther_t other, FxBool invert);
-void FX_CALL trap_grColorMask (FxBool rgb, FxBool a);
-void FX_CALL trap_grCullMode (GrCullMode_t mode);
-void FX_CALL trap_grConstantColorValue (GrColor_t value);
-void FX_CALL trap_grDepthBiasLevel (FxI32 level);
-void FX_CALL trap_grDepthBufferFunction (GrCmpFnc_t function);
-void FX_CALL trap_grDepthBufferMode (GrDepthBufferMode_t mode);
-void FX_CALL trap_grDepthMask (FxBool mask);
-void FX_CALL trap_grDisableAllEffects (void);
-void FX_CALL trap_grDitherMode (GrDitherMode_t mode);
-void FX_CALL trap_grFogColorValue (GrColor_t fogcolor);
-void FX_CALL trap_grFogMode (GrFogMode_t mode);
-void FX_CALL trap_grFogTable (const GrFog_t ft[]);
-void FX_CALL trap_grLoadGammaTable (FxU32 nentries, FxU32 *red, FxU32 *green, FxU32 *blue);
-void FX_CALL trap_grSplash (float x, float y, float width, float height, FxU32 frame);
-FxU32 FX_CALL trap_grGet (FxU32 pname, FxU32 plength, FxI32 *params);
-const char * FX_CALL trap_grGetString (FxU32 pname);
-FxI32 FX_CALL trap_grQueryResolutions (const GrResolution *resTemplate, GrResolution *output);
-FxBool FX_CALL trap_grReset (FxU32 what);
-GrProc FX_CALL trap_grGetProcAddress (char *procName);
-void FX_CALL trap_grEnable (GrEnableMode_t mode);
-void FX_CALL trap_grDisable (GrEnableMode_t mode);
-void FX_CALL trap_grCoordinateSpace (GrCoordinateSpaceMode_t mode);
-void FX_CALL trap_grDepthRange (FxFloat n, FxFloat f);
-void FX_CALL trap_grStippleMode (GrStippleMode_t mode);
-void FX_CALL trap_grStipplePattern (GrStipplePattern_t mode);
-void FX_CALL trap_grViewport (FxI32 x, FxI32 y, FxI32 width, FxI32 height);
-
-/*
-** texture mapping control functions
-*/
-FxU32 FX_CALL trap_grTexCalcMemRequired (GrLOD_t lodmin, GrLOD_t lodmax, GrAspectRatio_t aspect, GrTextureFormat_t fmt);
-FxU32 FX_CALL trap_grTexTextureMemRequired (FxU32 evenOdd, GrTexInfo *info);
-FxU32 FX_CALL trap_grTexMinAddress (GrChipID_t tmu);
-FxU32 FX_CALL trap_grTexMaxAddress (GrChipID_t tmu);
-void FX_CALL trap_grTexNCCTable (GrNCCTable_t table);
-void FX_CALL trap_grTexSource (GrChipID_t tmu, FxU32 startAddress, FxU32 evenOdd, GrTexInfo *info);
-void FX_CALL trap_grTexClampMode (GrChipID_t tmu, GrTextureClampMode_t s_clampmode, GrTextureClampMode_t t_clampmode);
-void FX_CALL trap_grTexCombine (GrChipID_t tmu, GrCombineFunction_t rgb_function, GrCombineFactor_t rgb_factor, GrCombineFunction_t alpha_function, GrCombineFactor_t alpha_factor, FxBool rgb_invert, FxBool alpha_invert);
-void FX_CALL trap_grTexDetailControl (GrChipID_t tmu, int lod_bias, FxU8 detail_scale, float detail_max);
-void FX_CALL trap_grTexFilterMode (GrChipID_t tmu, GrTextureFilterMode_t minfilter_mode, GrTextureFilterMode_t magfilter_mode);
-void FX_CALL trap_grTexLodBiasValue (GrChipID_t tmu, float bias);
-void FX_CALL trap_grTexDownloadMipMap (GrChipID_t tmu, FxU32 startAddress, FxU32 evenOdd, GrTexInfo *info);
-void FX_CALL trap_grTexDownloadMipMapLevel (GrChipID_t tmu, FxU32 startAddress, GrLOD_t thisLod, GrLOD_t largeLod, GrAspectRatio_t aspectRatio, GrTextureFormat_t format, FxU32 evenOdd, void *data);
-FxBool FX_CALL trap_grTexDownloadMipMapLevelPartial (GrChipID_t tmu, FxU32 startAddress, GrLOD_t thisLod, GrLOD_t largeLod, GrAspectRatio_t aspectRatio, GrTextureFormat_t format, FxU32 evenOdd, void *data, int start, int end);
-void FX_CALL trap_grTexDownloadTable (GrTexTable_t type, void *data);
-void FX_CALL trap_grTexDownloadTablePartial (GrTexTable_t type, void *data, int start, int end);
-void FX_CALL trap_grTexMipMapMode (GrChipID_t tmu, GrMipMapMode_t mode, FxBool lodBlend);
-void FX_CALL trap_grTexMultibase (GrChipID_t tmu, FxBool enable);
-void FX_CALL trap_grTexMultibaseAddress (GrChipID_t tmu, GrTexBaseRange_t range, FxU32 startAddress, FxU32 evenOdd, GrTexInfo *info);
-
-/*
-** linear frame buffer functions
-*/
-FxBool FX_CALL trap_grLfbLock (GrLock_t type, GrBuffer_t buffer, GrLfbWriteMode_t writeMode, GrOriginLocation_t origin, FxBool pixelPipeline, GrLfbInfo_t *info);
-FxBool FX_CALL trap_grLfbUnlock (GrLock_t type, GrBuffer_t buffer);
-void FX_CALL trap_grLfbConstantAlpha (GrAlpha_t alpha);
-void FX_CALL trap_grLfbConstantDepth (FxU32 depth);
-void FX_CALL trap_grLfbWriteColorSwizzle (FxBool swizzleBytes, FxBool swapWords);
-void FX_CALL trap_grLfbWriteColorFormat (GrColorFormat_t colorFormat);
-FxBool FX_CALL trap_grLfbWriteRegion (GrBuffer_t dst_buffer, FxU32 dst_x, FxU32 dst_y, GrLfbSrcFmt_t src_format, FxU32 src_width, FxU32 src_height, FxBool pixelPipeline, FxI32 src_stride, void *src_data);
-FxBool FX_CALL trap_grLfbReadRegion (GrBuffer_t src_buffer, FxU32 src_x, FxU32 src_y, FxU32 src_width, FxU32 src_height, FxU32 dst_stride, void *dst_data);
-
-/*
-** glide management functions
-*/
-void FX_CALL trap_grGlideInit (void);
-void FX_CALL trap_grGlideShutdown (void);
-void FX_CALL trap_grGlideGetState (void *state);
-void FX_CALL trap_grGlideSetState (const void *state);
-void FX_CALL trap_grGlideGetVertexLayout (void *layout);
-void FX_CALL trap_grGlideSetVertexLayout (const void *layout);
-
-/*
-** glide utility functions
-*/
-void FX_CALL trap_guGammaCorrectionRGB (FxFloat red, FxFloat green, FxFloat blue);
-float FX_CALL trap_guFogTableIndexToW (int i);
-void FX_CALL trap_guFogGenerateExp (GrFog_t *fogtable, float density);
-void FX_CALL trap_guFogGenerateExp2 (GrFog_t *fogtable, float density);
-void FX_CALL trap_guFogGenerateLinear (GrFog_t *fogtable, float nearZ, float farZ);
-
-#ifndef FX_TRAP_GLIDE_internal
-/*
-** rendering functions
-*/
-#define grDrawPoint                     trap_grDrawPoint
-#define grDrawLine                      trap_grDrawLine
-#define grDrawTriangle                  trap_grDrawTriangle
-#define grVertexLayout                  trap_grVertexLayout
-#define grDrawVertexArray               trap_grDrawVertexArray
-#define grDrawVertexArrayContiguous     trap_grDrawVertexArrayContiguous
-
-/*
-**  Antialiasing Functions
-*/
-#define grAADrawTriangle                trap_grAADrawTriangle
-
-/*
-** buffer management
-*/
-#define grBufferClear                   trap_grBufferClear
-#define grBufferSwap                    trap_grBufferSwap
-#define grRenderBuffer                  trap_grRenderBuffer
-
-/*
-** error management
-*/
-#define grErrorSetCallback              trap_grErrorSetCallback
-
-/*
-** SST routines
-*/
-#define grFinish                        trap_grFinish
-#define grFlush                         trap_grFlush
-#define grSstWinOpen                    trap_grSstWinOpen
-#define grSstWinClose                   trap_grSstWinClose
-#define grSelectContext                 trap_grSelectContext
-#define grSstOrigin                     trap_grSstOrigin
-#define grSstSelect                     trap_grSstSelect
-
-/*
-** Glide configuration and special effect maintenance functions
-*/
-#define grAlphaBlendFunction            trap_grAlphaBlendFunction
-#define grAlphaCombine                  trap_grAlphaCombine
-#define grAlphaControlsITRGBLighting    trap_grAlphaControlsITRGBLighting
-#define grAlphaTestFunction             trap_grAlphaTestFunction
-#define grAlphaTestReferenceValue       trap_grAlphaTestReferenceValue
-#define grChromakeyMode                 trap_grChromakeyMode
-#define grChromakeyValue                trap_grChromakeyValue
-#define grClipWindow                    trap_grClipWindow
-#define grColorCombine                  trap_grColorCombine
-#define grColorMask                     trap_grColorMask
-#define grCullMode                      trap_grCullMode
-#define grConstantColorValue            trap_grConstantColorValue
-#define grDepthBiasLevel                trap_grDepthBiasLevel
-#define grDepthBufferFunction           trap_grDepthBufferFunction
-#define grDepthBufferMode               trap_grDepthBufferMode
-#define grDepthMask                     trap_grDepthMask
-#define grDisableAllEffects             trap_grDisableAllEffects
-#define grDitherMode                    trap_grDitherMode
-#define grFogColorValue                 trap_grFogColorValue
-#define grFogMode                       trap_grFogMode
-#define grFogTable                      trap_grFogTable
-#define grLoadGammaTable                trap_grLoadGammaTable
-#define grSplash                        trap_grSplash
-#define grGet                           trap_grGet
-#define grGetString                     trap_grGetString
-#define grQueryResolutions              trap_grQueryResolutions
-#define grReset                         trap_grReset
-#define grGetProcAddress                trap_grGetProcAddress
-#define grEnable                        trap_grEnable
-#define grDisable                       trap_grDisable
-#define grCoordinateSpace               trap_grCoordinateSpace
-#define grDepthRange                    trap_grDepthRange
-#define grStippleMode                   trap_grStippleMode
-#define grStipplePattern                trap_grStipplePattern
-#define grViewport                      trap_grViewport
-
-/*
-** texture mapping control functions
-*/
-#define grTexCalcMemRequired            trap_grTexCalcMemRequired
-#define grTexTextureMemRequired         trap_grTexTextureMemRequired
-#define grTexMinAddress                 trap_grTexMinAddress
-#define grTexMaxAddress                 trap_grTexMaxAddress
-#define grTexNCCTable                   trap_grTexNCCTable
-#define grTexSource                     trap_grTexSource
-#define grTexClampMode                  trap_grTexClampMode
-#define grTexCombine                    trap_grTexCombine
-#define grTexDetailControl              trap_grTexDetailControl
-#define grTexFilterMode                 trap_grTexFilterMode
-#define grTexLodBiasValue               trap_grTexLodBiasValue
-#define grTexDownloadMipMap             trap_grTexDownloadMipMap
-#define grTexDownloadMipMapLevel        trap_grTexDownloadMipMapLevel
-#define grTexDownloadMipMapLevelPartial trap_grTexDownloadMipMapLevelPartial
-#define grTexDownloadTable              trap_grTexDownloadTable
-#define grTexDownloadTablePartial       trap_grTexDownloadTablePartial
-#define grTexMipMapMode                 trap_grTexMipMapMode
-#define grTexMultibase                  trap_grTexMultibase
-#define grTexMultibaseAddress           trap_grTexMultibaseAddress
-
-/*
-** linear frame buffer functions
-*/
-#define grLfbLock                       trap_grLfbLock
-#define grLfbUnlock                     trap_grLfbUnlock
-#define grLfbConstantAlpha              trap_grLfbConstantAlpha
-#define grLfbConstantDepth              trap_grLfbConstantDepth
-#define grLfbWriteColorSwizzle          trap_grLfbWriteColorSwizzle
-#define grLfbWriteColorFormat           trap_grLfbWriteColorFormat
-#define grLfbWriteRegion                trap_grLfbWriteRegion
-#define grLfbReadRegion                 trap_grLfbReadRegion
-
-/*
-** glide management functions
-*/
-#define grGlideInit                     trap_grGlideInit
-#define grGlideShutdown                 trap_grGlideShutdown
-#define grGlideGetState                 trap_grGlideGetState
-#define grGlideSetState                 trap_grGlideSetState
-#define grGlideGetVertexLayout          trap_grGlideGetVertexLayout
-#define grGlideSetVertexLayout          trap_grGlideSetVertexLayout
-
-/*
-** glide utility functions
-*/
-#define guGammaCorrectionRGB            trap_guGammaCorrectionRGB
-#define guFogTableIndexToW              trap_guFogTableIndexToW
-#define guFogGenerateExp                trap_guFogGenerateExp
-#define guFogGenerateExp2               trap_guFogGenerateExp2
-#define guFogGenerateLinear             trap_guFogGenerateLinear
-#endif /* FX_TRAP_GLIDE_internal */
-#endif /* FX_TRAP_GLIDE */
-
-
-
-/* <texus.h> */
-#define TX_MAX_LEVEL 16
-typedef struct _TxMip {
-        int format;
-        int width;
-        int height;
-        int depth;
-        int size;
-        void *data[TX_MAX_LEVEL];
-        FxU32 pal[256];
-} TxMip;
-
-#define TX_DITHER_NONE                                  0x00000000
-#define TX_DITHER_4x4                                   0x00000001
-#define TX_DITHER_ERR                                   0x00000002
-
-#define TX_COMPRESSION_STATISTICAL                      0x00000000
-#define TX_COMPRESSION_HEURISTIC                        0x00000010
-/* <texus.h> */
-
-
-
-struct tdfx_glide {
-   /*
-   ** glide extensions
-   */
-   void (FX_CALL *grSetNumPendingBuffers) (FxI32 NumPendingBuffers);
-   char * (FX_CALL *grGetRegistryOrEnvironmentStringExt) (char *theEntry);
-   void (FX_CALL *grGetGammaTableExt) (FxU32 nentries, FxU32 *red, FxU32 *green, FxU32 *blue);
-   void (FX_CALL *grChromaRangeModeExt) (GrChromakeyMode_t mode);
-   void (FX_CALL *grChromaRangeExt) (GrColor_t color, GrColor_t range, GrChromaRangeMode_t match_mode);
-   void (FX_CALL *grTexChromaModeExt) (GrChipID_t tmu, GrChromakeyMode_t mode);
-   void (FX_CALL *grTexChromaRangeExt) (GrChipID_t tmu, GrColor_t min, GrColor_t max, GrTexChromakeyMode_t mode);
-
-   /* pointcast */
-   void (FX_CALL *grTexDownloadTableExt) (GrChipID_t tmu, GrTexTable_t type, void *data);
-   void (FX_CALL *grTexDownloadTablePartialExt) (GrChipID_t tmu, GrTexTable_t type, void *data, int start, int end);
-   void (FX_CALL *grTexNCCTableExt) (GrChipID_t tmu, GrNCCTable_t table);
-
-   /* tbext */
-   void (FX_CALL *grTextureBufferExt) (GrChipID_t tmu, FxU32 startAddress, GrLOD_t thisLOD, GrLOD_t largeLOD, GrAspectRatio_t aspectRatio, GrTextureFormat_t format, FxU32 odd_even_mask);
-   void (FX_CALL *grTextureAuxBufferExt) (GrChipID_t tmu, FxU32 startAddress, GrLOD_t thisLOD, GrLOD_t largeLOD, GrAspectRatio_t aspectRatio, GrTextureFormat_t format, FxU32 odd_even_mask);
-   void (FX_CALL *grAuxBufferExt) (GrBuffer_t buffer);
-
-   /* napalm */
-   GrContext_t (FX_CALL *grSstWinOpenExt) (FxU32 hWnd, GrScreenResolution_t resolution, GrScreenRefresh_t refresh, GrColorFormat_t format, GrOriginLocation_t origin, GrPixelFormat_t pixelformat, int nColBuffers, int nAuxBuffers);
-   void (FX_CALL *grStencilFuncExt) (GrCmpFnc_t fnc, GrStencil_t ref, GrStencil_t mask);
-   void (FX_CALL *grStencilMaskExt) (GrStencil_t value);
-   void (FX_CALL *grStencilOpExt) (GrStencilOp_t stencil_fail, GrStencilOp_t depth_fail, GrStencilOp_t depth_pass);
-   void (FX_CALL *grLfbConstantStencilExt) (GrStencil_t value);
-   void (FX_CALL *grBufferClearExt) (GrColor_t color, GrAlpha_t alpha, FxU32 depth, GrStencil_t stencil);
-   void (FX_CALL *grColorCombineExt) (GrCCUColor_t a, GrCombineMode_t a_mode, GrCCUColor_t b, GrCombineMode_t b_mode, GrCCUColor_t c, FxBool c_invert, GrCCUColor_t d, FxBool d_invert, FxU32 shift, FxBool invert);
-   void (FX_CALL *grAlphaCombineExt) (GrACUColor_t a, GrCombineMode_t a_mode, GrACUColor_t b, GrCombineMode_t b_mode, GrACUColor_t c, FxBool c_invert, GrACUColor_t d, FxBool d_invert, FxU32 shift, FxBool invert);
-   void (FX_CALL *grTexColorCombineExt) (GrChipID_t tmu, GrTCCUColor_t a, GrCombineMode_t a_mode, GrTCCUColor_t b, GrCombineMode_t b_mode, GrTCCUColor_t c, FxBool c_invert, GrTCCUColor_t d, FxBool d_invert, FxU32 shift, FxBool invert);
-   void (FX_CALL *grTexAlphaCombineExt) (GrChipID_t tmu, GrTACUColor_t a, GrCombineMode_t a_mode, GrTACUColor_t b, GrCombineMode_t b_mode, GrTACUColor_t c, FxBool c_invert, GrTACUColor_t d, FxBool d_invert, FxU32 shift, FxBool invert);
-   void (FX_CALL *grConstantColorValueExt) (GrChipID_t tmu, GrColor_t value);
-   void (FX_CALL *grColorMaskExt) (FxBool r, FxBool g, FxBool b, FxBool a);
-   void (FX_CALL *grAlphaBlendFunctionExt) (GrAlphaBlendFnc_t rgb_sf, GrAlphaBlendFnc_t rgb_df, GrAlphaBlendOp_t rgb_op, GrAlphaBlendFnc_t alpha_sf, GrAlphaBlendFnc_t alpha_df, GrAlphaBlendOp_t alpha_op);
-   void (FX_CALL *grTBufferWriteMaskExt) (FxU32 tmask);
-
-   /*
-   ** Texus2 functions
-   */
-   void (FX_CALL *txImgQuantize) (char *dst, char *src, int w, int h, FxU32 format, FxU32 dither);
-   void (FX_CALL *txMipQuantize) (TxMip *pxMip, TxMip *txMip, int fmt, FxU32 d, FxU32 comp);
-   void (FX_CALL *txPalToNcc) (GuNccTable *ncc_table, const FxU32 *pal);
-};
-
-void tdfx_hook_glide (struct tdfx_glide *Glide, int pointcast);
-
-#endif
diff --git a/src/mesa/drivers/glide/fxglidew.c b/src/mesa/drivers/glide/fxglidew.c
deleted file mode 100644
index 1fedf2ab96..0000000000
--- a/src/mesa/drivers/glide/fxglidew.c
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  4.0
- *
- * Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/* Authors:
- *    David Bucciarelli
- *    Brian Paul
- *    Daryll Strauss
- *    Keith Whitwell
- *    Daniel Borca
- *    Hiroshi Morii
- */
-
-/* fxsetup.c - 3Dfx VooDoo rendering mode setup functions */
-
-
-#ifdef HAVE_CONFIG_H
-#include "conf.h"
-#endif
-
-#if defined(FX)
-#include "fxglidew.h"
-#include "fxdrv.h"
-
-#include <stdlib.h>
-#include <string.h>
-
-FxI32
-FX_grGetInteger_NoLock(FxU32 pname)
-{
- FxI32 result;
-
- if (grGet(pname, 4, &result)) {
-    return result;
- }
-
- if (TDFX_DEBUG & VERBOSE_DRIVER) {
-    fprintf(stderr, "FX_grGetInteger_NoLock: wrong parameter (%lx)\n", pname);
- }
- return -1;
-}
-
-FxBool
-FX_grSstControl(FxU32 code)
-{
-   /* The glide 3 sources call for grEnable/grDisable to be called in exchange
-    * for grSstControl. */
-   switch (code) {
-   case GR_CONTROL_ACTIVATE:
-      grEnable(GR_PASSTHRU);
-      break;
-   case GR_CONTROL_DEACTIVATE:
-      grDisable(GR_PASSTHRU);
-      break;
-   }
-   /* Appearently GR_CONTROL_RESIZE can be ignored. */
-   return 1;			/* OK? */
-}
-
-
-int
-FX_grSstScreenWidth()
-{
-   FxI32 result[4];
-
-   BEGIN_BOARD_LOCK();
-   grGet(GR_VIEWPORT, sizeof(FxI32) * 4, result);
-   END_BOARD_LOCK();
-
-   return result[2];
-}
-
-int
-FX_grSstScreenHeight()
-{
-   FxI32 result[4];
-
-   BEGIN_BOARD_LOCK();
-   grGet(GR_VIEWPORT, sizeof(FxI32) * 4, result);
-   END_BOARD_LOCK();
-
-   return result[3];
-}
-
-void
-FX_grSstPerfStats(GrSstPerfStats_t * st)
-{
-   FxI32 n;
-   grGet(GR_STATS_PIXELS_IN, 4, &n);
-   st->pixelsIn = n;
-   grGet(GR_STATS_PIXELS_CHROMA_FAIL, 4, &n);
-   st->chromaFail = n;
-   grGet(GR_STATS_PIXELS_DEPTHFUNC_FAIL, 4, &n);
-   st->zFuncFail = n;
-   grGet(GR_STATS_PIXELS_AFUNC_FAIL, 4, &n);
-   st->aFuncFail = n;
-   grGet(GR_STATS_PIXELS_OUT, 4, &n);
-   st->pixelsOut = n;
-}
-
-void
-FX_setupGrVertexLayout(void)
-{
-   BEGIN_BOARD_LOCK();
-   grReset(GR_VERTEX_PARAMETER);
-
-   grCoordinateSpace(GR_WINDOW_COORDS);
-   grVertexLayout(GR_PARAM_XY, GR_VERTEX_X_OFFSET << 2, GR_PARAM_ENABLE);
-#if FX_PACKEDCOLOR
-   grVertexLayout(GR_PARAM_PARGB, GR_VERTEX_PARGB_OFFSET << 2, GR_PARAM_ENABLE);
-#else  /* !FX_PACKEDCOLOR */
-   grVertexLayout(GR_PARAM_RGB, GR_VERTEX_RGB_OFFSET << 2, GR_PARAM_ENABLE);
-   grVertexLayout(GR_PARAM_A, GR_VERTEX_A_OFFSET << 2, GR_PARAM_ENABLE);
-#endif /* !FX_PACKEDCOLOR */
-   grVertexLayout(GR_PARAM_Q, GR_VERTEX_OOW_OFFSET << 2, GR_PARAM_ENABLE);
-   grVertexLayout(GR_PARAM_Z, GR_VERTEX_OOZ_OFFSET << 2, GR_PARAM_ENABLE);
-   grVertexLayout(GR_PARAM_ST0, GR_VERTEX_SOW_TMU0_OFFSET << 2,
-		  GR_PARAM_ENABLE);
-   grVertexLayout(GR_PARAM_Q0, GR_VERTEX_OOW_TMU0_OFFSET << 2,
-		  GR_PARAM_DISABLE);
-   grVertexLayout(GR_PARAM_ST1, GR_VERTEX_SOW_TMU1_OFFSET << 2,
-		  GR_PARAM_DISABLE);
-   grVertexLayout(GR_PARAM_Q1, GR_VERTEX_OOW_TMU1_OFFSET << 2,
-		  GR_PARAM_DISABLE);
-   END_BOARD_LOCK();
-}
-
-void
-FX_grHints_NoLock(GrHint_t hintType, FxU32 hintMask)
-{
-   switch (hintType) {
-   case GR_HINT_STWHINT:
-      {
-	 if (hintMask & GR_STWHINT_W_DIFF_TMU0)
-	    grVertexLayout(GR_PARAM_Q0, GR_VERTEX_OOW_TMU0_OFFSET << 2,
-			   GR_PARAM_ENABLE);
-	 else
-	    grVertexLayout(GR_PARAM_Q0, GR_VERTEX_OOW_TMU0_OFFSET << 2,
-			   GR_PARAM_DISABLE);
-
-	 if (hintMask & GR_STWHINT_ST_DIFF_TMU1)
-	    grVertexLayout(GR_PARAM_ST1, GR_VERTEX_SOW_TMU1_OFFSET << 2,
-			   GR_PARAM_ENABLE);
-	 else
-	    grVertexLayout(GR_PARAM_ST1, GR_VERTEX_SOW_TMU1_OFFSET << 2,
-			   GR_PARAM_DISABLE);
-
-	 if (hintMask & GR_STWHINT_W_DIFF_TMU1)
-	    grVertexLayout(GR_PARAM_Q1, GR_VERTEX_OOW_TMU1_OFFSET << 2,
-			   GR_PARAM_ENABLE);
-	 else
-	    grVertexLayout(GR_PARAM_Q1, GR_VERTEX_OOW_TMU1_OFFSET << 2,
-			   GR_PARAM_DISABLE);
-
-      }
-   }
-}
-
-/*
- * Glide3 doesn't have the grSstQueryHardware function anymore.
- * Instead, we call grGet() and fill in the data structures ourselves.
- */
-int
-FX_grSstQueryHardware(GrHwConfiguration * config)
-{
-   int i, j;
-   int numFB;
-
-   BEGIN_BOARD_LOCK();
-
-   grGet(GR_NUM_BOARDS, 4, (void *) &(config->num_sst));
-   if (config->num_sst == 0)
-      return 0;
-
-   for (i = 0; i < config->num_sst; i++) {
-      FxI32 result;
-      const char *extension;
-
-      grSstSelect(i);
-
-      extension = grGetString(GR_HARDWARE);
-      if (strstr(extension, "Rush")) {
-         config->SSTs[i].type = GR_SSTTYPE_SST96;
-      } else if (strstr(extension, "Voodoo2")) {
-         config->SSTs[i].type = GR_SSTTYPE_Voodoo2;
-      } else if (strstr(extension, "Voodoo Banshee")) {
-         config->SSTs[i].type = GR_SSTTYPE_Banshee;
-      } else if (strstr(extension, "Voodoo3")) {
-         config->SSTs[i].type = GR_SSTTYPE_Voodoo3;
-      } else if (strstr(extension, "Voodoo4")) {
-         config->SSTs[i].type = GR_SSTTYPE_Voodoo4;
-      } else if (strstr(extension, "Voodoo5")) {
-         config->SSTs[i].type = GR_SSTTYPE_Voodoo5;
-      } else {
-         config->SSTs[i].type = GR_SSTTYPE_VOODOO;
-      }
-
-      grGet(GR_MEMORY_FB, 4, &result);
-      config->SSTs[i].fbRam = result / (1024 * 1024);
-
-      grGet(GR_NUM_TMU, 4, &result);
-      config->SSTs[i].nTexelfx = result;
-
-      grGet(GR_REVISION_FB, 4, &result);
-      config->SSTs[i].fbiRev = result;
-
-      for (j = 0; j < config->SSTs[i].nTexelfx; j++) {
-	 grGet(GR_MEMORY_TMU, 4, &result);
-	 config->SSTs[i].tmuConfig[j].tmuRam = result / (1024 * 1024);
-	 grGet(GR_REVISION_TMU, 4, &result);
-	 config->SSTs[i].tmuConfig[j].tmuRev = result;
-      }
-
-      extension = grGetString(GR_EXTENSION);
-      config->SSTs[i].HavePalExt = (strstr(extension, " PALETTE6666 ") != NULL);
-      config->SSTs[i].HavePixExt = (strstr(extension, " PIXEXT ") != NULL);
-      config->SSTs[i].HaveTexFmt = (strstr(extension, " TEXFMT ") != NULL);
-      config->SSTs[i].HaveCmbExt = (strstr(extension, " COMBINE ") != NULL);
-      config->SSTs[i].HaveMirExt = (strstr(extension, " TEXMIRROR ") != NULL);
-      config->SSTs[i].HaveTexUma = (strstr(extension, " TEXUMA ") != NULL);
-
-      /* number of Voodoo chips */
-      grGet(GR_NUM_FB, 4, (void *) &numFB);
-      config->SSTs[i].numChips = numFB;
-
-   }
-
-   tdfx_hook_glide(&config->Glide, getenv("MESA_FX_POINTCAST") != NULL);
-
-   END_BOARD_LOCK();
-   return 1;
-}
-
-
-
-#else
-
-/*
- * Need this to provide at least one external definition.
- */
-
-extern int gl_fx_dummy_function_glidew(void);
-int
-gl_fx_dummy_function_glidew(void)
-{
-   return 0;
-}
-
-#endif /* FX */
diff --git a/src/mesa/drivers/glide/fxglidew.h b/src/mesa/drivers/glide/fxglidew.h
deleted file mode 100644
index a19d0b58c7..0000000000
--- a/src/mesa/drivers/glide/fxglidew.h
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  4.0
- *
- * Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/* Authors:
- *    David Bucciarelli
- *    Brian Paul
- *    Daryll Strauss
- *    Keith Whitwell
- *    Daniel Borca
- *    Hiroshi Morii
- */
-
-
-#ifndef __FX_GLIDE_WARPER__
-#define __FX_GLIDE_WARPER__
-
-
-#include "fxg.h"
-
-#ifndef FX_PACKEDCOLOR
-#define FX_PACKEDCOLOR 1
-#endif
-
-#define MAX_NUM_SST             4
-
-enum {
-      GR_SSTTYPE_VOODOO  = 0,
-      GR_SSTTYPE_SST96   = 1,
-      GR_SSTTYPE_AT3D    = 2,
-      GR_SSTTYPE_Voodoo2 = 3,
-      GR_SSTTYPE_Banshee = 4,
-      GR_SSTTYPE_Voodoo3 = 5,
-      GR_SSTTYPE_Voodoo4 = 6,
-      GR_SSTTYPE_Voodoo5 = 7
-};
-
-#define GrState                 void
-
-typedef int GrSstType;
-
-typedef struct GrTMUConfig_St {
-        int tmuRev;		/* Rev of Texelfx chip */
-        int tmuRam;		/* 1, 2, or 4 MB */
-} GrTMUConfig_t;
-
-typedef struct {
-        int num_sst;		/* # of HW units in the system */
-        struct SstCard_St {
-               GrSstType type;	/* Which hardware is it? */
-               int fbRam;	/* 1, 2, or 4 MB */
-               int fbiRev;	/* Rev of Pixelfx chip */
-               int nTexelfx;	/* How many texelFX chips are there? */
-               int numChips;	/* Number of Voodoo chips */
-               GrTMUConfig_t tmuConfig[GLIDE_NUM_TMU];	/* Configuration of the Texelfx chips */
-               /* Glide3 extensions */
-               FxBool HavePalExt;	/* PALETTE6666 */
-               FxBool HavePixExt;	/* PIXEXT */
-               FxBool HaveTexFmt;	/* TEXFMT */
-               FxBool HaveCmbExt;	/* COMBINE */
-               FxBool HaveMirExt;	/* TEXMIRROR */
-               FxBool HaveTexUma;	/* TEXUMA */
-        }
-        SSTs[MAX_NUM_SST];	/* configuration for each board */
-        struct tdfx_glide Glide;
-} GrHwConfiguration;
-
-
-
-typedef FxU32 GrHint_t;
-#define GR_HINTTYPE_MIN         0
-#define GR_HINT_STWHINT         0
-
-typedef FxU32 GrSTWHint_t;
-#define GR_STWHINT_W_DIFF_FBI   FXBIT(0)
-#define GR_STWHINT_W_DIFF_TMU0  FXBIT(1)
-#define GR_STWHINT_ST_DIFF_TMU0 FXBIT(2)
-#define GR_STWHINT_W_DIFF_TMU1  FXBIT(3)
-#define GR_STWHINT_ST_DIFF_TMU1 FXBIT(4)
-#define GR_STWHINT_W_DIFF_TMU2  FXBIT(5)
-#define GR_STWHINT_ST_DIFF_TMU2 FXBIT(6)
-
-#define GR_CONTROL_ACTIVATE     1
-#define GR_CONTROL_DEACTIVATE   0
-
-
-
-/*
-** move the vertex layout defintion to application
-*/
-typedef struct {
-        float sow;		/* s texture ordinate (s over w) */
-        float tow;		/* t texture ordinate (t over w) */
-        float oow;		/* 1/w (used mipmapping - really 0xfff/w) */
-} GrTmuVertex;
-
-#if FX_PACKEDCOLOR
-typedef struct {
-        float x, y;		/* X and Y in screen space */
-        float ooz;		/* 65535/Z (used for Z-buffering) */
-        float oow;		/* 1/W (used for W-buffering, texturing) */
-        unsigned char pargb[4];	/* B, G, R, A [0..255] */
-        GrTmuVertex tmuvtx[GLIDE_NUM_TMU];
-        float fog;		/* fog coordinate */
-        unsigned char pspec[4];	/* B, G, R, A [0..255] */
-        float psize;		/* point size */
-        long pad[16 - 14];	/* ensure 64b structure */
-} GrVertex;
-
-#define GR_VERTEX_X_OFFSET              0
-#define GR_VERTEX_Y_OFFSET              1
-#define GR_VERTEX_OOZ_OFFSET            2
-#define GR_VERTEX_OOW_OFFSET            3
-#define GR_VERTEX_PARGB_OFFSET          4
-#define GR_VERTEX_SOW_TMU0_OFFSET       5
-#define GR_VERTEX_TOW_TMU0_OFFSET       6
-#define GR_VERTEX_OOW_TMU0_OFFSET       7
-#define GR_VERTEX_SOW_TMU1_OFFSET       8
-#define GR_VERTEX_TOW_TMU1_OFFSET       9
-#define GR_VERTEX_OOW_TMU1_OFFSET       10
-#define GR_VERTEX_FOG_OFFSET            11
-#define GR_VERTEX_PSPEC_OFFSET          12
-#else  /* !FX_PACKEDCOLOR */
-typedef struct {
-        float x, y;		/* X and Y in screen space */
-        float ooz;		/* 65535/Z (used for Z-buffering) */
-        float oow;		/* 1/W (used for W-buffering, texturing) */
-        float r, g, b, a;	/* R, G, B, A [0..255] */
-        GrTmuVertex tmuvtx[GLIDE_NUM_TMU];
-        float fog;		/* fog coordinate */
-        float r1, g1, b1;	/* R, G, B [0..255] */
-        float psize;		/* point size */
-        long pad[20 - 19];	/* ensure multiple of 16 */
-} GrVertex;
-
-#define GR_VERTEX_X_OFFSET              0
-#define GR_VERTEX_Y_OFFSET              1
-#define GR_VERTEX_OOZ_OFFSET            2
-#define GR_VERTEX_OOW_OFFSET            3
-#define GR_VERTEX_RGB_OFFSET            4
-#define GR_VERTEX_A_OFFSET              7
-#define GR_VERTEX_SOW_TMU0_OFFSET       8
-#define GR_VERTEX_TOW_TMU0_OFFSET       9
-#define GR_VERTEX_OOW_TMU0_OFFSET       10
-#define GR_VERTEX_SOW_TMU1_OFFSET       11
-#define GR_VERTEX_TOW_TMU1_OFFSET       12
-#define GR_VERTEX_OOW_TMU1_OFFSET       13
-#define GR_VERTEX_FOG_OFFSET            14
-#define GR_VERTEX_SPEC_OFFSET           15
-#endif /* !FX_PACKEDCOLOR */
-
-
-
-/*
- * For Lod/LodLog2 conversion.
- */
-#define FX_largeLodLog2(info)		(info).largeLodLog2
-#define FX_aspectRatioLog2(info)	(info).aspectRatioLog2
-#define FX_smallLodLog2(info)		(info).smallLodLog2
-#define FX_lodToValue(val)		((int)(GR_LOD_LOG2_256-val))
-#define FX_largeLodValue(info)		((int)(GR_LOD_LOG2_256-(info).largeLodLog2))
-#define FX_smallLodValue(info)		((int)(GR_LOD_LOG2_256-(info).smallLodLog2))
-#define FX_valueToLod(val)		((GrLOD_t)(GR_LOD_LOG2_256-val))
-
-
-
-/*
- * Query
- */
-extern int FX_grSstScreenWidth(void);
-extern int FX_grSstScreenHeight(void);
-extern void FX_grSstPerfStats(GrSstPerfStats_t *st);
-extern int FX_grSstQueryHardware(GrHwConfiguration *config);
-#define FX_grGetInteger FX_grGetInteger_NoLock
-extern FxI32 FX_grGetInteger_NoLock(FxU32 pname);
-
-
-
-/*
- * GrHints
- */
-#define FX_grHints FX_grHints_NoLock
-extern void FX_grHints_NoLock(GrHint_t hintType, FxU32 hintMask);
-
-
-
-/*
- * Needed for Glide3 only, to set up Glide2 compatible vertex layout.
- */
-extern void FX_setupGrVertexLayout(void);
-
-
-
-/*
- * grSstControl stuff
- */
-extern FxBool FX_grSstControl(FxU32 code);
-
-#define FX_grBufferClear(c, a, d)	\
-  do {					\
-    BEGIN_CLIP_LOOP();			\
-    grBufferClear(c, a, d);		\
-    END_CLIP_LOOP();			\
-  } while (0)
-
-
-
-#endif /* __FX_GLIDE_WARPER__ */
diff --git a/src/mesa/drivers/glide/fxsetup.c b/src/mesa/drivers/glide/fxsetup.c
deleted file mode 100644
index 9bb352fcb8..0000000000
--- a/src/mesa/drivers/glide/fxsetup.c
+++ /dev/null
@@ -1,2220 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  4.0
- *
- * Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/* Authors:
- *    David Bucciarelli
- *    Brian Paul
- *    Daryll Strauss
- *    Keith Whitwell
- *    Daniel Borca
- *    Hiroshi Morii
- */
-
-/* fxsetup.c - 3Dfx VooDoo rendering mode setup functions */
-
-
-#ifdef HAVE_CONFIG_H
-#include "conf.h"
-#endif
-
-#if defined(FX)
-
-#include "fxdrv.h"
-#include "main/enums.h"
-#include "main/formats.h"
-#include "main/texstore.h"
-#include "tnl/tnl.h"
-#include "tnl/t_context.h"
-#include "swrast/swrast.h"
-
-
-static void
-fxTexValidate(GLcontext * ctx, struct gl_texture_object *tObj)
-{
-   tfxTexInfo *ti = fxTMGetTexInfo(tObj);
-   GLint minl, maxl;
-
-   if (ti->validated) {
-      if (TDFX_DEBUG & VERBOSE_DRIVER) {
-	 fprintf(stderr, "fxTexValidate(NOP)\n");
-      }
-      return;
-   }
-
-   if (TDFX_DEBUG & VERBOSE_DRIVER) {
-      fprintf(stderr, "fxTexValidate(%p (%d))\n", (void *)tObj, tObj->Name);
-   }
-
-   ti->tObj = tObj;
-   minl = ti->minLevel = tObj->BaseLevel;
-   maxl = ti->maxLevel = MIN2(tObj->MaxLevel, tObj->Image[0][0]->MaxLog2);
-
-#if FX_RESCALE_BIG_TEXURES_HACK
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   /* [dBorca]
-    * Fake textures larger than HW supports:
-    * 1) we have mipmaps. Then we just push up to the first supported
-    *    LOD. A possible drawback is that Mesa will ignore the skipped
-    *    LODs on further texture handling.
-    *    Will this interfere with GL_TEXTURE_[MIN|BASE]_LEVEL? How?
-    * 2) we don't have mipmaps. We need to rescale the big LOD in place.
-    *    The above approach is somehow dumb! we might have rescaled
-    *    once in TexImage2D to accomodate aspect ratio, and now we
-    *    are rescaling again. The thing is, in TexImage2D we don't
-    *    know whether we'll hit 1) or 2) by the time of validation.
-    */
-   if ((tObj->MinFilter == GL_NEAREST) || (tObj->MinFilter == GL_LINEAR)) {
-      /* no mipmaps! */
-      struct gl_texture_image *texImage = tObj->Image[0][minl];
-      tfxMipMapLevel *mml = FX_MIPMAP_DATA(texImage);
-      GLint _w, _h, maxSize = 1 << fxMesa->textureMaxLod;
-      if ((mml->width > maxSize) || (mml->height > maxSize)) {
-         /* need to rescale */
-         GLint texelBytes = _mesa_get_format_bytes(texImage->TexFormat->MesaFormat);
-         GLvoid *texImage_Data = texImage->Data;
-         _w = MIN2(texImage->Width, maxSize);
-         _h = MIN2(texImage->Height, maxSize);
-         if (TDFX_DEBUG & VERBOSE_TEXTURE) {
-            fprintf(stderr, "fxTexValidate: rescaling %d x %d -> %d x %d\n",
-                            texImage->Width, texImage->Height, _w, _h);
-         }
-         /* we should leave these as is and... (!) */
-         texImage->Width = _w;
-         texImage->Height = _h;
-         fxTexGetInfo(_w, _h, NULL, NULL, NULL, NULL,
-                      &(mml->wScale), &(mml->hScale));
-         _w *= mml->wScale;
-         _h *= mml->hScale;
-         texImage->Data = malloc(_w * _h * texelBytes);
-         _mesa_rescale_teximage2d(texelBytes,
-                                  mml->width,
-                                  _w * texelBytes, /* dst stride */
-                                  mml->width, mml->height, /* src */
-                                  _w, _h, /* dst */
-                                  texImage_Data /*src*/, texImage->Data /*dst*/ );
-         free(texImage_Data);
-         mml->width = _w;
-         mml->height = _h;
-         /* (!) ... and set mml->wScale = _w / texImage->Width */
-      }
-   } else {
-      /* mipmapping */
-      if (maxl - minl > fxMesa->textureMaxLod) {
-         /* skip a certain number of LODs */
-         minl += maxl - fxMesa->textureMaxLod;
-         if (TDFX_DEBUG & VERBOSE_TEXTURE) {
-            fprintf(stderr, "fxTexValidate: skipping %d LODs\n", minl - ti->minLevel);
-         }
-         ti->minLevel = tObj->BaseLevel = minl;
-      }
-   }
-}
-#endif
-
-   fxTexGetInfo(tObj->Image[0][minl]->Width, tObj->Image[0][minl]->Height,
-		&(FX_largeLodLog2(ti->info)), &(FX_aspectRatioLog2(ti->info)),
-		&(ti->sScale), &(ti->tScale),
-		NULL, NULL);
-
-   if ((tObj->MinFilter != GL_NEAREST) && (tObj->MinFilter != GL_LINEAR))
-      fxTexGetInfo(tObj->Image[0][maxl]->Width, tObj->Image[0][maxl]->Height,
-		   &(FX_smallLodLog2(ti->info)), NULL,
-		   NULL, NULL, NULL, NULL);
-   else
-      FX_smallLodLog2(ti->info) = FX_largeLodLog2(ti->info);
-
-   /* [dBorca] this is necessary because of fxDDCompressedTexImage2D */
-   if (ti->padded) {
-      struct gl_texture_image *texImage = tObj->Image[0][minl];
-      tfxMipMapLevel *mml = FX_MIPMAP_DATA(texImage);
-      if (mml->wScale != 1 || mml->hScale != 1) {
-         ti->sScale /= mml->wScale;
-         ti->tScale /= mml->hScale;
-      }
-   }
-
-   ti->baseLevelInternalFormat = tObj->Image[0][minl]->Format;
-
-   ti->validated = GL_TRUE;
-
-   ti->info.data = NULL;
-}
-
-static void
-fxPrintUnitsMode(const char *msg, GLuint mode)
-{
-   fprintf(stderr,
-	   "%s: (0x%x) %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s\n",
-	   msg,
-	   mode,
-	   (mode & FX_UM_E0_REPLACE) ? "E0_REPLACE, " : "",
-	   (mode & FX_UM_E0_MODULATE) ? "E0_MODULATE, " : "",
-	   (mode & FX_UM_E0_DECAL) ? "E0_DECAL, " : "",
-	   (mode & FX_UM_E0_BLEND) ? "E0_BLEND, " : "",
-	   (mode & FX_UM_E1_REPLACE) ? "E1_REPLACE, " : "",
-	   (mode & FX_UM_E1_MODULATE) ? "E1_MODULATE, " : "",
-	   (mode & FX_UM_E1_DECAL) ? "E1_DECAL, " : "",
-	   (mode & FX_UM_E1_BLEND) ? "E1_BLEND, " : "",
-	   (mode & FX_UM_E0_ALPHA) ? "E0_ALPHA, " : "",
-	   (mode & FX_UM_E0_LUMINANCE) ? "E0_LUMINANCE, " : "",
-	   (mode & FX_UM_E0_LUMINANCE_ALPHA) ? "E0_LUMINANCE_ALPHA, " : "",
-	   (mode & FX_UM_E0_INTENSITY) ? "E0_INTENSITY, " : "",
-	   (mode & FX_UM_E0_RGB) ? "E0_RGB, " : "",
-	   (mode & FX_UM_E0_RGBA) ? "E0_RGBA, " : "",
-	   (mode & FX_UM_E1_ALPHA) ? "E1_ALPHA, " : "",
-	   (mode & FX_UM_E1_LUMINANCE) ? "E1_LUMINANCE, " : "",
-	   (mode & FX_UM_E1_LUMINANCE_ALPHA) ? "E1_LUMINANCE_ALPHA, " : "",
-	   (mode & FX_UM_E1_INTENSITY) ? "E1_INTENSITY, " : "",
-	   (mode & FX_UM_E1_RGB) ? "E1_RGB, " : "",
-	   (mode & FX_UM_E1_RGBA) ? "E1_RGBA, " : "",
-	   (mode & FX_UM_COLOR_ITERATED) ? "COLOR_ITERATED, " : "",
-	   (mode & FX_UM_COLOR_CONSTANT) ? "COLOR_CONSTANT, " : "",
-	   (mode & FX_UM_ALPHA_ITERATED) ? "ALPHA_ITERATED, " : "",
-	   (mode & FX_UM_ALPHA_CONSTANT) ? "ALPHA_CONSTANT, " : "");
-}
-
-static GLuint
-fxGetTexSetConfiguration(GLcontext * ctx,
-			 struct gl_texture_object *tObj0,
-			 struct gl_texture_object *tObj1)
-{
-   GLuint unitsmode = 0;
-   GLuint envmode = 0;
-   GLuint ifmt = 0;
-
-   if ((ctx->Light.ShadeModel == GL_SMOOTH) || 1 ||
-       (ctx->Point.SmoothFlag) ||
-       (ctx->Line.SmoothFlag) ||
-       (ctx->Polygon.SmoothFlag)) unitsmode |= FX_UM_ALPHA_ITERATED;
-   else
-      unitsmode |= FX_UM_ALPHA_CONSTANT;
-
-   if (ctx->Light.ShadeModel == GL_SMOOTH || 1)
-      unitsmode |= FX_UM_COLOR_ITERATED;
-   else
-      unitsmode |= FX_UM_COLOR_CONSTANT;
-
-
-
-   /* 
-      OpenGL Feeds Texture 0 into Texture 1
-      Glide Feeds Texture 1 into Texture 0
-    */
-   if (tObj0) {
-      tfxTexInfo *ti0 = fxTMGetTexInfo(tObj0);
-
-      switch (ti0->baseLevelInternalFormat) {
-      case GL_ALPHA:
-	 ifmt |= FX_UM_E0_ALPHA;
-	 break;
-      case GL_LUMINANCE:
-	 ifmt |= FX_UM_E0_LUMINANCE;
-	 break;
-      case GL_LUMINANCE_ALPHA:
-	 ifmt |= FX_UM_E0_LUMINANCE_ALPHA;
-	 break;
-      case GL_INTENSITY:
-	 ifmt |= FX_UM_E0_INTENSITY;
-	 break;
-      case GL_RGB:
-	 ifmt |= FX_UM_E0_RGB;
-	 break;
-      case GL_RGBA:
-	 ifmt |= FX_UM_E0_RGBA;
-	 break;
-      }
-
-      switch (ctx->Texture.Unit[0].EnvMode) {
-      case GL_DECAL:
-	 envmode |= FX_UM_E0_DECAL;
-	 break;
-      case GL_MODULATE:
-	 envmode |= FX_UM_E0_MODULATE;
-	 break;
-      case GL_REPLACE:
-	 envmode |= FX_UM_E0_REPLACE;
-	 break;
-      case GL_BLEND:
-	 envmode |= FX_UM_E0_BLEND;
-	 break;
-      case GL_ADD:
-	 envmode |= FX_UM_E0_ADD;
-	 break;
-      default:
-	 /* do nothing */
-	 break;
-      }
-   }
-
-   if (tObj1) {
-      tfxTexInfo *ti1 = fxTMGetTexInfo(tObj1);
-
-      switch (ti1->baseLevelInternalFormat) {
-      case GL_ALPHA:
-	 ifmt |= FX_UM_E1_ALPHA;
-	 break;
-      case GL_LUMINANCE:
-	 ifmt |= FX_UM_E1_LUMINANCE;
-	 break;
-      case GL_LUMINANCE_ALPHA:
-	 ifmt |= FX_UM_E1_LUMINANCE_ALPHA;
-	 break;
-      case GL_INTENSITY:
-	 ifmt |= FX_UM_E1_INTENSITY;
-	 break;
-      case GL_RGB:
-	 ifmt |= FX_UM_E1_RGB;
-	 break;
-      case GL_RGBA:
-	 ifmt |= FX_UM_E1_RGBA;
-	 break;
-      default:
-	 /* do nothing */
-	 break;
-      }
-
-      switch (ctx->Texture.Unit[1].EnvMode) {
-      case GL_DECAL:
-	 envmode |= FX_UM_E1_DECAL;
-	 break;
-      case GL_MODULATE:
-	 envmode |= FX_UM_E1_MODULATE;
-	 break;
-      case GL_REPLACE:
-	 envmode |= FX_UM_E1_REPLACE;
-	 break;
-      case GL_BLEND:
-	 envmode |= FX_UM_E1_BLEND;
-	 break;
-      case GL_ADD:
-	 envmode |= FX_UM_E1_ADD;
-	 break;
-      default:
-	 /* do nothing */
-	 break;
-      }
-   }
-
-   unitsmode |= (ifmt | envmode);
-
-   if (TDFX_DEBUG & (VERBOSE_DRIVER | VERBOSE_TEXTURE))
-      fxPrintUnitsMode("fxGetTexSetConfiguration", unitsmode);
-
-   return unitsmode;
-}
-
-/************************************************************************/
-/************************* Rendering Mode SetUp *************************/
-/************************************************************************/
-
-/************************* Single Texture Set ***************************/
-
-static void
-fxSetupSingleTMU_NoLock(fxMesaContext fxMesa, struct gl_texture_object *tObj)
-{
-   tfxTexInfo *ti = fxTMGetTexInfo(tObj);
-   int tmu;
-
-   if (TDFX_DEBUG & VERBOSE_DRIVER) {
-      fprintf(stderr, "fxSetupSingleTMU_NoLock(%p (%d))\n", (void *)tObj, tObj->Name);
-   }
-
-   ti->lastTimeUsed = fxMesa->texBindNumber;
-
-   /* Make sure we're not loaded incorrectly */
-   if (ti->isInTM) {
-      if (ti->LODblend) {
-	 if (ti->whichTMU != FX_TMU_SPLIT)
-	    fxTMMoveOutTM(fxMesa, tObj);
-      }
-      else {
-	 if (ti->whichTMU == FX_TMU_SPLIT)
-	    fxTMMoveOutTM(fxMesa, tObj);
-      }
-   }
-
-   /* Make sure we're loaded correctly */
-   if (!ti->isInTM) {
-      if (ti->LODblend)
-	 fxTMMoveInTM_NoLock(fxMesa, tObj, FX_TMU_SPLIT);
-      else {
-	 if (fxMesa->haveTwoTMUs) {
-            if (fxTMCheckStartAddr(fxMesa, FX_TMU0, ti)) {
-	       fxTMMoveInTM_NoLock(fxMesa, tObj, FX_TMU0);
-	    }
-	    else {
-	       fxTMMoveInTM_NoLock(fxMesa, tObj, FX_TMU1);
-	    }
-	 }
-	 else
-	    fxTMMoveInTM_NoLock(fxMesa, tObj, FX_TMU0);
-      }
-   }
-
-   if (ti->LODblend && ti->whichTMU == FX_TMU_SPLIT) {
-      /* broadcast */
-      if ((ti->info.format == GR_TEXFMT_P_8)
-	  && (!fxMesa->haveGlobalPaletteTexture)) {
-	 if (TDFX_DEBUG & VERBOSE_DRIVER) {
-	    fprintf(stderr, "fxSetupSingleTMU_NoLock: uploading texture palette\n");
-	 }
-	 grTexDownloadTable(ti->paltype, &(ti->palette));
-      }
-
-      grTexClampMode(GR_TMU0, ti->sClamp, ti->tClamp);
-      grTexClampMode(GR_TMU1, ti->sClamp, ti->tClamp);
-      grTexFilterMode(GR_TMU0, ti->minFilt, ti->maxFilt);
-      grTexFilterMode(GR_TMU1, ti->minFilt, ti->maxFilt);
-      grTexMipMapMode(GR_TMU0, ti->mmMode, ti->LODblend);
-      grTexMipMapMode(GR_TMU1, ti->mmMode, ti->LODblend);
-
-      grTexSource(GR_TMU0, ti->tm[FX_TMU0]->startAddr,
-			    GR_MIPMAPLEVELMASK_ODD, &(ti->info));
-      grTexSource(GR_TMU1, ti->tm[FX_TMU1]->startAddr,
-			    GR_MIPMAPLEVELMASK_EVEN, &(ti->info));
-   }
-   else {
-      if (ti->whichTMU == FX_TMU_BOTH)
-	 tmu = FX_TMU0;
-      else
-	 tmu = ti->whichTMU;
-
-      /* pointcast */
-      if ((ti->info.format == GR_TEXFMT_P_8)
-	  && (!fxMesa->haveGlobalPaletteTexture)) {
-	 if (TDFX_DEBUG & VERBOSE_DRIVER) {
-	    fprintf(stderr, "fxSetupSingleTMU_NoLock: uploading texture palette\n");
-	 }
-	 fxMesa->Glide.grTexDownloadTableExt(tmu, ti->paltype, &(ti->palette));
-      }
-
-      /* KW: The alternative is to do the download to the other tmu.  If
-       * we get to this point, I think it means we are thrashing the
-       * texture memory, so perhaps it's not a good idea.  
-       */
-      if (ti->LODblend && (TDFX_DEBUG & VERBOSE_DRIVER)) {
-	 fprintf(stderr, "fxSetupSingleTMU_NoLock: not blending texture - only one tmu\n");
-      }
-
-      grTexClampMode(tmu, ti->sClamp, ti->tClamp);
-      grTexFilterMode(tmu, ti->minFilt, ti->maxFilt);
-      grTexMipMapMode(tmu, ti->mmMode, FXFALSE);
-
-      grTexSource(tmu, ti->tm[tmu]->startAddr, GR_MIPMAPLEVELMASK_BOTH, &(ti->info));
-   }
-}
-
-static void
-fxSelectSingleTMUSrc_NoLock(fxMesaContext fxMesa, GLint tmu, FxBool LODblend)
-{
-   struct tdfx_texcombine tex0, tex1;
-
-   if (TDFX_DEBUG & VERBOSE_DRIVER) {
-      fprintf(stderr, "fxSelectSingleTMUSrc_NoLock(%d, %d)\n", tmu, LODblend);
-   }
-
-   tex0.InvertRGB     = FXFALSE;
-   tex0.InvertAlpha   = FXFALSE;
-   tex1.InvertRGB     = FXFALSE;
-   tex1.InvertAlpha   = FXFALSE;
-
-   if (LODblend) {
-      tex0.FunctionRGB   = GR_COMBINE_FUNCTION_BLEND;
-      tex0.FactorRGB     = GR_COMBINE_FACTOR_ONE_MINUS_LOD_FRACTION;
-      tex0.FunctionAlpha = GR_COMBINE_FUNCTION_BLEND;
-      tex0.FactorAlpha   = GR_COMBINE_FACTOR_ONE_MINUS_LOD_FRACTION;
-
-      tex1.FunctionRGB   = GR_COMBINE_FUNCTION_LOCAL;
-      tex1.FactorRGB     = GR_COMBINE_FACTOR_NONE;
-      tex1.FunctionAlpha = GR_COMBINE_FUNCTION_LOCAL;
-      tex1.FactorAlpha   = GR_COMBINE_FACTOR_NONE;
-
-      fxMesa->tmuSrc = FX_TMU_SPLIT;
-   }
-   else {
-      if (tmu != FX_TMU1) {
-         tex0.FunctionRGB   = GR_COMBINE_FUNCTION_LOCAL;
-         tex0.FactorRGB     = GR_COMBINE_FACTOR_NONE;
-         tex0.FunctionAlpha = GR_COMBINE_FUNCTION_LOCAL;
-         tex0.FactorAlpha   = GR_COMBINE_FACTOR_NONE;
-
-         tex1.FunctionRGB   = GR_COMBINE_FUNCTION_ZERO;
-         tex1.FactorRGB     = GR_COMBINE_FACTOR_NONE;
-         tex1.FunctionAlpha = GR_COMBINE_FUNCTION_ZERO;
-         tex1.FactorAlpha   = GR_COMBINE_FACTOR_NONE;
-
-	 fxMesa->tmuSrc = FX_TMU0;
-      }
-      else {
-         tex1.FunctionRGB   = GR_COMBINE_FUNCTION_LOCAL;
-         tex1.FactorRGB     = GR_COMBINE_FACTOR_NONE;
-         tex1.FunctionAlpha = GR_COMBINE_FUNCTION_LOCAL;
-         tex1.FactorAlpha   = GR_COMBINE_FACTOR_NONE;
-
-	 /* correct values to set TMU0 in passthrough mode */
-         tex0.FunctionRGB   = GR_COMBINE_FUNCTION_BLEND;
-         tex0.FactorRGB     = GR_COMBINE_FACTOR_ONE;
-         tex0.FunctionAlpha = GR_COMBINE_FUNCTION_BLEND;
-         tex0.FactorAlpha   = GR_COMBINE_FACTOR_ONE;
-
-	 fxMesa->tmuSrc = FX_TMU1;
-      }
-   }
-
-   grTexCombine(GR_TMU0,
-                tex0.FunctionRGB,
-                tex0.FactorRGB,
-                tex0.FunctionAlpha,
-                tex0.FactorAlpha,
-                tex0.InvertRGB,
-                tex0.InvertAlpha);
-   if (fxMesa->haveTwoTMUs) {
-      grTexCombine(GR_TMU1,
-                   tex1.FunctionRGB,
-                   tex1.FactorRGB,
-                   tex1.FunctionAlpha,
-                   tex1.FactorAlpha,
-                   tex1.InvertRGB,
-                   tex1.InvertAlpha);
-   }
-}
-
-static void
-fxSetupTextureSingleTMU_NoLock(GLcontext * ctx, GLuint textureset)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   struct tdfx_combine alphaComb, colorComb;
-   GrCombineLocal_t localc, locala;
-   GLuint unitsmode;
-   GLint ifmt;
-   tfxTexInfo *ti;
-   struct gl_texture_object *tObj = ctx->Texture.Unit[textureset]._Current;
-   int tmu;
-
-   if (TDFX_DEBUG & VERBOSE_DRIVER) {
-      fprintf(stderr, "fxSetupTextureSingleTMU_NoLock(%d)\n", textureset);
-   }
-
-   ti = fxTMGetTexInfo(tObj);
-
-   fxTexValidate(ctx, tObj);
-
-   fxSetupSingleTMU_NoLock(fxMesa, tObj);
-
-   if (ti->whichTMU == FX_TMU_BOTH)
-      tmu = FX_TMU0;
-   else
-      tmu = ti->whichTMU;
-   if (fxMesa->tmuSrc != tmu)
-      fxSelectSingleTMUSrc_NoLock(fxMesa, tmu, ti->LODblend);
-
-   if (textureset == 0 || !fxMesa->haveTwoTMUs)
-      unitsmode = fxGetTexSetConfiguration(ctx, tObj, NULL);
-   else
-      unitsmode = fxGetTexSetConfiguration(ctx, NULL, tObj);
-
-/*    if(fxMesa->lastUnitsMode==unitsmode) */
-/*      return; */
-
-   fxMesa->lastUnitsMode = unitsmode;
-
-   fxMesa->stw_hint_state = 0;
-   FX_grHints_NoLock(GR_HINT_STWHINT, 0);
-
-   ifmt = ti->baseLevelInternalFormat;
-
-   if (unitsmode & FX_UM_ALPHA_ITERATED)
-      locala = GR_COMBINE_LOCAL_ITERATED;
-   else
-      locala = GR_COMBINE_LOCAL_CONSTANT;
-
-   if (unitsmode & FX_UM_COLOR_ITERATED)
-      localc = GR_COMBINE_LOCAL_ITERATED;
-   else
-      localc = GR_COMBINE_LOCAL_CONSTANT;
-
-   if (TDFX_DEBUG & (VERBOSE_DRIVER | VERBOSE_TEXTURE))
-      fprintf(stderr, "fxSetupTextureSingleTMU_NoLock: envmode is %s\n",
-	      _mesa_lookup_enum_by_nr(ctx->Texture.Unit[textureset].EnvMode));
-
-   alphaComb.Local    = locala;
-   alphaComb.Invert   = FXFALSE;
-   colorComb.Local    = localc;
-   colorComb.Invert   = FXFALSE;
-
-   switch (ctx->Texture.Unit[textureset].EnvMode) {
-   case GL_DECAL:
-      alphaComb.Function = GR_COMBINE_FUNCTION_LOCAL;
-      alphaComb.Factor   = GR_COMBINE_FACTOR_NONE;
-      alphaComb.Other    = GR_COMBINE_OTHER_NONE;
-
-      colorComb.Function = GR_COMBINE_FUNCTION_BLEND;
-      colorComb.Factor   = GR_COMBINE_FACTOR_TEXTURE_ALPHA;
-      colorComb.Other    = GR_COMBINE_OTHER_TEXTURE;
-      break;
-   case GL_MODULATE:
-      alphaComb.Function = GR_COMBINE_FUNCTION_SCALE_OTHER;
-      alphaComb.Factor   = GR_COMBINE_FACTOR_LOCAL;
-      alphaComb.Other    = GR_COMBINE_OTHER_TEXTURE;
-
-      if (ifmt == GL_ALPHA) {
-         colorComb.Function = GR_COMBINE_FUNCTION_LOCAL;
-         colorComb.Factor   = GR_COMBINE_FACTOR_NONE;
-         colorComb.Other    = GR_COMBINE_OTHER_NONE;
-      } else {
-         colorComb.Function = GR_COMBINE_FUNCTION_SCALE_OTHER;
-         colorComb.Factor   = GR_COMBINE_FACTOR_LOCAL;
-         colorComb.Other    = GR_COMBINE_OTHER_TEXTURE;
-      }
-      break;
-   case GL_BLEND:
-      if (ifmt == GL_LUMINANCE || ifmt == GL_RGB) {
-         /* Av = Af */
-         alphaComb.Function = GR_COMBINE_FUNCTION_LOCAL;
-         alphaComb.Factor   = GR_COMBINE_FACTOR_NONE;
-         alphaComb.Other    = GR_COMBINE_OTHER_NONE;
-      }
-      else if (ifmt == GL_INTENSITY) {
-         /* Av = Af * (1 - It) + Ac * It */
-         alphaComb.Function = GR_COMBINE_FUNCTION_BLEND;
-         alphaComb.Factor   = GR_COMBINE_FACTOR_TEXTURE_ALPHA;
-         alphaComb.Other    = GR_COMBINE_OTHER_CONSTANT;
-      }
-      else {
-         /* Av = Af * At */
-         alphaComb.Function = GR_COMBINE_FUNCTION_SCALE_OTHER;
-         alphaComb.Factor   = GR_COMBINE_FACTOR_LOCAL;
-         alphaComb.Other    = GR_COMBINE_OTHER_TEXTURE;
-      }
-
-      if (ifmt == GL_ALPHA) {
-         colorComb.Function = GR_COMBINE_FUNCTION_LOCAL;
-         colorComb.Factor   = GR_COMBINE_FACTOR_NONE;
-         colorComb.Other    = GR_COMBINE_OTHER_NONE;
-      } else {
-         if (fxMesa->type >= GR_SSTTYPE_Voodoo2) {
-            colorComb.Function = GR_COMBINE_FUNCTION_BLEND;
-            colorComb.Factor   = GR_COMBINE_FACTOR_TEXTURE_RGB;
-            colorComb.Other    = GR_COMBINE_OTHER_CONSTANT;
-         } else if (ifmt == GL_INTENSITY) {
-            /* just a hack: RGB == ALPHA */
-            colorComb.Function = GR_COMBINE_FUNCTION_BLEND;
-            colorComb.Factor   = GR_COMBINE_FACTOR_TEXTURE_ALPHA;
-            colorComb.Other    = GR_COMBINE_OTHER_CONSTANT;
-         } else {
-            /* Only Voodoo^2 can GL_BLEND (GR_COMBINE_FACTOR_TEXTURE_RGB)
-             * These settings assume that the TexEnv color is black and
-             * incoming fragment color is white.
-             */
-            colorComb.Function = GR_COMBINE_FUNCTION_SCALE_OTHER;
-            colorComb.Factor   = GR_COMBINE_FACTOR_ONE;
-            colorComb.Other    = GR_COMBINE_OTHER_TEXTURE;
-            colorComb.Invert   = FXTRUE;
-            _mesa_problem(NULL, "can't GL_BLEND with SST1");
-         }
-      }
-
-      grConstantColorValue(
-         (((GLuint)(ctx->Texture.Unit[textureset].EnvColor[0] * 255.0f))      ) |
-         (((GLuint)(ctx->Texture.Unit[textureset].EnvColor[1] * 255.0f)) <<  8) |
-         (((GLuint)(ctx->Texture.Unit[textureset].EnvColor[2] * 255.0f)) << 16) |
-         (((GLuint)(ctx->Texture.Unit[textureset].EnvColor[3] * 255.0f)) << 24));
-      break;
-   case GL_REPLACE:
-      if ((ifmt == GL_RGB) || (ifmt == GL_LUMINANCE)) {
-         alphaComb.Function = GR_COMBINE_FUNCTION_LOCAL;
-         alphaComb.Factor   = GR_COMBINE_FACTOR_NONE;
-         alphaComb.Other    = GR_COMBINE_OTHER_NONE;
-      } else {
-         alphaComb.Function = GR_COMBINE_FUNCTION_SCALE_OTHER;
-         alphaComb.Factor   = GR_COMBINE_FACTOR_ONE;
-         alphaComb.Other    = GR_COMBINE_OTHER_TEXTURE;
-      }
-
-      if (ifmt == GL_ALPHA) {
-         colorComb.Function = GR_COMBINE_FUNCTION_LOCAL;
-         colorComb.Factor   = GR_COMBINE_FACTOR_NONE;
-         colorComb.Other    = GR_COMBINE_OTHER_NONE;
-      } else {
-         colorComb.Function = GR_COMBINE_FUNCTION_SCALE_OTHER;
-         colorComb.Factor   = GR_COMBINE_FACTOR_ONE;
-         colorComb.Other    = GR_COMBINE_OTHER_TEXTURE;
-      }
-      break;
-   case GL_ADD:
-      if (ifmt == GL_ALPHA ||
-          ifmt == GL_LUMINANCE_ALPHA ||
-          ifmt == GL_RGBA) {
-         /* product of texel and fragment alpha */
-         alphaComb.Function = GR_COMBINE_FUNCTION_SCALE_OTHER;
-         alphaComb.Factor   = GR_COMBINE_FACTOR_LOCAL;
-         alphaComb.Other    = GR_COMBINE_OTHER_TEXTURE;
-      }
-      else if (ifmt == GL_LUMINANCE || ifmt == GL_RGB) {
-         /* fragment alpha is unchanged */
-         alphaComb.Function = GR_COMBINE_FUNCTION_LOCAL;
-         alphaComb.Factor   = GR_COMBINE_FACTOR_NONE;
-         alphaComb.Other    = GR_COMBINE_OTHER_NONE;
-      }
-      else {
-         /* sum of texel and fragment alpha */
-         alphaComb.Function = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL;
-         alphaComb.Factor   = GR_COMBINE_FACTOR_ONE;
-         alphaComb.Other    = GR_COMBINE_OTHER_TEXTURE;
-      }
-
-      if (ifmt == GL_ALPHA) {
-         /* rgb unchanged */
-         colorComb.Function = GR_COMBINE_FUNCTION_LOCAL;
-         colorComb.Factor   = GR_COMBINE_FACTOR_NONE;
-         colorComb.Other    = GR_COMBINE_OTHER_NONE;
-      }
-      else {
-         /* sum of texel and fragment rgb */
-         colorComb.Function = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL;
-         colorComb.Factor   = GR_COMBINE_FACTOR_ONE;
-         colorComb.Other    = GR_COMBINE_OTHER_TEXTURE;
-      }
-      break;
-   default:
-      if (TDFX_DEBUG & VERBOSE_DRIVER) {
-	 fprintf(stderr, "fxSetupTextureSingleTMU_NoLock: %x Texture.EnvMode not yet supported\n",
-		 ctx->Texture.Unit[textureset].EnvMode);
-      }
-      return;
-   }
-
-   grAlphaCombine(alphaComb.Function,
-                  alphaComb.Factor,
-                  alphaComb.Local,
-                  alphaComb.Other,
-                  alphaComb.Invert);
-   grColorCombine(colorComb.Function,
-                  colorComb.Factor,
-                  colorComb.Local,
-                  colorComb.Other,
-                  colorComb.Invert);
-}
-
-#if 00
-static void
-fxSetupTextureSingleTMU(GLcontext * ctx, GLuint textureset)
-{
-   BEGIN_BOARD_LOCK();
-   fxSetupTextureSingleTMU_NoLock(ctx, textureset);
-   END_BOARD_LOCK();
-}
-#endif
-
-
-/************************* Double Texture Set ***************************/
-
-static void
-fxSetupDoubleTMU_NoLock(fxMesaContext fxMesa,
-			struct gl_texture_object *tObj0,
-			struct gl_texture_object *tObj1)
-{
-#define T0_NOT_IN_TMU  0x01
-#define T1_NOT_IN_TMU  0x02
-#define T0_IN_TMU0     0x04
-#define T1_IN_TMU0     0x08
-#define T0_IN_TMU1     0x10
-#define T1_IN_TMU1     0x20
-
-   tfxTexInfo *ti0 = fxTMGetTexInfo(tObj0);
-   tfxTexInfo *ti1 = fxTMGetTexInfo(tObj1);
-   GLuint tstate = 0;
-   int tmu0 = 0, tmu1 = 1;
-
-   if (TDFX_DEBUG & VERBOSE_DRIVER) {
-      fprintf(stderr, "fxSetupDoubleTMU_NoLock(...)\n");
-   }
-
-   /* We shouldn't need to do this. There is something wrong with
-      mutlitexturing when the TMUs are swapped. So, we're forcing
-      them to always be loaded correctly. !!! */
-   if (ti0->whichTMU == FX_TMU1)
-      fxTMMoveOutTM_NoLock(fxMesa, tObj0);
-   if (ti1->whichTMU == FX_TMU0)
-      fxTMMoveOutTM_NoLock(fxMesa, tObj1);
-
-   if (ti0->isInTM) {
-      switch (ti0->whichTMU) {
-      case FX_TMU0:
-	 tstate |= T0_IN_TMU0;
-	 break;
-      case FX_TMU1:
-	 tstate |= T0_IN_TMU1;
-	 break;
-      case FX_TMU_BOTH:
-	 tstate |= T0_IN_TMU0 | T0_IN_TMU1;
-	 break;
-      case FX_TMU_SPLIT:
-	 tstate |= T0_NOT_IN_TMU;
-	 break;
-      }
-   }
-   else
-      tstate |= T0_NOT_IN_TMU;
-
-   if (ti1->isInTM) {
-      switch (ti1->whichTMU) {
-      case FX_TMU0:
-	 tstate |= T1_IN_TMU0;
-	 break;
-      case FX_TMU1:
-	 tstate |= T1_IN_TMU1;
-	 break;
-      case FX_TMU_BOTH:
-	 tstate |= T1_IN_TMU0 | T1_IN_TMU1;
-	 break;
-      case FX_TMU_SPLIT:
-	 tstate |= T1_NOT_IN_TMU;
-	 break;
-      }
-   }
-   else
-      tstate |= T1_NOT_IN_TMU;
-
-   ti0->lastTimeUsed = fxMesa->texBindNumber;
-   ti1->lastTimeUsed = fxMesa->texBindNumber;
-
-   /* Move texture maps into TMUs */
-
-   if (!(((tstate & T0_IN_TMU0) && (tstate & T1_IN_TMU1)) ||
-	 ((tstate & T0_IN_TMU1) && (tstate & T1_IN_TMU0)))) {
-      if (tObj0 == tObj1)
-	 fxTMMoveInTM_NoLock(fxMesa, tObj1, FX_TMU_BOTH);
-      else {
-	 /* Find the minimal way to correct the situation */
-	 if ((tstate & T0_IN_TMU0) || (tstate & T1_IN_TMU1)) {
-	    /* We have one in the standard order, setup the other */
-	    if (tstate & T0_IN_TMU0) {	/* T0 is in TMU0, put T1 in TMU1 */
-	       fxTMMoveInTM_NoLock(fxMesa, tObj1, FX_TMU1);
-	    }
-	    else {
-	       fxTMMoveInTM_NoLock(fxMesa, tObj0, FX_TMU0);
-	    }
-	    /* tmu0 and tmu1 are setup */
-	 }
-	 else if ((tstate & T0_IN_TMU1) || (tstate & T1_IN_TMU0)) {
-	    /* we have one in the reverse order, setup the other */
-	    if (tstate & T1_IN_TMU0) {	/* T1 is in TMU0, put T0 in TMU1 */
-	       fxTMMoveInTM_NoLock(fxMesa, tObj0, FX_TMU1);
-	    }
-	    else {
-	       fxTMMoveInTM_NoLock(fxMesa, tObj1, FX_TMU0);
-	    }
-	    tmu0 = 1;
-	    tmu1 = 0;
-	 }
-	 else {			/* Nothing is loaded */
-	    fxTMMoveInTM_NoLock(fxMesa, tObj0, FX_TMU0);
-	    fxTMMoveInTM_NoLock(fxMesa, tObj1, FX_TMU1);
-	    /* tmu0 and tmu1 are setup */
-	 }
-      }
-   }
-
-   /* [dBorca] Hack alert:
-    * we put these in reverse order, so that if we can't
-    * do _REAL_ pointcast, the TMU0 table gets broadcasted
-    */
-   if (!fxMesa->haveGlobalPaletteTexture) {
-      /* pointcast */
-      if (ti1->info.format == GR_TEXFMT_P_8) {
-	 if (TDFX_DEBUG & VERBOSE_DRIVER) {
-	    fprintf(stderr, "fxSetupDoubleTMU_NoLock: uploading texture palette for TMU1\n");
-	 }
-	 fxMesa->Glide.grTexDownloadTableExt(ti1->whichTMU, ti1->paltype, &(ti1->palette));
-      }
-      if (ti0->info.format == GR_TEXFMT_P_8) {
-	 if (TDFX_DEBUG & VERBOSE_DRIVER) {
-	    fprintf(stderr, "fxSetupDoubleTMU_NoLock: uploading texture palette for TMU0\n");
-	 }
-	 fxMesa->Glide.grTexDownloadTableExt(ti0->whichTMU, ti0->paltype, &(ti0->palette));
-      }
-   }
-
-   grTexSource(tmu0, ti0->tm[tmu0]->startAddr,
-			 GR_MIPMAPLEVELMASK_BOTH, &(ti0->info));
-   grTexClampMode(tmu0, ti0->sClamp, ti0->tClamp);
-   grTexFilterMode(tmu0, ti0->minFilt, ti0->maxFilt);
-   grTexMipMapMode(tmu0, ti0->mmMode, FXFALSE);
-
-   grTexSource(tmu1, ti1->tm[tmu1]->startAddr,
-			 GR_MIPMAPLEVELMASK_BOTH, &(ti1->info));
-   grTexClampMode(tmu1, ti1->sClamp, ti1->tClamp);
-   grTexFilterMode(tmu1, ti1->minFilt, ti1->maxFilt);
-   grTexMipMapMode(tmu1, ti1->mmMode, FXFALSE);
-
-#undef T0_NOT_IN_TMU
-#undef T1_NOT_IN_TMU
-#undef T0_IN_TMU0
-#undef T1_IN_TMU0
-#undef T0_IN_TMU1
-#undef T1_IN_TMU1
-}
-
-static void
-fxSetupTextureDoubleTMU_NoLock(GLcontext * ctx)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   struct tdfx_combine alphaComb, colorComb;
-   struct tdfx_texcombine tex0, tex1;
-   GrCombineLocal_t localc, locala;
-   tfxTexInfo *ti0, *ti1;
-   struct gl_texture_object *tObj0 = ctx->Texture.Unit[1]._Current;
-   struct gl_texture_object *tObj1 = ctx->Texture.Unit[0]._Current;
-   GLuint envmode, ifmt, unitsmode;
-   int tmu0 = 0, tmu1 = 1;
-
-   if (TDFX_DEBUG & VERBOSE_DRIVER) {
-      fprintf(stderr, "fxSetupTextureDoubleTMU_NoLock(...)\n");
-   }
-
-   ti0 = fxTMGetTexInfo(tObj0);
-   fxTexValidate(ctx, tObj0);
-
-   ti1 = fxTMGetTexInfo(tObj1);
-   fxTexValidate(ctx, tObj1);
-
-   fxSetupDoubleTMU_NoLock(fxMesa, tObj0, tObj1);
-
-   unitsmode = fxGetTexSetConfiguration(ctx, tObj0, tObj1);
-
-/*    if(fxMesa->lastUnitsMode==unitsmode) */
-/*      return; */
-
-   fxMesa->lastUnitsMode = unitsmode;
-
-   fxMesa->stw_hint_state |= GR_STWHINT_ST_DIFF_TMU1;
-   FX_grHints_NoLock(GR_HINT_STWHINT, fxMesa->stw_hint_state);
-
-   envmode = unitsmode & FX_UM_E_ENVMODE;
-   ifmt = unitsmode & FX_UM_E_IFMT;
-
-   if (unitsmode & FX_UM_ALPHA_ITERATED)
-      locala = GR_COMBINE_LOCAL_ITERATED;
-   else
-      locala = GR_COMBINE_LOCAL_CONSTANT;
-
-   if (unitsmode & FX_UM_COLOR_ITERATED)
-      localc = GR_COMBINE_LOCAL_ITERATED;
-   else
-      localc = GR_COMBINE_LOCAL_CONSTANT;
-
-
-   if (TDFX_DEBUG & (VERBOSE_DRIVER | VERBOSE_TEXTURE))
-      fprintf(stderr, "fxSetupTextureDoubleTMU_NoLock: envmode is %s/%s\n",
-	      _mesa_lookup_enum_by_nr(ctx->Texture.Unit[0].EnvMode),
-	      _mesa_lookup_enum_by_nr(ctx->Texture.Unit[1].EnvMode));
-
-
-   if ((ti0->whichTMU == FX_TMU1) || (ti1->whichTMU == FX_TMU0)) {
-      tmu0 = 1;
-      tmu1 = 0;
-   }
-   fxMesa->tmuSrc = FX_TMU_BOTH;
-
-   tex0.InvertRGB     = FXFALSE;
-   tex0.InvertAlpha   = FXFALSE;
-   tex1.InvertRGB     = FXFALSE;
-   tex1.InvertAlpha   = FXFALSE;
-   alphaComb.Local    = locala;
-   alphaComb.Invert   = FXFALSE;
-   colorComb.Local    = localc;
-   colorComb.Invert   = FXFALSE;
-
-   switch (envmode) {
-   case (FX_UM_E0_MODULATE | FX_UM_E1_MODULATE):
-      {
-	 GLboolean isalpha[FX_NUM_TMU];
-
-	 isalpha[tmu0] = (ti0->baseLevelInternalFormat == GL_ALPHA);
-	 isalpha[tmu1] = (ti1->baseLevelInternalFormat == GL_ALPHA);
-
-	 if (isalpha[FX_TMU1]) {
-            tex1.FunctionRGB   = GR_COMBINE_FUNCTION_ZERO;
-            tex1.FactorRGB     = GR_COMBINE_FACTOR_NONE;
-            tex1.FunctionAlpha = GR_COMBINE_FUNCTION_LOCAL;
-            tex1.FactorAlpha   = GR_COMBINE_FACTOR_NONE;
-            tex1.InvertRGB     = FXTRUE;
-	 } else {
-            tex1.FunctionRGB   = GR_COMBINE_FUNCTION_LOCAL;
-            tex1.FactorRGB     = GR_COMBINE_FACTOR_NONE;
-            tex1.FunctionAlpha = GR_COMBINE_FUNCTION_LOCAL;
-            tex1.FactorAlpha   = GR_COMBINE_FACTOR_NONE;
-         }
-
-	 if (isalpha[FX_TMU0]) {
-            tex0.FunctionRGB   = GR_COMBINE_FUNCTION_BLEND_OTHER;
-            tex0.FactorRGB     = GR_COMBINE_FACTOR_ONE;
-            tex0.FunctionAlpha = GR_COMBINE_FUNCTION_BLEND_OTHER;
-            tex0.FactorAlpha   = GR_COMBINE_FACTOR_LOCAL;
-	 } else {
-            tex0.FunctionRGB   = GR_COMBINE_FUNCTION_BLEND_OTHER;
-            tex0.FactorRGB     = GR_COMBINE_FACTOR_LOCAL;
-            tex0.FunctionAlpha = GR_COMBINE_FUNCTION_BLEND_OTHER;
-            tex0.FactorAlpha   = GR_COMBINE_FACTOR_LOCAL;
-         }
-
-         colorComb.Function = GR_COMBINE_FUNCTION_SCALE_OTHER;
-         colorComb.Factor   = GR_COMBINE_FACTOR_LOCAL;
-         colorComb.Other    = GR_COMBINE_OTHER_TEXTURE;
-
-         alphaComb.Function = GR_COMBINE_FUNCTION_SCALE_OTHER;
-         alphaComb.Factor   = GR_COMBINE_FACTOR_LOCAL;
-         alphaComb.Other    = GR_COMBINE_OTHER_TEXTURE;
-	 break;
-      }
-   case (FX_UM_E0_REPLACE | FX_UM_E1_BLEND):	/* Only for GLQuake */
-      if (tmu0 == FX_TMU1) {
-         tex1.FunctionRGB   = GR_COMBINE_FUNCTION_LOCAL;
-         tex1.FactorRGB     = GR_COMBINE_FACTOR_NONE;
-         tex1.FunctionAlpha = GR_COMBINE_FUNCTION_LOCAL;
-         tex1.FactorAlpha   = GR_COMBINE_FACTOR_NONE;
-         tex1.InvertRGB     = FXTRUE;
-
-         tex0.FunctionRGB   = GR_COMBINE_FUNCTION_BLEND_OTHER;
-         tex0.FactorRGB     = GR_COMBINE_FACTOR_LOCAL;
-         tex0.FunctionAlpha = GR_COMBINE_FUNCTION_BLEND_OTHER;
-         tex0.FactorAlpha   = GR_COMBINE_FACTOR_LOCAL;
-      }
-      else {
-         tex1.FunctionRGB   = GR_COMBINE_FUNCTION_LOCAL;
-         tex1.FactorRGB     = GR_COMBINE_FACTOR_NONE;
-         tex1.FunctionAlpha = GR_COMBINE_FUNCTION_LOCAL;
-         tex1.FactorAlpha   = GR_COMBINE_FACTOR_NONE;
-
-         tex0.FunctionRGB   = GR_COMBINE_FUNCTION_BLEND_OTHER;
-         tex0.FactorRGB     = GR_COMBINE_FACTOR_ONE_MINUS_LOCAL;
-         tex0.FunctionAlpha = GR_COMBINE_FUNCTION_BLEND_OTHER;
-         tex0.FactorAlpha   = GR_COMBINE_FACTOR_ONE_MINUS_LOCAL;
-      }
-
-      alphaComb.Function = GR_COMBINE_FUNCTION_LOCAL;
-      alphaComb.Factor   = GR_COMBINE_FACTOR_NONE;
-      alphaComb.Other    = GR_COMBINE_OTHER_NONE;
-
-      colorComb.Function = GR_COMBINE_FUNCTION_SCALE_OTHER;
-      colorComb.Factor   = GR_COMBINE_FACTOR_ONE;
-      colorComb.Other    = GR_COMBINE_OTHER_TEXTURE;
-      break;
-   case (FX_UM_E0_REPLACE | FX_UM_E1_MODULATE):	/* Quake 2 and 3 */
-      if (tmu1 == FX_TMU1) {
-         tex1.FunctionRGB   = GR_COMBINE_FUNCTION_LOCAL;
-         tex1.FactorRGB     = GR_COMBINE_FACTOR_NONE;
-         tex1.FunctionAlpha = GR_COMBINE_FUNCTION_ZERO;
-         tex1.FactorAlpha   = GR_COMBINE_FACTOR_NONE;
-         tex1.InvertAlpha   = FXTRUE;
-
-         tex0.FunctionRGB   = GR_COMBINE_FUNCTION_BLEND_OTHER;
-         tex0.FactorRGB     = GR_COMBINE_FACTOR_LOCAL;
-         tex0.FunctionAlpha = GR_COMBINE_FUNCTION_BLEND_OTHER;
-         tex0.FactorAlpha   = GR_COMBINE_FACTOR_LOCAL;
-      }
-      else {
-         tex1.FunctionRGB   = GR_COMBINE_FUNCTION_LOCAL;
-         tex1.FactorRGB     = GR_COMBINE_FACTOR_NONE;
-         tex1.FunctionAlpha = GR_COMBINE_FUNCTION_LOCAL;
-         tex1.FactorAlpha   = GR_COMBINE_FACTOR_NONE;
-
-         tex0.FunctionRGB   = GR_COMBINE_FUNCTION_BLEND_OTHER;
-         tex0.FactorRGB     = GR_COMBINE_FACTOR_LOCAL;
-         tex0.FunctionAlpha = GR_COMBINE_FUNCTION_BLEND_OTHER;
-         tex0.FactorAlpha   = GR_COMBINE_FACTOR_ONE;
-      }
-
-      if (ti0->baseLevelInternalFormat == GL_RGB) {
-         alphaComb.Function = GR_COMBINE_FUNCTION_LOCAL;
-         alphaComb.Factor   = GR_COMBINE_FACTOR_NONE;
-         alphaComb.Other    = GR_COMBINE_OTHER_NONE;
-      } else {
-         alphaComb.Function = GR_COMBINE_FUNCTION_SCALE_OTHER;
-         alphaComb.Factor   = GR_COMBINE_FACTOR_ONE;
-         alphaComb.Other    = GR_COMBINE_OTHER_NONE;
-      }
-
-      colorComb.Function = GR_COMBINE_FUNCTION_SCALE_OTHER;
-      colorComb.Factor   = GR_COMBINE_FACTOR_ONE;
-      colorComb.Other    = GR_COMBINE_OTHER_TEXTURE;
-      break;
-
-
-   case (FX_UM_E0_MODULATE | FX_UM_E1_ADD):	/* Quake 3 Sky */
-      {
-	 GLboolean isalpha[FX_NUM_TMU];
-
-	 isalpha[tmu0] = (ti0->baseLevelInternalFormat == GL_ALPHA);
-	 isalpha[tmu1] = (ti1->baseLevelInternalFormat == GL_ALPHA);
-
-	 if (isalpha[FX_TMU1]) {
-            tex1.FunctionRGB   = GR_COMBINE_FUNCTION_ZERO;
-            tex1.FactorRGB     = GR_COMBINE_FACTOR_NONE;
-            tex1.FunctionAlpha = GR_COMBINE_FUNCTION_LOCAL;
-            tex1.FactorAlpha   = GR_COMBINE_FACTOR_NONE;
-            tex1.InvertRGB     = FXTRUE;
-	 } else {
-            tex1.FunctionRGB   = GR_COMBINE_FUNCTION_LOCAL;
-            tex1.FactorRGB     = GR_COMBINE_FACTOR_NONE;
-            tex1.FunctionAlpha = GR_COMBINE_FUNCTION_LOCAL;
-            tex1.FactorAlpha   = GR_COMBINE_FACTOR_NONE;
-         }
-
-	 if (isalpha[FX_TMU0]) {
-            tex0.FunctionRGB   = GR_COMBINE_FUNCTION_SCALE_OTHER;
-            tex0.FactorRGB     = GR_COMBINE_FACTOR_ONE;
-            tex0.FunctionAlpha = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL;
-            tex0.FactorAlpha   = GR_COMBINE_FACTOR_ONE;
-	 } else {
-            tex0.FunctionRGB   = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL;
-            tex0.FactorRGB     = GR_COMBINE_FACTOR_ONE;
-            tex0.FunctionAlpha = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL;
-            tex0.FactorAlpha   = GR_COMBINE_FACTOR_ONE;
-         }
-
-         colorComb.Function = GR_COMBINE_FUNCTION_SCALE_OTHER;
-         colorComb.Factor   = GR_COMBINE_FACTOR_LOCAL;
-         colorComb.Other    = GR_COMBINE_OTHER_TEXTURE;
-
-         alphaComb.Function = GR_COMBINE_FUNCTION_SCALE_OTHER;
-         alphaComb.Factor   = GR_COMBINE_FACTOR_LOCAL;
-         alphaComb.Other    = GR_COMBINE_OTHER_TEXTURE;
-	 break;
-      }
-
-   case (FX_UM_E0_REPLACE | FX_UM_E1_ADD):	/* Vulpine Sky */
-      {
-	 GLboolean isalpha[FX_NUM_TMU];
-
-	 isalpha[tmu0] = (ti0->baseLevelInternalFormat == GL_ALPHA);
-	 isalpha[tmu1] = (ti1->baseLevelInternalFormat == GL_ALPHA);
-
-	 if (isalpha[FX_TMU1]) {
-            tex1.FunctionRGB   = GR_COMBINE_FUNCTION_ZERO;
-            tex1.FactorRGB     = GR_COMBINE_FACTOR_NONE;
-            tex1.FunctionAlpha = GR_COMBINE_FUNCTION_LOCAL;
-            tex1.FactorAlpha   = GR_COMBINE_FACTOR_NONE;
-            tex1.InvertRGB     = FXTRUE;
-	 } else {
-            tex1.FunctionRGB   = GR_COMBINE_FUNCTION_LOCAL;
-            tex1.FactorRGB     = GR_COMBINE_FACTOR_NONE;
-            tex1.FunctionAlpha = GR_COMBINE_FUNCTION_LOCAL;
-            tex1.FactorAlpha   = GR_COMBINE_FACTOR_NONE;
-         }
-
-	 if (isalpha[FX_TMU0]) {
-            tex0.FunctionRGB   = GR_COMBINE_FUNCTION_SCALE_OTHER;
-            tex0.FactorRGB     = GR_COMBINE_FACTOR_ONE;
-            tex0.FunctionAlpha = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL;
-            tex0.FactorAlpha   = GR_COMBINE_FACTOR_ONE;
-	 } else {
-            tex0.FunctionRGB   = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL;
-            tex0.FactorRGB     = GR_COMBINE_FACTOR_ONE;
-            tex0.FunctionAlpha = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL;
-            tex0.FactorAlpha   = GR_COMBINE_FACTOR_ONE;
-         }
-
-         colorComb.Function = GR_COMBINE_FUNCTION_SCALE_OTHER;
-         colorComb.Factor   = GR_COMBINE_FACTOR_ONE;
-         colorComb.Other    = GR_COMBINE_OTHER_TEXTURE;
-
-         alphaComb.Function = GR_COMBINE_FUNCTION_SCALE_OTHER;
-         alphaComb.Factor   = GR_COMBINE_FACTOR_ONE;
-         alphaComb.Other    = GR_COMBINE_OTHER_TEXTURE;
-	 break;
-      }
-
-   case (FX_UM_E0_MODULATE | FX_UM_E1_REPLACE): /* Homeworld2 */
-      {
-         tex1.FunctionRGB   = GR_COMBINE_FUNCTION_ZERO;
-         tex1.FactorRGB     = GR_COMBINE_FACTOR_NONE;
-         tex1.FunctionAlpha = GR_COMBINE_FUNCTION_ZERO;
-         tex1.FactorAlpha   = GR_COMBINE_FACTOR_NONE;
-
-         tex0.FunctionRGB   = GR_COMBINE_FUNCTION_LOCAL;
-         tex0.FactorRGB     = GR_COMBINE_FACTOR_NONE;
-         tex0.FunctionAlpha = GR_COMBINE_FUNCTION_LOCAL;
-         tex0.FactorAlpha   = GR_COMBINE_FACTOR_NONE;
-
-         if (ifmt & (FX_UM_E0_RGB | FX_UM_E0_LUMINANCE)) {
-            alphaComb.Function = GR_COMBINE_FUNCTION_LOCAL;
-            alphaComb.Factor   = GR_COMBINE_FACTOR_NONE;
-            alphaComb.Other    = GR_COMBINE_OTHER_NONE;
-         } else {
-            alphaComb.Function = GR_COMBINE_FUNCTION_SCALE_OTHER;
-            alphaComb.Factor   = GR_COMBINE_FACTOR_ONE;
-            alphaComb.Other    = GR_COMBINE_OTHER_TEXTURE;
-         }
-
-         if (ifmt & FX_UM_E0_ALPHA) {
-            colorComb.Function = GR_COMBINE_FUNCTION_LOCAL;
-            colorComb.Factor   = GR_COMBINE_FACTOR_NONE;
-            colorComb.Other    = GR_COMBINE_OTHER_NONE;
-         } else {
-            colorComb.Function = GR_COMBINE_FUNCTION_SCALE_OTHER;
-            colorComb.Factor   = GR_COMBINE_FACTOR_ONE;
-            colorComb.Other    = GR_COMBINE_OTHER_TEXTURE;
-         }
-         break;
-      }
-   default:
-      fprintf(stderr, "fxSetupTextureDoubleTMU_NoLock: Unexpected dual texture mode encountered\n");
-      return;
-   }
-
-   grAlphaCombine(alphaComb.Function,
-                  alphaComb.Factor,
-                  alphaComb.Local,
-                  alphaComb.Other,
-                  alphaComb.Invert);
-   grColorCombine(colorComb.Function,
-                  colorComb.Factor,
-                  colorComb.Local,
-                  colorComb.Other,
-                  colorComb.Invert);
-   grTexCombine(GR_TMU0,
-                tex0.FunctionRGB,
-                tex0.FactorRGB,
-                tex0.FunctionAlpha,
-                tex0.FactorAlpha,
-                tex0.InvertRGB,
-                tex0.InvertAlpha);
-   grTexCombine(GR_TMU1,
-                tex1.FunctionRGB,
-                tex1.FactorRGB,
-                tex1.FunctionAlpha,
-                tex1.FactorAlpha,
-                tex1.InvertRGB,
-                tex1.InvertAlpha);
-}
-
-/************************* No Texture ***************************/
-
-static void
-fxSetupTextureNone_NoLock(GLcontext * ctx)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   GrCombineLocal_t localc, locala;
-
-   if (TDFX_DEBUG & VERBOSE_DRIVER) {
-      fprintf(stderr, "fxSetupTextureNone_NoLock(...)\n");
-   }
-
-   if ((ctx->Light.ShadeModel == GL_SMOOTH) || 1 ||
-       (ctx->Point.SmoothFlag) ||
-       (ctx->Line.SmoothFlag) ||
-       (ctx->Polygon.SmoothFlag)) locala = GR_COMBINE_LOCAL_ITERATED;
-   else
-      locala = GR_COMBINE_LOCAL_CONSTANT;
-
-   if (ctx->Light.ShadeModel == GL_SMOOTH || 1)
-      localc = GR_COMBINE_LOCAL_ITERATED;
-   else
-      localc = GR_COMBINE_LOCAL_CONSTANT;
-
-   grAlphaCombine(GR_COMBINE_FUNCTION_LOCAL,
-                  GR_COMBINE_FACTOR_NONE,
-                  locala,
-                  GR_COMBINE_OTHER_NONE,
-                  FXFALSE);
-
-   grColorCombine(GR_COMBINE_FUNCTION_LOCAL,
-                  GR_COMBINE_FACTOR_NONE,
-                  localc,
-                  GR_COMBINE_OTHER_NONE,
-                  FXFALSE);
-
-   fxMesa->lastUnitsMode = FX_UM_NONE;
-}
-
-#include "fxsetup.h"
-
-/************************************************************************/
-/************************** Texture Mode SetUp **************************/
-/************************************************************************/
-
-static void
-fxSetupTexture_NoLock(GLcontext * ctx)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-
-   if (TDFX_DEBUG & VERBOSE_DRIVER) {
-      fprintf(stderr, "fxSetupTexture_NoLock(...)\n");
-   }
-
-   if (fxMesa->HaveCmbExt) {
-      /* Texture Combine, Color Combine and Alpha Combine. */
-      if ((ctx->Texture.Unit[0]._ReallyEnabled & (TEXTURE_1D_BIT|TEXTURE_2D_BIT)) &&
-          (ctx->Texture.Unit[1]._ReallyEnabled & (TEXTURE_1D_BIT|TEXTURE_2D_BIT)) &&
-          fxMesa->haveTwoTMUs) {
-         fxSetupTextureDoubleTMUNapalm_NoLock(ctx);
-      }
-      else if (ctx->Texture.Unit[0]._ReallyEnabled & (TEXTURE_1D_BIT|TEXTURE_2D_BIT)) {
-         fxSetupTextureSingleTMUNapalm_NoLock(ctx, 0);
-      }
-      else if (ctx->Texture.Unit[1]._ReallyEnabled & (TEXTURE_1D_BIT|TEXTURE_2D_BIT)) {
-         fxSetupTextureSingleTMUNapalm_NoLock(ctx, 1);
-      }
-      else {
-         fxSetupTextureNoneNapalm_NoLock(ctx);
-      }
-   } else {
-      /* Texture Combine, Color Combine and Alpha Combine. */
-      if ((ctx->Texture.Unit[0]._ReallyEnabled & (TEXTURE_1D_BIT|TEXTURE_2D_BIT)) &&
-          (ctx->Texture.Unit[1]._ReallyEnabled & (TEXTURE_1D_BIT|TEXTURE_2D_BIT)) &&
-          fxMesa->haveTwoTMUs) {
-         fxSetupTextureDoubleTMU_NoLock(ctx);
-      }
-      else if (ctx->Texture.Unit[0]._ReallyEnabled & (TEXTURE_1D_BIT|TEXTURE_2D_BIT)) {
-         fxSetupTextureSingleTMU_NoLock(ctx, 0);
-      }
-      else if (ctx->Texture.Unit[1]._ReallyEnabled & (TEXTURE_1D_BIT|TEXTURE_2D_BIT)) {
-         fxSetupTextureSingleTMU_NoLock(ctx, 1);
-      }
-      else {
-         fxSetupTextureNone_NoLock(ctx);
-      }
-   }
-}
-
-void
-fxSetupTexture(GLcontext * ctx)
-{
-   BEGIN_BOARD_LOCK();
-   fxSetupTexture_NoLock(ctx);
-   END_BOARD_LOCK();
-}
-
-/************************************************************************/
-/**************************** Blend SetUp *******************************/
-/************************************************************************/
-
-void
-fxDDBlendFuncSeparate(GLcontext * ctx, GLenum sfactor, GLenum dfactor, GLenum asfactor, GLenum adfactor)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   tfxUnitsState *us = &fxMesa->unitsState;
-   GLboolean isNapalm = (fxMesa->type >= GR_SSTTYPE_Voodoo4);
-   GLboolean have32bpp = (fxMesa->colDepth == 32);
-   GLboolean haveAlpha = fxMesa->haveHwAlpha;
-   GrAlphaBlendFnc_t sfact, dfact, asfact, adfact;
-
-   /*
-    * 15/16 BPP alpha channel alpha blending modes
-    *   0x0	AZERO		Zero
-    *   0x4	AONE		One
-    *
-    * 32 BPP alpha channel alpha blending modes
-    *   0x0	AZERO		Zero
-    *   0x1	ASRC_ALPHA	Source alpha
-    *   0x3	ADST_ALPHA	Destination alpha
-    *   0x4	AONE		One
-    *   0x5	AOMSRC_ALPHA	1 - Source alpha
-    *   0x7	AOMDST_ALPHA	1 - Destination alpha
-    *
-    * If we don't have HW alpha buffer:
-    *   DST_ALPHA == 1
-    *   ONE_MINUS_DST_ALPHA == 0
-    * Unsupported modes are:
-    *   1 if used as src blending factor
-    *   0 if used as dst blending factor
-    */
-
-   switch (sfactor) {
-   case GL_ZERO:
-      sfact = GR_BLEND_ZERO;
-      break;
-   case GL_ONE:
-      sfact = GR_BLEND_ONE;
-      break;
-   case GL_DST_COLOR:
-      sfact = GR_BLEND_DST_COLOR;
-      break;
-   case GL_ONE_MINUS_DST_COLOR:
-      sfact = GR_BLEND_ONE_MINUS_DST_COLOR;
-      break;
-   case GL_SRC_ALPHA:
-      sfact = GR_BLEND_SRC_ALPHA;
-      break;
-   case GL_ONE_MINUS_SRC_ALPHA:
-      sfact = GR_BLEND_ONE_MINUS_SRC_ALPHA;
-      break;
-   case GL_DST_ALPHA:
-      sfact = haveAlpha ? GR_BLEND_DST_ALPHA : GR_BLEND_ONE/*bad*/;
-      break;
-   case GL_ONE_MINUS_DST_ALPHA:
-      sfact = haveAlpha ? GR_BLEND_ONE_MINUS_DST_ALPHA : GR_BLEND_ZERO/*bad*/;
-      break;
-   case GL_SRC_ALPHA_SATURATE:
-      sfact = GR_BLEND_ALPHA_SATURATE;
-      break;
-   case GL_SRC_COLOR:
-      if (isNapalm) {
-         sfact = GR_BLEND_SAME_COLOR_EXT;
-         break;
-      }
-   case GL_ONE_MINUS_SRC_COLOR:
-      if (isNapalm) {
-         sfact = GR_BLEND_ONE_MINUS_SAME_COLOR_EXT;
-         break;
-      }
-   default:
-      sfact = GR_BLEND_ONE;
-      break;
-   }
-
-   switch (asfactor) {
-   case GL_ZERO:
-      asfact = GR_BLEND_ZERO;
-      break;
-   case GL_ONE:
-      asfact = GR_BLEND_ONE;
-      break;
-   case GL_SRC_COLOR:
-   case GL_SRC_ALPHA:
-      asfact = have32bpp ? GR_BLEND_SRC_ALPHA : GR_BLEND_ONE/*bad*/;
-      break;
-   case GL_ONE_MINUS_SRC_COLOR:
-   case GL_ONE_MINUS_SRC_ALPHA:
-      asfact = have32bpp ? GR_BLEND_ONE_MINUS_SRC_ALPHA : GR_BLEND_ONE/*bad*/;
-      break;
-   case GL_DST_COLOR:
-   case GL_DST_ALPHA:
-      asfact = (have32bpp && haveAlpha) ? GR_BLEND_DST_ALPHA : GR_BLEND_ONE/*bad*/;
-      break;
-   case GL_ONE_MINUS_DST_COLOR:
-   case GL_ONE_MINUS_DST_ALPHA:
-      asfact = (have32bpp && haveAlpha) ? GR_BLEND_ONE_MINUS_DST_ALPHA : GR_BLEND_ZERO/*bad*/;
-      break;
-   case GL_SRC_ALPHA_SATURATE:
-      asfact = GR_BLEND_ONE;
-      break;
-   default:
-      asfact = GR_BLEND_ONE;
-      break;
-   }
-
-   switch (dfactor) {
-   case GL_ZERO:
-      dfact = GR_BLEND_ZERO;
-      break;
-   case GL_ONE:
-      dfact = GR_BLEND_ONE;
-      break;
-   case GL_SRC_COLOR:
-      dfact = GR_BLEND_SRC_COLOR;
-      break;
-   case GL_ONE_MINUS_SRC_COLOR:
-      dfact = GR_BLEND_ONE_MINUS_SRC_COLOR;
-      break;
-   case GL_SRC_ALPHA:
-      dfact = GR_BLEND_SRC_ALPHA;
-      break;
-   case GL_ONE_MINUS_SRC_ALPHA:
-      dfact = GR_BLEND_ONE_MINUS_SRC_ALPHA;
-      break;
-   case GL_DST_ALPHA:
-      dfact = haveAlpha ? GR_BLEND_DST_ALPHA : GR_BLEND_ONE/*bad*/;
-      break;
-   case GL_ONE_MINUS_DST_ALPHA:
-      dfact = haveAlpha ? GR_BLEND_ONE_MINUS_DST_ALPHA : GR_BLEND_ZERO/*bad*/;
-      break;
-   case GL_DST_COLOR:
-      if (isNapalm) {
-         dfact = GR_BLEND_SAME_COLOR_EXT;
-         break;
-      }
-   case GL_ONE_MINUS_DST_COLOR:
-      if (isNapalm) {
-         dfact = GR_BLEND_ONE_MINUS_SAME_COLOR_EXT;
-         break;
-      }
-   default:
-      dfact = GR_BLEND_ZERO;
-      break;
-   }
-
-   switch (adfactor) {
-   case GL_ZERO:
-      adfact = GR_BLEND_ZERO;
-      break;
-   case GL_ONE:
-      adfact = GR_BLEND_ONE;
-      break;
-   case GL_SRC_COLOR:
-   case GL_SRC_ALPHA:
-      adfact = have32bpp ? GR_BLEND_SRC_ALPHA : GR_BLEND_ZERO/*bad*/;
-      break;
-   case GL_ONE_MINUS_SRC_COLOR:
-   case GL_ONE_MINUS_SRC_ALPHA:
-      adfact = have32bpp ? GR_BLEND_ONE_MINUS_SRC_ALPHA : GR_BLEND_ZERO/*bad*/;
-      break;
-   case GL_DST_COLOR:
-   case GL_DST_ALPHA:
-      adfact = (have32bpp && haveAlpha) ? GR_BLEND_DST_ALPHA : GR_BLEND_ONE/*bad*/;
-      break;
-   case GL_ONE_MINUS_DST_COLOR:
-   case GL_ONE_MINUS_DST_ALPHA:
-      adfact = (have32bpp && haveAlpha) ? GR_BLEND_ONE_MINUS_DST_ALPHA : GR_BLEND_ZERO/*bad*/;
-      break;
-   default:
-      adfact = GR_BLEND_ZERO;
-      break;
-   }
-
-   if ((sfact != us->blendSrcFuncRGB) || (asfact != us->blendSrcFuncAlpha)) {
-      us->blendSrcFuncRGB = sfact;
-      us->blendSrcFuncAlpha = asfact;
-      fxMesa->new_state |= FX_NEW_BLEND;
-   }
-
-   if ((dfact != us->blendDstFuncRGB) || (adfact != us->blendDstFuncAlpha)) {
-      us->blendDstFuncRGB = dfact;
-      us->blendDstFuncAlpha = adfact;
-      fxMesa->new_state |= FX_NEW_BLEND;
-   }
-}
-
-void
-fxDDBlendEquationSeparate(GLcontext * ctx, GLenum modeRGB, GLenum modeA)
-{
- fxMesaContext fxMesa = FX_CONTEXT(ctx);
- tfxUnitsState *us = &fxMesa->unitsState;
- GrAlphaBlendOp_t q;
-
- switch (modeRGB) {
-        case GL_FUNC_ADD:
-             q = GR_BLEND_OP_ADD;
-             break;
-        case GL_FUNC_SUBTRACT:
-             q = GR_BLEND_OP_SUB;
-             break;
-        case GL_FUNC_REVERSE_SUBTRACT:
-             q = GR_BLEND_OP_REVSUB;
-             break;
-        default:
-             q = us->blendEqRGB;
- }
- if (q != us->blendEqRGB) {
-    us->blendEqRGB = q;
-    fxMesa->new_state |= FX_NEW_BLEND;
- }
-
- switch (modeA) {
-        case GL_FUNC_ADD:
-             q = GR_BLEND_OP_ADD;
-             break;
-        case GL_FUNC_SUBTRACT:
-             q = GR_BLEND_OP_SUB;
-             break;
-        case GL_FUNC_REVERSE_SUBTRACT:
-             q = GR_BLEND_OP_REVSUB;
-             break;
-        default:
-             q = us->blendEqAlpha;
- }
- if (q != us->blendEqAlpha) {
-    us->blendEqAlpha = q;
-    fxMesa->new_state |= FX_NEW_BLEND;
- }
-}
-
-void
-fxSetupBlend(GLcontext * ctx)
-{
- fxMesaContext fxMesa = FX_CONTEXT(ctx);
- tfxUnitsState *us = &fxMesa->unitsState;
-
- if (fxMesa->HavePixExt) {
-    if (us->blendEnabled) {
-       fxMesa->Glide.grAlphaBlendFunctionExt(us->blendSrcFuncRGB, us->blendDstFuncRGB,
-                                             us->blendEqRGB,
-                                             us->blendSrcFuncAlpha, us->blendDstFuncAlpha,
-                                             us->blendEqAlpha);
-    } else {
-       fxMesa->Glide.grAlphaBlendFunctionExt(GR_BLEND_ONE, GR_BLEND_ZERO,
-                                             GR_BLEND_OP_ADD,
-                                             GR_BLEND_ONE, GR_BLEND_ZERO,
-                                             GR_BLEND_OP_ADD);
-    }
- } else {
-    if (us->blendEnabled) {
-       grAlphaBlendFunction(us->blendSrcFuncRGB, us->blendDstFuncRGB,
-                            us->blendSrcFuncAlpha, us->blendDstFuncAlpha);
-    } else {
-       grAlphaBlendFunction(GR_BLEND_ONE, GR_BLEND_ZERO,
-                            GR_BLEND_ONE, GR_BLEND_ZERO);
-    }
- }
-}
-
-/************************************************************************/
-/************************** Alpha Test SetUp ****************************/
-/************************************************************************/
-
-void
-fxDDAlphaFunc(GLcontext * ctx, GLenum func, GLfloat ref)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   tfxUnitsState *us = &fxMesa->unitsState;
-
-   if (
-       (us->alphaTestFunc != func)
-       ||
-       (us->alphaTestRefValue != ref)
-      ) {
-      us->alphaTestFunc = func;
-      us->alphaTestRefValue = ref;
-      fxMesa->new_state |= FX_NEW_ALPHA;
-   }
-}
-
-static void
-fxSetupAlphaTest(GLcontext * ctx)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   tfxUnitsState *us = &fxMesa->unitsState;
-
-   if (us->alphaTestEnabled) {
-      GrAlpha_t ref = (GLint) (us->alphaTestRefValue * 255.0);
-      grAlphaTestFunction(us->alphaTestFunc - GL_NEVER + GR_CMP_NEVER);
-      grAlphaTestReferenceValue(ref);
-   }
-   else
-      grAlphaTestFunction(GR_CMP_ALWAYS);
-}
-
-/************************************************************************/
-/************************** Depth Test SetUp ****************************/
-/************************************************************************/
-
-void
-fxDDDepthFunc(GLcontext * ctx, GLenum func)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   tfxUnitsState *us = &fxMesa->unitsState;
-
-   if (us->depthTestFunc != func) {
-      us->depthTestFunc = func;
-      fxMesa->new_state |= FX_NEW_DEPTH;
-   }
-}
-
-void
-fxDDDepthMask(GLcontext * ctx, GLboolean flag)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   tfxUnitsState *us = &fxMesa->unitsState;
-
-   if (flag != us->depthMask) {
-      us->depthMask = flag;
-      fxMesa->new_state |= FX_NEW_DEPTH;
-   }
-}
-
-void
-fxSetupDepthTest(GLcontext * ctx)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   tfxUnitsState *us = &fxMesa->unitsState;
-
-   if (us->depthTestEnabled) {
-      grDepthBufferFunction(us->depthTestFunc - GL_NEVER + GR_CMP_NEVER);
-      grDepthMask(us->depthMask);
-   }
-   else {
-      grDepthBufferFunction(GR_CMP_ALWAYS);
-      grDepthMask(FXFALSE);
-   }
-}
-
-/************************************************************************/
-/************************** Stencil SetUp *******************************/
-/************************************************************************/
-
-static GrStencil_t convertGLStencilOp( GLenum op )
-{
-   switch ( op ) {
-   case GL_KEEP:
-      return GR_STENCILOP_KEEP;
-   case GL_ZERO:
-      return GR_STENCILOP_ZERO;
-   case GL_REPLACE:
-      return GR_STENCILOP_REPLACE;
-   case GL_INCR:
-      return GR_STENCILOP_INCR_CLAMP;
-   case GL_DECR:
-      return GR_STENCILOP_DECR_CLAMP;
-   case GL_INVERT:
-      return GR_STENCILOP_INVERT;
-   case GL_INCR_WRAP_EXT:
-      return GR_STENCILOP_INCR_WRAP;
-   case GL_DECR_WRAP_EXT:
-      return GR_STENCILOP_DECR_WRAP;
-   default:
-      _mesa_problem( NULL, "bad stencil op in convertGLStencilOp" );
-   }
-   return GR_STENCILOP_KEEP;   /* never get, silence compiler warning */
-}
-
-void
-fxDDStencilFuncSeparate (GLcontext *ctx, GLenum face, GLenum func,
-                         GLint ref, GLuint mask)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   tfxUnitsState *us = &fxMesa->unitsState;
-
-   if (ctx->Stencil.ActiveFace) {
-      return;
-   }
-
-   if (
-       (us->stencilFunction != func)
-       ||
-       (us->stencilRefValue != ref)
-       ||
-       (us->stencilValueMask != mask)
-      ) {
-      us->stencilFunction = func;
-      us->stencilRefValue = ref;
-      us->stencilValueMask = mask;
-      fxMesa->new_state |= FX_NEW_STENCIL;
-   }
-}
-
-void
-fxDDStencilMaskSeparate (GLcontext *ctx, GLenum face, GLuint mask)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   tfxUnitsState *us = &fxMesa->unitsState;
-
-   if (ctx->Stencil.ActiveFace) {
-      return;
-   }
-
-   if (us->stencilWriteMask != mask) {
-      us->stencilWriteMask = mask;
-      fxMesa->new_state |= FX_NEW_STENCIL;
-   }
-}
-
-void
-fxDDStencilOpSeparate (GLcontext *ctx, GLenum face, GLenum sfail,
-                       GLenum zfail, GLenum zpass)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   tfxUnitsState *us = &fxMesa->unitsState;
-
-   if (ctx->Stencil.ActiveFace) {
-      return;
-   }
-
-   if (
-       (us->stencilFailFunc != sfail)
-       ||
-       (us->stencilZFailFunc != zfail)
-       ||
-       (us->stencilZPassFunc != zpass)
-      ) {
-      us->stencilFailFunc = sfail;
-      us->stencilZFailFunc = zfail;
-      us->stencilZPassFunc = zpass;
-      fxMesa->new_state |= FX_NEW_STENCIL;
-   }
-}
-
-void
-fxSetupStencil (GLcontext * ctx)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   tfxUnitsState *us = &fxMesa->unitsState;
-
-   if (us->stencilEnabled) {
-      GrCmpFnc_t stencilFailFunc = GR_STENCILOP_KEEP;
-      GrCmpFnc_t stencilZFailFunc = GR_STENCILOP_KEEP;
-      GrCmpFnc_t stencilZPassFunc = GR_STENCILOP_KEEP;
-      if (!fxMesa->multipass) {
-         stencilFailFunc = convertGLStencilOp(us->stencilFailFunc);
-         stencilZFailFunc = convertGLStencilOp(us->stencilZFailFunc);
-         stencilZPassFunc = convertGLStencilOp(us->stencilZPassFunc);
-      }
-      grEnable(GR_STENCIL_MODE_EXT);
-      fxMesa->Glide.grStencilOpExt(stencilFailFunc,
-                                   stencilZFailFunc,
-                                   stencilZPassFunc);
-      fxMesa->Glide.grStencilFuncExt(us->stencilFunction - GL_NEVER + GR_CMP_NEVER,
-                                     us->stencilRefValue,
-                                     us->stencilValueMask);
-      fxMesa->Glide.grStencilMaskExt(us->stencilWriteMask);
-   } else {
-      grDisable(GR_STENCIL_MODE_EXT);
-   }
-}
-
-void
-fxSetupStencilFace (GLcontext * ctx, GLint face)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   tfxUnitsState *us = &fxMesa->unitsState;
-
-   if (us->stencilEnabled) {
-      GrCmpFnc_t stencilFailFunc = GR_STENCILOP_KEEP;
-      GrCmpFnc_t stencilZFailFunc = GR_STENCILOP_KEEP;
-      GrCmpFnc_t stencilZPassFunc = GR_STENCILOP_KEEP;
-      if (!fxMesa->multipass) {
-         stencilFailFunc = convertGLStencilOp(ctx->Stencil.FailFunc[face]);
-         stencilZFailFunc = convertGLStencilOp(ctx->Stencil.ZFailFunc[face]);
-         stencilZPassFunc = convertGLStencilOp(ctx->Stencil.ZPassFunc[face]);
-      }
-      grEnable(GR_STENCIL_MODE_EXT);
-      fxMesa->Glide.grStencilOpExt(stencilFailFunc,
-                                   stencilZFailFunc,
-                                   stencilZPassFunc);
-      fxMesa->Glide.grStencilFuncExt(ctx->Stencil.Function[face] - GL_NEVER + GR_CMP_NEVER,
-                                     ctx->Stencil.Ref[face],
-                                     ctx->Stencil.ValueMask[face]);
-      fxMesa->Glide.grStencilMaskExt(ctx->Stencil.WriteMask[face]);
-   } else {
-      grDisable(GR_STENCIL_MODE_EXT);
-   }
-}
-
-/************************************************************************/
-/**************************** Color Mask SetUp **************************/
-/************************************************************************/
-
-void
-fxDDColorMask(GLcontext * ctx,
-	      GLboolean r, GLboolean g, GLboolean b, GLboolean a)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   fxMesa->new_state |= FX_NEW_COLOR_MASK;
-   (void) r;
-   (void) g;
-   (void) b;
-   (void) a;
-}
-
-void
-fxSetupColorMask(GLcontext * ctx)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-
-   if (fxMesa->colDepth == 32) {
-      /* 32bpp mode */
-      fxMesa->Glide.grColorMaskExt(ctx->Color.ColorMask[RCOMP],
-                                   ctx->Color.ColorMask[GCOMP],
-                                   ctx->Color.ColorMask[BCOMP],
-                                   ctx->Color.ColorMask[ACOMP] && fxMesa->haveHwAlpha);
-   }
-   else {
-      /* 15/16 bpp mode */
-      grColorMask(ctx->Color.ColorMask[RCOMP] |
-                  ctx->Color.ColorMask[GCOMP] |
-                  ctx->Color.ColorMask[BCOMP],
-                  ctx->Color.ColorMask[ACOMP] && fxMesa->haveHwAlpha);
-   }
-}
-
-
-
-
-/************************************************************************/
-/**************************** Fog Mode SetUp ****************************/
-/************************************************************************/
-
-/*
- * This is called during state update in order to update the Glide fog state.
- */
-static void
-fxSetupFog(GLcontext * ctx)
-{
-   if (ctx->Fog.Enabled /*&& ctx->FogMode==FOG_FRAGMENT */ ) {
-      fxMesaContext fxMesa = FX_CONTEXT(ctx);
-
-      /* update fog color */
-      GLubyte col[4];
-      col[0] = (unsigned int) (255 * ctx->Fog.Color[0]);
-      col[1] = (unsigned int) (255 * ctx->Fog.Color[1]);
-      col[2] = (unsigned int) (255 * ctx->Fog.Color[2]);
-      col[3] = (unsigned int) (255 * ctx->Fog.Color[3]);
-      grFogColorValue(FXCOLOR4(col));
-
-      if (fxMesa->fogTableMode != ctx->Fog.Mode ||
-	  fxMesa->fogDensity != ctx->Fog.Density ||
-	  fxMesa->fogStart != ctx->Fog.Start ||
-	  fxMesa->fogEnd != ctx->Fog.End) {
-	 /* reload the fog table */
-	 switch (ctx->Fog.Mode) {
-	 case GL_LINEAR:
-	    guFogGenerateLinear(fxMesa->fogTable, ctx->Fog.Start,
-				ctx->Fog.End);
-	    if (fxMesa->fogTable[0] > 63) {
-	       /* [dBorca] Hack alert:
-	        * As per Glide3 Programming Guide:
-	        * The difference between consecutive fog values
-	        * must be less than 64.
-	        */
-	       fxMesa->fogTable[0] = 63;
-	    }
-	    break;
-	 case GL_EXP:
-	    guFogGenerateExp(fxMesa->fogTable, ctx->Fog.Density);
-	    break;
-	 case GL_EXP2:
-	    guFogGenerateExp2(fxMesa->fogTable, ctx->Fog.Density);
-	    break;
-	 default:
-	    ;
-	 }
-	 fxMesa->fogTableMode = ctx->Fog.Mode;
-	 fxMesa->fogDensity = ctx->Fog.Density;
-	 fxMesa->fogStart = ctx->Fog.Start;
-	 fxMesa->fogEnd = ctx->Fog.End;
-      }
-
-      grFogTable(fxMesa->fogTable);
-      if (ctx->Fog.FogCoordinateSource == GL_FOG_COORDINATE_EXT) {
-         grVertexLayout(GR_PARAM_FOG_EXT, GR_VERTEX_FOG_OFFSET << 2,
-                                          GR_PARAM_ENABLE);
-         grFogMode(GR_FOG_WITH_TABLE_ON_FOGCOORD_EXT);
-      } else {
-         grVertexLayout(GR_PARAM_FOG_EXT, GR_VERTEX_FOG_OFFSET << 2,
-                                          GR_PARAM_DISABLE);
-         grFogMode(GR_FOG_WITH_TABLE_ON_Q);
-      }
-   }
-   else {
-      grFogMode(GR_FOG_DISABLE);
-   }
-}
-
-void
-fxDDFogfv(GLcontext * ctx, GLenum pname, const GLfloat * params)
-{
-   FX_CONTEXT(ctx)->new_state |= FX_NEW_FOG;
-   switch (pname) {
-      case GL_FOG_COORDINATE_SOURCE_EXT: {
-         GLenum p = (GLenum)*params;
-         if (p == GL_FOG_COORDINATE_EXT) {
-            _swrast_allow_vertex_fog(ctx, GL_TRUE);
-            _swrast_allow_pixel_fog(ctx, GL_FALSE);
-            _tnl_allow_vertex_fog( ctx, GL_TRUE);
-            _tnl_allow_pixel_fog( ctx, GL_FALSE);
-         } else {
-            _swrast_allow_vertex_fog(ctx, GL_FALSE);
-            _swrast_allow_pixel_fog(ctx, GL_TRUE);
-            _tnl_allow_vertex_fog( ctx, GL_FALSE);
-            _tnl_allow_pixel_fog( ctx, GL_TRUE);
-         }
-         break;
-      }
-      default:
-         ;
-   }
-}
-
-/************************************************************************/
-/************************** Scissor Test SetUp **************************/
-/************************************************************************/
-
-/* This routine is used in managing the lock state, and therefore can't lock */
-void
-fxSetScissorValues(GLcontext * ctx)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   int xmin, xmax;
-   int ymin, ymax;
-
-   if (ctx->Scissor.Enabled) {
-      xmin = ctx->Scissor.X;
-      xmax = ctx->Scissor.X + ctx->Scissor.Width;
-      ymin = ctx->Scissor.Y;
-      ymax = ctx->Scissor.Y + ctx->Scissor.Height;
-
-      if (xmin < 0)
-         xmin = 0;
-      if (xmax > fxMesa->width)
-         xmax = fxMesa->width;
-      if (ymin < fxMesa->screen_height - fxMesa->height)
-         ymin = fxMesa->screen_height - fxMesa->height;
-      if (ymax > fxMesa->screen_height - 0)
-         ymax = fxMesa->screen_height - 0;
-   }
-   else {
-      xmin = 0;
-      ymin = 0;
-      xmax = fxMesa->width;
-      ymax = fxMesa->height;
-   }
-
-   fxMesa->clipMinX = xmin;
-   fxMesa->clipMinY = ymin;
-   fxMesa->clipMaxX = xmax;
-   fxMesa->clipMaxY = ymax;
-   grClipWindow(xmin, ymin, xmax, ymax);
-}
-
-void
-fxSetupScissor(GLcontext * ctx)
-{
-   BEGIN_BOARD_LOCK();
-   fxSetScissorValues(ctx);
-   END_BOARD_LOCK();
-}
-
-void
-fxDDScissor(GLcontext * ctx, GLint x, GLint y, GLsizei w, GLsizei h)
-{
-   FX_CONTEXT(ctx)->new_state |= FX_NEW_SCISSOR;
-}
-
-/************************************************************************/
-/*************************** Cull mode setup ****************************/
-/************************************************************************/
-
-
-void
-fxDDCullFace(GLcontext * ctx, GLenum mode)
-{
-   (void) mode;
-   FX_CONTEXT(ctx)->new_state |= FX_NEW_CULL;
-}
-
-void
-fxDDFrontFace(GLcontext * ctx, GLenum mode)
-{
-   (void) mode;
-   FX_CONTEXT(ctx)->new_state |= FX_NEW_CULL;
-}
-
-
-void
-fxSetupCull(GLcontext * ctx)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   GrCullMode_t mode = GR_CULL_DISABLE;
-
-   if (ctx->Polygon.CullFlag && (fxMesa->raster_primitive == GL_TRIANGLES)) {
-      switch (ctx->Polygon.CullFaceMode) {
-      case GL_BACK:
-	 if (ctx->Polygon.FrontFace == GL_CCW)
-	    mode = GR_CULL_NEGATIVE;
-	 else
-	    mode = GR_CULL_POSITIVE;
-	 break;
-      case GL_FRONT:
-	 if (ctx->Polygon.FrontFace == GL_CCW)
-	    mode = GR_CULL_POSITIVE;
-	 else
-	    mode = GR_CULL_NEGATIVE;
-	 break;
-      case GL_FRONT_AND_BACK:
-	 /* Handled as a fallback on triangles in tdfx_tris.c */
-	 return;
-      default:
-	 ASSERT(0);
-	 break;
-      }
-   }
-
-   if (fxMesa->cullMode != mode) {
-      fxMesa->cullMode = mode;
-      grCullMode(mode);
-   }
-}
-
-
-/************************************************************************/
-/****************************** DD Enable ******************************/
-/************************************************************************/
-
-void
-fxDDEnable(GLcontext * ctx, GLenum cap, GLboolean state)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   tfxUnitsState *us = &fxMesa->unitsState;
-
-   if (TDFX_DEBUG & VERBOSE_DRIVER) {
-      fprintf(stderr, "%s(%s)\n", state ? "fxDDEnable" : "fxDDDisable",
-	      _mesa_lookup_enum_by_nr(cap));
-   }
-
-   switch (cap) {
-   case GL_ALPHA_TEST:
-      if (state != us->alphaTestEnabled) {
-	 us->alphaTestEnabled = state;
-	 fxMesa->new_state |= FX_NEW_ALPHA;
-      }
-      break;
-   case GL_BLEND:
-      if (state != us->blendEnabled) {
-	 us->blendEnabled = state;
-	 fxMesa->new_state |= FX_NEW_BLEND;
-      }
-      break;
-   case GL_DEPTH_TEST:
-      if (state != us->depthTestEnabled) {
-	 us->depthTestEnabled = state;
-	 fxMesa->new_state |= FX_NEW_DEPTH;
-      }
-      break;
-   case GL_STENCIL_TEST:
-      if (fxMesa->haveHwStencil && state != us->stencilEnabled) {
-	 us->stencilEnabled = state;
-	 fxMesa->new_state |= FX_NEW_STENCIL;
-      }
-      break;
-   case GL_DITHER:
-      if (state) {
-	 grDitherMode(GR_DITHER_4x4);
-      }
-      else {
-	 grDitherMode(GR_DITHER_DISABLE);
-      }
-      break;
-   case GL_SCISSOR_TEST:
-      fxMesa->new_state |= FX_NEW_SCISSOR;
-      break;
-   case GL_SHARED_TEXTURE_PALETTE_EXT:
-      fxDDTexUseGlbPalette(ctx, state);
-      break;
-   case GL_FOG:
-      fxMesa->new_state |= FX_NEW_FOG;
-      break;
-   case GL_CULL_FACE:
-      fxMesa->new_state |= FX_NEW_CULL;
-      break;
-   case GL_LINE_SMOOTH:
-   case GL_LINE_STIPPLE:
-   case GL_POINT_SMOOTH:
-   case GL_POLYGON_SMOOTH:
-   case GL_TEXTURE_1D:
-   case GL_TEXTURE_2D:
-      fxMesa->new_state |= FX_NEW_TEXTURING;
-      break;
-   default:
-      ;				/* XXX no-op? */
-   }
-}
-
-
-
-
-/************************************************************************/
-/************************** Changes to units state **********************/
-/************************************************************************/
-
-
-/* All units setup is handled under texture setup.
- */
-void
-fxDDShadeModel(GLcontext * ctx, GLenum mode)
-{
-   FX_CONTEXT(ctx)->new_state |= FX_NEW_TEXTURING;
-}
-
-
-
-/************************************************************************/
-/****************************** Units SetUp *****************************/
-/************************************************************************/
-static void
-fx_print_state_flags(const char *msg, GLuint flags)
-{
-   fprintf(stderr,
-	   "%s: (0x%x) %s%s%s%s%s%s%s%s\n",
-	   msg,
-	   flags,
-	   (flags & FX_NEW_TEXTURING) ? "texture, " : "",
-	   (flags & FX_NEW_BLEND) ? "blend, " : "",
-	   (flags & FX_NEW_ALPHA) ? "alpha, " : "",
-	   (flags & FX_NEW_FOG) ? "fog, " : "",
-	   (flags & FX_NEW_SCISSOR) ? "scissor, " : "",
-	   (flags & FX_NEW_COLOR_MASK) ? "colormask, " : "",
-	   (flags & FX_NEW_CULL) ? "cull, " : "",
-	   (flags & FX_NEW_STENCIL) ? "stencil, " : "");
-}
-
-void
-fxSetupFXUnits(GLcontext * ctx)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   GLuint newstate = fxMesa->new_state;
-
-   if (TDFX_DEBUG & VERBOSE_DRIVER)
-      fx_print_state_flags("fxSetupFXUnits", newstate);
-
-   if (newstate) {
-      if (newstate & FX_NEW_TEXTURING)
-	 fxSetupTexture(ctx);
-
-      if (newstate & FX_NEW_BLEND)
-	 fxSetupBlend(ctx);
-
-      if (newstate & FX_NEW_ALPHA)
-	 fxSetupAlphaTest(ctx);
-
-      if (newstate & FX_NEW_DEPTH)
-	 fxSetupDepthTest(ctx);
-
-      if (newstate & FX_NEW_STENCIL)
-	 fxSetupStencil(ctx);
-
-      if (newstate & FX_NEW_FOG)
-	 fxSetupFog(ctx);
-
-      if (newstate & FX_NEW_SCISSOR)
-	 fxSetupScissor(ctx);
-
-      if (newstate & FX_NEW_COLOR_MASK)
-	 fxSetupColorMask(ctx);
-
-      if (newstate & FX_NEW_CULL)
-	 fxSetupCull(ctx);
-
-      fxMesa->new_state = 0;
-   }
-}
-
-
-
-#else
-
-
-/*
- * Need this to provide at least one external definition.
- */
-
-extern int gl_fx_dummy_function_setup(void);
-int
-gl_fx_dummy_function_setup(void)
-{
-   return 0;
-}
-
-#endif /* FX */
diff --git a/src/mesa/drivers/glide/fxsetup.h b/src/mesa/drivers/glide/fxsetup.h
deleted file mode 100644
index 9d337d4b0d..0000000000
--- a/src/mesa/drivers/glide/fxsetup.h
+++ /dev/null
@@ -1,850 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  4.0
- *
- * Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/* Authors:
- *    David Bucciarelli
- *    Brian Paul
- *    Daryll Strauss
- *    Keith Whitwell
- *    Daniel Borca
- *    Hiroshi Morii
- */
-
-/* fxsetup.c - 3Dfx VooDoo rendering mode setup functions */
-/* This code belongs to fxsetup.c, but I didn't want to clutter
- * the original code with Napalm specifics, in order to keep things
- * clear -- especially for backward compatibility. I should have
- * put it into another .c file, but I didn't want to export so many
- * things...
- * The point is, Napalm uses a different technique for texture env.
- * SST1 Single texturing:
- *      setup standard grTexCombine
- *      fiddle with grColorCombine/grAlphaCombine
- * SST1 Multi texturing:
- *      fiddle with grTexCombine/grColorCombine/grAlphaCombine
- * Napalm Single texturing:
- *      setup standard grColorCombineExt/grAlphaCombineExt
- *      fiddle with grTexColorCombine/grTexAlphaCombine
- * Napalm Multi texturing:
- *      setup standard grColorCombineExt/grAlphaCombineExt
- *      fiddle with grTexColorCombine/grTexAlphaCombine
- */
-
-/*
- * These macros are used below when handling COMBINE_EXT.
- */
-#define TEXENV_OPERAND_INVERTED(operand)                            \
-  (((operand) == GL_ONE_MINUS_SRC_ALPHA)                            \
-   || ((operand) == GL_ONE_MINUS_SRC_COLOR))
-#define TEXENV_OPERAND_ALPHA(operand)                               \
-  (((operand) == GL_SRC_ALPHA) || ((operand) == GL_ONE_MINUS_SRC_ALPHA))
-#define TEXENV_SETUP_ARG_A(param, source, operand, iteratedAlpha)   \
-    switch (source) {                                               \
-    case GL_TEXTURE:                                                \
-        param = GR_CMBX_LOCAL_TEXTURE_ALPHA;                        \
-        break;                                                      \
-    case GL_CONSTANT_EXT:                                           \
-        param = GR_CMBX_TMU_CALPHA;                                 \
-        break;                                                      \
-    case GL_PRIMARY_COLOR_EXT:                                      \
-        param = GR_CMBX_ITALPHA;                                    \
-        break;                                                      \
-    case GL_PREVIOUS_EXT:                                           \
-        param = iteratedAlpha;                                      \
-        break;                                                      \
-    default:                                                        \
-       /*                                                           \
-        * This is here just to keep from getting                    \
-        * compiler warnings.                                        \
-        */                                                          \
-        param = GR_CMBX_ZERO;                                       \
-        break;                                                      \
-    }
-
-#define TEXENV_SETUP_ARG_RGB(param, source, operand, iteratedColor, iteratedAlpha) \
-    if (!TEXENV_OPERAND_ALPHA(operand)) {                           \
-        switch (source) {                                           \
-        case GL_TEXTURE:                                            \
-            param = GR_CMBX_LOCAL_TEXTURE_RGB;                      \
-            break;                                                  \
-        case GL_CONSTANT_EXT:                                       \
-            param = GR_CMBX_TMU_CCOLOR;                             \
-            break;                                                  \
-        case GL_PRIMARY_COLOR_EXT:                                  \
-            param = GR_CMBX_ITRGB;                                  \
-            break;                                                  \
-        case GL_PREVIOUS_EXT:                                       \
-            param = iteratedColor;                                  \
-            break;                                                  \
-        default:                                                    \
-           /*                                                       \
-            * This is here just to keep from getting                \
-            * compiler warnings.                                    \
-            */                                                      \
-            param = GR_CMBX_ZERO;                                   \
-            break;                                                  \
-        }                                                           \
-    } else {                                                        \
-        switch (source) {                                           \
-        case GL_TEXTURE:                                            \
-            param = GR_CMBX_LOCAL_TEXTURE_ALPHA;                    \
-            break;                                                  \
-        case GL_CONSTANT_EXT:                                       \
-            param = GR_CMBX_TMU_CALPHA;                             \
-            break;                                                  \
-        case GL_PRIMARY_COLOR_EXT:                                  \
-            param = GR_CMBX_ITALPHA;                                \
-            break;                                                  \
-        case GL_PREVIOUS_EXT:                                       \
-            param = iteratedAlpha;                                  \
-            break;                                                  \
-        default:                                                    \
-           /*                                                       \
-            * This is here just to keep from getting                \
-            * compiler warnings.                                    \
-            */                                                      \
-            param = GR_CMBX_ZERO;                                   \
-            break;                                                  \
-        }                                                           \
-    }
-
-#define TEXENV_SETUP_MODE_RGB(param, operand)                       \
-    switch (operand) {                                              \
-    case GL_SRC_COLOR:                                              \
-    case GL_SRC_ALPHA:                                              \
-        param = GR_FUNC_MODE_X;                                     \
-        break;                                                      \
-    case GL_ONE_MINUS_SRC_ALPHA:                                    \
-    case GL_ONE_MINUS_SRC_COLOR:                                    \
-        param = GR_FUNC_MODE_ONE_MINUS_X;                           \
-        break;                                                      \
-    default:                                                        \
-        param = GR_FUNC_MODE_ZERO;                                  \
-        break;                                                      \
-    }
-
-#define TEXENV_SETUP_MODE_A(param, operand)                         \
-    switch (operand) {                                              \
-    case GL_SRC_ALPHA:                                              \
-        param = GR_FUNC_MODE_X;                                     \
-        break;                                                      \
-    case GL_ONE_MINUS_SRC_ALPHA:                                    \
-        param = GR_FUNC_MODE_ONE_MINUS_X;                           \
-        break;                                                      \
-    default:                                                        \
-        param = GR_FUNC_MODE_ZERO;                                  \
-        break;                                                      \
-    }
-
-static void
-fxSetupTextureEnvNapalm_NoLock(GLcontext * ctx, GLuint textureset, GLuint tmu, GLboolean iterated)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[textureset];
-   struct tdfx_combine_alpha_ext alphaComb;
-   struct tdfx_combine_color_ext colorComb;
-   const GLfloat *envColor = texUnit->EnvColor;
-   GrCombineLocal_t localc, locala; /* fragmentColor/Alpha */
-   GLint ifmt;
-   tfxTexInfo *ti;
-   struct gl_texture_object *tObj = texUnit->_Current;
-
-   if (TDFX_DEBUG & VERBOSE_DRIVER) {
-      fprintf(stderr, "fxSetupTextureEnvNapalm_NoLock(unit %u, TMU %u, iterated %d)\n",
-                      textureset, tmu, iterated);
-   }
-
-   ti = fxTMGetTexInfo(tObj);
-
-   ifmt = ti->baseLevelInternalFormat;
-
-   if (iterated) {
-      /* we don't have upstream TMU */
-      locala = GR_CMBX_ITALPHA;
-      localc = GR_CMBX_ITRGB;
-   } else {
-      /* we have upstream TMU */
-      locala = GR_CMBX_OTHER_TEXTURE_ALPHA;
-      localc = GR_CMBX_OTHER_TEXTURE_RGB;
-   }
-
-   alphaComb.InvertD = FXFALSE;
-   alphaComb.Shift   = 0;
-   alphaComb.Invert  = FXFALSE;
-   colorComb.InvertD = FXFALSE;
-   colorComb.Shift   = 0;
-   colorComb.Invert  = FXFALSE;
-
-   switch (texUnit->EnvMode) {
-   case GL_DECAL:
-      alphaComb.SourceA = locala;
-      alphaComb.ModeA   = GR_FUNC_MODE_X;
-      alphaComb.SourceB = GR_CMBX_ZERO;
-      alphaComb.ModeB   = GR_FUNC_MODE_X;
-      alphaComb.SourceC = GR_CMBX_ZERO;
-      alphaComb.InvertC = FXTRUE;
-      alphaComb.SourceD = GR_CMBX_ZERO;
-
-      colorComb.SourceA = GR_CMBX_LOCAL_TEXTURE_RGB;
-      colorComb.ModeA   = GR_FUNC_MODE_X;
-      colorComb.SourceB = localc;
-      colorComb.ModeB   = GR_FUNC_MODE_NEGATIVE_X;
-      colorComb.SourceC = GR_CMBX_LOCAL_TEXTURE_ALPHA;
-      colorComb.InvertC = FXFALSE;
-      colorComb.SourceD = GR_CMBX_B;
-      break;
-   case GL_MODULATE:
-      if (ifmt == GL_LUMINANCE || ifmt == GL_RGB) {
-         alphaComb.SourceA = locala;
-         alphaComb.ModeA   = GR_FUNC_MODE_X;
-         alphaComb.SourceB = GR_CMBX_ZERO;
-         alphaComb.ModeB   = GR_FUNC_MODE_X;
-         alphaComb.SourceC = GR_CMBX_ZERO;
-         alphaComb.InvertC = FXTRUE;
-         alphaComb.SourceD = GR_CMBX_ZERO;
-      } else {
-         alphaComb.SourceA = locala;
-         alphaComb.ModeA   = GR_FUNC_MODE_X;
-         alphaComb.SourceB = GR_CMBX_ZERO;
-         alphaComb.ModeB   = GR_FUNC_MODE_X;
-         alphaComb.SourceC = GR_CMBX_LOCAL_TEXTURE_ALPHA;
-         alphaComb.InvertC = FXFALSE;
-         alphaComb.SourceD = GR_CMBX_ZERO;
-      }
-
-      if (ifmt == GL_ALPHA) {
-         colorComb.SourceA = localc;
-         colorComb.ModeA   = GR_FUNC_MODE_X;
-         colorComb.SourceB = GR_CMBX_ZERO;
-         colorComb.ModeB   = GR_FUNC_MODE_X;
-         colorComb.SourceC = GR_CMBX_ZERO;
-         colorComb.InvertC = FXTRUE;
-         colorComb.SourceD = GR_CMBX_ZERO;
-      } else {
-         colorComb.SourceA = localc;
-         colorComb.ModeA   = GR_FUNC_MODE_X;
-         colorComb.SourceB = GR_CMBX_ZERO;
-         colorComb.ModeB   = GR_FUNC_MODE_X;
-         colorComb.SourceC = GR_CMBX_LOCAL_TEXTURE_RGB;
-         colorComb.InvertC = FXFALSE;
-         colorComb.SourceD = GR_CMBX_ZERO;
-      }
-      break;
-   case GL_BLEND:
-      if (ifmt == GL_INTENSITY) {
-         alphaComb.SourceA = GR_CMBX_TMU_CALPHA;
-         alphaComb.ModeA   = GR_FUNC_MODE_X;
-         alphaComb.SourceB = locala;
-         alphaComb.ModeB   = GR_FUNC_MODE_X;
-         alphaComb.SourceC = GR_CMBX_LOCAL_TEXTURE_ALPHA;
-         alphaComb.InvertC = FXFALSE;
-         alphaComb.SourceD = GR_CMBX_ZERO;
-      } else {
-         alphaComb.SourceA = locala;
-         alphaComb.ModeA   = GR_FUNC_MODE_X;
-         alphaComb.SourceB = GR_CMBX_ZERO;
-         alphaComb.ModeB   = GR_FUNC_MODE_X;
-         alphaComb.SourceC = GR_CMBX_LOCAL_TEXTURE_ALPHA;
-         alphaComb.InvertC = FXFALSE;
-         alphaComb.SourceD = GR_CMBX_ZERO;
-      }
-
-      if (ifmt == GL_ALPHA) {
-         colorComb.SourceA = localc;
-         colorComb.ModeA   = GR_FUNC_MODE_X;
-         colorComb.SourceB = GR_CMBX_ZERO;
-         colorComb.ModeB   = GR_FUNC_MODE_X;
-         colorComb.SourceC = GR_CMBX_ZERO;
-         colorComb.InvertC = FXTRUE;
-         colorComb.SourceD = GR_CMBX_ZERO;
-      } else {
-         colorComb.SourceA = GR_CMBX_TMU_CCOLOR;
-         colorComb.ModeA   = GR_FUNC_MODE_X;
-         colorComb.SourceB = localc;
-         colorComb.ModeB   = GR_FUNC_MODE_NEGATIVE_X;
-         colorComb.SourceC = GR_CMBX_LOCAL_TEXTURE_RGB;
-         colorComb.InvertC = FXFALSE;
-         colorComb.SourceD = GR_CMBX_B;
-      }
-
-      fxMesa->Glide.grConstantColorValueExt(tmu,
-         (((GLuint)(envColor[0] * 255.0f))      ) |
-         (((GLuint)(envColor[1] * 255.0f)) <<  8) |
-         (((GLuint)(envColor[2] * 255.0f)) << 16) |
-         (((GLuint)(envColor[3] * 255.0f)) << 24));
-      break;
-   case GL_REPLACE:
-      if (ifmt == GL_LUMINANCE || ifmt == GL_RGB) {
-         alphaComb.SourceA = locala;
-         alphaComb.ModeA   = GR_FUNC_MODE_X;
-         alphaComb.SourceB = GR_CMBX_ZERO;
-         alphaComb.ModeB   = GR_FUNC_MODE_X;
-         alphaComb.SourceC = GR_CMBX_ZERO;
-         alphaComb.InvertC = FXTRUE;
-         alphaComb.SourceD = GR_CMBX_ZERO;
-      } else {
-         alphaComb.SourceA = GR_CMBX_LOCAL_TEXTURE_ALPHA;
-         alphaComb.ModeA   = GR_FUNC_MODE_X;
-         alphaComb.SourceB = GR_CMBX_ZERO;
-         alphaComb.ModeB   = GR_FUNC_MODE_X;
-         alphaComb.SourceC = GR_CMBX_ZERO;
-         alphaComb.InvertC = FXTRUE;
-         alphaComb.SourceD = GR_CMBX_ZERO;
-      }
-
-      if (ifmt == GL_ALPHA) {
-         colorComb.SourceA = localc;
-         colorComb.ModeA   = GR_FUNC_MODE_X;
-         colorComb.SourceB = GR_CMBX_ZERO;
-         colorComb.ModeB   = GR_FUNC_MODE_X;
-         colorComb.SourceC = GR_CMBX_ZERO;
-         colorComb.InvertC = FXTRUE;
-         colorComb.SourceD = GR_CMBX_ZERO;
-      } else {
-         colorComb.SourceA = GR_CMBX_LOCAL_TEXTURE_RGB;
-         colorComb.ModeA   = GR_FUNC_MODE_X;
-         colorComb.SourceB = GR_CMBX_ZERO;
-         colorComb.ModeB   = GR_FUNC_MODE_X;
-         colorComb.SourceC = GR_CMBX_ZERO;
-         colorComb.InvertC = FXTRUE;
-         colorComb.SourceD = GR_CMBX_ZERO;
-      }
-      break;
-   case GL_ADD:
-      if (ifmt == GL_LUMINANCE || ifmt == GL_RGB) {
-         alphaComb.SourceA = locala;
-         alphaComb.ModeA   = GR_FUNC_MODE_X;
-         alphaComb.SourceB = GR_CMBX_ZERO;
-         alphaComb.ModeB   = GR_FUNC_MODE_X;
-         alphaComb.SourceC = GR_CMBX_ZERO;
-         alphaComb.InvertC = FXTRUE;
-         alphaComb.SourceD = GR_CMBX_ZERO;
-      } else if (ifmt == GL_INTENSITY) {
-         alphaComb.SourceA = locala;
-         alphaComb.ModeA   = GR_FUNC_MODE_X;
-         alphaComb.SourceB = GR_CMBX_LOCAL_TEXTURE_ALPHA;
-         alphaComb.ModeB   = GR_FUNC_MODE_X;
-         alphaComb.SourceC = GR_CMBX_ZERO;
-         alphaComb.InvertC = FXTRUE;
-         alphaComb.SourceD = GR_CMBX_ZERO;
-      } else {
-         alphaComb.SourceA = locala;
-         alphaComb.ModeA   = GR_FUNC_MODE_X;
-         alphaComb.SourceB = GR_CMBX_ZERO;
-         alphaComb.ModeB   = GR_FUNC_MODE_X;
-         alphaComb.SourceC = GR_CMBX_LOCAL_TEXTURE_ALPHA;
-         alphaComb.InvertC = FXFALSE;
-         alphaComb.SourceD = GR_CMBX_ZERO;
-      }
-
-      if (ifmt == GL_ALPHA) {
-         colorComb.SourceA = localc;
-         colorComb.ModeA   = GR_FUNC_MODE_X;
-         colorComb.SourceB = GR_CMBX_ZERO;
-         colorComb.ModeB   = GR_FUNC_MODE_X;
-         colorComb.SourceC = GR_CMBX_ZERO;
-         colorComb.InvertC = FXTRUE;
-         colorComb.SourceD = GR_CMBX_ZERO;
-      } else {
-         colorComb.SourceA = localc;
-         colorComb.ModeA   = GR_FUNC_MODE_X;
-         colorComb.SourceB = GR_CMBX_LOCAL_TEXTURE_RGB;
-         colorComb.ModeB   = GR_FUNC_MODE_X;
-         colorComb.SourceC = GR_CMBX_ZERO;
-         colorComb.InvertC = FXTRUE;
-         colorComb.SourceD = GR_CMBX_ZERO;
-      }
-      break;
-    /* COMBINE_EXT */
-    case GL_COMBINE_EXT:
-      /* XXX todo - INCOMPLETE!!! */
-      if (TDFX_DEBUG & (VERBOSE_DRIVER | VERBOSE_TEXTURE)) {
-#if 1
-         fprintf(stderr, "COMBINE_EXT: %s + %s\n",
-	      _mesa_lookup_enum_by_nr(texUnit->Combine.ModeRGB),
-	      _mesa_lookup_enum_by_nr(texUnit->Combine.ModeA));
-#else
-         fprintf(stderr, "Texture Unit %d\n", textureset);
-         fprintf(stderr, "  GL_TEXTURE_ENV_MODE = %s\n", _mesa_lookup_enum_by_nr(texUnit->EnvMode));
-         fprintf(stderr, "  GL_COMBINE_RGB = %s\n", _mesa_lookup_enum_by_nr(texUnit->Combine.ModeRGB));
-         fprintf(stderr, "  GL_COMBINE_ALPHA = %s\n", _mesa_lookup_enum_by_nr(texUnit->Combine.ModeA));
-         fprintf(stderr, "  GL_SOURCE0_RGB = %s\n", _mesa_lookup_enum_by_nr(texUnit->Combine.SourceRGB[0]));
-         fprintf(stderr, "  GL_SOURCE1_RGB = %s\n", _mesa_lookup_enum_by_nr(texUnit->Combine.SourceRGB[1]));
-         fprintf(stderr, "  GL_SOURCE2_RGB = %s\n", _mesa_lookup_enum_by_nr(texUnit->Combine.SourceRGB[2]));
-         fprintf(stderr, "  GL_SOURCE0_ALPHA = %s\n", _mesa_lookup_enum_by_nr(texUnit->Combine.SourceA[0]));
-         fprintf(stderr, "  GL_SOURCE1_ALPHA = %s\n", _mesa_lookup_enum_by_nr(texUnit->Combine.SourceA[1]));
-         fprintf(stderr, "  GL_SOURCE2_ALPHA = %s\n", _mesa_lookup_enum_by_nr(texUnit->Combine.SourceA[2]));
-         fprintf(stderr, "  GL_OPERAND0_RGB = %s\n", _mesa_lookup_enum_by_nr(texUnit->Combine.OperandRGB[0]));
-         fprintf(stderr, "  GL_OPERAND1_RGB = %s\n", _mesa_lookup_enum_by_nr(texUnit->Combine.OperandRGB[1]));
-         fprintf(stderr, "  GL_OPERAND2_RGB = %s\n", _mesa_lookup_enum_by_nr(texUnit->Combine.OperandRGB[2]));
-         fprintf(stderr, "  GL_OPERAND0_ALPHA = %s\n", _mesa_lookup_enum_by_nr(texUnit->Combine.OperandA[0]));
-         fprintf(stderr, "  GL_OPERAND1_ALPHA = %s\n", _mesa_lookup_enum_by_nr(texUnit->Combine.OperandA[1]));
-         fprintf(stderr, "  GL_OPERAND2_ALPHA = %s\n", _mesa_lookup_enum_by_nr(texUnit->Combine.OperandA[2]));
-         fprintf(stderr, "  GL_RGB_SCALE = %d\n", 1 << texUnit->Combine.ScaleShiftRGB);
-         fprintf(stderr, "  GL_ALPHA_SCALE = %d\n", 1 << texUnit->Combine.ScaleShiftA);
-         fprintf(stderr, "  GL_TEXTURE_ENV_COLOR = (%f, %f, %f, %f)\n", envColor[0], envColor[1], envColor[2], envColor[3]);
-#endif
-      }
-
-      alphaComb.Shift   = texUnit->Combine.ScaleShiftA;
-      colorComb.Shift   = texUnit->Combine.ScaleShiftRGB;
-
-      switch (texUnit->Combine.ModeRGB) {
-             case GL_MODULATE:
-                  /* Arg0 * Arg1 == (A + 0) * C + 0 */
-                  TEXENV_SETUP_ARG_RGB(colorComb.SourceA,
-                                       texUnit->Combine.SourceRGB[0],
-                                       texUnit->Combine.OperandRGB[0],
-                                       localc, locala);
-                  TEXENV_SETUP_MODE_RGB(colorComb.ModeA,
-                                        texUnit->Combine.OperandRGB[0]);
-                  colorComb.SourceB = GR_CMBX_ZERO;
-                  colorComb.ModeB   = GR_FUNC_MODE_ZERO;
-                  TEXENV_SETUP_ARG_RGB(colorComb.SourceC,
-                                       texUnit->Combine.SourceRGB[1],
-                                       texUnit->Combine.OperandRGB[1],
-                                       localc, locala);
-                  colorComb.InvertC = TEXENV_OPERAND_INVERTED(
-                                       texUnit->Combine.OperandRGB[1]);
-                  colorComb.SourceD = GR_CMBX_ZERO;
-                  break;
-             case GL_REPLACE:
-                  /* Arg0 == (A + 0) * 1 + 0 */
-                  TEXENV_SETUP_ARG_RGB(colorComb.SourceA,
-                                       texUnit->Combine.SourceRGB[0],
-                                       texUnit->Combine.OperandRGB[0],
-                                       localc, locala);
-                  TEXENV_SETUP_MODE_RGB(colorComb.ModeA,
-                                        texUnit->Combine.OperandRGB[0]);
-                  colorComb.SourceB = GR_CMBX_ZERO;
-                  colorComb.ModeB   = GR_FUNC_MODE_ZERO;
-                  colorComb.SourceC = GR_CMBX_ZERO;
-                  colorComb.InvertC = FXTRUE;
-                  colorComb.SourceD = GR_CMBX_ZERO;
-                  break;
-             case GL_ADD:
-                  /* Arg0 + Arg1 = (A + B) * 1 + 0 */
-                  TEXENV_SETUP_ARG_RGB(colorComb.SourceA,
-                                       texUnit->Combine.SourceRGB[0],
-                                       texUnit->Combine.OperandRGB[0],
-                                       localc, locala);
-                  TEXENV_SETUP_MODE_RGB(colorComb.ModeA,
-                                        texUnit->Combine.OperandRGB[0]);
-                  TEXENV_SETUP_ARG_RGB(colorComb.SourceB,
-                                       texUnit->Combine.SourceRGB[1],
-                                       texUnit->Combine.OperandRGB[1],
-                                       localc, locala);
-                  TEXENV_SETUP_MODE_RGB(colorComb.ModeB,
-                                        texUnit->Combine.OperandRGB[1]);
-                  colorComb.SourceC = GR_CMBX_ZERO;
-                  colorComb.InvertC = FXTRUE;
-                  colorComb.SourceD = GR_CMBX_ZERO;
-                  break;
-             case GL_INTERPOLATE_EXT:
-                  /* Arg0 * Arg2 + Arg1 * (1 - Arg2) ==
-                   * (Arg0 - Arg1) * Arg2 + Arg1 == (A - B) * C + D
-                   */
-                  TEXENV_SETUP_ARG_RGB(colorComb.SourceA,
-                                       texUnit->Combine.SourceRGB[0],
-                                       texUnit->Combine.OperandRGB[0],
-                                       localc, locala);
-                  TEXENV_SETUP_MODE_RGB(colorComb.ModeA,
-                                        texUnit->Combine.OperandRGB[0]);
-                  TEXENV_SETUP_ARG_RGB(colorComb.SourceB,
-                                       texUnit->Combine.SourceRGB[1],
-                                       texUnit->Combine.OperandRGB[1],
-                                       localc, locala);
-                  if (TEXENV_OPERAND_INVERTED(texUnit->Combine.OperandRGB[1])) {
-                     /* Hack alert!!! This case is wrong!!! */
-                     fprintf(stderr, "COMBINE_EXT_color: WRONG!!!\n");
-                     colorComb.ModeB = GR_FUNC_MODE_NEGATIVE_X;
-                  } else {
-                     colorComb.ModeB = GR_FUNC_MODE_NEGATIVE_X;
-                  }
-                  /*
-                   * The Source/Operand for the C value must
-                   * specify some kind of alpha value.
-                   */
-                  TEXENV_SETUP_ARG_A(colorComb.SourceC,
-                                     texUnit->Combine.SourceRGB[2],
-                                     texUnit->Combine.OperandRGB[2],
-                                     locala);
-                  colorComb.InvertC = FXFALSE;
-                  colorComb.SourceD = GR_CMBX_B;
-                  break;
-             default:
-                  fprintf(stderr, "COMBINE_EXT_color: %s\n",
-                                  _mesa_lookup_enum_by_nr(texUnit->Combine.ModeRGB));
-      }
-
-      switch (texUnit->Combine.ModeA) {
-             case GL_MODULATE:
-                  /* Arg0 * Arg1 == (A + 0) * C + 0 */
-                  TEXENV_SETUP_ARG_A(alphaComb.SourceA,
-                                     texUnit->Combine.SourceA[0],
-                                     texUnit->Combine.OperandA[0],
-                                     locala);
-                  TEXENV_SETUP_MODE_A(alphaComb.ModeA,
-                                      texUnit->Combine.OperandA[0]);
-                  alphaComb.SourceB = GR_CMBX_ZERO;
-                  alphaComb.ModeB   = GR_FUNC_MODE_ZERO;
-                  TEXENV_SETUP_ARG_A(alphaComb.SourceC,
-                                     texUnit->Combine.SourceA[1],
-                                     texUnit->Combine.OperandA[1],
-                                     locala);
-                  alphaComb.InvertC = TEXENV_OPERAND_INVERTED(
-                                       texUnit->Combine.OperandA[1]);
-                  alphaComb.SourceD = GR_CMBX_ZERO;
-                  break;
-             case GL_REPLACE:
-                 /* Arg0 == (A + 0) * 1 + 0 */
-                  TEXENV_SETUP_ARG_A(alphaComb.SourceA,
-                                     texUnit->Combine.SourceA[0],
-                                     texUnit->Combine.OperandA[0],
-                                     locala);
-                  TEXENV_SETUP_MODE_A(alphaComb.ModeA,
-                                      texUnit->Combine.OperandA[0]);
-                  alphaComb.SourceB = GR_CMBX_ZERO;
-                  alphaComb.ModeB   = GR_FUNC_MODE_ZERO;
-                  alphaComb.SourceC = GR_CMBX_ZERO;
-                  alphaComb.InvertC = FXTRUE;
-                  alphaComb.SourceD = GR_CMBX_ZERO;
-                  break;
-             case GL_ADD:
-                  /* Arg0 + Arg1 = (A + B) * 1 + 0 */
-                  TEXENV_SETUP_ARG_A(alphaComb.SourceA,
-                                     texUnit->Combine.SourceA[0],
-                                     texUnit->Combine.OperandA[0],
-                                     locala);
-                  TEXENV_SETUP_MODE_A(alphaComb.ModeA,
-                                      texUnit->Combine.OperandA[0]);
-                  TEXENV_SETUP_ARG_A(alphaComb.SourceB,
-                                     texUnit->Combine.SourceA[1],
-                                     texUnit->Combine.OperandA[1],
-                                     locala);
-                  TEXENV_SETUP_MODE_A(alphaComb.ModeB,
-                                      texUnit->Combine.OperandA[1]);
-                  alphaComb.SourceC = GR_CMBX_ZERO;
-                  alphaComb.InvertC = FXTRUE;
-                  alphaComb.SourceD = GR_CMBX_ZERO;
-                  break;
-             default:
-                  fprintf(stderr, "COMBINE_EXT_alpha: %s\n",
-                                  _mesa_lookup_enum_by_nr(texUnit->Combine.ModeA));
-      }
-
-      fxMesa->Glide.grConstantColorValueExt(tmu,
-         (((GLuint)(envColor[0] * 255.0f))      ) |
-         (((GLuint)(envColor[1] * 255.0f)) <<  8) |
-         (((GLuint)(envColor[2] * 255.0f)) << 16) |
-         (((GLuint)(envColor[3] * 255.0f)) << 24));
-      break;
-
-   default:
-      if (TDFX_DEBUG & VERBOSE_DRIVER) {
-	 fprintf(stderr, "fxSetupTextureEnvNapalm_NoLock: %x Texture.EnvMode not yet supported\n",
-		 texUnit->EnvMode);
-      }
-      return;
-   }
-
-   /* On Napalm we simply put the color combine unit into passthrough mode
-    * and do everything we need with the texture combine units. */
-   fxMesa->Glide.grColorCombineExt(GR_CMBX_TEXTURE_RGB,
-                                   GR_FUNC_MODE_X,
-                                   GR_CMBX_ZERO,
-                                   GR_FUNC_MODE_X,
-                                   GR_CMBX_ZERO,
-                                   FXTRUE,
-                                   GR_CMBX_ZERO,
-                                   FXFALSE,
-                                   0,
-                                   FXFALSE);
-   fxMesa->Glide.grAlphaCombineExt(GR_CMBX_TEXTURE_ALPHA,
-                                   GR_FUNC_MODE_X,
-                                   GR_CMBX_ZERO,
-                                   GR_FUNC_MODE_X,
-                                   GR_CMBX_ZERO,
-                                   FXTRUE,
-                                   GR_CMBX_ZERO,
-                                   FXFALSE,
-                                   0,
-                                   FXFALSE);
-
-   fxMesa->Glide.grTexAlphaCombineExt(tmu,
-                                      alphaComb.SourceA,
-                                      alphaComb.ModeA,
-                                      alphaComb.SourceB,
-                                      alphaComb.ModeB,
-                                      alphaComb.SourceC,
-                                      alphaComb.InvertC,
-                                      alphaComb.SourceD,
-                                      alphaComb.InvertD,
-                                      alphaComb.Shift,
-                                      alphaComb.Invert);
-   fxMesa->Glide.grTexColorCombineExt(tmu,
-                                      colorComb.SourceA,
-                                      colorComb.ModeA,
-                                      colorComb.SourceB,
-                                      colorComb.ModeB,
-                                      colorComb.SourceC,
-                                      colorComb.InvertC,
-                                      colorComb.SourceD,
-                                      colorComb.InvertD,
-                                      colorComb.Shift,
-                                      colorComb.Invert);
-}
-
-
-/************************* Single Texture Set ***************************/
-
-static void
-fxSelectSingleTMUSrcNapalm_NoLock(fxMesaContext fxMesa, GLint tmu, FxBool LODblend)
-{
-   if (TDFX_DEBUG & VERBOSE_DRIVER) {
-      fprintf(stderr, "fxSelectSingleTMUSrcNapalm_NoLock(%d, %d)\n", tmu, LODblend);
-   }
-
-   if (LODblend) {
-      /* XXX todo - GR_CMBX_LOD_FRAC? */
-      fxMesa->tmuSrc = FX_TMU_SPLIT;
-   }
-   else {
-      if (tmu != FX_TMU1) {
-         /* disable tex1 */
-         if (fxMesa->haveTwoTMUs) {
-            fxMesa->Glide.grTexAlphaCombineExt(FX_TMU1,
-                                               GR_CMBX_ZERO,
-                                               GR_FUNC_MODE_ZERO,
-                                               GR_CMBX_ZERO,
-                                               GR_FUNC_MODE_ZERO,
-                                               GR_CMBX_ZERO,
-                                               FXTRUE,
-                                               GR_CMBX_ZERO,
-                                               FXFALSE,
-                                               0,
-                                               FXFALSE);
-            fxMesa->Glide.grTexColorCombineExt(FX_TMU1,
-                                               GR_CMBX_ZERO,
-                                               GR_FUNC_MODE_ZERO,
-                                               GR_CMBX_ZERO,
-                                               GR_FUNC_MODE_ZERO,
-                                               GR_CMBX_ZERO,
-                                               FXTRUE,
-                                               GR_CMBX_ZERO,
-                                               FXFALSE,
-                                               0,
-                                               FXFALSE);
-         }
-
-	 fxMesa->tmuSrc = FX_TMU0;
-      }
-      else {
-#if 1
-         grTexCombine(GR_TMU0,
-                      GR_COMBINE_FUNCTION_BLEND,
-                      GR_COMBINE_FACTOR_ONE,
-                      GR_COMBINE_FUNCTION_BLEND,
-                      GR_COMBINE_FACTOR_ONE,
-                      FXFALSE,
-                      FXFALSE);
-#else
-         /* [dBorca] why, oh why? doesn't work! stupid Glide? */
-         fxMesa->Glide.grTexAlphaCombineExt(FX_TMU0,
-                                            GR_CMBX_OTHER_TEXTURE_ALPHA,
-                                            GR_FUNC_MODE_X,
-                                            GR_CMBX_ZERO,
-                                            GR_FUNC_MODE_X,
-                                            GR_CMBX_ZERO,
-                                            FXTRUE,
-                                            GR_CMBX_ZERO,
-                                            FXFALSE,
-                                            0,
-                                            FXFALSE);
-         fxMesa->Glide.grTexColorCombineExt(FX_TMU0,
-                                            GR_CMBX_OTHER_TEXTURE_RGB,
-                                            GR_FUNC_MODE_X,
-                                            GR_CMBX_ZERO,
-                                            GR_FUNC_MODE_X,
-                                            GR_CMBX_ZERO,
-                                            FXTRUE,
-                                            GR_CMBX_ZERO,
-                                            FXFALSE,
-                                            0,
-                                            FXFALSE);
-#endif
-
-	 fxMesa->tmuSrc = FX_TMU1;
-      }
-   }
-}
-
-static void
-fxSetupTextureSingleTMUNapalm_NoLock(GLcontext * ctx, GLuint textureset)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   GLuint unitsmode;
-   tfxTexInfo *ti;
-   struct gl_texture_object *tObj = ctx->Texture.Unit[textureset]._Current;
-   int tmu;
-
-   if (TDFX_DEBUG & VERBOSE_DRIVER) {
-      fprintf(stderr, "fxSetupTextureSingleTMUNapalm_NoLock(%d)\n", textureset);
-   }
-
-   ti = fxTMGetTexInfo(tObj);
-
-   fxTexValidate(ctx, tObj);
-
-   fxSetupSingleTMU_NoLock(fxMesa, tObj);
-
-   if (ti->whichTMU == FX_TMU_BOTH)
-      tmu = FX_TMU0;
-   else
-      tmu = ti->whichTMU;
-   if (fxMesa->tmuSrc != tmu)
-      fxSelectSingleTMUSrcNapalm_NoLock(fxMesa, tmu, ti->LODblend);
-
-   if (textureset == 0 || !fxMesa->haveTwoTMUs)
-      unitsmode = fxGetTexSetConfiguration(ctx, tObj, NULL);
-   else
-      unitsmode = fxGetTexSetConfiguration(ctx, NULL, tObj);
-
-/*    if(fxMesa->lastUnitsMode==unitsmode) */
-/*      return; */
-
-   fxMesa->lastUnitsMode = unitsmode;
-
-   fxMesa->stw_hint_state = 0;
-   FX_grHints_NoLock(GR_HINT_STWHINT, 0);
-
-   if (TDFX_DEBUG & (VERBOSE_DRIVER | VERBOSE_TEXTURE))
-      fprintf(stderr, "fxSetupTextureSingleTMUNapalm_NoLock: envmode is %s\n",
-	      _mesa_lookup_enum_by_nr(ctx->Texture.Unit[textureset].EnvMode));
-
-   /* [dBorca] Hack alert:
-    * what if we're in split mode? (LODBlend)
-    * also should we update BOTH TMUs in FX_TMU_BOTH mode?
-    */
-   fxSetupTextureEnvNapalm_NoLock(ctx, textureset, tmu, GL_TRUE);
-}
-
-
-/************************* Double Texture Set ***************************/
-
-static void
-fxSetupTextureDoubleTMUNapalm_NoLock(GLcontext * ctx)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   tfxTexInfo *ti0, *ti1;
-   struct gl_texture_object *tObj0 = ctx->Texture.Unit[1]._Current;
-   struct gl_texture_object *tObj1 = ctx->Texture.Unit[0]._Current;
-   GLuint unitsmode;
-   int tmu0 = 0, tmu1 = 1;
-
-   if (TDFX_DEBUG & VERBOSE_DRIVER) {
-      fprintf(stderr, "fxSetupTextureDoubleTMUNapalm_NoLock(...)\n");
-   }
-
-   ti0 = fxTMGetTexInfo(tObj0);
-   fxTexValidate(ctx, tObj0);
-
-   ti1 = fxTMGetTexInfo(tObj1);
-   fxTexValidate(ctx, tObj1);
-
-   fxSetupDoubleTMU_NoLock(fxMesa, tObj0, tObj1);
-
-   unitsmode = fxGetTexSetConfiguration(ctx, tObj0, tObj1);
-
-/*    if(fxMesa->lastUnitsMode==unitsmode) */
-/*      return; */
-
-   fxMesa->lastUnitsMode = unitsmode;
-
-   fxMesa->stw_hint_state |= GR_STWHINT_ST_DIFF_TMU1;
-   FX_grHints_NoLock(GR_HINT_STWHINT, fxMesa->stw_hint_state);
-
-   if (TDFX_DEBUG & (VERBOSE_DRIVER | VERBOSE_TEXTURE))
-      fprintf(stderr, "fxSetupTextureDoubleTMUNapalm_NoLock: envmode is %s/%s\n",
-	      _mesa_lookup_enum_by_nr(ctx->Texture.Unit[0].EnvMode),
-	      _mesa_lookup_enum_by_nr(ctx->Texture.Unit[1].EnvMode));
-
-
-   if ((ti0->whichTMU == FX_TMU1) || (ti1->whichTMU == FX_TMU0)) {
-      tmu0 = 1;
-      tmu1 = 0;
-   }
-   fxMesa->tmuSrc = FX_TMU_BOTH;
-
-   /* OpenGL vs Glide texture pipeline */
-   fxSetupTextureEnvNapalm_NoLock(ctx, 0, 1, GL_TRUE);
-   fxSetupTextureEnvNapalm_NoLock(ctx, 1, 0, GL_FALSE);
-}
-
-/************************* No Texture ***************************/
-
-static void
-fxSetupTextureNoneNapalm_NoLock(GLcontext * ctx)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-
-   if (TDFX_DEBUG & VERBOSE_DRIVER) {
-      fprintf(stderr, "fxSetupTextureNoneNapalm_NoLock(...)\n");
-   }
-
-   /* the combiner formula is: (A + B) * C + D
-   **
-   ** a = tc_otherselect
-   ** a_mode = tc_invert_other
-   ** b = tc_localselect
-   ** b_mode = tc_invert_local
-   ** c = (tc_mselect, tc_mselect_7)
-   ** d = (tc_add_clocal, tc_add_alocal)
-   ** shift = tc_outshift
-   ** invert = tc_invert_output
-   */
-
-   fxMesa->Glide.grColorCombineExt(GR_CMBX_ITRGB,
-                                   GR_FUNC_MODE_X,
-                                   GR_CMBX_ZERO,
-                                   GR_FUNC_MODE_ZERO,
-                                   GR_CMBX_ZERO,
-                                   FXTRUE,
-                                   GR_CMBX_ZERO,
-                                   FXFALSE,
-                                   0,
-                                   FXFALSE);
-   fxMesa->Glide.grAlphaCombineExt(GR_CMBX_ITALPHA,
-                                   GR_FUNC_MODE_X,
-                                   GR_CMBX_ZERO,
-                                   GR_FUNC_MODE_ZERO,
-                                   GR_CMBX_ZERO,
-                                   FXTRUE,
-                                   GR_CMBX_ZERO,
-                                   FXFALSE,
-                                   0,
-                                   FXFALSE);
-
-   fxMesa->lastUnitsMode = FX_UM_NONE;
-}
diff --git a/src/mesa/drivers/glide/fxtexman.c b/src/mesa/drivers/glide/fxtexman.c
deleted file mode 100644
index 940c8fd0b9..0000000000
--- a/src/mesa/drivers/glide/fxtexman.c
+++ /dev/null
@@ -1,874 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  4.0
- *
- * Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/* Authors:
- *    David Bucciarelli
- *    Brian Paul
- *    Daryll Strauss
- *    Keith Whitwell
- *    Daniel Borca
- *    Hiroshi Morii
- */
-
-/* fxtexman.c - 3Dfx VooDoo texture memory functions */
-
-
-#ifdef HAVE_CONFIG_H
-#include "conf.h"
-#endif
-
-#if defined(FX)
-
-#include "hash.h"
-#include "fxdrv.h"
-
-int texSwaps = 0;
-static FxU32 texBoundMask;
-
-#define FX_2MB_SPLIT 0x200000
-
-static struct gl_texture_object *fxTMFindOldestObject(fxMesaContext fxMesa,
-						      int tmu);
-
-
-#ifdef TEXSANITY
-static void
-fubar()
-{
-}
-
-  /* Sanity Check */
-static void
-sanity(fxMesaContext fxMesa)
-{
-   MemRange *tmp, *prev, *pos;
-
-   prev = 0;
-   tmp = fxMesa->tmFree[0];
-   while (tmp) {
-      if (!tmp->startAddr && !tmp->endAddr) {
-	 fprintf(stderr, "Textures fubar\n");
-	 fubar();
-      }
-      if (tmp->startAddr >= tmp->endAddr) {
-	 fprintf(stderr, "Node fubar\n");
-	 fubar();
-      }
-      if (prev && (prev->startAddr >= tmp->startAddr ||
-		   prev->endAddr > tmp->startAddr)) {
-	 fprintf(stderr, "Sorting fubar\n");
-	 fubar();
-      }
-      prev = tmp;
-      tmp = tmp->next;
-   }
-   prev = 0;
-   tmp = fxMesa->tmFree[1];
-   while (tmp) {
-      if (!tmp->startAddr && !tmp->endAddr) {
-	 fprintf(stderr, "Textures fubar\n");
-	 fubar();
-      }
-      if (tmp->startAddr >= tmp->endAddr) {
-	 fprintf(stderr, "Node fubar\n");
-	 fubar();
-      }
-      if (prev && (prev->startAddr >= tmp->startAddr ||
-		   prev->endAddr > tmp->startAddr)) {
-	 fprintf(stderr, "Sorting fubar\n");
-	 fubar();
-      }
-      prev = tmp;
-      tmp = tmp->next;
-   }
-}
-#endif
-
-static MemRange *
-fxTMNewRangeNode(fxMesaContext fxMesa, FxU32 start, FxU32 end)
-{
-   MemRange *result = 0;
-
-   if (fxMesa->tmPool) {
-      result = fxMesa->tmPool;
-      fxMesa->tmPool = fxMesa->tmPool->next;
-   }
-   else {
-      if (!(result = MALLOC(sizeof(MemRange)))) {
-	 fprintf(stderr, "fxTMNewRangeNode: ERROR: out of memory!\n");
-	 fxCloseHardware();
-	 exit(-1);
-      }
-   }
-   result->startAddr = start;
-   result->endAddr = end;
-   return result;
-}
-
-#if 1
-#define fxTMDeleteRangeNode(fxMesa, range) \
-   do {                                    \
-       range->next = fxMesa->tmPool;       \
-       fxMesa->tmPool = range;             \
-   } while (0);
-#else
-static void
-fxTMDeleteRangeNode(fxMesaContext fxMesa, MemRange * range)
-{
-   range->next = fxMesa->tmPool;
-   fxMesa->tmPool = range;
-}
-#endif
-
-static void
-fxTMUInit(fxMesaContext fxMesa, int tmu)
-{
-   MemRange *tmn, *last;
-   FxU32 start, end, blockstart, blockend, chunk;
-
-   start = grTexMinAddress(tmu);
-   end = grTexMaxAddress(tmu);
-
-   chunk = (fxMesa->type >= GR_SSTTYPE_Banshee) ? (end - start) : FX_2MB_SPLIT;
-
-   if (fxMesa->verbose) {
-      fprintf(stderr, "Voodoo TMU%d configuration:\n", tmu);
-   }
-
-   fxMesa->freeTexMem[tmu] = end - start;
-   fxMesa->tmFree[tmu] = NULL;
-
-   last = 0;
-   blockstart = start;
-   while (blockstart < end) {
-      if (blockstart + chunk > end)
-	 blockend = end;
-      else
-	 blockend = blockstart + chunk;
-
-      if (fxMesa->verbose)
-	 fprintf(stderr, "Voodoo   %08u-%08u\n",
-		 (unsigned int) blockstart, (unsigned int) blockend);
-
-      tmn = fxTMNewRangeNode(fxMesa, blockstart, blockend);
-      tmn->next = NULL;
-
-
-      if (last)
-	 last->next = tmn;
-      else
-	 fxMesa->tmFree[tmu] = tmn;
-      last = tmn;
-
-      blockstart += chunk;
-   }
-}
-
-static int
-fxTMFindStartAddr(fxMesaContext fxMesa, GLint tmu, int size)
-{
-   MemRange *prev, *tmp;
-   int result;
-   struct gl_texture_object *obj;
-
-   if (fxMesa->HaveTexUma) {
-      tmu = FX_TMU0;
-   }
-
-   while (1) {
-      prev = 0;
-      tmp = fxMesa->tmFree[tmu];
-      while (tmp) {
-	 if (tmp->endAddr - tmp->startAddr >= size) {	/* Fits here */
-	    result = tmp->startAddr;
-	    tmp->startAddr += size;
-	    if (tmp->startAddr == tmp->endAddr) {	/* Empty */
-	       if (prev) {
-		  prev->next = tmp->next;
-	       }
-	       else {
-		  fxMesa->tmFree[tmu] = tmp->next;
-	       }
-	       fxTMDeleteRangeNode(fxMesa, tmp);
-	    }
-	    fxMesa->freeTexMem[tmu] -= size;
-	    return result;
-	 }
-	 prev = tmp;
-	 tmp = tmp->next;
-      }
-      /* No free space. Discard oldest */
-      if (TDFX_DEBUG & VERBOSE_TEXTURE) {
-	 fprintf(stderr, "fxTMFindStartAddr: No free space. Discard oldest\n");
-      }
-      obj = fxTMFindOldestObject(fxMesa, tmu);
-      if (!obj) {
-	 fprintf(stderr, "fxTMFindStartAddr: ERROR: No space for texture\n");
-	 return -1;
-      }
-      fxTMMoveOutTM(fxMesa, obj);
-      texSwaps++;
-   }
-}
-
-int fxTMCheckStartAddr (fxMesaContext fxMesa, GLint tmu, tfxTexInfo *ti)
-{
- MemRange *tmp;
- int size;
-
- if (fxMesa->HaveTexUma) {
-    return FXTRUE;
- }
-
- size = grTexTextureMemRequired(GR_MIPMAPLEVELMASK_BOTH, &(ti->info));
-
- tmp = fxMesa->tmFree[tmu];
- while (tmp) {
-       if (tmp->endAddr - tmp->startAddr >= size) { /* Fits here */
-          return FXTRUE;
-       }
-       tmp = tmp->next;
- }
-
- return FXFALSE;
-}
-
-static void
-fxTMRemoveRange(fxMesaContext fxMesa, GLint tmu, MemRange * range)
-{
-   MemRange *tmp, *prev;
-
-   if (fxMesa->HaveTexUma) {
-      tmu = FX_TMU0;
-   }
-
-   if (range->startAddr == range->endAddr) {
-      fxTMDeleteRangeNode(fxMesa, range);
-      return;
-   }
-   fxMesa->freeTexMem[tmu] += range->endAddr - range->startAddr;
-   prev = 0;
-   tmp = fxMesa->tmFree[tmu];
-   while (tmp) {
-      if (range->startAddr > tmp->startAddr) {
-	 prev = tmp;
-	 tmp = tmp->next;
-      }
-      else
-	 break;
-   }
-   /* When we create the regions, we make a split at the 2MB boundary.
-      Now we have to make sure we don't join those 2MB boundary regions
-      back together again. */
-   range->next = tmp;
-   if (tmp) {
-      if (range->endAddr == tmp->startAddr
-	  && tmp->startAddr & texBoundMask) {
-	 /* Combine */
-	 tmp->startAddr = range->startAddr;
-	 fxTMDeleteRangeNode(fxMesa, range);
-	 range = tmp;
-      }
-   }
-   if (prev) {
-      if (prev->endAddr == range->startAddr
-	  && range->startAddr & texBoundMask) {
-	 /* Combine */
-	 prev->endAddr = range->endAddr;
-	 prev->next = range->next;
-	 fxTMDeleteRangeNode(fxMesa, range);
-      }
-      else
-	 prev->next = range;
-   }
-   else {
-      fxMesa->tmFree[tmu] = range;
-   }
-}
-
-static struct gl_texture_object *
-fxTMFindOldestObject(fxMesaContext fxMesa, int tmu)
-{
-   GLuint age, old, lasttime, bindnumber;
-   GLfloat lowestPriority;
-   struct gl_texture_object *obj, *lowestPriorityObj;
-   struct _mesa_HashTable *textures = fxMesa->glCtx->Shared->TexObjects;
-   GLuint id;
-
-   if (!_mesa_HashFirstEntry(textures))
-      return 0;
-
-   obj = NULL;
-   old = 0;
-
-   lowestPriorityObj = NULL;
-   lowestPriority = 1.0F;
-
-   bindnumber = fxMesa->texBindNumber;
-
-   for (id = _mesa_HashFirstEntry(textures);
-        id;
-        id = _mesa_HashNextEntry(textures, id)) {
-      struct gl_texture_object *tmp
-         = (struct gl_texture_object *) _mesa_HashLookup(textures, id);
-      tfxTexInfo *info = fxTMGetTexInfo(tmp);
-
-      if (info && info->isInTM &&
-	  ((info->whichTMU == tmu) ||
-	   (info->whichTMU == FX_TMU_BOTH) ||
-	   (info->whichTMU == FX_TMU_SPLIT) ||
-	   fxMesa->HaveTexUma
-	  )
-	 ) {
-	 lasttime = info->lastTimeUsed;
-
-	 if (lasttime > bindnumber)
-	    age = bindnumber + (UINT_MAX - lasttime + 1);	/* TO DO: check wrap around */
-	 else
-	    age = bindnumber - lasttime;
-
-	 if (age >= old) {
-	    old = age;
-	    obj = tmp;
-	 }
-
-         /* examine priority */
-         if (tmp->Priority < lowestPriority) {
-            lowestPriority = tmp->Priority;
-            lowestPriorityObj = tmp;
-         }
-      }
-   }
-
-   if (lowestPriorityObj != NULL) {
-       if (TDFX_DEBUG & VERBOSE_TEXTURE) {
-          fprintf(stderr, "fxTMFindOldestObject: %d pri=%f\n", lowestPriorityObj->Name, lowestPriority);
-       }
-       return lowestPriorityObj;
-   }
-   else {
-       if (TDFX_DEBUG & VERBOSE_TEXTURE) {
-          if (obj != NULL) {
-             fprintf(stderr, "fxTMFindOldestObject: %d age=%d\n", obj->Name, old);
-          }
-       }
-       return obj;
-   }
-}
-
-static MemRange *
-fxTMAddObj(fxMesaContext fxMesa,
-	   struct gl_texture_object *tObj, GLint tmu, int texmemsize)
-{
-   FxI32 startAddr;
-   MemRange *range;
-
-   startAddr = fxTMFindStartAddr(fxMesa, tmu, texmemsize);
-   if (startAddr < 0)
-      return 0;
-   range = fxTMNewRangeNode(fxMesa, startAddr, startAddr + texmemsize);
-   return range;
-}
-
-/* External Functions */
-
-void
-fxTMMoveInTM_NoLock(fxMesaContext fxMesa, struct gl_texture_object *tObj,
-		    GLint where)
-{
-   tfxTexInfo *ti = fxTMGetTexInfo(tObj);
-   int i, l;
-   int texmemsize;
-
-   if (TDFX_DEBUG & VERBOSE_DRIVER) {
-      fprintf(stderr, "fxTMMoveInTM_NoLock(%d)\n", tObj->Name);
-   }
-
-   fxMesa->stats.reqTexUpload++;
-
-   if (!ti->validated) {
-      fprintf(stderr, "fxTMMoveInTM_NoLock: INTERNAL ERROR: not validated\n");
-      fxCloseHardware();
-      exit(-1);
-   }
-
-   if (ti->isInTM) {
-      if (ti->whichTMU == where)
-	 return;
-      if (where == FX_TMU_SPLIT || ti->whichTMU == FX_TMU_SPLIT)
-	 fxTMMoveOutTM_NoLock(fxMesa, tObj);
-      else {
-	 if (ti->whichTMU == FX_TMU_BOTH)
-	    return;
-	 where = FX_TMU_BOTH;
-      }
-   }
-
-   if (TDFX_DEBUG & (VERBOSE_DRIVER | VERBOSE_TEXTURE)) {
-      fprintf(stderr, "fxTMMoveInTM_NoLock: downloading %p (%d) in texture memory in %d\n",
-	              (void *)tObj, tObj->Name, where);
-   }
-
-   ti->whichTMU = (FxU32) where;
-
-   switch (where) {
-   case FX_TMU0:
-   case FX_TMU1:
-      texmemsize = (int)grTexTextureMemRequired(GR_MIPMAPLEVELMASK_BOTH, &(ti->info));
-      ti->tm[where] = fxTMAddObj(fxMesa, tObj, where, texmemsize);
-      fxMesa->stats.memTexUpload += texmemsize;
-
-      for (i = FX_largeLodValue(ti->info), l = ti->minLevel;
-	   i <= FX_smallLodValue(ti->info); i++, l++) {
-	 struct gl_texture_image *texImage = tObj->Image[0][l];
-	 grTexDownloadMipMapLevel(where,
-					    ti->tm[where]->startAddr,
-					    FX_valueToLod(i),
-					    FX_largeLodLog2(ti->info),
-					    FX_aspectRatioLog2(ti->info),
-					    ti->info.format,
-					    GR_MIPMAPLEVELMASK_BOTH,
-					    texImage->Data);
-      }
-      break;
-   case FX_TMU_SPLIT:
-      texmemsize = (int)grTexTextureMemRequired(GR_MIPMAPLEVELMASK_ODD, &(ti->info));
-      ti->tm[FX_TMU0] = fxTMAddObj(fxMesa, tObj, FX_TMU0, texmemsize);
-      fxMesa->stats.memTexUpload += texmemsize;
-
-      texmemsize = (int)grTexTextureMemRequired(GR_MIPMAPLEVELMASK_EVEN, &(ti->info));
-      ti->tm[FX_TMU1] = fxTMAddObj(fxMesa, tObj, FX_TMU1, texmemsize);
-      fxMesa->stats.memTexUpload += texmemsize;
-
-      for (i = FX_largeLodValue(ti->info), l = ti->minLevel;
-	   i <= FX_smallLodValue(ti->info); i++, l++) {
-	 struct gl_texture_image *texImage = tObj->Image[0][l];
-
-	 grTexDownloadMipMapLevel(GR_TMU0,
-					    ti->tm[FX_TMU0]->startAddr,
-					    FX_valueToLod(i),
-					    FX_largeLodLog2(ti->info),
-					    FX_aspectRatioLog2(ti->info),
-					    ti->info.format,
-					    GR_MIPMAPLEVELMASK_ODD,
-					    texImage->Data);
-
-	 grTexDownloadMipMapLevel(GR_TMU1,
-					    ti->tm[FX_TMU1]->startAddr,
-					    FX_valueToLod(i),
-					    FX_largeLodLog2(ti->info),
-					    FX_aspectRatioLog2(ti->info),
-					    ti->info.format,
-					    GR_MIPMAPLEVELMASK_EVEN,
-					    texImage->Data);
-      }
-      break;
-   case FX_TMU_BOTH:
-      texmemsize = (int)grTexTextureMemRequired(GR_MIPMAPLEVELMASK_BOTH, &(ti->info));
-      ti->tm[FX_TMU0] = fxTMAddObj(fxMesa, tObj, FX_TMU0, texmemsize);
-      fxMesa->stats.memTexUpload += texmemsize;
-
-      /*texmemsize = (int)grTexTextureMemRequired(GR_MIPMAPLEVELMASK_BOTH, &(ti->info));*/
-      ti->tm[FX_TMU1] = fxTMAddObj(fxMesa, tObj, FX_TMU1, texmemsize);
-      fxMesa->stats.memTexUpload += texmemsize;
-
-      for (i = FX_largeLodValue(ti->info), l = ti->minLevel;
-	   i <= FX_smallLodValue(ti->info); i++, l++) {
-	 struct gl_texture_image *texImage = tObj->Image[0][l];
-	 grTexDownloadMipMapLevel(GR_TMU0,
-					    ti->tm[FX_TMU0]->startAddr,
-					    FX_valueToLod(i),
-					    FX_largeLodLog2(ti->info),
-					    FX_aspectRatioLog2(ti->info),
-					    ti->info.format,
-					    GR_MIPMAPLEVELMASK_BOTH,
-					    texImage->Data);
-
-	 grTexDownloadMipMapLevel(GR_TMU1,
-					    ti->tm[FX_TMU1]->startAddr,
-					    FX_valueToLod(i),
-					    FX_largeLodLog2(ti->info),
-					    FX_aspectRatioLog2(ti->info),
-					    ti->info.format,
-					    GR_MIPMAPLEVELMASK_BOTH,
-					    texImage->Data);
-      }
-      break;
-   default:
-      fprintf(stderr, "fxTMMoveInTM_NoLock: INTERNAL ERROR: wrong tmu (%d)\n", where);
-      fxCloseHardware();
-      exit(-1);
-   }
-
-   fxMesa->stats.texUpload++;
-
-   ti->isInTM = GL_TRUE;
-}
-
-
-void
-fxTMMoveInTM(fxMesaContext fxMesa, struct gl_texture_object *tObj,
-	     GLint where)
-{
-   BEGIN_BOARD_LOCK();
-   fxTMMoveInTM_NoLock(fxMesa, tObj, where);
-   END_BOARD_LOCK();
-}
-
-
-void
-fxTMReloadMipMapLevel(fxMesaContext fxMesa, struct gl_texture_object *tObj,
-		      GLint level)
-{
-   tfxTexInfo *ti = fxTMGetTexInfo(tObj);
-   GrLOD_t lodlevel;
-   GLint tmu;
-   struct gl_texture_image *texImage = tObj->Image[0][level];
-   tfxMipMapLevel *mml = FX_MIPMAP_DATA(texImage);
-
-   if (TDFX_DEBUG & VERBOSE_TEXTURE) {
-      fprintf(stderr, "fxTMReloadMipMapLevel(%p (%d), %d)\n", (void *)tObj, tObj->Name, level);
-   }
-
-   assert(mml);
-   assert(mml->width > 0);
-   assert(mml->height > 0);
-   assert(mml->glideFormat > 0);
-   assert(ti->isInTM);
-
-   if (!ti->validated) {
-      fprintf(stderr, "fxTMReloadMipMapLevel: INTERNAL ERROR: not validated\n");
-      fxCloseHardware();
-      exit(-1);
-   }
-
-   tmu = (int) ti->whichTMU;
-   fxMesa->stats.reqTexUpload++;
-   fxMesa->stats.texUpload++;
-
-   lodlevel =  ti->info.largeLodLog2 - (level - ti->minLevel);
-
-   switch (tmu) {
-   case FX_TMU0:
-   case FX_TMU1:
-      grTexDownloadMipMapLevel(tmu,
-				  ti->tm[tmu]->startAddr,
-				  lodlevel,
-				  FX_largeLodLog2(ti->info),
-				  FX_aspectRatioLog2(ti->info),
-				  ti->info.format,
-				  GR_MIPMAPLEVELMASK_BOTH, texImage->Data);
-      break;
-   case FX_TMU_SPLIT:
-      grTexDownloadMipMapLevel(GR_TMU0,
-				  ti->tm[GR_TMU0]->startAddr,
-				  lodlevel,
-				  FX_largeLodLog2(ti->info),
-				  FX_aspectRatioLog2(ti->info),
-				  ti->info.format,
-				  GR_MIPMAPLEVELMASK_ODD, texImage->Data);
-
-      grTexDownloadMipMapLevel(GR_TMU1,
-				  ti->tm[GR_TMU1]->startAddr,
-				  lodlevel,
-				  FX_largeLodLog2(ti->info),
-				  FX_aspectRatioLog2(ti->info),
-				  ti->info.format,
-				  GR_MIPMAPLEVELMASK_EVEN, texImage->Data);
-      break;
-   case FX_TMU_BOTH:
-      grTexDownloadMipMapLevel(GR_TMU0,
-				  ti->tm[GR_TMU0]->startAddr,
-				  lodlevel,
-				  FX_largeLodLog2(ti->info),
-				  FX_aspectRatioLog2(ti->info),
-				  ti->info.format,
-				  GR_MIPMAPLEVELMASK_BOTH, texImage->Data);
-
-      grTexDownloadMipMapLevel(GR_TMU1,
-				  ti->tm[GR_TMU1]->startAddr,
-				  lodlevel,
-				  FX_largeLodLog2(ti->info),
-				  FX_aspectRatioLog2(ti->info),
-				  ti->info.format,
-				  GR_MIPMAPLEVELMASK_BOTH, texImage->Data);
-      break;
-
-   default:
-      fprintf(stderr, "fxTMReloadMipMapLevel: INTERNAL ERROR: wrong tmu (%d)\n", tmu);
-      fxCloseHardware();
-      exit(-1);
-   }
-}
-
-void
-fxTMReloadSubMipMapLevel(fxMesaContext fxMesa,
-			 struct gl_texture_object *tObj,
-			 GLint level, GLint yoffset, GLint height)
-{
-   tfxTexInfo *ti = fxTMGetTexInfo(tObj);
-   GrLOD_t lodlevel;
-   unsigned short *data;
-   GLint tmu;
-   struct gl_texture_image *texImage = tObj->Image[0][level];
-   tfxMipMapLevel *mml = FX_MIPMAP_DATA(texImage);
-
-   assert(mml);
-
-   if (!ti->validated) {
-      fprintf(stderr, "fxTMReloadSubMipMapLevel: INTERNAL ERROR: not validated\n");
-      fxCloseHardware();
-      exit(-1);
-   }
-
-   tmu = (int) ti->whichTMU;
-   fxTMMoveInTM(fxMesa, tObj, tmu);
-
-   fxTexGetInfo(mml->width, mml->height,
-		&lodlevel, NULL, NULL, NULL, NULL, NULL);
-
-   if ((ti->info.format == GR_TEXFMT_INTENSITY_8) ||
-       (ti->info.format == GR_TEXFMT_P_8) ||
-       (ti->info.format == GR_TEXFMT_ALPHA_8))
-	 data = (GLushort *) texImage->Data + ((yoffset * mml->width) >> 1);
-   else
-      data = (GLushort *) texImage->Data + yoffset * mml->width;
-
-   switch (tmu) {
-   case FX_TMU0:
-   case FX_TMU1:
-      grTexDownloadMipMapLevelPartial(tmu,
-					 ti->tm[tmu]->startAddr,
-					 FX_valueToLod(FX_lodToValue(lodlevel)
-						       + level),
-					 FX_largeLodLog2(ti->info),
-					 FX_aspectRatioLog2(ti->info),
-					 ti->info.format,
-					 GR_MIPMAPLEVELMASK_BOTH, data,
-					 yoffset, yoffset + height - 1);
-      break;
-   case FX_TMU_SPLIT:
-      grTexDownloadMipMapLevelPartial(GR_TMU0,
-					 ti->tm[FX_TMU0]->startAddr,
-					 FX_valueToLod(FX_lodToValue(lodlevel)
-						       + level),
-					 FX_largeLodLog2(ti->info),
-					 FX_aspectRatioLog2(ti->info),
-					 ti->info.format,
-					 GR_MIPMAPLEVELMASK_ODD, data,
-					 yoffset, yoffset + height - 1);
-
-      grTexDownloadMipMapLevelPartial(GR_TMU1,
-					 ti->tm[FX_TMU1]->startAddr,
-					 FX_valueToLod(FX_lodToValue(lodlevel)
-						       + level),
-					 FX_largeLodLog2(ti->info),
-					 FX_aspectRatioLog2(ti->info),
-					 ti->info.format,
-					 GR_MIPMAPLEVELMASK_EVEN, data,
-					 yoffset, yoffset + height - 1);
-      break;
-   case FX_TMU_BOTH:
-      grTexDownloadMipMapLevelPartial(GR_TMU0,
-					 ti->tm[FX_TMU0]->startAddr,
-					 FX_valueToLod(FX_lodToValue(lodlevel)
-						       + level),
-					 FX_largeLodLog2(ti->info),
-					 FX_aspectRatioLog2(ti->info),
-					 ti->info.format,
-					 GR_MIPMAPLEVELMASK_BOTH, data,
-					 yoffset, yoffset + height - 1);
-
-      grTexDownloadMipMapLevelPartial(GR_TMU1,
-					 ti->tm[FX_TMU1]->startAddr,
-					 FX_valueToLod(FX_lodToValue(lodlevel)
-						       + level),
-					 FX_largeLodLog2(ti->info),
-					 FX_aspectRatioLog2(ti->info),
-					 ti->info.format,
-					 GR_MIPMAPLEVELMASK_BOTH, data,
-					 yoffset, yoffset + height - 1);
-      break;
-   default:
-      fprintf(stderr, "fxTMReloadSubMipMapLevel: INTERNAL ERROR: wrong tmu (%d)\n", tmu);
-      fxCloseHardware();
-      exit(-1);
-   }
-}
-
-void
-fxTMMoveOutTM(fxMesaContext fxMesa, struct gl_texture_object *tObj)
-{
-   tfxTexInfo *ti = fxTMGetTexInfo(tObj);
-
-   if (TDFX_DEBUG & VERBOSE_DRIVER) {
-      fprintf(stderr, "fxTMMoveOutTM(%p (%d))\n", (void *)tObj, tObj->Name);
-   }
-
-   if (!ti->isInTM)
-      return;
-
-   switch (ti->whichTMU) {
-   case FX_TMU0:
-   case FX_TMU1:
-      fxTMRemoveRange(fxMesa, (int) ti->whichTMU, ti->tm[ti->whichTMU]);
-      break;
-   case FX_TMU_SPLIT:
-   case FX_TMU_BOTH:
-      fxTMRemoveRange(fxMesa, FX_TMU0, ti->tm[FX_TMU0]);
-      fxTMRemoveRange(fxMesa, FX_TMU1, ti->tm[FX_TMU1]);
-      break;
-   default:
-      fprintf(stderr, "fxTMMoveOutTM: INTERNAL ERROR: bad TMU (%ld)\n", ti->whichTMU);
-      fxCloseHardware();
-      exit(-1);
-   }
-
-   ti->isInTM = GL_FALSE;
-   ti->whichTMU = FX_TMU_NONE;
-}
-
-void
-fxTMFreeTexture(fxMesaContext fxMesa, struct gl_texture_object *tObj)
-{
-   tfxTexInfo *ti = fxTMGetTexInfo(tObj);
-   int i;
-
-   if (TDFX_DEBUG & VERBOSE_TEXTURE) {
-      fprintf(stderr, "fxTMFreeTexture(%p (%d))\n", (void *)tObj, tObj->Name);
-   }
-
-   fxTMMoveOutTM(fxMesa, tObj);
-
-   for (i = 0; i < MAX_TEXTURE_LEVELS; i++) {
-      struct gl_texture_image *texImage = tObj->Image[0][i];
-      if (texImage) {
-         if (texImage->DriverData) {
-            FREE(texImage->DriverData);
-            texImage->DriverData = NULL;
-         }
-      }
-   }
-   switch (ti->whichTMU) {
-   case FX_TMU0:
-   case FX_TMU1:
-      fxTMDeleteRangeNode(fxMesa, ti->tm[ti->whichTMU]);
-      break;
-   case FX_TMU_SPLIT:
-   case FX_TMU_BOTH:
-      fxTMDeleteRangeNode(fxMesa, ti->tm[FX_TMU0]);
-      fxTMDeleteRangeNode(fxMesa, ti->tm[FX_TMU1]);
-      break;
-   }
-}
-
-void
-fxTMInit(fxMesaContext fxMesa)
-{
-   fxMesa->texBindNumber = 0;
-   fxMesa->tmPool = 0;
-
-   if (fxMesa->HaveTexUma) {
-      grEnable(GR_TEXTURE_UMA_EXT);
-   }
-
-   fxTMUInit(fxMesa, FX_TMU0);
-
-   if (!fxMesa->HaveTexUma && fxMesa->haveTwoTMUs)
-      fxTMUInit(fxMesa, FX_TMU1);
-
-   texBoundMask = (fxMesa->type >= GR_SSTTYPE_Banshee) ? -1 : (FX_2MB_SPLIT - 1);
-}
-
-void
-fxTMClose(fxMesaContext fxMesa)
-{
-   MemRange *tmp, *next;
-
-   tmp = fxMesa->tmPool;
-   while (tmp) {
-      next = tmp->next;
-      FREE(tmp);
-      tmp = next;
-   }
-   tmp = fxMesa->tmFree[FX_TMU0];
-   while (tmp) {
-      next = tmp->next;
-      FREE(tmp);
-      tmp = next;
-   }
-   if (fxMesa->haveTwoTMUs) {
-      tmp = fxMesa->tmFree[FX_TMU1];
-      while (tmp) {
-	 next = tmp->next;
-	 FREE(tmp);
-	 tmp = next;
-      }
-   }
-}
-
-void
-fxTMRestoreTextures_NoLock(fxMesaContext ctx)
-{
-   struct _mesa_HashTable *textures = ctx->glCtx->Shared->TexObjects;
-   GLuint id;
-
-   for (id = _mesa_HashFirstEntry(textures);
-        id;
-        id = _mesa_HashNextEntry(textures, id)) {
-      struct gl_texture_object *tObj
-         = (struct gl_texture_object *) _mesa_HashLookup(textures, id);
-      tfxTexInfo *ti = fxTMGetTexInfo(tObj);
-      if (ti && ti->isInTM) {
-         int i;
-	 for (i = 0; i < MAX_TEXTURE_UNITS; i++) {
-	    if (ctx->glCtx->Texture.Unit[i]._Current == tObj) {
-	       /* Force the texture onto the board, as it could be in use */
-	       int where = ti->whichTMU;
-	       fxTMMoveOutTM_NoLock(ctx, tObj);
-	       fxTMMoveInTM_NoLock(ctx, tObj, where);
-	       break;
-	    }
-         }
-	 if (i == MAX_TEXTURE_UNITS)	/* Mark the texture as off the board */
-	    fxTMMoveOutTM_NoLock(ctx, tObj);
-      }
-   }
-}
-
-#else
-
-
-/*
- * Need this to provide at least one external definition.
- */
-
-extern int gl_fx_dummy_function_texman(void);
-int
-gl_fx_dummy_function_texman(void)
-{
-   return 0;
-}
-
-#endif /* FX */
diff --git a/src/mesa/drivers/glide/fxtris.c b/src/mesa/drivers/glide/fxtris.c
deleted file mode 100644
index aff91fe7d4..0000000000
--- a/src/mesa/drivers/glide/fxtris.c
+++ /dev/null
@@ -1,1832 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  4.0
- *
- * Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/* Authors:
- *    Keith Whitwell <keith@tungstengraphics.com>
- *    Daniel Borca <dborca@users.sourceforge.net>
- */
-
-#include "glheader.h"
-
-#ifdef FX
-
-#include "main/imports.h"
-#include "main/mtypes.h"
-#include "main/macros.h"
-#include "main/colormac.h"
-#include "swrast/swrast.h"
-#include "swrast_setup/swrast_setup.h"
-#include "tnl/t_context.h"
-#include "tnl/t_pipeline.h"
-
-#include "fxdrv.h"
-
-
-static GLboolean fxMultipass_ColorSum (GLcontext *ctx, GLuint pass);
-
-
-/*
- * Subpixel offsets to adjust Mesa's (true) window coordinates to
- * Glide coordinates.  We need these to ensure precise rasterization.
- * Otherwise, we'll fail a bunch of conformance tests.
- */
-#define TRI_X_OFFSET    ( 0.0F)
-#define TRI_Y_OFFSET    ( 0.0F)
-#define LINE_X_OFFSET   ( 0.0F)
-#define LINE_Y_OFFSET   ( 0.125F)
-#define PNT_X_OFFSET    ( 0.375F)
-#define PNT_Y_OFFSET    ( 0.375F)
-
-static void fxRasterPrimitive( GLcontext *ctx, GLenum prim );
-static void fxRenderPrimitive( GLcontext *ctx, GLenum prim );
-
-static GLenum reduced_prim[GL_POLYGON+1] = {
-   GL_POINTS,
-   GL_LINES,
-   GL_LINES,
-   GL_LINES,
-   GL_TRIANGLES,
-   GL_TRIANGLES,
-   GL_TRIANGLES,
-   GL_TRIANGLES,
-   GL_TRIANGLES,
-   GL_TRIANGLES
-};
-
-/***********************************************************************
- *          Macros for t_dd_tritmp.h to draw basic primitives          *
- ***********************************************************************/
-
-#define TRI( a, b, c )				\
-do {						\
-   if (DO_FALLBACK)				\
-      fxMesa->draw_tri( fxMesa, a, b, c );	\
-   else						\
-      grDrawTriangle( a, b, c );	\
-} while (0)					\
-
-#define QUAD( a, b, c, d )			\
-do {						\
-   if (DO_FALLBACK) {				\
-      fxMesa->draw_tri( fxMesa, a, b, d );	\
-      fxMesa->draw_tri( fxMesa, b, c, d );	\
-   } else {					\
-      GrVertex *_v_[4];				\
-      _v_[0] = d;				\
-      _v_[1] = a;				\
-      _v_[2] = b;				\
-      _v_[3] = c;				\
-      grDrawVertexArray(GR_TRIANGLE_FAN, 4, _v_);\
-      /*grDrawTriangle( a, b, d );*/		\
-      /*grDrawTriangle( b, c, d );*/		\
-   }						\
-} while (0)
-
-#define LINE( v0, v1 )				\
-do {						\
-   if (DO_FALLBACK)				\
-      fxMesa->draw_line( fxMesa, v0, v1 );	\
-   else {					\
-      v0->x += LINE_X_OFFSET - TRI_X_OFFSET;	\
-      v0->y += LINE_Y_OFFSET - TRI_Y_OFFSET;	\
-      v1->x += LINE_X_OFFSET - TRI_X_OFFSET;	\
-      v1->y += LINE_Y_OFFSET - TRI_Y_OFFSET;	\
-      grDrawLine( v0, v1 );	\
-      v0->x -= LINE_X_OFFSET - TRI_X_OFFSET;	\
-      v0->y -= LINE_Y_OFFSET - TRI_Y_OFFSET;	\
-      v1->x -= LINE_X_OFFSET - TRI_X_OFFSET;	\
-      v1->y -= LINE_Y_OFFSET - TRI_Y_OFFSET;	\
-   }						\
-} while (0)
-
-#define POINT( v0 )				\
-do {						\
-   if (DO_FALLBACK)				\
-      fxMesa->draw_point( fxMesa, v0 );		\
-   else {					\
-      v0->x += PNT_X_OFFSET - TRI_X_OFFSET;	\
-      v0->y += PNT_Y_OFFSET - TRI_Y_OFFSET;	\
-      grDrawPoint( v0 );		\
-      v0->x -= PNT_X_OFFSET - TRI_X_OFFSET;	\
-      v0->y -= PNT_Y_OFFSET - TRI_Y_OFFSET;	\
-   }						\
-} while (0)
-
-
-/***********************************************************************
- *              Fallback to swrast for basic primitives                *
- ***********************************************************************/
-
-/* Build an SWvertex from a hardware vertex.
- *
- * This code is hit only when a mix of accelerated and unaccelerated
- * primitives are being drawn, and only for the unaccelerated
- * primitives.
- */
-static void
-fx_translate_vertex( GLcontext *ctx, const GrVertex *src, SWvertex *dst)
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   GLuint ts0 = fxMesa->tmu_source[0];
-   GLuint ts1 = fxMesa->tmu_source[1];
-   GLfloat w = 1.0F / src->oow;
-
-   dst->win[0] = src->x;
-   dst->win[1] = src->y;
-   dst->win[2] = src->ooz;
-   dst->win[3] = src->oow;
-
-#if FX_PACKEDCOLOR
-   dst->color[0] = src->pargb[2];
-   dst->color[1] = src->pargb[1];
-   dst->color[2] = src->pargb[0];
-   dst->color[3] = src->pargb[3];
-
-   dst->specular[0] = src->pspec[2];
-   dst->specular[1] = src->pspec[1];
-   dst->specular[2] = src->pspec[0];
-#else  /* !FX_PACKEDCOLOR */
-   dst->color[0] = src->r;
-   dst->color[1] = src->g;
-   dst->color[2] = src->b;
-   dst->color[3] = src->a;
-
-   dst->specular[0] = src->r1;
-   dst->specular[1] = src->g1;
-   dst->specular[2] = src->g1;
-#endif /* !FX_PACKEDCOLOR */
-
-   dst->texcoord[ts0][0] = fxMesa->inv_s0scale * src->tmuvtx[0].sow * w;
-   dst->texcoord[ts0][1] = fxMesa->inv_t0scale * src->tmuvtx[0].tow * w;
-
-   if (fxMesa->stw_hint_state & GR_STWHINT_W_DIFF_TMU0)
-      dst->texcoord[ts0][3] = src->tmuvtx[0].oow * w;
-   else
-      dst->texcoord[ts0][3] = 1.0F;
-
-   if (fxMesa->SetupIndex & SETUP_TMU1) {
-      dst->texcoord[ts1][0] = fxMesa->inv_s1scale * src->tmuvtx[1].sow * w;
-      dst->texcoord[ts1][1] = fxMesa->inv_t1scale * src->tmuvtx[1].tow * w;
-
-      if (fxMesa->stw_hint_state & GR_STWHINT_W_DIFF_TMU1)
-	 dst->texcoord[ts1][3] = src->tmuvtx[1].oow * w;
-      else
-	 dst->texcoord[ts1][3] = 1.0F;
-   }
-
-   dst->pointSize = src->psize;
-}
-
-
-static void
-fx_fallback_tri( fxMesaContext fxMesa,
-		   GrVertex *v0,
-		   GrVertex *v1,
-		   GrVertex *v2 )
-{
-   GLcontext *ctx = fxMesa->glCtx;
-   SWvertex v[3];
-
-   fx_translate_vertex( ctx, v0, &v[0] );
-   fx_translate_vertex( ctx, v1, &v[1] );
-   fx_translate_vertex( ctx, v2, &v[2] );
-   _swrast_Triangle( ctx, &v[0], &v[1], &v[2] );
-}
-
-
-static void
-fx_fallback_line( fxMesaContext fxMesa,
-		    GrVertex *v0,
-		    GrVertex *v1 )
-{
-   GLcontext *ctx = fxMesa->glCtx;
-   SWvertex v[2];
-   fx_translate_vertex( ctx, v0, &v[0] );
-   fx_translate_vertex( ctx, v1, &v[1] );
-   _swrast_Line( ctx, &v[0], &v[1] );
-}
-
-
-static void
-fx_fallback_point( fxMesaContext fxMesa,
-		     GrVertex *v0 )
-{
-   GLcontext *ctx = fxMesa->glCtx;
-   SWvertex v[1];
-   fx_translate_vertex( ctx, v0, &v[0] );
-   _swrast_Point( ctx, &v[0] );
-}
-
-/***********************************************************************
- *                 Functions to draw basic primitives                  *
- ***********************************************************************/
-
-static void fx_print_vertex( GLcontext *ctx, const GrVertex *v )
-{
- fprintf(stderr, "fx_print_vertex:\n");
-
- fprintf(stderr, "\tvertex at %p\n", (void *) v);
-
- fprintf(stderr, "\tx %f y %f z %f oow %f\n", v->x, v->y, v->ooz, v->oow);
-#if FX_PACKEDCOLOR
- fprintf(stderr, "\tr %d g %d b %d a %d\n", v->pargb[2], v->pargb[1], v->pargb[0], v->pargb[3]);
-#else  /* !FX_PACKEDCOLOR */
- fprintf(stderr, "\tr %f g %f b %f a %f\n", v->r, v->g, v->b, v->a);
-#endif /* !FX_PACKEDCOLOR */
-
- fprintf(stderr, "\n");
-}
-
-#define DO_FALLBACK 0
-
-/* Need to do clip loop at each triangle when mixing swrast and hw
- * rendering.  These functions are only used when mixed-mode rendering
- * is occurring.
- */
-static void fx_draw_triangle( fxMesaContext fxMesa,
-				GrVertex *v0,
-				GrVertex *v1,
-				GrVertex *v2 )
-{
-   BEGIN_CLIP_LOOP();
-   TRI( v0, v1, v2 );
-   END_CLIP_LOOP();
-}
-
-static void fx_draw_line( fxMesaContext fxMesa,
-			    GrVertex *v0,
-			    GrVertex *v1 )
-{
-   /* No support for wide lines (avoid wide/aa line fallback).
-    */
-   BEGIN_CLIP_LOOP();
-   LINE(v0, v1);
-   END_CLIP_LOOP();
-}
-
-static void fx_draw_point( fxMesaContext fxMesa,
-			     GrVertex *v0 )
-{
-   /* No support for wide points.
-    */
-   BEGIN_CLIP_LOOP();
-   POINT( v0 );
-   END_CLIP_LOOP();
-}
-
-#ifndef M_2PI
-#define M_2PI 6.28318530717958647692528676655901
-#endif
-#define __GL_COSF cos
-#define __GL_SINF sin
-static void fx_draw_point_sprite ( fxMesaContext fxMesa,
-				   GrVertex *v0, GLfloat psize )
-{
- const GLcontext *ctx = fxMesa->glCtx;
-
- GLfloat radius;
- GrVertex _v_[4];
- GLuint ts0 = fxMesa->tmu_source[0];
- GLuint ts1 = fxMesa->tmu_source[1];
- GLfloat w = v0->oow;
- GLfloat u0scale = fxMesa->s0scale * w;
- GLfloat v0scale = fxMesa->t0scale * w;
- GLfloat u1scale = fxMesa->s1scale * w;
- GLfloat v1scale = fxMesa->t1scale * w;
-
- radius = psize / 2.0F;
- _v_[0] = *v0;
- _v_[1] = *v0;
- _v_[2] = *v0;
- _v_[3] = *v0;
- /* CLIP_LOOP ?!? */
- /* point coverage? */
- /* we don't care about culling here (see fxSetupCull) */
-
- if (ctx->Point.SpriteOrigin == GL_UPPER_LEFT) {
-    _v_[0].x -= radius;
-    _v_[0].y += radius;
-    _v_[1].x += radius;
-    _v_[1].y += radius;
-    _v_[2].x += radius;
-    _v_[2].y -= radius;
-    _v_[3].x -= radius;
-    _v_[3].y -= radius;
- } else {
-    _v_[0].x -= radius;
-    _v_[0].y -= radius;
-    _v_[1].x += radius;
-    _v_[1].y -= radius;
-    _v_[2].x += radius;
-    _v_[2].y += radius;
-    _v_[3].x -= radius;
-    _v_[3].y += radius;
- }
-
- if (ctx->Point.CoordReplace[ts0]) {
-    _v_[0].tmuvtx[0].sow = 0;
-    _v_[0].tmuvtx[0].tow = 0;
-    _v_[1].tmuvtx[0].sow = u0scale;
-    _v_[1].tmuvtx[0].tow = 0;
-    _v_[2].tmuvtx[0].sow = u0scale;
-    _v_[2].tmuvtx[0].tow = v0scale;
-    _v_[3].tmuvtx[0].sow = 0;
-    _v_[3].tmuvtx[0].tow = v0scale;
- }
- if (ctx->Point.CoordReplace[ts1]) {
-    _v_[0].tmuvtx[1].sow = 0;
-    _v_[0].tmuvtx[1].tow = 0;
-    _v_[1].tmuvtx[1].sow = u1scale;
-    _v_[1].tmuvtx[1].tow = 0;
-    _v_[2].tmuvtx[1].sow = u1scale;
-    _v_[2].tmuvtx[1].tow = v1scale;
-    _v_[3].tmuvtx[1].sow = 0;
-    _v_[3].tmuvtx[1].tow = v1scale;
- }
-
- grDrawVertexArrayContiguous(GR_TRIANGLE_FAN, 4, _v_, sizeof(GrVertex));
-}
-
-static void fx_draw_point_wide ( fxMesaContext fxMesa,
-			         GrVertex *v0 )
-{
- GLint i, n;
- GLfloat ang, radius, oon;
- GrVertex vtxB, vtxC;
- GrVertex *_v_[3];
-
- const GLcontext *ctx = fxMesa->glCtx;
- const GLfloat psize = (ctx->_TriangleCaps & DD_POINT_ATTEN)
-                       ? CLAMP(v0->psize, ctx->Point.MinSize, ctx->Point.MaxSize)
-                       : ctx->Point._Size; /* clamped */
-
- if (ctx->Point.PointSprite) {
-    fx_draw_point_sprite(fxMesa, v0, psize);
-    return;
- }
-
- _v_[0] = v0;
- _v_[1] = &vtxB;
- _v_[2] = &vtxC;
-
- radius = psize / 2.0F;
- n = IROUND(psize * 2); /* radius x 4 */
- if (n < 4) n = 4;
- oon = 1.0F / (GLfloat)n;
-
- /* CLIP_LOOP ?!? */
- /* point coverage? */
- /* we don't care about culling here (see fxSetupCull) */
-
- vtxB = *v0;
- vtxC = *v0;
-
- vtxB.x += radius;
- ang = M_2PI * oon;
- vtxC.x += radius * __GL_COSF(ang);
- vtxC.y += radius * __GL_SINF(ang);
- grDrawVertexArray(GR_TRIANGLE_FAN, 3, _v_);
- for (i = 2; i <= n; i++) {
-     ang = M_2PI * i * oon;
-     vtxC.x = v0->x + radius * __GL_COSF(ang);
-     vtxC.y = v0->y + radius * __GL_SINF(ang);
-     grDrawVertexArray(GR_TRIANGLE_FAN_CONTINUE, 1, &_v_[2]);
- }
-}
-
-static void fx_render_pw_verts( GLcontext *ctx,
-				GLuint start,
-				GLuint count,
-				GLuint flags )
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   GrVertex *fxVB = fxMesa->verts;
-   (void) flags;
-
-   fxRenderPrimitive( ctx, GL_POINTS );
-
-   for ( ; start < count ; start++)
-      fx_draw_point_wide(fxMesa, fxVB + start);
-}
-
-static void fx_render_pw_elts ( GLcontext *ctx,
-				GLuint start,
-				GLuint count,
-				GLuint flags )
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   GrVertex *fxVB = fxMesa->verts;
-   const GLuint * const elt = TNL_CONTEXT(ctx)->vb.Elts;
-   (void) flags;
-
-   fxRenderPrimitive( ctx, GL_POINTS );
-
-   for ( ; start < count ; start++)
-      fx_draw_point_wide(fxMesa, fxVB + elt[start]);
-}
-
-static void fx_draw_point_wide_aa ( fxMesaContext fxMesa,
-			            GrVertex *v0 )
-{
- GLint i, n;
- GLfloat ang, radius, oon;
- GrVertex vtxB, vtxC;
-
- const GLcontext *ctx = fxMesa->glCtx;
- const GLfloat psize = (ctx->_TriangleCaps & DD_POINT_ATTEN)
-                       ? CLAMP(v0->psize, ctx->Point.MinSize, ctx->Point.MaxSize)
-                       : ctx->Point._Size; /* clamped */
-
- if (ctx->Point.PointSprite) {
-    fx_draw_point_sprite(fxMesa, v0, psize);
-    return;
- }
-
- radius = psize / 2.0F;
- n = IROUND(psize * 2); /* radius x 4 */
- if (n < 4) n = 4;
- oon = 1.0F / (GLfloat)n;
-
- /* CLIP_LOOP ?!? */
- /* point coverage? */
- /* we don't care about culling here (see fxSetupCull) */
-
- vtxB = *v0;
- vtxC = *v0;
-
- vtxB.x += radius;
- for (i = 1; i <= n; i++) {
-     ang = M_2PI * i * oon;
-     vtxC.x = v0->x + radius * __GL_COSF(ang);
-     vtxC.y = v0->y + radius * __GL_SINF(ang);
-     grAADrawTriangle( v0, &vtxB, &vtxC, FXFALSE, FXTRUE, FXFALSE);
-     /*grDrawTriangle( v0, &vtxB, &vtxC);*/
-     vtxB.x = vtxC.x;
-     vtxB.y = vtxC.y;
- }
-}
-#undef __GLCOSF
-#undef __GLSINF
-#undef M_2PI
-
-#undef DO_FALLBACK
-
-
-#define FX_UNFILLED_BIT    0x1
-#define FX_OFFSET_BIT	   0x2
-#define FX_TWOSIDE_BIT     0x4
-#define FX_FLAT_BIT        0x8
-#define FX_TWOSTENCIL_BIT  0x10
-#define FX_FALLBACK_BIT    0x20
-#define FX_MAX_TRIFUNC     0x40
-
-static struct {
-   tnl_points_func	points;
-   tnl_line_func	line;
-   tnl_triangle_func	triangle;
-   tnl_quad_func	quad;
-} rast_tab[FX_MAX_TRIFUNC];
-
-#define DO_FALLBACK (IND & FX_FALLBACK_BIT)
-#define DO_OFFSET   (IND & FX_OFFSET_BIT)
-#define DO_UNFILLED (IND & FX_UNFILLED_BIT)
-#define DO_TWOSIDE  (IND & FX_TWOSIDE_BIT)
-#define DO_FLAT     (IND & FX_FLAT_BIT)
-#define DO_TWOSTENCIL (IND & FX_TWOSTENCIL_BIT)
-#define DO_TRI       1
-#define DO_QUAD      1
-#define DO_LINE      1
-#define DO_POINTS    1
-#define DO_FULL_QUAD 1
-
-#define HAVE_RGBA   1
-#define HAVE_SPEC   1
-#define HAVE_HW_FLATSHADE 0
-#define HAVE_BACK_COLORS  0
-#define VERTEX GrVertex
-#define TAB rast_tab
-
-#define DEPTH_SCALE 1.0
-#define UNFILLED_TRI unfilled_tri
-#define UNFILLED_QUAD unfilled_quad
-#define VERT_X(_v) _v->x
-#define VERT_Y(_v) _v->y
-#define VERT_Z(_v) _v->ooz
-#define AREA_IS_CCW( a ) IS_NEGATIVE( a )
-#define GET_VERTEX(e) (fxMesa->verts + e)
-
-
-#if FX_PACKEDCOLOR
-#define VERT_SET_RGBA( dst, f )			\
-do {						\
-   UNCLAMPED_FLOAT_TO_UBYTE(dst->pargb[2], f[0]);\
-   UNCLAMPED_FLOAT_TO_UBYTE(dst->pargb[1], f[1]);\
-   UNCLAMPED_FLOAT_TO_UBYTE(dst->pargb[0], f[2]);\
-   UNCLAMPED_FLOAT_TO_UBYTE(dst->pargb[3], f[3]);\
-} while (0)
-
-#define VERT_COPY_RGBA( v0, v1 ) 		\
-   *(GLuint *)&v0->pargb = *(GLuint *)&v1->pargb
-
-#define VERT_SAVE_RGBA( idx )  			\
-   *(GLuint *)&color[idx] = *(GLuint *)&v[idx]->pargb
-
-#define VERT_RESTORE_RGBA( idx )		\
-   *(GLuint *)&v[idx]->pargb = *(GLuint *)&color[idx]
-
-
-#define VERT_SET_SPEC( dst, f )			\
-do {						\
-   UNCLAMPED_FLOAT_TO_UBYTE(dst->pspec[2], f[0]);\
-   UNCLAMPED_FLOAT_TO_UBYTE(dst->pspec[1], f[1]);\
-   UNCLAMPED_FLOAT_TO_UBYTE(dst->pspec[0], f[2]);\
-} while (0)
-
-#define VERT_COPY_SPEC( v0, v1 ) 		\
-   *(GLuint *)&v0->pspec = *(GLuint *)&v1->pspec
-
-#define VERT_SAVE_SPEC( idx )  			\
-   *(GLuint *)&spec[idx] = *(GLuint *)&v[idx]->pspec
-
-#define VERT_RESTORE_SPEC( idx )		\
-   *(GLuint *)&v[idx]->pspec = *(GLuint *)&spec[idx]
-
-
-#define LOCAL_VARS(n)				\
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);	\
-   GLubyte color[n][4], spec[n][4];		\
-   (void) color; (void) spec;
-#else  /* !FX_PACKEDCOLOR */
-#define VERT_SET_RGBA( dst, f )	\
-do {				\
-   CNORM(dst->r, f[0]);		\
-   CNORM(dst->g, f[1]);		\
-   CNORM(dst->b, f[2]);		\
-   CNORM(dst->a, f[3]);		\
-} while (0)
-
-#define VERT_COPY_RGBA( v0, v1 ) 		\
-do {						\
-   COPY_FLOAT(v0->r, v1->r);			\
-   COPY_FLOAT(v0->g, v1->g);			\
-   COPY_FLOAT(v0->b, v1->b);			\
-   COPY_FLOAT(v0->a, v1->a);			\
-} while (0)
-
-#define VERT_SAVE_RGBA( idx )  			\
-do {						\
-   COPY_FLOAT(color[idx][0], v[idx]->r);	\
-   COPY_FLOAT(color[idx][1], v[idx]->g);	\
-   COPY_FLOAT(color[idx][2], v[idx]->b);	\
-   COPY_FLOAT(color[idx][3], v[idx]->a);	\
-} while (0)
-
-#define VERT_RESTORE_RGBA( idx )		\
-do {						\
-   COPY_FLOAT(v[idx]->r, color[idx][0]);	\
-   COPY_FLOAT(v[idx]->g, color[idx][1]);	\
-   COPY_FLOAT(v[idx]->b, color[idx][2]);	\
-   COPY_FLOAT(v[idx]->a, color[idx][3]);	\
-} while (0)
-
-
-#define VERT_SET_SPEC( dst, f )	\
-do {				\
-   CNORM(dst->r1, f[0]);	\
-   CNORM(dst->g1, f[1]);	\
-   CNORM(dst->b1, f[2]);	\
-} while (0)
-
-#define VERT_COPY_SPEC( v0, v1 ) 		\
-do {						\
-   COPY_FLOAT(v0->r1, v1->r1);			\
-   COPY_FLOAT(v0->g1, v1->g1);			\
-   COPY_FLOAT(v0->b1, v1->b1);			\
-} while (0)
-
-#define VERT_SAVE_SPEC( idx )  			\
-do {						\
-   COPY_FLOAT(spec[idx][0], v[idx]->r1);	\
-   COPY_FLOAT(spec[idx][1], v[idx]->g1);	\
-   COPY_FLOAT(spec[idx][2], v[idx]->b1);	\
-} while (0)
-
-#define VERT_RESTORE_SPEC( idx )		\
-do {						\
-   COPY_FLOAT(v[idx]->r1, spec[idx][0]);	\
-   COPY_FLOAT(v[idx]->g1, spec[idx][1]);	\
-   COPY_FLOAT(v[idx]->b1, spec[idx][2]);	\
-} while (0)
-
-
-#define LOCAL_VARS(n)				\
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);	\
-   GLfloat color[n][4], spec[n][4];		\
-   (void) color; (void) spec;
-#endif /* !FX_PACKEDCOLOR */
-
-
-/***********************************************************************
- *            Twoside stencil                                          *
- ***********************************************************************/
-#define SETUP_STENCIL(f) if (f) fxSetupStencilFace(ctx, f)
-#define UNSET_STENCIL(f) if (f) fxSetupStencil(ctx)
-
-
-/***********************************************************************
- *            Functions to draw basic unfilled primitives              *
- ***********************************************************************/
-
-#define RASTERIZE(x) if (fxMesa->raster_primitive != reduced_prim[x]) \
-                        fxRasterPrimitive( ctx, reduced_prim[x] )
-#define RENDER_PRIMITIVE fxMesa->render_primitive
-#define IND FX_FALLBACK_BIT
-#define TAG(x) x
-#include "tnl_dd/t_dd_unfilled.h"
-#undef IND
-
-/***********************************************************************
- *                 Functions to draw GL primitives                     *
- ***********************************************************************/
-
-#define IND (0)
-#define TAG(x) x
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_OFFSET_BIT)
-#define TAG(x) x##_offset
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_TWOSIDE_BIT)
-#define TAG(x) x##_twoside
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_TWOSIDE_BIT|FX_OFFSET_BIT)
-#define TAG(x) x##_twoside_offset
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_UNFILLED_BIT)
-#define TAG(x) x##_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_OFFSET_BIT|FX_UNFILLED_BIT)
-#define TAG(x) x##_offset_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_TWOSIDE_BIT|FX_UNFILLED_BIT)
-#define TAG(x) x##_twoside_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_TWOSIDE_BIT|FX_OFFSET_BIT|FX_UNFILLED_BIT)
-#define TAG(x) x##_twoside_offset_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_FALLBACK_BIT)
-#define TAG(x) x##_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_OFFSET_BIT|FX_FALLBACK_BIT)
-#define TAG(x) x##_offset_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_TWOSIDE_BIT|FX_FALLBACK_BIT)
-#define TAG(x) x##_twoside_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_TWOSIDE_BIT|FX_OFFSET_BIT|FX_FALLBACK_BIT)
-#define TAG(x) x##_twoside_offset_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_UNFILLED_BIT|FX_FALLBACK_BIT)
-#define TAG(x) x##_unfilled_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_OFFSET_BIT|FX_UNFILLED_BIT|FX_FALLBACK_BIT)
-#define TAG(x) x##_offset_unfilled_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_TWOSIDE_BIT|FX_UNFILLED_BIT|FX_FALLBACK_BIT)
-#define TAG(x) x##_twoside_unfilled_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_TWOSIDE_BIT|FX_OFFSET_BIT|FX_UNFILLED_BIT| \
-	     FX_FALLBACK_BIT)
-#define TAG(x) x##_twoside_offset_unfilled_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-
-/* Fx doesn't support provoking-vertex flat-shading?
- */
-#define IND (FX_FLAT_BIT)
-#define TAG(x) x##_flat
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_OFFSET_BIT|FX_FLAT_BIT)
-#define TAG(x) x##_offset_flat
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_TWOSIDE_BIT|FX_FLAT_BIT)
-#define TAG(x) x##_twoside_flat
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_TWOSIDE_BIT|FX_OFFSET_BIT|FX_FLAT_BIT)
-#define TAG(x) x##_twoside_offset_flat
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_UNFILLED_BIT|FX_FLAT_BIT)
-#define TAG(x) x##_unfilled_flat
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_OFFSET_BIT|FX_UNFILLED_BIT|FX_FLAT_BIT)
-#define TAG(x) x##_offset_unfilled_flat
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_TWOSIDE_BIT|FX_UNFILLED_BIT|FX_FLAT_BIT)
-#define TAG(x) x##_twoside_unfilled_flat
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_TWOSIDE_BIT|FX_OFFSET_BIT|FX_UNFILLED_BIT|FX_FLAT_BIT)
-#define TAG(x) x##_twoside_offset_unfilled_flat
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_FALLBACK_BIT|FX_FLAT_BIT)
-#define TAG(x) x##_fallback_flat
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_OFFSET_BIT|FX_FALLBACK_BIT|FX_FLAT_BIT)
-#define TAG(x) x##_offset_fallback_flat
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_TWOSIDE_BIT|FX_FALLBACK_BIT|FX_FLAT_BIT)
-#define TAG(x) x##_twoside_fallback_flat
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_TWOSIDE_BIT|FX_OFFSET_BIT|FX_FALLBACK_BIT|FX_FLAT_BIT)
-#define TAG(x) x##_twoside_offset_fallback_flat
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_UNFILLED_BIT|FX_FALLBACK_BIT|FX_FLAT_BIT)
-#define TAG(x) x##_unfilled_fallback_flat
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_OFFSET_BIT|FX_UNFILLED_BIT|FX_FALLBACK_BIT|FX_FLAT_BIT)
-#define TAG(x) x##_offset_unfilled_fallback_flat
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_TWOSIDE_BIT|FX_UNFILLED_BIT|FX_FALLBACK_BIT|FX_FLAT_BIT)
-#define TAG(x) x##_twoside_unfilled_fallback_flat
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_TWOSIDE_BIT|FX_OFFSET_BIT|FX_UNFILLED_BIT| \
-	     FX_FALLBACK_BIT|FX_FLAT_BIT)
-#define TAG(x) x##_twoside_offset_unfilled_fallback_flat
-#include "tnl_dd/t_dd_tritmp.h"
-
-
-/* 2-sided stencil begin */
-#define IND (FX_TWOSTENCIL_BIT)
-#define TAG(x) x##_twostencil
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_OFFSET_BIT|FX_TWOSTENCIL_BIT)
-#define TAG(x) x##_offset_twostencil
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_TWOSIDE_BIT|FX_TWOSTENCIL_BIT)
-#define TAG(x) x##_twoside_twostencil
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_TWOSIDE_BIT|FX_OFFSET_BIT|FX_TWOSTENCIL_BIT)
-#define TAG(x) x##_twoside_offset_twostencil
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_UNFILLED_BIT|FX_TWOSTENCIL_BIT)
-#define TAG(x) x##_unfilled_twostencil
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_OFFSET_BIT|FX_UNFILLED_BIT|FX_TWOSTENCIL_BIT)
-#define TAG(x) x##_offset_unfilled_twostencil
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_TWOSIDE_BIT|FX_UNFILLED_BIT|FX_TWOSTENCIL_BIT)
-#define TAG(x) x##_twoside_unfilled_twostencil
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_TWOSIDE_BIT|FX_OFFSET_BIT|FX_UNFILLED_BIT|FX_TWOSTENCIL_BIT)
-#define TAG(x) x##_twoside_offset_unfilled_twostencil
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_FALLBACK_BIT|FX_TWOSTENCIL_BIT)
-#define TAG(x) x##_fallback_twostencil
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_OFFSET_BIT|FX_FALLBACK_BIT|FX_TWOSTENCIL_BIT)
-#define TAG(x) x##_offset_fallback_twostencil
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_TWOSIDE_BIT|FX_FALLBACK_BIT|FX_TWOSTENCIL_BIT)
-#define TAG(x) x##_twoside_fallback_twostencil
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_TWOSIDE_BIT|FX_OFFSET_BIT|FX_FALLBACK_BIT|FX_TWOSTENCIL_BIT)
-#define TAG(x) x##_twoside_offset_fallback_twostencil
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_UNFILLED_BIT|FX_FALLBACK_BIT|FX_TWOSTENCIL_BIT)
-#define TAG(x) x##_unfilled_fallback_twostencil
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_OFFSET_BIT|FX_UNFILLED_BIT|FX_FALLBACK_BIT|FX_TWOSTENCIL_BIT)
-#define TAG(x) x##_offset_unfilled_fallback_twostencil
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_TWOSIDE_BIT|FX_UNFILLED_BIT|FX_FALLBACK_BIT|FX_TWOSTENCIL_BIT)
-#define TAG(x) x##_twoside_unfilled_fallback_twostencil
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_TWOSIDE_BIT|FX_OFFSET_BIT|FX_UNFILLED_BIT| \
-	     FX_FALLBACK_BIT|FX_TWOSTENCIL_BIT)
-#define TAG(x) x##_twoside_offset_unfilled_fallback_twostencil
-#include "tnl_dd/t_dd_tritmp.h"
-
-
-/* Fx doesn't support provoking-vertex flat-shading?
- */
-#define IND (FX_FLAT_BIT|FX_TWOSTENCIL_BIT)
-#define TAG(x) x##_flat_twostencil
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_OFFSET_BIT|FX_FLAT_BIT|FX_TWOSTENCIL_BIT)
-#define TAG(x) x##_offset_flat_twostencil
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_TWOSIDE_BIT|FX_FLAT_BIT|FX_TWOSTENCIL_BIT)
-#define TAG(x) x##_twoside_flat_twostencil
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_TWOSIDE_BIT|FX_OFFSET_BIT|FX_FLAT_BIT|FX_TWOSTENCIL_BIT)
-#define TAG(x) x##_twoside_offset_flat_twostencil
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_UNFILLED_BIT|FX_FLAT_BIT|FX_TWOSTENCIL_BIT)
-#define TAG(x) x##_unfilled_flat_twostencil
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_OFFSET_BIT|FX_UNFILLED_BIT|FX_FLAT_BIT|FX_TWOSTENCIL_BIT)
-#define TAG(x) x##_offset_unfilled_flat_twostencil
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_TWOSIDE_BIT|FX_UNFILLED_BIT|FX_FLAT_BIT|FX_TWOSTENCIL_BIT)
-#define TAG(x) x##_twoside_unfilled_flat_twostencil
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_TWOSIDE_BIT|FX_OFFSET_BIT|FX_UNFILLED_BIT|FX_FLAT_BIT|FX_TWOSTENCIL_BIT)
-#define TAG(x) x##_twoside_offset_unfilled_flat_twostencil
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_FALLBACK_BIT|FX_FLAT_BIT|FX_TWOSTENCIL_BIT)
-#define TAG(x) x##_fallback_flat_twostencil
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_OFFSET_BIT|FX_FALLBACK_BIT|FX_FLAT_BIT|FX_TWOSTENCIL_BIT)
-#define TAG(x) x##_offset_fallback_flat_twostencil
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_TWOSIDE_BIT|FX_FALLBACK_BIT|FX_FLAT_BIT|FX_TWOSTENCIL_BIT)
-#define TAG(x) x##_twoside_fallback_flat_twostencil
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_TWOSIDE_BIT|FX_OFFSET_BIT|FX_FALLBACK_BIT|FX_FLAT_BIT|FX_TWOSTENCIL_BIT)
-#define TAG(x) x##_twoside_offset_fallback_flat_twostencil
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_UNFILLED_BIT|FX_FALLBACK_BIT|FX_FLAT_BIT|FX_TWOSTENCIL_BIT)
-#define TAG(x) x##_unfilled_fallback_flat_twostencil
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_OFFSET_BIT|FX_UNFILLED_BIT|FX_FALLBACK_BIT|FX_FLAT_BIT|FX_TWOSTENCIL_BIT)
-#define TAG(x) x##_offset_unfilled_fallback_flat_twostencil
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_TWOSIDE_BIT|FX_UNFILLED_BIT|FX_FALLBACK_BIT|FX_FLAT_BIT|FX_TWOSTENCIL_BIT)
-#define TAG(x) x##_twoside_unfilled_fallback_flat_twostencil
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FX_TWOSIDE_BIT|FX_OFFSET_BIT|FX_UNFILLED_BIT| \
-	     FX_FALLBACK_BIT|FX_FLAT_BIT|FX_TWOSTENCIL_BIT)
-#define TAG(x) x##_twoside_offset_unfilled_fallback_flat_twostencil
-#include "tnl_dd/t_dd_tritmp.h"
-/* 2-sided stencil end */
-
-
-static void init_rast_tab( void )
-{
-   init();
-   init_offset();
-   init_twoside();
-   init_twoside_offset();
-   init_unfilled();
-   init_offset_unfilled();
-   init_twoside_unfilled();
-   init_twoside_offset_unfilled();
-   init_fallback();
-   init_offset_fallback();
-   init_twoside_fallback();
-   init_twoside_offset_fallback();
-   init_unfilled_fallback();
-   init_offset_unfilled_fallback();
-   init_twoside_unfilled_fallback();
-   init_twoside_offset_unfilled_fallback();
-
-   init_flat();
-   init_offset_flat();
-   init_twoside_flat();
-   init_twoside_offset_flat();
-   init_unfilled_flat();
-   init_offset_unfilled_flat();
-   init_twoside_unfilled_flat();
-   init_twoside_offset_unfilled_flat();
-   init_fallback_flat();
-   init_offset_fallback_flat();
-   init_twoside_fallback_flat();
-   init_twoside_offset_fallback_flat();
-   init_unfilled_fallback_flat();
-   init_offset_unfilled_fallback_flat();
-   init_twoside_unfilled_fallback_flat();
-   init_twoside_offset_unfilled_fallback_flat();
-
-   /* 2-sided stencil begin */
-   init_twostencil();
-   init_offset_twostencil();
-   init_twoside_twostencil();
-   init_twoside_offset_twostencil();
-   init_unfilled_twostencil();
-   init_offset_unfilled_twostencil();
-   init_twoside_unfilled_twostencil();
-   init_twoside_offset_unfilled_twostencil();
-   init_fallback_twostencil();
-   init_offset_fallback_twostencil();
-   init_twoside_fallback_twostencil();
-   init_twoside_offset_fallback_twostencil();
-   init_unfilled_fallback_twostencil();
-   init_offset_unfilled_fallback_twostencil();
-   init_twoside_unfilled_fallback_twostencil();
-   init_twoside_offset_unfilled_fallback_twostencil();
-
-   init_flat_twostencil();
-   init_offset_flat_twostencil();
-   init_twoside_flat_twostencil();
-   init_twoside_offset_flat_twostencil();
-   init_unfilled_flat_twostencil();
-   init_offset_unfilled_flat_twostencil();
-   init_twoside_unfilled_flat_twostencil();
-   init_twoside_offset_unfilled_flat_twostencil();
-   init_fallback_flat_twostencil();
-   init_offset_fallback_flat_twostencil();
-   init_twoside_fallback_flat_twostencil();
-   init_twoside_offset_fallback_flat_twostencil();
-   init_unfilled_fallback_flat_twostencil();
-   init_offset_unfilled_fallback_flat_twostencil();
-   init_twoside_unfilled_fallback_flat_twostencil();
-   init_twoside_offset_unfilled_fallback_flat_twostencil();
-   /* 2-sided stencil end */
-}
-
-
-/**********************************************************************/
-/*                 Render whole begin/end objects                     */
-/**********************************************************************/
-
-
-/* Accelerate vertex buffer rendering when renderindex == 0 and
- * there is no clipping.
- */
-#define INIT(x) fxRenderPrimitive( ctx, x )
-
-static void fx_render_vb_points( GLcontext *ctx,
-				 GLuint start,
-				 GLuint count,
-				 GLuint flags )
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   GrVertex *fxVB = fxMesa->verts;
-   GLint i;
-   (void) flags;
-
-   if (TDFX_DEBUG & VERBOSE_VARRAY) {
-      fprintf(stderr, "fx_render_vb_points\n");
-   }
-
-   INIT(GL_POINTS);
-
-   /* Adjust point coords */
-   for (i = start; i < count; i++) {
-      fxVB[i].x += PNT_X_OFFSET - TRI_X_OFFSET;
-      fxVB[i].y += PNT_Y_OFFSET - TRI_Y_OFFSET;
-   }
-
-   grDrawVertexArrayContiguous( GR_POINTS, count-start,
-                                fxVB + start, sizeof(GrVertex));
-   /* restore point coords */
-   for (i = start; i < count; i++) {
-      fxVB[i].x -= PNT_X_OFFSET - TRI_X_OFFSET;
-      fxVB[i].y -= PNT_Y_OFFSET - TRI_Y_OFFSET;
-   }
-}
-
-static void fx_render_vb_line_strip( GLcontext *ctx,
-				     GLuint start,
-				     GLuint count,
-				     GLuint flags )
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   GrVertex *fxVB = fxMesa->verts;
-   GLint i;
-   (void) flags;
-
-   if (TDFX_DEBUG & VERBOSE_VARRAY) {
-      fprintf(stderr, "fx_render_vb_line_strip\n");
-   }
-
-   INIT(GL_LINE_STRIP);
-
-   /* adjust line coords */
-   for (i = start; i < count; i++) {
-      fxVB[i].x += LINE_X_OFFSET - TRI_X_OFFSET;
-      fxVB[i].y += LINE_Y_OFFSET - TRI_Y_OFFSET;
-   }
-
-   grDrawVertexArrayContiguous( GR_LINE_STRIP, count-start,
-                                fxVB + start, sizeof(GrVertex));
-
-   /* restore line coords */
-   for (i = start; i < count; i++) {
-      fxVB[i].x -= LINE_X_OFFSET - TRI_X_OFFSET;
-      fxVB[i].y -= LINE_Y_OFFSET - TRI_Y_OFFSET;
-   }
-}
-
-static void fx_render_vb_line_loop( GLcontext *ctx,
-				    GLuint start,
-				    GLuint count,
-				    GLuint flags )
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   GrVertex *fxVB = fxMesa->verts;
-   GLint i;
-   GLint j = start;
-   (void) flags;
-
-   if (TDFX_DEBUG & VERBOSE_VARRAY) {
-      fprintf(stderr, "fx_render_vb_line_loop\n");
-   }
-
-   INIT(GL_LINE_LOOP);
-
-   if (!(flags & PRIM_BEGIN)) {
-      j++;
-   }
-
-   /* adjust line coords */
-   for (i = start; i < count; i++) {
-      fxVB[i].x += LINE_X_OFFSET - TRI_X_OFFSET;
-      fxVB[i].y += LINE_Y_OFFSET - TRI_Y_OFFSET;
-   }
-
-   grDrawVertexArrayContiguous( GR_LINE_STRIP, count-j,
-                                fxVB + j, sizeof(GrVertex));
-
-   if (flags & PRIM_END)
-      grDrawLine( fxVB + (count - 1),
-                  fxVB + start );
-
-   /* restore line coords */
-   for (i = start; i < count; i++) {
-      fxVB[i].x -= LINE_X_OFFSET - TRI_X_OFFSET;
-      fxVB[i].y -= LINE_Y_OFFSET - TRI_Y_OFFSET;
-   }
-}
-
-static void fx_render_vb_lines( GLcontext *ctx,
-				GLuint start,
-				GLuint count,
-				GLuint flags )
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   GrVertex *fxVB = fxMesa->verts;
-   GLint i;
-   (void) flags;
-
-   if (TDFX_DEBUG & VERBOSE_VARRAY) {
-      fprintf(stderr, "fx_render_vb_lines\n");
-   }
-
-   INIT(GL_LINES);
-
-   /* adjust line coords */
-   for (i = start; i < count; i++) {
-      fxVB[i].x += LINE_X_OFFSET - TRI_X_OFFSET;
-      fxVB[i].y += LINE_Y_OFFSET - TRI_Y_OFFSET;
-   }
-
-   grDrawVertexArrayContiguous( GR_LINES, count-start,
-                                fxVB + start, sizeof(GrVertex));
-
-   /* restore line coords */
-   for (i = start; i < count; i++) {
-      fxVB[i].x -= LINE_X_OFFSET - TRI_X_OFFSET;
-      fxVB[i].y -= LINE_Y_OFFSET - TRI_Y_OFFSET;
-   }
-}
-
-static void fx_render_vb_triangles( GLcontext *ctx,
-				    GLuint start,
-				    GLuint count,
-				    GLuint flags )
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   GrVertex *fxVB = fxMesa->verts;
-   GLuint j;
-   (void) flags;
-
-   if (TDFX_DEBUG & VERBOSE_VARRAY) {
-      fprintf(stderr, "fx_render_vb_triangles\n");
-   }
-
-   INIT(GL_TRIANGLES);
-
-   for (j=start+2; j<count; j+=3) {
-      grDrawTriangle(fxVB + (j-2), fxVB + (j-1), fxVB + j);
-   }
-}
-
-
-static void fx_render_vb_tri_strip( GLcontext *ctx,
-				    GLuint start,
-				    GLuint count,
-				    GLuint flags )
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   GrVertex *fxVB = fxMesa->verts;
-   (void) flags;
-
-   if (TDFX_DEBUG & VERBOSE_VARRAY) {
-      fprintf(stderr, "fx_render_vb_tri_strip\n");
-   }
-
-   INIT(GL_TRIANGLE_STRIP);
-
-   /* no GR_TRIANGLE_STRIP_CONTINUE?!? */
-
-   grDrawVertexArrayContiguous( GR_TRIANGLE_STRIP, count-start,
-                                fxVB + start, sizeof(GrVertex));
-}
-
-
-static void fx_render_vb_tri_fan( GLcontext *ctx,
-				  GLuint start,
-				  GLuint count,
-				  GLuint flags )
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   GrVertex *fxVB = fxMesa->verts;
-   (void) flags;
-
-   if (TDFX_DEBUG & VERBOSE_VARRAY) {
-      fprintf(stderr, "fx_render_vb_tri_fan\n");
-   }
-
-   INIT(GL_TRIANGLE_FAN);
-
-   grDrawVertexArrayContiguous( GR_TRIANGLE_FAN, count-start,
-                                fxVB + start, sizeof(GrVertex) );
-}
-
-static void fx_render_vb_quads( GLcontext *ctx,
-				GLuint start,
-				GLuint count,
-				GLuint flags )
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   GrVertex *fxVB = fxMesa->verts;
-   GLuint i;
-   (void) flags;
-
-   if (TDFX_DEBUG & VERBOSE_VARRAY) {
-      fprintf(stderr, "fx_render_vb_quads\n");
-   }
-
-   INIT(GL_QUADS);
-
-   for (i = start + 3 ; i < count ; i += 4 ) {
-#define VERT(x) (fxVB + (x))
-      GrVertex *_v_[4];
-      _v_[0] = VERT(i);
-      _v_[1] = VERT(i-3);
-      _v_[2] = VERT(i-2);
-      _v_[3] = VERT(i-1);
-      grDrawVertexArray(GR_TRIANGLE_FAN, 4, _v_);
-      /*grDrawTriangle( VERT(i-3), VERT(i-2), VERT(i) );*/
-      /*grDrawTriangle( VERT(i-2), VERT(i-1), VERT(i) );*/
-#undef VERT
-   }
-}
-
-static void fx_render_vb_quad_strip( GLcontext *ctx,
-				     GLuint start,
-				     GLuint count,
-				     GLuint flags )
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   GrVertex *fxVB = fxMesa->verts;
-   (void) flags;
-
-   if (TDFX_DEBUG & VERBOSE_VARRAY) {
-      fprintf(stderr, "fx_render_vb_quad_strip\n");
-   }
-
-   INIT(GL_QUAD_STRIP);
-
-   count -= (count-start)&1;
-
-   grDrawVertexArrayContiguous( GR_TRIANGLE_STRIP,
-                                count-start, fxVB + start, sizeof(GrVertex));
-}
-
-static void fx_render_vb_poly( GLcontext *ctx,
-				GLuint start,
-				GLuint count,
-				GLuint flags )
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   GrVertex *fxVB = fxMesa->verts;
-   (void) flags;
-
-   if (TDFX_DEBUG & VERBOSE_VARRAY) {
-      fprintf(stderr, "fx_render_vb_poly\n");
-   }
-
-   INIT(GL_POLYGON);
-
-   grDrawVertexArrayContiguous( GR_POLYGON, count-start,
-                                fxVB + start, sizeof(GrVertex));
-}
-
-static void fx_render_vb_noop( GLcontext *ctx,
-				 GLuint start,
-				 GLuint count,
-				 GLuint flags )
-{
-   (void) (ctx && start && count && flags);
-}
-
-static void (*fx_render_tab_verts[GL_POLYGON+2])(GLcontext *,
-						   GLuint,
-						   GLuint,
-						   GLuint) =
-{
-   fx_render_vb_points,
-   fx_render_vb_lines,
-   fx_render_vb_line_loop,
-   fx_render_vb_line_strip,
-   fx_render_vb_triangles,
-   fx_render_vb_tri_strip,
-   fx_render_vb_tri_fan,
-   fx_render_vb_quads,
-   fx_render_vb_quad_strip,
-   fx_render_vb_poly,
-   fx_render_vb_noop,
-};
-#undef INIT
-
-
-/**********************************************************************/
-/*            Render whole (indexed) begin/end objects                */
-/**********************************************************************/
-
-
-#define VERT(x) (vertptr + x)
-
-#define RENDER_POINTS( start, count )		\
-   for ( ; start < count ; start++)		\
-      grDrawPoint( VERT(ELT(start)) );
-
-#define RENDER_LINE( v0, v1 ) \
-   grDrawLine( VERT(v0), VERT(v1) )
-
-#define RENDER_TRI( v0, v1, v2 )  \
-   grDrawTriangle( VERT(v0), VERT(v1), VERT(v2) )
-
-#define RENDER_QUAD( v0, v1, v2, v3 ) \
-   do {	\
-      GrVertex *_v_[4];	\
-      _v_[0] = VERT(v3);\
-      _v_[1] = VERT(v0);\
-      _v_[2] = VERT(v1);\
-      _v_[3] = VERT(v2);\
-      grDrawVertexArray(GR_TRIANGLE_FAN, 4, _v_);\
-      /*grDrawTriangle( VERT(v0), VERT(v1), VERT(v3) );*/\
-      /*grDrawTriangle( VERT(v1), VERT(v2), VERT(v3) );*/\
-   } while (0)
-
-#define INIT(x) fxRenderPrimitive( ctx, x )
-
-#undef LOCAL_VARS
-#define LOCAL_VARS						\
-    fxMesaContext fxMesa = FX_CONTEXT(ctx);			\
-    GrVertex *vertptr = fxMesa->verts;		\
-    const GLuint * const elt = TNL_CONTEXT(ctx)->vb.Elts;	\
-    (void) elt;
-
-#define RESET_STIPPLE
-#define RESET_OCCLUSION
-#define PRESERVE_VB_DEFS
-
-/* Elts, no clipping.
- */
-#undef ELT
-#undef TAG
-#define TAG(x) fx_##x##_elts
-#define ELT(x) elt[x]
-#include "tnl_dd/t_dd_rendertmp.h"
-
-/* Verts, no clipping.
- */
-#undef ELT
-#undef TAG
-#define TAG(x) fx_##x##_verts
-#define ELT(x) x
-/*#include "tnl_dd/t_dd_rendertmp.h"*/ /* we have fx_render_vb_* now */
-
-
-
-/**********************************************************************/
-/*                   Render clipped primitives                        */
-/**********************************************************************/
-
-
-
-static void fxRenderClippedPoly( GLcontext *ctx, const GLuint *elts,
-				   GLuint n )
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   TNLcontext *tnl = TNL_CONTEXT(ctx);
-   struct vertex_buffer *VB = &tnl->vb;
-   GLuint prim = fxMesa->render_primitive;
-
-   /* Render the new vertices as an unclipped polygon.
-    */
-   {
-      GLuint *tmp = VB->Elts;
-      VB->Elts = (GLuint *)elts;
-      tnl->Driver.Render.PrimTabElts[GL_POLYGON]( ctx, 0, n,
-						  PRIM_BEGIN|PRIM_END );
-      VB->Elts = tmp;
-   }
-
-   /* Restore the render primitive
-    */
-   if (prim != GL_POLYGON)
-      tnl->Driver.Render.PrimitiveNotify( ctx, prim );
-}
-
-
-static void fxFastRenderClippedPoly( GLcontext *ctx, const GLuint *elts,
-				       GLuint n )
-{
-   int i;
-   fxMesaContext fxMesa = FX_CONTEXT( ctx );
-   GrVertex *vertptr = fxMesa->verts;
-   if (n == 3) {
-      grDrawTriangle( VERT(elts[0]), VERT(elts[1]), VERT(elts[2]) );
-   } else if (n <= 32) {
-      GrVertex *newvptr[32];
-      for (i = 0 ; i < n ; i++) {
-         newvptr[i] = VERT(elts[i]);
-      }
-      grDrawVertexArray(GR_TRIANGLE_FAN, n, newvptr);
-   } else {
-      const GrVertex *start = VERT(elts[0]);
-      for (i = 2 ; i < n ; i++) {
-         grDrawTriangle( start, VERT(elts[i-1]), VERT(elts[i]) );
-      }
-   }
-}
-
-/**********************************************************************/
-/*                    Choose render functions                         */
-/**********************************************************************/
-
-
-#define POINT_FALLBACK (DD_POINT_SMOOTH)
-#define LINE_FALLBACK (DD_LINE_STIPPLE)
-#define TRI_FALLBACK (DD_TRI_SMOOTH | DD_TRI_STIPPLE)
-#define ANY_FALLBACK_FLAGS (POINT_FALLBACK | LINE_FALLBACK | TRI_FALLBACK)
-#define ANY_RASTER_FLAGS (DD_FLATSHADE | DD_TRI_LIGHT_TWOSIDE | DD_TRI_OFFSET \
-			  | DD_TRI_UNFILLED | DD_TRI_TWOSTENCIL)
-
-
-
-void fxDDChooseRenderState(GLcontext *ctx)
-{
-   TNLcontext *tnl = TNL_CONTEXT(ctx);
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   GLuint flags = ctx->_TriangleCaps;
-   GLuint index = 0;
-
-   if (flags & (ANY_FALLBACK_FLAGS|ANY_RASTER_FLAGS)) {
-      if (flags & ANY_RASTER_FLAGS) {
-	 if (flags & DD_TRI_TWOSTENCIL)       index |= FX_TWOSTENCIL_BIT;
-	 if (flags & DD_TRI_LIGHT_TWOSIDE)    index |= FX_TWOSIDE_BIT;
-	 if (flags & DD_TRI_OFFSET)	      index |= FX_OFFSET_BIT;
-	 if (flags & DD_TRI_UNFILLED)	      index |= FX_UNFILLED_BIT;
-	 if (flags & DD_FLATSHADE)	      index |= FX_FLAT_BIT;
-      }
-
-      fxMesa->draw_point = fx_draw_point;
-      fxMesa->draw_line = fx_draw_line;
-      fxMesa->draw_tri = fx_draw_triangle;
-
-      /* Hook in fallbacks for specific primitives. */
-      if (flags & (POINT_FALLBACK|
-		   LINE_FALLBACK|
-		   TRI_FALLBACK))
-      {
-         if (fxMesa->verbose) {
-            fprintf(stderr, "Voodoo ! fallback (%x), raster (%x)\n",
-                            flags & ANY_FALLBACK_FLAGS, flags & ANY_RASTER_FLAGS);
-         }
-
-	 if (flags & POINT_FALLBACK)
-	    fxMesa->draw_point = fx_fallback_point;
-
-	 if (flags & LINE_FALLBACK)
-	    fxMesa->draw_line = fx_fallback_line;
-
-	 if (flags & TRI_FALLBACK)
-	    fxMesa->draw_tri = fx_fallback_tri;
-
-	 index |= FX_FALLBACK_BIT;
-      }
-   }
-
-   tnl->Driver.Render.Points = rast_tab[index].points;
-   tnl->Driver.Render.Line = rast_tab[index].line;
-   tnl->Driver.Render.ClippedLine = rast_tab[index].line;
-   tnl->Driver.Render.Triangle = rast_tab[index].triangle;
-   tnl->Driver.Render.Quad = rast_tab[index].quad;
-
-   if (index == 0) {
-      tnl->Driver.Render.PrimTabVerts = fx_render_tab_verts;
-      tnl->Driver.Render.PrimTabElts = fx_render_tab_elts;
-      tnl->Driver.Render.ClippedPolygon = fxFastRenderClippedPoly;
-   } else {
-      tnl->Driver.Render.PrimTabVerts = _tnl_render_tab_verts;
-      tnl->Driver.Render.PrimTabElts = _tnl_render_tab_elts;
-      tnl->Driver.Render.ClippedPolygon = fxRenderClippedPoly;
-   }
-
-   fxMesa->render_index = index;
-
-   /* [dBorca] Hack alert: more a trick than a real plug-in!!! */
-   if (flags & (DD_POINT_SIZE | DD_POINT_ATTEN)) {
-      /* We need to set the point primitive to go through "rast_tab",
-       * to make sure "POINT" calls "fxMesa->draw_point" instead of
-       * "grDrawPoint". We can achieve this by using FX_FALLBACK_BIT
-       * (not really a total rasterization fallback, so we don't alter
-       * "fxMesa->render_index"). If we get here with DD_POINT_SMOOTH,
-       * we're done, cos we've already set _tnl_render_tab_{verts|elts}
-       * above. Otherwise, the T&L engine can optimize point rendering
-       * by using fx_render_tab_{verts|elts} hence the extra work.
-       */
-      if (flags & DD_POINT_SMOOTH) {
-         fxMesa->draw_point = fx_draw_point_wide_aa;
-      } else {
-         fxMesa->draw_point = fx_draw_point_wide;
-         fx_render_tab_verts[0] = fx_render_pw_verts;
-         fx_render_tab_elts[0] = fx_render_pw_elts;
-      }
-      tnl->Driver.Render.Points = rast_tab[index|FX_FALLBACK_BIT].points;
-   } else {
-      fx_render_tab_verts[0] = fx_render_vb_points;
-      fx_render_tab_elts[0] = fx_render_points_elts;
-   }
-}
-
-
-/**********************************************************************/
-/*                Runtime render state and callbacks                  */
-/**********************************************************************/
-
-static void fxRunPipeline( GLcontext *ctx )
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   GLuint new_gl_state = fxMesa->new_gl_state;
-
-   if (TDFX_DEBUG & VERBOSE_PIPELINE) {
-      fprintf(stderr, "fxRunPipeline()\n");
-   }
-
-#if 0
-   /* Recalculate fog table on projection matrix changes.  This used to
-    * be triggered by the NearFar callback.
-    */
-   if (new_gl_state & _NEW_PROJECTION)
-      fxMesa->new_state |= FX_NEW_FOG;
-#endif
-
-   if (new_gl_state & _FX_NEW_IS_IN_HARDWARE)
-      fxCheckIsInHardware(ctx);
-
-   if (fxMesa->new_state)
-      fxSetupFXUnits(ctx);
-
-   if (!fxMesa->fallback) {
-      if (new_gl_state & _FX_NEW_RENDERSTATE)
-         fxDDChooseRenderState(ctx);
-
-      if (new_gl_state & _FX_NEW_SETUP_FUNCTION)
-         fxChooseVertexState(ctx);
-   }
-
-   if (new_gl_state & _NEW_TEXTURE) {
-      struct gl_texture_unit *t0 = &ctx->Texture.Unit[fxMesa->tmu_source[0]];
-      struct gl_texture_unit *t1 = &ctx->Texture.Unit[fxMesa->tmu_source[1]];
-
-      if (t0->_Current && FX_TEXTURE_DATA(t0)) {
-         fxMesa->s0scale = FX_TEXTURE_DATA(t0)->sScale;
-         fxMesa->t0scale = FX_TEXTURE_DATA(t0)->tScale;
-         fxMesa->inv_s0scale = 1.0F / fxMesa->s0scale;
-         fxMesa->inv_t0scale = 1.0F / fxMesa->t0scale;
-      }
-
-      if (t1->_Current && FX_TEXTURE_DATA(t1)) {
-         fxMesa->s1scale = FX_TEXTURE_DATA(t1)->sScale;
-         fxMesa->t1scale = FX_TEXTURE_DATA(t1)->tScale;
-         fxMesa->inv_s1scale = 1.0F / fxMesa->s1scale;
-         fxMesa->inv_t1scale = 1.0F / fxMesa->t1scale;
-      }
-   }
-
-   fxMesa->new_gl_state = 0;
-
-   _tnl_run_pipeline( ctx );
-}
-
-
-
-/* Always called between RenderStart and RenderFinish --> We already
- * hold the lock.
- */
-static void fxRasterPrimitive( GLcontext *ctx, GLenum prim )
-{
-   fxMesaContext fxMesa = FX_CONTEXT( ctx );
-
-   fxMesa->raster_primitive = prim;
-
-   fxSetupCull(ctx);
-}
-
-
-
-/* Determine the rasterized primitive when not drawing unfilled
- * polygons.
- */
-static void fxRenderPrimitive( GLcontext *ctx, GLenum prim )
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   GLuint rprim = reduced_prim[prim];
-
-   fxMesa->render_primitive = prim;
-
-   if (rprim == GL_TRIANGLES && (ctx->_TriangleCaps & DD_TRI_UNFILLED))
-      return;
-
-   if (fxMesa->raster_primitive != rprim) {
-      fxRasterPrimitive( ctx, rprim );
-   }
-}
-
-static void fxRenderFinish( GLcontext *ctx )
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-
-   if (fxMesa->render_index & FX_FALLBACK_BIT)
-      _swrast_flush( ctx );
-}
-
-
-
-/**********************************************************************/
-/*               Manage total rasterization fallbacks                 */
-/**********************************************************************/
-
-static char *fallbackStrings[] = {
-   "3D/Rect/Cube Texture map",
-   "glDrawBuffer(GL_FRONT_AND_BACK)",
-   "Separate specular color",
-   "glEnable/Disable(GL_STENCIL_TEST)",
-   "glRenderMode(selection or feedback)",
-   "glLogicOp()",
-   "Texture env mode",
-   "Texture border",
-   "glColorMask",
-   "blend mode",
-   "multitex"
-};
-
-
-static char *getFallbackString(GLuint bit)
-{
-   int i = 0;
-   while (bit > 1) {
-      i++;
-      bit >>= 1;
-   }
-   return fallbackStrings[i];
-}
-
-
-void fxCheckIsInHardware( GLcontext *ctx )
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   TNLcontext *tnl = TNL_CONTEXT(ctx);
-   GLuint oldfallback = fxMesa->fallback;
-   GLuint newfallback = fxMesa->fallback = fx_check_IsInHardware( ctx );
-
-   if (newfallback) {
-      if (oldfallback == 0) {
-         if (fxMesa->verbose) {
-            fprintf(stderr, "Voodoo ! enter SW 0x%08x %s\n", newfallback, getFallbackString(newfallback));
-         }
-	 _swsetup_Wakeup( ctx );
-      }
-   }
-   else {
-      if (oldfallback) {
-	 _swrast_flush( ctx );
-	 tnl->Driver.Render.Start = fxCheckTexSizes;
-	 tnl->Driver.Render.Finish = fxRenderFinish;
-	 tnl->Driver.Render.PrimitiveNotify = fxRenderPrimitive;
-	 tnl->Driver.Render.ClippedPolygon = _tnl_RenderClippedPolygon;
-	 tnl->Driver.Render.ClippedLine = _tnl_RenderClippedLine;
-	 tnl->Driver.Render.PrimTabVerts = _tnl_render_tab_verts;
-	 tnl->Driver.Render.PrimTabElts = _tnl_render_tab_elts;
-	 tnl->Driver.Render.ResetLineStipple = _swrast_ResetLineStipple;
-	 tnl->Driver.Render.BuildVertices = fxBuildVertices;
-	 fxChooseVertexState(ctx);
-	 fxDDChooseRenderState(ctx);
-         if (fxMesa->verbose) {
-            fprintf(stderr, "Voodoo ! leave SW 0x%08x %s\n", oldfallback, getFallbackString(oldfallback));
-         }
-      }
-      tnl->Driver.Render.Multipass = NULL;
-      if (HAVE_SPEC && NEED_SECONDARY_COLOR(ctx)) {
-         tnl->Driver.Render.Multipass = fxMultipass_ColorSum;
-         /* obey stencil, but do not change it */
-         fxMesa->multipass = GL_TRUE;
-         if (fxMesa->unitsState.stencilEnabled) {
-            fxMesa->new_state |= FX_NEW_STENCIL;
-         }
-      }
-   }
-}
-
-void fxDDInitTriFuncs( GLcontext *ctx )
-{
-   TNLcontext *tnl = TNL_CONTEXT(ctx);
-   static int firsttime = 1;
-
-   if (firsttime) {
-      init_rast_tab();
-      firsttime = 0;
-   }
-
-   tnl->Driver.RunPipeline = fxRunPipeline;
-   tnl->Driver.Render.Start = fxCheckTexSizes;
-   tnl->Driver.Render.Finish = fxRenderFinish;
-   tnl->Driver.Render.PrimitiveNotify = fxRenderPrimitive;
-   tnl->Driver.Render.ClippedPolygon = _tnl_RenderClippedPolygon;
-   tnl->Driver.Render.ClippedLine = _tnl_RenderClippedLine;
-   tnl->Driver.Render.PrimTabVerts = _tnl_render_tab_verts;
-   tnl->Driver.Render.PrimTabElts = _tnl_render_tab_elts;
-   tnl->Driver.Render.ResetLineStipple = _swrast_ResetLineStipple;
-   tnl->Driver.Render.BuildVertices = fxBuildVertices;
-   tnl->Driver.Render.Multipass = NULL;
-
-   (void) fx_print_vertex;
-}
-
-
-/* [dBorca] Hack alert:
- * doesn't work with blending.
- */
-static GLboolean
-fxMultipass_ColorSum (GLcontext *ctx, GLuint pass)
-{
- fxMesaContext fxMesa = FX_CONTEXT(ctx);
- tfxUnitsState *us = &fxMesa->unitsState;
-
- static int t0 = 0;
- static int t1 = 0;
-
- switch (pass) {
-        case 1: /* first pass: the TEXTURED triangles are drawn */
-             /* set stencil's real values */
-             fxMesa->multipass = GL_FALSE;
-             if (us->stencilEnabled) {
-                fxSetupStencil(ctx);
-             }
-             /* save per-pass data */
-             fxMesa->restoreUnitsState = *us;
-             /* turn off texturing */
-             t0 = ctx->Texture.Unit[0]._ReallyEnabled;
-             t1 = ctx->Texture.Unit[1]._ReallyEnabled;
-             ctx->Texture.Unit[0]._ReallyEnabled = 0;
-             ctx->Texture.Unit[1]._ReallyEnabled = 0;
-             /* SUM the colors */
-             fxDDBlendEquationSeparate(ctx, GL_FUNC_ADD, GL_FUNC_ADD);
-             fxDDBlendFuncSeparate(ctx, GL_ONE, GL_ONE, GL_ZERO, GL_ONE);
-             fxDDEnable(ctx, GL_BLEND, GL_TRUE);
-             /* make sure we draw only where we want to */
-             if (us->depthTestEnabled) {
-                switch (us->depthTestFunc) {
-                   default:
-                      fxDDDepthFunc(ctx, GL_EQUAL);
-                   case GL_NEVER:
-                   case GL_ALWAYS:
-                      ;
-                }
-                fxDDDepthMask(ctx, GL_FALSE);
-             }
-             /* switch to secondary colors */
-#if FX_PACKEDCOLOR
-             grVertexLayout(GR_PARAM_PARGB, GR_VERTEX_PSPEC_OFFSET << 2, GR_PARAM_ENABLE);
-#else  /* !FX_PACKEDCOLOR */
-             grVertexLayout(GR_PARAM_RGB, GR_VERTEX_SPEC_OFFSET << 2, GR_PARAM_ENABLE);
-#endif /* !FX_PACKEDCOLOR */
-             /* don't advertise new state */
-             fxMesa->new_state = 0;
-             break;
-        case 2: /* 2nd pass (last): the secondary color is summed over texture */
-             /* restore original state */
-             *us = fxMesa->restoreUnitsState;
-             /* restore texturing */
-             ctx->Texture.Unit[0]._ReallyEnabled = t0;
-             ctx->Texture.Unit[1]._ReallyEnabled = t1;
-             /* revert to primary colors */
-#if FX_PACKEDCOLOR
-             grVertexLayout(GR_PARAM_PARGB, GR_VERTEX_PARGB_OFFSET << 2, GR_PARAM_ENABLE);
-#else  /* !FX_PACKEDCOLOR */
-             grVertexLayout(GR_PARAM_RGB, GR_VERTEX_RGB_OFFSET << 2, GR_PARAM_ENABLE);
-#endif /* !FX_PACKEDCOLOR */
-             break;
-        default:
-             assert(0); /* NOTREACHED */
- }
-
- /* update HW state */
- fxSetupBlend(ctx);
- fxSetupDepthTest(ctx);
- fxSetupTexture(ctx);
-
- return (pass == 1);
-}
-
-
-#else
-
-
-/*
- * Need this to provide at least one external definition.
- */
-
-extern int gl_fx_dummy_function_tris(void);
-int
-gl_fx_dummy_function_tris(void)
-{
-   return 0;
-}
-
-#endif /* FX */
diff --git a/src/mesa/drivers/glide/fxvb.c b/src/mesa/drivers/glide/fxvb.c
deleted file mode 100644
index 64453cbe4b..0000000000
--- a/src/mesa/drivers/glide/fxvb.c
+++ /dev/null
@@ -1,838 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  5.1
- *
- * Copyright (C) 1999-2003  Brian Paul   All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * KEITH WHITWELL, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM,
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
- * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/* Authors:
- *    Keith Whitwell <keith@tungstengraphics.com>
- *    Daniel Borca <dborca@users.sourceforge.net>
- */
-
-#ifdef HAVE_CONFIG_H
-#include "conf.h"
-#endif
-
-#ifdef FX
-
-#include "main/glheader.h"
-#include "main/mtypes.h"
-#include "main/imports.h"
-#include "main/macros.h"
-#include "main/colormac.h"
-
-#include "math/m_translate.h"
-#include "swrast_setup/swrast_setup.h"
-
-#include "tnl/tnl.h"
-#include "tnl/t_context.h"
-
-#include "fxdrv.h"
-
-
-static void copy_pv( GLcontext *ctx, GLuint edst, GLuint esrc )
-{
-   fxMesaContext fxMesa = FX_CONTEXT( ctx );
-   GrVertex *dst = fxMesa->verts + edst;
-   GrVertex *src = fxMesa->verts + esrc;
-
-#if FX_PACKEDCOLOR
-   *(GLuint *)&dst->pargb = *(GLuint *)&src->pargb;
-#else  /* !FX_PACKEDCOLOR */
-   COPY_FLOAT(dst->r, src->r);
-   COPY_FLOAT(dst->g, src->g);
-   COPY_FLOAT(dst->b, src->b);
-   COPY_FLOAT(dst->a, src->a);
-#endif /* !FX_PACKEDCOLOR */
-}
-
-static void copy_pv2( GLcontext *ctx, GLuint edst, GLuint esrc )
-{
-   fxMesaContext fxMesa = FX_CONTEXT( ctx );
-   GrVertex *dst = fxMesa->verts + edst;
-   GrVertex *src = fxMesa->verts + esrc;
-
-#if FX_PACKEDCOLOR
-   *(GLuint *)&dst->pargb = *(GLuint *)&src->pargb;
-   *(GLuint *)&dst->pspec = *(GLuint *)&src->pspec;
-#else  /* !FX_PACKEDCOLOR */
-   COPY_FLOAT(dst->r, src->r);
-   COPY_FLOAT(dst->g, src->g);
-   COPY_FLOAT(dst->b, src->b);
-   COPY_FLOAT(dst->a, src->a);
-   COPY_FLOAT(dst->r1, src->r1);
-   COPY_FLOAT(dst->g1, src->g1);
-   COPY_FLOAT(dst->b1, src->b1);
-#endif /* !FX_PACKEDCOLOR */
-}
-
-static struct {
-   void		      (*emit) (GLcontext *ctx, GLuint start, GLuint end, void *dest);
-   tnl_copy_pv_func	copy_pv;
-   tnl_interp_func	interp;
-   GLboolean	      (*check_tex_sizes) (GLcontext *ctx);
-   GLuint		vertex_format;
-} setup_tab[MAX_SETUP];
-
-
-#define GET_COLOR(ptr, idx) ((ptr)->data[idx])
-
-
-static void interp_extras( GLcontext *ctx,
-			   GLfloat t,
-			   GLuint dst, GLuint out, GLuint in,
-			   GLboolean force_boundary )
-{
-   struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
-
-   if (VB->BackfaceColorPtr) {
-      /* If stride is zero, BackfaceColorPtr is constant across the VB, so
-       * there is no point interpolating between two values as they will
-       * be identical.  This case is handled in t_dd_tritmp.h
-       */
-      if (VB->BackfaceColorPtr->stride) {
-	 assert(VB->BackfaceColorPtr->stride == 4 * sizeof(GLfloat));
-	 INTERP_4F( t,
-		    GET_COLOR(VB->BackfaceColorPtr, dst),
-		    GET_COLOR(VB->BackfaceColorPtr, out),
-		    GET_COLOR(VB->BackfaceColorPtr, in) );
-      }
-
-      if (VB->BackfaceSecondaryColorPtr) {
-	 INTERP_3F( t,
-		    GET_COLOR(VB->BackfaceSecondaryColorPtr, dst),
-		    GET_COLOR(VB->BackfaceSecondaryColorPtr, out),
-		    GET_COLOR(VB->BackfaceSecondaryColorPtr, in) );
-      }
-   }
-
-   if (VB->EdgeFlag) {
-      VB->EdgeFlag[dst] = VB->EdgeFlag[out] || force_boundary;
-   }
-
-   setup_tab[FX_CONTEXT(ctx)->SetupIndex].interp(ctx, t, dst, out, in,
-						   force_boundary);
-}
-
-static void copy_pv_extras( GLcontext *ctx, GLuint dst, GLuint src )
-{
-   struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
-
-   if (VB->BackfaceColorPtr) {
-	 COPY_4FV( GET_COLOR(VB->BackfaceColorPtr, dst),
-		   GET_COLOR(VB->BackfaceColorPtr, src) );
-
-	 if (VB->BackfaceSecondaryColorPtr) {
-	    COPY_3FV( GET_COLOR(VB->BackfaceSecondaryColorPtr, dst),
-		      GET_COLOR(VB->BackfaceSecondaryColorPtr, src) );
-	 }
-   }
-
-   setup_tab[FX_CONTEXT(ctx)->SetupIndex].copy_pv(ctx, dst, src);
-}
-
-
-#define IND (SETUP_XYZW|SETUP_RGBA)
-#define TAG(x) x##_wg
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_TMU0)
-#define TAG(x) x##_wgt0
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_TMU0|SETUP_TMU1)
-#define TAG(x) x##_wgt0t1
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_TMU0|SETUP_PTEX)
-#define TAG(x) x##_wgpt0
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_TMU0|SETUP_TMU1|\
-             SETUP_PTEX)
-#define TAG(x) x##_wgpt0t1
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_PSIZ)
-#define TAG(x) x##_wga
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_TMU0|SETUP_PSIZ)
-#define TAG(x) x##_wgt0a
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_TMU0|SETUP_TMU1|SETUP_PSIZ)
-#define TAG(x) x##_wgt0t1a
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_TMU0|SETUP_PTEX|SETUP_PSIZ)
-#define TAG(x) x##_wgpt0a
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_TMU0|SETUP_TMU1|\
-             SETUP_PTEX|SETUP_PSIZ)
-#define TAG(x) x##_wgpt0t1a
-#include "fxvbtmp.h"
-
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_SPEC)
-#define TAG(x) x##_2wg
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_SPEC|SETUP_TMU0)
-#define TAG(x) x##_2wgt0
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_SPEC|SETUP_TMU0|SETUP_TMU1)
-#define TAG(x) x##_2wgt0t1
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_SPEC|SETUP_TMU0|SETUP_PTEX)
-#define TAG(x) x##_2wgpt0
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_SPEC|SETUP_TMU0|SETUP_TMU1|\
-             SETUP_PTEX)
-#define TAG(x) x##_2wgpt0t1
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_SPEC|SETUP_PSIZ)
-#define TAG(x) x##_2wga
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_SPEC|SETUP_TMU0|SETUP_PSIZ)
-#define TAG(x) x##_2wgt0a
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_SPEC|SETUP_TMU0|SETUP_TMU1|SETUP_PSIZ)
-#define TAG(x) x##_2wgt0t1a
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_SPEC|SETUP_TMU0|SETUP_PTEX|SETUP_PSIZ)
-#define TAG(x) x##_2wgpt0a
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_SPEC|SETUP_TMU0|SETUP_TMU1|\
-             SETUP_PTEX|SETUP_PSIZ)
-#define TAG(x) x##_2wgpt0t1a
-#include "fxvbtmp.h"
-
-/* fog { */
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_FOGC)
-#define TAG(x) x##_wgf
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_TMU0|SETUP_FOGC)
-#define TAG(x) x##_wgt0f
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_TMU0|SETUP_TMU1|SETUP_FOGC)
-#define TAG(x) x##_wgt0t1f
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_TMU0|SETUP_PTEX|SETUP_FOGC)
-#define TAG(x) x##_wgpt0f
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_TMU0|SETUP_TMU1|\
-             SETUP_PTEX|SETUP_FOGC)
-#define TAG(x) x##_wgpt0t1f
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_PSIZ|SETUP_FOGC)
-#define TAG(x) x##_wgaf
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_TMU0|SETUP_PSIZ|SETUP_FOGC)
-#define TAG(x) x##_wgt0af
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_TMU0|SETUP_TMU1|SETUP_PSIZ|SETUP_FOGC)
-#define TAG(x) x##_wgt0t1af
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_TMU0|SETUP_PTEX|SETUP_PSIZ|SETUP_FOGC)
-#define TAG(x) x##_wgpt0af
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_TMU0|SETUP_TMU1|\
-             SETUP_PTEX|SETUP_PSIZ|SETUP_FOGC)
-#define TAG(x) x##_wgpt0t1af
-#include "fxvbtmp.h"
-
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_SPEC|SETUP_FOGC)
-#define TAG(x) x##_2wgf
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_SPEC|SETUP_TMU0|SETUP_FOGC)
-#define TAG(x) x##_2wgt0f
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_SPEC|SETUP_TMU0|SETUP_TMU1|SETUP_FOGC)
-#define TAG(x) x##_2wgt0t1f
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_SPEC|SETUP_TMU0|SETUP_PTEX|SETUP_FOGC)
-#define TAG(x) x##_2wgpt0f
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_SPEC|SETUP_TMU0|SETUP_TMU1|\
-             SETUP_PTEX|SETUP_FOGC)
-#define TAG(x) x##_2wgpt0t1f
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_SPEC|SETUP_PSIZ|SETUP_FOGC)
-#define TAG(x) x##_2wgaf
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_SPEC|SETUP_TMU0|SETUP_PSIZ|SETUP_FOGC)
-#define TAG(x) x##_2wgt0af
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_SPEC|SETUP_TMU0|SETUP_TMU1|SETUP_PSIZ|SETUP_FOGC)
-#define TAG(x) x##_2wgt0t1af
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_SPEC|SETUP_TMU0|SETUP_PTEX|SETUP_PSIZ|SETUP_FOGC)
-#define TAG(x) x##_2wgpt0af
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_RGBA|SETUP_SPEC|SETUP_TMU0|SETUP_TMU1|\
-             SETUP_PTEX|SETUP_PSIZ|SETUP_FOGC)
-#define TAG(x) x##_2wgpt0t1af
-#include "fxvbtmp.h"
-/* fog } */
-
-
-/* Snapping for voodoo-1
- */
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA)
-#define TAG(x) x##_wsg
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_TMU0)
-#define TAG(x) x##_wsgt0
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_TMU0|\
-             SETUP_TMU1)
-#define TAG(x) x##_wsgt0t1
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_TMU0|\
-             SETUP_PTEX)
-#define TAG(x) x##_wsgpt0
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_TMU0|\
-	     SETUP_TMU1|SETUP_PTEX)
-#define TAG(x) x##_wsgpt0t1
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_PSIZ)
-#define TAG(x) x##_wsga
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_TMU0|SETUP_PSIZ)
-#define TAG(x) x##_wsgt0a
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_TMU0|\
-             SETUP_TMU1|SETUP_PSIZ)
-#define TAG(x) x##_wsgt0t1a
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_TMU0|\
-             SETUP_PTEX|SETUP_PSIZ)
-#define TAG(x) x##_wsgpt0a
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_TMU0|\
-	     SETUP_TMU1|SETUP_PTEX|SETUP_PSIZ)
-#define TAG(x) x##_wsgpt0t1a
-#include "fxvbtmp.h"
-
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_SPEC)
-#define TAG(x) x##_2wsg
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_SPEC|SETUP_TMU0)
-#define TAG(x) x##_2wsgt0
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_SPEC|SETUP_TMU0|\
-             SETUP_TMU1)
-#define TAG(x) x##_2wsgt0t1
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_SPEC|SETUP_TMU0|\
-             SETUP_PTEX)
-#define TAG(x) x##_2wsgpt0
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_SPEC|SETUP_TMU0|\
-	     SETUP_TMU1|SETUP_PTEX)
-#define TAG(x) x##_2wsgpt0t1
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_SPEC|SETUP_PSIZ)
-#define TAG(x) x##_2wsga
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_SPEC|SETUP_TMU0|SETUP_PSIZ)
-#define TAG(x) x##_2wsgt0a
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_SPEC|SETUP_TMU0|\
-             SETUP_TMU1|SETUP_PSIZ)
-#define TAG(x) x##_2wsgt0t1a
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_SPEC|SETUP_TMU0|\
-             SETUP_PTEX|SETUP_PSIZ)
-#define TAG(x) x##_2wsgpt0a
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_SPEC|SETUP_TMU0|\
-	     SETUP_TMU1|SETUP_PTEX|SETUP_PSIZ)
-#define TAG(x) x##_2wsgpt0t1a
-#include "fxvbtmp.h"
-
-/* fog { */
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_FOGC)
-#define TAG(x) x##_wsgf
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_TMU0|SETUP_FOGC)
-#define TAG(x) x##_wsgt0f
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_TMU0|\
-             SETUP_TMU1|SETUP_FOGC)
-#define TAG(x) x##_wsgt0t1f
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_TMU0|\
-             SETUP_PTEX|SETUP_FOGC)
-#define TAG(x) x##_wsgpt0f
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_TMU0|\
-	     SETUP_TMU1|SETUP_PTEX|SETUP_FOGC)
-#define TAG(x) x##_wsgpt0t1f
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_PSIZ|SETUP_FOGC)
-#define TAG(x) x##_wsgaf
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_TMU0|SETUP_PSIZ|SETUP_FOGC)
-#define TAG(x) x##_wsgt0af
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_TMU0|\
-             SETUP_TMU1|SETUP_PSIZ|SETUP_FOGC)
-#define TAG(x) x##_wsgt0t1af
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_TMU0|\
-             SETUP_PTEX|SETUP_PSIZ|SETUP_FOGC)
-#define TAG(x) x##_wsgpt0af
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_TMU0|\
-	     SETUP_TMU1|SETUP_PTEX|SETUP_PSIZ|SETUP_FOGC)
-#define TAG(x) x##_wsgpt0t1af
-#include "fxvbtmp.h"
-
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_SPEC|SETUP_FOGC)
-#define TAG(x) x##_2wsgf
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_SPEC|SETUP_TMU0|SETUP_FOGC)
-#define TAG(x) x##_2wsgt0f
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_SPEC|SETUP_TMU0|\
-             SETUP_TMU1|SETUP_FOGC)
-#define TAG(x) x##_2wsgt0t1f
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_SPEC|SETUP_TMU0|\
-             SETUP_PTEX|SETUP_FOGC)
-#define TAG(x) x##_2wsgpt0f
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_SPEC|SETUP_TMU0|\
-	     SETUP_TMU1|SETUP_PTEX|SETUP_FOGC)
-#define TAG(x) x##_2wsgpt0t1f
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_SPEC|SETUP_PSIZ|SETUP_FOGC)
-#define TAG(x) x##_2wsgaf
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_SPEC|SETUP_TMU0|SETUP_PSIZ|SETUP_FOGC)
-#define TAG(x) x##_2wsgt0af
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_SPEC|SETUP_TMU0|\
-             SETUP_TMU1|SETUP_PSIZ|SETUP_FOGC)
-#define TAG(x) x##_2wsgt0t1af
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_SPEC|SETUP_TMU0|\
-             SETUP_PTEX|SETUP_PSIZ|SETUP_FOGC)
-#define TAG(x) x##_2wsgpt0af
-#include "fxvbtmp.h"
-
-#define IND (SETUP_XYZW|SETUP_SNAP|SETUP_RGBA|SETUP_SPEC|SETUP_TMU0|\
-	     SETUP_TMU1|SETUP_PTEX|SETUP_PSIZ|SETUP_FOGC)
-#define TAG(x) x##_2wsgpt0t1af
-#include "fxvbtmp.h"
-/* fog } */
-
-
-/* Vertex repair (multipass rendering)
- */
-#define IND (SETUP_RGBA)
-#define TAG(x) x##_g
-#include "fxvbtmp.h"
-
-#define IND (SETUP_TMU0)
-#define TAG(x) x##_t0
-#include "fxvbtmp.h"
-
-#define IND (SETUP_TMU0|SETUP_TMU1)
-#define TAG(x) x##_t0t1
-#include "fxvbtmp.h"
-
-#define IND (SETUP_RGBA|SETUP_TMU0)
-#define TAG(x) x##_gt0
-#include "fxvbtmp.h"
-
-#define IND (SETUP_RGBA|SETUP_TMU0|SETUP_TMU1)
-#define TAG(x) x##_gt0t1
-#include "fxvbtmp.h"
-
-
-#define IND (SETUP_RGBA|SETUP_SPEC)
-#define TAG(x) x##_2g
-#include "fxvbtmp.h"
-
-#define IND (SETUP_TMU0|SETUP_SPEC)
-#define TAG(x) x##_2t0
-#include "fxvbtmp.h"
-
-#define IND (SETUP_TMU0|SETUP_SPEC|SETUP_TMU1)
-#define TAG(x) x##_2t0t1
-#include "fxvbtmp.h"
-
-#define IND (SETUP_RGBA|SETUP_SPEC|SETUP_TMU0)
-#define TAG(x) x##_2gt0
-#include "fxvbtmp.h"
-
-#define IND (SETUP_RGBA|SETUP_SPEC|SETUP_TMU0|SETUP_TMU1)
-#define TAG(x) x##_2gt0t1
-#include "fxvbtmp.h"
-
-
-
-static void init_setup_tab( void )
-{
-   init_wg();
-   init_wgt0();
-   init_wgt0t1();
-   init_wgpt0();
-   init_wgpt0t1();
-   init_wga();
-   init_wgt0a();
-   init_wgt0t1a();
-   init_wgpt0a();
-   init_wgpt0t1a();
-    init_2wg();
-    init_2wgt0();
-    init_2wgt0t1();
-    init_2wgpt0();
-    init_2wgpt0t1();
-    init_2wga();
-    init_2wgt0a();
-    init_2wgt0t1a();
-    init_2wgpt0a();
-    init_2wgpt0t1a();
-   init_wgf();
-   init_wgt0f();
-   init_wgt0t1f();
-   init_wgpt0f();
-   init_wgpt0t1f();
-   init_wgaf();
-   init_wgt0af();
-   init_wgt0t1af();
-   init_wgpt0af();
-   init_wgpt0t1af();
-    init_2wgf();
-    init_2wgt0f();
-    init_2wgt0t1f();
-    init_2wgpt0f();
-    init_2wgpt0t1f();
-    init_2wgaf();
-    init_2wgt0af();
-    init_2wgt0t1af();
-    init_2wgpt0af();
-    init_2wgpt0t1af();
-
-   init_wsg();
-   init_wsgt0();
-   init_wsgt0t1();
-   init_wsgpt0();
-   init_wsgpt0t1();
-   init_wsga();
-   init_wsgt0a();
-   init_wsgt0t1a();
-   init_wsgpt0a();
-   init_wsgpt0t1a();
-    init_2wsg();
-    init_2wsgt0();
-    init_2wsgt0t1();
-    init_2wsgpt0();
-    init_2wsgpt0t1();
-    init_2wsga();
-    init_2wsgt0a();
-    init_2wsgt0t1a();
-    init_2wsgpt0a();
-    init_2wsgpt0t1a();
-   init_wsgf();
-   init_wsgt0f();
-   init_wsgt0t1f();
-   init_wsgpt0f();
-   init_wsgpt0t1f();
-   init_wsgaf();
-   init_wsgt0af();
-   init_wsgt0t1af();
-   init_wsgpt0af();
-   init_wsgpt0t1af();
-    init_2wsgf();
-    init_2wsgt0f();
-    init_2wsgt0t1f();
-    init_2wsgpt0f();
-    init_2wsgpt0t1f();
-    init_2wsgaf();
-    init_2wsgt0af();
-    init_2wsgt0t1af();
-    init_2wsgpt0af();
-    init_2wsgpt0t1af();
-
-   init_g();
-   init_t0();
-   init_t0t1();
-   init_gt0();
-   init_gt0t1();
-    init_2g();
-    init_2t0();
-    init_2t0t1();
-    init_2gt0();
-    init_2gt0t1();
-}
-
-
-void fxPrintSetupFlags(char *msg, GLuint flags )
-{
-   fprintf(stderr, "%s(%x): %s%s%s%s%s%s%s%s\n",
-	   msg,
-	   (int)flags,
-	   (flags & SETUP_XYZW)     ? " xyzw," : "",
-	   (flags & SETUP_SNAP)     ? " snap," : "",
-	   (flags & SETUP_RGBA)     ? " rgba," : "",
-	   (flags & SETUP_TMU0)     ? " tex-0," : "",
-	   (flags & SETUP_TMU1)     ? " tex-1," : "",
-	   (flags & SETUP_PSIZ)     ? " psiz," : "",
-	   (flags & SETUP_SPEC)     ? " spec," : "",
-	   (flags & SETUP_FOGC)     ? " fog," : "");
-}
-
-
-
-void fxCheckTexSizes( GLcontext *ctx )
-{
-   TNLcontext *tnl = TNL_CONTEXT(ctx);
-   fxMesaContext fxMesa = FX_CONTEXT( ctx );
-
-   if (!setup_tab[fxMesa->SetupIndex].check_tex_sizes(ctx)) {
-      GLuint ind = fxMesa->SetupIndex |= (SETUP_PTEX|SETUP_RGBA);
-
-      /* Tdfx handles projective textures nicely; just have to change
-       * up to the new vertex format.
-       */
-      if (setup_tab[ind].vertex_format != fxMesa->stw_hint_state) {
-
-	 fxMesa->stw_hint_state = setup_tab[ind].vertex_format;
-	 FX_grHints(GR_HINT_STWHINT, fxMesa->stw_hint_state);
-
-	 /* This is required as we have just changed the vertex
-	  * format, so the interp routines must also change.
-	  * In the unfilled and twosided cases we are using the
-	  * Extras ones anyway, so leave them in place.
-	  */
-	 if (!(ctx->_TriangleCaps & (DD_TRI_LIGHT_TWOSIDE|DD_TRI_UNFILLED))) {
-	    tnl->Driver.Render.Interp = setup_tab[fxMesa->SetupIndex].interp;
-	 }
-      }
-   }
-}
-
-
-void fxBuildVertices( GLcontext *ctx, GLuint start, GLuint end,
-			GLuint newinputs )
-{
-   fxMesaContext fxMesa = FX_CONTEXT( ctx );
-   GrVertex *v = (fxMesa->verts + start);
-
-   if (!newinputs)
-      return;
-
-   if (newinputs & VERT_BIT_POS) {
-      setup_tab[fxMesa->SetupIndex].emit( ctx, start, end, v );
-   } else {
-      GLuint ind = 0;
-
-      if (newinputs & VERT_BIT_COLOR0)
-	 ind |= SETUP_RGBA;
-
-      if (newinputs & VERT_BIT_COLOR1)
-	 ind |= SETUP_SPEC;
-
-      if (newinputs & VERT_BIT_FOG)
-	 ind |= SETUP_FOGC;
-
-      if (newinputs & VERT_BIT_TEX0)
-	 ind |= SETUP_TMU0;
-
-      if (newinputs & VERT_BIT_TEX1)
-	 ind |= SETUP_TMU0|SETUP_TMU1;
-
-      if (fxMesa->SetupIndex & SETUP_PTEX)
-	 ind = ~0;
-
-      ind &= fxMesa->SetupIndex;
-
-      if (ind) {
-	 setup_tab[ind].emit( ctx, start, end, v );
-      }
-   }
-}
-
-
-void fxChooseVertexState( GLcontext *ctx )
-{
-   TNLcontext *tnl = TNL_CONTEXT(ctx);
-   fxMesaContext fxMesa = FX_CONTEXT( ctx );
-   GLuint ind = SETUP_XYZW|SETUP_RGBA;
-
-   if (fxMesa->snapVertices)
-      ind |= SETUP_SNAP;
-
-   fxMesa->tmu_source[0] = 0;
-   fxMesa->tmu_source[1] = 1;
-
-   if (ctx->Texture._EnabledUnits & 0x2) {
-      if (ctx->Texture._EnabledUnits & 0x1) {
-	 ind |= SETUP_TMU1;
-      }
-      ind |= SETUP_TMU0;
-      fxMesa->tmu_source[0] = 1;
-      fxMesa->tmu_source[1] = 0;
-   }
-   else if (ctx->Texture._EnabledUnits & 0x1) {
-      ind |= SETUP_TMU0;
-   }
-
-   if (ctx->_TriangleCaps & DD_POINT_ATTEN) {
-      ind |= SETUP_PSIZ;
-   }
-
-   if (ctx->_TriangleCaps & DD_SEPARATE_SPECULAR) {
-      ind |= SETUP_SPEC;
-   }
-
-   if (ctx->Fog.FogCoordinateSource == GL_FOG_COORDINATE_EXT) {
-      ind |= SETUP_FOGC;
-   }
-
-   fxMesa->SetupIndex = ind;
-
-   if (ctx->_TriangleCaps & (DD_TRI_LIGHT_TWOSIDE|DD_TRI_UNFILLED)) {
-      tnl->Driver.Render.Interp = interp_extras;
-      tnl->Driver.Render.CopyPV = copy_pv_extras;
-   } else {
-      tnl->Driver.Render.Interp = setup_tab[ind].interp;
-      tnl->Driver.Render.CopyPV = setup_tab[ind].copy_pv;
-   }
-
-   if (setup_tab[ind].vertex_format != fxMesa->stw_hint_state) {
-      fxMesa->stw_hint_state = setup_tab[ind].vertex_format;
-      FX_grHints(GR_HINT_STWHINT, fxMesa->stw_hint_state);
-   }
-}
-
-
-
-void fxAllocVB( GLcontext *ctx )
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   GLuint size = TNL_CONTEXT(ctx)->vb.Size;
-   static int firsttime = 1;
-   if (firsttime) {
-      init_setup_tab();
-      firsttime = 0;
-   }
-
-   fxMesa->verts = (GrVertex *)_mesa_align_malloc(size * sizeof(GrVertex), 32);
-   fxMesa->SetupIndex = SETUP_XYZW|SETUP_RGBA;
-}
-
-
-void fxFreeVB( GLcontext *ctx )
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   if (fxMesa->verts) {
-      _mesa_align_free(fxMesa->verts);
-      fxMesa->verts = 0;
-   }
-}
-#else
-
-
-/*
- * Need this to provide at least one external definition.
- */
-
-extern int gl_fx_dummy_function_vb(void);
-int
-gl_fx_dummy_function_vb(void)
-{
-   return 0;
-}
-
-#endif /* FX */
diff --git a/src/mesa/drivers/glide/fxvbtmp.h b/src/mesa/drivers/glide/fxvbtmp.h
deleted file mode 100644
index f7893c1573..0000000000
--- a/src/mesa/drivers/glide/fxvbtmp.h
+++ /dev/null
@@ -1,370 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  4.1
- *
- * Copyright (C) 1999-2002  Brian Paul   All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/* Authors:
- *    Keith Whitwell <keith@tungstengraphics.com>
- *    Daniel Borca <dborca@users.sourceforge.net>
- */
-
-
-#define VIEWPORT_X(dst,x) dst = s[0]  * x + s[12]
-#define VIEWPORT_Y(dst,y) dst = s[5]  * y + s[13]
-#define VIEWPORT_Z(dst,z) dst = s[10] * z + s[14]
-
-static void TAG(emit)( GLcontext *ctx,
-		       GLuint start, GLuint end,
-		       void *dest )
-{
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);
-   struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
-   GLuint tmu0_source = fxMesa->tmu_source[0];
-   GLuint tmu1_source = fxMesa->tmu_source[1];
-   GLfloat (*tc0)[4], (*tc1)[4];
-   GLfloat (*col)[4], (*spec)[4];
-   GLuint tc0_stride, tc1_stride, col_stride, spec_stride;
-   GLuint tc0_size, tc1_size, col_size;
-   GLfloat (*proj)[4] = VB->NdcPtr->data; 
-   GLuint proj_stride = VB->NdcPtr->stride;
-   GLfloat (*psize)[4];
-   GLuint psize_stride;
-   GLfloat (*fog)[4];
-   GLuint fog_stride;
-   GrVertex *v = (GrVertex *)dest;
-   GLfloat u0scale,v0scale,u1scale,v1scale;
-   const GLubyte *mask = VB->ClipMask;
-   const GLfloat *const s = ctx->Viewport._WindowMap.m;
-   int i;
-
-   if (IND & SETUP_PSIZ) {
-      psize = VB->PointSizePtr->data;
-      psize_stride = VB->PointSizePtr->stride;
-   }
-
-   if (IND & SETUP_TMU0) {
-      tc0 = VB->AttribPtr[_TNL_ATTRIB_TEX0 + tmu0_source]->data;
-      tc0_stride = VB->AttribPtr[_TNL_ATTRIB_TEX0 + tmu0_source]->stride;
-      u0scale = fxMesa->s0scale;
-      v0scale = fxMesa->t0scale;
-      if (IND & SETUP_PTEX)
-	 tc0_size = VB->AttribPtr[_TNL_ATTRIB_TEX0 + tmu0_source]->size;
-   }
-
-   if (IND & SETUP_TMU1) {
-      tc1 = VB->AttribPtr[_TNL_ATTRIB_TEX0 + tmu1_source]->data;
-      tc1_stride = VB->AttribPtr[_TNL_ATTRIB_TEX0 + tmu1_source]->stride;
-      u1scale = fxMesa->s1scale; /* wrong if tmu1_source == 0, possible? */
-      v1scale = fxMesa->t1scale;
-      if (IND & SETUP_PTEX)
-	 tc1_size = VB->AttribPtr[_TNL_ATTRIB_TEX0 + tmu1_source]->size;
-   }
-   
-   if (IND & SETUP_RGBA) {
-      col = VB->AttribPtr[_TNL_ATTRIB_COLOR0]->data;
-      col_stride = VB->AttribPtr[_TNL_ATTRIB_COLOR0]->stride;
-      col_size = VB->AttribPtr[_TNL_ATTRIB_COLOR0]->size;
-   }
-
-   if (IND & SETUP_SPEC) {
-      spec = VB->AttribPtr[_TNL_ATTRIB_COLOR1]->data;
-      spec_stride = VB->AttribPtr[_TNL_ATTRIB_COLOR1]->stride;
-   }
-
-   if (IND & SETUP_FOGC) {
-      fog = VB->AttribPtr[_TNL_ATTRIB_FOG]->data;
-      fog_stride = VB->AttribPtr[_TNL_ATTRIB_FOG]->stride;
-   }
-
-   if (start) {
-      proj =  (GLfloat (*)[4])((GLubyte *)proj + start * proj_stride);
-      if (IND & SETUP_PSIZ)
-         psize =  (GLfloat (*)[4])((GLubyte *)psize + start * psize_stride);
-      if (IND & SETUP_TMU0)
-	 tc0 =  (GLfloat (*)[4])((GLubyte *)tc0 + start * tc0_stride);
-      if (IND & SETUP_TMU1) 
-	 tc1 =  (GLfloat (*)[4])((GLubyte *)tc1 + start * tc1_stride);
-      if (IND & SETUP_RGBA) 
-	 STRIDE_4F(col, start * col_stride);
-      if (IND & SETUP_SPEC)
-	 STRIDE_4F(spec, start * spec_stride);
-      if (IND & SETUP_FOGC)
-	 fog =  (GLfloat (*)[4])((GLubyte *)fog + start * fog_stride);
-   }
-
-   for (i=start; i < end; i++, v++) {
-      if (IND & SETUP_PSIZ) {
-         v->psize = psize[0][0];
-         psize =  (GLfloat (*)[4])((GLubyte *)psize +  psize_stride);
-      }
-   
-      if (IND & SETUP_XYZW) {
-         if (mask[i] == 0) {
-	    /* unclipped */
-	    VIEWPORT_X(v->x,   proj[0][0]);
-	    VIEWPORT_Y(v->y,   proj[0][1]);
-	    VIEWPORT_Z(v->ooz, proj[0][2]);
-	    v->oow = proj[0][3];
-
-	    if (IND & SETUP_SNAP) {
-#if defined(USE_IEEE)
-	       const float snapper = (3L << 18);
-	       v->x += snapper;
-	       v->x -= snapper;
-	       v->y += snapper;
-	       v->y -= snapper;
-#else
-	       v->x = ((int) (v->x * 16.0f)) * (1.0f / 16.0f);
-	       v->y = ((int) (v->y * 16.0f)) * (1.0f / 16.0f);
-#endif
-	    }
-         } else {
-            /* clipped */
-            v->oow = 1.0;
-         }
-
-	 proj =  (GLfloat (*)[4])((GLubyte *)proj +  proj_stride);
-      }
-      if (IND & SETUP_RGBA) {
-#if FX_PACKEDCOLOR
-         UNCLAMPED_FLOAT_TO_UBYTE(v->pargb[2], col[0][0]);
-         UNCLAMPED_FLOAT_TO_UBYTE(v->pargb[1], col[0][1]);
-         UNCLAMPED_FLOAT_TO_UBYTE(v->pargb[0], col[0][2]);
-         if (col_size == 4) {
-            UNCLAMPED_FLOAT_TO_UBYTE(v->pargb[3], col[0][3]);
-         } else {
-            v->pargb[3] = 255;
-         }
-#else  /* !FX_PACKEDCOLOR */
-         CNORM(v->r, col[0][0]);
-         CNORM(v->g, col[0][1]);
-         CNORM(v->b, col[0][2]);
-         if (col_size == 4) {
-            CNORM(v->a, col[0][3]);
-         } else {
-            v->a = 255.0f;
-         }
-#endif /* !FX_PACKEDCOLOR */
-	 STRIDE_4F(col, col_stride);
-      }
-      if (IND & SETUP_SPEC) {
-#if FX_PACKEDCOLOR
-	 UNCLAMPED_FLOAT_TO_UBYTE(v->pspec[2], spec[0][0]);
-	 UNCLAMPED_FLOAT_TO_UBYTE(v->pspec[1], spec[0][1]);
-	 UNCLAMPED_FLOAT_TO_UBYTE(v->pspec[0], spec[0][2]);
-#else  /* !FX_PACKEDCOLOR */
-         CNORM(v->r1, spec[0][0]);
-         CNORM(v->g1, spec[0][1]);
-         CNORM(v->b1, spec[0][2]);
-#endif /* !FX_PACKEDCOLOR */
-	 STRIDE_4F(spec, spec_stride);
-      }
-      if (IND & SETUP_FOGC) {
-         v->fog = CLAMP(fog[0][0], 0.0f, 1.0f);
-	 fog =  (GLfloat (*)[4])((GLubyte *)fog + fog_stride);
-      }
-      if (IND & SETUP_TMU0) {
-	 GLfloat w = v->oow;
-         v->tmuvtx[0].sow = tc0[0][0] * u0scale * w;
-         v->tmuvtx[0].tow = tc0[0][1] * v0scale * w;
-	 if (IND & SETUP_PTEX) {
-	    v->tmuvtx[0].oow = w;
-	    if (tc0_size == 4) 
-	       v->tmuvtx[0].oow *= tc0[0][3];
-	 } 
-	 tc0 =  (GLfloat (*)[4])((GLubyte *)tc0 +  tc0_stride);
-      }
-      if (IND & SETUP_TMU1) {
-	 GLfloat w = v->oow;
-         v->tmuvtx[1].sow = tc1[0][0] * u1scale * w;
-         v->tmuvtx[1].tow = tc1[0][1] * v1scale * w;
-	 if (IND & SETUP_PTEX) {
-	    v->tmuvtx[1].oow = w;
-	    if (tc1_size == 4) 
-	       v->tmuvtx[1].oow *= tc1[0][3];
-	 } 
-	 tc1 =  (GLfloat (*)[4])((GLubyte *)tc1 +  tc1_stride);
-      } 
-   }
-}
-
-#if (IND & SETUP_XYZW) && (IND & SETUP_RGBA)
-
-static GLboolean TAG(check_tex_sizes)( GLcontext *ctx )
-{
-/*     fprintf(stderr, "%s\n", __FUNCTION__); */
-
-   if (IND & SETUP_PTEX)
-      return GL_TRUE;
-   
-   if (IND & SETUP_TMU0) {
-      struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
-
-      if (IND & SETUP_TMU1) {
-	 if (VB->AttribPtr[_TNL_ATTRIB_TEX0] == 0)
-	    VB->AttribPtr[_TNL_ATTRIB_TEX0] = VB->AttribPtr[_TNL_ATTRIB_TEX1];
-	 
-	 if (VB->AttribPtr[_TNL_ATTRIB_TEX1]->size == 4)
-	    return GL_FALSE;
-      }
-
-      if (VB->AttribPtr[_TNL_ATTRIB_TEX0] &&
-	  VB->AttribPtr[_TNL_ATTRIB_TEX0]->size == 4)
-	 return GL_FALSE;
-   }
-
-   return GL_TRUE;
-}
-
-static void TAG(interp)( GLcontext *ctx,
-			 GLfloat t, 
-			 GLuint edst, GLuint eout, GLuint ein,
-			 GLboolean force_boundary )
-{
-   fxMesaContext fxMesa = FX_CONTEXT( ctx );
-   struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
-   const GLfloat *dstclip = VB->ClipPtr->data[edst];
-   const GLfloat oow = (dstclip[3] == 0.0F) ? 1.0F : (1.0F / dstclip[3]);
-   const GLfloat *const s = ctx->Viewport._WindowMap.m;
-   GrVertex *fxverts = fxMesa->verts;
-   GrVertex *dst = (GrVertex *) (fxverts + edst);
-   const GrVertex *out = (const GrVertex *) (fxverts + eout);
-   const GrVertex *in = (const GrVertex *) (fxverts + ein);
-   const GLfloat wout = oow / out->oow;
-   const GLfloat win = oow / in->oow;
-
-   VIEWPORT_X(dst->x,   dstclip[0] * oow);
-   VIEWPORT_Y(dst->y,   dstclip[1] * oow);
-   VIEWPORT_Z(dst->ooz, dstclip[2] * oow);
-   dst->oow = oow;	
-   
-   if (IND & SETUP_SNAP) {
-#if defined(USE_IEEE)
-      const float snapper = (3L << 18);
-      dst->x += snapper;
-      dst->x -= snapper;
-      dst->y += snapper;
-      dst->y -= snapper;
-#else
-      dst->x = ((int) (dst->x * 16.0f)) * (1.0f / 16.0f);
-      dst->y = ((int) (dst->y * 16.0f)) * (1.0f / 16.0f);
-#endif
-   }
-
-   
-#if FX_PACKEDCOLOR
-   INTERP_UB( t, dst->pargb[0], out->pargb[0], in->pargb[0] );
-   INTERP_UB( t, dst->pargb[1], out->pargb[1], in->pargb[1] );
-   INTERP_UB( t, dst->pargb[2], out->pargb[2], in->pargb[2] );
-   INTERP_UB( t, dst->pargb[3], out->pargb[3], in->pargb[3] );
-#else  /* !FX_PACKEDCOLOR */
-   INTERP_F( t, dst->r, out->r, in->r );
-   INTERP_F( t, dst->g, out->g, in->g );
-   INTERP_F( t, dst->b, out->b, in->b );
-   INTERP_F( t, dst->a, out->a, in->a );
-#endif /* !FX_PACKEDCOLOR */
-
-   if (IND & SETUP_SPEC) {
-#if FX_PACKEDCOLOR
-      INTERP_UB( t, dst->pspec[0], out->pspec[0], in->pspec[0] );
-      INTERP_UB( t, dst->pspec[1], out->pspec[1], in->pspec[1] );
-      INTERP_UB( t, dst->pspec[2], out->pspec[2], in->pspec[2] );
-#else  /* !FX_PACKEDCOLOR */
-      INTERP_F( t, dst->r1, out->r1, in->r1 );
-      INTERP_F( t, dst->g1, out->g1, in->g1 );
-      INTERP_F( t, dst->b1, out->b1, in->b1 );
-#endif /* !FX_PACKEDCOLOR */
-   }
-
-   if (IND & SETUP_FOGC) {
-      INTERP_F( t, dst->fog, out->fog, in->fog );
-   }
-
-   if (IND & SETUP_TMU0) {
-      INTERP_F( t,
-		dst->tmuvtx[0].sow,
-		out->tmuvtx[0].sow * wout,
-		in->tmuvtx[0].sow * win );
-      INTERP_F( t,
-		dst->tmuvtx[0].tow,
-		out->tmuvtx[0].tow * wout,
-		in->tmuvtx[0].tow * win );
-      if (IND & SETUP_PTEX) {
-	 INTERP_F( t,
-		   dst->tmuvtx[0].oow, 
-		   out->tmuvtx[0].oow * wout, 
-		   in->tmuvtx[0].oow * win );
-      }
-   }
-
-   if (IND & SETUP_TMU1) {
-      INTERP_F( t,
-		dst->tmuvtx[1].sow,
-		out->tmuvtx[1].sow * wout,
-		in->tmuvtx[1].sow * win );
-      INTERP_F( t,
-		dst->tmuvtx[1].tow,
-		out->tmuvtx[1].tow * wout,
-		in->tmuvtx[1].tow * win );
-      if (IND & SETUP_PTEX) {
-	 INTERP_F( t,
-		   dst->tmuvtx[1].oow, 
-		   out->tmuvtx[1].oow * wout, 
-		   in->tmuvtx[1].oow * win );
-      }
-   }
-}
-#endif
-
-
-static void TAG(init)( void )
-{
-   setup_tab[IND].emit = TAG(emit);
-   
-   if (IND & SETUP_SPEC) {
-      setup_tab[IND].copy_pv = copy_pv2;
-   } else {
-      setup_tab[IND].copy_pv = copy_pv;
-   }
-
-#if ((IND & SETUP_XYZW) && (IND & SETUP_RGBA))
-   setup_tab[IND].check_tex_sizes = TAG(check_tex_sizes);
-   setup_tab[IND].interp = TAG(interp);
-
-   setup_tab[IND].vertex_format = 0;
-   if (IND & SETUP_PTEX) {
-      setup_tab[IND].vertex_format |= GR_STWHINT_W_DIFF_TMU0;
-   }
-
-#if (IND & SETUP_TMU1)
-   setup_tab[IND].vertex_format |= GR_STWHINT_ST_DIFF_TMU1;
-   if (IND & SETUP_PTEX) {
-      setup_tab[IND].vertex_format |= GR_STWHINT_W_DIFF_TMU1;
-   }
-#endif
-
-#endif
-}
-
-
-#undef IND
-#undef TAG
-- 
cgit v1.2.3


From 40c6bb58be4bc2be3c4901fe8b945d2a12983af6 Mon Sep 17 00:00:00 2001
From: Kristian Høgsberg <krh@bitplanet.net>
Date: Thu, 25 Feb 2010 16:10:09 -0500
Subject: Drop classic mesa svga driver

---
 Makefile                           |   2 -
 include/GL/svgamesa.h              |  97 -------
 src/mesa/drivers/svga/svgamesa.c   | 516 -------------------------------------
 src/mesa/drivers/svga/svgamesa15.c | 220 ----------------
 src/mesa/drivers/svga/svgamesa15.h |  42 ---
 src/mesa/drivers/svga/svgamesa16.c | 218 ----------------
 src/mesa/drivers/svga/svgamesa16.h |  43 ----
 src/mesa/drivers/svga/svgamesa24.c | 242 -----------------
 src/mesa/drivers/svga/svgamesa24.h |  43 ----
 src/mesa/drivers/svga/svgamesa32.c | 223 ----------------
 src/mesa/drivers/svga/svgamesa32.h |  43 ----
 src/mesa/drivers/svga/svgamesa8.c  | 196 --------------
 src/mesa/drivers/svga/svgamesa8.h  |  43 ----
 src/mesa/drivers/svga/svgapix.h    |  70 -----
 14 files changed, 1998 deletions(-)
 delete mode 100644 include/GL/svgamesa.h
 delete mode 100644 src/mesa/drivers/svga/svgamesa.c
 delete mode 100644 src/mesa/drivers/svga/svgamesa15.c
 delete mode 100644 src/mesa/drivers/svga/svgamesa15.h
 delete mode 100644 src/mesa/drivers/svga/svgamesa16.c
 delete mode 100644 src/mesa/drivers/svga/svgamesa16.h
 delete mode 100644 src/mesa/drivers/svga/svgamesa24.c
 delete mode 100644 src/mesa/drivers/svga/svgamesa24.h
 delete mode 100644 src/mesa/drivers/svga/svgamesa32.c
 delete mode 100644 src/mesa/drivers/svga/svgamesa32.h
 delete mode 100644 src/mesa/drivers/svga/svgamesa8.c
 delete mode 100644 src/mesa/drivers/svga/svgamesa8.h
 delete mode 100644 src/mesa/drivers/svga/svgapix.h

(limited to 'src/mesa')

diff --git a/Makefile b/Makefile
index f2ec3bf20f..0e70ef5d97 100644
--- a/Makefile
+++ b/Makefile
@@ -221,7 +221,6 @@ MAIN_FILES = \
 	$(DIRECTORY)/include/GL/mesa_wgl.h				\
 	$(DIRECTORY)/include/GL/mglmesa.h				\
 	$(DIRECTORY)/include/GL/osmesa.h				\
-	$(DIRECTORY)/include/GL/svgamesa.h				\
 	$(DIRECTORY)/include/GL/vms_x_fix.h				\
 	$(DIRECTORY)/include/GL/wglext.h				\
 	$(DIRECTORY)/include/GL/wmesa.h					\
@@ -274,7 +273,6 @@ MAIN_FILES = \
 	$(DIRECTORY)/src/mesa/drivers/osmesa/descrip.mms		\
 	$(DIRECTORY)/src/mesa/drivers/osmesa/osmesa.def			\
 	$(DIRECTORY)/src/mesa/drivers/osmesa/*.[ch]			\
-	$(DIRECTORY)/src/mesa/drivers/svga/*.[ch]			\
 	$(DIRECTORY)/src/mesa/drivers/windows/*/*.[ch]			\
 	$(DIRECTORY)/src/mesa/drivers/windows/*/*.def			\
 	$(DIRECTORY)/src/mesa/drivers/x11/Makefile			\
diff --git a/include/GL/svgamesa.h b/include/GL/svgamesa.h
deleted file mode 100644
index 67c0e4c5c6..0000000000
--- a/include/GL/svgamesa.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  4.0
- * Copyright (C) 1995-2001  Brian Paul
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-
-/*
- * SVGA/Mesa interface for Linux.
- */
-
-
-/*
- * Intro to using the VGA/Mesa interface
- *
- * 1. #include the <vga.h> file
- * 2. Call vga_init() to initialize the SVGA library.
- * 3. Call vga_setmode() to specify the screen size and color depth.
- * 4. Call SVGAMesaCreateContext() to setup a Mesa context.  If using 8-bit
- *    color Mesa assumes color index mode, if using 16-bit or deeper color
- *    Mesa assumes RGB mode.
- * 5. Call SVGAMesaMakeCurrent() to activate the Mesa context.
- * 6. You can now use the Mesa API functions.
- * 7. Before exiting, call SVGAMesaDestroyContext() then vga_setmode(TEXT)
- *    to restore the original text screen.
- *
- * Notes
- * 1. You must run your executable as root (or use the set UID-bit) because
- *    the SVGA library requires it.
- * 2. The SVGA driver is not fully implemented yet.  See svgamesa.c for what
- *    has to be done yet.
- */
-
-
-#ifndef SVGAMESA_H
-#define SVGAMESA_H
-
-
-#define SVGAMESA_MAJOR_VERSION 4
-#define SVGAMESA_MINOR_VERSION 0
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-#include "GL/gl.h"
-
-
-
-/*
- * This is the SVGAMesa context 'handle':
- */
-typedef struct svgamesa_context *SVGAMesaContext;
-
-
-
-/*
- * doubleBuffer flag new in version 2.4
- */
-extern int SVGAMesaInit( int GraphMode );
-
-extern int SVGAMesaClose( void );
-
-extern SVGAMesaContext SVGAMesaCreateContext( GLboolean doubleBuffer );
-
-extern void SVGAMesaDestroyContext( SVGAMesaContext ctx );
-
-extern void SVGAMesaMakeCurrent( SVGAMesaContext ctx );
-
-extern void SVGAMesaSwapBuffers( void );
-
-extern void SVGAMesaSetCI(int ndx, GLubyte red, GLubyte green, GLubyte blue);
-
-extern SVGAMesaContext SVGAMesaGetCurrentContext( void );
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif
diff --git a/src/mesa/drivers/svga/svgamesa.c b/src/mesa/drivers/svga/svgamesa.c
deleted file mode 100644
index 5afa8e188b..0000000000
--- a/src/mesa/drivers/svga/svgamesa.c
+++ /dev/null
@@ -1,516 +0,0 @@
-
-/*
- * Mesa 3-D graphics library
- * Version:  5.0
- * Copyright (C) 1995-2002  Brian Paul
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-
-/*
- * SVGA driver for Mesa.
- * Original author:  Brian Paul
- * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2)
- */
-
-
-#ifdef HAVE_CONFIG_H
-#include "conf.h"
-#endif
-
-#ifdef SVGA
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <vga.h>
-#include "GL/svgamesa.h"
-#include "main/buffers.h"
-#include "main/context.h"
-#include "main/extensions.h"
-#include "main/imports.h"
-#include "main/matrix.h"
-#include "main/mtypes.h"
-#include "swrast/swrast.h"
-#include "svgapix.h"
-#include "svgamesa8.h"
-#include "svgamesa15.h"
-#include "svgamesa16.h"
-#include "svgamesa24.h"
-#include "svgamesa32.h"
-
-struct svga_buffer SVGABuffer;
-vga_modeinfo * SVGAInfo;
-SVGAMesaContext SVGAMesa;    /* the current context */
-
-#ifdef SVGA_DEBUG
-
-#include <sys/types.h>
-#include <signal.h>
-
-FILE * logfile;
-char cbuf[1024]={0};
-
-void SVGAlog(char * what)
-{
- logfile=fopen("svgamesa.log","a");
- if (!logfile) return;
- fprintf(logfile,"%s\n",what);
- fclose(logfile);
-}
-#endif
-
-/**********************************************************************/
-/*****                       Init stuff...                        *****/
-/**********************************************************************/
-
-int SVGAMesaInit( int GraphMode )
-{
-   vga_init();
-   if (!vga_hasmode(GraphMode))
-   {
-    fprintf(stderr,"GraphMode %d unavailable...",GraphMode);
-#ifdef SVGA_DEBUG
-    SVGAlog("SVGAMesaInit: invalid GraphMode (doesn't exist)");
-#endif
-    return(1);
-   }
-   SVGAInfo=vga_getmodeinfo(GraphMode);
-   if (SVGAInfo->flags & IS_MODEX)
-   {
-    fprintf(stderr,"ModeX not implemented...");
-#ifdef SVGA_DEBUG
-    SVGAlog("SVGAMesaInit: invalid GraphMode (ModeX)");
-#endif
-    return(2);
-   }
-   if (!SVGAInfo->bytesperpixel)
-   {
-    fprintf(stderr,"1 / 4 bit color not implemented...");
-#ifdef SVGA_DEBUG
-    SVGAlog("SVGAMesaInit: invalid GraphMode (1 or 4 bit)");
-#endif
-    return(3);
-   }
-   switch (SVGAInfo->colors) {
-    case   256: SVGABuffer.Depth = 8;  break;
-    case 32768: SVGABuffer.Depth = 15; break;
-    case 65536: SVGABuffer.Depth = 16; break;
-    default: SVGABuffer.Depth = SVGAInfo->bytesperpixel<<3; break;
-   }
-   SVGABuffer.BufferSize=SVGAInfo->linewidth*SVGAInfo->height;
-#ifdef SVGA_DEBUG
-   sprintf(cbuf,"SVGAMesaInit: double buffer info.\n" \
-                 "              depth  : %d\n" \
-                 "              mode   : %d\n" \
-		 "              width  : %d\n" \
-		 "              height : %d\n" \
-		 "              bufsize: %d\n", \
-		 SVGABuffer.Depth,GraphMode,SVGAInfo->linewidth, \
-		 SVGAInfo->height,SVGABuffer.BufferSize);
-   SVGAlog(cbuf);
-#endif
-   SVGABuffer.FrontBuffer=(void*)malloc(SVGABuffer.BufferSize + 4);
-   if (!SVGABuffer.FrontBuffer) {
-    {
-     fprintf(stderr,"Not enough RAM for FRONT_LEFT_BUFFER...");
-#ifdef SVGA_DEBUG
-     SVGAlog("SVGAMesaInit: Not enough RAM (front buffer)");
-#endif
-     return(4);
-    }
-   }
-#ifdef SVGA_DEBUG
-   sprintf(cbuf,"SVGAMesaInit: FrontBuffer - %p",SVGABuffer.FrontBuffer);
-   SVGAlog(cbuf);
-#endif
-   SVGABuffer.BackBuffer=(void*)malloc(SVGABuffer.BufferSize + 4);
-   if (!SVGABuffer.BackBuffer) {
-    {
-     free(SVGABuffer.FrontBuffer);
-     fprintf(stderr,"Not enough RAM for BACK_LEFT_BUFFER...");
-#ifdef SVGA_DEBUG
-     SVGAlog("SVGAMesaInit: Not enough RAM (back buffer)");
-#endif
-     return(5);
-    }
-   }
-#ifdef SVGA_DEBUG
-   sprintf(cbuf,"SVGAMesaInit: BackBuffer - %p",SVGABuffer.BackBuffer);
-   SVGAlog(cbuf);
-#endif
-
-   vga_setmode(GraphMode);
-   SVGABuffer.VideoRam=vga_getgraphmem();
-#ifdef SVGA_DEBUG
-   sprintf(cbuf,"SVGAMesaInit: VRAM - %p",SVGABuffer.VideoRam);
-   SVGAlog(cbuf);
-   sprintf(cbuf,"SVGAMesaInit: done. (Mode %d)",GraphMode);
-   SVGAlog(cbuf);
-#endif
-
-   SVGABuffer.DrawBuffer = SVGABuffer.BackBuffer;
-   SVGABuffer.ReadBuffer = SVGABuffer.BackBuffer;
-
-   return 0;
-}
-
-int SVGAMesaClose( void )
-{
-   vga_setmode(TEXT);
-   free(SVGABuffer.FrontBuffer);
-   free(SVGABuffer.BackBuffer);
-   return 0;
-}
-
-void SVGAMesaSetCI(int ndx, GLubyte red, GLubyte green, GLubyte blue)
-{
-   if (ndx<256)
-      vga_setpalette(ndx, red>>2, green>>2, blue>>2);
-}
-
-/**********************************************************************/
-/*****                 Miscellaneous functions                    *****/
-/**********************************************************************/
-
-static void copy_buffer( const GLubyte * buffer) {
- int size = SVGABuffer.BufferSize, page = 0;
-
-#ifdef SVGA_DEBUG
-   sprintf(cbuf,"copy_buffer: copy %p to %p",buffer,SVGABuffer.VideoRam);
-   SVGAlog(cbuf);
-#endif
-
- while(size>0) {
- vga_setpage(page++);
-  if (size>>16) {
-   memcpy(SVGABuffer.VideoRam,buffer,0x10000);
-   buffer+=0x10000;
-  }else{
-   memcpy(SVGABuffer.VideoRam,buffer,size & 0xffff);
-  }
-  size-=0xffff;
- }
-}
-
-static void get_buffer_size( GLframebuffer *buffer, GLuint *width, GLuint *height )
-{
-   *width = SVGAMesa->width = vga_getxdim();
-   *height = SVGAMesa->height = vga_getydim();
-}
-
-/**
- * We only implement this function as a mechanism to check if the
- * framebuffer size has changed (and update corresponding state).
- */
-static void viewport(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h)
-{
-   GLuint newWidth, newHeight;
-   GLframebuffer *buffer = ctx->WinSysDrawBuffer;
-   get_buffer_size( buffer, &newWidth, &newHeight );
-   if (buffer->Width != newWidth || buffer->Height != newHeight) {
-      _mesa_resize_framebuffer(ctx, buffer, newWidth, newHeight );
-   }
-}
-
-static void set_buffer( GLcontext *ctx, GLframebuffer *colorBuffer,
-                        GLenum buffer )
-{
-   /* We can ignore colorBuffer since we don't support a MakeCurrentRead()
-    * function.
-    */
-   (void) colorBuffer;
-
-   if (buffer == GL_FRONT_LEFT) {
-      SVGABuffer.ReadBuffer = SVGABuffer.FrontBuffer;
-      SVGABuffer.DrawBuffer = SVGABuffer.FrontBuffer;
-#if 0
-      void * tmpptr;
-      /*    vga_waitretrace(); */
-      copy_buffer(SVGABuffer.FrontBuffer);
-      tmpptr=SVGABuffer.BackBuffer;
-      SVGABuffer.BackBuffer=SVGABuffer.FrontBuffer;
-      SVGABuffer.FrontBuffer=tmpptr;
-#endif
-   }
-   else if (buffer == GL_BACK_LEFT) {
-      SVGABuffer.ReadBuffer = SVGABuffer.BackBuffer;
-      SVGABuffer.DrawBuffer = SVGABuffer.BackBuffer;
-#if 0
-      /*    vga_waitretrace(); */
-      copy_buffer(SVGABuffer.BackBuffer);
-#endif
-   }
-}
-
-/**********************************************************************/
-/*****                                                            *****/
-/**********************************************************************/
-
-static void svgamesa_update_state( GLcontext *ctx, GLuint new_state )
-{
-   struct swrast_device_driver *swdd = _swrast_GetDeviceDriverReference( ctx );
-
-   /* Initialize all the pointers in the DD struct.  Do this whenever */
-   /* a new context is made current or we change buffers via set_buffer! */
-
-   ctx->Driver.UpdateState = svgamesa_update_state;
-
-   ctx->Driver.GetBufferSize = get_buffer_size;
-   ctx->Driver.Viewport = viewport;
-
-   /* Fill in the swrast driver interface:
-    */
-   swdd->SetBuffer = set_buffer;
-
-   switch (SVGABuffer.Depth) {
-    case  8: ctx->Driver.ClearIndex = __clear_index8;
-             ctx->Driver.Clear 	    = __clear8;
-
-             swdd->ReadCI32Span         = __read_ci32_span8;
-             swdd->ReadCI32Pixels       = __read_ci32_pixels8;
-             swdd->WriteCI8Span         = __write_ci8_span8;
-             swdd->WriteCI32Span        = __write_ci32_span8;
-             swdd->WriteCI32Pixels      = __write_ci32_pixels8;
-             swdd->WriteMonoCISpan      = __write_mono_ci_span8;
-             swdd->WriteMonoCIPixels    = __write_mono_ci_pixels8;
-#ifdef SVGA_DEBUG
-    SVGAlog("SVGAUpdateState: 8 bit mode.");
-#endif
-
-	     break;
-    case 15: ctx->Driver.ClearColor = __clear_color15;
-             ctx->Driver.Clear 	    = __clear15;
-
-             swdd->ReadRGBASpan         = __read_rgba_span15;
-             swdd->ReadRGBAPixels       = __read_rgba_pixels15;
-             swdd->WriteRGBASpan        = __write_rgba_span15;
-             swdd->WriteRGBAPixels      = __write_rgba_pixels15;
-             swdd->WriteMonoRGBASpan    = __write_mono_rgba_span15;
-             swdd->WriteMonoRGBAPixels  = __write_mono_rgba_pixels15;
-#ifdef SVGA_DEBUG
-    SVGAlog("SVGAUpdateState: 15 bit mode.");
-#endif
-	     break;
-    case 16: ctx->Driver.ClearColor = __clear_color16;
-             ctx->Driver.Clear 	    = __clear16;
-
-             swdd->ReadRGBASpan         = __read_rgba_span16;
-             swdd->ReadRGBAPixels       = __read_rgba_pixels16;
-             swdd->WriteRGBASpan        = __write_rgba_span16;
-             swdd->WriteRGBAPixels      = __write_rgba_pixels16;
-             swdd->WriteMonoRGBASpan    = __write_mono_rgba_span16;
-             swdd->WriteMonoRGBAPixels  = __write_mono_rgba_pixels16;
-	     break;
-#ifdef SVGA_DEBUG
-    SVGAlog("SVGAUpdateState: 16 bit mode.");
-#endif
-    case 24: ctx->Driver.ClearColor = __clear_color24;
-             ctx->Driver.Clear 	    = __clear24;
-
-             swdd->ReadRGBASpan         = __read_rgba_span24;
-             swdd->ReadRGBAPixels       = __read_rgba_pixels24;
-             swdd->WriteRGBASpan        = __write_rgba_span24;
-             swdd->WriteRGBAPixels      = __write_rgba_pixels24;
-             swdd->WriteMonoRGBASpan    = __write_mono_rgba_span24;
-             swdd->WriteMonoRGBAPixels  = __write_mono_rgba_pixels24;
-	     break;
-#ifdef SVGA_DEBUG
-    SVGAlog("SVGAUpdateState: 32 bit mode.");
-#endif
-    case 32: ctx->Driver.ClearColor = __clear_color32;
-             ctx->Driver.Clear 	    = __clear32;
-
-             swdd->ReadRGBASpan         = __read_rgba_span32;
-             swdd->ReadRGBAPixels       = __read_rgba_pixels32;
-             swdd->WriteRGBASpan        = __write_rgba_span32;
-             swdd->WriteRGBAPixels      = __write_rgba_pixels32;
-             swdd->WriteMonoRGBASpan    = __write_mono_rgba_span32;
-             swdd->WriteMonoRGBAPixels  = __write_mono_rgba_pixels32;
-   }	
-}
-
-/*
- * Create a new VGA/Mesa context and return a handle to it.
- */
-SVGAMesaContext SVGAMesaCreateContext( GLboolean doubleBuffer )
-{
-   SVGAMesaContext ctx;
-#ifndef DEV
-   GLboolean rgb_flag;
-   GLfloat redscale, greenscale, bluescale, alphascale;
-   GLint index_bits;
-   GLint redbits, greenbits, bluebits, alphabits;
-
-   /* determine if we're in RGB or color index mode */
-   if ((SVGABuffer.Depth==32) || (SVGABuffer.Depth==24)) {
-      rgb_flag = GL_TRUE;
-      redscale = greenscale = bluescale = alphascale = 255.0;
-      redbits = greenbits = bluebits = 8;
-      alphabits = 0;
-      index_bits = 0;
-   }
-   else if (SVGABuffer.Depth==8) {
-      rgb_flag = GL_FALSE;
-      redscale = greenscale = bluescale = alphascale = 0.0;
-      redbits = greenbits = bluebits = alphabits = 0;
-      index_bits = 8;
-   }
-   else if (SVGABuffer.Depth==15) {
-      rgb_flag = GL_TRUE;
-      redscale = greenscale = bluescale = alphascale = 31.0;
-      redbits = greenbits = bluebits = 5;
-      alphabits = 0;
-      index_bits = 0;
-   }
-   else if (SVGABuffer.Depth==16) {
-      rgb_flag = GL_TRUE;
-      redscale = bluescale = alphascale = 31.0;
-      greenscale = 63.0;
-      redbits = bluebits = 5;
-      greenbits = 6;
-      alphabits = 0;
-      index_bits = 0;
-   }
-
-   ctx = (SVGAMesaContext) calloc( 1, sizeof(struct svgamesa_context) );
-   if (!ctx) {
-      return NULL;
-   }
-
-   ctx->gl_vis = _mesa_create_visual( rgb_flag,
-                                      doubleBuffer,
-                                      GL_FALSE,  /* stereo */
-                                      redbits, greenbits,
-                                      bluebits, alphabits,
-                                      index_bits,
-                                      16,   /* depth_size */
-                                      8,    /* stencil_size */
-                                      16, 16, 16, 16,   /* accum_size */
-                                      1     /* samples */
-                                      );
-
-   ctx->gl_ctx = _mesa_create_context( ctx->gl_vis,
-                                       NULL,  /* share list context */
-                                       (void *) ctx, GL_FALSE );
-
-   _mesa_enable_sw_extensions(ctx->gl_ctx);
-   _mesa_enable_1_3_extensions(ctx->gl_ctx);
-
-   _mesa_init_driver_functions(&ctx->Driver);
-
-   ctx->gl_buffer = _mesa_create_framebuffer( ctx->gl_vis,
-                                              ctx->gl_vis->depthBits > 0,
-                                              ctx->gl_vis->stencilBits > 0,
-                                              ctx->gl_vis->accumRedBits > 0,
-                                              ctx->gl_vis->alphaBits > 0 );
-
-   ctx->width = ctx->height = 0;  /* temporary until first "make-current" */
-#endif
-   return ctx;
-}
-
-/*
- * Destroy the given VGA/Mesa context.
- */
-void SVGAMesaDestroyContext( SVGAMesaContext ctx )
-{
-#ifndef DEV
-   if (ctx) {
-      _mesa_destroy_visual( ctx->gl_vis );
-      _mesa_destroy_context( ctx->gl_ctx );
-      free( ctx );
-      if (ctx==SVGAMesa) {
-         SVGAMesa = NULL;
-      }
-   }
-#endif
-}
-
-/*
- * Make the specified VGA/Mesa context the current one.
- */
-void SVGAMesaMakeCurrent( SVGAMesaContext ctx )
-{
-#ifndef DEV
-   SVGAMesa = ctx;
-   svgamesa_update_state( ctx->gl_ctx, ~0 );
-   _mesa_make_current( ctx->gl_ctx, ctx->gl_buffer );
-
-   if (ctx->width==0 || ctx->height==0) {
-      ctx->width = vga_getxdim();
-      ctx->height = vga_getydim();
-   }
-#endif
-}
-
-/*
- * Return a handle to the current VGA/Mesa context.
- */
-SVGAMesaContext SVGAMesaGetCurrentContext( void )
-{
-   return SVGAMesa;
-}
-
-/*
- * Swap front/back buffers for current context if double buffered.
- */
-void SVGAMesaSwapBuffers( void )
-{
-#if 000
-   void * tmpptr;
-#endif
-
-   /* vga_waitretrace(); */
-   copy_buffer(SVGABuffer.BackBuffer);
-
-#ifndef DEV
-   _mesa_notifySwapBuffers( SVGAMesa->gl_ctx );
-   if (SVGAMesa->gl_vis->doubleBufferMode)
-#endif /* DEV */
-   {
-#ifdef SVGA_DEBUG
-      sprintf(cbuf,"SVGAMesaSwapBuffers : Swapping...");
-      SVGAlog(cbuf);
-#endif /* SVGA_DEBUG */
-#if 000
-      tmpptr=SVGABuffer.BackBuffer;
-      SVGABuffer.BackBuffer=SVGABuffer.FrontBuffer;
-      SVGABuffer.FrontBuffer=tmpptr;
-#endif
-#ifdef SVGA_DEBUG
-      sprintf(cbuf,"SVGAMesaSwapBuffers : WriteBuffer : %p\n"
-              "                      Readbuffer  : %p", \
-              SVGABuffer.BackBuffer, SVGABuffer.FrontBuffer );
-      SVGAlog(cbuf);
-#endif /* SVGA_DEBUG */
-   }
-}
-
-#else /*SVGA*/
-
-/*
- * Need this to provide at least one external definition when SVGA is
- * not defined on the compiler command line.
- */
-extern int gl_svga_dummy_function(void);
-int gl_svga_dummy_function(void)
-{
-   return 0;
-}
-
-#endif  /*SVGA*/
-
diff --git a/src/mesa/drivers/svga/svgamesa15.c b/src/mesa/drivers/svga/svgamesa15.c
deleted file mode 100644
index 934aaa33fb..0000000000
--- a/src/mesa/drivers/svga/svgamesa15.c
+++ /dev/null
@@ -1,220 +0,0 @@
-
-/*
- * Mesa 3-D graphics library
- * Version:  5.0
- * Copyright (C) 1995-2002  Brian Paul
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-
-/*
- * SVGA driver for Mesa.
- * Original author:  Brian Paul
- * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2)
- */
-
-#ifdef HAVE_CONFIG_H
-#include "conf.h"
-#endif
-
-#ifdef SVGA
-
-#include "svgapix.h"
-#include "svgamesa15.h"
-#include "swrast/swrast.h"
-
-
-static void __svga_drawpixel15(int x, int y, unsigned long c)
-{
-    unsigned long offset;
-    GLshort *shortBuffer=(void *)SVGABuffer.DrawBuffer;
-    y = SVGAInfo->height-y-1;
-    offset = y * SVGAInfo->width + x;
-    shortBuffer[offset]=c;
-}
-
-static unsigned long __svga_getpixel15(int x, int y)
-{
-    unsigned long offset;
-    GLshort *shortBuffer=(void *)SVGABuffer.ReadBuffer;
-    y = SVGAInfo->height-y-1;
-    offset = y * SVGAInfo->width + x;
-    return shortBuffer[offset];
-}
-
-void __clear_color15( GLcontext *ctx, const GLfloat color[4] )
-{
-   GLubyte col[3];
-   CLAMPED_FLOAT_TO_UBYTE(col[0], color[0]);
-   CLAMPED_FLOAT_TO_UBYTE(col[1], color[1]);
-   CLAMPED_FLOAT_TO_UBYTE(col[2], color[2]);
-   SVGAMesa->clear_hicolor=(col[0]>>3)<<10 | (col[1]>>3)<<5 | (col[2]>>3);  
-/*   SVGAMesa->clear_hicolor=(red)<<10 | (green)<<5 | (blue);*/
-}   
-
-void __clear15( GLcontext *ctx, GLbitfield mask )
-{
-   int i, j;
-   int x = ctx->DrawBuffer->_Xmin;
-   int y = ctx->DrawBuffer->_Ymin;
-   int width = ctx->DrawBuffer->_Xmax - x;
-   int height = ctx->DrawBuffer->_Ymax - y;
-   GLboolean all = (width == ctx->DrawBuffer->Width && height == ctx->DrawBuffer->height)
-
-   if (mask & DD_FRONT_LEFT_BIT) {
-      GLshort *shortBuffer=(void *)SVGABuffer.FrontBuffer;
-      if (all) {
-         for (i=0;i<SVGABuffer.BufferSize / 2;i++)
-            shortBuffer[i]=SVGAMesa->clear_hicolor;
-      }
-      else {
-         GLubyte *tmp = SVGABuffer.DrawBuffer;
-         SVGABuffer.DrawBuffer = SVGABuffer.FrontBuffer;
-         for (i=x;i<width;i++)
-            for (j=y;j<height;j++)
-               __svga_drawpixel15(i,j,SVGAMesa->clear_hicolor);
-         SVGABuffer.DrawBuffer = tmp;
-      }
-      mask &= ~DD_FRONT_LEFT_BIT;
-   }
-   if (mask & DD_BACK_LEFT_BIT) {
-      GLshort *shortBuffer=(void *)SVGABuffer.BackBuffer;
-      if (all) {
-         for (i=0;i<SVGABuffer.BufferSize / 2;i++)
-            shortBuffer[i]=SVGAMesa->clear_hicolor;
-      }
-      else {
-         GLubyte *tmp = SVGABuffer.DrawBuffer;
-         SVGABuffer.DrawBuffer = SVGABuffer.BackBuffer;
-         for (i=x;i<width;i++)
-            for (j=y;j<height;j++)
-               __svga_drawpixel15(i,j,SVGAMesa->clear_hicolor);
-         SVGABuffer.DrawBuffer = tmp;
-      }
-      mask &= ~DD_BACK_LEFT_BIT;
-   }
-
-   if (mask)
-      _swrast_Clear( ctx, mask );
-}
-
-void __write_rgba_span15( const GLcontext *ctx, GLuint n, GLint x, GLint y,
-                          const GLubyte rgba[][4], const GLubyte mask[] )
-{
-   int i;
-   if (mask) {
-      /* draw some pixels */
-      for (i=0; i<n; i++, x++) {
-         if (mask[i]) {
-         __svga_drawpixel15( x, y, (rgba[i][RCOMP]>>3)<<10 | \
-			           (rgba[i][GCOMP]>>3)<<5 |  \
-			           (rgba[i][BCOMP]>>3));
-         }
-      }
-   }
-   else {
-      /* draw all pixels */
-      for (i=0; i<n; i++, x++) {
-         __svga_drawpixel15( x, y, (rgba[i][RCOMP]>>3)<<10 | \
-			           (rgba[i][GCOMP]>>3)<<5  | \
-			           (rgba[i][BCOMP]>>3));
-      }
-   }
-}
-
-void __write_mono_rgba_span15( const GLcontext *ctx,
-                               GLuint n, GLint x, GLint y,
-                               const GLchan color[4], const GLubyte mask[])
-{
-   GLushort hicolor = (color[RCOMP] >> 3) << 10 |
-                      (color[GCOMP] >> 3) << 5 |
-                      (color[BCOMP] >> 3); 
-   int i;
-   for (i=0; i<n; i++, x++) {
-      if (mask[i]) {
-         __svga_drawpixel15( x, y, hicolor);
-      }
-   }
-}
-
-void __read_rgba_span15( const GLcontext *ctx, GLuint n, GLint x, GLint y,
-                         GLubyte rgba[][4] )
-{
-   int i,pix;
-   for (i=0; i<n; i++, x++) {
-    pix = __svga_getpixel15( x, y);
-    rgba[i][RCOMP] = ((pix>>10)<<3) & 0xff;
-    rgba[i][GCOMP] = ((pix>> 5)<<3) & 0xff;
-    rgba[i][BCOMP] = ((pix    )<<3) & 0xff;
-   }
-}
-
-void __write_rgba_pixels15( const GLcontext *ctx,
-                            GLuint n, const GLint x[], const GLint y[],
-                            const GLubyte rgba[][4], const GLubyte mask[] )
-{
-   int i;
-   for (i=0; i<n; i++) {
-      if (mask[i]) {
-         __svga_drawpixel15( x[i], y[i], (rgba[i][RCOMP]>>3)<<10 | \
-			                 (rgba[i][GCOMP]>>3)<<5  | \
-			                 (rgba[i][BCOMP]>>3));
-      }
-   }
-}
-
-
-void __write_mono_rgba_pixels15( const GLcontext *ctx,
-                                 GLuint n,
-                                 const GLint x[], const GLint y[],
-                                 const GLchan color[4], const GLubyte mask[] )
-{
-   GLushort hicolor = (color[RCOMP] >> 3) << 10 |
-                      (color[GCOMP] >> 3) << 5 |
-                      (color[BCOMP] >> 3); 
-   int i;
-   /* use current rgb color */
-   for (i=0; i<n; i++) {
-      if (mask[i]) {
-         __svga_drawpixel15( x[i], y[i], hicolor );
-      }
-   }
-}
-
-void __read_rgba_pixels15( const GLcontext *ctx,
-                           GLuint n, const GLint x[], const GLint y[],
-                           GLubyte rgba[][4], const GLubyte mask[] )
-{
-   int i,pix;
-   for (i=0; i<n; i++,x++) {
-    pix = __svga_getpixel15( x[i], y[i] );
-    rgba[i][RCOMP] = ((pix>>10)<<3) & 0xff;
-    rgba[i][GCOMP] = ((pix>> 5)<<3) & 0xff;
-    rgba[i][BCOMP] = ((pix    )<<3) & 0xff;
-   }
-}
-
-#else
-
-
-/* silence compiler warning */
-extern void _mesa_svga15_dummy_function(void);
-void _mesa_svga15_dummy_function(void)
-{
-}
-
-
-#endif
diff --git a/src/mesa/drivers/svga/svgamesa15.h b/src/mesa/drivers/svga/svgamesa15.h
deleted file mode 100644
index d453fb8d35..0000000000
--- a/src/mesa/drivers/svga/svgamesa15.h
+++ /dev/null
@@ -1,42 +0,0 @@
-
-/*
- * Mesa 3-D graphics library
- * Version:  5.0
- * Copyright (C) 1995-2002  Brian Paul
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-
-/*
- * SVGA driver for Mesa.
- * Original author:  Brian Paul
- * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2)
- */
-
-
-#ifndef SVGA_MESA_15_H
-#define SVGA_MESA_15_H
-
-extern void __clear_color15( GLcontext *ctx, const GLfloat color[4] );
-extern void __clear15( GLcontext *ctx, GLbitfield mask, GLboolean all, GLint x, GLint y, GLint width, GLint height );
-extern void __write_rgba_span15( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLubyte rgba[][4], const GLubyte mask[] );
-extern void __write_mono_rgba_span15( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLchan color[4], const GLubyte mask[]);
-extern void __read_rgba_span15( const GLcontext *ctx, GLuint n, GLint x, GLint y, GLubyte rgba[][4] );
-extern void __write_rgba_pixels15( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte rgba[][4], const GLubyte mask[] );
-extern void __write_mono_rgba_pixels15( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLchan color[4], const GLubyte mask[] );
-extern void __read_rgba_pixels15( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], GLubyte rgba[][4], const GLubyte mask[] );
-
-#endif /* SVGA_MESA_15_H */
diff --git a/src/mesa/drivers/svga/svgamesa16.c b/src/mesa/drivers/svga/svgamesa16.c
deleted file mode 100644
index 9fc8c786e8..0000000000
--- a/src/mesa/drivers/svga/svgamesa16.c
+++ /dev/null
@@ -1,218 +0,0 @@
-
-/*
- * Mesa 3-D graphics library
- * Version:  5.0
- * Copyright (C) 1995-2002  Brian Paul
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-
-/*
- * SVGA driver for Mesa.
- * Original author:  Brian Paul
- * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2)
- */
-
-#ifdef HAVE_CONFIG_H
-#include "conf.h"
-#endif
-
-#ifdef SVGA
-
-#include "svgapix.h"
-#include "svgamesa16.h"
-#include "swrast/swrast.h"
-
-
-static void __svga_drawpixel16(int x, int y, unsigned long c)
-{
-    unsigned long offset;
-    GLshort *shortBuffer=(void *)SVGABuffer.DrawBuffer;
-    y = SVGAInfo->height-y-1;
-    offset = y * SVGAInfo->width + x;
-    shortBuffer[offset]=c;
-}
-
-static unsigned long __svga_getpixel16(int x, int y)
-{
-    unsigned long offset;
-
-    GLshort *shortBuffer=(void *)SVGABuffer.ReadBuffer;
-    y = SVGAInfo->height-y-1;
-    offset = y * SVGAInfo->width + x;
-    return shortBuffer[offset];
-}
-
-void __clear_color16( GLcontext *ctx, const GLfloat color[4] )
-{
-   GLubyte col[3];
-   CLAMPED_FLOAT_TO_UBYTE(col[0], color[0]);
-   CLAMPED_FLOAT_TO_UBYTE(col[1], color[1]);
-   CLAMPED_FLOAT_TO_UBYTE(col[2], color[2]);
-   SVGAMesa->clear_hicolor = (col[0] >> 3) << 11 |
-                              (col[1] >> 2) << 5 |
-                              (col[2] >> 3); 
-/*    SVGAMesa->clear_hicolor=(red)<<11 | (green)<<5 | (blue); */
-}   
-
-void __clear16( GLcontext *ctx, GLbitfield mask )
-{
-   int i,j;
-   int x = ctx->DrawBuffer->_Xmin;
-   int y = ctx->DrawBuffer->_Ymin;
-   int width = ctx->DrawBuffer->_Xmax - x;
-   int height = ctx->DrawBuffer->_Ymax - y;
-   GLboolean all = (width == ctx->DrawBuffer->Width && height == ctx->DrawBuffer->height)
-
-   if (mask & DD_FRONT_LEFT_BIT) {
-      if (all) {
-         GLshort *shortBuffer=(void *)SVGABuffer.FrontBuffer;
-         for (i=0;i<SVGABuffer.BufferSize / 2;i++)
-            shortBuffer[i]=SVGAMesa->clear_hicolor;
-      }
-      else {
-         GLubyte *tmp = SVGABuffer.DrawBuffer;
-         SVGABuffer.DrawBuffer = SVGABuffer.FrontBuffer;
-         for (i=x;i<width;i++)    
-            for (j=y;j<height;j++)    
-               __svga_drawpixel16(i,j,SVGAMesa->clear_hicolor);
-         SVGABuffer.DrawBuffer = tmp;
-      }
-      mask &= ~DD_FRONT_LEFT_BIT;
-   }
-   if (mask & DD_BACK_LEFT_BIT) {
-      if (all) {
-         GLshort *shortBuffer=(void *)SVGABuffer.BackBuffer;
-         for (i=0;i<SVGABuffer.BufferSize / 2;i++)
-            shortBuffer[i]=SVGAMesa->clear_hicolor;
-      }
-      else {
-         GLubyte *tmp = SVGABuffer.DrawBuffer;
-         SVGABuffer.DrawBuffer = SVGABuffer.BackBuffer;
-         for (i=x;i<width;i++)    
-            for (j=y;j<height;j++)    
-               __svga_drawpixel16(i,j,SVGAMesa->clear_hicolor);
-         SVGABuffer.DrawBuffer = tmp;
-      }
-      mask &= ~DD_BACK_LEFT_BIT;
-   }
-
-   if (mask)
-      _swrast_Clear( ctx, mask );
-}
-
-void __write_rgba_span16( const GLcontext *ctx, GLuint n, GLint x, GLint y,
-                          const GLubyte rgba[][4], const GLubyte mask[] )
-{
-   int i;
-   if (mask) {
-      /* draw some pixels */
-      for (i=0; i<n; i++, x++) {
-         if (mask[i]) {
-         __svga_drawpixel16( x, y, (rgba[i][RCOMP]>>3)<<11 | \
-			           (rgba[i][GCOMP]>>2)<<5  | \
-			           (rgba[i][BCOMP]>>3));
-         }
-      }
-   }
-   else {
-      /* draw all pixels */
-      for (i=0; i<n; i++, x++) {
-         __svga_drawpixel16( x, y, (rgba[i][RCOMP]>>3)<<11 | \
-			           (rgba[i][GCOMP]>>2)<<5  | \
-			           (rgba[i][BCOMP]>>3));
-      }
-   }
-}
-
-void __write_mono_rgba_span16( const GLcontext *ctx,
-                               GLuint n, GLint x, GLint y,
-                               const GLchan color[4], const GLubyte mask[])
-{
-   GLushort hicolor=(color[RCOMP]>>3)<<11 | (color[GCOMP]>>2)<<5 | (color[BCOMP]>>3); 
-   int i;
-   for (i=0; i<n; i++, x++) {
-      if (mask[i]) {
-         __svga_drawpixel16( x, y, hicolor);
-      }
-   }
-}
-
-void __read_rgba_span16( const GLcontext *ctx, GLuint n, GLint x, GLint y,
-                         GLubyte rgba[][4] )
-{
-   int i,pix;
-   for (i=0; i<n; i++, x++) {
-    pix = __svga_getpixel16( x, y );
-    rgba[i][RCOMP] = ((pix>>11)<<3) & 0xff;
-    rgba[i][GCOMP] = ((pix>> 5)<<2) & 0xff;
-    rgba[i][BCOMP] = ((pix    )<<3) & 0xff;
-   }
-}
-
-void __write_rgba_pixels16( const GLcontext *ctx,
-                            GLuint n, const GLint x[], const GLint y[],
-                            const GLubyte rgba[][4], const GLubyte mask[] )
-{
-   int i;
-   for (i=0; i<n; i++) {
-      if (mask[i]) {
-         __svga_drawpixel16( x[i], y[i], (rgba[i][RCOMP]>>3)<<11 | \
-			                 (rgba[i][GCOMP]>>2)<<5  | \
-			                 (rgba[i][BCOMP]>>3));
-      }
-   }
-}
-
-
-void __write_mono_rgba_pixels16( const GLcontext *ctx,
-                                 GLuint n,
-                                 const GLint x[], const GLint y[],
-                                 const GLchan color[4], const GLubyte mask[] )
-{
-   GLushort hicolor=(color[RCOMP]>>3)<<11 | (color[GCOMP]>>2)<<5 | (color[BCOMP]>>3); 
-   int i;
-   for (i=0; i<n; i++) {
-      if (mask[i]) {
-         __svga_drawpixel16( x[i], y[i], hicolor );
-      }
-   }
-}
-
-void __read_rgba_pixels16( const GLcontext *ctx,
-                           GLuint n, const GLint x[], const GLint y[],
-                           GLubyte rgba[][4], const GLubyte mask[] )
-{
-   int i,pix;
-   for (i=0; i<n; i++,x++) {
-    pix = __svga_getpixel16( x[i], y[i] );
-    rgba[i][RCOMP] = ((pix>>11)<<3) & 0xff;
-    rgba[i][GCOMP] = ((pix>> 5)<<2) & 0xff;
-    rgba[i][BCOMP] = ((pix    )<<3) & 0xff;
-   }
-}
-
-#else
-
-
-/* silence compiler warning */
-extern void _mesa_svga16_dummy_function(void);
-void _mesa_svga16_dummy_function(void)
-{
-}
-
-
-#endif
diff --git a/src/mesa/drivers/svga/svgamesa16.h b/src/mesa/drivers/svga/svgamesa16.h
deleted file mode 100644
index b80cd3dd7e..0000000000
--- a/src/mesa/drivers/svga/svgamesa16.h
+++ /dev/null
@@ -1,43 +0,0 @@
-
-/*
- * Mesa 3-D graphics library
- * Version:  5.0
- * Copyright (C) 1995-2002  Brian Paul
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-
-/*
- * SVGA driver for Mesa.
- * Original author:  Brian Paul
- * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2)
- */
-
-
-#ifndef SVGA_MESA_16_H
-#define SVGA_MESA_16_H
-
-extern void __clear_color16( GLcontext *ctx, const GLfloat color[4] );
-extern void __clear16( GLcontext *ctx, GLbitfield mask, GLboolean all, GLint x, GLint y, GLint width, GLint height );
-extern void __write_rgba_span16( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLubyte rgba[][4], const GLubyte mask[] );
-extern void __write_mono_rgba_span16( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLchan color[4], const GLubyte mask[]);
-extern void __read_rgba_span16( const GLcontext *ctx, GLuint n, GLint x, GLint y, GLubyte rgba[][4] );
-extern void __write_rgba_pixels16( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte rgba[][4], const GLubyte mask[] );
-extern void __write_mono_rgba_pixels16( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLchan color[4], const GLubyte mask[] );
-extern void __read_rgba_pixels16( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], GLubyte rgba[][4], const GLubyte mask[] );
-
-#endif /* SVGA_MESA_16_H */
-
diff --git a/src/mesa/drivers/svga/svgamesa24.c b/src/mesa/drivers/svga/svgamesa24.c
deleted file mode 100644
index f2ec9c0364..0000000000
--- a/src/mesa/drivers/svga/svgamesa24.c
+++ /dev/null
@@ -1,242 +0,0 @@
-
-/*
- * Mesa 3-D graphics library
- * Version:  5.0
- * Copyright (C) 1995-2002  Brian Paul
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-
-/*
- * SVGA driver for Mesa.
- * Original author:  Brian Paul
- * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2)
- */
-
-#ifdef HAVE_CONFIG_H
-#include "conf.h"
-#endif
-
-#ifdef SVGA
-
-#include "svgapix.h"
-#include "svgamesa24.h"
-#include "swrast/swrast.h"
-
-
-#if 0
-/* this doesn't compile with GCC on RedHat 6.1 */
-static INLINE int RGB2BGR24(int c)
-{
-	asm("rorw  $8, %0\n"	 
-	    "rorl $16, %0\n"	 
-	    "rorw  $8, %0\n"	 
-	    "shrl  $8, %0\n"	 
-      : "=q"(c):"0"(c));
-    return c;
-}
-#else
-static unsigned long RGB2BGR24(unsigned long color)
-{
-   return (color & 0xff00)|(color>>16)|((color & 0xff)<<16);
-}
-#endif
-
-static void __svga_drawpixel24(int x, int y, GLubyte r, GLubyte g, GLubyte b)
-{
-    unsigned long offset;
-
-    _RGB *rgbBuffer=(void *)SVGABuffer.DrawBuffer;
-    y = SVGAInfo->height-y-1;
-    offset = y * SVGAInfo->width + x;
-
-    rgbBuffer[offset].r=r;
-    rgbBuffer[offset].g=g;
-    rgbBuffer[offset].b=b;
-}
-
-static unsigned long __svga_getpixel24(int x, int y)
-{
-    unsigned long offset;
-
-    _RGB *rgbBuffer=(void *)SVGABuffer.ReadBuffer;
-    y = SVGAInfo->height-y-1;
-    offset = y * SVGAInfo->width + x;
-    return rgbBuffer[offset].r<<16 | rgbBuffer[offset].g<<8 | rgbBuffer[offset].b;
-}
-
-void __clear_color24( GLcontext *ctx, const GLfloat color[4] )
-{
-   GLubyte col[3];
-   CLAMPED_FLOAT_TO_UBYTE(col[0], color[0]);
-   CLAMPED_FLOAT_TO_UBYTE(col[1], color[1]);
-   CLAMPED_FLOAT_TO_UBYTE(col[2], color[2]);
-   SVGAMesa->clear_red = col[0];
-   SVGAMesa->clear_green = col[1];
-   SVGAMesa->clear_blue = col[2];
-/*   SVGAMesa->clear_truecolor = red<<16 | green<<8 | blue; */
-}
-
-void __clear24( GLcontext *ctx, GLbitfield mask )
-{
-   int i,j;
-   int x = ctx->DrawBuffer->_Xmin;
-   int y = ctx->DrawBuffer->_Ymin;
-   int width = ctx->DrawBuffer->_Xmax - x;
-   int height = ctx->DrawBuffer->_Ymax - y;
-   GLboolean all = (width == ctx->DrawBuffer->Width && height == ctx->DrawBuffer->height)
-   
-   if (mask & DD_FRONT_LEFT_BIT) {
-      if (all) {
-         _RGB *rgbBuffer=(void *)SVGABuffer.FrontBuffer;
-         for (i=0;i<SVGABuffer.BufferSize / 3;i++) {
-            rgbBuffer[i].r=SVGAMesa->clear_red;
-            rgbBuffer[i].g=SVGAMesa->clear_green;
-            rgbBuffer[i].b=SVGAMesa->clear_blue;
-         } 
-      }
-      else {
-         GLubyte *tmp = SVGABuffer.DrawBuffer;
-         SVGABuffer.DrawBuffer = SVGABuffer.FrontBuffer;
-         for (i=x;i<width;i++)    
-            for (j=y;j<height;j++)    
-               __svga_drawpixel24( i, j, SVGAMesa->clear_red,
-                                   SVGAMesa->clear_green,
-                                   SVGAMesa->clear_blue);
-         SVGABuffer.DrawBuffer = tmp;
-      }	
-      mask &= ~DD_FRONT_LEFT_BIT;
-   }
-   if (mask & DD_BACK_LEFT_BIT) {
-      if (all) {
-         _RGB *rgbBuffer=(void *)SVGABuffer.BackBuffer;
-         for (i=0;i<SVGABuffer.BufferSize / 3;i++) {
-            rgbBuffer[i].r=SVGAMesa->clear_red;
-            rgbBuffer[i].g=SVGAMesa->clear_green;
-            rgbBuffer[i].b=SVGAMesa->clear_blue;
-         } 
-      }
-      else {
-         GLubyte *tmp = SVGABuffer.DrawBuffer;
-         SVGABuffer.DrawBuffer = SVGABuffer.BackBuffer;
-         for (i=x;i<width;i++)    
-            for (j=y;j<height;j++)    
-               __svga_drawpixel24( i, j, SVGAMesa->clear_red,
-                                   SVGAMesa->clear_green,
-                                   SVGAMesa->clear_blue);
-         SVGABuffer.DrawBuffer = tmp;
-      }	
-      mask &= ~DD_BACK_LEFT_BIT;
-   }
-
-   if (mask)
-      _swrast_Clear( ctx, mask );
-}
-
-void __write_rgba_span24( const GLcontext *ctx, GLuint n, GLint x, GLint y,
-                          const GLubyte rgba[][4], const GLubyte mask[] )
-{
-   int i;
-   if (mask) {
-      /* draw some pixels */
-      for (i=0; i<n; i++, x++) {
-         if (mask[i]) {
-         __svga_drawpixel24( x, y, rgba[i][RCOMP],
-	                           rgba[i][GCOMP],
-				   rgba[i][BCOMP]);
-         }
-      }
-   }
-   else {
-      /* draw all pixels */
-      for (i=0; i<n; i++, x++) {
-         __svga_drawpixel24( x, y, rgba[i][RCOMP],
-	                           rgba[i][GCOMP],
-				   rgba[i][BCOMP]);
-      }
-   }
-}
-
-void __write_mono_rgba_span24( const GLcontext *ctx,
-                               GLuint n, GLint x, GLint y,
-                               const GLchan color[4], const GLubyte mask[])
-{
-   int i;
-   for (i=0; i<n; i++, x++) {
-      if (mask[i]) {
-         __svga_drawpixel24( x, y, color[RCOMP], color[GCOMP], color[BCOMP]);
-      }
-   }
-}
-
-void __read_rgba_span24( const GLcontext *ctx, GLuint n, GLint x, GLint y,
-                         GLubyte rgba[][4] )
-{
-   int i;
-   for (i=0; i<n; i++, x++) {
-    *((GLint*)rgba[i]) = RGB2BGR24(__svga_getpixel24( x, y));
-   }
-}
-
-void __write_rgba_pixels24( const GLcontext *ctx,
-                            GLuint n, const GLint x[], const GLint y[],
-                            const GLubyte rgba[][4], const GLubyte mask[] )
-{
-   int i;
-   for (i=0; i<n; i++) {
-      if (mask[i]) {
-         __svga_drawpixel24( x[i], y[i], rgba[i][RCOMP],
-	                                 rgba[i][GCOMP],
-				         rgba[i][BCOMP]);
-      }
-   }
-}
-
-void __write_mono_rgba_pixels24( const GLcontext *ctx,
-                                 GLuint n,
-                                 const GLint x[], const GLint y[],
-                                 const GLchan color[4], const GLubyte mask[] )
-{
-   int i;
-   for (i=0; i<n; i++) {
-      if (mask[i]) {
-         __svga_drawpixel24( x[i], y[i],
-                             color[RCOMP], color[GCOMP], color[BCOMP] );
-      }
-   }
-}
-
-void __read_rgba_pixels24( const GLcontext *ctx,
-                           GLuint n, const GLint x[], const GLint y[],
-                           GLubyte rgba[][4], const GLubyte mask[] )
-{
-   int i;
-   for (i=0; i<n; i++,x++) {
-    *((GLint*)rgba[i]) = RGB2BGR24(__svga_getpixel24( x[i], y[i]));    
-   }
-}
-
-#else
-
-
-/* silence compiler warning */
-extern void _mesa_svga24_dummy_function(void);
-void _mesa_svga24_dummy_function(void)
-{
-}
-
-
-#endif
diff --git a/src/mesa/drivers/svga/svgamesa24.h b/src/mesa/drivers/svga/svgamesa24.h
deleted file mode 100644
index df5fa68c44..0000000000
--- a/src/mesa/drivers/svga/svgamesa24.h
+++ /dev/null
@@ -1,43 +0,0 @@
-
-/*
- * Mesa 3-D graphics library
- * Version:  5.0
- * Copyright (C) 1995-2002  Brian Paul
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-
-/*
- * SVGA driver for Mesa.
- * Original author:  Brian Paul
- * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2)
- */
-
-
-#ifndef SVGA_MESA_24_H
-#define SVGA_MESA_24_H
-
-extern void __clear_color24( GLcontext *ctx, const GLfloat color[4] );
-extern void __clear24( GLcontext *ctx, GLbitfield mask, GLboolean all, GLint x, GLint y, GLint width, GLint height );
-extern void __write_rgba_span24( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLubyte rgba[][4], const GLubyte mask[] );
-extern void __write_mono_rgba_span24( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLchan color[4], const GLubyte mask[]);
-extern void __read_rgba_span24( const GLcontext *ctx, GLuint n, GLint x, GLint y, GLubyte rgba[][4] );
-extern void __write_rgba_pixels24( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte rgba[][4], const GLubyte mask[] );
-extern void __write_mono_rgba_pixels24( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLchan color[4], const GLubyte mask[] );
-extern void __read_rgba_pixels24( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], GLubyte rgba[][4], const GLubyte mask[] );
-
-#endif /* SVGA_MESA_24_H */
-
diff --git a/src/mesa/drivers/svga/svgamesa32.c b/src/mesa/drivers/svga/svgamesa32.c
deleted file mode 100644
index 8eea3cbe64..0000000000
--- a/src/mesa/drivers/svga/svgamesa32.c
+++ /dev/null
@@ -1,223 +0,0 @@
-
-/*
- * Mesa 3-D graphics library
- * Version:  5.0
- * Copyright (C) 1995-2002  Brian Paul
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-
-/*
- * SVGA driver for Mesa.
- * Original author:  Brian Paul
- * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2)
- */
-
-#ifdef HAVE_CONFIG_H
-#include "conf.h"
-#endif
-
-#ifdef SVGA
-
-#include "svgapix.h"
-#include "svgamesa32.h"
-#include "swrast/swrast.h"
-
-
-#if 0
-/* this doesn't compile with GCC on RedHat 6.1 */
-static INLINE int RGB2BGR32(int c)
-{
-	asm("rorw  $8, %0\n"	 
-	    "rorl $16, %0\n"	 
-	    "rorw  $8, %0\n"	 
-	    "shrl  $8, %0\n"	 
-      : "=q"(c):"0"(c));
-    return c;
-}
-#else
-static unsigned long RGB2BGR32(unsigned long color)
-{
-   return (color & 0xff00)|(color>>16)|((color & 0xff)<<16);
-}
-#endif
-
-static void __svga_drawpixel32(int x, int y, unsigned long c)
-{
-    unsigned long offset;
-
-    GLint *intBuffer=(void *)SVGABuffer.DrawBuffer;
-    y = SVGAInfo->height-y-1;
-    offset = y * SVGAInfo->width + x;
-    intBuffer[offset]=c;
-}
-
-static unsigned long __svga_getpixel32(int x, int y)
-{
-    unsigned long offset;
-
-    const GLint *intBuffer=(void *)SVGABuffer.ReadBuffer;
-    y = SVGAInfo->height-y-1;
-    offset = y * SVGAInfo->width + x;
-    return intBuffer[offset];
-}
-
-void __clear_color32( GLcontext *ctx, const GLfloat color[4] )
-{
-   GLubyte col[3];
-   CLAMPED_FLOAT_TO_UBYTE(col[0], color[0]);
-   CLAMPED_FLOAT_TO_UBYTE(col[1], color[1]);
-   CLAMPED_FLOAT_TO_UBYTE(col[2], color[2]);
-   SVGAMesa->clear_truecolor = (col[0] << 16) | (col[1] << 8) | col[2];
-}
-
-void __clear32( GLcontext *ctx, GLbitfield mask )
-{
-   int i,j;
-   int x = ctx->DrawBuffer->_Xmin;
-   int y = ctx->DrawBuffer->_Ymin;
-   int width = ctx->DrawBuffer->_Xmax - x;
-   int height = ctx->DrawBuffer->_Ymax - y;
-   GLboolean all = (width == ctx->DrawBuffer->Width && height == ctx->DrawBuffer->height)
-   
-   if (mask & DD_FRONT_LEFT_BIT) {
-      if (all) {
-         GLint *intBuffer=(void *)SVGABuffer.FrontBuffer;
-         for (i=0;i<SVGABuffer.BufferSize / 4;i++)
-            intBuffer[i]=SVGAMesa->clear_truecolor;
-      }
-      else {
-         GLubyte *tmp = SVGABuffer.DrawBuffer;
-         SVGABuffer.DrawBuffer = SVGABuffer.FrontBuffer;
-         for (i=x;i<width;i++)    
-            for (j=y;j<height;j++)    
-               __svga_drawpixel32(i,j,SVGAMesa->clear_truecolor);
-         SVGABuffer.DrawBuffer = tmp;
-      }
-      mask &= ~DD_FRONT_LEFT_BIT;
-   }
-   if (mask & DD_BACK_LEFT_BIT) {
-      if (all) {
-         GLint *intBuffer=(void *)SVGABuffer.BackBuffer;
-         for (i=0;i<SVGABuffer.BufferSize / 4;i++)
-            intBuffer[i]=SVGAMesa->clear_truecolor;
-      }
-      else {
-         GLubyte *tmp = SVGABuffer.DrawBuffer;
-         SVGABuffer.DrawBuffer = SVGABuffer.BackBuffer;
-         for (i=x;i<width;i++)    
-            for (j=y;j<height;j++)    
-               __svga_drawpixel32(i,j,SVGAMesa->clear_truecolor);
-         SVGABuffer.DrawBuffer = tmp;
-      }
-      mask &= ~DD_BACK_LEFT_BIT;
-   }
-
-   if (mask)
-      _swrast_Clear( ctx, mask );
-}
-
-void __write_rgba_span32( const GLcontext *ctx, GLuint n, GLint x, GLint y,
-                          const GLubyte rgba[][4], const GLubyte mask[] )
-{
-   int i;
-   if (mask) {
-      /* draw some pixels */
-      for (i=0; i<n; i++, x++) {
-         if (mask[i]) {
-         __svga_drawpixel32( x, y, RGB2BGR32(*((GLint*)rgba[i])));
-         }
-      }
-   }
-   else {
-      /* draw all pixels */
-      for (i=0; i<n; i++, x++) {
-         __svga_drawpixel32( x, y, RGB2BGR32(*((GLint*)rgba[i])));
-      }
-   }
-}
-
-void __write_mono_rgba_span32( const GLcontext *ctx,
-                               GLuint n, GLint x, GLint y,
-                               const GLchan color[4], const GLubyte mask[])
-{
-   int i;
-   GLuint truecolor = color[RCOMP]<<16 | color[GCOMP]<<8 | color[BCOMP];
-   for (i=0; i<n; i++, x++) {
-      if (mask[i]) {
-         __svga_drawpixel32( x, y, truecolor);
-      }
-   }
-}
-
-void __read_rgba_span32( const GLcontext *ctx, GLuint n, GLint x, GLint y,
-                         GLubyte rgba[][4] )
-{
-   int i;
-   for (i=0; i<n; i++, x++) {
-     *((GLint*)rgba[i]) = RGB2BGR32(__svga_getpixel32( x, y ));
-   }
-}
-
-void __write_rgba_pixels32( const GLcontext *ctx,
-                            GLuint n, const GLint x[], const GLint y[],
-                            const GLubyte rgba[][4], const GLubyte mask[] )
-{
-   int i;
-   for (i=0; i<n; i++) {
-      if (mask[i]) {
-         __svga_drawpixel32( x[i], y[i], RGB2BGR32(*((GLint*)rgba[i])));
-      }
-   }
-}
-
-void __write_mono_rgba_pixels32( const GLcontext *ctx,
-                                 GLuint n,
-                                 const GLint x[], const GLint y[],
-                                 const GLchan color[4], const GLubyte mask[] )
-{
-   GLuint truecolor = color[RCOMP]<<16 | color[GCOMP]<<8 | color[BCOMP];
-   int i;
-   for (i=0; i<n; i++) {
-      if (mask[i]) {
-         __svga_drawpixel32( x[i], y[i], truecolor );
-      }
-   }
-}
-
-void __read_rgba_pixels32( const GLcontext *ctx,
-                           GLuint n, const GLint x[], const GLint y[],
-                           GLubyte rgba[][4], const GLubyte mask[] )
-{
-   int i;
-   for (i=0; i<n; i++,x++) {
-    *((GLint*)rgba[i]) = RGB2BGR32(__svga_getpixel32( x[i], y[i] ));
-   }
-}
-
-
-#else
-
-
-/* silence compiler warning */
-extern void _mesa_svga32_dummy_function(void);
-void _mesa_svga32_dummy_function(void)
-{
-}
-
-
-#endif
-
diff --git a/src/mesa/drivers/svga/svgamesa32.h b/src/mesa/drivers/svga/svgamesa32.h
deleted file mode 100644
index 6cf8315300..0000000000
--- a/src/mesa/drivers/svga/svgamesa32.h
+++ /dev/null
@@ -1,43 +0,0 @@
-
-/*
- * Mesa 3-D graphics library
- * Version:  5.0
- * Copyright (C) 1995-2002  Brian Paul
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-
-/*
- * SVGA driver for Mesa.
- * Original author:  Brian Paul
- * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2)
- */
-
-
-#ifndef SVGA_MESA_32_H
-#define SVGA_MESA_32_H
-
-extern void __clear_color32( GLcontext *ctx, const GLfloat color[4] );
-extern void __clear32( GLcontext *ctx, GLbitfield mask, GLboolean all, GLint x, GLint y, GLint width, GLint height );
-extern void __write_rgba_span32( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLubyte rgba[][4], const GLubyte mask[] );
-extern void __write_mono_rgba_span32( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLchan color[4], const GLubyte mask[]);
-extern void __read_rgba_span32( const GLcontext *ctx, GLuint n, GLint x, GLint y, GLubyte rgba[][4] );
-extern void __write_rgba_pixels32( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte rgba[][4], const GLubyte mask[] );
-extern void __write_mono_rgba_pixels32( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLchan color[4], const GLubyte mask[] );
-extern void __read_rgba_pixels32( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], GLubyte rgba[][4], const GLubyte mask[] );
-
-#endif /* SVGA_MESA_32_H */
-
diff --git a/src/mesa/drivers/svga/svgamesa8.c b/src/mesa/drivers/svga/svgamesa8.c
deleted file mode 100644
index 2f7048a930..0000000000
--- a/src/mesa/drivers/svga/svgamesa8.c
+++ /dev/null
@@ -1,196 +0,0 @@
-
-/*
- * Mesa 3-D graphics library
- * Version:  3.3
- * Copyright (C) 1995-2000  Brian Paul
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-
-/*
- * SVGA driver for Mesa.
- * Original author:  Brian Paul
- * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2)
- */
-
-#ifdef HAVE_CONFIG_H
-#include "conf.h"
-#endif
-
-#ifdef SVGA
-
-
-#include "svgapix.h"
-#include "svgamesa8.h"
-#include "swrast/swrast.h"
-
-
-static void __svga_drawpixel8(int x, int y, unsigned long c)
-{
-    unsigned long offset;
-    y = SVGAInfo->height-y-1;
-    offset = y * SVGAInfo->linewidth + x;
-    SVGABuffer.DrawBuffer[offset]=c;
-}
-
-static unsigned long __svga_getpixel8(int x, int y)
-{
-    unsigned long offset;
-    y = SVGAInfo->height-y-1;
-    offset = y * SVGAInfo->linewidth + x;
-    return SVGABuffer.ReadBuffer[offset];
-}
-
-void __clear_index8( GLcontext *ctx, GLuint index )
-{
-   SVGAMesa->clear_index = index;
-}
-
-void __clear8( GLcontext *ctx, GLbitfield mask )
-{
-   int i,j;
-   int x = ctx->DrawBuffer->_Xmin;
-   int y = ctx->DrawBuffer->_Ymin;
-   int width = ctx->DrawBuffer->_Xmax - x;
-   int height = ctx->DrawBuffer->_Ymax - y;
-   GLboolean all = (width == ctx->DrawBuffer->Width && height == ctx->DrawBuffer->height)
-   
-   if (mask & DD_FRONT_LEFT_BIT) {
-      if (all) { 
-         memset(SVGABuffer.FrontBuffer, SVGAMesa->clear_index, SVGABuffer.BufferSize);
-      }
-      else {
-         GLubyte *tmp = SVGABuffer.DrawBuffer;
-         SVGABuffer.DrawBuffer = SVGABuffer.FrontBuffer;
-         for (i=x;i<width;i++)
-            for (j=y;j<height;j++)
-               __svga_drawpixel8(i,j,SVGAMesa->clear_index);
-         SVGABuffer.DrawBuffer = tmp;
-      }
-      mask &= ~DD_FRONT_LEFT_BIT;
-   }
-   if (mask & DD_BACK_LEFT_BIT) {
-      if (all) { 
-         memset(SVGABuffer.BackBuffer, SVGAMesa->clear_index, SVGABuffer.BufferSize);
-      }
-      else {
-         GLubyte *tmp = SVGABuffer.DrawBuffer;
-         SVGABuffer.DrawBuffer = SVGABuffer.BackBuffer;
-         for (i=x;i<width;i++)
-            for (j=y;j<height;j++)
-               __svga_drawpixel8(i,j,SVGAMesa->clear_index);
-         SVGABuffer.DrawBuffer = tmp;
-      }
-      mask &= ~DD_BACK_LEFT_BIT;
-   }
-
-   if (mask)
-      _swrast_Clear( ctx, mask );
-}
-
-void __write_ci32_span8( const GLcontext *ctx, struct gl_renderbuffer *rb,
-                         GLuint n, GLint x, GLint y,
-                         const GLuint index[], const GLubyte mask[] )
-{
-   int i;
-   for (i=0;i<n;i++,x++) {
-      if (mask[i]) {
-         __svga_drawpixel8( x, y, index[i]);
-      }
-   }
-}
-
-void __write_ci8_span8( const GLcontext *ctx, struct gl_renderbuffer *rb,
-                        GLuint n, GLint x, GLint y,
-                        const GLubyte index[], const GLubyte mask[] )
-{
-   int i;
-
-   for (i=0;i<n;i++,x++) {
-      if (mask[i]) {
-         __svga_drawpixel8( x, y, index[i]);
-      }
-   }
-}
-
-void __write_mono_ci_span8( const GLcontext *ctx, struct gl_renderbuffer *rb,
-                            GLuint n, GLint x, GLint y,
-                            GLuint colorIndex, const GLubyte mask[] )
-{
-   int i;
-   for (i=0;i<n;i++,x++) {
-      if (mask[i]) {
-         __svga_drawpixel8( x, y, colorIndex);
-      }
-   }
-}
-
-void __read_ci32_span8( const GLcontext *ctx, struct gl_renderbuffer *rb,
-                        GLuint n, GLint x, GLint y, GLuint index[])
-{
-   int i;
-   for (i=0; i<n; i++,x++) {
-      index[i] = __svga_getpixel8( x, y);
-   }
-}
-
-void __write_ci32_pixels8( const GLcontext *ctx, struct gl_renderbuffer *rb,
-                           GLuint n, const GLint x[], const GLint y[],
-                           const GLuint index[], const GLubyte mask[] )
-{
-   int i;
-   for (i=0; i<n; i++) {
-      if (mask[i]) {
-         __svga_drawpixel8( x[i], y[i], index[i]);
-      }
-   }
-}
-
-
-void __write_mono_ci_pixels8( const GLcontext *ctx, struct gl_renderbuffer *rb,
-                              GLuint n, const GLint x[], const GLint y[],
-                              GLuint colorIndex, const GLubyte mask[] )
-{
-   int i;
-   for (i=0; i<n; i++) {
-      if (mask[i]) {
-         __svga_drawpixel8( x[i], y[i], colorIndex);
-      }
-   }
-}
-
-void __read_ci32_pixels8( const GLcontext *ctx, struct gl_renderbuffer *rb,
-                          GLuint n, const GLint x[], const GLint y[],
-                          GLuint index[], const GLubyte mask[] )
-{
-   int i;
-   for (i=0; i<n; i++,x++) {
-      index[i] = __svga_getpixel8( x[i], y[i]);
-   }
-}
-
-
-#else
-
-
-/* silence compiler warning */
-extern void _mesa_svga8_dummy_function(void);
-void _mesa_svga8_dummy_function(void)
-{
-}
-
-
-#endif
diff --git a/src/mesa/drivers/svga/svgamesa8.h b/src/mesa/drivers/svga/svgamesa8.h
deleted file mode 100644
index d2b0509480..0000000000
--- a/src/mesa/drivers/svga/svgamesa8.h
+++ /dev/null
@@ -1,43 +0,0 @@
-
-/*
- * Mesa 3-D graphics library
- * Version:  3.2
- * Copyright (C) 1995-2000  Brian Paul
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-
-/*
- * SVGA driver for Mesa.
- * Original author:  Brian Paul
- * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2)
- */
-
-
-#ifndef SVGA_MESA_8_H
-#define SVGA_MESA_8_H
-
-extern void __clear_index8( GLcontext *ctx, GLuint index );
-extern void __clear8( GLcontext *ctx, GLbitfield mask, GLboolean all, GLint x, GLint y, GLint width, GLint height );
-extern void __write_ci32_span8( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLuint index[], const GLubyte mask[] );
-extern void __write_ci8_span8( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLubyte index[], const GLubyte mask[] );
-extern void __write_mono_ci_span8( const GLcontext *ctx, GLuint n, GLint x, GLint y, GLuint colorIndex, const GLubyte mask[] );
-extern void __read_ci32_span8( const GLcontext *ctx, GLuint n, GLint x, GLint y, GLuint index[]);
-extern void __write_ci32_pixels8( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLuint index[], const GLubyte mask[] );
-extern void __write_mono_ci_pixels8( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], GLuint colorIndex, const GLubyte mask[] );
-extern void __read_ci32_pixels8( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], GLuint index[], const GLubyte mask[] );
-
-#endif /* SVGA_MESA_15_H */
diff --git a/src/mesa/drivers/svga/svgapix.h b/src/mesa/drivers/svga/svgapix.h
deleted file mode 100644
index c8cee37ca6..0000000000
--- a/src/mesa/drivers/svga/svgapix.h
+++ /dev/null
@@ -1,70 +0,0 @@
-
-/*
- * Mesa 3-D graphics library
- * Version:  5.0
- * Copyright (C) 1995-2002  Brian Paul
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-
-/*
- * SVGA driver for Mesa.
- * Original author:  Brian Paul
- * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2)
- */
-
-
-#ifndef SVGAPIX_H
-#define SVGAPIX_H
-
-#include "GL/gl.h"
-#include "GL/svgamesa.h"
-#include "main/context.h"
-#include "main/colormac.h"
-#include "vga.h"
-
-struct svgamesa_context {
-   GLcontext *gl_ctx;		/* the core Mesa context */
-   GLvisual *gl_vis;		/* describes the color buffer */
-   GLframebuffer *gl_buffer;	/* the ancillary buffers */
-   GLuint clear_index;		/* current clear index */
-   GLint clear_red, 
-         clear_green, 
-	 clear_blue;		/* current clear rgb color */
-   GLuint clear_truecolor;	/* current clear rgb color */
-   GLushort hicolor;		/* current hicolor */
-   GLushort clear_hicolor;	/* current clear hicolor */
-   GLint width, height;		/* size of color buffer */
-   GLint depth;			/* bits per pixel (8,16,24 or 32) */
-};
-
-typedef struct { GLubyte b,g,r; } _RGB;
-
-struct svga_buffer {   
-   GLint     Depth;
-   GLint     BufferSize;
-   GLubyte   * FrontBuffer;
-   GLubyte   * BackBuffer;
-   GLubyte   * VideoRam;
-   GLubyte   * DrawBuffer;  /* == FrontBuffer or BackBuffer */
-   GLubyte   * ReadBuffer;  /* == FrontBuffer or BackBuffer */
-};
-
-extern struct svga_buffer SVGABuffer;
-extern vga_modeinfo * SVGAInfo;
-extern SVGAMesaContext SVGAMesa;    /* the current context */
-
-#endif /* SVGAPIX_H */
-- 
cgit v1.2.3


From 79aeafd3ca3680c28f6d47a21a501334844f4475 Mon Sep 17 00:00:00 2001
From: Kristian Høgsberg <krh@bitplanet.net>
Date: Thu, 25 Feb 2010 16:12:58 -0500
Subject: Drop fb, ffb and gamma dri drivers

---
 configure.ac                                     |   13 +-
 src/mesa/drivers/dri/fb/Doxyfile                 |  232 -
 src/mesa/drivers/dri/fb/Makefile                 |   24 -
 src/mesa/drivers/dri/fb/fb_dri.c                 |  792 ---
 src/mesa/drivers/dri/ffb/Makefile                |   35 -
 src/mesa/drivers/dri/ffb/ffb_bitmap.c            |  158 -
 src/mesa/drivers/dri/ffb/ffb_bitmap.h            |    7 -
 src/mesa/drivers/dri/ffb/ffb_clear.c             |  335 --
 src/mesa/drivers/dri/ffb/ffb_clear.h             |    6 -
 src/mesa/drivers/dri/ffb/ffb_context.h           |  305 --
 src/mesa/drivers/dri/ffb/ffb_dd.c                |  115 -
 src/mesa/drivers/dri/ffb/ffb_dd.h                |   36 -
 src/mesa/drivers/dri/ffb/ffb_depth.c             |  243 -
 src/mesa/drivers/dri/ffb/ffb_depth.h             |    7 -
 src/mesa/drivers/dri/ffb/ffb_fifo.h              |   27 -
 src/mesa/drivers/dri/ffb/ffb_fog.c               |   73 -
 src/mesa/drivers/dri/ffb/ffb_lines.c             |  107 -
 src/mesa/drivers/dri/ffb/ffb_lines.h             |   17 -
 src/mesa/drivers/dri/ffb/ffb_linetmp.h           |   80 -
 src/mesa/drivers/dri/ffb/ffb_lock.h              |   36 -
 src/mesa/drivers/dri/ffb/ffb_points.c            |   91 -
 src/mesa/drivers/dri/ffb/ffb_points.h            |   14 -
 src/mesa/drivers/dri/ffb/ffb_pointtmp.h          |   54 -
 src/mesa/drivers/dri/ffb/ffb_rendertmp.h         |  645 ---
 src/mesa/drivers/dri/ffb/ffb_span.c              |  127 -
 src/mesa/drivers/dri/ffb/ffb_span.h              |    9 -
 src/mesa/drivers/dri/ffb/ffb_state.c             | 1222 -----
 src/mesa/drivers/dri/ffb/ffb_state.h             |   12 -
 src/mesa/drivers/dri/ffb/ffb_stencil.c           |  224 -
 src/mesa/drivers/dri/ffb/ffb_stencil.h           |    7 -
 src/mesa/drivers/dri/ffb/ffb_tex.c               |   35 -
 src/mesa/drivers/dri/ffb/ffb_tex.h               |   34 -
 src/mesa/drivers/dri/ffb/ffb_tris.c              |  945 ----
 src/mesa/drivers/dri/ffb/ffb_tris.h              |   25 -
 src/mesa/drivers/dri/ffb/ffb_tritmp.h            |  238 -
 src/mesa/drivers/dri/ffb/ffb_vb.c                |  207 -
 src/mesa/drivers/dri/ffb/ffb_vb.h                |   44 -
 src/mesa/drivers/dri/ffb/ffb_vbtmp.h             |  150 -
 src/mesa/drivers/dri/ffb/ffb_vtxfmt.c            |  414 --
 src/mesa/drivers/dri/ffb/ffb_vtxfmt.h            |    7 -
 src/mesa/drivers/dri/ffb/ffb_xmesa.c             |  729 ---
 src/mesa/drivers/dri/ffb/ffb_xmesa.h             |   25 -
 src/mesa/drivers/dri/ffb/server/ffb_dac.h        |  366 --
 src/mesa/drivers/dri/ffb/server/ffb_drishare.h   |   47 -
 src/mesa/drivers/dri/ffb/server/ffb_regs.h       |  508 --
 src/mesa/drivers/dri/gamma/Makefile              |   34 -
 src/mesa/drivers/dri/gamma/gamma_client.h        | 6184 ----------------------
 src/mesa/drivers/dri/gamma/gamma_context.c       |  229 -
 src/mesa/drivers/dri/gamma/gamma_context.h       |  401 --
 src/mesa/drivers/dri/gamma/gamma_dd.c            |  110 -
 src/mesa/drivers/dri/gamma/gamma_inithw.c        |  551 --
 src/mesa/drivers/dri/gamma/gamma_lock.c          |   60 -
 src/mesa/drivers/dri/gamma/gamma_lock.h          |   84 -
 src/mesa/drivers/dri/gamma/gamma_macros.h        |  323 --
 src/mesa/drivers/dri/gamma/gamma_regs.h          |  658 ---
 src/mesa/drivers/dri/gamma/gamma_render.c        |  221 -
 src/mesa/drivers/dri/gamma/gamma_screen.c        |  147 -
 src/mesa/drivers/dri/gamma/gamma_screen.h        |   30 -
 src/mesa/drivers/dri/gamma/gamma_span.c          |  315 --
 src/mesa/drivers/dri/gamma/gamma_state.c         | 1721 ------
 src/mesa/drivers/dri/gamma/gamma_tex.c           |  434 --
 src/mesa/drivers/dri/gamma/gamma_texmem.c        |  535 --
 src/mesa/drivers/dri/gamma/gamma_texstate.c      |  215 -
 src/mesa/drivers/dri/gamma/gamma_tris.c          |  660 ---
 src/mesa/drivers/dri/gamma/gamma_tris.h          |   36 -
 src/mesa/drivers/dri/gamma/gamma_tritmp.h        |  496 --
 src/mesa/drivers/dri/gamma/gamma_vb.c            |  361 --
 src/mesa/drivers/dri/gamma/gamma_vb.h            |   60 -
 src/mesa/drivers/dri/gamma/gamma_xmesa.c         |  273 -
 src/mesa/drivers/dri/gamma/server/glint_common.h |   63 -
 src/mesa/drivers/dri/gamma/server/glint_dri.h    |  122 -
 71 files changed, 5 insertions(+), 23145 deletions(-)
 delete mode 100644 src/mesa/drivers/dri/fb/Doxyfile
 delete mode 100644 src/mesa/drivers/dri/fb/Makefile
 delete mode 100644 src/mesa/drivers/dri/fb/fb_dri.c
 delete mode 100644 src/mesa/drivers/dri/ffb/Makefile
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_bitmap.c
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_bitmap.h
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_clear.c
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_clear.h
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_context.h
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_dd.c
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_dd.h
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_depth.c
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_depth.h
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_fifo.h
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_fog.c
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_lines.c
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_lines.h
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_linetmp.h
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_lock.h
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_points.c
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_points.h
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_pointtmp.h
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_rendertmp.h
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_span.c
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_span.h
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_state.c
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_state.h
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_stencil.c
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_stencil.h
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_tex.c
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_tex.h
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_tris.c
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_tris.h
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_tritmp.h
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_vb.c
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_vb.h
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_vbtmp.h
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_vtxfmt.c
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_vtxfmt.h
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_xmesa.c
 delete mode 100644 src/mesa/drivers/dri/ffb/ffb_xmesa.h
 delete mode 100644 src/mesa/drivers/dri/ffb/server/ffb_dac.h
 delete mode 100644 src/mesa/drivers/dri/ffb/server/ffb_drishare.h
 delete mode 100644 src/mesa/drivers/dri/ffb/server/ffb_regs.h
 delete mode 100644 src/mesa/drivers/dri/gamma/Makefile
 delete mode 100644 src/mesa/drivers/dri/gamma/gamma_client.h
 delete mode 100644 src/mesa/drivers/dri/gamma/gamma_context.c
 delete mode 100644 src/mesa/drivers/dri/gamma/gamma_context.h
 delete mode 100644 src/mesa/drivers/dri/gamma/gamma_dd.c
 delete mode 100644 src/mesa/drivers/dri/gamma/gamma_inithw.c
 delete mode 100644 src/mesa/drivers/dri/gamma/gamma_lock.c
 delete mode 100644 src/mesa/drivers/dri/gamma/gamma_lock.h
 delete mode 100644 src/mesa/drivers/dri/gamma/gamma_macros.h
 delete mode 100644 src/mesa/drivers/dri/gamma/gamma_regs.h
 delete mode 100644 src/mesa/drivers/dri/gamma/gamma_render.c
 delete mode 100644 src/mesa/drivers/dri/gamma/gamma_screen.c
 delete mode 100644 src/mesa/drivers/dri/gamma/gamma_screen.h
 delete mode 100644 src/mesa/drivers/dri/gamma/gamma_span.c
 delete mode 100644 src/mesa/drivers/dri/gamma/gamma_state.c
 delete mode 100644 src/mesa/drivers/dri/gamma/gamma_tex.c
 delete mode 100644 src/mesa/drivers/dri/gamma/gamma_texmem.c
 delete mode 100644 src/mesa/drivers/dri/gamma/gamma_texstate.c
 delete mode 100644 src/mesa/drivers/dri/gamma/gamma_tris.c
 delete mode 100644 src/mesa/drivers/dri/gamma/gamma_tris.h
 delete mode 100644 src/mesa/drivers/dri/gamma/gamma_tritmp.h
 delete mode 100644 src/mesa/drivers/dri/gamma/gamma_vb.c
 delete mode 100644 src/mesa/drivers/dri/gamma/gamma_vb.h
 delete mode 100644 src/mesa/drivers/dri/gamma/gamma_xmesa.c
 delete mode 100644 src/mesa/drivers/dri/gamma/server/glint_common.h
 delete mode 100644 src/mesa/drivers/dri/gamma/server/glint_dri.h

(limited to 'src/mesa')

diff --git a/configure.ac b/configure.ac
index b4561000d2..d108ecdad2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -720,10 +720,9 @@ if test "$mesa_driver" = dri; then
 
         case "$host_cpu" in
         x86_64)
-            # ffb, gamma, and sis are missing because they have not be
-            # converted to use the new interface.  i810 are missing
-            # because there is no x86-64 system where they could *ever*
-            # be used.
+            # sis is missing because they have not be converted to use
+            # the new interface.  i810 are missing because there is no
+            # x86-64 system where they could *ever* be used.
             if test "x$DRI_DIRS" = "xyes"; then
                 DRI_DIRS="i915 i965 mach64 mga r128 r200 r300 r600 radeon \
                     savage tdfx unichrome swrast"
@@ -739,7 +738,7 @@ if test "$mesa_driver" = dri; then
         sparc*)
             # Build only the drivers for cards that exist on sparc`
             if test "x$DRI_DIRS" = "xyes"; then
-                DRI_DIRS="mach64 r128 r200 r300 r600 radeon ffb swrast"
+                DRI_DIRS="mach64 r128 r200 r300 r600 radeon swrast"
             fi
             ;;
         esac
@@ -755,8 +754,6 @@ if test "$mesa_driver" = dri; then
             CXXFLAGS="$CXXFLAGS -ansi -pedantic"
         fi
 
-        # ffb and gamma are missing because they have not been converted
-        # to use the new interface.
         if test "x$DRI_DIRS" = "xyes"; then
             DRI_DIRS="i810 i915 i965 mach64 mga r128 r200 r300 r600 radeon tdfx \
                 unichrome savage sis swrast"
@@ -778,7 +775,7 @@ if test "$mesa_driver" = dri; then
     # default drivers
     if test "x$DRI_DIRS" = "xyes"; then
         DRI_DIRS="i810 i915 i965 mach64 mga r128 r200 r300 r600 radeon \
-            savage sis tdfx unichrome ffb swrast"
+            savage sis tdfx unichrome swrast"
     fi
 
     DRI_DIRS=`echo "$DRI_DIRS" | $SED 's/  */ /g'`
diff --git a/src/mesa/drivers/dri/fb/Doxyfile b/src/mesa/drivers/dri/fb/Doxyfile
deleted file mode 100644
index 31256db834..0000000000
--- a/src/mesa/drivers/dri/fb/Doxyfile
+++ /dev/null
@@ -1,232 +0,0 @@
-# Doxyfile 1.3.2-Gideon
-
-#---------------------------------------------------------------------------
-# General configuration options
-#---------------------------------------------------------------------------
-PROJECT_NAME           = fb
-PROJECT_NUMBER         = $VERSION$
-OUTPUT_DIRECTORY       = 
-OUTPUT_LANGUAGE        = English
-USE_WINDOWS_ENCODING   = NO
-EXTRACT_ALL            = NO
-EXTRACT_PRIVATE        = NO
-EXTRACT_STATIC         = NO
-EXTRACT_LOCAL_CLASSES  = YES
-HIDE_UNDOC_MEMBERS     = NO
-HIDE_UNDOC_CLASSES     = NO
-HIDE_FRIEND_COMPOUNDS  = NO
-HIDE_IN_BODY_DOCS      = NO
-BRIEF_MEMBER_DESC      = YES
-REPEAT_BRIEF           = YES
-ALWAYS_DETAILED_SEC    = NO
-INLINE_INHERITED_MEMB  = NO
-FULL_PATH_NAMES        = NO
-STRIP_FROM_PATH        = 
-INTERNAL_DOCS          = NO
-CASE_SENSE_NAMES       = YES
-SHORT_NAMES            = NO
-HIDE_SCOPE_NAMES       = NO
-SHOW_INCLUDE_FILES     = YES
-JAVADOC_AUTOBRIEF      = NO
-MULTILINE_CPP_IS_BRIEF = NO
-DETAILS_AT_TOP         = NO
-INHERIT_DOCS           = YES
-INLINE_INFO            = YES
-SORT_MEMBER_DOCS       = YES
-DISTRIBUTE_GROUP_DOC   = NO
-TAB_SIZE               = 8
-GENERATE_TODOLIST      = YES
-GENERATE_TESTLIST      = YES
-GENERATE_BUGLIST       = YES
-GENERATE_DEPRECATEDLIST= YES
-ALIASES                = 
-ENABLED_SECTIONS       = 
-MAX_INITIALIZER_LINES  = 30
-OPTIMIZE_OUTPUT_FOR_C  = NO
-OPTIMIZE_OUTPUT_JAVA   = NO
-SHOW_USED_FILES        = YES
-#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-QUIET                  = NO
-WARNINGS               = YES
-WARN_IF_UNDOCUMENTED   = YES
-WARN_IF_DOC_ERROR      = YES
-WARN_FORMAT            = "$file:$line: $text"
-WARN_LOGFILE           = 
-#---------------------------------------------------------------------------
-# configuration options related to the input files
-#---------------------------------------------------------------------------
-INPUT                  = /home/temp/Mesa/src/drv/fb
-FILE_PATTERNS          = *.c \
-                         *.cc \
-                         *.cxx \
-                         *.cpp \
-                         *.c++ \
-                         *.java \
-                         *.ii \
-                         *.ixx \
-                         *.ipp \
-                         *.i++ \
-                         *.inl \
-                         *.h \
-                         *.hh \
-                         *.hxx \
-                         *.hpp \
-                         *.h++ \
-                         *.idl \
-                         *.odl \
-                         *.cs \
-                         *.C \
-                         *.H \
-                         *.tlh \
-                         *.diff \
-                         *.patch \
-                         *.moc \
-                         *.xpm
-RECURSIVE              = yes
-EXCLUDE                = 
-EXCLUDE_SYMLINKS       = NO
-EXCLUDE_PATTERNS       = 
-EXAMPLE_PATH           = 
-EXAMPLE_PATTERNS       = *
-EXAMPLE_RECURSIVE      = NO
-IMAGE_PATH             = 
-INPUT_FILTER           = 
-FILTER_SOURCE_FILES    = NO
-#---------------------------------------------------------------------------
-# configuration options related to source browsing
-#---------------------------------------------------------------------------
-SOURCE_BROWSER         = NO
-INLINE_SOURCES         = NO
-STRIP_CODE_COMMENTS    = YES
-REFERENCED_BY_RELATION = YES
-REFERENCES_RELATION    = YES
-VERBATIM_HEADERS       = YES
-#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-ALPHABETICAL_INDEX     = NO
-COLS_IN_ALPHA_INDEX    = 5
-IGNORE_PREFIX          = 
-#---------------------------------------------------------------------------
-# configuration options related to the HTML output
-#---------------------------------------------------------------------------
-GENERATE_HTML          = YES
-HTML_OUTPUT            = html
-HTML_FILE_EXTENSION    = .html
-HTML_HEADER            = 
-HTML_FOOTER            = 
-HTML_STYLESHEET        = 
-HTML_ALIGN_MEMBERS     = YES
-GENERATE_HTMLHELP      = NO
-CHM_FILE               = 
-HHC_LOCATION           = 
-GENERATE_CHI           = NO
-BINARY_TOC             = NO
-TOC_EXPAND             = NO
-DISABLE_INDEX          = NO
-ENUM_VALUES_PER_LINE   = 4
-GENERATE_TREEVIEW      = NO
-TREEVIEW_WIDTH         = 250
-#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-GENERATE_LATEX         = YES
-LATEX_OUTPUT           = latex
-LATEX_CMD_NAME         = latex
-MAKEINDEX_CMD_NAME     = makeindex
-COMPACT_LATEX          = NO
-PAPER_TYPE             = a4wide
-EXTRA_PACKAGES         = 
-LATEX_HEADER           = 
-PDF_HYPERLINKS         = NO
-USE_PDFLATEX           = NO
-LATEX_BATCHMODE        = NO
-LATEX_HIDE_INDICES     = NO
-#---------------------------------------------------------------------------
-# configuration options related to the RTF output
-#---------------------------------------------------------------------------
-GENERATE_RTF           = NO
-RTF_OUTPUT             = rtf
-COMPACT_RTF            = NO
-RTF_HYPERLINKS         = NO
-RTF_STYLESHEET_FILE    = 
-RTF_EXTENSIONS_FILE    = 
-#---------------------------------------------------------------------------
-# configuration options related to the man page output
-#---------------------------------------------------------------------------
-GENERATE_MAN           = NO
-MAN_OUTPUT             = man
-MAN_EXTENSION          = .3
-MAN_LINKS              = NO
-#---------------------------------------------------------------------------
-# configuration options related to the XML output
-#---------------------------------------------------------------------------
-GENERATE_XML           = yes
-XML_OUTPUT             = xml
-XML_SCHEMA             = 
-XML_DTD                = 
-#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-GENERATE_AUTOGEN_DEF   = NO
-#---------------------------------------------------------------------------
-# configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-GENERATE_PERLMOD       = NO
-PERLMOD_LATEX          = NO
-PERLMOD_PRETTY         = YES
-PERLMOD_MAKEVAR_PREFIX = 
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor   
-#---------------------------------------------------------------------------
-ENABLE_PREPROCESSING   = YES
-MACRO_EXPANSION        = NO
-EXPAND_ONLY_PREDEF     = NO
-SEARCH_INCLUDES        = YES
-INCLUDE_PATH           = 
-INCLUDE_FILE_PATTERNS  = 
-PREDEFINED             = 
-EXPAND_AS_DEFINED      = 
-SKIP_FUNCTION_MACROS   = YES
-#---------------------------------------------------------------------------
-# Configuration::addtions related to external references   
-#---------------------------------------------------------------------------
-TAGFILES               = 
-GENERATE_TAGFILE       = 
-ALLEXTERNALS           = NO
-EXTERNAL_GROUPS        = YES
-PERL_PATH              = /usr/bin/perl
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool   
-#---------------------------------------------------------------------------
-CLASS_DIAGRAMS         = YES
-HIDE_UNDOC_RELATIONS   = YES
-HAVE_DOT               = NO
-CLASS_GRAPH            = YES
-COLLABORATION_GRAPH    = YES
-UML_LOOK               = NO
-TEMPLATE_RELATIONS     = NO
-INCLUDE_GRAPH          = YES
-INCLUDED_BY_GRAPH      = YES
-CALL_GRAPH             = NO
-GRAPHICAL_HIERARCHY    = YES
-DOT_IMAGE_FORMAT       = png
-DOT_PATH               = 
-DOTFILE_DIRS           = 
-MAX_DOT_GRAPH_WIDTH    = 1024
-MAX_DOT_GRAPH_HEIGHT   = 1024
-MAX_DOT_GRAPH_DEPTH    = 1000
-GENERATE_LEGEND        = YES
-DOT_CLEANUP            = YES
-#---------------------------------------------------------------------------
-# Configuration::addtions related to the search engine   
-#---------------------------------------------------------------------------
-SEARCHENGINE           = NO
-CGI_NAME               = search.cgi
-CGI_URL                = 
-DOC_URL                = 
-DOC_ABSPATH            = 
-BIN_ABSPATH            = /usr/local/bin/
-EXT_DOC_PATHS          = 
diff --git a/src/mesa/drivers/dri/fb/Makefile b/src/mesa/drivers/dri/fb/Makefile
deleted file mode 100644
index 848e2041e2..0000000000
--- a/src/mesa/drivers/dri/fb/Makefile
+++ /dev/null
@@ -1,24 +0,0 @@
-# src/mesa/drivers/dri/fb/Makefile
-
-TOP = ../../../../..
-include $(TOP)/configs/current
-
-LIBNAME = fb_dri.so
-
-
-DRIVER_SOURCES = \
-	fb_dri.c \
-	$(EGL_SOURCES)
-
-
-C_SOURCES = \
-	$(COMMON_SOURCES) \
-	$(DRIVER_SOURCES)
-
-ASM_SOURCES = 
-
-# XXX not 100% sure this is right
-#WINDOW_SYSTEM = solo
-
-include ../Makefile.template
-
diff --git a/src/mesa/drivers/dri/fb/fb_dri.c b/src/mesa/drivers/dri/fb/fb_dri.c
deleted file mode 100644
index ac07e57db1..0000000000
--- a/src/mesa/drivers/dri/fb/fb_dri.c
+++ /dev/null
@@ -1,792 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  6.3
- *
- * Copyright (C) 1999-2005  Brian Paul   All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/* Minimal swrast-based dri loadable driver.
- *
- * Todo:
- *   -- Use malloced (rather than framebuffer) memory for backbuffer
- *   -- 32bpp is hardwared -- fix
- *
- * NOTES:
- *   -- No mechanism for cliprects or resize notification --
- *      assumes this is a fullscreen device.  
- *   -- No locking -- assumes this is the only driver accessing this 
- *      device.
- *   -- Doesn't (yet) make use of any acceleration or other interfaces
- *      provided by fb.  Would be entirely happy working against any 
- *	fullscreen interface.
- *   -- HOWEVER: only a small number of pixelformats are supported, and
- *      the mechanism for choosing between them makes some assumptions
- *      that may not be valid everywhere.
- */
-
-#include "driver.h"
-#include "drm.h"
-#include "utils.h"
-#include "drirenderbuffer.h"
-
-#include "buffers.h"
-#include "main/extensions.h"
-#include "main/framebuffer.h"
-#include "main/renderbuffer.h"
-#include "vbo/vbo.h"
-#include "swrast/swrast.h"
-#include "swrast_setup/swrast_setup.h"
-#include "tnl/tnl.h"
-#include "tnl/tcontext.h"
-#include "tnl/t_pipeline.h"
-#include "drivers/common/driverfuncs.h"
-
-void fbSetSpanFunctions(driRenderbuffer *drb, const GLvisual *vis);
-
-typedef struct {
-   GLcontext *glCtx;		/* Mesa context */
-
-   struct {
-      __DRIcontext *context;	
-      __DRIscreen *screen;	
-      __DRIdrawable *drawable; /* drawable bound to this ctx */
-   } dri;
-   
-} fbContext, *fbContextPtr;
-
-#define FB_CONTEXT(ctx)		((fbContextPtr)(ctx->DriverCtx))
-
-
-static const GLubyte *
-get_string(GLcontext *ctx, GLenum pname)
-{
-   (void) ctx;
-   switch (pname) {
-      case GL_RENDERER:
-         return (const GLubyte *) "Mesa dumb framebuffer";
-      default:
-         return NULL;
-   }
-}
-
-
-static void
-update_state( GLcontext *ctx, GLuint new_state )
-{
-   /* not much to do here - pass it on */
-   _swrast_InvalidateState( ctx, new_state );
-   _swsetup_InvalidateState( ctx, new_state );
-   _vbo_InvalidateState( ctx, new_state );
-   _tnl_InvalidateState( ctx, new_state );
-}
-
-
-/**
- * Called by ctx->Driver.GetBufferSize from in core Mesa to query the
- * current framebuffer size.
- */
-static void
-get_buffer_size( GLframebuffer *buffer, GLuint *width, GLuint *height )
-{
-   GET_CURRENT_CONTEXT(ctx);
-   fbContextPtr fbmesa = FB_CONTEXT(ctx);
-
-   *width  = fbmesa->dri.drawable->w;
-   *height = fbmesa->dri.drawable->h;
-}
-
-
-static void
-updateFramebufferSize(GLcontext *ctx)
-{
-   fbContextPtr fbmesa = FB_CONTEXT(ctx);
-   struct gl_framebuffer *fb = ctx->WinSysDrawBuffer;
-   if (fbmesa->dri.drawable->w != fb->Width ||
-       fbmesa->dri.drawable->h != fb->Height) {
-      driUpdateFramebufferSize(ctx, fbmesa->dri.drawable);
-   }
-}
-
-static void
-viewport(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h)
-{
-   /* XXX this should be called after we acquire the DRI lock, not here */
-   updateFramebufferSize(ctx);
-}
-
-
-static void
-init_core_functions( struct dd_function_table *functions )
-{
-   functions->GetString = get_string;
-   functions->UpdateState = update_state;
-   functions->GetBufferSize = get_buffer_size;
-   functions->Viewport = viewport;
-
-   functions->Clear = _swrast_Clear;  /* could accelerate with blits */
-}
-
-
-/*
- * Generate code for span functions.
- */
-
-/* 24-bit BGR */
-#define NAME(PREFIX) PREFIX##_B8G8R8
-#define FORMAT GL_RGBA8
-#define SPAN_VARS \
-   driRenderbuffer *drb = (driRenderbuffer *) rb;
-#define INIT_PIXEL_PTR(P, X, Y) \
-   GLubyte *P = (GLubyte *)drb->Base.Data + (drb->Base.Height - (Y)) * drb->pitch + (X) * 3;
-#define INC_PIXEL_PTR(P) P += 3
-#define STORE_PIXEL(DST, X, Y, VALUE) \
-   DST[0] = VALUE[BCOMP]; \
-   DST[1] = VALUE[GCOMP]; \
-   DST[2] = VALUE[RCOMP]
-#define FETCH_PIXEL(DST, SRC) \
-   DST[RCOMP] = SRC[2]; \
-   DST[GCOMP] = SRC[1]; \
-   DST[BCOMP] = SRC[0]; \
-   DST[ACOMP] = 0xff
-
-#include "swrast/s_spantemp.h"
-
-
-/* 32-bit BGRA */
-#define NAME(PREFIX) PREFIX##_B8G8R8A8
-#define FORMAT GL_RGBA8
-#define SPAN_VARS \
-   driRenderbuffer *drb = (driRenderbuffer *) rb;
-#define INIT_PIXEL_PTR(P, X, Y) \
-   GLubyte *P = (GLubyte *)drb->Base.Data + (drb->Base.Height - (Y)) * drb->pitch + (X) * 4;
-#define INC_PIXEL_PTR(P) P += 4
-#define STORE_PIXEL(DST, X, Y, VALUE) \
-   DST[0] = VALUE[BCOMP]; \
-   DST[1] = VALUE[GCOMP]; \
-   DST[2] = VALUE[RCOMP]; \
-   DST[3] = VALUE[ACOMP]
-#define STORE_PIXEL_RGB(DST, X, Y, VALUE) \
-   DST[0] = VALUE[BCOMP]; \
-   DST[1] = VALUE[GCOMP]; \
-   DST[2] = VALUE[RCOMP]; \
-   DST[3] = 0xff
-#define FETCH_PIXEL(DST, SRC) \
-   DST[RCOMP] = SRC[2]; \
-   DST[GCOMP] = SRC[1]; \
-   DST[BCOMP] = SRC[0]; \
-   DST[ACOMP] = SRC[3]
-
-#include "swrast/s_spantemp.h"
-
-
-/* 16-bit BGR (XXX implement dithering someday) */
-#define NAME(PREFIX) PREFIX##_B5G6R5
-#define FORMAT GL_RGBA8
-#define SPAN_VARS \
-   driRenderbuffer *drb = (driRenderbuffer *) rb;
-#define INIT_PIXEL_PTR(P, X, Y) \
-   GLushort *P = (GLushort *)drb->Base.Data + (drb->Base.Height - (Y)) * drb->pitch + (X) * 2;
-#define INC_PIXEL_PTR(P) P += 1
-#define STORE_PIXEL(DST, X, Y, VALUE) \
-   DST[0] = ( (((VALUE[RCOMP]) & 0xf8) << 8) | (((VALUE[GCOMP]) & 0xfc) << 3) | ((VALUE[BCOMP]) >> 3) )
-#define FETCH_PIXEL(DST, SRC) \
-   DST[RCOMP] = ( (((SRC[0]) >> 8) & 0xf8) | (((SRC[0]) >> 11) & 0x7) ); \
-   DST[GCOMP] = ( (((SRC[0]) >> 3) & 0xfc) | (((SRC[0]) >>  5) & 0x3) ); \
-   DST[BCOMP] = ( (((SRC[0]) << 3) & 0xf8) | (((SRC[0])      ) & 0x7) ); \
-   DST[ACOMP] = 0xff
-
-#include "swrast/s_spantemp.h"
-
-
-/* 15-bit BGR (XXX implement dithering someday) */
-#define NAME(PREFIX) PREFIX##_B5G5R5
-#define FORMAT GL_RGBA8
-#define SPAN_VARS \
-   driRenderbuffer *drb = (driRenderbuffer *) rb;
-#define INIT_PIXEL_PTR(P, X, Y) \
-   GLushort *P = (GLushort *)drb->Base.Data + (drb->Base.Height - (Y)) * drb->pitch + (X) * 2;
-#define INC_PIXEL_PTR(P) P += 1
-#define STORE_PIXEL(DST, X, Y, VALUE) \
-   DST[0] = ( (((VALUE[RCOMP]) & 0xf8) << 7) | (((VALUE[GCOMP]) & 0xf8) << 2) | ((VALUE[BCOMP]) >> 3) )
-#define FETCH_PIXEL(DST, SRC) \
-   DST[RCOMP] = ( (((SRC[0]) >> 7) & 0xf8) | (((SRC[0]) >> 10) & 0x7) ); \
-   DST[GCOMP] = ( (((SRC[0]) >> 2) & 0xf8) | (((SRC[0]) >>  5) & 0x7) ); \
-   DST[BCOMP] = ( (((SRC[0]) << 3) & 0xf8) | (((SRC[0])      ) & 0x7) ); \
-   DST[ACOMP] = 0xff
-
-#include "swrast/s_spantemp.h"
-
-
-/* 8-bit color index */
-#define NAME(PREFIX) PREFIX##_CI8
-#define FORMAT GL_COLOR_INDEX8_EXT
-#define SPAN_VARS \
-   driRenderbuffer *drb = (driRenderbuffer *) rb;
-#define INIT_PIXEL_PTR(P, X, Y) \
-   GLubyte *P = (GLubyte *)drb->Base.Data + (drb->Base.Height - (Y)) * drb->pitch + (X);
-#define INC_PIXEL_PTR(P) P += 1
-#define STORE_PIXEL(DST, X, Y, VALUE) \
-   *DST = VALUE[0]
-#define FETCH_PIXEL(DST, SRC) \
-   DST = SRC[0]
-
-#include "swrast/s_spantemp.h"
-
-
-
-void
-fbSetSpanFunctions(driRenderbuffer *drb, const GLvisual *vis)
-{
-   ASSERT(drb->Base.InternalFormat == GL_RGBA);
-   if (drb->Base.InternalFormat == GL_RGBA) {
-      if (vis->redBits == 5 && vis->greenBits == 6 && vis->blueBits == 5) {
-         drb->Base.GetRow = get_row_B5G6R5;
-         drb->Base.GetValues = get_values_B5G6R5;
-         drb->Base.PutRow = put_row_B5G6R5;
-         drb->Base.PutMonoRow = put_mono_row_B5G6R5;
-         drb->Base.PutRowRGB = put_row_rgb_B5G6R5;
-         drb->Base.PutValues = put_values_B5G6R5;
-         drb->Base.PutMonoValues = put_mono_values_B5G6R5;
-      }
-      else if (vis->redBits == 5 && vis->greenBits == 5 && vis->blueBits == 5) {
-         drb->Base.GetRow = get_row_B5G5R5;
-         drb->Base.GetValues = get_values_B5G5R5;
-         drb->Base.PutRow = put_row_B5G5R5;
-         drb->Base.PutMonoRow = put_mono_row_B5G5R5;
-         drb->Base.PutRowRGB = put_row_rgb_B5G5R5;
-         drb->Base.PutValues = put_values_B5G5R5;
-         drb->Base.PutMonoValues = put_mono_values_B5G5R5;
-      }
-      else if (vis->redBits == 8 && vis->greenBits == 8 && vis->blueBits == 8
-               && vis->alphaBits == 8) {
-         drb->Base.GetRow = get_row_B8G8R8A8;
-         drb->Base.GetValues = get_values_B8G8R8A8;
-         drb->Base.PutRow = put_row_B8G8R8A8;
-         drb->Base.PutMonoRow = put_mono_row_B8G8R8A8;
-         drb->Base.PutRowRGB = put_row_rgb_B8G8R8A8;
-         drb->Base.PutValues = put_values_B8G8R8A8;
-         drb->Base.PutMonoValues = put_mono_values_B8G8R8A8;
-      }
-      else if (vis->redBits == 8 && vis->greenBits == 8 && vis->blueBits == 8
-               && vis->alphaBits == 0) {
-         drb->Base.GetRow = get_row_B8G8R8;
-         drb->Base.GetValues = get_values_B8G8R8;
-         drb->Base.PutRow = put_row_B8G8R8;
-         drb->Base.PutMonoRow = put_mono_row_B8G8R8;
-         drb->Base.PutRowRGB = put_row_rgb_B8G8R8;
-         drb->Base.PutValues = put_values_B8G8R8;
-         drb->Base.PutMonoValues = put_mono_values_B8G8R8;
-      }
-      else if (vis->indexBits == 8) {
-         drb->Base.GetRow = get_row_CI8;
-         drb->Base.GetValues = get_values_CI8;
-         drb->Base.PutRow = put_row_CI8;
-         drb->Base.PutMonoRow = put_mono_row_CI8;
-         drb->Base.PutValues = put_values_CI8;
-         drb->Base.PutMonoValues = put_mono_values_CI8;
-      }
-   }
-   else {
-      /* hardware z/stencil/etc someday */
-   }
-}
-
-
-
-/* Initialize the driver specific screen private data.
- */
-static GLboolean
-fbInitDriver( __DRIscreen *sPriv )
-{
-   sPriv->private = NULL;
-   return GL_TRUE;
-}
-
-static void
-fbDestroyScreen( __DRIscreen *sPriv )
-{
-}
-
-
-/* Create the device specific context.
- */
-static GLboolean
-fbCreateContext( const __GLcontextModes *glVisual,
-		 __DRIcontext *driContextPriv,
-		 void *sharedContextPrivate)
-{
-   fbContextPtr fbmesa;
-   GLcontext *ctx, *shareCtx;
-   struct dd_function_table functions;
-
-   assert(glVisual);
-   assert(driContextPriv);
-
-   /* Allocate the Fb context */
-   fbmesa = (fbContextPtr) calloc(1,  sizeof(*fbmesa) );
-   if ( !fbmesa )
-      return GL_FALSE;
-
-   /* Init default driver functions then plug in our FBdev-specific functions
-    */
-   _mesa_init_driver_functions(&functions);
-   init_core_functions(&functions);
-
-   /* Allocate the Mesa context */
-   if (sharedContextPrivate)
-      shareCtx = ((fbContextPtr) sharedContextPrivate)->glCtx;
-   else
-      shareCtx = NULL;
-
-   ctx = fbmesa->glCtx = _mesa_create_context(glVisual, shareCtx, 
-					      &functions, (void *) fbmesa);
-   if (!fbmesa->glCtx) {
-      free(fbmesa);
-      return GL_FALSE;
-   }
-   driContextPriv->driverPrivate = fbmesa;
-
-   /* Create module contexts */
-   _swrast_CreateContext( ctx );
-   _vbo_CreateContext( ctx );
-   _tnl_CreateContext( ctx );
-   _swsetup_CreateContext( ctx );
-   _swsetup_Wakeup( ctx );
-
-
-   /* use default TCL pipeline */
-   {
-      TNLcontext *tnl = TNL_CONTEXT(ctx);
-      tnl->Driver.RunPipeline = _tnl_run_pipeline;
-   }
-
-   _mesa_enable_sw_extensions(ctx);
-
-   return GL_TRUE;
-}
-
-
-static void
-fbDestroyContext( __DRIcontext *driContextPriv )
-{
-   GET_CURRENT_CONTEXT(ctx);
-   fbContextPtr fbmesa = (fbContextPtr) driContextPriv->driverPrivate;
-   fbContextPtr current = ctx ? FB_CONTEXT(ctx) : NULL;
-
-   /* check if we're deleting the currently bound context */
-   if (fbmesa == current) {
-      _mesa_make_current(NULL, NULL, NULL);
-   }
-
-   /* Free fb context resources */
-   if ( fbmesa ) {
-      _swsetup_DestroyContext( fbmesa->glCtx );
-      _tnl_DestroyContext( fbmesa->glCtx );
-      _vbo_DestroyContext( fbmesa->glCtx );
-      _swrast_DestroyContext( fbmesa->glCtx );
-
-      /* free the Mesa context */
-      fbmesa->glCtx->DriverCtx = NULL;
-      _mesa_destroy_context( fbmesa->glCtx );
-
-      free( fbmesa );
-   }
-}
-
-
-/* Create and initialize the Mesa and driver specific pixmap buffer
- * data.
- */
-static GLboolean
-fbCreateBuffer( __DRIscreen *driScrnPriv,
-		__DRIdrawable *driDrawPriv,
-		const __GLcontextModes *mesaVis,
-		GLboolean isPixmap )
-{
-   struct gl_framebuffer *mesa_framebuffer;
-   
-   if (isPixmap) {
-      return GL_FALSE; /* not implemented */
-   }
-   else {
-      const GLboolean swDepth = mesaVis->depthBits > 0;
-      const GLboolean swAlpha = mesaVis->alphaBits > 0;
-      const GLboolean swAccum = mesaVis->accumRedBits > 0;
-      const GLboolean swStencil = mesaVis->stencilBits > 0;
-      
-      mesa_framebuffer = _mesa_create_framebuffer(mesaVis);
-      if (!mesa_framebuffer)
-         return 0;
-
-      /* XXX double-check these parameters (bpp vs cpp, etc) */
-      {
-         driRenderbuffer *drb = driNewRenderbuffer(MESA_FORMAT_ARGB8888,
-                                                   driScrnPriv->pFB,
-                                                   driScrnPriv->fbBPP / 8,
-                                                   driScrnPriv->fbOrigin,
-                                                   driScrnPriv->fbStride,
-                                                   driDrawPriv);
-         fbSetSpanFunctions(drb, mesaVis);
-         _mesa_add_renderbuffer(mesa_framebuffer,
-                                BUFFER_FRONT_LEFT, &drb->Base);
-      }
-      if (mesaVis->doubleBufferMode) {
-         /* XXX what are the correct origin/stride values? */
-         GLvoid *backBuf = malloc(driScrnPriv->fbStride
-                                        * driScrnPriv->fbHeight);
-         driRenderbuffer *drb = driNewRenderbuffer(MESA_FORMAT_ARGB8888,
-                                                   backBuf,
-                                                   driScrnPriv->fbBPP /8,
-                                                   driScrnPriv->fbOrigin,
-                                                   driScrnPriv->fbStride,
-                                                   driDrawPriv);
-         fbSetSpanFunctions(drb, mesaVis);
-         _mesa_add_renderbuffer(mesa_framebuffer,
-                                BUFFER_BACK_LEFT, &drb->Base);
-      }
-
-      _mesa_add_soft_renderbuffers(mesa_framebuffer,
-                                   GL_FALSE, /* color */
-                                   swDepth,
-                                   swStencil,
-                                   swAccum,
-                                   swAlpha, /* or always zero? */
-                                   GL_FALSE /* aux */);
-      
-      driDrawPriv->driverPrivate = mesa_framebuffer;
-
-      return 1;
-   }
-}
-
-
-static void
-fbDestroyBuffer(__DRIdrawable *driDrawPriv)
-{
-   _mesa_reference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate)), NULL);
-}
-
-
-
-/* If the backbuffer is on a videocard, this is extraordinarily slow!
- */
-static void
-fbSwapBuffers( __DRIdrawable *dPriv )
-{
-   struct gl_framebuffer *mesa_framebuffer = (struct gl_framebuffer *)dPriv->driverPrivate;
-   struct gl_renderbuffer * front_renderbuffer = mesa_framebuffer->Attachment[BUFFER_FRONT_LEFT].Renderbuffer;
-   void *frontBuffer = front_renderbuffer->Data;
-   int currentPitch = ((driRenderbuffer *)front_renderbuffer)->pitch;
-   void *backBuffer = mesa_framebuffer->Attachment[BUFFER_BACK_LEFT].Renderbuffer->Data;
-
-   if (dPriv->driContextPriv && dPriv->driContextPriv->driverPrivate) {
-      fbContextPtr fbmesa = (fbContextPtr) dPriv->driContextPriv->driverPrivate;
-      GLcontext *ctx = fbmesa->glCtx;
-      
-      if (ctx->Visual.doubleBufferMode) {
-	 int i;
-	 int offset = 0;
-         char *tmp = malloc(currentPitch);
-
-         _mesa_notifySwapBuffers( ctx );  /* flush pending rendering comands */
-
-         ASSERT(frontBuffer);
-         ASSERT(backBuffer);
-
-	 for (i = 0; i < dPriv->h; i++) {
-            memcpy(tmp, (char *) backBuffer + offset, currentPitch);
-            memcpy((char *) frontBuffer + offset, tmp, currentPitch);
-            offset += currentPitch;
-	 }
-	    
-	 free(tmp);
-      }
-   }
-   else {
-      /* XXX this shouldn't be an error but we can't handle it for now */
-      _mesa_problem(NULL, "fbSwapBuffers: drawable has no context!\n");
-   }
-}
-
-
-/* Force the context `c' to be the current context and associate with it
- * buffer `b'.
- */
-static GLboolean
-fbMakeCurrent( __DRIcontext *driContextPriv,
-	       __DRIdrawable *driDrawPriv,
-	       __DRIdrawable *driReadPriv )
-{
-   if ( driContextPriv ) {
-      fbContextPtr newFbCtx = 
-            (fbContextPtr) driContextPriv->driverPrivate;
-
-      newFbCtx->dri.drawable = driDrawPriv;
-
-      _mesa_make_current( newFbCtx->glCtx, 
-                           driDrawPriv->driverPrivate,
-                           driReadPriv->driverPrivate);
-   } else {
-      _mesa_make_current( NULL, NULL, NULL );
-   }
-
-   return GL_TRUE;
-}
-
-
-/* Force the context `c' to be unbound from its buffer.
- */
-static GLboolean
-fbUnbindContext( __DRIcontext *driContextPriv )
-{
-   return GL_TRUE;
-}
-
-static struct __DriverAPIRec fbAPI = {
-   .InitDriver      = fbInitDriver,
-   .DestroyScreen   = fbDestroyScreen,
-   .CreateContext   = fbCreateContext,
-   .DestroyContext  = fbDestroyContext,
-   .CreateBuffer    = fbCreateBuffer,
-   .DestroyBuffer   = fbDestroyBuffer,
-   .SwapBuffers     = fbSwapBuffers,
-   .MakeCurrent     = fbMakeCurrent,
-   .UnbindContext   = fbUnbindContext,
-};
-
-
-
-static int
-__driValidateMode(const DRIDriverContext *ctx )
-{
-   return 1;
-}
-
-static int
-__driInitFBDev( struct DRIDriverContextRec *ctx )
-{
-   /* Note that drmOpen will try to load the kernel module, if needed. */
-   /* we need a fbdev drm driver - it will only track maps */
-   ctx->drmFD = drmOpen("radeon", NULL );
-   if (ctx->drmFD < 0) {
-      fprintf(stderr, "[drm] drmOpen failed\n");
-      return 0;
-   }
-
-   ctx->shared.SAREASize = SAREA_MAX;
-
-   if (drmAddMap( ctx->drmFD,
-       0,
-       ctx->shared.SAREASize,
-       DRM_SHM,
-       DRM_CONTAINS_LOCK,
-       &ctx->shared.hSAREA) < 0)
-   {
-      fprintf(stderr, "[drm] drmAddMap failed\n");
-      return 0;
-   }
-   fprintf(stderr, "[drm] added %d byte SAREA at 0x%08lx\n",
-           ctx->shared.SAREASize,
-           (unsigned long) ctx->shared.hSAREA);
-
-   if (drmMap( ctx->drmFD,
-       ctx->shared.hSAREA,
-       ctx->shared.SAREASize,
-       (drmAddressPtr)(&ctx->pSAREA)) < 0)
-   {
-      fprintf(stderr, "[drm] drmMap failed\n");
-      return 0;
-   }
-   memset(ctx->pSAREA, 0, ctx->shared.SAREASize);
-   fprintf(stderr, "[drm] mapped SAREA 0x%08lx to %p, size %d\n",
-           (unsigned long) ctx->shared.hSAREA, ctx->pSAREA,
-           ctx->shared.SAREASize);
-   
-   /* Need to AddMap the framebuffer and mmio regions here:
-   */
-   if (drmAddMap( ctx->drmFD,
-       (drm_handle_t)ctx->FBStart,
-       ctx->FBSize,
-       DRM_FRAME_BUFFER,
-#ifndef _EMBEDDED
-		  0,
-#else
-		  DRM_READ_ONLY,
-#endif
-		  &ctx->shared.hFrameBuffer) < 0)
-   {
-      fprintf(stderr, "[drm] drmAddMap framebuffer failed\n");
-      return 0;
-   }
-
-   fprintf(stderr, "[drm] framebuffer handle = 0x%08lx\n",
-           (unsigned long) ctx->shared.hFrameBuffer);
-
-   return 1;
-}
-
-static void
-__driHaltFBDev( struct DRIDriverContextRec *ctx )
-{
-}
-
-struct DRIDriverRec __driDriver = {
-   __driValidateMode,
-   __driValidateMode,
-   __driInitFBDev,
-   __driHaltFBDev
-};
-
-static __GLcontextModes *
-fbFillInModes( __DRIscreen *psp,
-	       unsigned pixel_bits, unsigned depth_bits,
-	       unsigned stencil_bits, GLboolean have_back_buffer )
-{
-   __GLcontextModes * modes;
-   __GLcontextModes * m;
-   unsigned num_modes;
-   unsigned depth_buffer_factor;
-   unsigned back_buffer_factor;
-   GLenum fb_format;
-   GLenum fb_type;
-
-    /* Right now GLX_SWAP_COPY_OML isn't supported, but it would be easy
-   * enough to add support.  Basically, if a context is created with an
-   * fbconfig where the swap method is GLX_SWAP_COPY_OML, pageflipping
-   * will never be used.
-    */
-   static const GLenum back_buffer_modes[] = {
-      GLX_NONE, GLX_SWAP_UNDEFINED_OML /*, GLX_SWAP_COPY_OML */
-   };
-
-   uint8_t depth_bits_array[2];
-   uint8_t stencil_bits_array[2];
-
-
-   depth_bits_array[0] = depth_bits;
-   depth_bits_array[1] = depth_bits;
-    
-    /* Just like with the accumulation buffer, always provide some modes
-   * with a stencil buffer.  It will be a sw fallback, but some apps won't
-   * care about that.
-    */
-   stencil_bits_array[0] = 0;
-   stencil_bits_array[1] = (stencil_bits == 0) ? 8 : stencil_bits;
-
-   depth_buffer_factor = ((depth_bits != 0) || (stencil_bits != 0)) ? 2 : 1;
-   back_buffer_factor  = (have_back_buffer) ? 2 : 1;
-
-   num_modes = depth_buffer_factor * back_buffer_factor * 4;
-
-   if ( pixel_bits == 16 ) {
-      fb_format = GL_RGB;
-      fb_type = GL_UNSIGNED_SHORT_5_6_5;
-   }
-   else {
-      fb_format = GL_RGBA;
-      fb_type = GL_UNSIGNED_INT_8_8_8_8_REV;
-   }
-
-   modes = (*psp->contextModes->createContextModes)( num_modes, sizeof( __GLcontextModes ) );
-   m = modes;
-   if ( ! driFillInModes( & m, fb_format, fb_type,
-          depth_bits_array, stencil_bits_array, depth_buffer_factor,
-          back_buffer_modes, back_buffer_factor,
-          GLX_TRUE_COLOR ) ) {
-             fprintf( stderr, "[%s:%u] Error creating FBConfig!\n",
-                      __func__, __LINE__ );
-             return NULL;
-          }
-
-          if ( ! driFillInModes( & m, fb_format, fb_type,
-                 depth_bits_array, stencil_bits_array, depth_buffer_factor,
-                 back_buffer_modes, back_buffer_factor,
-                 GLX_DIRECT_COLOR ) ) {
-                    fprintf( stderr, "[%s:%u] Error creating FBConfig!\n",
-                             __func__, __LINE__ );
-                    return NULL;
-                 }
-
-    /* Mark the visual as slow if there are "fake" stencil bits.
-    */
-                 for ( m = modes ; m != NULL ; m = m->next ) {
-                    if ( (m->stencilBits != 0) && (m->stencilBits != stencil_bits) ) {
-                       m->visualRating = GLX_SLOW_CONFIG;
-                    }
-                 }
-
-                 return modes;
-}
-
-
-/**
- * This is the bootstrap function for the driver.  libGL supplies all of the
- * requisite information about the system, and the driver initializes itself.
- * This routine also fills in the linked list pointed to by \c driver_modes
- * with the \c __GLcontextModes that the driver can support for windows or
- * pbuffers.
- * 
- * \return A pointer to a \c __DRIscreen on success, or \c NULL on 
- *         failure.
- */
-PUBLIC
-void * __driCreateNewScreen( __DRInativeDisplay *dpy, int scrn, __DRIscreen *psc,
-                                   const __GLcontextModes * modes,
-                                   const __DRIversion * ddx_version,
-                                   const __DRIversion * dri_version,
-                                   const __DRIversion * drm_version,
-                                   const __DRIframebuffer * frame_buffer,
-                                   drmAddress pSAREA, int fd, 
-                                   int internal_api_version,
-                                   __GLcontextModes ** driver_modes )
-{
-   __DRIscreen *psp;
-   static const __DRIversion ddx_expected = { 4, 0, 0 };
-   static const __DRIversion dri_expected = { 4, 0, 0 };
-   static const __DRIversion drm_expected = { 1, 5, 0 };
-
-
-   if ( ! driCheckDriDdxDrmVersions2( "fb",
-          dri_version, & dri_expected,
-          ddx_version, & ddx_expected,
-          drm_version, & drm_expected ) ) {
-             return NULL;
-          }
-      
-          psp = __driUtilCreateNewScreen(dpy, scrn, psc, NULL,
-                                         ddx_version, dri_version, drm_version,
-                                         frame_buffer, pSAREA, fd,
-                                         internal_api_version, &fbAPI);
-          if ( psp != NULL ) {
-	     *driver_modes = fbFillInModes( psp, psp->fbBPP,
-					    (psp->fbBPP == 16) ? 16 : 24,
-					    (psp->fbBPP == 16) ? 0  : 8,
-					    1);
-          }
-
-          return (void *) psp;
-}
-
-/* This is the table of extensions that the loader will dlsym() for. */
-PUBLIC const __DRIextension *__driDriverExtensions[] = {
-    &driCoreExtension.base,
-    &driLegacyExtension.base,
-    NULL
-};
diff --git a/src/mesa/drivers/dri/ffb/Makefile b/src/mesa/drivers/dri/ffb/Makefile
deleted file mode 100644
index e9da8f9066..0000000000
--- a/src/mesa/drivers/dri/ffb/Makefile
+++ /dev/null
@@ -1,35 +0,0 @@
-# src/mesa/drivers/dri/ffb/Makefile
-
-TOP = ../../../../..
-include $(TOP)/configs/current
-
-LIBNAME = ffb_dri.so
-
-# not yet
-# MINIGLX_SOURCES = server/ffb_dri.c 
-
-DRIVER_SOURCES = \
-	ffb_bitmap.c \
-	ffb_clear.c \
-	ffb_dd.c \
-	ffb_depth.c \
-	ffb_fog.c \
-	ffb_lines.c \
-	ffb_points.c \
-	ffb_span.c \
-	ffb_state.c \
-	ffb_stencil.c \
-	ffb_tex.c \
-	ffb_tris.c \
-	ffb_vb.c \
-	ffb_xmesa.c
-
-C_SOURCES = \
-	$(COMMON_SOURCES) \
-	$(DRIVER_SOURCES)
-
-
-ASM_SOURCES = 
-
-include ../Makefile.template
-
diff --git a/src/mesa/drivers/dri/ffb/ffb_bitmap.c b/src/mesa/drivers/dri/ffb/ffb_bitmap.c
deleted file mode 100644
index b71a552c9d..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_bitmap.c
+++ /dev/null
@@ -1,158 +0,0 @@
-/* 
- *
- * GLX Hardware Device Driver for Sun Creator/Creator3D
- * Copyright (C) 2001 David S. Miller
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * DAVID MILLER, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM, 
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
- * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- *
- *    David S. Miller <davem@redhat.com>
- */
-
-#include "ffb_context.h"
-#include "ffb_state.h"
-#include "ffb_lock.h"
-#include "ffb_bitmap.h"
-#include "swrast/swrast.h"
-#include "main/macros.h"
-
-/* Compute ceiling of integer quotient of A divided by B: */
-#define CEILING( A, B )  ( (A) % (B) == 0 ? (A)/(B) : (A)/(B)+1 )
-
-#undef FFB_BITMAP_TRACE
-
-static void
-ffb_bitmap(GLcontext *ctx, GLint px, GLint py,
-	   GLsizei width, GLsizei height,
-	   const struct gl_pixelstore_attrib *unpack,
-	   const GLubyte *bitmap)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	ffb_fbcPtr ffb = fmesa->regs;
-	__DRIdrawable *dPriv = fmesa->driDrawable;
-	unsigned int ppc, pixel;
-	GLint row, col, row_stride;
-	const GLubyte *src;
-	char *buf;
-
-	if (fmesa->bad_fragment_attrs != 0)
-		_swrast_Bitmap(ctx, px, py, width,
-			       height, unpack, bitmap);
-
-	pixel = (((((GLuint)(ctx->Current.RasterColor[0] * 255.0f)) & 0xff) <<  0) |
-		 ((((GLuint)(ctx->Current.RasterColor[1] * 255.0f)) & 0xff) <<  8) |
-		 ((((GLuint)(ctx->Current.RasterColor[2] * 255.0f)) & 0xff) << 16) |
-		 ((((GLuint)(ctx->Current.RasterColor[3] * 255.0f)) & 0xff) << 24));
-
-#ifdef FFB_BITMAP_TRACE
-	fprintf(stderr, "ffb_bitmap: ppc(%08x) fbc(%08x) cmp(%08x) pixel(%08x)\n",
-		fmesa->ppc, fmesa->fbc, fmesa->cmp, pixel);
-#endif
-
-	LOCK_HARDWARE(fmesa);
-	fmesa->hw_locked = 1;
-
-	if (fmesa->state_dirty)
-		ffbSyncHardware(fmesa);
-
-	ppc = fmesa->ppc;
-
-	FFBFifo(fmesa, 4);
-	ffb->ppc = ((ppc &
-		     ~(FFB_PPC_TBE_MASK | FFB_PPC_ZS_MASK | FFB_PPC_CS_MASK | FFB_PPC_XS_MASK))
-		    | (FFB_PPC_TBE_TRANSPARENT | FFB_PPC_ZS_CONST | FFB_PPC_CS_CONST |
-		       (ctx->Color.BlendEnabled ? FFB_PPC_XS_CONST : FFB_PPC_XS_WID)));
-	ffb->constz = ((GLuint) (ctx->Current.RasterPos[2] * 0x0fffffff));
-	ffb->fg = pixel;
-	ffb->fontinc = (0 << 16) | 32;
-
-	buf = (char *)(fmesa->sfb32 + (dPriv->x << 2) + (dPriv->y << 13));
-
-	row_stride = (unpack->Alignment * CEILING(width, 8 * unpack->Alignment));
-	src = (const GLubyte *) (bitmap +
-				 (unpack->SkipRows * row_stride) +
-				 (unpack->SkipPixels / 8));
-	if (unpack->LsbFirst == GL_TRUE) {
-		for (row = 0; row < height; row++, src += row_stride) {
-			const GLubyte *row_src = src;
-			GLuint base_x, base_y;
-
-			base_x = dPriv->x + px;
-			base_y = dPriv->y + (dPriv->h - (py + row));
-
-			FFBFifo(fmesa, 1);
-			ffb->fontxy = (base_y << 16) | base_x;
-
-			for (col = 0; col < width; col += 32, row_src += 4) {
-				GLint bitnum, font_w = (width - col);
-				GLuint font_data;
-
-				if (font_w > 32)
-					font_w = 32;
-				font_data = 0;
-				for (bitnum = 0; bitnum < 32; bitnum++) {
-					const GLubyte val = row_src[bitnum >> 3];
-
-					if (val & (1 << (bitnum & (8 - 1))))
-						font_data |= (1 << (31 - bitnum));
-				}
-
-				FFBFifo(fmesa, 2);
-				ffb->fontw = font_w;
-				ffb->font = font_data;
-			}
-		}
-	} else {
-		for (row = 0; row < height; row++, src += row_stride) {
-			const GLubyte *row_src = src;
-			GLuint base_x, base_y;
-
-			base_x = dPriv->x + px;
-			base_y = dPriv->y + (dPriv->h - (py + row));
-
-			FFBFifo(fmesa, 1);
-			ffb->fontxy = (base_y << 16) | base_x;
-
-			for (col = 0; col < width; col += 32, row_src += 4) {
-				GLint font_w = (width - col);
-
-				if (font_w > 32)
-					font_w = 32;
-				FFBFifo(fmesa, 2);
-				ffb->fontw = font_w;
-				ffb->font = (((unsigned int)row_src[0]) << 24 |
-					     ((unsigned int)row_src[1]) << 16 |
-					     ((unsigned int)row_src[2]) <<  8 |
-					     ((unsigned int)row_src[3]) <<  0);
-			}
-		}
-	}
-
-	FFBFifo(fmesa, 1);
-	ffb->ppc = ppc;
-	fmesa->ffbScreen->rp_active = 1;
-
-	UNLOCK_HARDWARE(fmesa);
-	fmesa->hw_locked = 0;
-}
-
-void ffbDDInitBitmapFuncs(GLcontext *ctx)
-{
-	ctx->Driver.Bitmap = ffb_bitmap;
-}
diff --git a/src/mesa/drivers/dri/ffb/ffb_bitmap.h b/src/mesa/drivers/dri/ffb/ffb_bitmap.h
deleted file mode 100644
index 0ccbc57bd0..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_bitmap.h
+++ /dev/null
@@ -1,7 +0,0 @@
-
-#ifndef _FFB_BITMAP_H
-#define _FFB_BITMAP_H
-
-extern void ffbDDInitBitmapFuncs(GLcontext *);
-
-#endif /* !(_FFB_BITMAP_H) */
diff --git a/src/mesa/drivers/dri/ffb/ffb_clear.c b/src/mesa/drivers/dri/ffb/ffb_clear.c
deleted file mode 100644
index aa3fa0a86c..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_clear.c
+++ /dev/null
@@ -1,335 +0,0 @@
-/* 
- *
- * GLX Hardware Device Driver for Sun Creator/Creator3D
- * Copyright (C) 2000 David S. Miller
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * DAVID MILLER, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM, 
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
- * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- *
- *    David S. Miller <davem@redhat.com>
- */
-
-#include "main/mtypes.h"
-
-#include "main/mm.h"
-#include "ffb_dd.h"
-#include "ffb_span.h"
-#include "ffb_context.h"
-#include "ffb_vb.h"
-#include "ffb_clear.h"
-#include "ffb_lock.h"
-
-#undef CLEAR_TRACE
-
-#define BOX_AREA(__w, __h)	((int)(__w) * (int)(__h))
-
-/* Compute the page aligned box for a page mode fast fill.
- * In 'ework' this returns greater than zero if there are some odd
- * edges to take care of which are outside of the page aligned area.
- * It will place less than zero there if the box is too small,
- * indicating that a different method must be used to fill it.
- */
-#define CreatorPageFillParms(ffp, x, y, w, h, px, py, pw, ph, ework) \
-do {	int xdiff, ydiff; \
-	int pf_bh = ffp->pagefill_height; \
-	int pf_bw = ffp->pagefill_width; \
-	py = ((y + (pf_bh - 1)) & ~(pf_bh - 1)); \
-	ydiff = py - y; \
-	px = ffp->Pf_AlignTab[x + (pf_bw - 1)]; \
-	xdiff = px - x; \
-	ph = ((h - ydiff) & ~(pf_bh - 1)); \
-	if(ph <= 0) \
-		ework = -1; \
-	else { \
-		pw = ffp->Pf_AlignTab[w - xdiff]; \
-		if(pw <= 0) { \
-			ework = -1; \
-		} else { \
-			ework = (((xdiff > 0)		|| \
-				  (ydiff > 0)		|| \
-				  ((w - pw) > 0)	|| \
-				  ((h - ph) > 0))) ? 1 : 0; \
-		} \
-	} \
-} while(0);
-
-struct ff_fixups {
-	int x, y, width, height;
-};
-
-/* Compute fixups of non-page aligned areas after a page fill.
- * Return the number of fixups needed.
- */
-static INLINE int
-CreatorComputePageFillFixups(struct ff_fixups *fixups,
-			     int x, int y, int w, int h,
-			     int paligned_x, int paligned_y,
-			     int paligned_w, int paligned_h)
-{
-	int nfixups = 0;
-
-	/* FastFill Left */
-	if(paligned_x != x) {
-		fixups[nfixups].x = x;
-		fixups[nfixups].y = paligned_y;
-		fixups[nfixups].width = paligned_x - x;
-		fixups[nfixups].height = paligned_h;
-		nfixups++;
-	}
-	/* FastFill Top */
-	if(paligned_y != y) {
-		fixups[nfixups].x = x;
-		fixups[nfixups].y = y;
-		fixups[nfixups].width = w;
-		fixups[nfixups].height = paligned_y - y;
-		nfixups++;
-	}
-	/* FastFill Right */
-	if((x+w) != (paligned_x+paligned_w)) {
-		fixups[nfixups].x = (paligned_x+paligned_w);
-		fixups[nfixups].y = paligned_y;
-		fixups[nfixups].width = (x+w) - fixups[nfixups].x;
-		fixups[nfixups].height = paligned_h;
-		nfixups++;
-	}
-	/* FastFill Bottom */
-	if((y+h) != (paligned_y+paligned_h)) {
-		fixups[nfixups].x = x;
-		fixups[nfixups].y = (paligned_y+paligned_h);
-		fixups[nfixups].width = w;
-		fixups[nfixups].height = (y+h) - fixups[nfixups].y;
-		nfixups++;
-	}
-	return nfixups;
-}
-
-static void
-ffb_do_clear(GLcontext *ctx, __DRIdrawable *dPriv)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	FFBDRIPtr gDRIPriv = (FFBDRIPtr) fmesa->driScreen->pDevPriv;
-	ffb_fbcPtr ffb = fmesa->regs;
-	drm_clip_rect_t *box = dPriv->pClipRects;
-	int nc = dPriv->numClipRects;
-	GLint cx, cy, cw, ch;
-
-	/* compute region after locking: */
-	cx = ctx->DrawBuffer->_Xmin;
-	cy = ctx->DrawBuffer->_Ymin;
-	cw = ctx->DrawBuffer->_Xmax - cx;
-	ch = ctx->DrawBuffer->_Ymax - cy;
-
-	cy  = dPriv->h - cy - ch;
-	cx += dPriv->x;
-	cy += dPriv->y;
-
-	while (nc--) {
-		GLint x = box[nc].x1;
-		GLint y = box[nc].y1;
-		GLint width = box[nc].x2 - x;
-		GLint height = box[nc].y2 - y;
-		int paligned_y, paligned_x;
-		int paligned_h, paligned_w = 0;
-		int extra_work;
-
-		if (BOX_AREA(width, height) < gDRIPriv->fastfill_small_area) {
-			FFBFifo(fmesa, 5);
-			ffb->drawop = FFB_DRAWOP_RECTANGLE;
-			ffb->by = y;
-			ffb->bx = x;
-			ffb->bh = height;
-			ffb->bw = width;
-			continue;
-		}
-
-		FFBFifo(fmesa, 1);
-		ffb->drawop = FFB_DRAWOP_FASTFILL;
-
-		if (gDRIPriv->disable_pagefill ||
-		    (width < (gDRIPriv->pagefill_width<<1)) ||
-		    (height < (gDRIPriv->pagefill_height<<1)))
-			goto do_fastfill;
-
-		CreatorPageFillParms(gDRIPriv,
-				     x, y, width, height,
-				     paligned_x, paligned_y,
-				     paligned_w, paligned_h, extra_work);
-
-		if (extra_work < 0 ||
-		    BOX_AREA(paligned_w, paligned_h) < gDRIPriv->pagefill_small_area) {
-		do_fastfill:
-			FFBFifo(fmesa, 10);
-			ffb->by = FFB_FASTFILL_COLOR_BLK;
-			ffb->dy = 0;
-			ffb->dx = 0;
-			ffb->bh = gDRIPriv->fastfill_height;
-			ffb->bw = (gDRIPriv->fastfill_width * 4);
-			ffb->by = FFB_FASTFILL_BLOCK;
-			ffb->dy = y;
-			ffb->dx = x;
-			ffb->bh = (height + (y & (gDRIPriv->fastfill_height - 1)));
-			ffb->bx = (width + (x & (gDRIPriv->fastfill_width - 1)));
-			continue;
-		}
-
-		/* Ok, page fill is possible and worth it. */
-		FFBFifo(fmesa, 15);
-		ffb->by = FFB_FASTFILL_COLOR_BLK;
-		ffb->dy = 0;
-		ffb->dx = 0;
-		ffb->bh = gDRIPriv->fastfill_height;
-		ffb->bw = gDRIPriv->fastfill_width * 4;
-		ffb->by = FFB_FASTFILL_BLOCK_X;
-		ffb->dy = 0;
-		ffb->dx = 0;
-		ffb->bh = gDRIPriv->pagefill_height;
-		ffb->bw = gDRIPriv->pagefill_width * 4;
-		ffb->by = FFB_FASTFILL_PAGE;
-		ffb->dy = paligned_y;
-		ffb->dx = paligned_x;
-		ffb->bh = paligned_h;
-		ffb->bx = paligned_w;
-
-		if (extra_work) {
-			struct ff_fixups local_fixups[4];
-			int nfixups;
-
-			nfixups = CreatorComputePageFillFixups(local_fixups,
-							       x, y, width, height,
-							       paligned_x, paligned_y,
-							       paligned_w, paligned_h);
-			FFBFifo(fmesa, 5 + (nfixups * 5));
-			ffb->by = FFB_FASTFILL_COLOR_BLK;
-			ffb->dy = 0;
-			ffb->dx = 0;
-			ffb->bh = gDRIPriv->fastfill_height;
-			ffb->bw = gDRIPriv->fastfill_width * 4;
-
-			while (--nfixups >= 0) {
-				int xx, yy, ww, hh;
-
-				xx = local_fixups[nfixups].x;
-				yy = local_fixups[nfixups].y;
-				ffb->dy = yy;
-				ffb->dx = xx;
-				ww = (local_fixups[nfixups].width +
-				      (xx & (gDRIPriv->fastfill_width - 1)));
-				hh = (local_fixups[nfixups].height +
-				      (yy & (gDRIPriv->fastfill_height - 1)));
-				if (nfixups != 0) {
-					ffb->by = FFB_FASTFILL_BLOCK;
-					ffb->bh = hh;
-					ffb->bw = ww;
-				} else {
-					ffb->bh = hh;
-					ffb->by = FFB_FASTFILL_BLOCK;
-					ffb->bx = ww;
-				}
-			}
-		}
-	}
-}
-
-void ffbDDClear(GLcontext *ctx, GLbitfield mask)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	__DRIdrawable *dPriv = fmesa->driDrawable;
-	unsigned int stcmask = BUFFER_BIT_STENCIL;
-
-#ifdef CLEAR_TRACE
-	fprintf(stderr, "ffbDDClear: mask(%08x) \n", mask);
-#endif
-	if (!(fmesa->ffb_sarea->flags & FFB_DRI_FFB2PLUS))
-		stcmask = 0;
-
-	if (mask & (BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_BACK_LEFT | BUFFER_BIT_DEPTH | stcmask)) {
-		ffb_fbcPtr ffb = fmesa->regs;
-		unsigned int fbc, ppc;
-
-		fbc = (FFB_FBC_XE_ON);
-		ppc = (FFB_PPC_ACE_DISABLE | FFB_PPC_DCE_DISABLE |
-		       FFB_PPC_ABE_DISABLE | FFB_PPC_VCE_DISABLE |
-		       FFB_PPC_APE_DISABLE | FFB_PPC_XS_WID |
-		       FFB_PPC_ZS_CONST | FFB_PPC_CS_CONST);
-
-		/* Y/X enables must be both on or both off. */
-		if (mask & (BUFFER_BIT_DEPTH | stcmask)) {
-			fbc |= (FFB_FBC_ZE_ON | FFB_FBC_YE_ON | FFB_FBC_WB_C);
-		} else
-			fbc |= FFB_FBC_ZE_OFF | FFB_FBC_YE_OFF;
-
-		/* All RGB enables must be both on or both off. */
-		if (mask & (BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_BACK_LEFT)) {
-			if (mask & BUFFER_BIT_FRONT_LEFT) {
-				if (fmesa->back_buffer == 0)
-					fbc |= FFB_FBC_WB_B;
-				else
-					fbc |= FFB_FBC_WB_A;
-			}
-			if (mask & BUFFER_BIT_BACK_LEFT) {
-				if (fmesa->back_buffer == 0)
-					fbc |= FFB_FBC_WB_A;
-				else
-					fbc |= FFB_FBC_WB_B;
-			}
-			fbc |= FFB_FBC_RGBE_ON;
-		} else
-			fbc |= FFB_FBC_RGBE_OFF;
-
-		LOCK_HARDWARE(fmesa);
-
-		if (dPriv->numClipRects) {
-			FFBFifo(fmesa, 8);
-			ffb->fbc = fbc;
-			ffb->ppc = ppc;
-			ffb->xclip = FFB_XCLIP_TEST_ALWAYS;
-			ffb->cmp = 0x80808080;
-			ffb->rop = FFB_ROP_NEW;
-
-			if (mask & (BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_BACK_LEFT))
-				ffb->fg = fmesa->clear_pixel;
-			if (mask & BUFFER_BIT_DEPTH)
-				ffb->constz = fmesa->clear_depth;
-			if (mask & stcmask)
-				ffb->consty = fmesa->clear_stencil;
-
-			ffb_do_clear(ctx, dPriv);
-
-			FFBFifo(fmesa, 6);
-			ffb->ppc = fmesa->ppc;
-			ffb->fbc = fmesa->fbc;
-			ffb->xclip = fmesa->xclip;
-			ffb->cmp = fmesa->cmp;
-			ffb->rop = fmesa->rop;
-			ffb->drawop = fmesa->drawop;
-			if (mask & stcmask)
-				ffb->consty = fmesa->consty;
-			fmesa->ffbScreen->rp_active = 1;
-		}
-
-		UNLOCK_HARDWARE(fmesa);
-
-		mask &= ~(BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_BACK_LEFT |
-			  BUFFER_BIT_DEPTH | stcmask);
-	}
-
-	if (mask) 
-		_swrast_Clear(ctx, mask);
-}
-
diff --git a/src/mesa/drivers/dri/ffb/ffb_clear.h b/src/mesa/drivers/dri/ffb/ffb_clear.h
deleted file mode 100644
index c3b8ce714b..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_clear.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef _FFB_CLEAR_H
-#define _FFB_CLEAR_H
-
-extern void ffbDDClear(GLcontext *ctx, GLbitfield mask);
-
-#endif /* !(_FFB_CLEAR_H) */
diff --git a/src/mesa/drivers/dri/ffb/ffb_context.h b/src/mesa/drivers/dri/ffb/ffb_context.h
deleted file mode 100644
index 4d1d53ff59..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_context.h
+++ /dev/null
@@ -1,305 +0,0 @@
-
-#ifndef _FFB_CONTEXT_H
-#define _FFB_CONTEXT_H
-
-#include "dri_util.h"
-#include "drm.h"
-
-#include "main/mtypes.h"
-
-#include "ffb_xmesa.h"
-
-typedef struct {
-	GLfloat	alpha;
-	GLfloat	red;
-	GLfloat	green;
-	GLfloat	blue;
-} ffb_color;
-
-#define FFB_GET_ALPHA(VTX)	\
-	FFB_COLOR_FROM_FLOAT((VTX)->color[0].alpha)
-#define FFB_GET_RED(VTX)	\
-	FFB_COLOR_FROM_FLOAT((VTX)->color[0].red)
-#define FFB_GET_GREEN(VTX)	\
-	FFB_COLOR_FROM_FLOAT((VTX)->color[0].green)
-#define FFB_GET_BLUE(VTX)	\
-	FFB_COLOR_FROM_FLOAT((VTX)->color[0].blue)
-
-typedef struct {
-	GLfloat x, y, z;
-	ffb_color	color[2];
-} ffb_vertex;
-
-#define FFB_DELAYED_VIEWPORT_VARS				\
-	GLfloat		VP_SX = fmesa->hw_viewport[MAT_SX];	\
-	GLfloat		VP_TX = fmesa->hw_viewport[MAT_TX];	\
-	GLfloat		VP_SY = fmesa->hw_viewport[MAT_SY];	\
-	GLfloat		VP_TY = fmesa->hw_viewport[MAT_TY];	\
-	GLfloat		VP_SZ = fmesa->hw_viewport[MAT_SZ];	\
-	GLfloat		VP_TZ = fmesa->hw_viewport[MAT_TZ];	\
-	(void) VP_SX; (void) VP_SY; (void) VP_SZ; 		\
-	(void) VP_TX; (void) VP_TY; (void) VP_TZ
-
-#define FFB_GET_Z(VTX)			\
-	FFB_Z_FROM_FLOAT(VP_SZ * (VTX)->z + VP_TZ)
-#define FFB_GET_Y(VTX)			\
-	FFB_XY_FROM_FLOAT(VP_SY * (VTX)->y + VP_TY)
-#define FFB_GET_X(VTX)			\
-	FFB_XY_FROM_FLOAT(VP_SX * (VTX)->x + VP_TX)
-
-typedef void (*ffb_point_func)(GLcontext *, ffb_vertex *);
-typedef void (*ffb_line_func)(GLcontext *, ffb_vertex *, ffb_vertex *);
-typedef void (*ffb_tri_func)(GLcontext *, ffb_vertex *, ffb_vertex *,
-			     ffb_vertex *);
-typedef void (*ffb_quad_func)(GLcontext *, ffb_vertex *, ffb_vertex *,
-			      ffb_vertex *, ffb_vertex *);
-
-/* Immediate mode fast-path support. */
-typedef struct {
-	GLfloat		obj[4];
-	GLfloat 	normal[4];
-	GLfloat 	clip[4];
-	GLuint 		mask;
-	GLfloat		color[4];
-	GLfloat		win[4];
-	GLfloat		eye[4];
-} ffbTnlVertex, *ffbTnlVertexPtr;
-
-typedef void (*ffb_interp_func)(GLfloat t,
-				ffbTnlVertex *O,
-				const ffbTnlVertex *I,
-				const ffbTnlVertex *J);
-
-struct ffb_current_state {
-	GLfloat color[4];
-	GLfloat normal[4];
-	GLfloat specular[4];
-};
-
-struct ffb_light_state {
-	GLfloat base_color[3];
-	GLfloat base_alpha;
-};
-
-struct ffb_vertex_state {
-	struct ffb_current_state	current;
-	struct ffb_light_state		light;
-};
-
-struct ffb_imm_vertex {
-	ffbTnlVertex	vertices[8];
-	ffbTnlVertex	*v0;
-	ffbTnlVertex	*v1;
-	ffbTnlVertex	*v2;
-	ffbTnlVertex	*v3;
-
-	void (*save_vertex)(GLcontext *ctx, ffbTnlVertex *v);
-	void (*flush_vertex)(GLcontext *ctx, ffbTnlVertex *v);
-
-	ffb_interp_func interp;
-
-	GLuint prim, format;
-
-	GLvertexformat vtxfmt;
-};
-
-typedef struct ffb_context_t {
-	GLcontext		*glCtx;
-	GLframebuffer		*glBuffer;
-
-	ffb_fbcPtr		regs;
-	volatile char		*sfb32;
-
-	int			hw_locked;
-
-	int			back_buffer;	/* 0 = bufferA, 1 = bufferB */
-
-	/* Viewport matrix. */
-	GLfloat			hw_viewport[16];
-#define SUBPIXEL_X (-0.5F)
-#define SUBPIXEL_Y (-0.5F + 0.125)
-
-	/* Vertices in driver format. */
-	ffb_vertex              *verts;
-
-	/* Rasterization functions. */
-	ffb_point_func draw_point;
-	ffb_line_func draw_line;
-	ffb_tri_func draw_tri;
-	ffb_quad_func draw_quad;
-
-	GLenum raster_primitive;
-	GLenum render_primitive;
-
-	GLfloat backface_sign;
-	GLfloat depth_scale;
-
-	GLfloat	ffb_2_30_fixed_scale;
-	GLfloat	ffb_one_over_2_30_fixed_scale;
-	GLfloat ffb_16_16_fixed_scale;
-	GLfloat ffb_one_over_16_16_fixed_scale;
-	GLfloat ffb_ubyte_color_scale;
-	GLfloat ffb_zero;
-
-	/* Immediate mode state. */
-	struct ffb_vertex_state	vtx_state;
-	struct ffb_imm_vertex	imm;
-
-	/* Debugging knobs. */
-	GLboolean debugFallbacks;
-
-	/* This records state bits when a per-fragment attribute has
-	 * been set which prevents us from rendering in hardware.
-	 *
-	 * As attributes change, some of these bits may clear as
-	 * we move back within the chips capabilities.  If they
-	 * all clear, we return to full hw rendering.
-	 */
-	unsigned int		bad_fragment_attrs;
-#define FFB_BADATTR_FOG		0x00000001	/* Bad fog possible only when < FFB2 */
-#define FFB_BADATTR_BLENDFUNC	0x00000002	/* Any non-const func based upon dst alpha */
-#define FFB_BADATTR_BLENDROP	0x00000004	/* Blend enabled and LogicOP != GL_COPY */
-#define FFB_BADATTR_BLENDEQN	0x00000008	/* Blend equation other than ADD */
-#define FFB_BADATTR_STENCIL	0x00000010	/* Stencil enabled when < FFB2+ */
-#define FFB_BADATTR_TEXTURE	0x00000020	/* Texture enabled */
-#define FFB_BADATTR_SWONLY	0x00000040	/* Environment var set */
-
-	unsigned int		state_dirty;
-	unsigned int		state_fifo_ents;
-#define FFB_STATE_FBC		0x00000001
-#define FFB_STATE_PPC		0x00000002
-#define FFB_STATE_DRAWOP	0x00000004
-#define FFB_STATE_ROP		0x00000008
-#define FFB_STATE_LPAT		0x00000010
-#define FFB_STATE_PMASK		0x00000020
-#define FFB_STATE_XPMASK	0x00000040
-#define FFB_STATE_YPMASK	0x00000080
-#define FFB_STATE_ZPMASK	0x00000100
-#define FFB_STATE_XCLIP		0x00000200
-#define FFB_STATE_CMP		0x00000400
-#define FFB_STATE_MATCHAB	0x00000800
-#define FFB_STATE_MAGNAB	0x00001000
-#define FFB_STATE_MATCHC	0x00002000
-#define FFB_STATE_MAGNC		0x00004000
-#define FFB_STATE_DCUE		0x00008000
-#define FFB_STATE_BLEND		0x00010000
-#define FFB_STATE_CLIP		0x00020000
-#define FFB_STATE_STENCIL	0x00040000
-#define FFB_STATE_APAT		0x00080000
-#define FFB_STATE_WID		0x00100000
-#define FFB_STATE_ALL		0x001fffff
-
-	unsigned int		state_all_fifo_ents;
-
-#define FFB_MAKE_DIRTY(FMESA, STATE_MASK, FIFO_ENTS)	\
-do {	if ((STATE_MASK) & ~((FMESA)->state_dirty)) {	\
-		(FMESA)->state_dirty |= (STATE_MASK);	\
-		(FMESA)->state_fifo_ents += FIFO_ENTS;	\
-	}						\
-} while (0)
-
-	/* General hw reg state. */
-	unsigned int		fbc;
-	unsigned int		ppc;
-	unsigned int		drawop;
-	unsigned int		rop;
-
-	unsigned int		lpat;
-#define FFB_LPAT_BAD		0xffffffff
- 
-	unsigned int		wid;
-	unsigned int		pmask;
-	unsigned int		xpmask;
-	unsigned int		ypmask;
-	unsigned int		zpmask;
-	unsigned int		xclip;
-	unsigned int		cmp;
-	unsigned int		matchab;
-	unsigned int		magnab;
-	unsigned int		matchc;
-	unsigned int		magnc;
-
-	/* Depth cue unit hw reg state. */
-	unsigned int		dcss;	/* All FFB		*/
-	unsigned int		dcsf;	/* All FFB		*/
-	unsigned int		dcsb;	/* All FFB		*/
-	unsigned int		dczf;	/* All FFB		*/
-	unsigned int		dczb;	/* All FFB		*/
-	unsigned int		dcss1;	/* >=FFB2 only		*/
-	unsigned int		dcss2;	/* >=FFB2 only		*/
-	unsigned int		dcss3;	/* >=FFB2 only		*/
-	unsigned int		dcs2;	/* >=FFB2 only		*/
-	unsigned int		dcs3;	/* >=FFB2 only		*/
-	unsigned int		dcs4;	/* >=FFB2 only		*/
-	unsigned int		dcd2;	/* >=FFB2 only		*/
-	unsigned int		dcd3;	/* >=FFB2 only		*/
-	unsigned int		dcd4;	/* >=FFB2 only		*/
-
-	/* Blend unit hw reg state. */
-	unsigned int		blendc;
-	unsigned int		blendc1;
-	unsigned int		blendc2;
-
-	/* ViewPort clipping hw reg state. */
-	unsigned int		vclipmin;
-	unsigned int		vclipmax;
-	unsigned int		vclipzmin;
-	unsigned int		vclipzmax;
-	struct {
-		unsigned int	min;
-		unsigned int	max;
-	} aux_clips[4];
-
-	/* Stencil control hw reg state.  >=FFB2+ only. */
-	unsigned int		stencil;
-	unsigned int		stencilctl;
-	unsigned int		consty;		/* Stencil Ref */
-
-	/* Area pattern (used for polygon stipples). */
-	unsigned int		pattern[32];
-
-	/* Fog state. */
-	float			Znear, Zfar;
-
-	drm_context_t		hHWContext;
-	drm_hw_lock_t		*driHwLock;
-	int			driFd;
-
-	unsigned int		clear_pixel;
-	unsigned int		clear_depth;
-	unsigned int		clear_stencil;
-
-	unsigned int		setupindex;
-	unsigned int		setupnewinputs;
-	unsigned int		new_gl_state;
-
-	__DRIdrawable	*driDrawable;
-	__DRIscreen	*driScreen;
-	ffbScreenPrivate	*ffbScreen;
-	ffb_dri_state_t		*ffb_sarea;
-} ffbContextRec, *ffbContextPtr;
-
-#define FFB_CONTEXT(ctx)	((ffbContextPtr)((ctx)->DriverCtx))
-
-/* We want the depth values written during software rendering
- * to match what the hardware is going to put there when we
- * hw render.
- *
- * The Z buffer is 28 bits deep.  Smooth shaded primitives
- * specify a 2:30 signed fixed point Z value in the range 0.0
- * to 1.0 inclusive.
- *
- * So for example, when hw rendering, the largest Z value of
- * 1.0 would produce a value of 0x0fffffff in the actual Z
- * buffer, which is the maximum value.
- *
- * Mesa's depth type is a 32-bit uint, so we use the following macro
- * to convert to/from FFB hw Z values.  Note we also have to clear
- * out the top bits as that is where the Y (stencil) buffer is stored
- * and during hw Z buffer reads it is always there. (During writes
- * we tell the hw to discard those top 4 bits).
- */
-#define Z_TO_MESA(VAL)		((GLuint)(((VAL) & 0x0fffffff) << (32 - 28)))
-#define Z_FROM_MESA(VAL)	(((GLuint)((GLdouble)(VAL))) >> (32 - 28))
-
-#endif /* !(_FFB_CONTEXT_H) */
diff --git a/src/mesa/drivers/dri/ffb/ffb_dd.c b/src/mesa/drivers/dri/ffb/ffb_dd.c
deleted file mode 100644
index 91b6d3153a..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_dd.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/* 
- *
- * GLX Hardware Device Driver for Sun Creator/Creator3D
- * Copyright (C) 2000, 2001 David S. Miller
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * DAVID MILLER, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM,
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
- * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- *
- *    David S. Miller <davem@redhat.com>
- */
-
-#include "main/mtypes.h"
-#include "main/mm.h"
-#include "ffb_dd.h"
-#include "ffb_span.h"
-#include "ffb_context.h"
-#include "ffb_clear.h"
-#include "ffb_lock.h"
-
-#define FFB_DATE	"20021125"
-
-PUBLIC const char __driConfigOptions[] = { 0 };
-const GLuint __driNConfigOptions = 0;
-
-/* Mesa's Driver Functions */
-
-static const GLubyte *ffbDDGetString(GLcontext *ctx, GLenum name)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	static char buffer[128];
-
-	switch (name) {
-	case GL_VENDOR:
-		return (GLubyte *) "David S. Miller";
-
-	case GL_RENDERER:
-		sprintf(buffer, "Mesa DRI FFB " FFB_DATE);
-
-		if (fmesa->ffb_sarea->flags & FFB_DRI_FFB2)
-			strncat(buffer, " FFB2", 5);
-		if (fmesa->ffb_sarea->flags & FFB_DRI_FFB2PLUS)
-			strncat(buffer, " FFB2PLUS", 9);
-		if (fmesa->ffb_sarea->flags & FFB_DRI_PAC1)
-			strncat(buffer, " PAC1", 5);
-		if (fmesa->ffb_sarea->flags & FFB_DRI_PAC2)
-			strncat(buffer, " PAC2", 5);
-
-#ifdef USE_SPARC_ASM
-		strncat(buffer, " Sparc", 6);
-#endif
-
-		return (GLubyte *) buffer;
-
-	default:
-		return NULL;
-	};
-}
-
-
-static void ffbBufferSize(GLframebuffer *buffer, GLuint *width, GLuint *height)
-{
-	GET_CURRENT_CONTEXT(ctx);
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-
-	LOCK_HARDWARE(fmesa);
-	*width = fmesa->driDrawable->w;
-	*height = fmesa->driDrawable->h;
-	UNLOCK_HARDWARE(fmesa);
-}
-
-void ffbDDExtensionsInit(GLcontext *ctx)
-{
-	/* Nothing for now until we start to add
-	 * real acceleration. -DaveM
-	 */
-
-	/* XXX Need to turn off GL_EXT_blend_func_separate for one.
-	 * XXX Also BlendEquation should be turned off too, what
-	 * XXX EXT is that assosciated with?
-	 */
-}
-
-static void ffbDDFinish(GLcontext *ctx)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-
-	LOCK_HARDWARE(fmesa);
-	FFBWait(fmesa, fmesa->regs);
-	UNLOCK_HARDWARE(fmesa);
-}
-
-void ffbDDInitDriverFuncs(GLcontext *ctx)
-{
-	ctx->Driver.GetBufferSize	 = ffbBufferSize;
-	ctx->Driver.GetString		 = ffbDDGetString;
-	ctx->Driver.Clear		 = ffbDDClear;
-
-	ctx->Driver.Finish		 = ffbDDFinish;
-}
diff --git a/src/mesa/drivers/dri/ffb/ffb_dd.h b/src/mesa/drivers/dri/ffb/ffb_dd.h
deleted file mode 100644
index 1198cda30a..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_dd.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* 
- *
- * GLX Hardware Device Driver for Sun Creator/Creator3D.
- * Copyright (C) 2000 David S. Miller
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * DAVID MILLER, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM, 
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
- * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- *
- *    David S. Miller <davem@redhat.com>
- */
-
-#ifndef _FFB_DD_H
-#define _FFB_DD_H
-
-#include "main/context.h"
-
-void ffbDDInitDriverFuncs(GLcontext *ctx);
-void ffbDDExtensionsInit(GLcontext *ctx);
-
-#endif /* !(_FFB_DD_H) */
diff --git a/src/mesa/drivers/dri/ffb/ffb_depth.c b/src/mesa/drivers/dri/ffb/ffb_depth.c
deleted file mode 100644
index d19385b776..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_depth.c
+++ /dev/null
@@ -1,243 +0,0 @@
-/* 
- *
- * GLX Hardware Device Driver for Sun Creator/Creator3D
- * Copyright (C) 2000 David S. Miller
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * DAVID MILLER, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM, 
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
- * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- *
- *    David S. Miller <davem@redhat.com>
- */
-
-#include "main/mtypes.h"
-#include "ffb_dd.h"
-#include "ffb_span.h"
-#include "ffb_context.h"
-#include "ffb_depth.h"
-#include "ffb_lock.h"
-
-
-#undef DEPTH_TRACE
-
-static void FFBWriteDepthSpan( GLcontext *ctx,
-                                 struct gl_renderbuffer *rb,
-                                 GLuint n, GLint x, GLint y,
-				 const void *values,
-				 const GLubyte mask[] )
-{
-        const GLuint *depth = (const GLuint *) values;
-#ifdef DEPTH_TRACE
-	fprintf(stderr, "FFBWriteDepthSpan: n(%d) x(%d) y(%d)\n",
-		(int) n, x, y);
-#endif
-	if (ctx->Depth.Mask) {
-		ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-		__DRIdrawable *dPriv = fmesa->driDrawable;
-		GLuint *zptr;
-		GLuint i;
-
-		if (!fmesa->hw_locked)
-			LOCK_HARDWARE(fmesa);
-		FFBFifo(fmesa, 2);
-		fmesa->regs->fbc = (FFB_FBC_WB_C | FFB_FBC_ZE_ON |
-				    FFB_FBC_YE_OFF | FFB_FBC_RGBE_OFF);
-		fmesa->regs->ppc = FFB_PPC_ZS_VAR;
-		FFBWait(fmesa, fmesa->regs);
-
-		y = (dPriv->h - y);
-		zptr = (GLuint *)
-			((char *)fmesa->sfb32 +
-			 ((dPriv->x + x) << 2) +
-			 ((dPriv->y + y) << 13));
-		
-		for (i = 0; i < n; i++) {
-			if (mask[i]) {
-				*zptr = Z_FROM_MESA(depth[i]);
-			}
-			zptr++;
-		}
-
-		FFBFifo(fmesa, 2);
-		fmesa->regs->fbc = fmesa->fbc;
-		fmesa->regs->ppc = fmesa->ppc;
-		fmesa->ffbScreen->rp_active = 1;
-		if (!fmesa->hw_locked)
-			UNLOCK_HARDWARE(fmesa);
-	}
-}
-
-static void FFBWriteMonoDepthSpan( GLcontext *ctx, 
-				     struct gl_renderbuffer *rb,
-                         	     GLuint n, GLint x, GLint y,
-                         	     const void *value, const GLubyte mask[] )
-{
-	const GLuint depthVal = *((GLuint *) value);
-	GLuint depths[MAX_WIDTH];
-	GLuint i;
-	for (i = 0; i < n; i++)
-		depths[i] = depthVal;
-	FFBWriteDepthSpan(ctx, rb, n, x, y, depths, mask);
-}
-
-static void FFBWriteDepthPixels( GLcontext *ctx,
-                                   struct gl_renderbuffer *rb,
-				   GLuint n,
-				   const GLint x[],
-				   const GLint y[],
-				   const void *values,
-				   const GLubyte mask[] )
-{
-        const GLuint *depth = (const GLuint *) values;
-#ifdef DEPTH_TRACE
-	fprintf(stderr, "FFBWriteDepthPixels: n(%d)\n", (int) n);
-#endif
-	if (ctx->Depth.Mask) {
-		ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-		__DRIdrawable *dPriv = fmesa->driDrawable;
-		char *zbase;
-		GLuint i;
-
-		if (!fmesa->hw_locked)
-			LOCK_HARDWARE(fmesa);
-		FFBFifo(fmesa, 2);
-		fmesa->regs->fbc = (FFB_FBC_WB_C | FFB_FBC_ZE_ON |
-				    FFB_FBC_YE_OFF | FFB_FBC_RGBE_OFF);
-		fmesa->regs->ppc = FFB_PPC_ZS_VAR;
-		fmesa->ffbScreen->rp_active = 1;
-		FFBWait(fmesa, fmesa->regs);
-
-		zbase = ((char *)fmesa->sfb32 +
-			 (dPriv->x << 2) + (dPriv->y << 13));
-		
-		for (i = 0; i < n; i++) {
-			GLint y1 = (dPriv->h - y[i]);
-			GLint x1 = x[i];
-			GLuint *zptr;
-
-			zptr = (GLuint *)
-				(zbase + (x1 << 2) + (y1 << 13));
-			if (mask[i])
-				*zptr = Z_FROM_MESA(depth[i]);
-		}
-
-		FFBFifo(fmesa, 2);
-		fmesa->regs->fbc = fmesa->fbc;
-		fmesa->regs->ppc = fmesa->ppc;
-		fmesa->ffbScreen->rp_active = 1;
-		if (!fmesa->hw_locked)
-			UNLOCK_HARDWARE(fmesa);
-	}
-}
-
-static void FFBReadDepthSpan( GLcontext *ctx,
-                                struct gl_renderbuffer *rb,
-				GLuint n, GLint x, GLint y,
-				void *values )
-{
-        GLuint *depth = (GLuint *) values;
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	__DRIdrawable *dPriv = fmesa->driDrawable;
-	GLuint *zptr;
-	GLuint i;
-
-#ifdef DEPTH_TRACE
-	fprintf(stderr, "FFBReadDepthSpan: n(%d) x(%d) y(%d)\n",
-		(int) n, x, y);
-#endif
-	if (!fmesa->hw_locked)
-		LOCK_HARDWARE(fmesa);
-	FFBFifo(fmesa, 1);
-	fmesa->regs->fbc = FFB_FBC_RB_C;
-	fmesa->ffbScreen->rp_active = 1;
-	FFBWait(fmesa, fmesa->regs);
-
-	y = (dPriv->h - y);
-	zptr = (GLuint *)
-		((char *)fmesa->sfb32 +
-		 ((dPriv->x + x) << 2) +
-		 ((dPriv->y + y) << 13));
-		
-	for (i = 0; i < n; i++) {
-		depth[i] = Z_TO_MESA(*zptr);
-		zptr++;
-	}
-
-	FFBFifo(fmesa, 1);
-	fmesa->regs->fbc = fmesa->fbc;
-	fmesa->ffbScreen->rp_active = 1;
-	if (!fmesa->hw_locked)
-		UNLOCK_HARDWARE(fmesa);
-}
-
-static void FFBReadDepthPixels( GLcontext *ctx,
-                                  struct gl_renderbuffer *rb,
-                                  GLuint n,
-				  const GLint x[], const GLint y[],
-				  void *values )
-{
-        GLuint *depth = (GLuint *) values;
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	__DRIdrawable *dPriv = fmesa->driDrawable;
-	char *zbase;
-	GLuint i;
-
-#ifdef DEPTH_TRACE
-	fprintf(stderr, "FFBReadDepthPixels: n(%d)\n", (int) n);
-#endif
-	if (!fmesa->hw_locked)
-		LOCK_HARDWARE(fmesa);
-	FFBFifo(fmesa, 1);
-	fmesa->regs->fbc = FFB_FBC_RB_C;
-	fmesa->ffbScreen->rp_active = 1;
-	FFBWait(fmesa, fmesa->regs);
-
-	zbase = ((char *)fmesa->sfb32 +
-		 (dPriv->x << 2) + (dPriv->y << 13));
-		
-	for (i = 0; i < n; i++) {
-		GLint y1 = (dPriv->h - y[i]);
-		GLint x1 = x[i];
-		GLuint *zptr;
-
-		zptr = (GLuint *)
-			(zbase + (x1 << 2) + (y1 << 13));
-		depth[i] = Z_TO_MESA(*zptr);
-	}
-
-	FFBFifo(fmesa, 1);
-	fmesa->regs->fbc = fmesa->fbc;
-	fmesa->ffbScreen->rp_active = 1;
-	if (!fmesa->hw_locked)
-		UNLOCK_HARDWARE(fmesa);
-}
-
-/**
- * Plug in the Get/Put routines for the given driRenderbuffer.
- */
-void
-ffbSetDepthFunctions(driRenderbuffer *drb, const GLvisual *vis)
-{
-	assert(drb->Base.InternalFormat == GL_DEPTH_COMPONENT16);
-      	drb->Base.GetRow        = FFBReadDepthSpan;
-      	drb->Base.GetValues     = FFBReadDepthPixels;
-      	drb->Base.PutRow        = FFBWriteDepthSpan;
-      	drb->Base.PutMonoRow    = FFBWriteMonoDepthSpan;
-      	drb->Base.PutValues     = FFBWriteDepthPixels;
-      	drb->Base.PutMonoValues = NULL;
-}
diff --git a/src/mesa/drivers/dri/ffb/ffb_depth.h b/src/mesa/drivers/dri/ffb/ffb_depth.h
deleted file mode 100644
index 8a1829ed49..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_depth.h
+++ /dev/null
@@ -1,7 +0,0 @@
-
-#ifndef _FFB_DEPTH_H
-#define _FFB_DEPTH_H
-
-void ffbSetDepthFunctions(driRenderbuffer *drb, const GLvisual *vis);
-
-#endif /* !(_FFB_DEPTH_H) */
diff --git a/src/mesa/drivers/dri/ffb/ffb_fifo.h b/src/mesa/drivers/dri/ffb/ffb_fifo.h
deleted file mode 100644
index a175f38643..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_fifo.h
+++ /dev/null
@@ -1,27 +0,0 @@
-
-#ifndef _FFB_FIFO_H
-#define _FFB_FIFO_H
-
-#define FFBFifo(__fmesa, __n) \
-do {	ffbScreenPrivate *__fScrn = (__fmesa)->ffbScreen; \
-	int __cur_slots = __fScrn->fifo_cache; \
-	if ((__cur_slots - (__n)) < 0) { \
-		ffb_fbcPtr __ffb = __fmesa->regs; \
-		do { __cur_slots = (((int)__ffb->ucsr & FFB_UCSR_FIFO_MASK) - 4); \
-		} while ((__cur_slots - (__n)) < 0); \
-	} (__fScrn)->fifo_cache = (__cur_slots - (__n)); \
-} while(0)
-
-#define FFBWait(__fmesa, __ffb) \
-do {	ffbScreenPrivate *__fScrn = (__fmesa)->ffbScreen; \
-	if (__fScrn->rp_active) { \
-		unsigned int __regval = (__ffb)->ucsr; \
-		while((__regval & FFB_UCSR_ALL_BUSY) != 0) { \
-			__regval = (__ffb)->ucsr; \
-		} \
-		__fScrn->fifo_cache = ((int)(__regval & FFB_UCSR_FIFO_MASK)) - 4; \
-		__fScrn->rp_active = 0; \
-	} \
-} while(0)
-
-#endif /* !(_FFB_FIFO_H) */
diff --git a/src/mesa/drivers/dri/ffb/ffb_fog.c b/src/mesa/drivers/dri/ffb/ffb_fog.c
deleted file mode 100644
index e6eca2390e..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_fog.c
+++ /dev/null
@@ -1,73 +0,0 @@
-
-/* FFB fog support:
- *
- * There are two levels of support for FOG in the Creator3D series.
- * Both involve a depth cue unit and 1 or 4 slope factors and scales
- * for varying the pixel intensity.
- *
- * Chips prior to FFB2 only have a single set of such settings, FFB2
- * and later have 4 settings.
- *
- * The basic depth cueing equation is:
- *
- *	C_final = dcsf(z) * C_orig + (1 - dcsf(z)) * C_fog
- *
- * 	C_final	--	The final color passed to blend unit or frame
- *			buffer (if blending is disabled).
- *
- *	C_orig	--	The color we start with, which comes either from
- *			the raster processor or cpu writes to the smart
- *			framebuffer aperture.
- *
- *	C_fog	--	This is the "fog" color, ie. the desired color
- *			at the deepest Z.
- *
- *	dcsf(z)	--	The depth cue scale as a function of Z.
- *
- * With pre-FFB2 chips there are four parameters to control the depth
- * cue scaling.  Here is a diagram:
- *
- *		   1.0	-------------
- *			|   |   |   |
- *			|   |   |   |
- *		Sfront	XXXXX---+---+
- *			|   |X  |   |
- *	dcsf(z)		|   | X |   |
- *			|   |  X|   |
- *		Sback	+---+---XXXXX
- *			|   |   |   |
- *		   0.0	-------------
- *			0.0 Zf  Zb 1.0
- *
- *			      z
- * Therefore:
- *
- *	for Zf < z < Zb
- *
- *		dcsf(z) = Sback + ((Sfront - Sback) / (Zf - Zb)) * (Zb - z)
- *
- *	for z <= Zf
- *
- *		dcsf(z) = Sfront
- *
- *	for z >= Zb
- *
- *		dcsf(z) = Sback
- *
- * With FFB2 and later, 3 more slope regions are provided, the first of
- * them starts at the end of the region defined above and ends at a
- * specified depth value, the next slop region starts there and ends
- * at the next specified depth value, and so on.  Each of the 3 slope
- * regions also have scale and slope settings of their own.
- *
- * The C_fog color is programmed into the alpha blending unit color1
- * and color2 registers as follows:
- *
- *	color1:		-(C_fog)
- *	color2:		C_fog - bg
- *
- * If alpha blending is disabled, the bg factor is zero.  Note that
- * the alpha blending color registers specify each of the RGB values
- * as 9 bit 1:8 signed numbers in the range -1.00 to 0.ff inclusive.
- * (ie. 0x100 == -1.00 and 0x0ff == +0.ff)
- */
diff --git a/src/mesa/drivers/dri/ffb/ffb_lines.c b/src/mesa/drivers/dri/ffb/ffb_lines.c
deleted file mode 100644
index 6dca4edd29..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_lines.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/* 
- *
- * GLX Hardware Device Driver for Sun Creator/Creator3D
- * Copyright (C) 2000, 2001 David S. Miller
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * DAVID MILLER, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM, 
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
- * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- *
- *    David S. Miller <davem@redhat.com>
- */
-
-#include "main/mtypes.h"
-#include "main/mm.h"
-#include "ffb_dd.h"
-#include "ffb_span.h"
-#include "ffb_context.h"
-#include "ffb_vb.h"
-#include "ffb_lines.h"
-
-#undef FFB_LINE_TRACE
-
-#define FFB_LINE_FLAT_BIT	0x01
-#define FFB_LINE_ALPHA_BIT	0x02
-#define MAX_FFB_LINE_FUNCS      0x04
-
-static ffb_line_func ffb_line_tab[MAX_FFB_LINE_FUNCS];
-
-/* If the line is not wide, we can support all of the line
- * patterning and smooth shading features of OpenGL fully.
- */
-
-#define IND (0)
-#define TAG(x) x
-#include "ffb_linetmp.h"
-
-#define IND (FFB_LINE_FLAT_BIT)
-#define TAG(x) x##_flat
-#include "ffb_linetmp.h"
-
-#define IND (FFB_LINE_ALPHA_BIT)
-#define TAG(x) x##_alpha
-#include "ffb_linetmp.h"
-
-#define IND (FFB_LINE_ALPHA_BIT|FFB_LINE_FLAT_BIT)
-#define TAG(x) x##_alpha_flat
-#include "ffb_linetmp.h"
-
-void ffbDDLinefuncInit(void)
-{
-	init();
-	init_flat();
-	init_alpha();
-	init_alpha_flat();
-}
-
-static void ffb_dd_line( GLcontext *ctx, GLuint e0, GLuint e1 )
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	ffb_vertex *v0 = &fmesa->verts[e0];
-	ffb_vertex *v1 = &fmesa->verts[e1];
-	fmesa->draw_line( ctx, v0, v1 );
-}
-
-void ffbChooseLineState(GLcontext *ctx)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
- 	TNLcontext *tnl = TNL_CONTEXT(ctx);
-	GLuint flags = ctx->_TriangleCaps;
-	GLuint ind = 0;
-
-	tnl->Driver.Render.Line = ffb_dd_line;
-
-	if (flags & DD_FLATSHADE)
-		ind |= FFB_LINE_FLAT_BIT;
-
-	if ((flags & DD_LINE_STIPPLE) != 0 &&
-	    fmesa->lpat == FFB_LPAT_BAD) {
-		fmesa->draw_line = ffb_fallback_line;
-		return;
-	}
-
-	/* If blending or the alpha test is enabled we need to
-	 * provide alpha components to the chip, else we can
-	 * do without it and thus feed vertex data to the chip
-	 * more efficiently.
-	 */
-	if (ctx->Color.BlendEnabled || ctx->Color.AlphaEnabled)
-		ind |= FFB_LINE_ALPHA_BIT;
-
-	fmesa->draw_line = ffb_line_tab[ind];
-}
diff --git a/src/mesa/drivers/dri/ffb/ffb_lines.h b/src/mesa/drivers/dri/ffb/ffb_lines.h
deleted file mode 100644
index ddb9365653..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_lines.h
+++ /dev/null
@@ -1,17 +0,0 @@
-
-#ifndef _FFB_LINES_H
-#define _FFB_LINES_H
-
-#include "ffb_context.h"
-
-#define _FFB_NEW_LINE (_DD_NEW_FLATSHADE |	\
-		       _DD_NEW_LINE_WIDTH |	\
-		       _DD_NEW_LINE_STIPPLE |	\
-		       _DD_NEW_LINE_SMOOTH |	\
-		       _NEW_COLOR)
-
-extern void ffbDDLinefuncInit(void);
-extern void ffbChooseLineState(GLcontext *);
-extern void ffb_fallback_line( GLcontext *ctx, ffb_vertex *v0, ffb_vertex *v1 );
-
-#endif /* !(_FFB_LINES_H) */
diff --git a/src/mesa/drivers/dri/ffb/ffb_linetmp.h b/src/mesa/drivers/dri/ffb/ffb_linetmp.h
deleted file mode 100644
index 10e1375259..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_linetmp.h
+++ /dev/null
@@ -1,80 +0,0 @@
-
-static INLINE void TAG(ffb_line)(GLcontext *ctx, ffb_vertex *v0, 
-				   ffb_vertex *v1 )
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	ffb_fbcPtr ffb = fmesa->regs;
-#if (IND & FFB_LINE_FLAT_BIT)
-	const GLuint const_fg = FFB_PACK_CONST_UBYTE_ARGB_COLOR( v1->color[0] );
-#endif
-	FFB_DELAYED_VIEWPORT_VARS;
-
-#ifdef FFB_LINE_TRACE
-	fprintf(stderr, "FFB: ffb_line ["
-#if (IND & FFB_LINE_FLAT_BIT)
-		" FLAT"
-#endif
-#if (IND & FFB_LINE_ALPHA_BIT)
-		" ALPHA"
-#endif
-		" ]\n");
-#endif
-
-#if (IND & FFB_LINE_FLAT_BIT)
-	FFBFifo(fmesa, 1);
-	ffb->fg = const_fg;
-#ifdef FFB_LINE_TRACE
-	fprintf(stderr, "FFB: ffb_line confg_fg[%08x]\n", const_fg);
-#endif
-#endif
-
-#if (IND & FFB_LINE_FLAT_BIT)
-	/* (2 * 3) + 1 */
-	FFBFifo(fmesa, 7);
-#else
-#if (IND & FFB_LINE_ALPHA_BIT)
-	/* (2 * 7) + 1 */
-	FFBFifo(fmesa, 15);
-#else
-	/* (2 * 6) + 1 */
-	FFBFifo(fmesa, 13);
-#endif
-#endif
-
-	/* Using DDLINE or AALINE, init the line pattern state. */
-	ffb->lpat = fmesa->lpat;
-
-#if !(IND & FFB_LINE_FLAT_BIT)
-#if (IND & FFB_LINE_ALPHA_BIT)
-	ffb->alpha	= FFB_GET_ALPHA(v0);
-#endif
-	ffb->red	= FFB_GET_RED(v0);
-	ffb->green	= FFB_GET_GREEN(v0);
-	ffb->blue	= FFB_GET_BLUE(v0);
-#endif
-	ffb->z		= FFB_GET_Z(v0);
-	ffb->ryf	= FFB_GET_Y(v0);
-	ffb->rxf	= FFB_GET_X(v0);
-
-#if !(IND & FFB_LINE_FLAT_BIT)
-#if (IND & FFB_LINE_ALPHA_BIT)
-	ffb->alpha	= FFB_GET_ALPHA(v1);
-#endif
-	ffb->red	= FFB_GET_RED(v1);
-	ffb->green	= FFB_GET_GREEN(v1);
-	ffb->blue	= FFB_GET_BLUE(v1);
-#endif
-	ffb->z		= FFB_GET_Z(v1);
-	ffb->y		= FFB_GET_Y(v1);
-	ffb->x		= FFB_GET_X(v1);
-
-	fmesa->ffbScreen->rp_active = 1;
-}
-
-static void TAG(init)(void)
-{
-	ffb_line_tab[IND] = TAG(ffb_line);
-}
-
-#undef IND
-#undef TAG
diff --git a/src/mesa/drivers/dri/ffb/ffb_lock.h b/src/mesa/drivers/dri/ffb/ffb_lock.h
deleted file mode 100644
index 1fd3eb5512..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_lock.h
+++ /dev/null
@@ -1,36 +0,0 @@
-
-#ifndef _FFB_LOCK_H
-#define _FFB_LOCK_H
-
-#include "ffb_context.h"
-
-extern void ffbXMesaUpdateState(ffbContextPtr fmesa);
-#define FFB_UPDATE_STATE(fmesa)	ffbXMesaUpdateState(fmesa)
-
-/* Lock the hardware and validate our state.  This hardware can only ever
- * exist on SPARC platforms.  Don't bother building the real LOCK_HARDWARE and
- * UNLOCK_HARDWARE code on non-SPARC platforms.  The only reason the driver
- * gets built on non-SPARC is to catch build breakages earlier.
- */
-#if !defined(__sparc__)
-#define LOCK_HARDWARE(fmesa)			
-#define UNLOCK_HARDWARE(fmesa)			
-#else
-#define LOCK_HARDWARE(fmesa)				\
-  do {							\
-    DRM_CAS_RESULT(__ret);				\
-    DRM_CAS(fmesa->driHwLock, fmesa->hHWContext,	\
-	    (DRM_LOCK_HELD | fmesa->hHWContext), __ret);\
-    if (__ret) {					\
-        drmGetLock(fmesa->driFd, fmesa->hHWContext, 0);	\
-	FFB_UPDATE_STATE(fmesa);			\
-    }							\
-  } while (0)
-
-
-/* Unlock the hardware. */
-#define UNLOCK_HARDWARE(fmesa)					\
-    DRM_UNLOCK(fmesa->driFd, fmesa->driHwLock, fmesa->hHWContext);	
-#endif
-
-#endif /* !(_FFB_LOCK_H) */
diff --git a/src/mesa/drivers/dri/ffb/ffb_points.c b/src/mesa/drivers/dri/ffb/ffb_points.c
deleted file mode 100644
index 5bf4f8f070..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_points.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/* 
- *
- * GLX Hardware Device Driver for Sun Creator/Creator3D
- * Copyright (C) 2000, 2001 David S. Miller
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * DAVID MILLER, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM, 
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
- * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- *
- *    David S. Miller <davem@redhat.com>
- */
-
-#include "main/mtypes.h"
-#include "ffb_dd.h"
-#include "ffb_context.h"
-#include "ffb_vb.h"
-#include "ffb_points.h"
-
-
-#undef FFB_POINT_TRACE
-
-#define FFB_POINT_AA_BIT	0x01
-
-static ffb_point_func ffb_point_tab[0x08];
-
-#define IND (0)
-#define TAG(x) x
-#include "ffb_pointtmp.h"
-
-#define IND (FFB_POINT_AA_BIT)
-#define TAG(x) x##_aa
-#include "ffb_pointtmp.h"
-
-void ffbDDPointfuncInit(void)
-{
-	init();
-	init_aa();
-}
-
-static void ffb_dd_points( GLcontext *ctx, GLuint first, GLuint last )
-{
-	struct vertex_buffer *VB = &TNL_CONTEXT( ctx )->vb;
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	ffb_vertex *fverts = fmesa->verts;
-	int i;
-
-	if (VB->Elts == 0) {
-		for ( i = first ; i < last ; i++ ) {
-			if ( VB->ClipMask[i] == 0 ) {
-				fmesa->draw_point( ctx, &fverts[i] );
-			}
-		}
-	} else {
-		for ( i = first ; i < last ; i++ ) {
-			GLuint e = VB->Elts[i];
-			if ( VB->ClipMask[e] == 0 ) {
-				fmesa->draw_point( ctx, &fverts[e] );
-			}
-		}
-	}
-}
-
-void ffbChoosePointState(GLcontext *ctx)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
- 	TNLcontext *tnl = TNL_CONTEXT(ctx);
-	GLuint flags = ctx->_TriangleCaps;
-	GLuint ind = 0;
-
-	tnl->Driver.Render.Points = ffb_dd_points;
-
-	if (flags & DD_POINT_SMOOTH)
-		ind |= FFB_POINT_AA_BIT;
-
-	fmesa->draw_point = ffb_point_tab[ind];
-}
diff --git a/src/mesa/drivers/dri/ffb/ffb_points.h b/src/mesa/drivers/dri/ffb/ffb_points.h
deleted file mode 100644
index a7229de7f1..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_points.h
+++ /dev/null
@@ -1,14 +0,0 @@
-
-#ifndef _FFB_POINTS_H
-#define _FFB_POINTS_H
-
-extern void ffbDDPointfuncInit(void);
-
-#define _FFB_NEW_POINT (_DD_NEW_POINT_SIZE | 	\
-			_DD_NEW_POINT_SMOOTH |	\
-			_NEW_COLOR)
-
-extern void ffbChoosePointState(GLcontext *);
-extern void ffb_fallback_point( GLcontext *ctx, ffb_vertex *v0 );
-
-#endif /* !(_FFB_POINTS_H) */
diff --git a/src/mesa/drivers/dri/ffb/ffb_pointtmp.h b/src/mesa/drivers/dri/ffb/ffb_pointtmp.h
deleted file mode 100644
index 3003de70c6..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_pointtmp.h
+++ /dev/null
@@ -1,54 +0,0 @@
-
-static INLINE void TAG(ffb_draw_point)(GLcontext *ctx, ffb_vertex *tmp )
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	ffb_fbcPtr ffb = fmesa->regs;
-	FFB_DELAYED_VIEWPORT_VARS;
-
-#ifdef FFB_POINT_TRACE
-	fprintf(stderr, "FFB: ffb_point ["
-#if (IND & FFB_POINT_AA_BIT)
-		"AA"
-#endif
-		"] X(%f) Y(%f) Z(%f)\n",
-		tmp->x, tmp->y, tmp->z);
-#endif
-
-#if (IND & FFB_POINT_AA_BIT)
-	FFBFifo(fmesa, 4);
-			
-	ffb->fg = FFB_PACK_CONST_UBYTE_ARGB_COLOR( tmp->color[0] );
-	ffb->z = FFB_GET_Z(tmp);
-	ffb->y = FFB_GET_Y(tmp) + 0x8000 /* FIX ME */;
-	ffb->x = FFB_GET_X(tmp) + 0x8000 /* FIX ME */;
-#else
-	{
-		unsigned int const_fg, const_z, h, w;
-
-		const_fg = FFB_PACK_CONST_UBYTE_ARGB_COLOR( tmp->color[0] );
-		const_z = Z_FROM_MESA(FFB_Z_TO_FLOAT(FFB_GET_Z(tmp)));
-		h = FFB_GET_Y(tmp) >> 16;
-		w = FFB_GET_X(tmp) >> 16;
-#ifdef FFB_POINT_TRACE
-		fprintf(stderr, "FFB: ffb_point fg(%08x) z(%08x) h(%08x) w(%08x)\n",
-			const_fg, const_z, h, w);
-#endif
-		FFBFifo(fmesa, 4);
-		ffb->fg = const_fg;
-		ffb->constz = const_z;
-		ffb->bh = h;
-		ffb->bw = w;
-	}
-#endif
-
-	fmesa->ffbScreen->rp_active = 1;
-}
-
-
-static void TAG(init)(void)
-{
-	ffb_point_tab[IND] = TAG(ffb_draw_point);
-}
-
-#undef IND
-#undef TAG
diff --git a/src/mesa/drivers/dri/ffb/ffb_rendertmp.h b/src/mesa/drivers/dri/ffb/ffb_rendertmp.h
deleted file mode 100644
index 64141c2c5f..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_rendertmp.h
+++ /dev/null
@@ -1,645 +0,0 @@
-
-#define IMPL_LOCAL_VARS						\
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);			\
-	ffb_fbcPtr ffb = fmesa->regs;				\
-	const GLuint * const elt = TNL_CONTEXT(ctx)->vb.Elts;	\
-	FFB_DELAYED_VIEWPORT_VARS;				\
-	(void) fmesa; (void) ffb; (void) elt
-
-#if (IND & FFB_FLAT_BIT)
-#define FFB_DECLARE_CACHED_COLOR(NAME)		\
-	unsigned int NAME;
-#define FFB_COMPUTE_CACHED_COLOR(NAME, VTX)	\
-	NAME = FFB_PACK_CONST_UBYTE_ARGB_COLOR((VTX)->color[0])
-#define FFB_CACHED_COLOR_SAME(NAME1, NAME2)	\
-	((NAME1) == (NAME2))
-#define FFB_CACHED_COLOR_SET(NAME)		\
-	ffb->fg = (NAME)
-#define FFB_CACHED_COLOR_UPDATE(NAME1, NAME2)	\
-	ffb->fg = (NAME1) = (NAME2)
-#define FFB_SET_PRIM_COLOR(COLOR_VERTEX)	\
-	ffb->fg = FFB_PACK_CONST_UBYTE_ARGB_COLOR((COLOR_VERTEX)->color[0])
-#define FFB_PRIM_COLOR_COST			1
-#define FFB_SET_VERTEX_COLOR(VTX)		/**/
-#define FFB_VERTEX_COLOR_COST			0
-#else
-#define FFB_DECLARE_CACHED_COLOR(NAME)		/**/
-#define FFB_COMPUTE_CACHED_COLOR(NAME, VTX)	/**/
-#define FFB_CACHED_COLOR_SAME(NAME1, NAME2)	0
-#define FFB_CACHED_COLOR_SET(NAME1)		/**/
-#define FFB_CACHED_COLOR_UPDATE(NAME1, NAME2)	/**/
-#define FFB_SET_PRIM_COLOR(COLOR_VERTEX)	/**/
-#define FFB_PRIM_COLOR_COST			0
-#if (IND & FFB_ALPHA_BIT)
-#define FFB_SET_VERTEX_COLOR(VTX)		\
-	ffb->alpha = FFB_GET_ALPHA(VTX);	\
-	ffb->red   = FFB_GET_RED(VTX);		\
-	ffb->green = FFB_GET_GREEN(VTX);	\
-	ffb->blue  = FFB_GET_BLUE(VTX)
-#define FFB_VERTEX_COLOR_COST			4
-#else
-#define FFB_SET_VERTEX_COLOR(VTX)		\
-	ffb->red   = FFB_GET_RED(VTX);		\
-	ffb->green = FFB_GET_GREEN(VTX);	\
-	ffb->blue  = FFB_GET_BLUE(VTX)
-#define FFB_VERTEX_COLOR_COST			3
-#endif
-#endif
-
-#define RESET_STIPPLE	ffb->lpat = fmesa->lpat;
-
-#if !(IND & (FFB_TRI_CULL_BIT))
-static void TAG(ffb_vb_points)(GLcontext *ctx, GLuint start, GLuint count, GLuint flags)
-{
-	GLint i;
-	IMPL_LOCAL_VARS;
-
-#ifdef FFB_RENDER_TRACE
-	fprintf(stderr, "%s: start(%d) count(%d) flags(%x)\n",
-		__FUNCTION__, start, count, flags);
-#endif
-	ffbRenderPrimitive(ctx, GL_POINTS);
-	if (ctx->_TriangleCaps & DD_POINT_SMOOTH) {
-		for (i = start; i < count; i++) {
-			ffb_vertex *v0 = &fmesa->verts[ELT(i)];
-
-			FFBFifo(fmesa, 4);
-			ffb->fg = FFB_PACK_CONST_UBYTE_ARGB_COLOR(v0->color[0]);
-			ffb->z = FFB_GET_Z(v0);
-			ffb->y = FFB_GET_Y(v0) + 0x8000 /* FIX ME */;
-			ffb->x = FFB_GET_X(v0) + 0x8000 /* FIX ME */;
-		}
-	} else {
-		for (i = start; i < count; i++) {
-			ffb_vertex *v0 = &fmesa->verts[ELT(i)];
-			FFBFifo(fmesa, 4);
-			ffb->fg = FFB_PACK_CONST_UBYTE_ARGB_COLOR(v0->color[0]);
-			ffb->constz = Z_FROM_MESA(FFB_Z_TO_FLOAT(FFB_GET_Z(v0)));
-			ffb->bh = FFB_GET_Y(v0) >> 16;
-			ffb->bw = FFB_GET_X(v0) >> 16;
-		}
-	}
-
-	fmesa->ffbScreen->rp_active = 1;
-}
-
-static void TAG(ffb_vb_lines)(GLcontext *ctx, GLuint start, GLuint count, GLuint flags)
-{
-	GLint i;
-	IMPL_LOCAL_VARS;
-
-#ifdef FFB_RENDER_TRACE
-	fprintf(stderr, "%s: start(%d) count(%d) flags(%x)\n",
-		__FUNCTION__, start, count, flags);
-#endif
-	ffbRenderPrimitive(ctx, GL_LINES);
-	for (i = start + 1; i < count; i += 2) {
-		ffb_vertex *v0 = &fmesa->verts[i - 1];
-		ffb_vertex *v1 = &fmesa->verts[i - 0];
-
-		FFBFifo(fmesa, (1 + FFB_PRIM_COLOR_COST +
-				(FFB_VERTEX_COLOR_COST * 2) + 6));
-
-		RESET_STIPPLE;
-
-		FFB_SET_PRIM_COLOR(v1);
-
-		FFB_SET_VERTEX_COLOR(v0);
-		ffb->z   = FFB_GET_Z(v0);
-		ffb->ryf = FFB_GET_Y(v0);
-		ffb->rxf = FFB_GET_X(v0);
-
-		FFB_SET_VERTEX_COLOR(v1);
-		ffb->z   = FFB_GET_Z(v1);
-		ffb->y   = FFB_GET_Y(v1);
-		ffb->x   = FFB_GET_X(v1);
-	}
-}
-
-static void TAG(ffb_vb_line_loop)(GLcontext *ctx, GLuint start, GLuint count, GLuint flags)
-{
-	GLint i;
-	IMPL_LOCAL_VARS;
-
-#ifdef FFB_RENDER_TRACE
-	fprintf(stderr, "%s: start(%d) count(%d) flags(%x)\n",
-		__FUNCTION__, start, count, flags);
-#endif
-	ffbRenderPrimitive(ctx, GL_LINE_LOOP);
-	if ((flags & PRIM_BEGIN) != 0) {
-		ffb_vertex *v0 = &fmesa->verts[ELT(start + 0)];
-		ffb_vertex *v1 = &fmesa->verts[ELT(start + 1)];
-
-		FFBFifo(fmesa, (1 + FFB_PRIM_COLOR_COST +
-				((FFB_VERTEX_COLOR_COST * 2) + (3 * 2))));
-
-		RESET_STIPPLE;
-
-		FFB_SET_PRIM_COLOR(v1);
-
-		FFB_SET_VERTEX_COLOR(v0);
-		ffb->z   = FFB_GET_Z(v0);
-		ffb->ryf = FFB_GET_Y(v0);
-		ffb->rxf = FFB_GET_X(v0);
-
-		FFB_SET_VERTEX_COLOR(v1);
-		ffb->z   = FFB_GET_Z(v1);
-		ffb->y   = FFB_GET_Y(v1);
-		ffb->x   = FFB_GET_X(v1);
-	}
-	for (i = start + 2; i < count; i++) {
-		ffb_vertex *v0 = &fmesa->verts[ELT(i)];
-
-		FFBFifo(fmesa, (FFB_PRIM_COLOR_COST +
-				(FFB_VERTEX_COLOR_COST + 3)));
-
-		FFB_SET_PRIM_COLOR(v0);
-
-		FFB_SET_VERTEX_COLOR(v0);
-		ffb->z   = FFB_GET_Z(v0);
-		ffb->y   = FFB_GET_Y(v0);
-		ffb->x   = FFB_GET_X(v0);
-	}
-	if ((flags & PRIM_END) != 0) {
-		ffb_vertex *v0 = &fmesa->verts[ELT(start)];
-
-		FFBFifo(fmesa, (FFB_PRIM_COLOR_COST +
-				(FFB_VERTEX_COLOR_COST + 3)));
-
-		FFB_SET_PRIM_COLOR(v0);
-
-		FFB_SET_VERTEX_COLOR(v0);
-		ffb->z   = FFB_GET_Z(v0);
-		ffb->y   = FFB_GET_Y(v0);
-		ffb->x   = FFB_GET_X(v0);
-	}
-
-	fmesa->ffbScreen->rp_active = 1;
-}
-
-static void TAG(ffb_vb_line_strip)(GLcontext *ctx, GLuint start, GLuint count, GLuint flags)
-{
-	GLint i;
-	FFB_DECLARE_CACHED_COLOR(cached_fg)
-	IMPL_LOCAL_VARS;
-
-#ifdef FFB_RENDER_TRACE
-	fprintf(stderr, "%s: start(%d) count(%d) flags(%x)\n",
-		__FUNCTION__, start, count, flags);
-#endif
-	ffbRenderPrimitive(ctx, GL_LINE_STRIP);
-	FFBFifo(fmesa, (1 + FFB_PRIM_COLOR_COST +
-			((FFB_VERTEX_COLOR_COST * 2) + (3 * 2))));
-
-	RESET_STIPPLE;
-
-	{
-		ffb_vertex *v0 = &fmesa->verts[ELT(start + 0)];
-		ffb_vertex *v1 = &fmesa->verts[ELT(start + 1)];
-
-		FFB_COMPUTE_CACHED_COLOR(cached_fg, v0);
-		FFB_CACHED_COLOR_SET(cached_fg);
-
-		FFB_SET_VERTEX_COLOR(v0);
-		ffb->z = FFB_GET_Z(v0);
-		ffb->ryf = FFB_GET_Y(v0);
-		ffb->rxf = FFB_GET_X(v0);
-
-		FFB_SET_VERTEX_COLOR(v1);
-		ffb->z = FFB_GET_Z(v1);
-		ffb->y = FFB_GET_Y(v1);
-		ffb->x = FFB_GET_X(v1);
-	}
-
-	for (i = start + 2; i < count; i++) {
-		ffb_vertex *v1 = &fmesa->verts[ELT(i - 0)];
-		FFB_DECLARE_CACHED_COLOR(new_fg)
-
-		FFB_COMPUTE_CACHED_COLOR(new_fg, v1);
-		if (FFB_CACHED_COLOR_SAME(cached_fg, new_fg)) {
-			FFBFifo(fmesa, ((FFB_VERTEX_COLOR_COST * 1) + (3 * 1)));
-		} else {
-			FFBFifo(fmesa, (FFB_PRIM_COLOR_COST +
-					(FFB_VERTEX_COLOR_COST * 1) + (3 * 1)));
-			FFB_CACHED_COLOR_UPDATE(cached_fg, new_fg);
-		}
-
-		FFB_SET_VERTEX_COLOR(v1);
-		ffb->z   = FFB_GET_Z(v1);
-		ffb->y   = FFB_GET_Y(v1);
-		ffb->x   = FFB_GET_X(v1);
-	}
-
-	fmesa->ffbScreen->rp_active = 1;
-}
-#endif /* !(IND & (FFB_TRI_CULL_BIT)) */
-
-/* OK, now things start getting fun :-) */
-#if (IND & (FFB_TRI_CULL_BIT))
-#define FFB_AREA_DECLARE	GLfloat cc, ex, ey, fx, fy;
-#define FFB_COMPUTE_AREA_TRI(V0, V1, V2)	\
-{	ex = (V1)->x - (V0)->x;			\
-	ey = (V1)->y - (V0)->y;			\
-	fx = (V2)->x - (V0)->x;			\
-	fy = (V2)->y - (V0)->y;			\
-	cc = ex*fy-ey*fx;			\
-}
-#define FFB_COMPUTE_AREA_QUAD(V0, V1, V2, V3)	\
-{	ex = (V2)->x - (V0)->x;			\
-	ey = (V2)->y - (V0)->y;			\
-	fx = (V3)->x - (V1)->x;			\
-	fy = (V3)->y - (V1)->y;			\
-	cc = ex*fy-ey*fx;			\
-}
-#else
-#define FFB_AREA_DECLARE			/**/
-#define FFB_COMPUTE_AREA_TRI(V0, V1, V2)	do { } while(0)
-#define FFB_COMPUTE_AREA_QUAD(V0, V1, V2, V3)	do { } while(0)
-#endif
-
-#if (IND & FFB_TRI_CULL_BIT)
-#define FFB_CULL_TRI(CULL_ACTION)		\
-	if (cc * fmesa->backface_sign > fmesa->ffb_zero) {	\
-		CULL_ACTION			\
-	}
-#define FFB_CULL_QUAD(CULL_ACTION)		\
-	if (cc * fmesa->backface_sign > fmesa->ffb_zero) {	\
-		CULL_ACTION			\
-	}
-#else
-#define FFB_CULL_TRI(CULL_ACTION)	do { } while (0)
-#define FFB_CULL_QUAD(CULL_ACTION)	do { } while (0)
-#endif
-
-static void TAG(ffb_vb_triangles)(GLcontext *ctx, GLuint start, GLuint count, GLuint flags)
-{
-	GLint i;
-	IMPL_LOCAL_VARS;
-
-#ifdef FFB_RENDER_TRACE
-	fprintf(stderr, "%s: start(%d) count(%d) flags(%x)\n",
-		__FUNCTION__, start, count, flags);
-#endif
-	ffbRenderPrimitive(ctx, GL_TRIANGLES);
-	for (i = start + 2; i < count; i += 3) {
-		ffb_vertex *v0 = &fmesa->verts[ELT(i - 2)];
-		ffb_vertex *v1 = &fmesa->verts[ELT(i - 1)];
-		ffb_vertex *v2 = &fmesa->verts[ELT(i - 0)];
-		FFB_AREA_DECLARE
-
-		FFB_COMPUTE_AREA_TRI(v0, v1, v2);
-		FFB_CULL_TRI(continue;);
-
-		FFBFifo(fmesa, (FFB_PRIM_COLOR_COST +
-				(FFB_VERTEX_COLOR_COST * 3) + 9));
-		FFB_SET_PRIM_COLOR(v2);
-
-		FFB_SET_VERTEX_COLOR(v0);
-		ffb->z   = FFB_GET_Z(v0);
-		ffb->ryf = FFB_GET_Y(v0);
-		ffb->rxf = FFB_GET_X(v0);
-
-		FFB_SET_VERTEX_COLOR(v1);
-		ffb->z   = FFB_GET_Z(v1);
-		ffb->y   = FFB_GET_Y(v1);
-		ffb->x   = FFB_GET_X(v1);
-
-		FFB_SET_VERTEX_COLOR(v2);
-		ffb->z   = FFB_GET_Z(v2);
-		ffb->y   = FFB_GET_Y(v2);
-		ffb->x   = FFB_GET_X(v2);
-	}
-
-	fmesa->ffbScreen->rp_active = 1;
-}
-
-static void TAG(ffb_vb_tri_strip)(GLcontext *ctx, GLuint start, GLuint count, GLuint flags)
-{
-	GLint i;
-	GLint parity = 0;
-	IMPL_LOCAL_VARS;
-
-#ifdef FFB_RENDER_TRACE
-	fprintf(stderr, "%s: start(%d) count(%d) flags(%x)\n",
-		__FUNCTION__, start, count, flags);
-#endif
-	ffbRenderPrimitive(ctx, GL_TRIANGLE_STRIP);
-
-	i = start + 2;
-	goto something_clipped;
-
- something_clipped:
-	for (; i < count; i++, parity ^= 1) {
-		ffb_vertex *v0 = &fmesa->verts[ELT(i - 2 + parity)];
-		ffb_vertex *v1 = &fmesa->verts[ELT(i - 1 - parity)];
-		ffb_vertex *v2 = &fmesa->verts[ELT(i - 0)];
-		FFB_AREA_DECLARE
-
-		FFB_COMPUTE_AREA_TRI(v0, v1, v2);
-		FFB_CULL_TRI(continue;);
-
-		FFBFifo(fmesa, (FFB_PRIM_COLOR_COST +
-				(FFB_VERTEX_COLOR_COST * 3) + 9));
-		FFB_SET_PRIM_COLOR(v2);
-
-		FFB_SET_VERTEX_COLOR(v0);
-		ffb->z   = FFB_GET_Z(v0);
-		ffb->ryf = FFB_GET_Y(v0);
-		ffb->rxf = FFB_GET_X(v0);
-
-		FFB_SET_VERTEX_COLOR(v1);
-		ffb->z   = FFB_GET_Z(v1);
-		ffb->y   = FFB_GET_Y(v1);
-		ffb->x   = FFB_GET_X(v1);
-
-		FFB_SET_VERTEX_COLOR(v2);
-		ffb->z   = FFB_GET_Z(v2);
-		ffb->y   = FFB_GET_Y(v2);
-		ffb->x   = FFB_GET_X(v2);
-
-		i++;
-		parity ^= 1;
-		break;
-	}
-
-	for (; i < count; i++, parity ^= 1) {
-		ffb_vertex *v0 = &fmesa->verts[ELT(i - 2 + parity)];
-		ffb_vertex *v1 = &fmesa->verts[ELT(i - 1 - parity)];
-		ffb_vertex *v2 = &fmesa->verts[ELT(i - 0)];
-		FFB_AREA_DECLARE
-		(void) v0; (void) v1;
-
-		FFB_COMPUTE_AREA_TRI(v0, v1, v2);
-		FFB_CULL_TRI(i++; parity^=1; goto something_clipped;);
-
-		FFBFifo(fmesa, (FFB_PRIM_COLOR_COST +
-				(FFB_VERTEX_COLOR_COST * 1) + 3));
-		FFB_SET_PRIM_COLOR(v2);
-
-		FFB_SET_VERTEX_COLOR(v2);
-		ffb->z   = FFB_GET_Z(v2);
-		ffb->y   = FFB_GET_Y(v2);
-		ffb->x   = FFB_GET_X(v2);
-	}
-
-	fmesa->ffbScreen->rp_active = 1;
-}
-
-static void TAG(ffb_vb_tri_fan)(GLcontext *ctx, GLuint start, GLuint count, GLuint flags)
-{
-	GLint i;
-	IMPL_LOCAL_VARS;
-
-#ifdef FFB_RENDER_TRACE
-	fprintf(stderr, "%s: start(%d) count(%d) flags(%x)\n",
-		__FUNCTION__, start, count, flags);
-#endif
-	ffbRenderPrimitive(ctx, GL_TRIANGLE_FAN);
-
-	i = start + 2;
-	goto something_clipped;
-
- something_clipped:
-	for ( ; i < count; i++) {
-		ffb_vertex *v0 = &fmesa->verts[ELT(start)];
-		ffb_vertex *v1 = &fmesa->verts[ELT(i - 1)];
-		ffb_vertex *v2 = &fmesa->verts[ELT(i - 0)];
-		FFB_AREA_DECLARE
-
-		FFB_COMPUTE_AREA_TRI(v0, v1, v2);
-		FFB_CULL_TRI(continue;);
-
-		FFBFifo(fmesa, (FFB_PRIM_COLOR_COST +
-				(FFB_VERTEX_COLOR_COST * 3) + 9));
-		FFB_SET_PRIM_COLOR(v2);
-
-		FFB_SET_VERTEX_COLOR(v0);
-		ffb->z   = FFB_GET_Z(v0);
-		ffb->ryf = FFB_GET_Y(v0);
-		ffb->rxf = FFB_GET_X(v0);
-
-		FFB_SET_VERTEX_COLOR(v1);
-		ffb->z   = FFB_GET_Z(v1);
-		ffb->y   = FFB_GET_Y(v1);
-		ffb->x   = FFB_GET_X(v1);
-
-		FFB_SET_VERTEX_COLOR(v2);
-		ffb->z   = FFB_GET_Z(v2);
-		ffb->y   = FFB_GET_Y(v2);
-		ffb->x   = FFB_GET_X(v2);
-
-		i++;
-		break;
-	}
-
-	for (; i < count; i++) {
-		ffb_vertex *v0 = &fmesa->verts[ELT(start)];
-		ffb_vertex *v1 = &fmesa->verts[ELT(i - 1)];
-		ffb_vertex *v2 = &fmesa->verts[ELT(i - 0)];
-		FFB_AREA_DECLARE
-		(void) v0; (void) v1;
-
-		FFB_COMPUTE_AREA_TRI(v0, v1, v2);
-		FFB_CULL_TRI(i++; goto something_clipped;);
-
-		FFBFifo(fmesa, (FFB_PRIM_COLOR_COST +
-				(FFB_VERTEX_COLOR_COST * 1) + 3));
-		FFB_SET_PRIM_COLOR(v2);
-
-		FFB_SET_VERTEX_COLOR(v2);
-		ffb->z    = FFB_GET_Z(v2);
-		ffb->dmyf = FFB_GET_Y(v2);
-		ffb->dmxf = FFB_GET_X(v2);
-	}
-
-	fmesa->ffbScreen->rp_active = 1;
-}
-
-static void TAG(ffb_vb_poly)(GLcontext *ctx, GLuint start, GLuint count, GLuint flags)
-{
-	GLint i;
-	IMPL_LOCAL_VARS;
-
-#ifdef FFB_RENDER_TRACE
-	fprintf(stderr, "%s: start(%d) count(%d) flags(%x)\n",
-		__FUNCTION__, start, count, flags);
-#endif
-	ffbRenderPrimitive(ctx, GL_POLYGON);
-
-	/* XXX Optimize XXX */
-	for (i = start + 2; i < count; i++) {
-		ffb_vertex *v0 = &fmesa->verts[ELT(i - 1)];
-		ffb_vertex *v1 = &fmesa->verts[ELT(i)];
-		ffb_vertex *v2 = &fmesa->verts[ELT(start)];
-		FFB_AREA_DECLARE
-
-		FFB_COMPUTE_AREA_TRI(v0, v1, v2);
-		FFB_CULL_TRI(continue;);
-
-		FFBFifo(fmesa, (FFB_PRIM_COLOR_COST +
-				(FFB_VERTEX_COLOR_COST * 3) + 9));
-		FFB_SET_PRIM_COLOR(v2);
-
-		FFB_SET_VERTEX_COLOR(v0);
-		ffb->z   = FFB_GET_Z(v0);
-		ffb->ryf = FFB_GET_Y(v0);
-		ffb->rxf = FFB_GET_X(v0);
-
-		FFB_SET_VERTEX_COLOR(v1);
-		ffb->z   = FFB_GET_Z(v1);
-		ffb->y   = FFB_GET_Y(v1);
-		ffb->x   = FFB_GET_X(v1);
-
-		FFB_SET_VERTEX_COLOR(v2);
-		ffb->z   = FFB_GET_Z(v2);
-		ffb->y   = FFB_GET_Y(v2);
-		ffb->x   = FFB_GET_X(v2);
-	}
-
-	fmesa->ffbScreen->rp_active = 1;
-}
-
-static void TAG(ffb_vb_quads)(GLcontext *ctx, GLuint start, GLuint count, GLuint flags)
-{
-	GLint i;
-	IMPL_LOCAL_VARS;
-
-#ifdef FFB_RENDER_TRACE
-	fprintf(stderr, "%s: start(%d) count(%d) flags(%x)\n",
-		__FUNCTION__, start, count, flags);
-#endif
-	ffbRenderPrimitive(ctx, GL_QUADS);
-
-	for (i = start + 3; i < count; i += 4) {
-		ffb_vertex *v0 = &fmesa->verts[ELT(i - 3)];
-		ffb_vertex *v1 = &fmesa->verts[ELT(i - 2)];
-		ffb_vertex *v2 = &fmesa->verts[ELT(i - 1)];
-		ffb_vertex *v3 = &fmesa->verts[ELT(i - 0)];
-		FFB_AREA_DECLARE
-
-		FFB_COMPUTE_AREA_QUAD(v0, v1, v2, v3);
-		FFB_CULL_QUAD(continue;);
-
-		FFBFifo(fmesa, (FFB_PRIM_COLOR_COST +
-				(FFB_VERTEX_COLOR_COST * 4) + 12));
-		FFB_SET_PRIM_COLOR(v3);
-
-		FFB_SET_VERTEX_COLOR(v0);
-		ffb->z    = FFB_GET_Z(v0);
-		ffb->ryf  = FFB_GET_Y(v0);
-		ffb->rxf  = FFB_GET_X(v0);
-
-		FFB_SET_VERTEX_COLOR(v1);
-		ffb->z    = FFB_GET_Z(v1);
-		ffb->y    = FFB_GET_Y(v1);
-		ffb->x    = FFB_GET_X(v1);
-
-		FFB_SET_VERTEX_COLOR(v2);
-		ffb->z    = FFB_GET_Z(v2);
-		ffb->y    = FFB_GET_Y(v2);
-		ffb->x    = FFB_GET_X(v2);
-
-		FFB_SET_VERTEX_COLOR(v3);
-		ffb->z    = FFB_GET_Z(v3);
-		ffb->dmyf = FFB_GET_Y(v3);
-		ffb->dmxf = FFB_GET_X(v3);
-	}
-
-	fmesa->ffbScreen->rp_active = 1;
-}
-
-static void TAG(ffb_vb_quad_strip)(GLcontext *ctx, GLuint start, GLuint count, GLuint flags)
-{
-	GLint i;
-	IMPL_LOCAL_VARS;
-
-#ifdef FFB_RENDER_TRACE
-	fprintf(stderr, "%s: start(%d) count(%d) flags(%x)\n",
-		__FUNCTION__, start, count, flags);
-#endif
-	ffbRenderPrimitive(ctx, GL_QUAD_STRIP);
-
-	/* XXX Optimize XXX */
-	for (i = start + 3; i < count; i += 2) {
-		ffb_vertex *v0 = &fmesa->verts[ELT(i - 1)];
-		ffb_vertex *v1 = &fmesa->verts[ELT(i - 3)];
-		ffb_vertex *v2 = &fmesa->verts[ELT(i - 2)];
-		ffb_vertex *v3 = &fmesa->verts[ELT(i - 0)];
-		FFB_AREA_DECLARE
-
-		FFB_COMPUTE_AREA_QUAD(v0, v1, v2, v3);
-		FFB_CULL_QUAD(continue;);
-
-		FFBFifo(fmesa, (FFB_PRIM_COLOR_COST +
-				(FFB_VERTEX_COLOR_COST * 4) + 12));
-		FFB_SET_PRIM_COLOR(v3);
-
-		FFB_DUMP_VERTEX(v0);
-		FFB_SET_VERTEX_COLOR(v0);
-		ffb->z    = FFB_GET_Z(v0);
-		ffb->ryf  = FFB_GET_Y(v0);
-		ffb->rxf  = FFB_GET_X(v0);
-
-		FFB_DUMP_VERTEX(v1);
-		FFB_SET_VERTEX_COLOR(v1);
-		ffb->z    = FFB_GET_Z(v1);
-		ffb->y    = FFB_GET_Y(v1);
-		ffb->x    = FFB_GET_X(v1);
-
-		FFB_DUMP_VERTEX(v2);
-		FFB_SET_VERTEX_COLOR(v2);
-		ffb->z    = FFB_GET_Z(v2);
-		ffb->y    = FFB_GET_Y(v2);
-		ffb->x    = FFB_GET_X(v2);
-
-		FFB_DUMP_VERTEX(v3);
-		FFB_SET_VERTEX_COLOR(v3);
-		ffb->z    = FFB_GET_Z(v3);
-		ffb->dmyf = FFB_GET_Y(v3);
-		ffb->dmxf = FFB_GET_X(v3);
-	}
-
-	fmesa->ffbScreen->rp_active = 1;
-}
-
-static void (*TAG(render_tab)[GL_POLYGON + 2])(GLcontext *, GLuint, GLuint, GLuint) =
-{
-#if !(IND & (FFB_TRI_CULL_BIT))
-	TAG(ffb_vb_points),
-	TAG(ffb_vb_lines),
-	TAG(ffb_vb_line_loop),
-	TAG(ffb_vb_line_strip),
-#else
-	NULL,
-	NULL,
-	NULL,
-	NULL,
-#endif
-	TAG(ffb_vb_triangles),
-	TAG(ffb_vb_tri_strip),
-	TAG(ffb_vb_tri_fan),
-	TAG(ffb_vb_quads),
-	TAG(ffb_vb_quad_strip),
-	TAG(ffb_vb_poly),
-	ffb_vb_noop,
-};
-
-#undef IND
-#undef TAG
-
-#undef IMPL_LOCAL_VARS
-#undef FFB_DECLARE_CACHED_COLOR
-#undef FFB_COMPUTE_CACHED_COLOR
-#undef FFB_CACHED_COLOR_SAME
-#undef FFB_CACHED_COLOR_SET
-#undef FFB_CACHED_COLOR_UPDATE
-#undef FFB_SET_PRIM_COLOR
-#undef FFB_PRIM_COLOR_COST
-#undef FFB_SET_VERTEX_COLOR
-#undef FFB_VERTEX_COLOR_COST
-#undef RESET_STIPPLE
-#undef FFB_AREA_DECLARE
-#undef FFB_COMPUTE_AREA_TRI
-#undef FFB_COMPUTE_AREA_QUAD
-#undef FFB_CULL_TRI
-#undef FFB_CULL_QUAD
diff --git a/src/mesa/drivers/dri/ffb/ffb_span.c b/src/mesa/drivers/dri/ffb/ffb_span.c
deleted file mode 100644
index 61901cccad..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_span.c
+++ /dev/null
@@ -1,127 +0,0 @@
-/* 
- *
- * GLX Hardware Device Driver for Sun Creator/Creator3D
- * Copyright (C) 2000 David S. Miller
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * DAVID MILLER, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM, 
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
- * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- *
- *    David S. Miller <davem@redhat.com>
- */
-
-#include "main/mtypes.h"
-#include "ffb_dd.h"
-#include "ffb_span.h"
-#include "ffb_context.h"
-#include "ffb_lock.h"
-
-#define DBG 0
-
-#define HW_LOCK()						\
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);			\
-	if (!fmesa->hw_locked)					\
-		LOCK_HARDWARE(fmesa);
-
-#define HW_UNLOCK()			\
-	if (!fmesa->hw_locked)		\
-		UNLOCK_HARDWARE(fmesa); \
-
-#define LOCAL_VARS						\
-	__DRIdrawable *dPriv = fmesa->driDrawable;	\
-	GLuint height = dPriv->h;				\
-        GLuint p;						\
-	char *buf; 						\
-        (void) p
-
-#define INIT_MONO_PIXEL(p, color)		\
-        p = ((color[0] <<  0) |			\
-	     (color[1] << 8) |			\
-	     (color[2] << 16))
-
-/* We use WID clipping, so this test always passes. */
-#define CLIPPIXEL(__x, __y)	(1)
-
-/* And also, due to WID clipping, we need not do anything
- * special here.
- */
-#define CLIPSPAN(__x,__y,__n,__x1,__n1,__i)		\
-	__n1 = __n;					\
-	__x1 = __x;					\
-
-#define HW_CLIPLOOP()							\
-do {	unsigned int fbc, ppc, cmp;					\
-	FFBWait(fmesa, fmesa->regs);					\
-	fbc = fmesa->regs->fbc; ppc = fmesa->regs->ppc; cmp = fmesa->regs->cmp; \
-	fmesa->regs->fbc = ((fbc &					\
-			     ~(FFB_FBC_WB_C | FFB_FBC_ZE_MASK | FFB_FBC_RGBE_MASK)) \
-			    | (FFB_FBC_ZE_OFF | FFB_FBC_RGBE_MASK));	\
-	fmesa->regs->ppc = ((ppc &					\
-			     ~(FFB_PPC_XS_MASK | FFB_PPC_ABE_MASK | FFB_PPC_DCE_MASK | \
-			       FFB_PPC_APE_MASK | FFB_PPC_CS_MASK))	\
-			    | (FFB_PPC_XS_WID | FFB_PPC_ABE_DISABLE |	\
-			       FFB_PPC_DCE_DISABLE | FFB_PPC_APE_DISABLE | \
-			       FFB_PPC_CS_VAR));			\
-	fmesa->regs->cmp = ((cmp & ~(0xff << 16)) | (0x80 << 16));	\
-	fmesa->ffbScreen->rp_active = 1;				\
-	FFBWait(fmesa, fmesa->regs);					\
-	buf = (char *)(fmesa->sfb32 + (dPriv->x << 2) + (dPriv->y << 13));\
-	if (dPriv->numClipRects) {
-
-#define HW_ENDCLIPLOOP()	\
-	}			\
-	fmesa->regs->fbc = fbc;	\
-	fmesa->regs->ppc = ppc;	\
-	fmesa->regs->cmp = cmp;	\
-	fmesa->ffbScreen->rp_active = 1; \
-} while(0)
-
-#define Y_FLIP(__y)		(height - __y - 1)
-
-#define READ_RGBA(rgba,__x,__y)					\
-do {	GLuint p = *(GLuint *)(buf + ((__x)<<2) + ((__y)<<13));	\
-	rgba[0] = (p >>  0) & 0xff;				\
-	rgba[1] = (p >>  8) & 0xff;				\
-	rgba[2] = (p >> 16) & 0xff;				\
-	rgba[3] = 0xff;						\
-} while(0)
-
-#define WRITE_RGBA(__x, __y, __r, __g, __b, __a)		\
-	*(GLuint *)(buf + ((__x)<<2) + ((__y)<<13)) =		\
-		((((__r) & 0xff) <<  0) |			\
-		 (((__g) & 0xff) <<  8) |			\
-		 (((__b) & 0xff) << 16))
-
-#define WRITE_PIXEL(__x, __y, __p) \
-	*(GLuint *)(buf + ((__x)<<2) + ((__y)<<13)) = (__p)
-
-#define TAG(x) ffb##x##_888
-
-#include "spantmp.h"
-
-/**
- * Plug in the Get/Put routines for the given driRenderbuffer.
- */
-void
-ffbSetSpanFunctions(driRenderbuffer *drb, const GLvisual *vis)
-{
-	assert(vis->redBits == 8);
-        assert(vis->greenBits == 8);
-        assert(vis->blueBits == 8);
-        ffbInitPointers_888(&drb->Base);
-}
diff --git a/src/mesa/drivers/dri/ffb/ffb_span.h b/src/mesa/drivers/dri/ffb/ffb_span.h
deleted file mode 100644
index 37506cf30e..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_span.h
+++ /dev/null
@@ -1,9 +0,0 @@
-
-#ifndef _FFB_SPAN_H
-#define _FFB_SPAN_H
-
-#include "drirenderbuffer.h"
-
-void ffbSetSpanFunctions(driRenderbuffer *drb, const GLvisual *vis);
-
-#endif /* !(_FFB_SPAN_H) */
diff --git a/src/mesa/drivers/dri/ffb/ffb_state.c b/src/mesa/drivers/dri/ffb/ffb_state.c
deleted file mode 100644
index c09d2fef83..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_state.c
+++ /dev/null
@@ -1,1222 +0,0 @@
-/* 
- *
- * GLX Hardware Device Driver for Sun Creator/Creator3D
- * Copyright (C) 2000, 2001 David S. Miller
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * DAVID MILLER, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM, 
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
- * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- *
- *    David S. Miller <davem@redhat.com>
- */
-
-#include "main/mtypes.h"
-#include "main/colormac.h"
-#include "main/enums.h"
-
-#include "vbo/vbo.h"
-#include "tnl/tnl.h"
-#include "tnl/t_pipeline.h"
-#include "swrast/swrast.h"
-#include "swrast_setup/swrast_setup.h"
-
-#include "ffb_dd.h"
-#include "ffb_span.h"
-#include "ffb_context.h"
-#include "ffb_tris.h"
-#include "ffb_state.h"
-
-#undef STATE_TRACE
-
-static unsigned int ffbComputeAlphaFunc(GLcontext *ctx)
-{
-	unsigned int xclip;
-	GLubyte alphaRef;
-
-#ifdef STATE_TRACE
-	fprintf(stderr, "ffbDDAlphaFunc: func(%s) ref(%02x)\n",
-		_mesa_lookup_enum_by_nr(ctx->Color.AlphaFunc),
-		ctx->Color.AlphaRef & 0xff);
-#endif
-
-	switch (ctx->Color.AlphaFunc) {
-	case GL_NEVER: xclip = FFB_XCLIP_TEST_NEVER; break;
-	case GL_LESS: xclip = FFB_XCLIP_TEST_LT; break;
-	case GL_EQUAL: xclip = FFB_XCLIP_TEST_EQ; break;
-	case GL_LEQUAL: xclip = FFB_XCLIP_TEST_LE; break;
-	case GL_GREATER: xclip = FFB_XCLIP_TEST_GT; break;
-	case GL_NOTEQUAL: xclip = FFB_XCLIP_TEST_NE; break;
-	case GL_GEQUAL: xclip = FFB_XCLIP_TEST_GE; break;
-	case GL_ALWAYS: xclip = FFB_XCLIP_TEST_ALWAYS; break;
-
-	default:
-		return FFB_XCLIP_TEST_ALWAYS | 0x00;
-	}
-
-	CLAMPED_FLOAT_TO_UBYTE(alphaRef, ctx->Color.AlphaRef);
-	xclip |= (alphaRef & 0xff);
-
-	return xclip;
-}
-
-static void ffbDDAlphaFunc(GLcontext *ctx, GLenum func, GLfloat ref)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-
-	if (ctx->Color.AlphaEnabled) {
-		unsigned int xclip = ffbComputeAlphaFunc(ctx);
-
-		if (fmesa->xclip != xclip) {
-			fmesa->xclip = xclip;
-			FFB_MAKE_DIRTY(fmesa, FFB_STATE_XCLIP, 1);
-		}
-	}
-}
-
-static void ffbDDBlendEquationSeparate(GLcontext *ctx, 
-				       GLenum modeRGB, GLenum modeA)
-{
-
-#ifdef STATE_TRACE
-	fprintf(stderr, "ffbDDBlendEquation: mode(%s)\n", 
-		_mesa_lookup_enum_by_nr(modeRGB));
-#endif
-	assert( modeRGB == modeA );
-	FALLBACK( ctx, (modeRGB != GL_FUNC_ADD), FFB_BADATTR_BLENDEQN);
-}
-
-static void ffbDDBlendFuncSeparate(GLcontext *ctx, GLenum sfactorRGB,
-				   GLenum dfactorRGB, GLenum sfactorA,
-				   GLenum dfactorA)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	unsigned int blendc = 1 << 4;
-
-#ifdef STATE_TRACE
-	fprintf(stderr, "ffbDDBlendFuncSeparate: sRGB(%s) dRGB(%s) sA(%s) dA(%s)\n",
-		_mesa_lookup_enum_by_nr(sfactorRGB),
-		_mesa_lookup_enum_by_nr(dfactorRGB),
-		_mesa_lookup_enum_by_nr(sfactorA),
-		_mesa_lookup_enum_by_nr(dfactorA));
-#endif
-	switch (ctx->Color.BlendSrcRGB) {
-	case GL_ZERO:
-		blendc |= (0 << 0);
-		break;
-
-	case GL_ONE:
-		blendc |= (1 << 0);
-		break;
-
-	case GL_ONE_MINUS_SRC_ALPHA:
-		blendc |= (2 << 0);
-		break;
-
-	case GL_SRC_ALPHA:
-		blendc |= (3 << 0);
-		break;
-
-	default:
-		if (ctx->Color.BlendEnabled)
-			FALLBACK( ctx, FFB_BADATTR_BLENDFUNC, GL_TRUE );
-		return;
-	};
-
-	switch (ctx->Color.BlendDstRGB) {
-	case GL_ZERO:
-		blendc |= (0 << 2);
-		break;
-
-	case GL_ONE:
-		blendc |= (1 << 2);
-		break;
-
-	case GL_ONE_MINUS_SRC_ALPHA:
-		blendc |= (2 << 2);
-		break;
-
-	case GL_SRC_ALPHA:
-		blendc |= (3 << 2);
-		break;
-
-	default:
-		if (ctx->Color.BlendEnabled)
-			FALLBACK( ctx, FFB_BADATTR_BLENDFUNC, GL_TRUE );
-		return;
-	};
-
-	if (ctx->Color.BlendEnabled &&
-	    ctx->Color.ColorLogicOpEnabled &&
-	    ctx->Color.LogicOp != GL_COPY) {
-		/* We could avoid this if sfactor is GL_ONE and
-		 * dfactor is GL_ZERO.  I do not think that is even
-		 * worthwhile to check because if someone is using
-		 * blending they use more interesting settings and
-		 * also it would add more state tracking to a lot
-		 * of the code in this file.
-		 */
-		FALLBACK(ctx, FFB_BADATTR_BLENDROP, GL_TRUE);
-		return;
-	}
-
-	FALLBACK( ctx, (FFB_BADATTR_BLENDFUNC|FFB_BADATTR_BLENDROP), GL_FALSE );
-
-	if (blendc != fmesa->blendc) {
-		fmesa->blendc = blendc;
-		FFB_MAKE_DIRTY(fmesa, FFB_STATE_BLEND, 1);
-	}
-}
-
-static void ffbDDDepthFunc(GLcontext *ctx, GLenum func)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	GLuint cmp;
-
-#ifdef STATE_TRACE
-	fprintf(stderr, "ffbDDDepthFunc: func(%s)\n",
-		_mesa_lookup_enum_by_nr(func));
-#endif
-
-	switch (func) {
-	case GL_NEVER:
-		cmp = FFB_CMP_MAGN_NEVER;
-		break;
-	case GL_ALWAYS:
-		cmp = FFB_CMP_MAGN_ALWAYS;
-		break;
-	case GL_LESS:
-		cmp = FFB_CMP_MAGN_LT;
-		break;
-	case GL_LEQUAL:
-		cmp = FFB_CMP_MAGN_LE;
-		break;
-	case GL_EQUAL:
-		cmp = FFB_CMP_MAGN_EQ;
-		break;
-	case GL_GREATER:
-		cmp = FFB_CMP_MAGN_GT;
-		break;
-	case GL_GEQUAL:
-		cmp = FFB_CMP_MAGN_GE;
-		break;
-	case GL_NOTEQUAL:
-		cmp = FFB_CMP_MAGN_NE;
-		break;
-	default:
-		return;
-	};
-
-	if (! ctx->Depth.Test)
-		cmp = FFB_CMP_MAGN_ALWAYS;
-
-	cmp <<= 16;
-	cmp = (fmesa->cmp & ~(0xff<<16)) | cmp;
-	if (cmp != fmesa->cmp) {
-		fmesa->cmp = cmp;
-		FFB_MAKE_DIRTY(fmesa, FFB_STATE_CMP, 1);
-	}
-}
-
-static void ffbDDDepthMask(GLcontext *ctx, GLboolean flag)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	GLuint fbc = fmesa->fbc;
-	GLboolean enabled_now;
-
-#ifdef STATE_TRACE
-	fprintf(stderr, "ffbDDDepthMask: flag(%d)\n", flag);
-#endif
-
-	if ((fbc & FFB_FBC_ZE_MASK) == FFB_FBC_ZE_OFF)
-		enabled_now = GL_FALSE;
-	else
-		enabled_now = GL_TRUE;
-
-	if (flag != enabled_now) {
-		fbc &= ~FFB_FBC_ZE_MASK;
-		if (flag) {
-			fbc |= FFB_FBC_WB_C | FFB_FBC_ZE_ON;
-		} else {
-			fbc |= FFB_FBC_ZE_OFF;
-			fbc &= ~FFB_FBC_WB_C;
-		}
-		fmesa->fbc = fbc;
-		FFB_MAKE_DIRTY(fmesa, FFB_STATE_FBC, 1);
-	}
-}
-
-static void
-ffbDDStencilFuncSeparate(GLcontext *ctx, GLenum face, GLenum func,
-                         GLint ref, GLuint mask)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	unsigned int stencil, stencilctl, consty;
-
-	/* We will properly update sw/hw state when stenciling is
-	 * enabled.
-	 */
-	if (! ctx->Stencil._Enabled)
-		return;
-
-	stencilctl = fmesa->stencilctl;
-	stencilctl &= ~(7 << 16);
-
-	switch (func) {
-	case GL_ALWAYS:		stencilctl |= (0 << 16); break;
-	case GL_GREATER:	stencilctl |= (1 << 16); break;
-	case GL_EQUAL:		stencilctl |= (2 << 16); break;
-	case GL_GEQUAL:		stencilctl |= (3 << 16); break;
-	case GL_NEVER:		stencilctl |= (4 << 16); break;
-	case GL_LEQUAL:		stencilctl |= (5 << 16); break;
-	case GL_NOTEQUAL:	stencilctl |= (6 << 16); break;
-	case GL_LESS:		stencilctl |= (7 << 16); break;
-
-	default:
-		return;
-	};
-
-	consty = ref & 0xf;
-
-	stencil = fmesa->stencil;
-	stencil &= ~(0xf << 20);
-	stencil |= (mask & 0xf) << 20;
-
-	if (fmesa->stencil != stencil ||
-	    fmesa->stencilctl != stencilctl ||
-	    fmesa->consty != consty) {
-		fmesa->stencil = stencil;
-		fmesa->stencilctl = stencilctl;
-		fmesa->consty = consty;
-		FFB_MAKE_DIRTY(fmesa, FFB_STATE_STENCIL, 6);
-	}
-}
-
-static void
-ffbDDStencilMaskSeparate(GLcontext *ctx, GLenum face, GLuint mask)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-
-	mask &= 0xf;
-	if (fmesa->ypmask != mask) {
-		fmesa->ypmask = mask;
-		FFB_MAKE_DIRTY(fmesa, FFB_STATE_YPMASK, 1);
-	}
-}
-
-static void
-ffbDDStencilOpSeparate(GLcontext *ctx, GLenum face, GLenum fail,
-                       GLenum zfail, GLenum zpass)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	unsigned int stencilctl;
-
-	/* We will properly update sw/hw state when stenciling is
-	 * enabled.
-	 */
-	if (! ctx->Stencil._Enabled)
-		return;
-
-	stencilctl = fmesa->stencilctl;
-	stencilctl &= ~(0xfff00000);
-
-	switch (fail) {
-	case GL_ZERO:		stencilctl |= (0 << 28); break;
-	case GL_KEEP:		stencilctl |= (1 << 28); break;
-	case GL_INVERT:		stencilctl |= (2 << 28); break;
-	case GL_REPLACE:	stencilctl |= (3 << 28); break;
-	case GL_INCR:		stencilctl |= (4 << 28); break;
-	case GL_DECR:		stencilctl |= (5 << 28); break;
-
-	default:
-		return;
-	};
-
-	switch (zfail) {
-	case GL_ZERO:		stencilctl |= (0 << 24); break;
-	case GL_KEEP:		stencilctl |= (1 << 24); break;
-	case GL_INVERT:		stencilctl |= (2 << 24); break;
-	case GL_REPLACE:	stencilctl |= (3 << 24); break;
-	case GL_INCR:		stencilctl |= (4 << 24); break;
-	case GL_DECR:		stencilctl |= (5 << 24); break;
-
-	default:
-		return;
-	};
-
-	switch (zpass) {
-	case GL_ZERO:		stencilctl |= (0 << 20); break;
-	case GL_KEEP:		stencilctl |= (1 << 20); break;
-	case GL_INVERT:		stencilctl |= (2 << 20); break;
-	case GL_REPLACE:	stencilctl |= (3 << 20); break;
-	case GL_INCR:		stencilctl |= (4 << 20); break;
-	case GL_DECR:		stencilctl |= (5 << 20); break;
-
-	default:
-		return;
-	};
-
-	if (fmesa->stencilctl != stencilctl) {
-		fmesa->stencilctl = stencilctl;
-		FFB_MAKE_DIRTY(fmesa, FFB_STATE_STENCIL, 6);
-	}
-}
-
-static void ffbCalcViewportRegs(GLcontext *ctx)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	__DRIdrawable *dPriv = fmesa->driDrawable;
-	GLuint xmin, xmax, ymin, ymax, zmin, zmax;
-	unsigned int vcmin, vcmax;
-
-	xmin = ctx->Viewport.X + dPriv->x;
-	xmax = xmin + ctx->Viewport.Width;
-	ymax = dPriv->y + dPriv->h - ctx->Viewport.Y;
-	ymin = ymax - ctx->Viewport.Height;
-	if (ctx->Scissor.Enabled) {
-		GLuint sc_xmin, sc_xmax, sc_ymin, sc_ymax;
-
-		sc_xmin = ctx->Viewport.X + dPriv->x;
-		sc_xmax = sc_xmin + ctx->Viewport.Width;
-		sc_ymax = dPriv->y + dPriv->h - ctx->Viewport.Y;
-		sc_ymin = sc_ymax - ctx->Viewport.Height;
-		if (sc_xmin > xmin)
-			xmin = sc_xmin;
-		if (sc_xmax < xmax)
-			xmax = sc_xmax;
-		if (sc_ymin > ymin)
-			ymin = sc_ymin;
-		if (sc_ymax < ymax)
-			ymax = sc_ymax;
-	}
-	zmin = ((GLdouble)ctx->Viewport.Near * 0x0fffffff);
-	zmax = ((GLdouble)ctx->Viewport.Far  * 0x0fffffff);
-
-	vcmin = ((ymin & 0xffff) << 16) | (xmin & 0xffff);
-	vcmax = ((ymax & 0xffff) << 16) | (xmax & 0xffff);
-	if (fmesa->vclipmin != vcmin ||
-	    fmesa->vclipmax != vcmax ||
-	    fmesa->vclipzmin != zmin ||
-	    fmesa->vclipzmax != zmax) {
-		fmesa->vclipmin = vcmin;
-		fmesa->vclipmax = vcmax;
-		fmesa->vclipzmin = zmin;
-		fmesa->vclipzmax = zmax;
-		FFB_MAKE_DIRTY(fmesa, FFB_STATE_CLIP, (4 + (4 * 2)));
-	}
-}
-
-void ffbCalcViewport(GLcontext *ctx)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	const GLfloat *v = ctx->Viewport._WindowMap.m;
-	GLfloat *m = fmesa->hw_viewport;
-	__DRIdrawable *dPriv = fmesa->driDrawable;
-
-	m[MAT_SX] =   v[MAT_SX];
-	m[MAT_TX] =   v[MAT_TX] + dPriv->x + SUBPIXEL_X;
-	m[MAT_SY] = - v[MAT_SY];
-	m[MAT_TY] = - v[MAT_TY] + dPriv->h + dPriv->y + SUBPIXEL_Y;
-	m[MAT_SZ] =   v[MAT_SZ] * ((GLdouble)1.0 / (GLdouble)0x0fffffff);
-	m[MAT_TZ] =   v[MAT_TZ] * ((GLdouble)1.0 / (GLdouble)0x0fffffff);
-
-	fmesa->depth_scale = ((GLdouble)1.0 / (GLdouble)0x0fffffff);
-
-	ffbCalcViewportRegs(ctx);
-
-	fmesa->setupnewinputs |= VERT_BIT_POS;
-}
-
-static void ffbDDViewport(GLcontext *ctx, GLint x, GLint y,
-			  GLsizei width, GLsizei height)
-{
-	ffbCalcViewport(ctx);
-}
-
-static void ffbDDDepthRange(GLcontext *ctx, GLclampd nearval, GLclampd farval)
-{
-	ffbCalcViewport(ctx);
-}
-
-static void ffbDDScissor(GLcontext *ctx, GLint cx, GLint cy,
-		  GLsizei cw, GLsizei ch)
-{
-	ffbCalcViewport(ctx);
-}
-
-static void ffbDDDrawBuffer(GLcontext *ctx, GLenum buffer)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	unsigned int fbc = fmesa->fbc;
-
-#ifdef STATE_TRACE
-	fprintf(stderr, "ffbDDDrawBuffer: mode(%s)\n",
-		_mesa_lookup_enum_by_nr(buffer));
-#endif
-	fbc &= ~(FFB_FBC_WB_AB | FFB_FBC_RB_MASK);
-	switch (buffer) {
-	case GL_FRONT:
-		if (fmesa->back_buffer == 0)
-			fbc |= FFB_FBC_WB_B | FFB_FBC_RB_B;
-		else
-			fbc |= FFB_FBC_WB_A | FFB_FBC_RB_A;
-		break;
-
-	case GL_BACK:
-		if (fmesa->back_buffer == 0)
-			fbc |= FFB_FBC_WB_A | FFB_FBC_RB_A;
-		else
-			fbc |= FFB_FBC_WB_B | FFB_FBC_RB_B;
-		break;
-
-	case GL_FRONT_AND_BACK:
-		fbc |= FFB_FBC_WB_AB;
-		break;
-
-	default:
-		return;
-	};
-
-	if (fbc != fmesa->fbc) {
-		fmesa->fbc = fbc;
-		FFB_MAKE_DIRTY(fmesa, FFB_STATE_FBC, 1);
-	}
-}
-
-
-static void ffbDDReadBuffer(GLcontext *ctx, GLenum buffer)
-{
-   /* no-op, unless you implement h/w glRead/CopyPixels */
-}
-
-
-/*
- * Specifies buffer for sw fallbacks (spans)
- */
-#if 000
-/* XXX
- * This function is obsolete.  It's not clear how this really effected
- * span reading/writing above.  The span functions should use the
- * incoming driRenderbuffer (gl_renderbuffer) pointer to determine how
- * to read from the specified bufer.
- */
-static void ffbDDSetBuffer(GLcontext *ctx, GLframebuffer *colorBuffer,
-			   GLuint bufferBit)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	unsigned int fbc = fmesa->fbc;
-
-#ifdef STATE_TRACE
-	fprintf(stderr, "ffbDDSetReadBuffer: mode(%s)\n",
-		_mesa_lookup_enum_by_nr(buffer));
-#endif
-	fbc &= ~(FFB_FBC_RB_MASK);
-	switch (bufferBit) {
-	case BUFFER_BIT_FRONT_LEFT:
-		if (fmesa->back_buffer == 0)
-			fbc |= FFB_FBC_RB_B;
-		else
-			fbc |= FFB_FBC_RB_A;
-		break;
-
-	case BUFFER_BIT_BACK_LEFT:
-		if (fmesa->back_buffer == 0)
-			fbc |= FFB_FBC_RB_A;
-		else
-			fbc |= FFB_FBC_RB_B;
-		break;
-
-	default:
-		_mesa_problem(ctx, "Unexpected buffer in ffbDDSetBuffer()");
-		return;
-	};
-
-	if (fbc != fmesa->fbc) {
-		fmesa->fbc = fbc;
-		FFB_MAKE_DIRTY(fmesa, FFB_STATE_FBC, 1);
-	}
-}
-#endif
-
-
-static void ffbDDClearColor(GLcontext *ctx, const GLfloat color[4])
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	GLubyte c[4];
-	CLAMPED_FLOAT_TO_UBYTE(c[0], color[0]);
-	CLAMPED_FLOAT_TO_UBYTE(c[1], color[1]);
-	CLAMPED_FLOAT_TO_UBYTE(c[2], color[2]);
-
-	fmesa->clear_pixel = ((c[0] << 0) |
-			      (c[1] << 8) |
-			      (c[2] << 16));
-}
-
-static void ffbDDClearDepth(GLcontext *ctx, GLclampd depth)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-
-	fmesa->clear_depth = Z_FROM_MESA(depth * 4294967295.0f);
-}
-
-static void ffbDDClearStencil(GLcontext *ctx, GLint stencil)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-
-	fmesa->clear_stencil = stencil & 0xf;
-}
-
-/* XXX Actually, should I be using FBC controls for this? -DaveM */
-static void ffbDDColorMask(GLcontext *ctx,
-			   GLboolean r, GLboolean g,
-			   GLboolean b, GLboolean a)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	unsigned int new_pmask = 0x0;
-
-#ifdef STATE_TRACE
-	fprintf(stderr, "ffbDDColorMask: r(%d) g(%d) b(%d) a(%d)\n",
-		r, g, b, a);
-#endif
-	if (r)
-		new_pmask |= 0x000000ff;
-	if (g)
-		new_pmask |= 0x0000ff00;
-	if (b)
-		new_pmask |= 0x00ff0000;
-	if (a)
-		new_pmask |= 0xff000000;
-
-	if (fmesa->pmask != new_pmask) {
-		fmesa->pmask = new_pmask;
-		FFB_MAKE_DIRTY(fmesa, FFB_STATE_PMASK, 1);
-	}
-}
-
-static void ffbDDLogicOp(GLcontext *ctx, GLenum op)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	unsigned int rop;
-
-#ifdef STATE_TRACE
-	fprintf(stderr, "ffbDDLogicOp: op(%s)\n",
-		_mesa_lookup_enum_by_nr(op));
-#endif
-	switch (op) {
-	case GL_CLEAR: rop = FFB_ROP_ZERO; break;
-	case GL_SET: rop = FFB_ROP_ONES; break;
-	case GL_COPY: rop = FFB_ROP_NEW; break;
-	case GL_AND: rop = FFB_ROP_NEW_AND_OLD; break;
-	case GL_NAND: rop = FFB_ROP_NEW_AND_NOLD; break;
-	case GL_OR: rop = FFB_ROP_NEW_OR_OLD; break;
-	case GL_NOR: rop = FFB_ROP_NEW_OR_NOLD; break;
-	case GL_XOR: rop = FFB_ROP_NEW_XOR_OLD; break;
-	case GL_NOOP: rop = FFB_ROP_OLD; break;
-	case GL_COPY_INVERTED: rop = FFB_ROP_NNEW; break;
-	case GL_INVERT: rop = FFB_ROP_NOLD; break;
-	case GL_EQUIV: rop = FFB_ROP_NNEW_XOR_NOLD; break;
-	case GL_AND_REVERSE: rop = FFB_ROP_NEW_AND_NOLD; break;
-	case GL_AND_INVERTED: rop = FFB_ROP_NNEW_AND_OLD; break;
-	case GL_OR_REVERSE: rop = FFB_ROP_NEW_OR_NOLD; break;
-	case GL_OR_INVERTED: rop = FFB_ROP_NNEW_OR_OLD; break;
-
-	default:
-		return;
-	};
-
-	rop |= fmesa->rop & ~0xff;
-	if (rop != fmesa->rop) {
-		fmesa->rop = rop;
-		FFB_MAKE_DIRTY(fmesa, FFB_STATE_ROP, 1);
-
-		if (op == GL_COPY)
-			FALLBACK( ctx, FFB_BADATTR_BLENDROP, GL_FALSE );
-	}
-}
-
-#if 0
-/* XXX Also need to track near/far just like 3dfx driver.
- * XXX
- * XXX Actually, that won't work, because the 3dfx chip works by
- * XXX having 1/w coordinates fed to it for each primitive, and
- * XXX it uses this to index it's 64 entry fog table.
- */
-static void ffb_fog_linear(GLcontext *ctx, ffbContextPtr fmesa)
-{
-	GLfloat c = ctx->ProjectionMatrix.m[10];
-	GLfloat d = ctx->ProjectionMatrix.m[14];
-	GLfloat tz = ctx->Viewport.WindowMap.m[MAT_TZ];
-	GLfloat szInv = 1.0F / ctx->Viewport.WindowMap.m[MAT_SZ];
-	GLfloat fogEnd = ctx->Fog.End;
-	GLfloat fogScale = 1.0F / (ctx->Fog.End - ctx->Fog.Start);
-	GLfloat ndcz;
-	GLfloat eyez;
-	GLfloat Zzero, Zone;
-	unsigned int zb, zf;
-
-	/* Compute the Z at which f reaches 0.0, this is the full
-	 * saturation point.
-	 *
-	 * Thus compute Z (as seen by the chip during rendering),
-	 * such that:
-	 *
-	 *	0.0 = (fogEnd - eyez) * fogScale
-	 *
-	 * fogScale is usually not zero, thus we are looking for:
-	 *
-	 *	fogEnd = eyez
-	 *
-	 *	fogEnd = -d / (c + ((Z - tz) * szInv))
-	 *	fogEnd * (c + ((Z - tz) * szInv)) = -d
-	 *	(c + ((Z - tz) * szInv)) = -d / fogEnd
-	 *	(Z - tz) * szInv = (-d / fogEnd) - c
-	 *	(Z - tz) = ((-d / fogEnd) - c) / szInv
-	 *	Z = (((-d / fogEnd) - c) / szInv) + tz
-	 */
-	Zzero = (((-d / fogEnd) - c) / szInv) + tz;
-
-	/* Compute the Z at which f reaches 1.0, this is where
-	 * the incoming frag's full intensity is shown.  This
-	 * equation is:
-	 *
-	 *	1.0 = (fogEnd - eyez)
-	 *
-	 * We are looking for:
-	 *
-	 *	1.0 + eyez = fogEnd
-	 *
-	 *	1.0 + (-d / (c + ((Z - tz) * szInv))) = fogEnd
-	 *	-d / (c + ((Z - tz) * szInv)) = fogEnd - 1.0
-	 *	-d / (FogEnd - 1.0) = (c + ((Z - tz) * szInv))
-	 *	(-d / (fogEnd - 1.0)) - c = ((Z - tz) * szInv)
-	 *	((-d / (fogEnd - 1.0)) - c) / szInv = (Z - tz)
-	 *	(((-d / (fogEnd - 1.0)) - c) / szInv) + tz = Z
-	 */
-	Zone = (((-d / (fogEnd - 1.0)) - c) / szInv) + tz;
-
-	/* FFB's Zfront must be less than Zback, thus we may have
-	 * to invert Sf/Sb to satisfy this constraint.
-	 */
-	if (Zzero < Zone) {
-		sf = 0.0;
-		sb = 1.0;
-		zf = Z_FROM_MESA(Zzero);
-		zb = Z_FROM_MESA(Zone);
-	} else {
-		sf = 1.0;
-		sb = 0.0;
-		zf = Z_FROM_MESA(Zone);
-		zb = Z_FROM_MESA(Zzero);
-	}
-}
-#endif
-
-static void ffbDDFogfv(GLcontext *ctx, GLenum pname, const GLfloat *param)
-{
-#ifdef STATE_TRACE
-	fprintf(stderr, "ffbDDFogfv: pname(%s)\n", _mesa_lookup_enum_by_nr(pname));
-#endif
-}
-
-static void ffbDDLineStipple(GLcontext *ctx, GLint factor, GLushort pattern)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-
-#ifdef STATE_TRACE
-	fprintf(stderr, "ffbDDLineStipple: factor(%d) pattern(%04x)\n",
-		factor, pattern);
-#endif
-	if (ctx->Line.StippleFlag) {
-		factor = ctx->Line.StippleFactor;
-		pattern = ctx->Line.StipplePattern;
-		if ((GLuint) factor > 15) {			
-			fmesa->lpat = FFB_LPAT_BAD;
-		} else {
-			fmesa->lpat = ((factor << FFB_LPAT_SCALEVAL_SHIFT) |
-				       (0 << FFB_LPAT_PATLEN_SHIFT) |
-				       ((pattern & 0xffff) << FFB_LPAT_PATTERN_SHIFT));
-		}
-	} else {
-		fmesa->lpat = 0;
-	}
-}
-
-void ffbXformAreaPattern(ffbContextPtr fmesa, const GLubyte *mask)
-{
-	__DRIdrawable *dPriv = fmesa->driDrawable;
-	int i, lines, xoff;
-
-	lines = 0;
-	i = (dPriv->y + dPriv->h) & (32 - 1);
-	xoff = dPriv->x & (32 - 1);
-	while (lines++ < 32) {
-		GLuint raw =
-			(((GLuint)mask[0] << 24) |
-			 ((GLuint)mask[1] << 16) |
-			 ((GLuint)mask[2] <<  8) |
-			 ((GLuint)mask[3] <<  0));
-
-		fmesa->pattern[i] =
-			(raw << xoff) | (raw >> (32 - xoff));
-		i = (i - 1) & (32 - 1);
-		mask += 4;
-	}
-
-	FFB_MAKE_DIRTY(fmesa, FFB_STATE_APAT, 32);
-}
-
-static void ffbDDPolygonStipple(GLcontext *ctx, const GLubyte *mask)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-
-#ifdef STATE_TRACE
-	fprintf(stderr, "ffbDDPolygonStipple: state(%d)\n",
-		ctx->Polygon.StippleFlag);
-#endif
-	ffbXformAreaPattern(fmesa, mask);
-}
-
-static void ffbDDEnable(GLcontext *ctx, GLenum cap, GLboolean state)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	unsigned int tmp;
-
-#ifdef STATE_TRACE
-	fprintf(stderr, "ffbDDEnable: %s state(%d)\n",
-		_mesa_lookup_enum_by_nr(cap), state);
-#endif
-	switch (cap) {
-	case GL_ALPHA_TEST:
-		if (state)
-			tmp = ffbComputeAlphaFunc(ctx);
-		else
-			tmp = FFB_XCLIP_TEST_ALWAYS;
-
-		if (tmp != fmesa->xclip) {
-			fmesa->xclip = tmp;
-			FFB_MAKE_DIRTY(fmesa, FFB_STATE_XCLIP, 1);
-		}
-		break;
-
-	case GL_BLEND:
-		tmp = (fmesa->ppc & ~FFB_PPC_ABE_MASK);
-		if (state) {
-			tmp |= FFB_PPC_ABE_ENABLE;
-		} else {
-			tmp |= FFB_PPC_ABE_DISABLE;
-		}
-		if (fmesa->ppc != tmp) {
-			fmesa->ppc = tmp;
-			FFB_MAKE_DIRTY(fmesa, FFB_STATE_PPC, 1);
-			ffbDDBlendFuncSeparate(ctx, 0, 0, 0, 0 );
-		}
-		break;
-
-	case GL_DEPTH_TEST:
-		if (state)
-			tmp = 0x0fffffff;
-		else
-			tmp = 0x00000000;
-		if (tmp != fmesa->magnc) {
-			unsigned int fbc = fmesa->fbc;
-			fbc &= ~FFB_FBC_ZE_MASK;
-			if (state)
-				fbc |= FFB_FBC_ZE_ON;
-			else
-				fbc |= FFB_FBC_ZE_OFF;
-			fmesa->fbc = fbc;
-			ffbDDDepthFunc(ctx, ctx->Depth.Func);
-			fmesa->magnc = tmp;
-			FFB_MAKE_DIRTY(fmesa, (FFB_STATE_MAGNC | FFB_STATE_FBC), 2);
-		}
-		break;
-
-	case GL_SCISSOR_TEST:
-		ffbDDScissor(ctx, ctx->Scissor.X, ctx->Scissor.Y,
-			     ctx->Scissor.Width, ctx->Scissor.Height);
-		break;
-
-	case GL_STENCIL_TEST:
-		if (!(fmesa->ffb_sarea->flags & FFB_DRI_FFB2PLUS)) {
-			FALLBACK( ctx, FFB_BADATTR_STENCIL, state );
-		}
-
-		tmp = fmesa->fbc & ~FFB_FBC_YE_MASK;
-		if (state) {
-			ffbDDStencilFuncSeparate(ctx, GL_FRONT,
-					 ctx->Stencil.Function[0],
-					 ctx->Stencil.Ref[0],
-					 ctx->Stencil.ValueMask[0]);
-			ffbDDStencilMaskSeparate(ctx, GL_FRONT,
-                                                 ctx->Stencil.WriteMask[0]);
-			ffbDDStencilOpSeparate(ctx, GL_FRONT,
-				       ctx->Stencil.FailFunc[0],
-				       ctx->Stencil.ZFailFunc[0],
-				       ctx->Stencil.ZPassFunc[0]);
-			tmp |= FFB_FBC_YE_MASK;
-		} else {
-			fmesa->stencil		= 0xf0000000;
-			fmesa->stencilctl	= 0x33300000;
-			FFB_MAKE_DIRTY(fmesa, FFB_STATE_STENCIL, 6);
-			tmp |= FFB_FBC_YE_OFF;
-		}
-		if (tmp != fmesa->fbc) {
-			fmesa->fbc = tmp;
-			FFB_MAKE_DIRTY(fmesa, FFB_STATE_FBC, 1);
-		}
-		break;
-
-	case GL_FOG:
-		/* Until I implement the fog support... */
-		FALLBACK( ctx, FFB_BADATTR_FOG, state );
-		break;
-
-	case GL_LINE_STIPPLE:
-		if (! state)
-			fmesa->lpat = 0;
-		else
-			ffbDDLineStipple(ctx,
-					 ctx->Line.StippleFactor,
-					 ctx->Line.StipplePattern);
-		break;
-
-	case GL_POLYGON_STIPPLE:
-		/* Do nothing, we interrogate the state during
-		 * reduced primitive changes.  Since our caller
-		 * will set NEW_POLYGON in the ctx NewState this
-		 * will cause the driver rasterization functions
-		 * to be reevaluated, which will cause us to force
-		 * a reduced primitive change next rendering pass
-		 * and it all works out.
-		 */
-		break;
-
-	default:
-		break;
-	};
-}
-
-void ffbSyncHardware(ffbContextPtr fmesa)
-{
-	ffb_fbcPtr ffb = fmesa->regs;
-	unsigned int dirty;
-	int i;
-
-	FFBFifo(fmesa, fmesa->state_fifo_ents);
-
-	dirty = fmesa->state_dirty;
-	if (dirty & (FFB_STATE_FBC | FFB_STATE_PPC | FFB_STATE_DRAWOP |
-		     FFB_STATE_ROP | FFB_STATE_LPAT | FFB_STATE_WID)) {
-		if (dirty & FFB_STATE_FBC)
-			ffb->fbc = fmesa->fbc;
-		if (dirty & FFB_STATE_PPC)
-			ffb->ppc = fmesa->ppc;
-		if (dirty & FFB_STATE_DRAWOP)
-			ffb->drawop = fmesa->drawop;
-		if (dirty & FFB_STATE_ROP)
-			ffb->rop = fmesa->rop;
-		if (dirty & FFB_STATE_LPAT)
-			ffb->rop = fmesa->lpat;
-		if (dirty & FFB_STATE_WID)
-			ffb->wid = fmesa->wid;
-	}
-	if (dirty & (FFB_STATE_PMASK | FFB_STATE_XPMASK | FFB_STATE_YPMASK |
-		     FFB_STATE_ZPMASK | FFB_STATE_XCLIP | FFB_STATE_CMP |
-		     FFB_STATE_MATCHAB | FFB_STATE_MAGNAB | FFB_STATE_MATCHC |
-		     FFB_STATE_MAGNC)) {
-		if (dirty & FFB_STATE_PMASK)
-			ffb->pmask = fmesa->pmask;
-		if (dirty & FFB_STATE_XPMASK)
-			ffb->xpmask = fmesa->xpmask;
-		if (dirty & FFB_STATE_YPMASK)
-			ffb->ypmask = fmesa->ypmask;
-		if (dirty & FFB_STATE_ZPMASK)
-			ffb->zpmask = fmesa->zpmask;
-		if (dirty & FFB_STATE_XCLIP)
-			ffb->xclip = fmesa->xclip;
-		if (dirty & FFB_STATE_CMP)
-			ffb->cmp = fmesa->cmp;
-		if (dirty & FFB_STATE_MATCHAB)
-			ffb->matchab = fmesa->matchab;
-		if (dirty & FFB_STATE_MAGNAB)
-			ffb->magnab = fmesa->magnab;
-		if (dirty & FFB_STATE_MATCHC)
-			ffb->matchc = fmesa->matchc;
-		if (dirty & FFB_STATE_MAGNC)
-			ffb->magnc = fmesa->magnc;
-	}
-
-	if (dirty & FFB_STATE_DCUE) {
-		ffb->dcss = fmesa->dcss;
-		ffb->dcsf = fmesa->dcsf;
-		ffb->dcsb = fmesa->dcsb;
-		ffb->dczf = fmesa->dczf;
-		ffb->dczb = fmesa->dczb;
-		if (fmesa->ffb_sarea->flags & (FFB_DRI_FFB2 | FFB_DRI_FFB2PLUS)) {
-			ffb->dcss1 = fmesa->dcss1;
-			ffb->dcss2 = fmesa->dcss2;
-			ffb->dcss3 = fmesa->dcss3;
-			ffb->dcs2  = fmesa->dcs2;
-			ffb->dcs3  = fmesa->dcs3;
-			ffb->dcs4  = fmesa->dcs4;
-			ffb->dcd2  = fmesa->dcd2;
-			ffb->dcd3  = fmesa->dcd3;
-			ffb->dcd4  = fmesa->dcd4;
-		}
-	}
-
-	if (dirty & FFB_STATE_BLEND) {
-		ffb->blendc  = fmesa->blendc;
-		ffb->blendc1 = fmesa->blendc1;
-		ffb->blendc2 = fmesa->blendc2;
-	}
-
-	if (dirty & FFB_STATE_CLIP) {
-		ffb->vclipmin  = fmesa->vclipmin;
-		ffb->vclipmax  = fmesa->vclipmax;
-		ffb->vclipzmin = fmesa->vclipzmin;
-		ffb->vclipzmax = fmesa->vclipzmax;
-		for (i = 0; i < 4; i++) {
-			ffb->auxclip[i].min = fmesa->aux_clips[i].min;
-			ffb->auxclip[i].max = fmesa->aux_clips[i].max;
-		}
-	}
-
-	if ((dirty & FFB_STATE_STENCIL) &&
-	    (fmesa->ffb_sarea->flags & FFB_DRI_FFB2PLUS)) {
-		ffb->stencil    = fmesa->stencil;
-		ffb->stencilctl = fmesa->stencilctl;
-		ffb->fbc = FFB_FBC_WB_C;
-		ffb->rawstencilctl = (fmesa->stencilctl | (1 << 19));
-		ffb->fbc = fmesa->fbc;
-		ffb->consty = fmesa->consty;
-	}
-
-	if (dirty & FFB_STATE_APAT) {
-		for (i = 0; i < 32; i++)
-			ffb->pattern[i] = fmesa->pattern[i];
-	}
-
-	fmesa->state_dirty = 0;
-	fmesa->state_fifo_ents = 0;
-	fmesa->ffbScreen->rp_active = 1;
-}
-
-static void ffbDDUpdateState(GLcontext *ctx, GLuint newstate)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-
-	/* When we are hw rendering, changing certain kinds of
-	 * state does not require flushing all of our context.
-	 */
-	if (fmesa->bad_fragment_attrs == 0 &&
-	    (newstate & ~_NEW_COLOR) == 0)
-		return;
-
-	_swrast_InvalidateState( ctx, newstate );
-	_swsetup_InvalidateState( ctx, newstate );
-	_vbo_InvalidateState( ctx, newstate );
-	_tnl_InvalidateState( ctx, newstate );
-
-	if (newstate & _NEW_TEXTURE)
-	   FALLBACK( ctx, FFB_BADATTR_TEXTURE, 
-		     (ctx->Texture._EnabledUnits != 0));
-
-#ifdef STATE_TRACE
-	fprintf(stderr, "ffbDDUpdateState: newstate(%08x)\n", newstate);
-#endif
-
-	fmesa->new_gl_state |= newstate;
-
-	/* Force a reduced primitive change next rendering
-	 * pass.
-	 */
-	fmesa->raster_primitive = GL_POLYGON + 1;
-
-#if 0
-	/* When the modelview matrix changes, this changes what
-	 * the eye coordinates will be so we have to recompute
-	 * the depth cueing parameters.
-	 *
-	 * XXX DD_HAVE_HARDWARE_FOG.
-	 */
-	if (ctx->Fog.Enabled && (newstate & _NEW_MODELVIEW))
-		ffb_update_fog();
-#endif
-}
-
-
-void ffbDDInitStateFuncs(GLcontext *ctx)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-
-	ctx->Driver.UpdateState = ffbDDUpdateState;
-
-	ctx->Driver.Enable = ffbDDEnable;
-	ctx->Driver.AlphaFunc = ffbDDAlphaFunc;
-	ctx->Driver.BlendEquationSeparate = ffbDDBlendEquationSeparate;
-	ctx->Driver.BlendFuncSeparate = ffbDDBlendFuncSeparate;
-	ctx->Driver.DepthFunc = ffbDDDepthFunc;
-	ctx->Driver.DepthMask = ffbDDDepthMask;
-	ctx->Driver.Fogfv = ffbDDFogfv;
-	ctx->Driver.LineStipple = ffbDDLineStipple;
-	ctx->Driver.PolygonStipple = ffbDDPolygonStipple;
-	ctx->Driver.Scissor = ffbDDScissor;
-	ctx->Driver.ColorMask = ffbDDColorMask;
-	ctx->Driver.LogicOpcode = ffbDDLogicOp;
-	ctx->Driver.Viewport = ffbDDViewport;
-	ctx->Driver.DepthRange = ffbDDDepthRange;
-
-	if (fmesa->ffb_sarea->flags & FFB_DRI_FFB2PLUS) {
-		ctx->Driver.StencilFuncSeparate = ffbDDStencilFuncSeparate;
-		ctx->Driver.StencilMaskSeparate = ffbDDStencilMaskSeparate;
-		ctx->Driver.StencilOpSeparate = ffbDDStencilOpSeparate;
-	}
-
-	ctx->Driver.DrawBuffer = ffbDDDrawBuffer;
-	ctx->Driver.ReadBuffer = ffbDDReadBuffer;
-	ctx->Driver.ClearColor = ffbDDClearColor;
-	ctx->Driver.ClearDepth = ffbDDClearDepth;
-	ctx->Driver.ClearStencil = ffbDDClearStencil;
-
-	/* We will support color index modes later... -DaveM */
-        /*
-	ctx->Driver.ClearIndex = 0;
-	ctx->Driver.IndexMask = 0;
-        */
-}
-
-void ffbDDInitContextHwState(GLcontext *ctx)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	int fifo_count = 0;
-	int i;
-
-	fmesa->hw_locked = 0;
-
-	fmesa->bad_fragment_attrs = 0;
-	fmesa->state_dirty = FFB_STATE_ALL;
-	fmesa->new_gl_state = ~0;
-
-	fifo_count = 1;
-	fmesa->fbc = (FFB_FBC_WE_FORCEON | FFB_FBC_WM_COMBINED |
-		      FFB_FBC_SB_BOTH | FFB_FBC_ZE_MASK |
-		      FFB_FBC_YE_OFF | FFB_FBC_XE_OFF |
-		      FFB_FBC_RGBE_MASK);
-	if (ctx->Visual.doubleBufferMode) {
-		/* Buffer B is the initial back buffer. */
-		fmesa->back_buffer = 1;
-		fmesa->fbc |= FFB_FBC_WB_BC | FFB_FBC_RB_B;
-	} else {
-		fmesa->back_buffer = 0;
-		fmesa->fbc |= FFB_FBC_WB_A | FFB_FBC_RB_A;
-	}
-
-	fifo_count += 1;
-	fmesa->ppc = (FFB_PPC_ACE_DISABLE | FFB_PPC_DCE_DISABLE |
-		      FFB_PPC_ABE_DISABLE | FFB_PPC_VCE_3D |
-		      FFB_PPC_APE_DISABLE | FFB_PPC_TBE_OPAQUE |
-		      FFB_PPC_ZS_CONST | FFB_PPC_YS_CONST |
-		      FFB_PPC_XS_WID | FFB_PPC_CS_VAR);
-
-	fifo_count += 3;
-	fmesa->drawop = FFB_DRAWOP_RECTANGLE;
-
-	/* GL_COPY is the default LogicOp. */
-	fmesa->rop = (FFB_ROP_NEW << 16) | (FFB_ROP_NEW << 8) | FFB_ROP_NEW;
-
-	/* No line patterning enabled. */
-	fmesa->lpat = 0x00000000;
-
-	/* We do not know the WID value until the first context switch. */
-	fifo_count += 1;
-	fmesa->wid = ~0;
-
-	fifo_count += 5;
-
-	/* ColorMask, all enabled. */
-	fmesa->pmask  = 0xffffffff;
-
-	fmesa->xpmask = 0x000000ff;
-	fmesa->ypmask = 0x0000000f;
-	fmesa->zpmask = 0x0fffffff;
-
-	/* AlphaFunc GL_ALWAYS, AlphaRef 0 */
-	fmesa->xclip  = FFB_XCLIP_TEST_ALWAYS | 0x00;
-
-	/* This sets us up to use WID clipping (so the DRI clipping
-	 * rectangle is unneeded by us).  All other match and magnitude
-	 * tests are set to pass.
-	 */
-	fifo_count += 5;
-	fmesa->cmp = ((FFB_CMP_MATCH_ALWAYS << 24) |	/* MATCH C  */
-		      (FFB_CMP_MAGN_ALWAYS  << 16) |	/* MAGN  C  */
-		      (FFB_CMP_MATCH_EQ     <<  8) |	/* MATCH AB */
-		      (FFB_CMP_MAGN_ALWAYS  <<  0));	/* MAGN  AB */
-	fmesa->matchab = 0xff000000;
-	fmesa->magnab  = 0x00000000;
-	fmesa->matchc  = 0x00000000;
-	fmesa->magnc   = 0x00000000;
-
-	/* Depth cue parameters, all zeros to start. */
-	fifo_count += 14;
-	fmesa->dcss  = 0x00000000;
-	fmesa->dcsf  = 0x00000000;
-	fmesa->dcsb  = 0x00000000;
-	fmesa->dczf  = 0x00000000;
-	fmesa->dczb  = 0x00000000;
-	fmesa->dcss1 = 0x00000000;
-	fmesa->dcss2 = 0x00000000;
-	fmesa->dcss3 = 0x00000000;
-	fmesa->dcs2  = 0x00000000;
-	fmesa->dcs3  = 0x00000000;
-	fmesa->dcs4  = 0x00000000;
-	fmesa->dcd2  = 0x00000000;
-	fmesa->dcd3  = 0x00000000;
-	fmesa->dcd4  = 0x00000000;
-
-	/* Alpha blending unit state. */
-	fifo_count += 3;
-	fmesa->blendc  = (1 << 0) | (0 << 2);  /* src(GL_ONE) | dst(GL_ZERO) */
-	fmesa->blendc1 = 0x00000000;
-	fmesa->blendc2 = 0x00000000;
-
-	/* ViewPort clip state. */
-	fifo_count += 4 + (4 * 2);
-	fmesa->vclipmin  = 0x00000000;
-	fmesa->vclipmax  = 0xffffffff;
-	fmesa->vclipzmin = 0x00000000;
-	fmesa->vclipzmax = 0x0fffffff;
-	for (i = 0; i < 4; i++) {
-		fmesa->aux_clips[0].min = 0x00000000;
-		fmesa->aux_clips[0].max = 0x00000000;
-	}
-
-	/* Stenciling state. */
-	fifo_count += 6;
-	fmesa->stencil    = 0xf0000000; /* Stencil MASK, Y plane */
-	fmesa->stencilctl = 0x33300000; /* All stencil tests disabled */
-	fmesa->consty	  = 0x0;
-
-	/* Area pattern, used for polygon stipples. */
-	fifo_count += 32;
-	for (i = 0; i < 32; i++)
-		fmesa->pattern[i] = 0x00000000;
-
-	fmesa->state_fifo_ents = fifo_count;
-	fmesa->state_all_fifo_ents = fifo_count;
-}
diff --git a/src/mesa/drivers/dri/ffb/ffb_state.h b/src/mesa/drivers/dri/ffb/ffb_state.h
deleted file mode 100644
index 19e72085fd..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_state.h
+++ /dev/null
@@ -1,12 +0,0 @@
-
-#ifndef _FFB_STATE_H
-#define _FFB_STATE_H
-
-extern void ffbDDInitStateFuncs(GLcontext *);
-extern void ffbDDInitContextHwState(GLcontext *);
-
-extern void ffbCalcViewport(GLcontext *);
-extern void ffbXformAreaPattern(ffbContextPtr, const GLubyte *);
-extern void ffbSyncHardware(ffbContextPtr fmesa);
-
-#endif /* !(_FFB_STATE_H) */
diff --git a/src/mesa/drivers/dri/ffb/ffb_stencil.c b/src/mesa/drivers/dri/ffb/ffb_stencil.c
deleted file mode 100644
index 10cdfbc616..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_stencil.c
+++ /dev/null
@@ -1,224 +0,0 @@
-/* 
- *
- * GLX Hardware Device Driver for Sun Creator/Creator3D
- * Copyright (C) 2000 David S. Miller
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * DAVID MILLER, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM, 
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
- * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- *
- *    David S. Miller <davem@redhat.com>
- */
-
-#include "main/mtypes.h"
-#include "ffb_dd.h"
-#include "ffb_span.h"
-#include "ffb_context.h"
-#include "ffb_stencil.h"
-#include "ffb_lock.h"
-
-#undef STENCIL_TRACE
-
-static void FFBWriteStencilSpan( GLcontext *ctx,
-                                   struct gl_renderbuffer *rb,
-				   GLuint n, GLint x, GLint y,
-				   const void *values, const GLubyte mask[] )
-{
-        const GLubyte *stencil = (const GLubyte *) values;
-#ifdef STENCIL_TRACE
-	fprintf(stderr, "FFBWriteStencilSpan: n(%d) x(%d) y(%d)\n",
-		(int) n, x, y);
-#endif
-	if (ctx->Depth.Mask) {
-		ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-		__DRIdrawable *dPriv = fmesa->driDrawable;
-		GLuint *zptr;
-		GLuint i;
-
-		if (!fmesa->hw_locked)
-			LOCK_HARDWARE(fmesa);
-		FFBFifo(fmesa, 2);
-		fmesa->regs->fbc = (FFB_FBC_WB_C | FFB_FBC_ZE_OFF |
-				    FFB_FBC_YE_ON | FFB_FBC_RGBE_OFF);
-		fmesa->regs->ppc = FFB_PPC_YS_VAR;
-		FFBWait(fmesa, fmesa->regs);
-
-		y = (dPriv->h - y);
-		zptr = (GLuint *)
-			((char *)fmesa->sfb32 +
-			 ((dPriv->x + x) << 2) +
-			 ((dPriv->y + y) << 13));
-		
-		for (i = 0; i < n; i++) {
-			if (mask[i])
-				*zptr = (stencil[i] & 0xf) << 28;
-			zptr++;
-		}
-
-		FFBFifo(fmesa, 2);
-		fmesa->regs->fbc = fmesa->fbc;
-		fmesa->regs->ppc = fmesa->ppc;
-		fmesa->ffbScreen->rp_active = 1;
-		if (!fmesa->hw_locked)
-			UNLOCK_HARDWARE(fmesa);
-	}
-}
-
-static void FFBWriteStencilPixels( GLcontext *ctx,
-                                     struct gl_renderbuffer *rb,
-				     GLuint n,
-				     const GLint x[], const GLint y[],
-				     const void *values, const GLubyte mask[] )
-{
-        const GLubyte *stencil = (const GLubyte *) values;
-#ifdef STENCIL_TRACE
-	fprintf(stderr, "FFBWriteStencilPixels: n(%d)\n", (int) n);
-#endif
-	if (ctx->Depth.Mask) {
-		ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-		__DRIdrawable *dPriv = fmesa->driDrawable;
-		char *zbase;
-		GLuint i;
-
-		if (!fmesa->hw_locked)
-			LOCK_HARDWARE(fmesa);
-		FFBFifo(fmesa, 2);
-		fmesa->regs->fbc = (FFB_FBC_WB_C | FFB_FBC_ZE_OFF |
-				    FFB_FBC_YE_ON | FFB_FBC_RGBE_OFF);
-		fmesa->regs->ppc = FFB_PPC_YS_VAR;
-		fmesa->ffbScreen->rp_active = 1;
-		FFBWait(fmesa, fmesa->regs);
-
-		zbase = ((char *)fmesa->sfb32 +
-			 (dPriv->x << 2) + (dPriv->y << 13));
-		
-		for (i = 0; i < n; i++) {
-			GLint y1 = (dPriv->h - y[i]);
-			GLint x1 = x[i];
-			GLuint *zptr;
-
-			zptr = (GLuint *)
-				(zbase + (x1 << 2) + (y1 << 13));
-			if (mask[i])
-				*zptr = (stencil[i] & 0xf) << 28;
-		}
-
-		FFBFifo(fmesa, 2);
-		fmesa->regs->fbc = fmesa->fbc;
-		fmesa->regs->ppc = fmesa->ppc;
-		fmesa->ffbScreen->rp_active = 1;
-		if (!fmesa->hw_locked)
-			UNLOCK_HARDWARE(fmesa);
-	}
-}
-
-static void FFBReadStencilSpan( GLcontext *ctx,
-                                  struct gl_renderbuffer *rb,
-				  GLuint n, GLint x, GLint y,
-				  void *values)
-{
-        GLubyte *stencil = (GLubyte *) values;
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	__DRIdrawable *dPriv = fmesa->driDrawable;
-	GLuint *zptr;
-	GLuint i;
-
-#ifdef STENCIL_TRACE
-	fprintf(stderr, "FFBReadStencilSpan: n(%d) x(%d) y(%d)\n",
-		(int) n, x, y);
-#endif
-	if (!fmesa->hw_locked)
-		LOCK_HARDWARE(fmesa);
-	FFBFifo(fmesa, 1);
-	fmesa->regs->fbc = FFB_FBC_RB_C;
-	fmesa->ffbScreen->rp_active = 1;
-	FFBWait(fmesa, fmesa->regs);
-
-	y = (dPriv->h - y);
-	zptr = (GLuint *)
-		((char *)fmesa->sfb32 +
-		 ((dPriv->x + x) << 2) +
-		 ((dPriv->y + y) << 13));
-		
-	for (i = 0; i < n; i++) {
-		stencil[i] = (*zptr >> 28) & 0xf;
-		zptr++;
-	}
-
-	FFBFifo(fmesa, 1);
-	fmesa->regs->fbc = fmesa->fbc;
-	fmesa->ffbScreen->rp_active = 1;
-	if (!fmesa->hw_locked)
-		UNLOCK_HARDWARE(fmesa);
-}
-
-static void FFBReadStencilPixels( GLcontext *ctx,
-                                    struct gl_renderbuffer *rb,
-                                    GLuint n, const GLint x[], const GLint y[],
-				    void *values )
-{
-        GLubyte *stencil = (GLubyte *) values;
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	__DRIdrawable *dPriv = fmesa->driDrawable;
-	char *zbase;
-	GLuint i;
-
-#ifdef STENCIL_TRACE
-	fprintf(stderr, "FFBReadStencilPixels: n(%d)\n", (int) n);
-#endif
-	if (!fmesa->hw_locked)
-		LOCK_HARDWARE(fmesa);
-	FFBFifo(fmesa, 1);
-	fmesa->regs->fbc = FFB_FBC_RB_C;
-	fmesa->ffbScreen->rp_active = 1;
-	FFBWait(fmesa, fmesa->regs);
-
-	zbase = ((char *)fmesa->sfb32 +
-		 (dPriv->x << 2) + (dPriv->y << 13));
-		
-	for (i = 0; i < n; i++) {
-		GLint y1 = (dPriv->h - y[i]);
-		GLint x1 = x[i];
-		GLuint *zptr;
-
-		zptr = (GLuint *)
-			(zbase + (x1 << 2) + (y1 << 13));
-		stencil[i] = (*zptr >> 28) & 0xf;
-	}
-
-	FFBFifo(fmesa, 1);
-	fmesa->regs->fbc = fmesa->fbc;
-	fmesa->ffbScreen->rp_active = 1;
-	if (!fmesa->hw_locked)
-		UNLOCK_HARDWARE(fmesa);
-}
-
-/**
- * Plug in the Get/Put routines for the given driRenderbuffer.
- */
-void
-ffbSetStencilFunctions(driRenderbuffer *drb, const GLvisual *vis)
-{
-	assert(drb->Base.InternalFormat == GL_STENCIL_INDEX8_EXT);
-      	drb->Base.GetRow        = FFBReadStencilSpan;
-      	drb->Base.GetValues     = FFBReadStencilPixels;
-      	drb->Base.PutRow        = FFBWriteStencilSpan;
-      	/*drb->Base.PutMonoRow    = FFBWriteMonoStencilSpan;*/
-      	drb->Base.PutValues     = FFBWriteStencilPixels;
-      	drb->Base.PutMonoValues = NULL;
-}
diff --git a/src/mesa/drivers/dri/ffb/ffb_stencil.h b/src/mesa/drivers/dri/ffb/ffb_stencil.h
deleted file mode 100644
index 2d529980d1..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_stencil.h
+++ /dev/null
@@ -1,7 +0,0 @@
-
-#ifndef _FFB_STENCIL_H
-#define _FFB_STENCIL_H
-
-void ffbSetStencilFunctions(driRenderbuffer *drb, const GLvisual *vis);
-
-#endif /* !(_FFB_STENCIL_H) */
diff --git a/src/mesa/drivers/dri/ffb/ffb_tex.c b/src/mesa/drivers/dri/ffb/ffb_tex.c
deleted file mode 100644
index 95058e9069..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_tex.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* 
- *
- * GLX Hardware Device Driver for Sun Creator/Creator3D
- * Copyright (C) 2001 David S. Miller
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * DAVID MILLER, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM,
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
- * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- *
- *    David S. Miller <davem@redhat.com>
- */
-
-#include "main/glheader.h"
-#include "main/mtypes.h"
-#include "ffb_tex.h"
-
-/* No texture unit, all software. */
-void ffbDDInitTexFuncs(GLcontext *ctx)
-{
-}
diff --git a/src/mesa/drivers/dri/ffb/ffb_tex.h b/src/mesa/drivers/dri/ffb/ffb_tex.h
deleted file mode 100644
index 4032e73209..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_tex.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* 
- *
- * GLX Hardware Device Driver for Sun Creator/Creator3D.
- * Copyright (C) 2001 David S. Miller
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * DAVID MILLER, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM, 
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
- * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- *
- *    David S. Miller <davem@redhat.com>
- */
-
-#ifndef _FFB_TEX_H
-#define _FFB_TEX_H
-
-extern void ffbDDInitTexFuncs(GLcontext *ctx);
-
-#endif /* !(_FFB_DD_H) */
-
diff --git a/src/mesa/drivers/dri/ffb/ffb_tris.c b/src/mesa/drivers/dri/ffb/ffb_tris.c
deleted file mode 100644
index 8bf5ae498f..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_tris.c
+++ /dev/null
@@ -1,945 +0,0 @@
-/* 
- *
- * GLX Hardware Device Driver for Sun Creator/Creator3D
- * Copyright (C) 2000, 2001 David S. Miller
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * DAVID MILLER, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM, 
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
- * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- *
- *    David S. Miller <davem@redhat.com>
- */
-
-#include "main/glheader.h"
-#include "main/mtypes.h"
-#include "main/macros.h"
-#include "swrast/swrast.h"
-#include "swrast/s_context.h"
-#include "swrast_setup/swrast_setup.h"
-#include "tnl/t_context.h"
-#include "tnl/t_pipeline.h"
-
-#include "ffb_context.h"
-#include "ffb_tris.h"
-#include "ffb_lines.h"
-#include "ffb_lock.h"
-#include "ffb_points.h"
-#include "ffb_state.h"
-#include "ffb_vb.h"
-
-#undef TRI_DEBUG
-#undef FFB_RENDER_TRACE
-#undef STATE_TRACE
-
-#ifdef TRI_DEBUG
-static void ffb_print_vertex(const ffb_vertex *v)
-{
-	fprintf(stderr, "Vertex @(%p): "
-		"X[%f] Y[%f] Z[%f]\n",
-		v, v->x, v->y, v->z);
-	fprintf(stderr, "Vertex @(%p): "
-		"A[%f] R[%f] G[%f] B[%f]\n",
-		v,
-		v->color[0].alpha,
-		v->color[0].red,
-		v->color[0].green,
-		v->color[0].blue);
-}
-#define FFB_DUMP_VERTEX(V)	ffb_print_vertex(V)
-#else
-#define FFB_DUMP_VERTEX(V)	do { } while(0)
-#endif
-
-#define FFB_ALPHA_BIT		0x01
-#define FFB_FLAT_BIT		0x02
-#define FFB_TRI_CULL_BIT	0x04
-#define MAX_FFB_RENDER_FUNCS	0x08
-
-/***********************************************************************
- *         Build low-level triangle/quad rasterize functions           *
- ***********************************************************************/
-
-#define FFB_TRI_FLAT_BIT	0x01
-#define FFB_TRI_ALPHA_BIT	0x02
-/*#define FFB_TRI_CULL_BIT	0x04*/
-
-static ffb_tri_func ffb_tri_tab[0x8];
-static ffb_quad_func ffb_quad_tab[0x8];
-
-#define IND (0)
-#define TAG(x) x
-#include "ffb_tritmp.h"
-
-#define IND (FFB_TRI_FLAT_BIT)
-#define TAG(x) x##_flat
-#include "ffb_tritmp.h"
-
-#define IND (FFB_TRI_CULL_BIT)
-#define TAG(x) x##_cull
-#include "ffb_tritmp.h"
-
-#define IND (FFB_TRI_CULL_BIT|FFB_TRI_FLAT_BIT)
-#define TAG(x) x##_cull_flat
-#include "ffb_tritmp.h"
-
-#define IND (FFB_TRI_ALPHA_BIT)
-#define TAG(x) x##_alpha
-#include "ffb_tritmp.h"
-
-#define IND (FFB_TRI_ALPHA_BIT|FFB_TRI_FLAT_BIT)
-#define TAG(x) x##_alpha_flat
-#include "ffb_tritmp.h"
-
-#define IND (FFB_TRI_ALPHA_BIT|FFB_TRI_CULL_BIT)
-#define TAG(x) x##_alpha_cull
-#include "ffb_tritmp.h"
-
-#define IND (FFB_TRI_ALPHA_BIT|FFB_TRI_CULL_BIT|FFB_TRI_FLAT_BIT)
-#define TAG(x) x##_alpha_cull_flat
-#include "ffb_tritmp.h"
-
-static void init_tri_tab(void)
-{
-	ffb_init();
-	ffb_init_flat();
-	ffb_init_cull();
-	ffb_init_cull_flat();
-	ffb_init_alpha();
-	ffb_init_alpha_flat();
-	ffb_init_alpha_cull();
-	ffb_init_alpha_cull_flat();
-}
-
-/* Build a SWvertex from a hardware vertex. */
-static void ffb_translate_vertex(GLcontext *ctx, const ffb_vertex *src,
-				 SWvertex *dst)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	GLfloat *m = ctx->Viewport._WindowMap.m;
-	const GLfloat sx = m[0];
-	const GLfloat sy = m[5];
-	const GLfloat sz = m[10];
-	const GLfloat tx = m[12];
-	const GLfloat ty = m[13];
-	const GLfloat tz = m[14];
-
-	dst->attrib[FRAG_ATTRIB_WPOS][0] = sx * src->x + tx;
-	dst->attrib[FRAG_ATTRIB_WPOS][1] = sy * src->y + ty;
-	dst->attrib[FRAG_ATTRIB_WPOS][2] = sz * src->z + tz;
-	dst->attrib[FRAG_ATTRIB_WPOS][3] = 1.0;
-      
-	dst->color[0] = FFB_UBYTE_FROM_COLOR(src->color[0].red);
-	dst->color[1] = FFB_UBYTE_FROM_COLOR(src->color[0].green);
-	dst->color[2] = FFB_UBYTE_FROM_COLOR(src->color[0].blue);
-	dst->color[3] = FFB_UBYTE_FROM_COLOR(src->color[0].alpha);
-}
-
-/***********************************************************************
- *          Build fallback triangle/quad rasterize functions           *
- ***********************************************************************/
-
-static void ffb_fallback_triangle(GLcontext *ctx, ffb_vertex *v0,
-				  ffb_vertex *v1, ffb_vertex *v2)
-{
-	SWvertex v[3];
-
-	ffb_translate_vertex(ctx, v0, &v[0]);
-	ffb_translate_vertex(ctx, v1, &v[1]);
-	ffb_translate_vertex(ctx, v2, &v[2]);
-
-	_swrast_Triangle(ctx, &v[0], &v[1], &v[2]);
-}
-
-static void ffb_fallback_quad(GLcontext *ctx,
-			      ffb_vertex *v0, ffb_vertex *v1, 
-			      ffb_vertex *v2, ffb_vertex *v3)
-{
-	SWvertex v[4];
-
-	ffb_translate_vertex(ctx, v0, &v[0]);
-	ffb_translate_vertex(ctx, v1, &v[1]);
-	ffb_translate_vertex(ctx, v2, &v[2]);
-	ffb_translate_vertex(ctx, v3, &v[3]);
-
-	_swrast_Quad(ctx, &v[0], &v[1], &v[2], &v[3]);
-}
-
-void ffb_fallback_line(GLcontext *ctx, ffb_vertex *v0, ffb_vertex *v1)
-{
-	SWvertex v[2];
-
-	ffb_translate_vertex(ctx, v0, &v[0]);
-	ffb_translate_vertex(ctx, v1, &v[1]);
-
-	_swrast_Line(ctx, &v[0], &v[1]);
-}
-
-void ffb_fallback_point(GLcontext *ctx, ffb_vertex *v0)
-{
-	SWvertex v[1];
-
-	ffb_translate_vertex(ctx, v0, &v[0]);
-
-	_swrast_Point(ctx, &v[0]);
-}
-
-/***********************************************************************
- *             Rasterization functions for culled tris/quads           *
- ***********************************************************************/
-
-static void ffb_nodraw_triangle(GLcontext *ctx, ffb_vertex *v0,
-				ffb_vertex *v1, ffb_vertex *v2)
-{
-	(void) (ctx && v0 && v1 && v2);
-}
-
-static void ffb_nodraw_quad(GLcontext *ctx,
-			    ffb_vertex *v0, ffb_vertex *v1, 
-			    ffb_vertex *v2, ffb_vertex *v3)
-{
-	(void) (ctx && v0 && v1 && v2 && v3);
-}
-
-static void ffb_update_cullsign(GLcontext *ctx)
-{
-	GLfloat backface_sign = 1;
-
-	switch (ctx->Polygon.CullFaceMode) {
-	case GL_BACK:
-		if (ctx->Polygon.FrontFace==GL_CCW)
-			backface_sign = -1;
-		break;
-
-	case GL_FRONT:
-		if (ctx->Polygon.FrontFace!=GL_CCW)
-			backface_sign = -1;
-		break;
-
-	default:
-		break;
-	};
-
-	FFB_CONTEXT(ctx)->backface_sign = backface_sign;
-}
-
-/***********************************************************************
- *               Choose triangle/quad rasterize functions              *
- ***********************************************************************/
-
-void ffbChooseTriangleState(GLcontext *ctx)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	GLuint flags = ctx->_TriangleCaps;
-	GLuint ind = 0;
-
-	if (flags & DD_TRI_SMOOTH) {
-		fmesa->draw_tri = ffb_fallback_triangle;
-		fmesa->draw_quad = ffb_fallback_quad;
-		return;
-	}
-
-	if (flags & DD_FLATSHADE)
-		ind |= FFB_TRI_FLAT_BIT;
-
-	if (ctx->Polygon.CullFlag) {
-		if (ctx->Polygon.CullFaceMode == GL_FRONT_AND_BACK) {
-			fmesa->draw_tri = ffb_nodraw_triangle;
-			fmesa->draw_quad = ffb_nodraw_quad;
-			return;
-		}
-
-		ind |= FFB_TRI_CULL_BIT;
-		ffb_update_cullsign(ctx);
-	} else
-		FFB_CONTEXT(ctx)->backface_sign = 0;
-		
-	/* If blending or the alpha test is enabled we need to
-	 * provide alpha components to the chip, else we can
-	 * do without it and thus feed vertex data to the chip
-	 * more efficiently.
-	 */
-	if (ctx->Color.BlendEnabled || ctx->Color.AlphaEnabled)
-		ind |= FFB_TRI_ALPHA_BIT;
-
-	fmesa->draw_tri = ffb_tri_tab[ind];
-	fmesa->draw_quad = ffb_quad_tab[ind];
-}
-
-static const GLenum reduced_prim[GL_POLYGON+1] = {
-   GL_POINTS,
-   GL_LINES,
-   GL_LINES,
-   GL_LINES,
-   GL_TRIANGLES,
-   GL_TRIANGLES,
-   GL_TRIANGLES,
-   GL_TRIANGLES,
-   GL_TRIANGLES,
-   GL_TRIANGLES
-};
-
-static void ffbRenderPrimitive(GLcontext *ctx, GLenum prim);
-static void ffbRasterPrimitive(GLcontext *ctx, GLenum rprim);
-
-/***********************************************************************
- *              Build render functions from dd templates               *
- ***********************************************************************/
-
-#define FFB_OFFSET_BIT  	0x01
-#define FFB_TWOSIDE_BIT 	0x02
-#define FFB_UNFILLED_BIT	0x04
-#define FFB_MAX_TRIFUNC 	0x08
-
-static struct {
-	tnl_triangle_func triangle;
-	tnl_quad_func quad;
-} rast_tab[FFB_MAX_TRIFUNC];
-
-#define DO_OFFSET   (IND & FFB_OFFSET_BIT)
-#define DO_UNFILLED (IND & FFB_UNFILLED_BIT)
-#define DO_TWOSIDE  (IND & FFB_TWOSIDE_BIT)
-#define DO_FLAT      0
-#define DO_QUAD      1
-#define DO_FULL_QUAD 1
-#define DO_TRI       1
-#define DO_LINE      0
-#define DO_POINTS    0
-
-#define QUAD( a, b, c, d ) fmesa->draw_quad( ctx, a, b, c, d )
-#define TRI( a, b, c )     fmesa->draw_tri( ctx, a, b, c )
-#define LINE( a, b )       fmesa->draw_line( ctx, a, b )
-#define POINT( a )         fmesa->draw_point( ctx, a )
-
-#define HAVE_BACK_COLORS  1
-#define HAVE_RGBA         1
-#define HAVE_SPEC         0
-#define HAVE_HW_FLATSHADE 1
-#define VERTEX            ffb_vertex
-#define TAB               rast_tab
-
-#define UNFILLED_TRI      unfilled_tri
-#define UNFILLED_QUAD     unfilled_quad
-#define DEPTH_SCALE       (fmesa->depth_scale)
-#define VERT_X(_v)        (_v->x)
-#define VERT_Y(_v)        (_v->y)
-#define VERT_Z(_v)	  (_v->z)
-#define AREA_IS_CCW( a )  (a < fmesa->ffb_zero)
-#define GET_VERTEX(e)     (&fmesa->verts[e])
-#define INSANE_VERTICES
-#define VERT_SET_Z(v,val) ((v)->z = (val))
-#define VERT_Z_ADD(v,val) ((v)->z += (val))
-
-#define VERT_COPY_RGBA1( _v )     _v->color[0] = _v->color[1]
-#define VERT_COPY_RGBA( v0, v1 )  v0->color[0] = v1->color[0] 
-#define VERT_SAVE_RGBA( idx )     color[idx] = v[idx]->color[0]
-#define VERT_RESTORE_RGBA( idx )  v[idx]->color[0] = color[idx]   
-
-#define LOCAL_VARS(n)				\
-   ffbContextPtr fmesa = FFB_CONTEXT(ctx);	\
-   __DRIdrawable *dPriv = fmesa->driDrawable; \
-   ffb_color color[n] = { { 0 } };		\
-   (void) color; (void) dPriv;
-
-/***********************************************************************
- *                Helpers for rendering unfilled primitives            *
- ***********************************************************************/
-
-#define RASTERIZE(x) if (fmesa->raster_primitive != reduced_prim[x]) \
-                        ffbRasterPrimitive( ctx, reduced_prim[x] )
-#define RENDER_PRIMITIVE fmesa->render_primitive
-#define TAG(x) x
-#include "tnl_dd/t_dd_unfilled.h"
-
-/***********************************************************************
- *                      Generate GL render functions                   *
- ***********************************************************************/
-
-#define IND (0)
-#define TAG(x) x
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FFB_OFFSET_BIT)
-#define TAG(x) x##_offset
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FFB_TWOSIDE_BIT)
-#define TAG(x) x##_twoside
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FFB_TWOSIDE_BIT|FFB_OFFSET_BIT)
-#define TAG(x) x##_twoside_offset
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FFB_UNFILLED_BIT)
-#define TAG(x) x##_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FFB_OFFSET_BIT|FFB_UNFILLED_BIT)
-#define TAG(x) x##_offset_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FFB_TWOSIDE_BIT|FFB_UNFILLED_BIT)
-#define TAG(x) x##_twoside_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (FFB_TWOSIDE_BIT|FFB_OFFSET_BIT|FFB_UNFILLED_BIT)
-#define TAG(x) x##_twoside_offset_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-static void init_rast_tab( void )
-{
-   init();
-   init_offset();
-   init_twoside();
-   init_twoside_offset();
-   init_unfilled();
-   init_offset_unfilled();
-   init_twoside_unfilled();
-   init_twoside_offset_unfilled();
-}
-
-/**********************************************************************/
-/*                   Render clipped primitives                        */
-/**********************************************************************/
-
-static void ffbRenderClippedPolygon(GLcontext *ctx, const GLuint *elts, GLuint n)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	TNLcontext *tnl = TNL_CONTEXT(ctx);
-	struct vertex_buffer *VB = &tnl->vb;
-	GLuint prim = fmesa->render_primitive;
-
-	/* Render the new vertices as an unclipped polygon. */
-	{
-		GLuint *tmp = VB->Elts;
-		VB->Elts = (GLuint *)elts;
-		tnl->Driver.Render.PrimTabElts[GL_POLYGON](ctx, 0, n, PRIM_BEGIN|PRIM_END);
-		VB->Elts = tmp;
-	}
-
-	/* Restore the render primitive. */
-	if (prim != GL_POLYGON)
-		tnl->Driver.Render.PrimitiveNotify(ctx, prim);
-}
-
-static void ffbRenderClippedLine(GLcontext *ctx, GLuint ii, GLuint jj)
-{
-	TNLcontext *tnl = TNL_CONTEXT(ctx);
-	tnl->Driver.Render.Line(ctx, ii, jj);
-}
-
-/**********************************************************************/
-/*               Render unclipped begin/end objects                   */
-/**********************************************************************/
-
-static void ffb_vb_noop(GLcontext *ctx, GLuint start, GLuint count, GLuint flags)
-{
-	(void)(ctx && start && count && flags);
-}
-
-#define ELT(x)	x
-
-#define IND	0
-#define TAG(x)	x
-#include "ffb_rendertmp.h"
-
-#define IND	(FFB_FLAT_BIT)
-#define TAG(x)	x##_flat
-#include "ffb_rendertmp.h"
-
-#define IND	(FFB_ALPHA_BIT)
-#define TAG(x)	x##_alpha
-#include "ffb_rendertmp.h"
-
-#define IND	(FFB_FLAT_BIT | FFB_ALPHA_BIT)
-#define TAG(x)	x##_flat_alpha
-#include "ffb_rendertmp.h"
-
-#define IND	(FFB_TRI_CULL_BIT)
-#define TAG(x)	x##_tricull
-#include "ffb_rendertmp.h"
-
-#define IND	(FFB_FLAT_BIT | FFB_TRI_CULL_BIT)
-#define TAG(x)	x##_flat_tricull
-#include "ffb_rendertmp.h"
-
-#define IND	(FFB_ALPHA_BIT | FFB_TRI_CULL_BIT)
-#define TAG(x)	x##_alpha_tricull
-#include "ffb_rendertmp.h"
-
-#define IND	(FFB_FLAT_BIT | FFB_ALPHA_BIT | FFB_TRI_CULL_BIT)
-#define TAG(x)	x##_flat_alpha_tricull
-#include "ffb_rendertmp.h"
-
-#undef ELT
-#define ELT(x)	elt[x]
-
-#define IND	0
-#define TAG(x)	x##_elt
-#include "ffb_rendertmp.h"
-
-#define IND	(FFB_FLAT_BIT)
-#define TAG(x)	x##_flat_elt
-#include "ffb_rendertmp.h"
-
-#define IND	(FFB_ALPHA_BIT)
-#define TAG(x)	x##_alpha_elt
-#include "ffb_rendertmp.h"
-
-#define IND	(FFB_FLAT_BIT | FFB_ALPHA_BIT)
-#define TAG(x)	x##_flat_alpha_elt
-#include "ffb_rendertmp.h"
-
-#define IND	(FFB_TRI_CULL_BIT)
-#define TAG(x)	x##_tricull_elt
-#include "ffb_rendertmp.h"
-
-#define IND	(FFB_FLAT_BIT | FFB_TRI_CULL_BIT)
-#define TAG(x)	x##_flat_tricull_elt
-#include "ffb_rendertmp.h"
-
-#define IND	(FFB_ALPHA_BIT | FFB_TRI_CULL_BIT)
-#define TAG(x)	x##_alpha_tricull_elt
-#include "ffb_rendertmp.h"
-
-#define IND	(FFB_FLAT_BIT | FFB_ALPHA_BIT | FFB_TRI_CULL_BIT)
-#define TAG(x)	x##_flat_alpha_tricull_elt
-#include "ffb_rendertmp.h"
-
-static void *render_tabs[MAX_FFB_RENDER_FUNCS];
-static void *render_tabs_elt[MAX_FFB_RENDER_FUNCS];
-
-static void init_render_tab(void)
-{
-	int i;
-
-	render_tabs[0] = render_tab;
-	render_tabs[FFB_FLAT_BIT] = render_tab_flat;
-	render_tabs[FFB_ALPHA_BIT] = render_tab_alpha;
-	render_tabs[FFB_FLAT_BIT|FFB_ALPHA_BIT] = render_tab_flat_alpha;
-	render_tabs[FFB_TRI_CULL_BIT] = render_tab_tricull;
-	render_tabs[FFB_FLAT_BIT|FFB_TRI_CULL_BIT] = render_tab_flat_tricull;
-	render_tabs[FFB_ALPHA_BIT|FFB_TRI_CULL_BIT] = render_tab_alpha_tricull;
-	render_tabs[FFB_FLAT_BIT|FFB_ALPHA_BIT|FFB_TRI_CULL_BIT] =
-		render_tab_flat_alpha_tricull;
-
-	render_tabs_elt[0] = render_tab_elt;
-	render_tabs_elt[FFB_FLAT_BIT] = render_tab_flat_elt;
-	render_tabs_elt[FFB_ALPHA_BIT] = render_tab_alpha_elt;
-	render_tabs_elt[FFB_FLAT_BIT|FFB_ALPHA_BIT] = render_tab_flat_alpha_elt;
-	render_tabs_elt[FFB_TRI_CULL_BIT] = render_tab_tricull_elt;
-	render_tabs_elt[FFB_FLAT_BIT|FFB_TRI_CULL_BIT] = render_tab_flat_tricull_elt;
-	render_tabs_elt[FFB_ALPHA_BIT|FFB_TRI_CULL_BIT] = render_tab_alpha_tricull_elt;
-	render_tabs_elt[FFB_FLAT_BIT|FFB_ALPHA_BIT|FFB_TRI_CULL_BIT] =
-		render_tab_flat_alpha_tricull_elt;
-
-	for (i = 0; i < MAX_FFB_RENDER_FUNCS; i++) {
-		tnl_render_func *rf = render_tabs[i];
-		tnl_render_func *rfe = render_tabs_elt[i];
-
-		if (i & FFB_TRI_CULL_BIT) {
-			int from_idx = (i & ~FFB_TRI_CULL_BIT);
-			tnl_render_func *rf_from = render_tabs[from_idx];
-			tnl_render_func *rfe_from = render_tabs_elt[from_idx];
-			int j;
-
-			for (j = GL_POINTS; j < GL_TRIANGLES; j++) {
-				rf[j] = rf_from[j];
-				rfe[j] = rfe_from[j];
-			}
-		}
-	}
-}
-
-/**********************************************************************/
-/*                    Choose render functions                         */
-/**********************************************************************/
-
-#ifdef FFB_RENDER_TRACE
-static void ffbPrintRenderFlags(GLuint index, GLuint render_index)
-{
-	fprintf(stderr,
-		"ffbChooseRenderState: "
-		"index(%s%s%s) "
-		"render_index(%s%s%s)\n",
-		((index & FFB_TWOSIDE_BIT) ? "twoside " : ""),
-		((index & FFB_OFFSET_BIT) ? "offset " : ""),
-		((index & FFB_UNFILLED_BIT) ? "unfilled " : ""),
-		((render_index & FFB_FLAT_BIT) ? "flat " : ""),
-		((render_index & FFB_ALPHA_BIT) ? "alpha " : ""),
-		((render_index & FFB_TRI_CULL_BIT) ? "tricull " : ""));
-}
-#endif
-
-void ffbChooseRenderState(GLcontext *ctx)
-{
-	GLuint flags = ctx->_TriangleCaps;
- 	TNLcontext *tnl = TNL_CONTEXT(ctx);
-	GLuint index = 0;
-
-	/* Per-primitive fallbacks and the selection of fmesa->draw_* are
-	 * handled elsewhere.
-	 */
-	if (flags & DD_TRI_LIGHT_TWOSIDE)       
-		index |= FFB_TWOSIDE_BIT;
-
-	if (flags & DD_TRI_OFFSET)	      
-		index |= FFB_OFFSET_BIT;
-
-	if (flags & DD_TRI_UNFILLED)	     
-		index |= FFB_UNFILLED_BIT;
-
-	tnl->Driver.Render.Triangle = rast_tab[index].triangle;
-	tnl->Driver.Render.Quad = rast_tab[index].quad;
-
-	if (index == 0) {
-		GLuint render_index = 0;
-
-		if (flags & DD_FLATSHADE)
-			render_index |= FFB_FLAT_BIT;
-
-		if (ctx->Color.BlendEnabled || ctx->Color.AlphaEnabled)
-			render_index |= FFB_ALPHA_BIT;
-
-		if (ctx->Polygon.CullFlag)
-			render_index |= FFB_TRI_CULL_BIT;
-
-#ifdef FFB_RENDER_TRACE
-		ffbPrintRenderFlags(index, render_index);
-#endif
-		tnl->Driver.Render.PrimTabVerts = render_tabs[render_index];
-		tnl->Driver.Render.PrimTabElts = render_tabs_elt[render_index];
-	} else {
-#ifdef FFB_RENDER_TRACE
-		ffbPrintRenderFlags(index, 0);
-#endif
-		tnl->Driver.Render.PrimTabVerts = _tnl_render_tab_verts;
-		tnl->Driver.Render.PrimTabElts = _tnl_render_tab_elts;
-	}
-
-	tnl->Driver.Render.ClippedPolygon = ffbRenderClippedPolygon;
-	tnl->Driver.Render.ClippedLine    = ffbRenderClippedLine;
-}
-
-static void ffbRunPipeline(GLcontext *ctx)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-
-	if (fmesa->bad_fragment_attrs == 0 &&
-	    fmesa->new_gl_state) {
-		if (fmesa->new_gl_state & _FFB_NEW_TRIANGLE)
-			ffbChooseTriangleState(ctx);
-		if (fmesa->new_gl_state & _FFB_NEW_LINE)
-			ffbChooseLineState(ctx);
-		if (fmesa->new_gl_state & _FFB_NEW_POINT)
-			ffbChoosePointState(ctx);
-		if (fmesa->new_gl_state & _FFB_NEW_RENDER)
-			ffbChooseRenderState(ctx);
-		if (fmesa->new_gl_state & _FFB_NEW_VERTEX)
-			ffbChooseVertexState(ctx);
-
-		fmesa->new_gl_state = 0;
-	}
-
-	_tnl_run_pipeline(ctx);
-}
-
-static void ffbRenderStart(GLcontext *ctx)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-
-	LOCK_HARDWARE(fmesa);
-	fmesa->hw_locked = 1;
-
-	if (fmesa->state_dirty != 0)
-		ffbSyncHardware(fmesa);
-}
-
-static void ffbRenderFinish(GLcontext *ctx)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-
-	UNLOCK_HARDWARE(fmesa);
-	fmesa->hw_locked = 0;
-}
-
-/* Even when doing full software rendering we need to
- * wrap render{start,finish} so that the hardware is kept
- * in sync (because multipass rendering changes the write
- * buffer etc.)
- */
-static void ffbSWRenderStart(GLcontext *ctx)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-
-	LOCK_HARDWARE(fmesa);
-	fmesa->hw_locked = 1;
-
-	if (fmesa->state_dirty != 0)
-		ffbSyncHardware(fmesa);
-}
-
-static void ffbSWRenderFinish(GLcontext *ctx)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-
-	UNLOCK_HARDWARE(fmesa);
-	fmesa->hw_locked = 0;
-}
-
-static void ffbRasterPrimitive(GLcontext *ctx, GLenum rprim)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	GLuint drawop, fbc, ppc;
-	int do_sw = 0;
-
-	fmesa->raster_primitive = rprim;
-
-	drawop = fmesa->drawop;
-	fbc = fmesa->fbc;
-	ppc = fmesa->ppc & ~(FFB_PPC_ZS_MASK | FFB_PPC_CS_MASK);
-
-#ifdef STATE_TRACE
-	fprintf(stderr,
-		"ffbReducedPrimitiveChange: rprim(%d) ", rprim);
-#endif
-	switch(rprim) {
-	case GL_POINTS:
-#ifdef STATE_TRACE
-		fprintf(stderr, "GL_POINTS ");
-#endif
-		if (fmesa->draw_point == ffb_fallback_point) {
-			do_sw = 1;
-			break;
-		}
-
-		if (ctx->Point.SmoothFlag) {
-			ppc |= (FFB_PPC_ZS_VAR | FFB_PPC_CS_CONST);
-			drawop = FFB_DRAWOP_AADOT;
-		} else {
-			ppc |= (FFB_PPC_ZS_CONST | FFB_PPC_CS_CONST);
-			drawop = FFB_DRAWOP_DOT;
-		}
-		break;
-
-	case GL_LINES:
-#ifdef STATE_TRACE
-		fprintf(stderr, "GL_LINES ");
-#endif
-		if (fmesa->draw_line == ffb_fallback_line) {
-			do_sw = 1;
-			break;
-		}
-
-		if (ctx->_TriangleCaps & DD_FLATSHADE) {
-			ppc |= FFB_PPC_ZS_VAR | FFB_PPC_CS_CONST;
-		} else {
-			ppc |= FFB_PPC_ZS_VAR | FFB_PPC_CS_VAR;
-		}
-		if (ctx->Line.SmoothFlag)
-			drawop = FFB_DRAWOP_AALINE;
-		else
-			drawop = FFB_DRAWOP_DDLINE;
-		break;
-
-	case GL_TRIANGLES:
-#ifdef STATE_TRACE
-		fprintf(stderr, "GL_POLYGON ");
-#endif
-		if (fmesa->draw_tri == ffb_fallback_triangle) {
-			do_sw = 1;
-			break;
-		}
-
-		ppc &= ~FFB_PPC_APE_MASK;
-		if (ctx->Polygon.StippleFlag)
-			ppc |= FFB_PPC_APE_ENABLE;
-		else
-			ppc |= FFB_PPC_APE_DISABLE;
-
-		if (ctx->_TriangleCaps & DD_FLATSHADE) {
-			ppc |= FFB_PPC_ZS_VAR | FFB_PPC_CS_CONST;
-		} else {
-			ppc |= FFB_PPC_ZS_VAR | FFB_PPC_CS_VAR;
-		}
-		drawop = FFB_DRAWOP_TRIANGLE;
-		break;
-
-	default:
-#ifdef STATE_TRACE
-		fprintf(stderr, "unknown %d!\n", rprim);
-#endif
-		return;
-	};
-
-#ifdef STATE_TRACE
-	fprintf(stderr, "do_sw(%d) ", do_sw);
-#endif
-	if (do_sw != 0) {
-		fbc &= ~(FFB_FBC_WB_C);
-		fbc &= ~(FFB_FBC_ZE_MASK | FFB_FBC_RGBE_MASK);
-		fbc |=   FFB_FBC_ZE_OFF  | FFB_FBC_RGBE_MASK;
-		ppc &= ~(FFB_PPC_XS_MASK | FFB_PPC_ABE_MASK |
-			 FFB_PPC_DCE_MASK | FFB_PPC_APE_MASK);
-		ppc |=  (FFB_PPC_ZS_VAR | FFB_PPC_CS_VAR | FFB_PPC_XS_WID |
-			 FFB_PPC_ABE_DISABLE | FFB_PPC_DCE_DISABLE |
-			 FFB_PPC_APE_DISABLE);
-	} else {
-		fbc |= FFB_FBC_WB_C;
-		fbc &= ~(FFB_FBC_RGBE_MASK);
-		fbc |=   FFB_FBC_RGBE_MASK;
-		ppc &= ~(FFB_PPC_ABE_MASK | FFB_PPC_XS_MASK);
-		if (ctx->Color.BlendEnabled) {
-			if ((rprim == GL_POINTS && !ctx->Point.SmoothFlag) ||
-			    (rprim != GL_POINTS && ctx->_TriangleCaps & DD_FLATSHADE))
-				ppc |= FFB_PPC_ABE_ENABLE | FFB_PPC_XS_CONST;
-			else
-				ppc |= FFB_PPC_ABE_ENABLE | FFB_PPC_XS_VAR;
-		} else {
-			ppc |= FFB_PPC_ABE_DISABLE | FFB_PPC_XS_WID;
-		}
-	}
-#ifdef STATE_TRACE
-	fprintf(stderr, "fbc(%08x) ppc(%08x)\n", fbc, ppc);
-#endif
-
-	FFBFifo(fmesa, 4);
-	if (fmesa->drawop != drawop)
-		fmesa->regs->drawop = fmesa->drawop = drawop;
-	if (fmesa->fbc != fbc)
-		fmesa->regs->fbc = fmesa->fbc = fbc;
-	if (fmesa->ppc != ppc)
-		fmesa->regs->ppc = fmesa->ppc = ppc;
-	if (do_sw != 0) {
-		fmesa->regs->cmp =
-			(fmesa->cmp & ~(0xff<<16)) | (0x80 << 16);
-	} else
-		fmesa->regs->cmp = fmesa->cmp;
-}
-
-static void ffbRenderPrimitive(GLcontext *ctx, GLenum prim)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	GLuint rprim = reduced_prim[prim];
-
-	fmesa->render_primitive = prim;
-
-	if (rprim == GL_TRIANGLES && (ctx->_TriangleCaps & DD_TRI_UNFILLED))
-		return;
-
-	if (fmesa->raster_primitive != rprim) {
-		ffbRasterPrimitive( ctx, rprim );
-	}
-}
-
-
-
-
-/**********************************************************************/
-/*           Transition to/from hardware rasterization.               */
-/**********************************************************************/
-
-static char *fallbackStrings[] = {
-	"Fog enabled",
-	"Blend function",
-	"Blend ROP",
-	"Blend equation",
-	"Stencil",
-	"Texture",
-	"LIBGL_SOFTWARE_RENDERING"
-};
-
-static char *getFallbackString(GLuint bit)
-{
-	int i = 0;
-
-	while (bit > 1) {
-		i++;
-		bit >>= 1;
-	}
-	return fallbackStrings[i];
-}
-
-void ffbFallback( GLcontext *ctx, GLuint bit, GLboolean mode )
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
- 	TNLcontext *tnl = TNL_CONTEXT(ctx);
-	GLuint oldfallback = fmesa->bad_fragment_attrs;
-
-	if (mode) {
-		fmesa->bad_fragment_attrs |= bit;
-		if (oldfallback == 0) {
-/*  			FFB_FIREVERTICES(fmesa); */
-  		        _swsetup_Wakeup( ctx );
-			if (fmesa->debugFallbacks)
-				fprintf(stderr, "FFB begin software fallback: 0x%x %s\n",
-					bit, getFallbackString(bit));
-		}
-	} else {
-		fmesa->bad_fragment_attrs &= ~bit;
-		if (oldfallback == bit) {
-			_swrast_flush( ctx );
-
-			tnl->Driver.Render.Start = ffbRenderStart;
-			tnl->Driver.Render.PrimitiveNotify = ffbRenderPrimitive;
-			tnl->Driver.Render.Finish = ffbRenderFinish;
-			fmesa->new_gl_state = ~0;
-
-			/* Just re-choose everything:
-			 */
-			ffbChooseVertexState(ctx);
-			ffbChooseRenderState(ctx);
-			ffbChooseTriangleState(ctx);
-			ffbChooseLineState(ctx);
-			ffbChoosePointState(ctx);
-
-			if (fmesa->debugFallbacks)
-				fprintf(stderr, "FFB end software fallback: 0x%x %s\n",
-					bit, getFallbackString(bit));
-		}
-	}
-}
-
-/**********************************************************************/
-/*                            Initialization.                         */
-/**********************************************************************/
-
-void ffbDDInitRenderFuncs( GLcontext *ctx )
-{
- 	TNLcontext *tnl = TNL_CONTEXT(ctx);
-	SWcontext *swrast = SWRAST_CONTEXT(ctx);
-	static int firsttime = 1;
-
-	if (firsttime) {
-		init_rast_tab();
-		init_tri_tab();
-		init_render_tab();
-		firsttime = 0;
-	}
-
-	tnl->Driver.RunPipeline = ffbRunPipeline;
-	tnl->Driver.Render.Start = ffbRenderStart;
-	tnl->Driver.Render.Finish = ffbRenderFinish; 
-	tnl->Driver.Render.PrimitiveNotify = ffbRenderPrimitive;
-	tnl->Driver.Render.ResetLineStipple = _swrast_ResetLineStipple;
-	tnl->Driver.Render.PrimTabVerts = _tnl_render_tab_verts;
-	tnl->Driver.Render.PrimTabElts = _tnl_render_tab_elts;
-
-	swrast->Driver.SpanRenderStart = ffbSWRenderStart;
-	swrast->Driver.SpanRenderFinish = ffbSWRenderFinish;
-}
diff --git a/src/mesa/drivers/dri/ffb/ffb_tris.h b/src/mesa/drivers/dri/ffb/ffb_tris.h
deleted file mode 100644
index 116b8e07f1..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_tris.h
+++ /dev/null
@@ -1,25 +0,0 @@
-
-#ifndef _FFB_TRIS_H
-#define _FFB_TRIS_H
-
-extern void ffbDDInitRenderFuncs( GLcontext *ctx );
-
-
-#define _FFB_NEW_RENDER (_DD_NEW_TRI_LIGHT_TWOSIDE |	\
-			 _DD_NEW_TRI_OFFSET |		\
-			 _DD_NEW_TRI_UNFILLED)
-
-extern void ffbChooseRenderState(GLcontext *ctx);
-
-
-#define _FFB_NEW_TRIANGLE (_DD_NEW_TRI_SMOOTH |	\
-			   _DD_NEW_FLATSHADE |	\
-			   _NEW_POLYGON | 	\
-			   _NEW_COLOR)
-
-extern void ffbChooseTriangleState(GLcontext *ctx);
-
-extern void ffbFallback( GLcontext *ctx, GLuint bit, GLboolean mode );
-#define FALLBACK( ctx, bit, mode ) ffbFallback( ctx, bit, mode )
-
-#endif /* !(_FFB_TRIS_H) */
diff --git a/src/mesa/drivers/dri/ffb/ffb_tritmp.h b/src/mesa/drivers/dri/ffb/ffb_tritmp.h
deleted file mode 100644
index 324a871ec4..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_tritmp.h
+++ /dev/null
@@ -1,238 +0,0 @@
-
-static void TAG(ffb_triangle)( GLcontext *ctx, 	
-			       ffb_vertex *v0,
-			       ffb_vertex *v1,
-			       ffb_vertex *v2 )
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	ffb_fbcPtr ffb = fmesa->regs;
-#if (IND & FFB_TRI_FLAT_BIT)
-	GLuint const_fg;
-#endif
-	FFB_DELAYED_VIEWPORT_VARS;
-
-#ifdef TRI_DEBUG
-	fprintf(stderr, "FFB: ffb_triangle ["
-#if (IND & FFB_TRI_CULL_BIT)
-		" CULL"
-#endif
-#if (IND & FFB_TRI_FLAT_BIT)
-		" FLAT"
-#endif
-#if (IND & FFB_TRI_ALPHA_BIT)
-		" ALPHA"
-#endif
-		" ]\n");
-#endif
-
-#if (IND & FFB_TRI_CULL_BIT)
-	{	/* NOTE: These are not viewport transformed yet. */
-		GLfloat ex = v1->x - v0->x;
-		GLfloat ey = v1->y - v0->y;
-		GLfloat fx = v2->x - v0->x;
-		GLfloat fy = v2->y - v0->y;
-		GLfloat c = ex*fy-ey*fx;
-
-		/* Culled... */
-		if (c * fmesa->backface_sign > fmesa->ffb_zero)
-			return;
-	}
-#endif
-
-#if (IND & FFB_TRI_FLAT_BIT)
-	const_fg = FFB_PACK_CONST_UBYTE_ARGB_COLOR( v2->color[0] );
-#ifdef TRI_DEBUG
-	fprintf(stderr, "FFB_tri: const_fg %08x (B[%f] G[%f] R[%f])\n",
-		const_fg,
-		FFB_2_30_FIXED_TO_FLOAT(v2->color[0].blue),
-		FFB_2_30_FIXED_TO_FLOAT(v2->color[0].green),
-		FFB_2_30_FIXED_TO_FLOAT(v2->color[0].red));
-#endif
-#endif
-
-
-#if (IND & FFB_TRI_FLAT_BIT)
-	FFBFifo(fmesa, 1);
-	ffb->fg = const_fg;
-#endif
-
-#if (IND & FFB_TRI_FLAT_BIT)
-	FFBFifo(fmesa, 9);
-#else
-#if (IND & FFB_TRI_ALPHA_BIT)
-	FFBFifo(fmesa, 21);
-#else
-	FFBFifo(fmesa, 18);
-#endif
-#endif
-
-	FFB_DUMP_VERTEX(v0);
-#if !(IND & FFB_TRI_FLAT_BIT)
-#if (IND & FFB_TRI_ALPHA_BIT)
-	ffb->alpha = FFB_GET_ALPHA(v0);
-#endif
-	ffb->red   = FFB_GET_RED(v0);
-	ffb->green = FFB_GET_GREEN(v0);
-	ffb->blue  = FFB_GET_BLUE(v0);
-#endif
-	ffb->z     = FFB_GET_Z(v0);
-	ffb->ryf   = FFB_GET_Y(v0);
-	ffb->rxf   = FFB_GET_X(v0);
-
-	FFB_DUMP_VERTEX(v1);
-#if !(IND & FFB_TRI_FLAT_BIT)
-#if (IND & FFB_TRI_ALPHA_BIT)
-	ffb->alpha = FFB_GET_ALPHA(v1);
-#endif
-	ffb->red   = FFB_GET_RED(v1);
-	ffb->green = FFB_GET_GREEN(v1);
-	ffb->blue  = FFB_GET_BLUE(v1);
-#endif
-	ffb->z     = FFB_GET_Z(v1);
-	ffb->y     = FFB_GET_Y(v1);
-	ffb->x     = FFB_GET_X(v1);
-
-	FFB_DUMP_VERTEX(v2);
-#if !(IND & FFB_TRI_FLAT_BIT)
-#if (IND & FFB_TRI_ALPHA_BIT)
-	ffb->alpha = FFB_GET_ALPHA(v2);
-#endif
-	ffb->red   = FFB_GET_RED(v2);
-	ffb->green = FFB_GET_GREEN(v2);
-	ffb->blue  = FFB_GET_BLUE(v2);
-#endif
-	ffb->z     = FFB_GET_Z(v2);
-	ffb->y     = FFB_GET_Y(v2);
-	ffb->x     = FFB_GET_X(v2);
-
-	fmesa->ffbScreen->rp_active = 1;
-}
-
-
-static void TAG(ffb_quad)(GLcontext *ctx, 			      
-			  ffb_vertex *v0,
-			  ffb_vertex *v1,
-			  ffb_vertex *v2,
-			  ffb_vertex *v3 )
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	ffb_fbcPtr ffb = fmesa->regs;
-#if (IND & FFB_TRI_FLAT_BIT)
-	GLuint const_fg;
-#endif
-	FFB_DELAYED_VIEWPORT_VARS;
-
-#ifdef TRI_DEBUG
-	fprintf(stderr, "FFB: ffb_quad ["
-#if (IND & FFB_TRI_CULL_BIT)
-		" CULL"
-#endif
-#if (IND & FFB_TRI_FLAT_BIT)
-		" FLAT"
-#endif
-#if (IND & FFB_TRI_ALPHA_BIT)
-		" ALPHA"
-#endif
-		" ]\n");
-#endif /* TRI_DEBUG */
-
-#if (IND & FFB_TRI_CULL_BIT)
-	{	/* NOTE: These are not viewport transformed yet. */
-		GLfloat ex = v2->x - v0->x;
-		GLfloat ey = v2->y - v0->y;
-		GLfloat fx = v3->x - v1->x;
-		GLfloat fy = v3->y - v1->y;
-		GLfloat c = ex*fy-ey*fx;
-
-		/* Culled... */
-		if (c * fmesa->backface_sign > fmesa->ffb_zero)
-			return;
-	}
-#endif
-
-#if (IND & FFB_TRI_FLAT_BIT)
-	const_fg = FFB_PACK_CONST_UBYTE_ARGB_COLOR( v3->color[0] );
-#ifdef TRI_DEBUG
-	fprintf(stderr, "FFB_quad: const_fg %08x (B[%f] G[%f] R[%f])\n",
-		const_fg,
-		FFB_2_30_FIXED_TO_FLOAT(v3->color[0].blue),
-		FFB_2_30_FIXED_TO_FLOAT(v3->color[0].green),
-		FFB_2_30_FIXED_TO_FLOAT(v3->color[0].red));
-#endif
-#endif
-
-
-#if (IND & FFB_TRI_FLAT_BIT)
-	FFBFifo(fmesa, 13);
-	ffb->fg = const_fg;
-#else
-#if (IND & FFB_TRI_ALPHA_BIT)
-	FFBFifo(fmesa, 28);
-#else
-	FFBFifo(fmesa, 24);
-#endif
-#endif
-
-	FFB_DUMP_VERTEX(v0);
-#if !(IND & FFB_TRI_FLAT_BIT)
-#if (IND & FFB_TRI_ALPHA_BIT)
-	ffb->alpha = FFB_GET_ALPHA(v0);
-#endif
-	ffb->red   = FFB_GET_RED(v0);
-	ffb->green = FFB_GET_GREEN(v0);
-	ffb->blue  = FFB_GET_BLUE(v0);
-#endif
-	ffb->z     = FFB_GET_Z(v0);
-	ffb->ryf   = FFB_GET_Y(v0);
-	ffb->rxf   = FFB_GET_X(v0);
-
-	FFB_DUMP_VERTEX(v1);
-#if !(IND & FFB_TRI_FLAT_BIT)
-#if (IND & FFB_TRI_ALPHA_BIT)
-	ffb->alpha = FFB_GET_ALPHA(v1);
-#endif
-	ffb->red   = FFB_GET_RED(v1);
-	ffb->green = FFB_GET_GREEN(v1);
-	ffb->blue  = FFB_GET_BLUE(v1);
-#endif
-	ffb->z     = FFB_GET_Z(v1);
-	ffb->y     = FFB_GET_Y(v1);
-	ffb->x     = FFB_GET_X(v1);
-
-	FFB_DUMP_VERTEX(v2);
-#if !(IND & FFB_TRI_FLAT_BIT)
-#if (IND & FFB_TRI_ALPHA_BIT)
-	ffb->alpha = FFB_GET_ALPHA(v2);
-#endif
-	ffb->red   = FFB_GET_RED(v2);
-	ffb->green = FFB_GET_GREEN(v2);
-	ffb->blue  = FFB_GET_BLUE(v2);
-#endif
-	ffb->z     = FFB_GET_Z(v2);
-	ffb->y     = FFB_GET_Y(v2);
-	ffb->x     = FFB_GET_X(v2);
-
-	FFB_DUMP_VERTEX(v3);
-#if !(IND & FFB_TRI_FLAT_BIT)
-#if (IND & FFB_TRI_ALPHA_BIT)
-	ffb->alpha = FFB_GET_ALPHA(v3);
-#endif
-	ffb->red   = FFB_GET_RED(v3);
-	ffb->green = FFB_GET_GREEN(v3);
-	ffb->blue  = FFB_GET_BLUE(v3);
-#endif
-	ffb->z     = FFB_GET_Z(v3);
-	ffb->dmyf  = FFB_GET_Y(v3);
-	ffb->dmxf  = FFB_GET_X(v3);
-
-	fmesa->ffbScreen->rp_active = 1;
-}
-
-static void TAG(ffb_init)(void)
-{
-	ffb_tri_tab[IND]	= TAG(ffb_triangle);
-	ffb_quad_tab[IND]	= TAG(ffb_quad);
-}
-
-#undef IND
-#undef TAG
diff --git a/src/mesa/drivers/dri/ffb/ffb_vb.c b/src/mesa/drivers/dri/ffb/ffb_vb.c
deleted file mode 100644
index a53e7c7431..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_vb.c
+++ /dev/null
@@ -1,207 +0,0 @@
-/* 
- *
- * GLX Hardware Device Driver for Sun Creator/Creator3D
- * Copyright (C) 2000, 2001 David S. Miller
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * DAVID MILLER, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM, 
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
- * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- *
- *    David S. Miller <davem@redhat.com>
- */
-
-#include "ffb_xmesa.h"
-#include "ffb_context.h"
-#include "ffb_vb.h"
-#include "main/imports.h"
-#include "tnl/t_context.h"
-
-#undef VB_DEBUG
-
-static void ffb_copy_pv_oneside(GLcontext *ctx, GLuint edst, GLuint esrc)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	ffb_vertex *dst = &fmesa->verts[edst];
-	ffb_vertex *src = &fmesa->verts[esrc];
-
-#ifdef VB_DEBUG
-	fprintf(stderr, "ffb_copy_pv_oneside: edst(%d) esrc(%d)\n", edst, esrc);
-#endif
-	dst->color[0].alpha = src->color[0].alpha;
-	dst->color[0].red   = src->color[0].red;
-	dst->color[0].green = src->color[0].green;
-	dst->color[0].blue  = src->color[0].blue;
-}
-
-static void ffb_copy_pv_twoside(GLcontext *ctx, GLuint edst, GLuint esrc)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	ffb_vertex *dst = &fmesa->verts[edst];
-	ffb_vertex *src = &fmesa->verts[esrc];
-
-#ifdef VB_DEBUG
-	fprintf(stderr, "ffb_copy_pv_twoside: edst(%d) esrc(%d)\n", edst, esrc);
-#endif
-	dst->color[0].alpha = src->color[0].alpha;
-	dst->color[0].red   = src->color[0].red;
-	dst->color[0].green = src->color[0].green;
-	dst->color[0].blue  = src->color[0].blue;
-	dst->color[1].alpha = src->color[1].alpha;
-	dst->color[1].red   = src->color[1].red;
-	dst->color[1].green = src->color[1].green;
-	dst->color[1].blue  = src->color[1].blue;
-}
-
-#define FFB_VB_RGBA_BIT		0x01
-#define FFB_VB_XYZ_BIT		0x02
-#define FFB_VB_TWOSIDE_BIT	0x04
-#define FFB_VB_MAX		0x08
-
-typedef void (*ffb_emit_func)(GLcontext *, GLuint, GLuint);
-
-static struct {
- 	ffb_emit_func	emit;
-	tnl_interp_func	interp;
-} setup_tab[FFB_VB_MAX];
-
-
-#define IND	(FFB_VB_XYZ_BIT)
-#define TAG(x)	x##_w
-#include "ffb_vbtmp.h"
-
-#define IND	(FFB_VB_RGBA_BIT)
-#define TAG(x)	x##_g
-#include "ffb_vbtmp.h"
-
-#define IND	(FFB_VB_XYZ_BIT | FFB_VB_RGBA_BIT)
-#define TAG(x)	x##_wg
-#include "ffb_vbtmp.h"
-
-#define IND	(FFB_VB_TWOSIDE_BIT)
-#define TAG(x)	x##_t
-#include "ffb_vbtmp.h"
-
-#define IND	(FFB_VB_XYZ_BIT | FFB_VB_TWOSIDE_BIT)
-#define TAG(x)	x##_wt
-#include "ffb_vbtmp.h"
-
-#define IND	(FFB_VB_RGBA_BIT | FFB_VB_TWOSIDE_BIT)
-#define TAG(x)	x##_gt
-#include "ffb_vbtmp.h"
-
-#define IND	(FFB_VB_XYZ_BIT | FFB_VB_RGBA_BIT | FFB_VB_TWOSIDE_BIT)
-#define TAG(x)	x##_wgt
-#include "ffb_vbtmp.h"
-
-static void init_setup_tab( void )
-{
-	init_w();
-	init_g();
-	init_wg();
-	init_t();
-	init_wt();
-	init_gt();
-	init_wgt();
-}
-
-#ifdef VB_DEBUG
-static void ffbPrintSetupFlags(char *msg, GLuint flags)
-{
-   fprintf(stderr, "%s(%x): %s%s%s\n",
-	   msg,
-	   (int)flags,
-	   (flags & FFB_VB_XYZ_BIT)     ? " xyz," : "", 
-	   (flags & FFB_VB_RGBA_BIT)    ? " rgba," : "",
-	   (flags & FFB_VB_TWOSIDE_BIT) ? " twoside," : "");
-}
-#endif
-
-static void ffbDDBuildVertices(GLcontext *ctx, GLuint start, GLuint count, 
-			       GLuint newinputs)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-
-	newinputs |= fmesa->setupnewinputs;
-	fmesa->setupnewinputs = 0;
-
-	if (!newinputs)
-		return;
-
-	if (newinputs & VERT_BIT_POS) {
-		setup_tab[fmesa->setupindex].emit(ctx, start, count);
-	} else {
-		GLuint ind = 0;
-
-		if (newinputs & VERT_BIT_COLOR0)
-			ind |= (FFB_VB_RGBA_BIT | FFB_VB_TWOSIDE_BIT);
-
-		ind &= fmesa->setupindex;
-
-		if (ind)
-			setup_tab[ind].emit(ctx, start, count);
-	}
-}
-
-void ffbChooseVertexState( GLcontext *ctx )
-{
- 	TNLcontext *tnl = TNL_CONTEXT(ctx);
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	int ind = FFB_VB_XYZ_BIT | FFB_VB_RGBA_BIT;
-
-	if (ctx->_TriangleCaps & DD_TRI_LIGHT_TWOSIDE)
-		ind |= FFB_VB_TWOSIDE_BIT;
-
-#ifdef VB_DEBUG
-	ffbPrintSetupFlags("ffb: full setup function", ind);
-#endif
-
-	fmesa->setupindex = ind;
-
-	tnl->Driver.Render.BuildVertices = ffbDDBuildVertices;
-	tnl->Driver.Render.Interp = setup_tab[ind].interp;
-	if (ind & FFB_VB_TWOSIDE_BIT)
-		tnl->Driver.Render.CopyPV = ffb_copy_pv_twoside;
-	else
-		tnl->Driver.Render.CopyPV = ffb_copy_pv_oneside;
-}
-
-void ffbInitVB( GLcontext *ctx )
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	GLuint size = TNL_CONTEXT(ctx)->vb.Size;
-
-	fmesa->verts = (ffb_vertex *)_mesa_align_malloc(size * sizeof(ffb_vertex), 32);
-
-	{
-		static int firsttime = 1;
-		if (firsttime) {
-			init_setup_tab();
-			firsttime = 0;
-		}
-	}
-}
-
-
-void ffbFreeVB( GLcontext *ctx )
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	if (fmesa->verts) {
-		_mesa_align_free(fmesa->verts);
-		fmesa->verts = 0;
-	}
-}
diff --git a/src/mesa/drivers/dri/ffb/ffb_vb.h b/src/mesa/drivers/dri/ffb/ffb_vb.h
deleted file mode 100644
index 238b9940bf..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_vb.h
+++ /dev/null
@@ -1,44 +0,0 @@
-
-#ifndef _FFB_VB_H
-#define _FFB_VB_H
-
-#include "main/mtypes.h"
-#include "main/macros.h"
-#include "tnl/t_context.h"
-#include "swrast/swrast.h"
-
-#define __FFB_2_30_FIXED_SCALE		1073741824.0f
-#define FFB_2_30_FLOAT_TO_FIXED(X)	\
-	(IROUND((X) * fmesa->ffb_2_30_fixed_scale))
-#define FFB_2_30_FIXED_TO_FLOAT(X)	\
-	(((GLfloat)(X)) * fmesa->ffb_one_over_2_30_fixed_scale)
-
-#define __FFB_16_16_FIXED_SCALE		65536.0f
-#define FFB_16_16_FLOAT_TO_FIXED(X)	\
-	(IROUND((X) * fmesa->ffb_16_16_fixed_scale))
-#define FFB_16_16_FIXED_TO_FLOAT(X)	\
-	(((GLfloat)(X)) * fmesa->ffb_one_over_16_16_fixed_scale)
-
-#define FFB_Z_FROM_FLOAT(VAL)	  FFB_2_30_FLOAT_TO_FIXED(VAL)
-#define FFB_Z_TO_FLOAT(VAL)	  FFB_2_30_FIXED_TO_FLOAT(VAL)
-#define FFB_XY_FROM_FLOAT(VAL)	  FFB_16_16_FLOAT_TO_FIXED(VAL)
-#define FFB_XY_TO_FLOAT(VAL)	  FFB_16_16_FIXED_TO_FLOAT(VAL)
-
-#define FFB_UBYTE_FROM_COLOR(VAL) ((IROUND((VAL) * fmesa->ffb_ubyte_color_scale)))
-
-#define FFB_PACK_CONST_UBYTE_ARGB_COLOR(C) 		\
-        ((FFB_UBYTE_FROM_COLOR(C.alpha) << 24) |	\
-         (FFB_UBYTE_FROM_COLOR(C.blue)  << 16) |	\
-         (FFB_UBYTE_FROM_COLOR(C.green) <<  8) |	\
-         (FFB_UBYTE_FROM_COLOR(C.red)   <<  0))
-
-#define FFB_COLOR_FROM_FLOAT(VAL) FFB_2_30_FLOAT_TO_FIXED(VAL)
-
-#define _FFB_NEW_VERTEX (_DD_NEW_TRI_LIGHT_TWOSIDE)
-
-extern void ffbDDSetupInit(void);
-extern void ffbChooseVertexState(GLcontext *);
-extern void ffbInitVB( GLcontext *ctx );
-extern void ffbFreeVB( GLcontext *ctx );
-
-#endif /* !(_FFB_VB_H) */
diff --git a/src/mesa/drivers/dri/ffb/ffb_vbtmp.h b/src/mesa/drivers/dri/ffb/ffb_vbtmp.h
deleted file mode 100644
index c548ef3ad5..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_vbtmp.h
+++ /dev/null
@@ -1,150 +0,0 @@
-
-static void TAG(emit)(GLcontext *ctx, GLuint start, GLuint end)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-#if defined(VB_DEBUG) || (IND & (FFB_VB_XYZ_BIT | FFB_VB_RGBA_BIT))
-	struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
-#endif
-#if (IND & (FFB_VB_RGBA_BIT))
-	GLfloat (*col0)[4];
-	GLuint col0_stride;
-#if (IND & (FFB_VB_TWOSIDE_BIT))
-	GLfloat (*col1)[4];
-	GLuint col1_stride;
-#endif
-#endif
-#if (IND & FFB_VB_XYZ_BIT)
-	GLfloat (*proj)[4] = VB->NdcPtr->data;
-	GLuint proj_stride = VB->NdcPtr->stride;
-	const GLubyte *mask = VB->ClipMask;
-#endif
-	ffb_vertex *v = &fmesa->verts[start];
-	int i;
-
-#ifdef VB_DEBUG
-	fprintf(stderr, "FFB: ffb_emit ["
-#if (IND & (FFB_VB_XYZ_BIT))
-		" XYZ"
-#endif
-#if (IND & (FFB_VB_RGBA_BIT))
-		" RGBA"
-#endif
-#if (IND & (FFB_VB_TWOSIDE_BIT))
-		" TWOSIDE"
-#endif
-		"] start(%d) end(%d) import(%d)\n",
-		start, end,
-		VB->importable_data);
-#endif
-
-#if (IND & (FFB_VB_RGBA_BIT))
-	col0 = VB->AttribPtr[_TNL_ATTRIB_COLOR0]->data;
-	col0_stride = VB->AttribPtr[_TNL_ATTRIB_COLOR0]->stride;
-#if (IND & (FFB_VB_TWOSIDE_BIT))
-	col1 = VB->BackfaceColorPtr->data;
-	col1_stride = VB->BackfaceColorPtr->stride;
-#endif
-#endif
-
-        {
-		if (start) {
-#if (IND & (FFB_VB_XYZ_BIT))
-			proj = (GLfloat (*)[4])((GLubyte *)proj + start * proj_stride);
-#endif
-#if (IND & (FFB_VB_RGBA_BIT))
-			col0 = (GLfloat (*)[4])((GLubyte *)col0 + start * col0_stride);
-#if (IND & (FFB_VB_TWOSIDE_BIT))
-			col1 = (GLfloat (*)[4])((GLubyte *)col1 + start * col1_stride);
-#endif
-#endif
-		}
-		for (i = start; i < end; i++, v++) {
-#if (IND & (FFB_VB_XYZ_BIT))
-			if (mask[i] == 0) {
-				v->x = proj[0][0];
-				v->y = proj[0][1];
-				v->z = proj[0][2];
-			}
-			proj = (GLfloat (*)[4])((GLubyte *)proj + proj_stride);
-#endif
-#if (IND & (FFB_VB_RGBA_BIT))
-			v->color[0].alpha = CLAMP(col0[0][3], 0.0f, 1.0f);
-			v->color[0].red   = CLAMP(col0[0][0], 0.0f, 1.0f);
-			v->color[0].green = CLAMP(col0[0][1], 0.0f, 1.0f);
-			v->color[0].blue  = CLAMP(col0[0][2], 0.0f, 1.0f);
-			col0 = (GLfloat (*)[4])((GLubyte *)col0 + col0_stride);
-#if (IND & (FFB_VB_TWOSIDE_BIT))
-			v->color[1].alpha = CLAMP(col1[0][3], 0.0f, 1.0f);
-			v->color[1].red   = CLAMP(col1[0][0], 0.0f, 1.0f);
-			v->color[1].green = CLAMP(col1[0][1], 0.0f, 1.0f);
-			v->color[1].blue  = CLAMP(col1[0][2], 0.0f, 1.0f);
-			col1 = (GLfloat (*)[4])((GLubyte *)col1 + col1_stride);
-#endif
-#endif
-		}
-	}
-}
-
-static void TAG(interp)(GLcontext *ctx, GLfloat t,
-			GLuint edst, GLuint eout, GLuint ein,
-			GLboolean force_boundary)
-{
-#if (IND & (FFB_VB_XYZ_BIT | FFB_VB_RGBA_BIT))
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-#endif
-#if (IND & (FFB_VB_XYZ_BIT))
-	struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
-	const GLfloat *dstclip = VB->ClipPtr->data[edst];
-	GLfloat oow = 1.0 / dstclip[3];
-#endif
-#if (IND & (FFB_VB_XYZ_BIT | FFB_VB_RGBA_BIT))
-	ffb_vertex *dst = &fmesa->verts[edst];
-#endif
-#if (IND & (FFB_VB_RGBA_BIT))
-	ffb_vertex *in = &fmesa->verts[eout];
-	ffb_vertex *out = &fmesa->verts[ein];
-#endif
-
-#ifdef VB_DEBUG
-	fprintf(stderr, "FFB: ffb_interp ["
-#if (IND & (FFB_VB_XYZ_BIT))
-		" XYZ"
-#endif
-#if (IND & (FFB_VB_RGBA_BIT))
-		" RGBA"
-#endif
-#if (IND & (FFB_VB_TWOSIDE_BIT))
-		" TWOSIDE"
-#endif
-		"] edst(%d) eout(%d) ein(%d)\n",
-		edst, eout, ein);
-#endif
-
-#if (IND & (FFB_VB_XYZ_BIT))
-	dst->x = dstclip[0] * oow;
-	dst->y = dstclip[1] * oow;
-	dst->z = dstclip[2] * oow;
-#endif
-
-#if (IND & (FFB_VB_RGBA_BIT))
-	INTERP_F(t, dst->color[0].alpha, out->color[0].alpha, in->color[0].alpha);
-	INTERP_F(t, dst->color[0].red,   out->color[0].red,   in->color[0].red);
-	INTERP_F(t, dst->color[0].green, out->color[0].green, in->color[0].green);
-	INTERP_F(t, dst->color[0].blue,  out->color[0].blue,  in->color[0].blue);
-#if (IND & (FFB_VB_TWOSIDE_BIT))
-	INTERP_F(t, dst->color[1].alpha, out->color[1].alpha, in->color[1].alpha);
-	INTERP_F(t, dst->color[1].red,   out->color[1].red,   in->color[1].red);
-	INTERP_F(t, dst->color[1].green, out->color[1].green, in->color[1].green);
-	INTERP_F(t, dst->color[1].blue,  out->color[1].blue,  in->color[1].blue);
-#endif
-#endif
-}
-
-static void TAG(init)(void)
-{
-	setup_tab[IND].emit = TAG(emit);
-	setup_tab[IND].interp = TAG(interp);
-}
-
-#undef IND
-#undef TAG
diff --git a/src/mesa/drivers/dri/ffb/ffb_vtxfmt.c b/src/mesa/drivers/dri/ffb/ffb_vtxfmt.c
deleted file mode 100644
index 90f44b0e91..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_vtxfmt.c
+++ /dev/null
@@ -1,414 +0,0 @@
-/* 
- *
- * GLX Hardware Device Driver for Sun Creator/Creator3D
- * Copyright (C) 2001 David S. Miller
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * DAVID MILLER, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM, 
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
- * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- *
- *    David S. Miller <davem@redhat.com>
- */
-
-#include "main/glheader.h"
-#include "api_noop.h"
-#include "main/context.h"
-#include "light.h"
-#include "main/macros.h"
-#include "main/imports.h"
-#include "main/mtypes.h"
-#include "main/simple_list.h"
-#include "vtxfmt.h"
-#include "ffb_xmesa.h"
-#include "ffb_context.h"
-#include "ffb_vb.h"
-#include "tnl/tnl.h"
-#include "tnl/tcontext.h"
-
-#include "ffb_vtxfmt.h"
-
-#define TNL_VERTEX			ffbTnlVertex
-
-#define INTERP_RGBA(t, out, a, b)		\
-do {						\
-   GLint i;					\
-   for ( i = 0 ; i < 4 ; i++ ) {		\
-      GLfloat fa = a[i];			\
-      GLfloat fb = b[i];			\
-      out[i] = LINTERP( t, fa, fb );		\
-   }						\
-} while (0)
-
-/* Color functions: */
-
-static INLINE void ffb_recalc_base_color(GLcontext *ctx)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	struct gl_light *light;
-
-	COPY_3V(fmesa->vtx_state.light.base_color, ctx->Light._BaseColor[0]);
-	foreach (light, &ctx->Light.EnabledList) {
-		ACC_3V(fmesa->vtx_state.light.base_color,
-		       light->_MatAmbient[0]);
-	}
-
-	fmesa->vtx_state.light.base_alpha = ctx->Light._BaseAlpha[0];
-}
-
-#define GET_CURRENT \
-	GET_CURRENT_CONTEXT(ctx);	\
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx)
-
-#define CURRENT_COLOR(COMP)		fmesa->vtx_state.current.color[COMP]
-#define CURRENT_SPECULAR(COMP)		fmesa->vtx_state.current.specular[COMP]
-#define COLOR_IS_FLOAT
-#define RECALC_BASE_COLOR(ctx)		ffb_recalc_base_color(ctx)
-
-#define TAG(x)	ffb_##x
-#include "tnl_dd/t_dd_imm_capi.h"
-
-/* Normal functions: */
-
-struct ffb_norm_tab {
-	void (*normal3f_multi)(GLfloat x, GLfloat y, GLfloat z);
-	void (*normal3fv_multi)(const GLfloat *v);
-	void (*normal3f_single)(GLfloat x, GLfloat y, GLfloat z);
-	void (*normal3fv_single)(const GLfloat *v);
-};
-
-static struct ffb_norm_tab norm_tab[0x4];
-
-#define HAVE_HW_LIGHTING 0
-#define GET_CURRENT_VERTEX			\
-	GET_CURRENT_CONTEXT(ctx);		\
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);	\
-	ffbTnlVertexPtr v = fmesa->imm.v0
-
-#define CURRENT_NORMAL		fmesa->vtx_state.current.normal
-#define BASE_COLOR		fmesa->vtx_state.light.base_color
-#define BASE_ALPHA		fmesa->vtx_state.light.base_alpha
-#define VERT_COLOR( COMP )	v->color[COMP]
-#define VERT_COLOR_IS_FLOAT
-
-#define IND (0)
-#define TAG(x)	ffb_##x
-#define PRESERVE_NORMAL_DEFS
-#include "tnl_dd/t_dd_imm_napi.h"
-
-#define IND (NORM_RESCALE)
-#define TAG(x) ffb_##x##_rescale
-#define PRESERVE_NORMAL_DEFS
-#include "tnl_dd/t_dd_imm_napi.h"
-
-#define IND (NORM_NORMALIZE)
-#define TAG(x) ffb_##x##_normalize
-#include "tnl_dd/t_dd_imm_napi.h"
-
-static void ffb_init_norm_funcs(void)
-{
-	ffb_init_norm();
-	ffb_init_norm_rescale();
-	ffb_init_norm_normalize();
-}
-
-static void choose_normals(void)
-{
-	GET_CURRENT_CONTEXT(ctx);
-	GLuint index;
-
-	if (ctx->Light.Enabled) {
-		if (ctx->Transform.Normalize) {
-			index = NORM_NORMALIZE;
-		} else if (!ctx->Transform.RescaleNormals &&
-			   ctx->_ModelViewInvScale != 1.0) {
-			index = NORM_RESCALE;
-		} else {
-			index = 0;
-		}
-
-		if (ctx->Light.EnabledList.next == ctx->Light.EnabledList.prev) {
-			SET_Normal3f(ctx->Exec, norm_tab[index].normal3f_single);
-			SET_Normal3fv(ctx->Exec, norm_tab[index].normal3fv_single);
-		} else {
-			SET_Normal3f(ctx->Exec, norm_tab[index].normal3f_multi);
-			SET_Normal3fv(ctx->Exec, norm_tab[index].normal3fv_multi);
-		}
-	} else {
-		SET_Normal3f(ctx->Exec, _mesa_noop_Normal3f);
-		SET_Normal3fv(ctx->Exec, _mesa_noop_Normal3fv);
-	}
-}
-
-static void ffb_choose_Normal3f(GLfloat x, GLfloat y, GLfloat z)
-{
-	choose_normals();
-	CALL_Normal3f(GET_DISPATCH(), (x, y, z));
-}
-
-static void ffb_choose_Normal3fv(const GLfloat *v)
-{
-	choose_normals();
-	CALL_Normal3fv(GET_DISPATCH(), (v));
-}
-
-/* Vertex functions: */
-
-#define GET_CURRENT_VERTEX			\
-	GET_CURRENT_CONTEXT(ctx);		\
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);	\
-	ffbTnlVertexPtr v = fmesa->imm.v0
-
-#define CURRENT_VERTEX		v->obj
-#define SAVE_VERTEX		fmesa->imm.save_vertex(ctx, v)
-
-#define TAG(x)	ffb_##x
-#include "tnl_dd/t_dd_imm_vapi.h"
-
-struct ffb_vert_tab {
-	void (*save_vertex)(GLcontext *ctx, ffbTnlVertexPtr v);
-	void (*interpolate_vertex)(GLfloat t,
-				   ffbTnlVertex *O,
-				   const ffbTnlVertex *I,
-				   const ffbTnlVertex *J);
-};
-
-static struct ffb_vert_tab vert_tab[0xf];
-
-#define VTX_NORMAL	0x0
-#define VTX_RGBA	0x1
-
-#define LOCAL_VARS \
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx)
-
-#define CURRENT_COLOR			fmesa->vtx_state.current.color
-#define COLOR_IS_FLOAT
-#define FLUSH_VERTEX			fmesa->imm.flush_vertex( ctx, v );
-
-#define IND	(VTX_NORMAL)
-#define TAG(x)	ffb_##x##_NORMAL
-#define PRESERVE_VERTEX_DEFS
-#include "tnl_dd/t_dd_imm_vertex.h"
-
-#define IND	(VTX_RGBA)
-#define TAG(x)	ffb_##x##_RGBA
-#include "tnl_dd/t_dd_imm_vertex.h"
-
-static void ffb_init_vert_funcs( void )
-{
-	ffb_init_vert_NORMAL();
-	ffb_init_vert_RGBA();
-}
-
-#define LOCAL_VARS							\
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx)
-
-#define GET_INTERP_FUNC							\
-	ffb_interp_func interp = fmesa->imm.interp
-
-#define FLUSH_VERTEX			fmesa->imm.flush_vertex
-#define IMM_VERTEX( V )			fmesa->imm.V
-#define IMM_VERTICES( n )		fmesa->imm.vertices[n]
-
-#define EMIT_VERTEX_USES_HWREGS
-
-/* XXX Implement me XXX */
-#define EMIT_VERTEX_TRI(VTX0, VTX1, VTX2)	\
-	do { } while (0)
-#define EMIT_VERTEX_LINE(VTX0, VTX1)		\
-	do { } while (0)
-#define EMIT_VERTEX_POINT(VTX0)			\
-	do { } while (0)
-
-#define TAG(x)	ffb_##x
-#include "tnl_dd/t_dd_imm_primtmp.h"
-
-/* Bzzt: Material changes are lost on fallback. */
-static void ffb_Materialfv(GLenum face, GLenum pname,
-			   const GLfloat *params)
-{
-	GET_CURRENT_CONTEXT(ctx);
-
-	_mesa_noop_Materialfv( face, pname, params );
-	ffb_recalc_base_color( ctx );
-}
-
-/* Fallback functions: */
-
-static void ffb_do_fallback(GLcontext *ctx)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	struct ffb_current_state *current = &fmesa->vtx_state.current;
-
-	/* Tell tnl to restore its exec vtxfmt, rehook its driver callbacks
-	 * and revive internal state that depended on those callbacks:
-	 */
-	_tnl_wakeup_exec(ctx);
-
-	/* Replay enough vertices that the current primitive is continued
-	 * correctly:
-	 */
-	if (fmesa->imm.prim != PRIM_OUTSIDE_BEGIN_END )
-		CALL_Begin(GET_DISPATCH(), (fmesa->imm.prim));
-
-	if (ctx->Light.Enabled) {
-		/* Catch ColorMaterial */
-		CALL_Color4fv(GET_DISPATCH(), (ctx->Current.Color));
-		CALL_Normal3fv(GET_DISPATCH(), (current->normal));
-	} else {
-		CALL_Color4fv(GET_DISPATCH(), (current->color));
-	}
-}
-
-#define PRE_LOOPBACK( FUNC ) do {	\
-   GET_CURRENT_CONTEXT(ctx);		\
-   ffb_do_fallback( ctx );		\
-} while (0)
-
-#define TAG(x) ffb_fallback_##x
-#include "vtxfmt_tmp.h"
-
-static void ffb_Begin(GLenum prim)
-{
-	GET_CURRENT_CONTEXT(ctx);
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-
-	if (prim > GL_POLYGON) {
-		_mesa_error( ctx, GL_INVALID_ENUM, "glBegin" );
-		return;
-	}
-
-	if (fmesa->imm.prim != PRIM_OUTSIDE_BEGIN_END) {
-		_mesa_error( ctx, GL_INVALID_OPERATION, "glBegin" );
-		return;
-	}
-
-	ctx->Driver.NeedFlush |= (FLUSH_STORED_VERTICES |
-				  FLUSH_UPDATE_CURRENT);
-
-	fmesa->imm.prim = prim;
-	fmesa->imm.v0 = &fmesa->imm.vertices[0];
-	fmesa->imm.save_vertex = ffb_save_vertex_RGBA;
-	fmesa->imm.flush_vertex = ffb_flush_tab[prim];
-
-	/* XXX Lock hardware, update FBC, PPC, DRAWOP, etc. XXX */
-}
-
-static void ffb_End(void)
-{
-	GET_CURRENT_CONTEXT(ctx);
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-
-	if (fmesa->imm.prim == PRIM_OUTSIDE_BEGIN_END) {
-		_mesa_error( ctx, GL_INVALID_OPERATION, "glEnd" );
-		return;
-	}
-
-	fmesa->imm.prim = PRIM_OUTSIDE_BEGIN_END;
-
-	ctx->Driver.NeedFlush &= ~(FLUSH_STORED_VERTICES |
-				   FLUSH_UPDATE_CURRENT);
-
-	/* XXX Unlock hardware, etc. */
-}
-
-void ffbInitTnlModule(GLcontext *ctx)
-{
-	ffbContextPtr fmesa = FFB_CONTEXT(ctx);
-	GLvertexformat *vfmt = &(fmesa->imm.vtxfmt);
-
-	/* Work in progress... */
-	return;
-
-	ffb_init_norm_funcs();
-	ffb_init_vert_funcs();
-
-	/* start by initializing to no-op functions */
-	_mesa_noop_vtxfmt_init(vfmt);
-
-	/* Handled fully in supported states: */
-	vfmt->ArrayElement		= NULL;		/* FIXME: ... */
-	vfmt->Color3f			= ffb_choose_Color3f;
-	vfmt->Color3fv			= ffb_choose_Color3fv;
-	vfmt->Color3ub			= ffb_choose_Color3ub;
-	vfmt->Color3ubv			= ffb_choose_Color3ubv;
-	vfmt->Color4f			= ffb_choose_Color4f;
-	vfmt->Color4fv			= ffb_choose_Color4fv;
-	vfmt->Color4ub			= ffb_choose_Color4ub;
-	vfmt->Color4ubv			= ffb_choose_Color4ubv;
-	vfmt->FogCoordfvEXT		= ffb_FogCoordfvEXT;
-	vfmt->FogCoordfEXT		= ffb_FogCoordfEXT;
-	vfmt->Materialfv		= ffb_Materialfv;
-	vfmt->MultiTexCoord1fARB	= ffb_fallback_MultiTexCoord1fARB;
-	vfmt->MultiTexCoord1fvARB	= ffb_fallback_MultiTexCoord1fvARB;
-	vfmt->MultiTexCoord2fARB	= ffb_fallback_MultiTexCoord2fARB;
-	vfmt->MultiTexCoord2fvARB	= ffb_fallback_MultiTexCoord2fvARB;
-	vfmt->MultiTexCoord3fARB	= ffb_fallback_MultiTexCoord3fARB;
-	vfmt->MultiTexCoord3fvARB	= ffb_fallback_MultiTexCoord3fvARB;
-	vfmt->MultiTexCoord4fARB	= ffb_fallback_MultiTexCoord4fARB;
-	vfmt->MultiTexCoord4fvARB	= ffb_fallback_MultiTexCoord4fvARB;
-	vfmt->Normal3f			= ffb_choose_Normal3f;
-	vfmt->Normal3fv			= ffb_choose_Normal3fv;
-	vfmt->SecondaryColor3ubEXT	= ffb_SecondaryColor3ubEXT;
-	vfmt->SecondaryColor3ubvEXT	= ffb_SecondaryColor3ubvEXT;
-	vfmt->SecondaryColor3fEXT	= ffb_SecondaryColor3fEXT;
-	vfmt->SecondaryColor3fvEXT	= ffb_SecondaryColor3fvEXT;
-	vfmt->TexCoord1f		= ffb_fallback_TexCoord1f;
-	vfmt->TexCoord1fv		= ffb_fallback_TexCoord1fv;
-	vfmt->TexCoord2f		= ffb_fallback_TexCoord2f;
-	vfmt->TexCoord2fv		= ffb_fallback_TexCoord2fv;
-	vfmt->TexCoord3f		= ffb_fallback_TexCoord3f;
-	vfmt->TexCoord3fv		= ffb_fallback_TexCoord3fv;
-	vfmt->TexCoord4f		= ffb_fallback_TexCoord4f;
-	vfmt->TexCoord4fv		= ffb_fallback_TexCoord4fv;
-
-	vfmt->Vertex2f			= ffb_Vertex2f;
-	vfmt->Vertex2fv			= ffb_Vertex2fv;
-	vfmt->Vertex3f			= ffb_Vertex3f;
-	vfmt->Vertex3fv			= ffb_Vertex3fv;
-	vfmt->Vertex4f			= ffb_Vertex4f;
-	vfmt->Vertex4fv			= ffb_Vertex4fv;
-
-	vfmt->Begin			= ffb_Begin;
-	vfmt->End			= ffb_End;
-
-	vfmt->DrawArrays = NULL;
-	vfmt->DrawElements = NULL;
-
-	/* Active but unsupported -- fallback if we receive these:
-	 *
-	 * All of these fallbacks can be fixed with additional code, except
-	 * CallList, unless we build a play_immediate_noop() command which
-	 * turns an immediate back into glBegin/glEnd commands...
-	 */
-	vfmt->CallList = ffb_fallback_CallList;
-	vfmt->EvalCoord1f = ffb_fallback_EvalCoord1f;
-	vfmt->EvalCoord1fv = ffb_fallback_EvalCoord1fv;
-	vfmt->EvalCoord2f = ffb_fallback_EvalCoord2f;
-	vfmt->EvalCoord2fv = ffb_fallback_EvalCoord2fv;
-	vfmt->EvalMesh1 = ffb_fallback_EvalMesh1;
-	vfmt->EvalMesh2 = ffb_fallback_EvalMesh2;
-	vfmt->EvalPoint1 = ffb_fallback_EvalPoint1;
-	vfmt->EvalPoint2 = ffb_fallback_EvalPoint2;
-
-	vfmt->prefer_float_colors = GL_TRUE;
-
-	fmesa->imm.prim = PRIM_OUTSIDE_BEGIN_END;
-
-	/* THIS IS A HACK! */
-	_mesa_install_exec_vtxfmt( ctx, vfmt );
-}
diff --git a/src/mesa/drivers/dri/ffb/ffb_vtxfmt.h b/src/mesa/drivers/dri/ffb/ffb_vtxfmt.h
deleted file mode 100644
index 4d9125cd15..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_vtxfmt.h
+++ /dev/null
@@ -1,7 +0,0 @@
-
-#ifndef _FFB_VTXFMT_H
-#define _FFB_VTXFMT_H
-
-extern void ffbInitTnlModule(GLcontext *);
-
-#endif /* !(_FFB_VTXFMT_H) */
diff --git a/src/mesa/drivers/dri/ffb/ffb_xmesa.c b/src/mesa/drivers/dri/ffb/ffb_xmesa.c
deleted file mode 100644
index bd1044a2bf..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_xmesa.c
+++ /dev/null
@@ -1,729 +0,0 @@
-/* 
- *
- * GLX Hardware Device Driver for Sun Creator/Creator3D
- * Copyright (C) 2000, 2001 David S. Miller
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * DAVID MILLER, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM, 
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
- * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- *
- *    David S. Miller <davem@redhat.com>
- */
-
-#include "ffb_xmesa.h"
-#include "main/context.h"
-#include "main/framebuffer.h"
-#include "main/renderbuffer.h"
-#include "main/simple_list.h"
-#include "main/imports.h"
-#include "utils.h"
-
-#include "swrast/swrast.h"
-#include "swrast_setup/swrast_setup.h"
-#include "tnl/tnl.h"
-#include "tnl/t_pipeline.h"
-#include "vbo/vbo.h"
-#include "drivers/common/driverfuncs.h"
-
-#include "ffb_context.h"
-#include "ffb_dd.h"
-#include "ffb_span.h"
-#include "ffb_depth.h"
-#include "ffb_stencil.h"
-#include "ffb_clear.h"
-#include "ffb_vb.h"
-#include "ffb_tris.h"
-#include "ffb_lines.h"
-#include "ffb_points.h"
-#include "ffb_state.h"
-#include "ffb_lock.h"
-#include "ffb_vtxfmt.h"
-#include "ffb_bitmap.h"
-
-#include "drm_sarea.h"
-
-#include "drirenderbuffer.h"
-
-static GLboolean
-ffbInitDriver(__DRIscreen *sPriv)
-{
-	ffbScreenPrivate *ffbScreen;
-	FFBDRIPtr gDRIPriv = (FFBDRIPtr) sPriv->pDevPriv;
-	drmAddress map;
-
-	if (getenv("LIBGL_FORCE_XSERVER"))
-		return GL_FALSE;
-
-
-   	if (sPriv->devPrivSize != sizeof(FFBDRIRec)) {
-      		fprintf(stderr,"\nERROR!  sizeof(FFBDRIRec) does not match passed size from device driver\n");
-      		return GL_FALSE;
-   	}
-
-	/* Allocate the private area. */
-	ffbScreen = (ffbScreenPrivate *) MALLOC(sizeof(ffbScreenPrivate));
-	if (!ffbScreen)
-		return GL_FALSE;
-
-	/* Map FBC registers. */
-	if (drmMap(sPriv->fd,
-		   gDRIPriv->hFbcRegs,
-		   gDRIPriv->sFbcRegs,
-		   &map)) {
-	        FREE(ffbScreen);
-		return GL_FALSE;
-	}
-	ffbScreen->regs = (ffb_fbcPtr) map;
-
-	/* Map ramdac registers. */
-	if (drmMap(sPriv->fd,
-		   gDRIPriv->hDacRegs,
-		   gDRIPriv->sDacRegs,
-		   &map)) {
-		drmUnmap((drmAddress)ffbScreen->regs, gDRIPriv->sFbcRegs);
-		FREE(ffbScreen);
-		return GL_FALSE;
-	}
-	ffbScreen->dac = (ffb_dacPtr) map;
-
-	/* Map "Smart" framebuffer views. */
-	if (drmMap(sPriv->fd,
-		   gDRIPriv->hSfb8r,
-		   gDRIPriv->sSfb8r,
-		   &map)) {
-		drmUnmap((drmAddress)ffbScreen->regs, gDRIPriv->sFbcRegs);
-		drmUnmap((drmAddress)ffbScreen->dac, gDRIPriv->sDacRegs);
-		FREE(ffbScreen);
-		return GL_FALSE;
-	}
-	ffbScreen->sfb8r = (volatile char *) map;
-
-	if (drmMap(sPriv->fd,
-		   gDRIPriv->hSfb32,
-		   gDRIPriv->sSfb32,
-		   &map)) {
-		drmUnmap((drmAddress)ffbScreen->regs, gDRIPriv->sFbcRegs);
-		drmUnmap((drmAddress)ffbScreen->dac, gDRIPriv->sDacRegs);
-		drmUnmap((drmAddress)ffbScreen->sfb8r, gDRIPriv->sSfb8r);
-		FREE(ffbScreen);
-		return GL_FALSE;
-	}
-	ffbScreen->sfb32 = (volatile char *) map;
-
-	if (drmMap(sPriv->fd,
-		   gDRIPriv->hSfb64,
-		   gDRIPriv->sSfb64,
-		   &map)) {
-		drmUnmap((drmAddress)ffbScreen->regs, gDRIPriv->sFbcRegs);
-		drmUnmap((drmAddress)ffbScreen->dac, gDRIPriv->sDacRegs);
-		drmUnmap((drmAddress)ffbScreen->sfb8r, gDRIPriv->sSfb8r);
-		drmUnmap((drmAddress)ffbScreen->sfb32, gDRIPriv->sSfb32);
-		FREE(ffbScreen);
-		return GL_FALSE;
-	}
-	ffbScreen->sfb64 = (volatile char *) map;
-
-	ffbScreen->fifo_cache = 0;
-	ffbScreen->rp_active = 0;
-
-	ffbScreen->sPriv = sPriv;
-	sPriv->private = (void *) ffbScreen;
-
-	ffbDDLinefuncInit();
-	ffbDDPointfuncInit();
-
-	return GL_TRUE;
-}
-
-
-static void
-ffbDestroyScreen(__DRIscreen *sPriv)
-{
-	ffbScreenPrivate *ffbScreen = sPriv->private;
-	FFBDRIPtr gDRIPriv = (FFBDRIPtr) sPriv->pDevPriv;
-
-	drmUnmap((drmAddress)ffbScreen->regs, gDRIPriv->sFbcRegs);
-	drmUnmap((drmAddress)ffbScreen->dac, gDRIPriv->sDacRegs);
-	drmUnmap((drmAddress)ffbScreen->sfb8r, gDRIPriv->sSfb8r);
-	drmUnmap((drmAddress)ffbScreen->sfb32, gDRIPriv->sSfb32);
-	drmUnmap((drmAddress)ffbScreen->sfb64, gDRIPriv->sSfb64);
-
-	FREE(ffbScreen);
-}
-
-static const struct tnl_pipeline_stage *ffb_pipeline[] = {
-   &_tnl_vertex_transform_stage, 
-   &_tnl_normal_transform_stage, 
-   &_tnl_lighting_stage,
-				/* REMOVE: fog coord stage */
-   &_tnl_texgen_stage, 
-   &_tnl_texture_transform_stage, 
-				/* REMOVE: point attenuation stage */
-   &_tnl_render_stage,		
-   0,
-};
-
-/* Create and initialize the Mesa and driver specific context data */
-static GLboolean
-ffbCreateContext(const __GLcontextModes *mesaVis,
-                 __DRIcontext *driContextPriv,
-                 void *sharedContextPrivate)
-{
-	ffbContextPtr fmesa;
-	GLcontext *ctx, *shareCtx;
-	__DRIscreen *sPriv;
-	ffbScreenPrivate *ffbScreen;
-	char *debug;
-	struct dd_function_table functions;
-
-        /* Allocate ffb context */
-	fmesa = (ffbContextPtr) CALLOC(sizeof(ffbContextRec));
-	if (!fmesa)
-		return GL_FALSE;
-
-	_mesa_init_driver_functions(&functions);
-
-        /* Allocate Mesa context */
-        if (sharedContextPrivate)
-           shareCtx = ((ffbContextPtr) sharedContextPrivate)->glCtx;
-        else 
-           shareCtx = NULL;
-        fmesa->glCtx = _mesa_create_context(mesaVis, shareCtx,
-                                            &functions, fmesa);
-        if (!fmesa->glCtx) {
-           FREE(fmesa);
-           return GL_FALSE;
-        }
-        driContextPriv->driverPrivate = fmesa;
-        ctx = fmesa->glCtx;
-
-	sPriv = driContextPriv->driScreenPriv;
-	ffbScreen = (ffbScreenPrivate *) sPriv->private;
-
-	/* Dri stuff. */
-	fmesa->hHWContext = driContextPriv->hHWContext;
-	fmesa->driFd = sPriv->fd;
-	fmesa->driHwLock = &sPriv->pSAREA->lock;
-
-	fmesa->ffbScreen = ffbScreen;
-	fmesa->driScreen = sPriv;
-	fmesa->ffb_sarea = FFB_DRISHARE(sPriv->pSAREA);
-
-	/* Register and framebuffer pointers. */
-	fmesa->regs = ffbScreen->regs;
-	fmesa->sfb32 = ffbScreen->sfb32;
-
-	ffbDDInitContextHwState(ctx);
-
-	/* Default clear and depth colors. */
-	{
-		GLubyte r = (GLint) (ctx->Color.ClearColor[0] * 255.0F);
-		GLubyte g = (GLint) (ctx->Color.ClearColor[1] * 255.0F);
-		GLubyte b = (GLint) (ctx->Color.ClearColor[2] * 255.0F);
-
-		fmesa->clear_pixel = ((r << 0) |
-				      (g << 8) |
-				      (b << 16));
-	}
-	fmesa->clear_depth = Z_FROM_MESA(ctx->Depth.Clear * 4294967295.0f);
-	fmesa->clear_stencil = ctx->Stencil.Clear & 0xf;
-
-	/* No wide points. */
-	ctx->Const.MinPointSize = 1.0;
-	ctx->Const.MinPointSizeAA = 1.0;
-	ctx->Const.MaxPointSize = 1.0;
-	ctx->Const.MaxPointSizeAA = 1.0;
-
-	/* Disable wide lines as we can't antialias them correctly in
-	 * hardware.
-	 */
-	ctx->Const.MinLineWidth = 1.0;
-	ctx->Const.MinLineWidthAA = 1.0;
-	ctx->Const.MaxLineWidth = 1.0;
-	ctx->Const.MaxLineWidthAA = 1.0;
-	ctx->Const.LineWidthGranularity = 1.0;
-
-	ctx->Const.MaxDrawBuffers = 1;
-
-	/* Instead of having GCC emit these constants a zillion times
-	 * everywhere in the driver, put them here.
-	 */
-	fmesa->ffb_2_30_fixed_scale           = __FFB_2_30_FIXED_SCALE;
-	fmesa->ffb_one_over_2_30_fixed_scale  = (1.0 / __FFB_2_30_FIXED_SCALE);
-	fmesa->ffb_16_16_fixed_scale          = __FFB_16_16_FIXED_SCALE;
-	fmesa->ffb_one_over_16_16_fixed_scale = (1.0 / __FFB_16_16_FIXED_SCALE);
-	fmesa->ffb_ubyte_color_scale          = 255.0f;
-	fmesa->ffb_zero			      = 0.0f;
-
-	fmesa->debugFallbacks = GL_FALSE;
-	debug = getenv("LIBGL_DEBUG");
-	if (debug && strstr(debug, "fallbacks"))
-		fmesa->debugFallbacks = GL_TRUE;
-
-	/* Initialize the software rasterizer and helper modules. */
-	_swrast_CreateContext( ctx );
-	_vbo_CreateContext( ctx );
-	_tnl_CreateContext( ctx );
-	_swsetup_CreateContext( ctx );
-
-	/* All of this need only be done once for a new context. */
-	/* XXX these should be moved right after the
-	 *  _mesa_init_driver_functions() call above.
-	 */
-	ffbDDExtensionsInit(ctx);
-	ffbDDInitDriverFuncs(ctx);
-	ffbDDInitStateFuncs(ctx);
-	ffbDDInitRenderFuncs(ctx);
-	/*ffbDDInitTexFuncs(ctx); not needed */
-	ffbDDInitBitmapFuncs(ctx);
-	ffbInitVB(ctx);
-
-#if 0
-	ffbInitTnlModule(ctx);
-#endif
-
-	_tnl_destroy_pipeline(ctx);
-	_tnl_install_pipeline(ctx, ffb_pipeline);
-
-	return GL_TRUE;
-}
-
-static void
-ffbDestroyContext(__DRIcontext *driContextPriv)
-{
-	ffbContextPtr fmesa = (ffbContextPtr) driContextPriv->driverPrivate;
-
-	if (fmesa) {
-		ffbFreeVB(fmesa->glCtx);
-
-		_swsetup_DestroyContext( fmesa->glCtx );
-		_tnl_DestroyContext( fmesa->glCtx );
-		_vbo_DestroyContext( fmesa->glCtx );
-		_swrast_DestroyContext( fmesa->glCtx );
-
-                /* free the Mesa context */
-                fmesa->glCtx->DriverCtx = NULL;
-                _mesa_destroy_context(fmesa->glCtx);
-
-		FREE(fmesa);
-	}
-}
-
-/* Create and initialize the Mesa and driver specific pixmap buffer data */
-static GLboolean
-ffbCreateBuffer(__DRIscreen *driScrnPriv,
-                __DRIdrawable *driDrawPriv,
-                const __GLcontextModes *mesaVis,
-                GLboolean isPixmap )
-{
-   /* Mesa checks for pitch > 0, but ffb doesn't use pitches */
-   int bogusPitch = 1;
-   int bpp = 4; /* we've always got a 32bpp framebuffer */
-   int offset = 0; /* always at 0 for offset */
-
-   if (isPixmap) {
-      return GL_FALSE; /* not implemented */
-   } else {
-      GLboolean swStencil = (mesaVis->stencilBits > 0 && 
-			     mesaVis->depthBits != 24);
-      struct gl_framebuffer *fb = _mesa_create_framebuffer(mesaVis);
-
-      {
-         driRenderbuffer *frontRb
-            = driNewRenderbuffer(MESA_FORMAT_ARGB8888, NULL, bpp, offset, bogusPitch,
-                                 driDrawPriv);
-         ffbSetSpanFunctions(frontRb, mesaVis);
-         _mesa_add_renderbuffer(fb, BUFFER_FRONT_LEFT, &frontRb->Base);
-      }
-
-      if (mesaVis->doubleBufferMode) {
-         driRenderbuffer *backRb
-            = driNewRenderbuffer(MESA_FORMAT_ARGB8888, NULL, bpp, offset, bogusPitch,
-                                 driDrawPriv);
-         ffbSetSpanFunctions(backRb, mesaVis);
-         _mesa_add_renderbuffer(fb, BUFFER_BACK_LEFT, &backRb->Base);
-      }
-
-      if (mesaVis->depthBits == 16) {
-         driRenderbuffer *depthRb
-            = driNewRenderbuffer(MESA_FORMAT_Z16, NULL, bpp, offset,
-                                 bogusPitch, driDrawPriv);
-         ffbSetDepthFunctions(depthRb, mesaVis);
-         _mesa_add_renderbuffer(fb, BUFFER_DEPTH, &depthRb->Base);
-      }
-
-      if (mesaVis->stencilBits > 0 && !swStencil) {
-         driRenderbuffer *stencilRb
-            = driNewRenderbuffer(MESA_FORMAT_S8, NULL, bpp, offset,
-                                 bogusPitch, driDrawPriv);
-         ffbSetStencilFunctions(stencilRb, mesaVis);
-         _mesa_add_renderbuffer(fb, BUFFER_STENCIL, &stencilRb->Base);
-      }
-
-      _mesa_add_soft_renderbuffers(fb,
-                                   GL_FALSE, /* color */
-                                   GL_FALSE, /* depth */
-                                   swStencil,
-                                   mesaVis->accumRedBits > 0,
-                                   GL_FALSE, /* alpha */
-                                   GL_FALSE /* aux */);
-      driDrawPriv->driverPrivate = (void *) fb;
-
-      return (driDrawPriv->driverPrivate != NULL);
-   }
-}
-
-
-static void
-ffbDestroyBuffer(__DRIdrawable *driDrawPriv)
-{
-   _mesa_reference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate)), NULL);
-}
-
-
-#define USE_FAST_SWAP
-
-static void
-ffbSwapBuffers( __DRIdrawable *dPriv )
-{
-	ffbContextPtr fmesa = (ffbContextPtr) dPriv->driContextPriv->driverPrivate;
-	unsigned int fbc, wid, wid_reg_val, dac_db_bit;
-	unsigned int shadow_dac_addr, active_dac_addr;
-	ffb_fbcPtr ffb;
-	ffb_dacPtr dac;
-
-	if (fmesa == NULL ||
-	    fmesa->glCtx->Visual.doubleBufferMode == 0)
-		return;
-
-	/* Flush pending rendering commands */
-	_mesa_notifySwapBuffers(fmesa->glCtx);
-
-	ffb = fmesa->regs;
-	dac = fmesa->ffbScreen->dac;
-
-	fbc = fmesa->fbc;
-	wid = fmesa->wid;
-
-	/* Swap the buffer we render into and read pixels from. */
-	fmesa->back_buffer ^= 1;
-
-	/* If we are writing into both buffers, don't mess with
-	 * the WB setting.
-	 */
-	if ((fbc & FFB_FBC_WB_AB) != FFB_FBC_WB_AB) {
-		if ((fbc & FFB_FBC_WB_A) != 0)
-			fbc = (fbc & ~FFB_FBC_WB_A) | FFB_FBC_WB_B;
-		else
-			fbc = (fbc & ~FFB_FBC_WB_B) | FFB_FBC_WB_A;
-	}
-
-	/* But either way, we must flip the read buffer setting. */
-	if ((fbc & FFB_FBC_RB_A) != 0)
-		fbc = (fbc & ~FFB_FBC_RB_A) | FFB_FBC_RB_B;
-	else
-		fbc = (fbc & ~FFB_FBC_RB_B) | FFB_FBC_RB_A;
-
-	LOCK_HARDWARE(fmesa);
-
-	if (fmesa->fbc != fbc) {
-		FFBFifo(fmesa, 1);
-		ffb->fbc = fmesa->fbc = fbc;
-		fmesa->ffbScreen->rp_active = 1;
-	}
-
-	/* And swap the buffer displayed in the WID. */
-	if (fmesa->ffb_sarea->flags & FFB_DRI_PAC1) {
-		shadow_dac_addr = FFBDAC_PAC1_SPWLUT(wid);
-		active_dac_addr = FFBDAC_PAC1_APWLUT(wid);
-		dac_db_bit = FFBDAC_PAC1_WLUT_DB;
-	} else {
-		shadow_dac_addr = FFBDAC_PAC2_SPWLUT(wid);
-		active_dac_addr = FFBDAC_PAC2_APWLUT(wid);
-		dac_db_bit = FFBDAC_PAC2_WLUT_DB;
-	}
-
-	FFBWait(fmesa, ffb);
-
-	wid_reg_val = DACCFG_READ(dac, active_dac_addr);
-	if (fmesa->back_buffer == 0)
-		wid_reg_val |=  dac_db_bit;
-	else
-		wid_reg_val &= ~dac_db_bit;
-#ifdef USE_FAST_SWAP
-	DACCFG_WRITE(dac, active_dac_addr, wid_reg_val);
-#else
-	DACCFG_WRITE(dac, shadow_dac_addr, wid_reg_val);
-
-	/* Schedule the window transfer. */
-	DACCFG_WRITE(dac, FFBDAC_CFG_WTCTRL, 
-		     (FFBDAC_CFG_WTCTRL_TCMD | FFBDAC_CFG_WTCTRL_TE));
-
-	{
-		int limit = 1000000;
-		while (limit--) {
-			unsigned int wtctrl = DACCFG_READ(dac, FFBDAC_CFG_WTCTRL);
-
-			if ((wtctrl & FFBDAC_CFG_WTCTRL_DS) == 0)
-				break;
-		}
-	}
-#endif
-
-	UNLOCK_HARDWARE(fmesa);
-}
-
-static void ffb_init_wid(ffbContextPtr fmesa, unsigned int wid)
-{
-	ffb_dacPtr dac = fmesa->ffbScreen->dac;
-	unsigned int wid_reg_val, dac_db_bit, active_dac_addr;
-	unsigned int shadow_dac_addr;
-
-	if (fmesa->ffb_sarea->flags & FFB_DRI_PAC1) {
-		shadow_dac_addr = FFBDAC_PAC1_SPWLUT(wid);
-		active_dac_addr = FFBDAC_PAC1_APWLUT(wid);
-		dac_db_bit = FFBDAC_PAC1_WLUT_DB;
-	} else {
-		shadow_dac_addr = FFBDAC_PAC2_SPWLUT(wid);
-		active_dac_addr = FFBDAC_PAC2_APWLUT(wid);
-		dac_db_bit = FFBDAC_PAC2_WLUT_DB;
-	}
-
-	wid_reg_val = DACCFG_READ(dac, active_dac_addr);
-	wid_reg_val &= ~dac_db_bit;
-#ifdef USE_FAST_SWAP
-	DACCFG_WRITE(dac, active_dac_addr, wid_reg_val);
-#else
-	DACCFG_WRITE(dac, shadow_dac_addr, wid_reg_val);
-
-	/* Schedule the window transfer. */
-	DACCFG_WRITE(dac, FFBDAC_CFG_WTCTRL, 
-		     (FFBDAC_CFG_WTCTRL_TCMD | FFBDAC_CFG_WTCTRL_TE));
-
-	{
-		int limit = 1000000;
-		while (limit--) {
-			unsigned int wtctrl = DACCFG_READ(dac, FFBDAC_CFG_WTCTRL);
-
-			if ((wtctrl & FFBDAC_CFG_WTCTRL_DS) == 0)
-				break;
-		}
-	}
-#endif
-}
-
-/* Force the context `c' to be the current context and associate with it
-   buffer `b' */
-static GLboolean
-ffbMakeCurrent(__DRIcontext *driContextPriv,
-               __DRIdrawable *driDrawPriv,
-               __DRIdrawable *driReadPriv)
-{
-	if (driContextPriv) {
-		ffbContextPtr fmesa = (ffbContextPtr) driContextPriv->driverPrivate;
-		int first_time;
-
-		fmesa->driDrawable = driDrawPriv;
-
-		_mesa_make_current(fmesa->glCtx, 
-			    (GLframebuffer *) driDrawPriv->driverPrivate, 
-			    (GLframebuffer *) driReadPriv->driverPrivate);
-
-		first_time = 0;
-		if (fmesa->wid == ~0) {
-			first_time = 1;
-			if (getenv("LIBGL_SOFTWARE_RENDERING"))
-				FALLBACK( fmesa->glCtx, FFB_BADATTR_SWONLY, GL_TRUE );
-		}
-
-		LOCK_HARDWARE(fmesa);
-		if (first_time) {
-			fmesa->wid = fmesa->ffb_sarea->wid_table[driDrawPriv->index];
-			ffb_init_wid(fmesa, fmesa->wid);
-		}
-
-		fmesa->state_dirty |= FFB_STATE_ALL;
-		fmesa->state_fifo_ents = fmesa->state_all_fifo_ents;
-		ffbSyncHardware(fmesa);
-		UNLOCK_HARDWARE(fmesa);
-
-		if (first_time) {
-			/* Also, at the first switch to a new context,
-			 * we need to clear all the hw buffers.
-			 */
-			ffbDDClear(fmesa->glCtx,
-				   (BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_BACK_LEFT |
-				    BUFFER_BIT_DEPTH | BUFFER_BIT_STENCIL));
-		}
-	} else {
-		_mesa_make_current(NULL, NULL, NULL);
-	}
-
-	return GL_TRUE;
-}
-
-/* Force the context `c' to be unbound from its buffer */
-static GLboolean
-ffbUnbindContext(__DRIcontext *driContextPriv)
-{
-	return GL_TRUE;
-}
-
-void ffbXMesaUpdateState(ffbContextPtr fmesa)
-{
-	__DRIdrawable *dPriv = fmesa->driDrawable;
-	__DRIscreen *sPriv = fmesa->driScreen;
-	int stamp = dPriv->lastStamp;
-
-	DRI_VALIDATE_DRAWABLE_INFO(sPriv, dPriv);
-
-	if (dPriv->lastStamp != stamp) {
-		GLcontext *ctx = fmesa->glCtx;
-
-		ffbCalcViewport(ctx);
-		driUpdateFramebufferSize(ctx, dPriv);
-		if (ctx->Polygon.StippleFlag) {
-			ffbXformAreaPattern(fmesa,
-					    (const GLubyte *)ctx->PolygonStipple);
-		}
-	}
-}
-
-static const __DRIconfig **
-ffbFillInModes( __DRIscreen *psp,
-		unsigned pixel_bits, unsigned depth_bits,
-		unsigned stencil_bits, GLboolean have_back_buffer )
-{
-   __DRIconfig **configs;
-   __GLcontextModes *m;
-   unsigned depth_buffer_factor;
-   unsigned back_buffer_factor;
-   GLenum fb_format;
-   GLenum fb_type;
-   int i;
-
-   /* GLX_SWAP_COPY_OML is only supported because the FFB driver doesn't
-    * support pageflipping at all.
-    */
-   static const GLenum back_buffer_modes[] = {
-      GLX_NONE, GLX_SWAP_UNDEFINED_OML, GLX_SWAP_COPY_OML
-   };
-
-   uint8_t depth_bits_array[3];
-   uint8_t stencil_bits_array[3];
-   uint8_t msaa_samples_array[1];
-
-   depth_bits_array[0] = 0;
-   depth_bits_array[1] = depth_bits;
-   depth_bits_array[2] = depth_bits;
-
-   /* Just like with the accumulation buffer, always provide some modes
-    * with a stencil buffer.  It will be a sw fallback, but some apps won't
-    * care about that.
-    */
-   stencil_bits_array[0] = 0;
-   stencil_bits_array[1] = 0;
-   stencil_bits_array[2] = (stencil_bits == 0) ? 8 : stencil_bits;
-
-   msaa_samples_array[0] = 0;
-
-   depth_buffer_factor = ((depth_bits != 0) || (stencil_bits != 0)) ? 3 : 1;
-   back_buffer_factor  = (have_back_buffer) ? 3 : 1;
-
-    if ( pixel_bits == 16 ) {
-        fb_format = GL_RGB;
-        fb_type = GL_UNSIGNED_SHORT_5_6_5;
-    }
-    else {
-        fb_format = GL_BGRA;
-        fb_type = GL_UNSIGNED_INT_8_8_8_8_REV;
-    }
-
-   configs = driCreateConfigs(fb_format, fb_type,
-			      depth_bits_array, stencil_bits_array,
-			      depth_buffer_factor, back_buffer_modes,
-			      back_buffer_factor,
-			      msaa_samples_array, 1, GL_TRUE);
-   if (configs == NULL) {
-      fprintf(stderr, "[%s:%u] Error creating FBConfig!\n", __func__,
-              __LINE__);
-      return NULL;
-   }
-
-   /* Mark the visual as slow if there are "fake" stencil bits.
-    */
-   for (i = 0; configs[i]; i++) {
-      m = &configs[i]->modes;
-      if ((m->stencilBits != 0) && (m->stencilBits != stencil_bits)) {
-         m->visualRating = GLX_SLOW_CONFIG;
-      }
-   }
-
-   return (const __DRIconfig **) configs;
-}
-
-
-/**
- * This is the driver specific part of the createNewScreen entry point.
- * 
- * \todo maybe fold this into intelInitDriver
- *
- * \return the __GLcontextModes supported by this driver
- */
-static const __DRIconfig **
-ffbInitScreen(__DRIscreen *psp)
-{
-   static const __DRIversion ddx_expected = { 0, 1, 1 };
-   static const __DRIversion dri_expected = { 4, 0, 0 };
-   static const __DRIversion drm_expected = { 0, 0, 1 };
-
-   if ( ! driCheckDriDdxDrmVersions2( "ffb",
-				      &psp->dri_version, & dri_expected,
-				      &psp->ddx_version, & ddx_expected,
-				      &psp->drm_version, & drm_expected ) )
-      return NULL;
-
-   if (!ffbInitDriver(psp))
-       return NULL;
-
-   return ffbFillInModes( psp, 32, 16, 0, GL_TRUE );
-}
-
-const struct __DriverAPIRec driDriverAPI = {
-   .InitScreen      = ffbInitScreen,
-   .DestroyScreen   = ffbDestroyScreen,
-   .CreateContext   = ffbCreateContext,
-   .DestroyContext  = ffbDestroyContext,
-   .CreateBuffer    = ffbCreateBuffer,
-   .DestroyBuffer   = ffbDestroyBuffer,
-   .SwapBuffers     = ffbSwapBuffers,
-   .MakeCurrent     = ffbMakeCurrent,
-   .UnbindContext   = ffbUnbindContext,
-   .GetSwapInfo     = NULL,
-   .GetDrawableMSC  = NULL,
-   .WaitForMSC      = NULL,
-   .WaitForSBC      = NULL,
-   .SwapBuffersMSC  = NULL
-};
-
-/* This is the table of extensions that the loader will dlsym() for. */
-PUBLIC const __DRIextension *__driDriverExtensions[] = {
-    &driCoreExtension.base,
-    &driLegacyExtension.base,
-    NULL
-};
diff --git a/src/mesa/drivers/dri/ffb/ffb_xmesa.h b/src/mesa/drivers/dri/ffb/ffb_xmesa.h
deleted file mode 100644
index 2b1740d221..0000000000
--- a/src/mesa/drivers/dri/ffb/ffb_xmesa.h
+++ /dev/null
@@ -1,25 +0,0 @@
-
-#ifndef _FFB_XMESA_H_
-#define _FFB_XMESA_H_
-
-#include <sys/time.h>
-#include "dri_util.h"
-#include "main/mtypes.h"
-#include "ffb_drishare.h"
-#include "ffb_regs.h"
-#include "ffb_dac.h"
-#include "ffb_fifo.h"
-
-typedef struct {
-	__DRIscreen		*sPriv;
-	ffb_fbcPtr			regs;
-	ffb_dacPtr			dac;
-	volatile char			*sfb8r;
-	volatile char			*sfb32;
-	volatile char			*sfb64;
-
-	int				fifo_cache;
-	int				rp_active;
-} ffbScreenPrivate;
-
-#endif /* !(_FFB_XMESA_H) */
diff --git a/src/mesa/drivers/dri/ffb/server/ffb_dac.h b/src/mesa/drivers/dri/ffb/server/ffb_dac.h
deleted file mode 100644
index ac4a75b459..0000000000
--- a/src/mesa/drivers/dri/ffb/server/ffb_dac.h
+++ /dev/null
@@ -1,366 +0,0 @@
-/*
- * Acceleration for the Creator and Creator3D framebuffer - DAC register layout.
- *
- * Copyright (C) 2000 David S. Miller (davem@redhat.com)
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * DAVID MILLER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- */
-
-#ifndef _FFB_DAC_H
-#define _FFB_DAC_H
-
-#define Bool int
-
-/* FFB utilizes two different ramdac chips:
- *
- *	1) BT9068 "Pacifica1", used in all FFB1 and
- *	   FFB2 boards.
- *
- *	2) BT498(a) "Pacifica2", used in FFB2+ and
- *	   AFB boards.
- *
- * They are mostly equivalent, except in a few key areas:
- *
- *	1) WID register layout
- *	2) Number of CLUT tables
- *	3) Presence of Window Address Mask register
- *	4) Method of GAMMA correction support
- */
-
-/* NOTE: All addresses described in this file are DAC
- *       indirect addresses.
- */
-
-/* DAC color values are in the following format. */
-#define FFBDAC_COLOR_BLUE	0x00ff0000
-#define FFBDAC_COLOR_BLUE_SHFT	16
-#define FFBDAC_COLOR_GREEN	0x0000ff00
-#define FFBDAC_COLOR_GREEN_SHFT	8
-#define FFBDAC_COLOR_RED	0x000000ff
-#define FFBDAC_COLOR_RED_SHFT	0
-
-/* Cursor DAC register addresses. */
-#define FFBDAC_CUR_BITMAP_P0	0x000 /* Plane 0 cursor bitmap	*/
-#define FFBDAC_CUR_BITMAP_P1	0x080 /* Plane 1 cursor bitmap	*/
-#define FFBDAC_CUR_CTRL		0x100 /* Cursor control		*/
-#define FFBDAC_CUR_COLOR0	0x101 /* Cursor Color 0		*/
-#define FFBDAC_CUR_COLOR1	0x102 /* Cursor Color 1 (bg)	*/
-#define FFBDAC_CUR_COLOR2	0x103 /* Cursor Color 2	(fg)	*/
-#define FFBDAC_CUR_POS		0x104 /* Active cursor position	*/
-
-/* Cursor control register.
- * WARNING: Be careful, reverse logic on these bits.
- */
-#define FFBDAC_CUR_CTRL_P0	0x00000001	/* Plane0 display disable	*/
-#define FFBDAC_CUR_CTRL_P1	0x00000002	/* Plane1 display disable	*/
-
-/* Active cursor position register */
-#define FFBDAC_CUR_POS_Y_SIGN	0x80000000	/* Sign of Y position		*/
-#define FFBDAC_CUR_POS_Y	0x0fff0000	/* Y position			*/
-#define FFBDAC_CUR_POS_X_SIGN	0x00008000	/* Sign of X position		*/
-#define FFBDAC_CUR_POS_X	0x00000fff	/* X position			*/
-
-/* Configuration and Palette DAC register addresses. */
-#define FFBDAC_CFG_PPLLCTRL	0x0000 /* Pixel PLL Control		*/
-#define FFBDAC_CFG_GPLLCTRL	0x0001 /* General Purpose PLL Control	*/
-#define FFBDAC_CFG_PFCTRL	0x1000 /* Pixel Format Control		*/
-#define FFBDAC_CFG_UCTRL	0x1001 /* User Control			*/
-#define FFBDAC_CFG_CLUP_BASE	0x2000 /* Color Lookup Palette		*/
-#define FFBDAC_CFG_CLUP(entry) (FFBDAC_CFG_CLUP_BASE + ((entry) * 0x100))
-#define FFBDAC_PAC2_SOVWLUT0	0x3100 /* Shadow Overlay Window Lookup 0*/
-#define FFBDAC_PAC2_SOVWLUT1	0x3101 /* Shadow Overlay Window Lookup 1*/
-#define FFBDAC_PAC2_SOVWLUT2	0x3102 /* Shadow Overlay Window Lookup 2*/
-#define FFBDAC_PAC2_SOVWLUT3	0x3103 /* Shadow Overlay Window Lookup 3*/
-#define FFBDAC_PAC2_AOVWLUT0	0x3210 /* Active Overlay Window Lookup 0*/
-#define FFBDAC_PAC2_AOVWLUT1	0x3211 /* Active Overlay Window Lookup 1*/
-#define FFBDAC_PAC2_AOVWLUT2	0x3212 /* Active Overlay Window Lookup 2*/
-#define FFBDAC_PAC2_AOVWLUT3	0x3213 /* Active Overlay Window Lookup 3*/
-#define FFBDAC_CFG_WTCTRL	0x3150 /* Window Transfer Control	*/
-#define FFBDAC_CFG_TMCTRL	0x3151 /* Transparent Mask Control	*/
-#define FFBDAC_CFG_TCOLORKEY	0x3152 /* Transparent Color Key		*/
-#define FFBDAC_CFG_WAMASK	0x3153 /* Window Address Mask (PAC2 only) */
-#define FFBDAC_PAC1_SPWLUT_BASE	0x3100 /* Shadow Primary Window Lookups	*/
-#define FFBDAC_PAC1_SPWLUT(entry) (FFBDAC_PAC1_SPWLUT_BASE + (entry))
-#define FFBDAC_PAC1_APWLUT_BASE	0x3120 /* Active Primary Window Lookups	*/
-#define FFBDAC_PAC1_APWLUT(entry) (FFBDAC_PAC1_APWLUT_BASE + (entry))
-#define FFBDAC_PAC2_SPWLUT_BASE	0x3200 /* Shadow Primary Window Lookups	*/
-#define FFBDAC_PAC2_SPWLUT(entry) (FFBDAC_PAC2_SPWLUT_BASE + (entry))
-#define FFBDAC_PAC2_APWLUT_BASE	0x3240 /* Active Primary Window Lookups	*/
-#define FFBDAC_PAC2_APWLUT(entry) (FFBDAC_PAC2_APWLUT_BASE + (entry))
-#define FFBDAC_CFG_SANAL	0x5000 /* Signature Analysis Control	*/
-#define FFBDAC_CFG_DACCTRL	0x5001 /* DAC Control			*/
-#define FFBDAC_CFG_TGEN		0x6000 /* Timing Generator Control	*/
-#define FFBDAC_CFG_VBNP		0x6001 /* Vertical Blank Negation Point	*/
-#define FFBDAC_CFG_VBAP		0x6002 /* Vertical Blank Assertion Point*/
-#define FFBDAC_CFG_VSNP		0x6003 /* Vertical Sync Negation Point	*/
-#define FFBDAC_CFG_VSAP		0x6004 /* Vertical Sync Assertion Point	*/
-#define FFBDAC_CFG_HSNP		0x6005 /* Horz Serration Negation Point */
-#define FFBDAC_CFG_HBNP		0x6006 /* Horz Blank Negation Point	*/
-#define FFBDAC_CFG_HBAP		0x6007 /* Horz Blank Assertion Point	*/
-#define FFBDAC_CFG_HSYNCNP	0x6008 /* Horz Sync Negation Point	*/
-#define FFBDAC_CFG_HSYNCAP	0x6009 /* Horz Sync Assertion Point	*/
-#define FFBDAC_CFG_HSCENNP	0x600A /* Horz SCEN Negation Point	*/
-#define FFBDAC_CFG_HSCENAP	0x600B /* Horz SCEN Assertion Point	*/
-#define FFBDAC_CFG_EPNP		0x600C /* Eql'zing Pulse Negation Point	*/
-#define FFBDAC_CFG_EINP		0x600D /* Eql'zing Intvl Negation Point	*/
-#define FFBDAC_CFG_EIAP		0x600E /* Eql'zing Intvl Assertion Point*/
-#define FFBDAC_CFG_TGVC		0x600F /* Timing Generator Vert Counter	*/
-#define FFBDAC_CFG_TGHC		0x6010 /* Timing Generator Horz Counter	*/
-#define FFBDAC_CFG_DID		0x8000 /* Device Identification		*/
-#define FFBDAC_CFG_MPDATA	0x8001 /* Monitor Port Data		*/
-#define FFBDAC_CFG_MPSENSE	0x8002 /* Monitor Port Sense		*/
-
-/* Pixel PLL Control Register */
-#define FFBDAC_CFG_PPLLCTRL_M	0x0000007f	/* PLL VCO Multiplicand		 */
-#define FFBDAC_CFG_PPLLCTRL_D	0x00000780	/* PLL VCO Divisor		 */
-#define FFBDAC_CFG_PPLLCTRL_PFD	0x00001800	/* Post VCO Frequency Divider	 */
-#define FFBDAC_CFG_PPLLCTRL_EN	0x00004000	/* Enable PLL as pixel clock src */
-
-/* General Purpose PLL Control Register */
-#define FFBDAC_CFG_GPLLCTRL_M	0x0000007f	/* PLL VCO Multiplicand		 */
-#define FFBDAC_CFG_GPLLCTRL_D	0x00000780	/* PLL VCO Divisor		 */
-#define FFBDAC_CFG_GPLLCTRL_PFD	0x00001800	/* Post VCO Frequency Divider	 */
-#define FFBDAC_CFG_GPLLCTRL_EN	0x00004000	/* Enable PLL as Gen. Purpose clk*/
-
-/* Pixel Format Control Register */
-#define FFBDAC_CFG_PFCTRL_2_1	0x00000000	/* 2:1 pixel interleave format	 */
-#define FFBDAC_CFG_PFCTRL_4_1	0x00000001	/* 4:1 pixel interleave format	 */
-#define FFBDAC_CFG_PFCTRL_42_1	0x00000002	/* 4/2:1 pixel interleave format */
-#define FFBDAC_CFG_PFCTRL_82_1	0x00000003	/* 8/2:1 pixel interleave format */
-
-/* User Control Register */
-#define FFBDAC_UCTRL_IPDISAB	0x00000001	/* Disable input pullup resistors*/
-#define FFBDAC_UCTRL_ABLANK	0x00000002	/* Asynchronous Blank		 */
-#define FFBDAC_UCTRL_DBENAB	0x00000004	/* Double-Buffer Enable		 */
-#define FFBDAC_UCTRL_OVENAB	0x00000008	/* Overlay Enable		 */
-#define FFBDAC_UCTRL_WMODE	0x00000030	/* Window Mode			 */
-#define FFBDAC_UCTRL_WM_COMB	0x00000000	/* Window Mode = Combined	 */
-#define FFBDAC_UCTRL_WM_S4	0x00000010	/* Window Mode = Seperate_4	 */
-#define FFBDAC_UCTRL_WM_S8	0x00000020	/* Window Mode = Seperate_8	 */
-#define FFBDAC_UCTRL_WM_RESV	0x00000030	/* Window Mode = reserved	 */
-#define FFBDAC_UCTRL_MANREV	0x00000f00	/* 4-bit Manufacturing Revision	 */
-
-/* Overlay Window Lookup Registers (PAC2 only) */
-#define FFBDAC_CFG_OVWLUT_PSEL	0x0000000f	/* Palette Section, Seperate_4	 */
-#define FFBDAC_CFG_OVWLUT_PTBL	0x00000030	/* Palette Table		 */
-#define FFBDAC_CFG_OVWLUT_LKUP	0x00000100	/* 1 = Use palette, 0 = Bypass	 */
-#define FFBDAC_CFG_OVWLUT_OTYP	0x00000c00	/* Overlay Type			 */
-#define FFBDAC_CFG_OVWLUT_O_N	0x00000000	/* Overlay Type - None		 */
-#define FFBDAC_CFG_OVWLUT_O_T	0x00000400	/* Overlay Type - Transparent	 */
-#define FFBDAC_CFG_OVWLUT_O_O	0x00000800	/* Overlay Type - Opaque	 */
-#define FFBDAC_CFG_OVWLUT_O_R	0x00000c00	/* Overlay Type - Reserved	 */
-#define FFBDAC_CFG_OVWLUT_PCS	0x00003000	/* Psuedocolor Src		 */
-#define FFBDAC_CFG_OVWLUT_P_XO	0x00000000	/* Psuedocolor Src - XO[7:0]	 */
-#define FFBDAC_CFG_OVWLUT_P_R	0x00001000	/* Psuedocolor Src - R[7:0]	 */
-#define FFBDAC_CFG_OVWLUT_P_G	0x00002000	/* Psuedocolor Src - G[7:0]	 */
-#define FFBDAC_CFG_OVWLUT_P_B	0x00003000	/* Psuedocolor Src - B[7:0]	 */
-
-/* Window Transfer Control Register */
-#define FFBDAC_CFG_WTCTRL_DS	0x00000001	/* Device Status, 1 = Busy	 */
-#define FFBDAC_CFG_WTCTRL_TCMD	0x00000002	/* Transfer Command
-						 * 1 = Transfer, 0 = No Action
-						 */
-#define FFBDAC_CFG_WTCTRL_TE	0x00000004	/* Transfer Event
-						 * 1 = Next Frame, 0 = Next Field
-						 */
-#define FFBDAC_CFG_WTCTRL_DRD	0x00000008	/* Drawing Data
-						 * 1 = Local Drawing Active
-						 * 0 = Local Drawing Idle
-						 */
-#define FFBDAC_CFG_WTCTRL_DRS	0x00000010	/* Drawing Status
-						 * 1 = Network Drawing Active
-						 * 0 = Network Drawing Idle
-						 */
-
-/* Transparent Mask Control Register */
-#define FFBDAC_CFG_TMCTRL_OMSK	0x000000ff	/* Overlay Mask			 */
-
-/* Transparent Color Key Register */
-#define FFBDAC_CFG_TCOLORKEY_K	0x000000ff	/* Overlay Color Key		 */
-
-/* Window Address Mask Register (PAC2 only) */
-#define FFBDAC_CFG_WAMASK_PMSK	0x0000003f	/* PWLUT select PMASK		 */
-#define FFBDAC_CFG_WAMASK_OMSK	0x00000300	/* OWLUT control OMASK		 */
-
-/* (non-Overlay) Window Lookup Table Registers, PAC1 format */
-#define FFBDAC_PAC1_WLUT_DB	0x00000020	/* 0 = Buffer A, 1 = Buffer B	 */
-#define FFBDAC_PAC1_WLUT_C	0x0000001c	/* C: Color Model Selection	 */
-#define FFBDAC_PAC1_WLUT_C_8P	0x00000000	/* C: 8bpp Pseudocolor		 */
-#define FFBDAC_PAC1_WLUT_C_8LG	0x00000004	/* C: 8bpp Linear Grey		 */
-#define FFBDAC_PAC1_WLUT_C_8NG	0x00000008	/* C: 8bpp Non-Linear Grey	 */
-#define FFBDAC_PAC1_WLUT_C_24D	0x00000010	/* C: 24bpp Directcolor		 */
-#define FFBDAC_PAC1_WLUT_C_24LT	0x00000014	/* C: 24bpp Linear Truecolor	 */
-#define FFBDAC_PAC1_WLUT_C_24NT	0x00000018	/* C: 24bpp Non-Linear Truecolor */
-#define FFBDAC_PAC1_WLUT_PCS	0x00000003	/* Pseudocolor Src		 */
-#define FFBDAC_PAC1_WLUT_P_XO	0x00000000	/* Pseudocolor Src - XO[7:0]	 */
-#define FFBDAC_PAC1_WLUT_P_R	0x00000001	/* Pseudocolor Src - R[7:0]	 */
-#define FFBDAC_PAC1_WLUT_P_G	0x00000002	/* Pseudocolor Src - G[7:0]	 */
-#define FFBDAC_PAC1_WLUT_P_B	0x00000003	/* Pseudocolor Src - B[7:0]	 */
-
-/* (non-Overlay) Window Lookup Table Registers, PAC2 format */
-#define FFBDAC_PAC2_WLUT_PTBL	0x00000030	/* Palette Table Entry		 */
-#define FFBDAC_PAC2_WLUT_LKUP	0x00000100	/* 1 = Use palette, 0 = Bypass	 */
-#define FFBDAC_PAC2_WLUT_PCS	0x00003000	/* Pseudocolor Src		 */
-#define FFBDAC_PAC2_WLUT_P_XO	0x00000000	/* Pseudocolor Src - XO[7:0]	 */
-#define FFBDAC_PAC2_WLUT_P_R	0x00001000	/* Pseudocolor Src - R[7:0]	 */
-#define FFBDAC_PAC2_WLUT_P_G	0x00002000	/* Pseudocolor Src - G[7:0]	 */
-#define FFBDAC_PAC2_WLUT_P_B	0x00003000	/* Pseudocolor Src - B[7:0]	 */
-#define FFBDAC_PAC2_WLUT_DEPTH	0x00004000	/* 0 = Pseudocolor, 1 = Truecolor*/
-#define FFBDAC_PAC2_WLUT_DB	0x00008000	/* 0 = Buffer A, 1 = Buffer B	 */
-
-/* Signature Analysis Control Register */
-#define FFBDAC_CFG_SANAL_SRR	0x000000ff	/* DAC Seed/Result for Red	 */
-#define FFBDAC_CFG_SANAL_SRG	0x0000ff00	/* DAC Seed/Result for Green	 */
-#define FFBDAC_CFG_SANAL_SRB	0x00ff0000	/* DAC Seed/Result for Blue	 */
-#define FFBDAC_CFG_SANAL_RQST	0x01000000	/* Signature Capture Request	 */
-#define FFBDAC_CFG_SANAL_BSY	0x02000000	/* Signature Analysis Busy	 */
-#define FFBDAC_CFG_SANAL_DSM	0x04000000	/* Data Strobe Mode
-						 * 0 = Signature Analysis Mode
-						 * 1 = Data Strobe Mode
-						 */
-
-/* DAC Control Register */
-#define FFBDAC_CFG_DACCTRL_O2	0x00000003	/* Operand 2 Select
-						 * 00 = Normal Operation
-						 * 01 = Select 145mv Reference
-						 * 10 = Select Blue DAC Output
-						 * 11 = Reserved
-						 */
-#define FFBDAC_CFG_DACCTRL_O1	0x0000000c	/* Operand 1 Select
-						 * 00 = Normal Operation
-						 * 01 = Select Green DAC Output
-						 * 10 = Select Red DAC Output
-						 * 11 = Reserved
-						 */
-#define FFBDAC_CFG_DACCTRL_CR	0x00000010	/* Comparator Result
-						 * 0 = operand1 < operand2
-						 * 1 = operand1 > operand2
-						 */
-#define FFBDAC_CFG_DACCTRL_SGE	0x00000020	/* Sync-on-Green Enable		 */
-#define FFBDAC_CFG_DACCTRL_PE	0x00000040	/* Pedestal Enable		 */
-#define FFBDAC_CFG_DACCTRL_VPD	0x00000080	/* VSYNC* Pin Disable		 */
-#define FFBDAC_CFG_DACCTRL_SPB	0x00000100	/* Sync Polarity Bit
-						 * 0 = VSYNC* and CSYNC* active low
-						 * 1 = VSYNC* and CSYNC* active high
-						 */
-
-/* Timing Generator Control Register */
-#define FFBDAC_CFG_TGEN_VIDE	0x00000001	/* Video Enable			 */
-#define FFBDAC_CFG_TGEN_TGE	0x00000002	/* Timing Generator Enable	 */
-#define FFBDAC_CFG_TGEN_HSD	0x00000004	/* HSYNC* Disabled		 */
-#define FFBDAC_CFG_TGEN_VSD	0x00000008	/* VSYNC* Disabled		 */
-#define FFBDAC_CFG_TGEN_EQD	0x00000010	/* Equalization Disabled	 */
-#define FFBDAC_CFG_TGEN_MM	0x00000020	/* 0 = Slave, 1 = Master	 */
-#define FFBDAC_CFG_TGEN_IM	0x00000040	/* 1 = Interlaced Mode		 */
-
-/* Device Identification Register, should be 0xA236E1AD for FFB bt497/bt498 */
-#define FFBDAC_CFG_DID_ONE	0x00000001	/* Always set			 */
-#define FFBDAC_CFG_DID_MANUF	0x00000ffe	/* Manufacturer ID		 */
-#define FFBDAC_CFG_DID_PNUM	0x0ffff000	/* Device Part Number		 */
-#define FFBDAC_CFG_DID_REV	0xf0000000	/* Device Revision		 */
-
-/* Monitor Port Data Register */
-#define FFBDAC_CFG_MPDATA_SCL	0x00000001	/* SCL Data			 */
-#define FFBDAC_CFG_MPDATA_SDA	0x00000002	/* SDA Data			 */
-
-/* Monitor Port Sense Register */
-#define FFBDAC_CFG_MPSENSE_SCL	0x00000001	/* SCL Sense			 */
-#define FFBDAC_CFG_MPSENSE_SDA	0x00000002	/* SDA Sense			 */
-
-/* DAC register access shorthands. */
-#define DACCUR_READ(DAC, ADDR)		((DAC)->cur = (ADDR), (DAC)->curdata)
-#define DACCUR_WRITE(DAC, ADDR, VAL)	((DAC)->cur = (ADDR), (DAC)->curdata = (VAL))
-#define DACCFG_READ(DAC, ADDR)		((DAC)->cfg = (ADDR), (DAC)->cfgdata)
-#define DACCFG_WRITE(DAC, ADDR, VAL)	((DAC)->cfg = (ADDR), (DAC)->cfgdata = (VAL))
-
-typedef struct ffb_dac_hwstate {
-	unsigned int ppllctrl;
-	unsigned int gpllctrl;
-	unsigned int pfctrl;
-	unsigned int uctrl;
-	unsigned int clut[256 * 4];	/* One 256 entry clut on PAC1, 4 on PAC2 */
-	unsigned int ovluts[4];		/* Overlay WLUTS, PAC2 only */
-	unsigned int wtctrl;
-	unsigned int tmctrl;
-	unsigned int tcolorkey;
-	unsigned int wamask;
-	unsigned int pwluts[64];
-	unsigned int dacctrl;
-	unsigned int tgen;
-	unsigned int vbnp;
-	unsigned int vbap;
-	unsigned int vsnp;
-	unsigned int vsap;
-	unsigned int hsnp;
-	unsigned int hbnp;
-	unsigned int hbap;
-	unsigned int hsyncnp;
-	unsigned int hsyncap;
-	unsigned int hscennp;
-	unsigned int hscenap;
-	unsigned int epnp;
-	unsigned int einp;
-	unsigned int eiap;
-} ffb_dac_hwstate_t;
-
-typedef struct {
-	Bool		InUse;
-
-	/* The following fields are undefined unless InUse is TRUE. */
-	int		refcount;
-	Bool		canshare;
-	unsigned int	wlut_regval;
-	int		buffer;		/* 0 = Buffer A, 1 = Buffer B	*/
-	int		depth;		/* 8 or 32 bpp			*/
-	int		greyscale;	/* 1 = greyscale, 0 = color	*/
-	int		linear;		/* 1 = linear, 0 = non-linear	*/
-	int		direct;		/* 1 = 24bpp directcolor	*/
-	int		channel;	/* 0 = X, 1 = R, 2 = G, 3 = B	*/
-	int		palette;	/* Only PAC2 has multiple CLUTs	*/
-} ffb_wid_info_t;
-
-#define FFB_MAX_PWIDS	64
-typedef struct {
-	int		num_wids;
-	int		wid_shift;	/* To get X channel value	*/
-	ffb_wid_info_t	wid_pool[FFB_MAX_PWIDS];
-} ffb_wid_pool_t;
-
-typedef struct ffb_dac_info {
-	unsigned int flags;
-#define FFB_DAC_PAC1	0x00000001	/* Pacifica1 DAC, BT9068	*/
-#define FFB_DAC_PAC2	0x00000002	/* Pacifica2 DAC, BT498		*/
-#define FFB_DAC_ICURCTL	0x00000004	/* Inverted CUR_CTRL bits	*/
-
-	unsigned int kernel_wid;
-
-	/* These registers need to be modified when changing DAC
-	 * timing state, so at init time we capture their values.
-	 */
-	unsigned int ffbcfg0;
-	unsigned int ffbcfg2;
-	unsigned int ffb_passin_ctrl;	/* FFB2+/AFB only */
-
-	ffb_dac_hwstate_t	kern_dac_state;
-	ffb_dac_hwstate_t	x_dac_state;
-
-	ffb_wid_pool_t		wid_table;
-} ffb_dac_info_t;
-
-#endif /* _FFB_DAC_H */
diff --git a/src/mesa/drivers/dri/ffb/server/ffb_drishare.h b/src/mesa/drivers/dri/ffb/server/ffb_drishare.h
deleted file mode 100644
index 69fefa3f0a..0000000000
--- a/src/mesa/drivers/dri/ffb/server/ffb_drishare.h
+++ /dev/null
@@ -1,47 +0,0 @@
-
-#ifndef _FFB_DRISHARE_H
-#define _FFB_DRISHARE_H
-
-typedef struct ffb_dri_state {
-	int		flags;
-#define FFB_DRI_FFB2		0x00000001
-#define FFB_DRI_FFB2PLUS	0x00000002
-#define FFB_DRI_PAC1		0x00000004
-#define FFB_DRI_PAC2		0x00000008
-
-	/* Indexed by DRI drawable id. */
-#define FFB_DRI_NWIDS	64
-	unsigned int	wid_table[FFB_DRI_NWIDS];
-} ffb_dri_state_t;
-
-#define FFB_DRISHARE(SAREA)	\
-	((ffb_dri_state_t *) (((char *)(SAREA)) + sizeof(drm_sarea_t)))
-
-typedef struct {
-	drm_handle_t	hFbcRegs;
-	drmSize		sFbcRegs;
-
-	drm_handle_t	hDacRegs;
-	drmSize		sDacRegs;
-
-	drm_handle_t	hSfb8r;
-	drmSize		sSfb8r;
-
-	drm_handle_t	hSfb32;
-	drmSize		sSfb32;
-
-	drm_handle_t	hSfb64;
-	drmSize		sSfb64;
-
-	/* Fastfill/Pagefill parameters. */
-	unsigned char	disable_pagefill;
-	int		fastfill_small_area;
-	int		pagefill_small_area;
-	int		fastfill_height;
-	int		fastfill_width;
-	int		pagefill_height;
-	int		pagefill_width;
-	short		Pf_AlignTab[0x800];
-} FFBDRIRec, *FFBDRIPtr;
-
-#endif /* !(_FFB_DRISHARE_H) */
diff --git a/src/mesa/drivers/dri/ffb/server/ffb_regs.h b/src/mesa/drivers/dri/ffb/server/ffb_regs.h
deleted file mode 100644
index bda5840d60..0000000000
--- a/src/mesa/drivers/dri/ffb/server/ffb_regs.h
+++ /dev/null
@@ -1,508 +0,0 @@
-/*
- * Acceleration for the Creator and Creator3D framebuffer - register layout.
- *
- * Copyright (C) 1998,1999,2000 Jakub Jelinek (jakub@redhat.com)
- * Copyright (C) 1998 Michal Rehacek (majkl@iname.com)
- * Copyright (C) 1999 David S. Miller (davem@redhat.com)
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * JAKUB JELINEK, MICHAL REHACEK, OR DAVID MILLER BE LIABLE FOR ANY CLAIM,
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- * USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- */
-
-#ifndef FFBREGS_H
-#define FFBREGS_H
-
-/* Auxilliary clips. */
-typedef struct  {
-	volatile unsigned int min;
-	volatile unsigned int max;
-} ffb_auxclip, *ffb_auxclipPtr;
-
-/* FFB register set. */
-typedef struct _ffb_fbc {
-	/* Next vertex registers, on the right we list which drawops
-	 * use said register and the logical name the register has in
-	 * that context.
-	 */					/* DESCRIPTION		DRAWOP(NAME)	*/
-/*0x00*/unsigned int		pad1[3];	/* Reserved				*/
-/*0x0c*/volatile unsigned int	alpha;		/* ALPHA Transparency			*/
-/*0x10*/volatile unsigned int	red;		/* RED					*/
-/*0x14*/volatile unsigned int	green;		/* GREEN				*/
-/*0x18*/volatile unsigned int	blue;		/* BLUE					*/
-/*0x1c*/volatile unsigned int	z;		/* DEPTH				*/
-/*0x20*/volatile unsigned int	y;		/* Y			triangle(DOYF)	*/
-						/*                      aadot(DYF)	*/
-						/*                      ddline(DYF)	*/
-						/*                      aaline(DYF)	*/
-/*0x24*/volatile unsigned int	x;		/* X			triangle(DOXF)	*/
-						/*                      aadot(DXF)	*/
-						/*                      ddline(DXF)	*/
-						/*                      aaline(DXF)	*/
-/*0x28*/unsigned int		pad2[2];	/* Reserved				*/
-/*0x30*/volatile unsigned int	ryf;		/* Y (alias to DOYF)	ddline(RYF)	*/
-						/*			aaline(RYF)	*/
-						/*			triangle(RYF)	*/
-/*0x34*/volatile unsigned int	rxf;		/* X			ddline(RXF)	*/
-						/*			aaline(RXF)	*/
-						/*			triangle(RXF)	*/
-/*0x38*/unsigned int		pad3[2];	/* Reserved				*/
-/*0x40*/volatile unsigned int	dmyf;		/* Y (alias to DOYF)	triangle(DMYF)	*/
-/*0x44*/volatile unsigned int	dmxf;		/* X			triangle(DMXF)	*/
-/*0x48*/unsigned int		pad4[2];	/* Reserved				*/
-/*0x50*/volatile unsigned int	ebyi;		/* Y (alias to RYI)	polygon(EBYI)	*/
-/*0x54*/volatile unsigned int	ebxi;		/* X			polygon(EBXI)	*/
-/*0x58*/unsigned int		pad5[2];	/* Reserved				*/
-/*0x60*/volatile unsigned int	by;		/* Y			brline(RYI)	*/
-						/*			fastfill(OP)	*/
-						/*			polygon(YI)	*/
-						/*			rectangle(YI)	*/
-						/*			bcopy(SRCY)	*/
-						/*			vscroll(SRCY)	*/
-/*0x64*/volatile unsigned int	bx;		/* X			brline(RXI)	*/
-						/*			polygon(XI)	*/
-						/*			rectangle(XI)	*/
-						/*			bcopy(SRCX)	*/
-						/*			vscroll(SRCX)	*/
-						/*			fastfill(GO)	*/
-/*0x68*/volatile unsigned int	dy;		/* destination Y	fastfill(DSTY)	*/
-						/*			bcopy(DSRY)	*/
-						/*			vscroll(DSRY)	*/
-/*0x6c*/volatile unsigned int	dx;		/* destination X	fastfill(DSTX)	*/
-						/*			bcopy(DSTX)	*/
-						/*			vscroll(DSTX)	*/
-/*0x70*/volatile unsigned int	bh;		/* Y (alias to RYI)	brline(DYI)	*/
-						/*			dot(DYI)	*/
-						/*			polygon(ETYI)	*/
-						/* Height		fastfill(H)	*/
-						/*			bcopy(H)	*/
-						/*			vscroll(H)	*/
-						/* Y count		fastfill(NY)	*/
-/*0x74*/volatile unsigned int	bw;		/* X			dot(DXI)	*/
-						/*			brline(DXI)	*/
-						/*			polygon(ETXI)	*/
-						/*			fastfill(W)	*/
-						/*			bcopy(W)	*/
-						/*			vscroll(W)	*/
-						/*			fastfill(NX)	*/
-/*0x78*/unsigned int		pad6[2];	/* Reserved				*/
-/*0x80*/unsigned int		pad7[32];	/* Reserved				*/
-	
-	/* Setup Unit's vertex state register */
-/*100*/	volatile unsigned int	suvtx;
-/*104*/	unsigned int		pad8[63];	/* Reserved				*/
-	
-	/* Frame Buffer Control Registers */
-/*200*/	volatile unsigned int	ppc;		/* Pixel Processor Control		*/
-/*204*/	volatile unsigned int	wid;		/* Current WID				*/
-/*208*/	volatile unsigned int	fg;		/* FG data				*/
-/*20c*/	volatile unsigned int	bg;		/* BG data				*/
-/*210*/	volatile unsigned int	consty;		/* Constant Y				*/
-/*214*/	volatile unsigned int	constz;		/* Constant Z				*/
-/*218*/	volatile unsigned int	xclip;		/* X Clip				*/
-/*21c*/	volatile unsigned int	dcss;		/* Depth Cue Scale Slope		*/
-/*220*/	volatile unsigned int	vclipmin;	/* Viewclip XY Min Bounds		*/
-/*224*/	volatile unsigned int	vclipmax;	/* Viewclip XY Max Bounds		*/
-/*228*/	volatile unsigned int	vclipzmin;	/* Viewclip Z Min Bounds		*/
-/*22c*/	volatile unsigned int	vclipzmax;	/* Viewclip Z Max Bounds		*/
-/*230*/	volatile unsigned int	dcsf;		/* Depth Cue Scale Front Bound		*/
-/*234*/	volatile unsigned int	dcsb;		/* Depth Cue Scale Back Bound		*/
-/*238*/	volatile unsigned int	dczf;		/* Depth Cue Z Front			*/
-/*23c*/	volatile unsigned int	dczb;		/* Depth Cue Z Back			*/
-/*240*/	unsigned int		pad9;		/* Reserved				*/
-/*244*/	volatile unsigned int	blendc;		/* Alpha Blend Control			*/
-/*248*/	volatile unsigned int	blendc1;	/* Alpha Blend Color 1			*/
-/*24c*/	volatile unsigned int	blendc2;	/* Alpha Blend Color 2			*/
-/*250*/	volatile unsigned int	fbramitc;	/* FB RAM Interleave Test Control	*/
-/*254*/	volatile unsigned int	fbc;		/* Frame Buffer Control			*/
-/*258*/	volatile unsigned int	rop;		/* Raster OPeration			*/
-/*25c*/	volatile unsigned int	cmp;		/* Frame Buffer Compare			*/
-/*260*/	volatile unsigned int	matchab;	/* Buffer AB Match Mask			*/
-/*264*/	volatile unsigned int	matchc;		/* Buffer C(YZ) Match Mask		*/
-/*268*/	volatile unsigned int	magnab;		/* Buffer AB Magnitude Mask		*/
-/*26c*/	volatile unsigned int	magnc;		/* Buffer C(YZ) Magnitude Mask		*/
-/*270*/	volatile unsigned int	fbcfg0;		/* Frame Buffer Config 0		*/
-/*274*/	volatile unsigned int	fbcfg1;		/* Frame Buffer Config 1		*/
-/*278*/	volatile unsigned int	fbcfg2;		/* Frame Buffer Config 2		*/
-/*27c*/	volatile unsigned int	fbcfg3;		/* Frame Buffer Config 3		*/
-/*280*/	volatile unsigned int	ppcfg;		/* Pixel Processor Config		*/
-/*284*/	volatile unsigned int	pick;		/* Picking Control			*/
-/*288*/	volatile unsigned int	fillmode;	/* FillMode				*/
-/*28c*/	volatile unsigned int	fbramwac;	/* FB RAM Write Address Control		*/
-/*290*/	volatile unsigned int	pmask;		/* RGB PlaneMask			*/
-/*294*/	volatile unsigned int	xpmask;		/* X PlaneMask				*/
-/*298*/	volatile unsigned int	ypmask;		/* Y PlaneMask				*/
-/*29c*/	volatile unsigned int	zpmask;		/* Z PlaneMask				*/
-/*2a0*/	ffb_auxclip		auxclip[4]; 	/* Auxilliary Viewport Clip		*/
-	
-	/* New 3dRAM III support regs */
-/*2c0*/	volatile unsigned int	rawblend2;
-/*2c4*/	volatile unsigned int	rawpreblend;
-/*2c8*/	volatile unsigned int	rawstencil;
-/*2cc*/	volatile unsigned int	rawstencilctl;
-/*2d0*/	volatile unsigned int	threedram1;
-/*2d4*/	volatile unsigned int	threedram2;
-/*2d8*/	volatile unsigned int	passin;
-/*2dc*/	volatile unsigned int	rawclrdepth;
-/*2e0*/	volatile unsigned int	rawpmask;
-/*2e4*/	volatile unsigned int	rawcsrc;
-/*2e8*/	volatile unsigned int	rawmatch;
-/*2ec*/	volatile unsigned int	rawmagn;
-/*2f0*/	volatile unsigned int	rawropblend;
-/*2f4*/	volatile unsigned int	rawcmp;
-/*2f8*/	volatile unsigned int	rawwac;
-/*2fc*/	volatile unsigned int	fbramid;
-	
-/*300*/	volatile unsigned int	drawop;		/* Draw OPeration			*/
-/*304*/	unsigned int		pad10[2];	/* Reserved				*/
-/*30c*/	volatile unsigned int	lpat;		/* Line Pattern control			*/
-/*310*/	unsigned int		pad11;		/* Reserved				*/
-/*314*/	volatile unsigned int	fontxy;		/* XY Font coordinate			*/
-/*318*/	volatile unsigned int	fontw;		/* Font Width				*/
-/*31c*/	volatile unsigned int	fontinc;	/* Font Increment			*/
-/*320*/	volatile unsigned int	font;		/* Font bits				*/
-/*324*/	unsigned int		pad12[3];	/* Reserved				*/
-/*330*/	volatile unsigned int	blend2;
-/*334*/	volatile unsigned int	preblend;
-/*338*/	volatile unsigned int	stencil;
-/*33c*/	volatile unsigned int	stencilctl;
-
-/*340*/	unsigned int		pad13[4];	/* Reserved				*/
-/*350*/	volatile unsigned int	dcss1;		/* Depth Cue Scale Slope 1		*/
-/*354*/	volatile unsigned int	dcss2;		/* Depth Cue Scale Slope 2		*/
-/*358*/	volatile unsigned int	dcss3;		/* Depth Cue Scale Slope 3		*/
-/*35c*/	volatile unsigned int	widpmask;
-/*360*/	volatile unsigned int	dcs2;
-/*364*/	volatile unsigned int	dcs3;
-/*368*/	volatile unsigned int	dcs4;
-/*36c*/	unsigned int		pad14;		/* Reserved				*/
-/*370*/	volatile unsigned int	dcd2;
-/*374*/	volatile unsigned int	dcd3;
-/*378*/	volatile unsigned int	dcd4;
-/*37c*/	unsigned int		pad15;		/* Reserved				*/
-/*380*/	volatile unsigned int	pattern[32];	/* area Pattern				*/
-/*400*/	unsigned int		pad16[8];	/* Reserved				*/
-/*420*/	volatile unsigned int	reset;		/* chip RESET				*/
-/*424*/	unsigned int		pad17[247];	/* Reserved				*/
-/*800*/	volatile unsigned int	devid;		/* Device ID				*/
-/*804*/	unsigned int		pad18[63];	/* Reserved				*/
-/*900*/	volatile unsigned int	ucsr;		/* User Control & Status Register	*/
-/*904*/	unsigned int		pad19[31];	/* Reserved				*/
-/*980*/	volatile unsigned int	mer;		/* Mode Enable Register			*/
-/*984*/	unsigned int		pad20[1439];	/* Reserved				*/
-} ffb_fbc, *ffb_fbcPtr;
-
-/* Draw operations */
-#define FFB_DRAWOP_DOT		0x00
-#define FFB_DRAWOP_AADOT	0x01
-#define FFB_DRAWOP_BRLINECAP	0x02
-#define FFB_DRAWOP_BRLINEOPEN	0x03
-#define FFB_DRAWOP_DDLINE	0x04
-#define FFB_DRAWOP_AALINE	0x05
-#define FFB_DRAWOP_TRIANGLE	0x06
-#define FFB_DRAWOP_POLYGON	0x07
-#define FFB_DRAWOP_RECTANGLE	0x08
-#define FFB_DRAWOP_FASTFILL	0x09
-#define FFB_DRAWOP_BCOPY	0x0a	/* Not implemented in any FFB, VIS is faster		*/
-#define FFB_DRAWOP_VSCROLL	0x0b	/* Up to 12x faster than BCOPY, 3-4x faster than VIS	*/
-
-/* FastFill operation codes. */
-#define FFB_FASTFILL_PAGE	0x01
-#define FFB_FASTFILL_BLOCK	0x02
-#define FFB_FASTFILL_COLOR_BLK	0x03
-#define FFB_FASTFILL_BLOCK_X	0x04
-
-/* Spanfill Unit Line Pattern */
-#define FFB_LPAT_SCALEPTR	0xf0000000
-#define FFB_LPAT_SCALEPTR_SHIFT	28
-#define FFB_LPAT_PATPTR		0x0f000000
-#define FFB_LPAT_PATPTR_SHIFT	24
-#define FFB_LPAT_SCALEVAL	0x00f00000
-#define FFB_LPAT_SCALEVAL_SHIFT	20
-#define FFB_LPAT_PATLEN		0x000f0000
-#define FFB_LPAT_PATLEN_SHIFT	16
-#define FFB_LPAT_PATTERN	0x0000ffff
-#define FFB_LPAT_PATTERN_SHIFT	0
-
-/* Pixel processor control */
-/* Force WID */
-#define FFB_PPC_FW_DISABLE	0x800000
-#define FFB_PPC_FW_ENABLE	0xc00000
-#define FFB_PPC_FW_MASK		0xc00000
-/* Auxiliary clip */
-#define FFB_PPC_ACE_DISABLE	0x040000
-#define FFB_PPC_ACE_AUX_SUB	0x080000
-#define FFB_PPC_ACE_AUX_ADD	0x0c0000
-#define FFB_PPC_ACE_MASK	0x0c0000
-/* Depth cue */
-#define FFB_PPC_DCE_DISABLE	0x020000
-#define FFB_PPC_DCE_ENABLE	0x030000
-#define FFB_PPC_DCE_MASK	0x030000
-/* Alpha blend */
-#define FFB_PPC_ABE_DISABLE	0x008000
-#define FFB_PPC_ABE_ENABLE	0x00c000
-#define FFB_PPC_ABE_MASK	0x00c000
-/* View clip */
-#define FFB_PPC_VCE_DISABLE	0x001000
-#define FFB_PPC_VCE_2D		0x002000
-#define FFB_PPC_VCE_3D		0x003000
-#define FFB_PPC_VCE_MASK	0x003000
-/* Area pattern */
-#define FFB_PPC_APE_DISABLE	0x000800
-#define FFB_PPC_APE_ENABLE	0x000c00
-#define FFB_PPC_APE_MASK	0x000c00
-/* Transparent background */
-#define FFB_PPC_TBE_OPAQUE	0x000200
-#define FFB_PPC_TBE_TRANSPARENT	0x000300
-#define FFB_PPC_TBE_MASK	0x000300
-/* Z source */
-#define FFB_PPC_ZS_VAR		0x000080
-#define FFB_PPC_ZS_CONST	0x0000c0
-#define FFB_PPC_ZS_MASK		0x0000c0
-/* Y source */
-#define FFB_PPC_YS_VAR		0x000020
-#define FFB_PPC_YS_CONST	0x000030
-#define FFB_PPC_YS_MASK		0x000030
-/* X source */
-#define FFB_PPC_XS_WID		0x000004
-#define FFB_PPC_XS_VAR		0x000008
-#define FFB_PPC_XS_CONST	0x00000c
-#define FFB_PPC_XS_MASK		0x00000c
-/* Color (BGR) source */
-#define FFB_PPC_CS_VAR		0x000002
-#define FFB_PPC_CS_CONST	0x000003
-#define FFB_PPC_CS_MASK		0x000003
-
-/* X Clip */
-#define FFB_XCLIP_XREF		0x000000ff
-#define FFB_XCLIP_TEST_MASK	0x00070000
-#define FFB_XCLIP_TEST_ALWAYS	0x00000000
-#define FFB_XCLIP_TEST_GT	0x00010000
-#define FFB_XCLIP_TEST_EQ	0x00020000
-#define FFB_XCLIP_TEST_GE	0x00030000
-#define FFB_XCLIP_TEST_NEVER	0x00040000
-#define FFB_XCLIP_TEST_LE	0x00050000
-#define FFB_XCLIP_TEST_NE	0x00060000
-#define FFB_XCLIP_TEST_LT	0x00070000
-
-/* FB Control register */
-/* Write buffer dest */
-#define FFB_FBC_WB_A		0x20000000
-#define FFB_FBC_WB_B		0x40000000
-#define FFB_FBC_WB_AB		0x60000000
-#define FFB_FBC_WB_C		0x80000000
-#define FFB_FBC_WB_AC		0xa0000000
-#define FFB_FBC_WB_BC		0xc0000000
-#define FFB_FBC_WB_ABC		0xe0000000
-#define FFB_FBC_WB_MASK		0xe0000000
-/* Write enable */
-#define FFB_FBC_WE_FORCEOFF	0x00100000
-#define FFB_FBC_WE_FORCEON	0x00200000
-#define FFB_FBC_WE_USE_WMASK	0x00300000
-#define FFB_FBC_WE_MASK		0x00300000
-/* Write group mode */
-#define FFB_FBC_WM_RSVD		0x00040000
-#define FFB_FBC_WM_COMBINED	0x00080000
-#define FFB_FBC_WM_SEPARATE	0x000c0000
-#define FFB_FBC_WM_MASK		0x000c0000
-/* Read buffer src */
-#define FFB_FBC_RB_A		0x00004000
-#define FFB_FBC_RB_B		0x00008000
-#define FFB_FBC_RB_C		0x0000c000
-#define FFB_FBC_RB_MASK		0x0000c000
-/* Stereo buf dest */
-#define FFB_FBC_SB_LEFT		0x00001000
-#define FFB_FBC_SB_RIGHT	0x00002000
-#define FFB_FBC_SB_BOTH		0x00003000
-#define FFB_FBC_SB_MASK		0x00003000
-/* Z plane group enable */
-#define FFB_FBC_ZE_OFF		0x00000400
-#define FFB_FBC_ZE_ON		0x00000800
-#define FFB_FBC_ZE_MASK		0x00000c00
-/* Y plane group enable */
-#define FFB_FBC_YE_OFF		0x00000100
-#define FFB_FBC_YE_ON		0x00000200
-#define FFB_FBC_YE_MASK		0x00000300
-/* X plane group enable */
-#define FFB_FBC_XE_OFF		0x00000040
-#define FFB_FBC_XE_ON		0x00000080
-#define FFB_FBC_XE_MASK		0x000000c0
-/* B plane group enable */
-#define FFB_FBC_BE_OFF		0x00000010
-#define FFB_FBC_BE_ON		0x00000020
-#define FFB_FBC_BE_MASK		0x00000030
-/* G plane group enable */
-#define FFB_FBC_GE_OFF		0x00000004
-#define FFB_FBC_GE_ON		0x00000008
-#define FFB_FBC_GE_MASK		0x0000000c
-/* R plane group enable */
-#define FFB_FBC_RE_OFF		0x00000001
-#define FFB_FBC_RE_ON		0x00000002
-#define FFB_FBC_RE_MASK		0x00000003
-/* Combined */
-#define FFB_FBC_RGBE_OFF	0x00000015
-#define FFB_FBC_RGBE_ON		0x0000002a
-#define FFB_FBC_RGBE_MASK	0x0000003f
-
-/* Raster OP */
-#define FFB_ROP_YZ_MASK		0x008f0000
-#define FFB_ROP_X_MASK		0x00008f00
-#define FFB_ROP_RGB_MASK	0x0000008f
-
-/* Now the rops themselves which get shifted into the
- * above fields.
- */
-#define FFB_ROP_EDIT_BIT	0x80
-#define FFB_ROP_ZERO		0x80
-#define FFB_ROP_NEW_AND_OLD	0x81
-#define FFB_ROP_NEW_AND_NOLD	0x82
-#define FFB_ROP_NEW		0x83
-#define FFB_ROP_NNEW_AND_OLD	0x84
-#define FFB_ROP_OLD		0x85
-#define FFB_ROP_NEW_XOR_OLD	0x86
-#define FFB_ROP_NEW_OR_OLD	0x87
-#define FFB_ROP_NNEW_AND_NOLD	0x88
-#define FFB_ROP_NNEW_XOR_NOLD	0x89
-#define FFB_ROP_NOLD		0x8a
-#define FFB_ROP_NEW_OR_NOLD	0x8b
-#define FFB_ROP_NNEW		0x8c
-#define FFB_ROP_NNEW_OR_OLD	0x8d
-#define FFB_ROP_NNEW_OR_NOLD	0x8e
-#define FFB_ROP_ONES		0x8f
-
-/* FB Compare */
-#define FFB_CMP_MATCHC_MASK	0x8f000000
-#define FFB_CMP_MAGNC_MASK	0x00870000
-#define FFB_CMP_MATCHAB_MASK	0x0000ff00
-#define FFB_CMP_MAGNAB_MASK	0x000000ff
-
-/* Compare Match codes */
-#define FFB_CMP_MATCH_EDIT_BIT	0x80
-#define FFB_CMP_MATCH_ALWAYS	0x80
-#define FFB_CMP_MATCH_NEVER	0x81
-#define FFB_CMP_MATCH_EQ	0x82
-#define FFB_CMP_MATCH_NE	0x83
-#define FFB_CMP_MATCH_A_ALWAYS	0xc0
-#define FFB_CMP_MATCH_B_ALWAYS	0xa0
-
-/* Compare Magnitude codes */
-#define FFB_CMP_MAGN_EDIT_BIT	0x80
-#define FFB_CMP_MAGN_ALWAYS	0x80
-#define FFB_CMP_MAGN_GT		0x81
-#define FFB_CMP_MAGN_EQ		0x82
-#define FFB_CMP_MAGN_GE		0x83
-#define FFB_CMP_MAGN_NEVER	0x84
-#define FFB_CMP_MAGN_LE		0x85
-#define FFB_CMP_MAGN_NE		0x86
-#define FFB_CMP_MAGN_LT		0x87
-#define FFB_CMP_MAGN_A_ALWAYS	0xc0
-#define FFB_CMP_MAGN_B_ALWAYS	0xa0
-
-/* User Control and Status */
-#define FFB_UCSR_FIFO_MASK	0x00000fff
-#define FFB_UCSR_PICK_NO_HIT	0x00020000
-#define FFB_UCSR_PICK_HIT	0x00030000
-#define FFB_UCSR_PICK_DISABLE	0x00080000
-#define FFB_UCSR_PICK_ENABLE	0x000c0000
-#define FFB_UCSR_FB_BUSY	0x01000000
-#define FFB_UCSR_RP_BUSY	0x02000000
-#define FFB_UCSR_ALL_BUSY	(FFB_UCSR_RP_BUSY|FFB_UCSR_FB_BUSY)
-#define FFB_UCSR_READ_ERR	0x40000000
-#define FFB_UCSR_FIFO_OVFL	0x80000000
-#define FFB_UCSR_ALL_ERRORS	(FFB_UCSR_READ_ERR|FFB_UCSR_FIFO_OVFL)
-
-/* Mode Enable Register */
-#define FFB_MER_EIRA		0x00000080 /* Enable read-ahead, increasing */
-#define FFB_MER_EDRA		0x000000c0 /* Enable read-ahead, decreasing */
-#define FFB_MER_DRA		0x00000040 /* No read-ahead */
-
-/* FBram Config 0 */
-#define FFB_FBCFG0_RFTIME	0xff800000
-#define FFB_FBCFG0_XMAX		0x007c0000
-#define FFB_FBCFG0_YMAX		0x0003ffc0
-#define FFB_FBCFG0_RES_MASK	0x00000030
-#define FFB_FBCFG0_RES_HIGH	0x00000030 /* 1920x1360 */
-#define FFB_FBCFG0_RES_STD	0x00000020 /* 1280x1024 */
-#define FFB_FBCFG0_RES_STEREO	0x00000010 /* 960x580 */
-#define FFB_FBCFG0_RES_PRTRAIT	0x00000000 /* 1280x2048 */
-#define FFB_FBCFG0_ITRLACE	0x00000000
-#define FFB_FBCFG0_SEQUENTIAL	0x00000008
-#define FFB_FBCFG0_DRENA	0x00000004
-#define FFB_FBCFG0_BPMODE	0x00000002
-#define FFB_FBCFG0_RFRSH_RST	0x00000001
-
-typedef struct _ffb_dac {
-	volatile unsigned int	cfg;
-	volatile unsigned int	cfgdata;
-	volatile unsigned int	cur;
-	volatile unsigned int	curdata;
-} ffb_dac, *ffb_dacPtr;
-
-/* Writing 2 32-bit registers at a time using 64-bit stores. -DaveM */
-#if defined(__GNUC__) && defined(USE_VIS)
-/* 64-bit register writing support.
- * Note: "lo" means "low address".
- */
-#define FFB_WRITE64_COMMON(__regp, __lo32, __hi32, REG0, REG1) \
-do {	__extension__ register unsigned int __r0 __asm__(""#REG0); \
-	__extension__ register unsigned int __r1 __asm__(""#REG1); \
-	__r0 = (__lo32); \
-	__r1 = (__hi32); \
-	__asm__ __volatile__ ("sllx\t%0, 32, %%g1\n\t" \
-			      "srl\t%1, 0, %1\n\t" \
-			      "or\t%%g1, %1, %%g1\n\t" \
-			      "stx\t%%g1, %2" \
-	 : : "r" (__r0), "r" (__r1), "m" (*(__regp)) : "g1"); \
-} while(0)
-
-#define FFB_WRITE64P(__regp, __srcp) \
-do {	__asm__ __volatile__ ("ldx\t%0, %%g2;" \
-			      "stx\t%%g2, %1" \
-	 : : "m" (*(__srcp)), "m" (*(__regp)) \
-         : "g2"); \
-} while(0)			      
-
-#define FFB_WRITE64(__regp, __lo32, __hi32) \
-	FFB_WRITE64_COMMON(__regp, __lo32, __hi32, g2, g3)
-#define FFB_WRITE64_2(__regp, __lo32, __hi32) \
-	FFB_WRITE64_COMMON(__regp, __lo32, __hi32, g4, g5)
-#define FFB_WRITE64_3(__regp, __lo32, __hi32) \
-	FFB_WRITE64_COMMON(__regp, __lo32, __hi32, o4, o5)
-
-#else /* Do not use 64-bit writes. */
-
-#define FFB_WRITE64(__regp, __lo32, __hi32) \
-do {	volatile unsigned int *__p = (__regp); \
-	*__p = (__lo32); \
-	*(__p + 1) = (__hi32); \
-} while(0)
-
-#define FFB_WRITE64P(__regp, __srcp) \
-do {	volatile unsigned int *__p = (__regp); \
-	unsigned int *__q = (__srcp); \
-	*__p = *__q; \
-	*(__p + 1) = *(__q + 1); \
-} while(0)
-
-#define FFB_WRITE64_2(__regp, __lo32, __hi32) \
-	FFB_WRITE64(__regp, __lo32, __hi32)
-#define FFB_WRITE64_3(__regp, __lo32, __hi32) \
-	FFB_WRITE64(__regp, __lo32, __hi32)
-#endif
-
-#endif /* FFBREGS_H */
diff --git a/src/mesa/drivers/dri/gamma/Makefile b/src/mesa/drivers/dri/gamma/Makefile
deleted file mode 100644
index 09df1578fc..0000000000
--- a/src/mesa/drivers/dri/gamma/Makefile
+++ /dev/null
@@ -1,34 +0,0 @@
-# src/mesa/drivers/dri/gamma/Makefile
-
-TOP = ../../../../..
-include $(TOP)/configs/current
-
-LIBNAME = gamma_dri.so
-
-# Not yet
-# MINIGLX_SOURCES = server/gamma_dri.c 
-
-DRIVER_SOURCES = \
-	gamma_context.c \
-	gamma_dd.c \
-	gamma_inithw.c \
-	gamma_lock.c \
-	gamma_render.c \
-	gamma_screen.c \
-	gamma_span.c \
-	gamma_state.c \
-	gamma_tex.c \
-	gamma_texmem.c \
-	gamma_texstate.c \
-	gamma_tris.c \
-	gamma_vb.c \
-	gamma_xmesa.c
-
-C_SOURCES = \
-	$(COMMON_SOURCES) \
-	$(DRIVER_SOURCES)
-
-ASM_SOURCES = 
-
-include ../Makefile.template
-
diff --git a/src/mesa/drivers/dri/gamma/gamma_client.h b/src/mesa/drivers/dri/gamma/gamma_client.h
deleted file mode 100644
index 6dcf2e9438..0000000000
--- a/src/mesa/drivers/dri/gamma/gamma_client.h
+++ /dev/null
@@ -1,6184 +0,0 @@
-/* Automaticallly generated -- do not edit */
-#ifndef _GLINT_CLIENT_H_
-#define _GLINT_CLIENT_H_
-/* **********************************************************************/
-/* START OF glint_extra.h INCLUSION                                     */
-/* **********************************************************************/
-
-/* glint_extra.h
- * Created: Fri Apr  2 23:32:05 1999 by faith@precisioninsight.com
- * Revised: Fri Apr  2 23:33:00 1999 by faith@precisioninsight.com
- *
- * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
- * All rights reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- * 
- * 
- */
-
-#define AreaStippleEnable          0x00001
-#define LineStippleEnable          0x00002
-#define GResetLineStipple          0x00004
-#define FastFillEnable             0x00008
-#define PrimitiveLine              0x00000
-#define PrimitiveTrapezoid         0x00040
-#define PrimitivePoint             0x00080
-#define PrimitiveRectangle         0x000C0
-#define AntialiasEnable            0x00100
-#define AntialiasingQuality        0x00200
-#define UsePointTable              0x00400
-#define SyncOnBitMask              0x00800
-#define SyncOnHostData             0x01000
-#define TextureEnable              0x02000
-#define FogEnable                  0x04000
-#define CoverageEnable             0x08000
-#define SubPixelCorrectionEnable   0x10000
-#define SpanOperation              0x40000
-
-
-/* **********************************************************************/
-/* END OF glint_extra.h INCLUSION                                       */
-/* **********************************************************************/
-
-
-#define GlintResetStatus                              0x0000
-#define GlintResetStatusReg                                0
-#define GlintResetStatusOff                           0x0000
-#define GlintResetStatusSec                           0x0000
-#define GlintResetStatusSecReg                        2
-#define GlintResetStatusSecOff                        0x0000
-
-#define GlintIntEnable                                0x0008
-#define GlintIntEnableReg                                  0
-#define GlintIntEnableOff                             0x0008
-#define GlintIntEnableSec                             0x0008
-#define GlintIntEnableSecReg                          2
-#define GlintIntEnableSecOff                          0x0008
-
-#define GlintIntFlags                                 0x0010
-#define GlintIntFlagsReg                                   0
-#define GlintIntFlagsOff                              0x0010
-#define GlintIntFlagsSec                              0x0010
-#define GlintIntFlagsSecReg                           2
-#define GlintIntFlagsSecOff                           0x0010
-
-#define GlintInFIFOSpace                              0x0018
-#define GlintInFIFOSpaceReg                                0
-#define GlintInFIFOSpaceOff                           0x0018
-#define GlintInFIFOSpaceSec                           0x0018
-#define GlintInFIFOSpaceSecReg                        2
-#define GlintInFIFOSpaceSecOff                        0x0018
-
-#define GlintOutFIFOWords                             0x0020
-#define GlintOutFIFOWordsReg                               0
-#define GlintOutFIFOWordsOff                          0x0020
-#define GlintOutFIFOWordsSec                          0x0020
-#define GlintOutFIFOWordsSecReg                       2
-#define GlintOutFIFOWordsSecOff                       0x0020
-
-#define GlintDMAAddress                               0x0028
-#define GlintDMAAddressReg                                 0
-#define GlintDMAAddressOff                            0x0028
-#define GlintDMAAddressSec                            0x0028
-#define GlintDMAAddressSecReg                         2
-#define GlintDMAAddressSecOff                         0x0028
-
-#define GlintDMACount                                 0x0030
-#define GlintDMACountReg                                   0
-#define GlintDMACountOff                              0x0030
-#define GlintDMACountSec                              0x0030
-#define GlintDMACountSecReg                           2
-#define GlintDMACountSecOff                           0x0030
-
-#define GlintErrorFlags                               0x0038
-#define GlintErrorFlagsReg                                 0
-#define GlintErrorFlagsOff                            0x0038
-#define GlintErrorFlagsSec                            0x0038
-#define GlintErrorFlagsSecReg                         2
-#define GlintErrorFlagsSecOff                         0x0038
-
-#define GlintVClkCtl                                  0x0040
-#define GlintVClkCtlReg                                    0
-#define GlintVClkCtlOff                               0x0040
-#define GlintVClkCtlSec                               0x0040
-#define GlintVClkCtlSecReg                            2
-#define GlintVClkCtlSecOff                            0x0040
-
-#define GlintTestRegister                             0x0048
-#define GlintTestRegisterReg                               0
-#define GlintTestRegisterOff                          0x0048
-#define GlintTestRegisterSec                          0x0048
-#define GlintTestRegisterSecReg                       2
-#define GlintTestRegisterSecOff                       0x0048
-
-#define GlintAperture0                                0x0050
-#define GlintAperture0Reg                                  0
-#define GlintAperture0Off                             0x0050
-#define GlintAperture0Sec                             0x0050
-#define GlintAperture0SecReg                          2
-#define GlintAperture0SecOff                          0x0050
-
-#define GlintAperture1                                0x0058
-#define GlintAperture1Reg                                  0
-#define GlintAperture1Off                             0x0058
-#define GlintAperture1Sec                             0x0058
-#define GlintAperture1SecReg                          2
-#define GlintAperture1SecOff                          0x0058
-
-#define GlintDMAControl                               0x0060
-#define GlintDMAControlReg                                 0
-#define GlintDMAControlOff                            0x0060
-#define GlintDMAControlSec                            0x0060
-#define GlintDMAControlSecReg                         2
-#define GlintDMAControlSecOff                         0x0060
-
-#define GlintFIFODis                                  0x0068
-#define GlintFIFODisReg                                    0
-#define GlintFIFODisOff                               0x0068
-#define GlintFIFODisSec                               0x0068
-#define GlintFIFODisSecReg                            2
-#define GlintFIFODisSecOff                            0x0068
-
-#define GlintLBMemoryCtl                              0x1000
-#define GlintLBMemoryCtlReg                                1
-#define GlintLBMemoryCtlOff                           0x0000
-#define GlintLBMemoryCtlSec                           0x1000
-#define GlintLBMemoryCtlSecReg                        3
-#define GlintLBMemoryCtlSecOff                        0x0000
-
-#define GlintLBMemoryEDO                              0x1008
-#define GlintLBMemoryEDOReg                                1
-#define GlintLBMemoryEDOOff                           0x0008
-#define GlintLBMemoryEDOSec                           0x1008
-#define GlintLBMemoryEDOSecReg                        3
-#define GlintLBMemoryEDOSecOff                        0x0008
-
-#define GlintFBMemoryCtl                              0x1800
-#define GlintFBMemoryCtlReg                                1
-#define GlintFBMemoryCtlOff                           0x0800
-#define GlintFBMemoryCtlSec                           0x1800
-#define GlintFBMemoryCtlSecReg                        3
-#define GlintFBMemoryCtlSecOff                        0x0800
-
-#define GlintFBModeSel                                0x1808
-#define GlintFBModeSelReg                                  1
-#define GlintFBModeSelOff                             0x0808
-#define GlintFBModeSelSec                             0x1808
-#define GlintFBModeSelSecReg                          3
-#define GlintFBModeSelSecOff                          0x0808
-
-#define GlintFBGCWrMask                               0x1810
-#define GlintFBGCWrMaskReg                                 1
-#define GlintFBGCWrMaskOff                            0x0810
-#define GlintFBGCWrMaskSec                            0x1810
-#define GlintFBGCWrMaskSecReg                         3
-#define GlintFBGCWrMaskSecOff                         0x0810
-
-#define GlintFBGCColorLower                           0x1818
-#define GlintFBGCColorLowerReg                             1
-#define GlintFBGCColorLowerOff                        0x0818
-#define GlintFBGCColorLowerSec                        0x1818
-#define GlintFBGCColorLowerSecReg                     3
-#define GlintFBGCColorLowerSecOff                     0x0818
-
-#define GlintFBTXMemCtl                               0x1820
-#define GlintFBTXMemCtlReg                                 1
-#define GlintFBTXMemCtlOff                            0x0820
-#define GlintFBTXMemCtlSec                            0x1820
-#define GlintFBTXMemCtlSecReg                         3
-#define GlintFBTXMemCtlSecOff                         0x0820
-
-#define GlintFBWrMask                                 0x1830
-#define GlintFBWrMaskReg                                   1
-#define GlintFBWrMaskOff                              0x0830
-#define GlintFBWrMaskSec                              0x1830
-#define GlintFBWrMaskSecReg                           3
-#define GlintFBWrMaskSecOff                           0x0830
-
-#define GlintFBGCColorUpper                           0x1838
-#define GlintFBGCColorUpperReg                             1
-#define GlintFBGCColorUpperOff                        0x0838
-#define GlintFBGCColorUpperSec                        0x1838
-#define GlintFBGCColorUpperSecReg                     3
-#define GlintFBGCColorUpperSecOff                     0x0838
-
-#define GlintVTGHLimit                                0x3000
-#define GlintVTGHLimitReg                                  1
-#define GlintVTGHLimitOff                             0x2000
-#define GlintVTGHLimitSec                             0x3000
-#define GlintVTGHLimitSecReg                          3
-#define GlintVTGHLimitSecOff                          0x2000
-
-#define GlintVTGHSyncStart                            0x3008
-#define GlintVTGHSyncStartReg                              1
-#define GlintVTGHSyncStartOff                         0x2008
-#define GlintVTGHSyncStartSec                         0x3008
-#define GlintVTGHSyncStartSecReg                      3
-#define GlintVTGHSyncStartSecOff                      0x2008
-
-#define GlintVTGHSyncEnd                              0x3010
-#define GlintVTGHSyncEndReg                                1
-#define GlintVTGHSyncEndOff                           0x2010
-#define GlintVTGHSyncEndSec                           0x3010
-#define GlintVTGHSyncEndSecReg                        3
-#define GlintVTGHSyncEndSecOff                        0x2010
-
-#define GlintVTGHBlankEnd                             0x3018
-#define GlintVTGHBlankEndReg                               1
-#define GlintVTGHBlankEndOff                          0x2018
-#define GlintVTGHBlankEndSec                          0x3018
-#define GlintVTGHBlankEndSecReg                       3
-#define GlintVTGHBlankEndSecOff                       0x2018
-
-#define GlintVTGVLimit                                0x3020
-#define GlintVTGVLimitReg                                  1
-#define GlintVTGVLimitOff                             0x2020
-#define GlintVTGVLimitSec                             0x3020
-#define GlintVTGVLimitSecReg                          3
-#define GlintVTGVLimitSecOff                          0x2020
-
-#define GlintVTGVSyncStart                            0x3028
-#define GlintVTGVSyncStartReg                              1
-#define GlintVTGVSyncStartOff                         0x2028
-#define GlintVTGVSyncStartSec                         0x3028
-#define GlintVTGVSyncStartSecReg                      3
-#define GlintVTGVSyncStartSecOff                      0x2028
-
-#define GlintVTGVSyncEnd                              0x3030
-#define GlintVTGVSyncEndReg                                1
-#define GlintVTGVSyncEndOff                           0x2030
-#define GlintVTGVSyncEndSec                           0x3030
-#define GlintVTGVSyncEndSecReg                        3
-#define GlintVTGVSyncEndSecOff                        0x2030
-
-#define GlintVTGVBlankEnd                             0x3038
-#define GlintVTGVBlankEndReg                               1
-#define GlintVTGVBlankEndOff                          0x2038
-#define GlintVTGVBlankEndSec                          0x3038
-#define GlintVTGVBlankEndSecReg                       3
-#define GlintVTGVBlankEndSecOff                       0x2038
-
-#define GlintVTGHGateStart                            0x3040
-#define GlintVTGHGateStartReg                              1
-#define GlintVTGHGateStartOff                         0x2040
-#define GlintVTGHGateStartSec                         0x3040
-#define GlintVTGHGateStartSecReg                      3
-#define GlintVTGHGateStartSecOff                      0x2040
-
-#define GlintVTGHGateEnd                              0x3048
-#define GlintVTGHGateEndReg                                1
-#define GlintVTGHGateEndOff                           0x2048
-#define GlintVTGHGateEndSec                           0x3048
-#define GlintVTGHGateEndSecReg                        3
-#define GlintVTGHGateEndSecOff                        0x2048
-
-#define GlintVTGVGateStart                            0x3050
-#define GlintVTGVGateStartReg                              1
-#define GlintVTGVGateStartOff                         0x2050
-#define GlintVTGVGateStartSec                         0x3050
-#define GlintVTGVGateStartSecReg                      3
-#define GlintVTGVGateStartSecOff                      0x2050
-
-#define GlintVTGVGateEnd                              0x3058
-#define GlintVTGVGateEndReg                                1
-#define GlintVTGVGateEndOff                           0x2058
-#define GlintVTGVGateEndSec                           0x3058
-#define GlintVTGVGateEndSecReg                        3
-#define GlintVTGVGateEndSecOff                        0x2058
-
-#define GlintVTGPolarity                              0x3060
-#define GlintVTGPolarityReg                                1
-#define GlintVTGPolarityOff                           0x2060
-#define GlintVTGPolaritySec                           0x3060
-#define GlintVTGPolaritySecReg                        3
-#define GlintVTGPolaritySecOff                        0x2060
-
-#define GlintVTGFrameRowAddr                          0x3068
-#define GlintVTGFrameRowAddrReg                            1
-#define GlintVTGFrameRowAddrOff                       0x2068
-#define GlintVTGFrameRowAddrSec                       0x3068
-#define GlintVTGFrameRowAddrSecReg                    3
-#define GlintVTGFrameRowAddrSecOff                    0x2068
-
-#define GlintVTGVLineNumber                           0x3070
-#define GlintVTGVLineNumberReg                             1
-#define GlintVTGVLineNumberOff                        0x2070
-#define GlintVTGVLineNumberSec                        0x3070
-#define GlintVTGVLineNumberSecReg                     3
-#define GlintVTGVLineNumberSecOff                     0x2070
-
-#define GlintVTGSerialClk                             0x3078
-#define GlintVTGSerialClkReg                               1
-#define GlintVTGSerialClkOff                          0x2078
-#define GlintVTGSerialClkSec                          0x3078
-#define GlintVTGSerialClkSecReg                       3
-#define GlintVTGSerialClkSecOff                       0x2078
-
-#define GlintVTGModeCtl                               0x3080
-#define GlintVTGModeCtlReg                                 1
-#define GlintVTGModeCtlOff                            0x2080
-#define GlintVTGModeCtlSec                            0x3080
-#define GlintVTGModeCtlSecReg                         3
-#define GlintVTGModeCtlSecOff                         0x2080
-
-#define GlintOutputFIFO                               0x2000
-#define GlintOutputFIFOReg                                 1
-#define GlintOutputFIFOOff                            0x1000
-#define GlintOutputFIFOSec                            0x2000
-#define GlintOutputFIFOSecReg                         3
-#define GlintOutputFIFOSecOff                         0x1000
-
-#define GlintGInFIFOSpace                             0x0018
-#define GlintGInFIFOSpaceReg                               0
-#define GlintGInFIFOSpaceOff                          0x0018
-
-#define GlintGDMAAddress                              0x0028
-#define GlintGDMAAddressReg                                0
-#define GlintGDMAAddressOff                           0x0028
-
-#define GlintGDMACount                                0x0030
-#define GlintGDMACountReg                                  0
-#define GlintGDMACountOff                             0x0030
-
-#define GlintGDMAControl                              0x0060
-#define GlintGDMAControlReg                                0
-#define GlintGDMAControlOff                           0x0060
-
-#define GlintGOutDMA                                  0x0080
-#define GlintGOutDMAReg                                    0
-#define GlintGOutDMAOff                               0x0080
-
-#define GlintGOutDMACount                             0x0088
-#define GlintGOutDMACountReg                               0
-#define GlintGOutDMACountOff                          0x0088
-
-#define GlintGResetStatus                             0x0800
-#define GlintGResetStatusReg                               0
-#define GlintGResetStatusOff                          0x0800
-
-#define GlintGIntEnable                               0x0808
-#define GlintGIntEnableReg                                 0
-#define GlintGIntEnableOff                            0x0808
-
-#define GlintGIntFlags                                0x0810
-#define GlintGIntFlagsReg                                  0
-#define GlintGIntFlagsOff                             0x0810
-
-#define GlintGErrorFlags                              0x0838
-#define GlintGErrorFlagsReg                                0
-#define GlintGErrorFlagsOff                           0x0838
-
-#define GlintGTestRegister                            0x0848
-#define GlintGTestRegisterReg                              0
-#define GlintGTestRegisterOff                         0x0848
-
-#define GlintGFIFODis                                 0x0868
-#define GlintGFIFODisReg                                   0
-#define GlintGFIFODisOff                              0x0868
-
-#define GlintGChipConfig                              0x0870
-#define GlintGChipConfigReg                                0
-#define GlintGChipConfigOff                           0x0870
-
-#define GlintGCSRAperture                             0x0878
-#define GlintGCSRApertureReg                               0
-#define GlintGCSRApertureOff                          0x0878
-
-#define GlintGPageTableAddr                           0x0c00
-#define GlintGPageTableAddrReg                             0
-#define GlintGPageTableAddrOff                        0x0c00
-
-#define GlintGPageTableLength                         0x0c08
-#define GlintGPageTableLengthReg                           0
-#define GlintGPageTableLengthOff                      0x0c08
-
-#define GlintGDelayTimer                              0x0c38
-#define GlintGDelayTimerReg                                0
-#define GlintGDelayTimerOff                           0x0c38
-
-#define GlintGCommandMode                             0x0c40
-#define GlintGCommandModeReg                               0
-#define GlintGCommandModeOff                          0x0c40
-
-#define GlintGCommandIntEnable                        0x0c48
-#define GlintGCommandIntEnableReg                          0
-#define GlintGCommandIntEnableOff                     0x0c48
-
-#define GlintGCommandIntFlags                         0x0c50
-#define GlintGCommandIntFlagsReg                           0
-#define GlintGCommandIntFlagsOff                      0x0c50
-
-#define GlintGCommandErrorFlags                       0x0c58
-#define GlintGCommandErrorFlagsReg                         0
-#define GlintGCommandErrorFlagsOff                    0x0c58
-
-#define GlintGCommandStatus                           0x0c60
-#define GlintGCommandStatusReg                             0
-#define GlintGCommandStatusOff                        0x0c60
-
-#define GlintGCommandFaultingAddr                     0x0c68
-#define GlintGCommandFaultingAddrReg                       0
-#define GlintGCommandFaultingAddrOff                  0x0c68
-
-#define GlintGVertexFaultingAddr                      0x0c70
-#define GlintGVertexFaultingAddrReg                        0
-#define GlintGVertexFaultingAddrOff                   0x0c70
-
-#define GlintGWriteFaultingAddr                       0x0c88
-#define GlintGWriteFaultingAddrReg                         0
-#define GlintGWriteFaultingAddrOff                    0x0c88
-
-#define GlintGFeedbackSelectCount                     0x0c98
-#define GlintGFeedbackSelectCountReg                       0
-#define GlintGFeedbackSelectCountOff                  0x0c98
-
-#define GlintGGammaProcessorMode                      0x0cb8
-#define GlintGGammaProcessorModeReg                        0
-#define GlintGGammaProcessorModeOff                   0x0cb8
-
-#define GlintGVGAShadow                               0x0d00
-#define GlintGVGAShadowReg                                 0
-#define GlintGVGAShadowOff                            0x0d00
-
-#define GlintGMultGLINTAperture                       0x0d08
-#define GlintGMultGLINTApertureReg                         0
-#define GlintGMultGLINTApertureOff                    0x0d08
-
-#define GlintGMultGLINT1                              0x0d10
-#define GlintGMultGLINT1Reg                                0
-#define GlintGMultGLINT1Off                           0x0d10
-
-#define GlintGMultGLINT2                              0x0d18
-#define GlintGMultGLINT2Reg                                0
-#define GlintGMultGLINT2Off                           0x0d18
-
-#define GlintStartXDom                                0x8000
-#define GlintStartXDomTag                             0x0000
-#define GlintStartXDomReg                                  1
-#define GlintStartXDomOff                             0x7000
-#define GlintStartXDomSec                             0x8000
-#define GlintStartXDomSecReg                          3
-#define GlintStartXDomSecOff                          0x7000
-
-#define GlintdXDom                                    0x8008
-#define GlintdXDomTag                                 0x0001
-#define GlintdXDomReg                                      1
-#define GlintdXDomOff                                 0x7008
-#define GlintdXDomSec                                 0x8008
-#define GlintdXDomSecReg                              3
-#define GlintdXDomSecOff                              0x7008
-
-#define GlintStartXSub                                0x8010
-#define GlintStartXSubTag                             0x0002
-#define GlintStartXSubReg                                  1
-#define GlintStartXSubOff                             0x7010
-#define GlintStartXSubSec                             0x8010
-#define GlintStartXSubSecReg                          3
-#define GlintStartXSubSecOff                          0x7010
-
-#define GlintdXSub                                    0x8018
-#define GlintdXSubTag                                 0x0003
-#define GlintdXSubReg                                      1
-#define GlintdXSubOff                                 0x7018
-#define GlintdXSubSec                                 0x8018
-#define GlintdXSubSecReg                              3
-#define GlintdXSubSecOff                              0x7018
-
-#define GlintStartY                                   0x8020
-#define GlintStartYTag                                0x0004
-#define GlintStartYReg                                     1
-#define GlintStartYOff                                0x7020
-#define GlintStartYSec                                0x8020
-#define GlintStartYSecReg                             3
-#define GlintStartYSecOff                             0x7020
-
-#define GlintdY                                       0x8028
-#define GlintdYTag                                    0x0005
-#define GlintdYReg                                         1
-#define GlintdYOff                                    0x7028
-#define GlintdYSec                                    0x8028
-#define GlintdYSecReg                                 3
-#define GlintdYSecOff                                 0x7028
-
-#define GlintGLINTCount                               0x8030
-#define GlintGLINTCountTag                            0x0006
-#define GlintGLINTCountReg                                 1
-#define GlintGLINTCountOff                            0x7030
-#define GlintGLINTCountSec                            0x8030
-#define GlintGLINTCountSecReg                         3
-#define GlintGLINTCountSecOff                         0x7030
-
-#define GlintRender                                   0x8038
-#define GlintRenderTag                                0x0007
-#define GlintRenderReg                                     1
-#define GlintRenderOff                                0x7038
-#define GlintRenderSec                                0x8038
-#define GlintRenderSecReg                             3
-#define GlintRenderSecOff                             0x7038
-
-#define GlintContinueNewLine                          0x8040
-#define GlintContinueNewLineTag                       0x0008
-#define GlintContinueNewLineReg                            1
-#define GlintContinueNewLineOff                       0x7040
-#define GlintContinueNewLineSec                       0x8040
-#define GlintContinueNewLineSecReg                    3
-#define GlintContinueNewLineSecOff                    0x7040
-
-#define GlintContinueNewDom                           0x8048
-#define GlintContinueNewDomTag                        0x0009
-#define GlintContinueNewDomReg                             1
-#define GlintContinueNewDomOff                        0x7048
-#define GlintContinueNewDomSec                        0x8048
-#define GlintContinueNewDomSecReg                     3
-#define GlintContinueNewDomSecOff                     0x7048
-
-#define GlintContinueNewSub                           0x8050
-#define GlintContinueNewSubTag                        0x000a
-#define GlintContinueNewSubReg                             1
-#define GlintContinueNewSubOff                        0x7050
-#define GlintContinueNewSubSec                        0x8050
-#define GlintContinueNewSubSecReg                     3
-#define GlintContinueNewSubSecOff                     0x7050
-
-#define GlintContinue                                 0x8058
-#define GlintContinueTag                              0x000b
-#define GlintContinueReg                                   1
-#define GlintContinueOff                              0x7058
-#define GlintContinueSec                              0x8058
-#define GlintContinueSecReg                           3
-#define GlintContinueSecOff                           0x7058
-
-#define GlintFlushSpan                                0x8060
-#define GlintFlushSpanTag                             0x000c
-#define GlintFlushSpanReg                                  1
-#define GlintFlushSpanOff                             0x7060
-#define GlintFlushSpanSec                             0x8060
-#define GlintFlushSpanSecReg                          3
-#define GlintFlushSpanSecOff                          0x7060
-
-#define GlintBitMaskPattern                           0x8068
-#define GlintBitMaskPatternTag                        0x000d
-#define GlintBitMaskPatternReg                             1
-#define GlintBitMaskPatternOff                        0x7068
-#define GlintBitMaskPatternSec                        0x8068
-#define GlintBitMaskPatternSecReg                     3
-#define GlintBitMaskPatternSecOff                     0x7068
-
-#define GlintPointTable0                              0x8080
-#define GlintPointTable0Tag                           0x0010
-#define GlintPointTable0Reg                                1
-#define GlintPointTable0Off                           0x7080
-#define GlintPointTable0Sec                           0x8080
-#define GlintPointTable0SecReg                        3
-#define GlintPointTable0SecOff                        0x7080
-
-#define GlintPointTable1                              0x8088
-#define GlintPointTable1Tag                           0x0011
-#define GlintPointTable1Reg                                1
-#define GlintPointTable1Off                           0x7088
-#define GlintPointTable1Sec                           0x8088
-#define GlintPointTable1SecReg                        3
-#define GlintPointTable1SecOff                        0x7088
-
-#define GlintPointTable2                              0x8090
-#define GlintPointTable2Tag                           0x0012
-#define GlintPointTable2Reg                                1
-#define GlintPointTable2Off                           0x7090
-#define GlintPointTable2Sec                           0x8090
-#define GlintPointTable2SecReg                        3
-#define GlintPointTable2SecOff                        0x7090
-
-#define GlintPointTable3                              0x8098
-#define GlintPointTable3Tag                           0x0013
-#define GlintPointTable3Reg                                1
-#define GlintPointTable3Off                           0x7098
-#define GlintPointTable3Sec                           0x8098
-#define GlintPointTable3SecReg                        3
-#define GlintPointTable3SecOff                        0x7098
-
-#define GlintRasterizerMode                           0x80a0
-#define GlintRasterizerModeTag                        0x0014
-#define GlintRasterizerModeReg                             1
-#define GlintRasterizerModeOff                        0x70a0
-#define GlintRasterizerModeSec                        0x80a0
-#define GlintRasterizerModeSecReg                     3
-#define GlintRasterizerModeSecOff                     0x70a0
-
-#define GlintYLimits                                  0x80a8
-#define GlintYLimitsTag                               0x0015
-#define GlintYLimitsReg                                    1
-#define GlintYLimitsOff                               0x70a8
-#define GlintYLimitsSec                               0x80a8
-#define GlintYLimitsSecReg                            3
-#define GlintYLimitsSecOff                            0x70a8
-
-#define GlintScanLineOwnership                        0x80b0
-#define GlintScanLineOwnershipTag                     0x0016
-#define GlintScanLineOwnershipReg                          1
-#define GlintScanLineOwnershipOff                     0x70b0
-#define GlintScanLineOwnershipSec                     0x80b0
-#define GlintScanLineOwnershipSecReg                  3
-#define GlintScanLineOwnershipSecOff                  0x70b0
-
-#define GlintWaitForCompletion                        0x80b8
-#define GlintWaitForCompletionTag                     0x0017
-#define GlintWaitForCompletionReg                          1
-#define GlintWaitForCompletionOff                     0x70b8
-#define GlintWaitForCompletionSec                     0x80b8
-#define GlintWaitForCompletionSecReg                  3
-#define GlintWaitForCompletionSecOff                  0x70b8
-
-#define GlintPixelSize                                0x80c0
-#define GlintPixelSizeTag                             0x0018
-#define GlintPixelSizeReg                                  1
-#define GlintPixelSizeOff                             0x70c0
-#define GlintPixelSizeSec                             0x80c0
-#define GlintPixelSizeSecReg                          3
-#define GlintPixelSizeSecOff                          0x70c0
-
-#define GlintScissorMode                              0x8180
-#define GlintScissorModeTag                           0x0030
-#define GlintScissorModeReg                                1
-#define GlintScissorModeOff                           0x7180
-#define GlintScissorModeSec                           0x8180
-#define GlintScissorModeSecReg                        3
-#define GlintScissorModeSecOff                        0x7180
-
-#define GlintScissorMinXY                             0x8188
-#define GlintScissorMinXYTag                          0x0031
-#define GlintScissorMinXYReg                               1
-#define GlintScissorMinXYOff                          0x7188
-#define GlintScissorMinXYSec                          0x8188
-#define GlintScissorMinXYSecReg                       3
-#define GlintScissorMinXYSecOff                       0x7188
-
-#define GlintScissorMaxXY                             0x8190
-#define GlintScissorMaxXYTag                          0x0032
-#define GlintScissorMaxXYReg                               1
-#define GlintScissorMaxXYOff                          0x7190
-#define GlintScissorMaxXYSec                          0x8190
-#define GlintScissorMaxXYSecReg                       3
-#define GlintScissorMaxXYSecOff                       0x7190
-
-#define GlintScreenSize                               0x8198
-#define GlintScreenSizeTag                            0x0033
-#define GlintScreenSizeReg                                 1
-#define GlintScreenSizeOff                            0x7198
-#define GlintScreenSizeSec                            0x8198
-#define GlintScreenSizeSecReg                         3
-#define GlintScreenSizeSecOff                         0x7198
-
-#define GlintAreaStippleMode                          0x81a0
-#define GlintAreaStippleModeTag                       0x0034
-#define GlintAreaStippleModeReg                            1
-#define GlintAreaStippleModeOff                       0x71a0
-#define GlintAreaStippleModeSec                       0x81a0
-#define GlintAreaStippleModeSecReg                    3
-#define GlintAreaStippleModeSecOff                    0x71a0
-
-#define GlintLineStippleMode                          0x81a8
-#define GlintLineStippleModeTag                       0x0035
-#define GlintLineStippleModeReg                            1
-#define GlintLineStippleModeOff                       0x71a8
-#define GlintLineStippleModeSec                       0x81a8
-#define GlintLineStippleModeSecReg                    3
-#define GlintLineStippleModeSecOff                    0x71a8
-
-#define GlintLoadLineStippleCounters                  0x81b0
-#define GlintLoadLineStippleCountersTag               0x0036
-#define GlintLoadLineStippleCountersReg                    1
-#define GlintLoadLineStippleCountersOff               0x71b0
-#define GlintLoadLineStippleCountersSec               0x81b0
-#define GlintLoadLineStippleCountersSecReg            3
-#define GlintLoadLineStippleCountersSecOff            0x71b0
-
-#define GlintUpdateLineStippleCounters                0x81b8
-#define GlintUpdateLineStippleCountersTag             0x0037
-#define GlintUpdateLineStippleCountersReg                  1
-#define GlintUpdateLineStippleCountersOff             0x71b8
-#define GlintUpdateLineStippleCountersSec             0x81b8
-#define GlintUpdateLineStippleCountersSecReg          3
-#define GlintUpdateLineStippleCountersSecOff          0x71b8
-
-#define GlintSaveLineStippleState                     0x81c0
-#define GlintSaveLineStippleStateTag                  0x0038
-#define GlintSaveLineStippleStateReg                       1
-#define GlintSaveLineStippleStateOff                  0x71c0
-#define GlintSaveLineStippleStateSec                  0x81c0
-#define GlintSaveLineStippleStateSecReg               3
-#define GlintSaveLineStippleStateSecOff               0x71c0
-
-#define GlintWindowOrigin                             0x81c8
-#define GlintWindowOriginTag                          0x0039
-#define GlintWindowOriginReg                               1
-#define GlintWindowOriginOff                          0x71c8
-#define GlintWindowOriginSec                          0x81c8
-#define GlintWindowOriginSecReg                       3
-#define GlintWindowOriginSecOff                       0x71c8
-
-#define GlintAreaStipplePattern0                      0x8200
-#define GlintAreaStipplePattern0Tag                   0x0040
-#define GlintAreaStipplePattern0Reg                        1
-#define GlintAreaStipplePattern0Off                   0x7200
-#define GlintAreaStipplePattern0Sec                   0x8200
-#define GlintAreaStipplePattern0SecReg                3
-#define GlintAreaStipplePattern0SecOff                0x7200
-
-#define GlintAreaStipplePattern1                      0x8208
-#define GlintAreaStipplePattern1Tag                   0x0041
-#define GlintAreaStipplePattern1Reg                        1
-#define GlintAreaStipplePattern1Off                   0x7208
-#define GlintAreaStipplePattern1Sec                   0x8208
-#define GlintAreaStipplePattern1SecReg                3
-#define GlintAreaStipplePattern1SecOff                0x7208
-
-#define GlintAreaStipplePattern2                      0x8210
-#define GlintAreaStipplePattern2Tag                   0x0042
-#define GlintAreaStipplePattern2Reg                        1
-#define GlintAreaStipplePattern2Off                   0x7210
-#define GlintAreaStipplePattern2Sec                   0x8210
-#define GlintAreaStipplePattern2SecReg                3
-#define GlintAreaStipplePattern2SecOff                0x7210
-
-#define GlintAreaStipplePattern3                      0x8218
-#define GlintAreaStipplePattern3Tag                   0x0043
-#define GlintAreaStipplePattern3Reg                        1
-#define GlintAreaStipplePattern3Off                   0x7218
-#define GlintAreaStipplePattern3Sec                   0x8218
-#define GlintAreaStipplePattern3SecReg                3
-#define GlintAreaStipplePattern3SecOff                0x7218
-
-#define GlintAreaStipplePattern4                      0x8220
-#define GlintAreaStipplePattern4Tag                   0x0044
-#define GlintAreaStipplePattern4Reg                        1
-#define GlintAreaStipplePattern4Off                   0x7220
-#define GlintAreaStipplePattern4Sec                   0x8220
-#define GlintAreaStipplePattern4SecReg                3
-#define GlintAreaStipplePattern4SecOff                0x7220
-
-#define GlintAreaStipplePattern5                      0x8228
-#define GlintAreaStipplePattern5Tag                   0x0045
-#define GlintAreaStipplePattern5Reg                        1
-#define GlintAreaStipplePattern5Off                   0x7228
-#define GlintAreaStipplePattern5Sec                   0x8228
-#define GlintAreaStipplePattern5SecReg                3
-#define GlintAreaStipplePattern5SecOff                0x7228
-
-#define GlintAreaStipplePattern6                      0x8230
-#define GlintAreaStipplePattern6Tag                   0x0046
-#define GlintAreaStipplePattern6Reg                        1
-#define GlintAreaStipplePattern6Off                   0x7230
-#define GlintAreaStipplePattern6Sec                   0x8230
-#define GlintAreaStipplePattern6SecReg                3
-#define GlintAreaStipplePattern6SecOff                0x7230
-
-#define GlintAreaStipplePattern7                      0x8238
-#define GlintAreaStipplePattern7Tag                   0x0047
-#define GlintAreaStipplePattern7Reg                        1
-#define GlintAreaStipplePattern7Off                   0x7238
-#define GlintAreaStipplePattern7Sec                   0x8238
-#define GlintAreaStipplePattern7SecReg                3
-#define GlintAreaStipplePattern7SecOff                0x7238
-
-#define GlintAreaStipplePattern8                      0x8240
-#define GlintAreaStipplePattern8Tag                   0x0048
-#define GlintAreaStipplePattern8Reg                        1
-#define GlintAreaStipplePattern8Off                   0x7240
-#define GlintAreaStipplePattern8Sec                   0x8240
-#define GlintAreaStipplePattern8SecReg                3
-#define GlintAreaStipplePattern8SecOff                0x7240
-
-#define GlintAreaStipplePattern9                      0x8248
-#define GlintAreaStipplePattern9Tag                   0x0049
-#define GlintAreaStipplePattern9Reg                        1
-#define GlintAreaStipplePattern9Off                   0x7248
-#define GlintAreaStipplePattern9Sec                   0x8248
-#define GlintAreaStipplePattern9SecReg                3
-#define GlintAreaStipplePattern9SecOff                0x7248
-
-#define GlintAreaStipplePattern10                     0x8250
-#define GlintAreaStipplePattern10Tag                  0x004a
-#define GlintAreaStipplePattern10Reg                       1
-#define GlintAreaStipplePattern10Off                  0x7250
-#define GlintAreaStipplePattern10Sec                  0x8250
-#define GlintAreaStipplePattern10SecReg               3
-#define GlintAreaStipplePattern10SecOff               0x7250
-
-#define GlintAreaStipplePattern11                     0x8258
-#define GlintAreaStipplePattern11Tag                  0x004b
-#define GlintAreaStipplePattern11Reg                       1
-#define GlintAreaStipplePattern11Off                  0x7258
-#define GlintAreaStipplePattern11Sec                  0x8258
-#define GlintAreaStipplePattern11SecReg               3
-#define GlintAreaStipplePattern11SecOff               0x7258
-
-#define GlintAreaStipplePattern12                     0x8260
-#define GlintAreaStipplePattern12Tag                  0x004c
-#define GlintAreaStipplePattern12Reg                       1
-#define GlintAreaStipplePattern12Off                  0x7260
-#define GlintAreaStipplePattern12Sec                  0x8260
-#define GlintAreaStipplePattern12SecReg               3
-#define GlintAreaStipplePattern12SecOff               0x7260
-
-#define GlintAreaStipplePattern13                     0x8268
-#define GlintAreaStipplePattern13Tag                  0x004d
-#define GlintAreaStipplePattern13Reg                       1
-#define GlintAreaStipplePattern13Off                  0x7268
-#define GlintAreaStipplePattern13Sec                  0x8268
-#define GlintAreaStipplePattern13SecReg               3
-#define GlintAreaStipplePattern13SecOff               0x7268
-
-#define GlintAreaStipplePattern14                     0x8270
-#define GlintAreaStipplePattern14Tag                  0x004e
-#define GlintAreaStipplePattern14Reg                       1
-#define GlintAreaStipplePattern14Off                  0x7270
-#define GlintAreaStipplePattern14Sec                  0x8270
-#define GlintAreaStipplePattern14SecReg               3
-#define GlintAreaStipplePattern14SecOff               0x7270
-
-#define GlintAreaStipplePattern15                     0x8278
-#define GlintAreaStipplePattern15Tag                  0x004f
-#define GlintAreaStipplePattern15Reg                       1
-#define GlintAreaStipplePattern15Off                  0x7278
-#define GlintAreaStipplePattern15Sec                  0x8278
-#define GlintAreaStipplePattern15SecReg               3
-#define GlintAreaStipplePattern15SecOff               0x7278
-
-#define GlintAreaStipplePattern16                     0x8280
-#define GlintAreaStipplePattern16Tag                  0x0050
-#define GlintAreaStipplePattern16Reg                       1
-#define GlintAreaStipplePattern16Off                  0x7280
-#define GlintAreaStipplePattern16Sec                  0x8280
-#define GlintAreaStipplePattern16SecReg               3
-#define GlintAreaStipplePattern16SecOff               0x7280
-
-#define GlintAreaStipplePattern17                     0x8288
-#define GlintAreaStipplePattern17Tag                  0x0051
-#define GlintAreaStipplePattern17Reg                       1
-#define GlintAreaStipplePattern17Off                  0x7288
-#define GlintAreaStipplePattern17Sec                  0x8288
-#define GlintAreaStipplePattern17SecReg               3
-#define GlintAreaStipplePattern17SecOff               0x7288
-
-#define GlintAreaStipplePattern18                     0x8290
-#define GlintAreaStipplePattern18Tag                  0x0052
-#define GlintAreaStipplePattern18Reg                       1
-#define GlintAreaStipplePattern18Off                  0x7290
-#define GlintAreaStipplePattern18Sec                  0x8290
-#define GlintAreaStipplePattern18SecReg               3
-#define GlintAreaStipplePattern18SecOff               0x7290
-
-#define GlintAreaStipplePattern19                     0x8298
-#define GlintAreaStipplePattern19Tag                  0x0053
-#define GlintAreaStipplePattern19Reg                       1
-#define GlintAreaStipplePattern19Off                  0x7298
-#define GlintAreaStipplePattern19Sec                  0x8298
-#define GlintAreaStipplePattern19SecReg               3
-#define GlintAreaStipplePattern19SecOff               0x7298
-
-#define GlintAreaStipplePattern20                     0x82a0
-#define GlintAreaStipplePattern20Tag                  0x0054
-#define GlintAreaStipplePattern20Reg                       1
-#define GlintAreaStipplePattern20Off                  0x72a0
-#define GlintAreaStipplePattern20Sec                  0x82a0
-#define GlintAreaStipplePattern20SecReg               3
-#define GlintAreaStipplePattern20SecOff               0x72a0
-
-#define GlintAreaStipplePattern21                     0x82a8
-#define GlintAreaStipplePattern21Tag                  0x0055
-#define GlintAreaStipplePattern21Reg                       1
-#define GlintAreaStipplePattern21Off                  0x72a8
-#define GlintAreaStipplePattern21Sec                  0x82a8
-#define GlintAreaStipplePattern21SecReg               3
-#define GlintAreaStipplePattern21SecOff               0x72a8
-
-#define GlintAreaStipplePattern22                     0x82b0
-#define GlintAreaStipplePattern22Tag                  0x0056
-#define GlintAreaStipplePattern22Reg                       1
-#define GlintAreaStipplePattern22Off                  0x72b0
-#define GlintAreaStipplePattern22Sec                  0x82b0
-#define GlintAreaStipplePattern22SecReg               3
-#define GlintAreaStipplePattern22SecOff               0x72b0
-
-#define GlintAreaStipplePattern23                     0x82b8
-#define GlintAreaStipplePattern23Tag                  0x0057
-#define GlintAreaStipplePattern23Reg                       1
-#define GlintAreaStipplePattern23Off                  0x72b8
-#define GlintAreaStipplePattern23Sec                  0x82b8
-#define GlintAreaStipplePattern23SecReg               3
-#define GlintAreaStipplePattern23SecOff               0x72b8
-
-#define GlintAreaStipplePattern24                     0x82c0
-#define GlintAreaStipplePattern24Tag                  0x0058
-#define GlintAreaStipplePattern24Reg                       1
-#define GlintAreaStipplePattern24Off                  0x72c0
-#define GlintAreaStipplePattern24Sec                  0x82c0
-#define GlintAreaStipplePattern24SecReg               3
-#define GlintAreaStipplePattern24SecOff               0x72c0
-
-#define GlintAreaStipplePattern25                     0x82c8
-#define GlintAreaStipplePattern25Tag                  0x0059
-#define GlintAreaStipplePattern25Reg                       1
-#define GlintAreaStipplePattern25Off                  0x72c8
-#define GlintAreaStipplePattern25Sec                  0x82c8
-#define GlintAreaStipplePattern25SecReg               3
-#define GlintAreaStipplePattern25SecOff               0x72c8
-
-#define GlintAreaStipplePattern26                     0x82d0
-#define GlintAreaStipplePattern26Tag                  0x005a
-#define GlintAreaStipplePattern26Reg                       1
-#define GlintAreaStipplePattern26Off                  0x72d0
-#define GlintAreaStipplePattern26Sec                  0x82d0
-#define GlintAreaStipplePattern26SecReg               3
-#define GlintAreaStipplePattern26SecOff               0x72d0
-
-#define GlintAreaStipplePattern27                     0x82d8
-#define GlintAreaStipplePattern27Tag                  0x005b
-#define GlintAreaStipplePattern27Reg                       1
-#define GlintAreaStipplePattern27Off                  0x72d8
-#define GlintAreaStipplePattern27Sec                  0x82d8
-#define GlintAreaStipplePattern27SecReg               3
-#define GlintAreaStipplePattern27SecOff               0x72d8
-
-#define GlintAreaStipplePattern28                     0x82e0
-#define GlintAreaStipplePattern28Tag                  0x005c
-#define GlintAreaStipplePattern28Reg                       1
-#define GlintAreaStipplePattern28Off                  0x72e0
-#define GlintAreaStipplePattern28Sec                  0x82e0
-#define GlintAreaStipplePattern28SecReg               3
-#define GlintAreaStipplePattern28SecOff               0x72e0
-
-#define GlintAreaStipplePattern29                     0x82e8
-#define GlintAreaStipplePattern29Tag                  0x005d
-#define GlintAreaStipplePattern29Reg                       1
-#define GlintAreaStipplePattern29Off                  0x72e8
-#define GlintAreaStipplePattern29Sec                  0x82e8
-#define GlintAreaStipplePattern29SecReg               3
-#define GlintAreaStipplePattern29SecOff               0x72e8
-
-#define GlintAreaStipplePattern30                     0x82f0
-#define GlintAreaStipplePattern30Tag                  0x005e
-#define GlintAreaStipplePattern30Reg                       1
-#define GlintAreaStipplePattern30Off                  0x72f0
-#define GlintAreaStipplePattern30Sec                  0x82f0
-#define GlintAreaStipplePattern30SecReg               3
-#define GlintAreaStipplePattern30SecOff               0x72f0
-
-#define GlintAreaStipplePattern31                     0x82f8
-#define GlintAreaStipplePattern31Tag                  0x005f
-#define GlintAreaStipplePattern31Reg                       1
-#define GlintAreaStipplePattern31Off                  0x72f8
-#define GlintAreaStipplePattern31Sec                  0x82f8
-#define GlintAreaStipplePattern31SecReg               3
-#define GlintAreaStipplePattern31SecOff               0x72f8
-
-#define GlintRouterMode                               0x8840
-#define GlintRouterModeTag                            0x0108
-#define GlintRouterModeReg                                 1
-#define GlintRouterModeOff                            0x7840
-#define GlintRouterModeSec                            0x8840
-#define GlintRouterModeSecReg                         3
-#define GlintRouterModeSecOff                         0x7840
-
-#define GlintTextureAddressMode                       0x8380
-#define GlintTextureAddressModeTag                    0x0070
-#define GlintTextureAddressModeReg                         1
-#define GlintTextureAddressModeOff                    0x7380
-#define GlintTextureAddressModeSec                    0x8380
-#define GlintTextureAddressModeSecReg                 3
-#define GlintTextureAddressModeSecOff                 0x7380
-
-#define GlintSStart                                   0x8388
-#define GlintSStartTag                                0x0071
-#define GlintSStartReg                                     1
-#define GlintSStartOff                                0x7388
-#define GlintSStartSec                                0x8388
-#define GlintSStartSecReg                             3
-#define GlintSStartSecOff                             0x7388
-
-#define GlintdSdx                                     0x8390
-#define GlintdSdxTag                                  0x0072
-#define GlintdSdxReg                                       1
-#define GlintdSdxOff                                  0x7390
-#define GlintdSdxSec                                  0x8390
-#define GlintdSdxSecReg                               3
-#define GlintdSdxSecOff                               0x7390
-
-#define GlintdSdyDom                                  0x8398
-#define GlintdSdyDomTag                               0x0073
-#define GlintdSdyDomReg                                    1
-#define GlintdSdyDomOff                               0x7398
-#define GlintdSdyDomSec                               0x8398
-#define GlintdSdyDomSecReg                            3
-#define GlintdSdyDomSecOff                            0x7398
-
-#define GlintTStart                                   0x83a0
-#define GlintTStartTag                                0x0074
-#define GlintTStartReg                                     1
-#define GlintTStartOff                                0x73a0
-#define GlintTStartSec                                0x83a0
-#define GlintTStartSecReg                             3
-#define GlintTStartSecOff                             0x73a0
-
-#define GlintdTdx                                     0x83a8
-#define GlintdTdxTag                                  0x0075
-#define GlintdTdxReg                                       1
-#define GlintdTdxOff                                  0x73a8
-#define GlintdTdxSec                                  0x83a8
-#define GlintdTdxSecReg                               3
-#define GlintdTdxSecOff                               0x73a8
-
-#define GlintdTdyDom                                  0x83b0
-#define GlintdTdyDomTag                               0x0076
-#define GlintdTdyDomReg                                    1
-#define GlintdTdyDomOff                               0x73b0
-#define GlintdTdyDomSec                               0x83b0
-#define GlintdTdyDomSecReg                            3
-#define GlintdTdyDomSecOff                            0x73b0
-
-#define GlintQStart                                   0x83b8
-#define GlintQStartTag                                0x0077
-#define GlintQStartReg                                     1
-#define GlintQStartOff                                0x73b8
-#define GlintQStartSec                                0x83b8
-#define GlintQStartSecReg                             3
-#define GlintQStartSecOff                             0x73b8
-
-#define GlintdQdx                                     0x83c0
-#define GlintdQdxTag                                  0x0078
-#define GlintdQdxReg                                       1
-#define GlintdQdxOff                                  0x73c0
-#define GlintdQdxSec                                  0x83c0
-#define GlintdQdxSecReg                               3
-#define GlintdQdxSecOff                               0x73c0
-
-#define GlintdQdyDom                                  0x83c8
-#define GlintdQdyDomTag                               0x0079
-#define GlintdQdyDomReg                                    1
-#define GlintdQdyDomOff                               0x73c8
-#define GlintdQdyDomSec                               0x83c8
-#define GlintdQdyDomSecReg                            3
-#define GlintdQdyDomSecOff                            0x73c8
-
-#define GlintLOD                                      0x83d0
-#define GlintLODTag                                   0x007a
-#define GlintLODReg                                        1
-#define GlintLODOff                                   0x73d0
-#define GlintLODSec                                   0x83d0
-#define GlintLODSecReg                                3
-#define GlintLODSecOff                                0x73d0
-
-#define GlintdSdy                                     0x83d8
-#define GlintdSdyTag                                  0x007b
-#define GlintdSdyReg                                       1
-#define GlintdSdyOff                                  0x73d8
-#define GlintdSdySec                                  0x83d8
-#define GlintdSdySecReg                               3
-#define GlintdSdySecOff                               0x73d8
-
-#define GlintdTdy                                     0x83e0
-#define GlintdTdyTag                                  0x007c
-#define GlintdTdyReg                                       1
-#define GlintdTdyOff                                  0x73e0
-#define GlintdTdySec                                  0x83e0
-#define GlintdTdySecReg                               3
-#define GlintdTdySecOff                               0x73e0
-
-#define GlintdQdy                                     0x83e8
-#define GlintdQdyTag                                  0x007d
-#define GlintdQdyReg                                       1
-#define GlintdQdyOff                                  0x73e8
-#define GlintdQdySec                                  0x83e8
-#define GlintdQdySecReg                               3
-#define GlintdQdySecOff                               0x73e8
-
-#define GlintTextureReadMode                          0x8480
-#define GlintTextureReadModeTag                       0x0090
-#define GlintTextureReadModeReg                            1
-#define GlintTextureReadModeOff                       0x7480
-#define GlintTextureReadModeSec                       0x8480
-#define GlintTextureReadModeSecReg                    3
-#define GlintTextureReadModeSecOff                    0x7480
-
-#define GlintTextureFormat                            0x8488
-#define GlintTextureFormatTag                         0x0091
-#define GlintTextureFormatReg                              1
-#define GlintTextureFormatOff                         0x7488
-#define GlintTextureFormatSec                         0x8488
-#define GlintTextureFormatSecReg                      3
-#define GlintTextureFormatSecOff                      0x7488
-
-#define GlintTextureCacheControl                      0x8490
-#define GlintTextureCacheControlTag                   0x0092
-#define GlintTextureCacheControlReg                        1
-#define GlintTextureCacheControlOff                   0x7490
-#define GlintTextureCacheControlSec                   0x8490
-#define GlintTextureCacheControlSecReg                3
-#define GlintTextureCacheControlSecOff                0x7490
-
-#define GlintGLINTBorderColor                         0x84a8
-#define GlintGLINTBorderColorTag                      0x0095
-#define GlintGLINTBorderColorReg                           1
-#define GlintGLINTBorderColorOff                      0x74a8
-#define GlintGLINTBorderColorSec                      0x84a8
-#define GlintGLINTBorderColorSecReg                   3
-#define GlintGLINTBorderColorSecOff                   0x74a8
-
-#define GlintTexelLUTIndex                            0x84c0
-#define GlintTexelLUTIndexTag                         0x0098
-#define GlintTexelLUTIndexReg                              1
-#define GlintTexelLUTIndexOff                         0x74c0
-#define GlintTexelLUTIndexSec                         0x84c0
-#define GlintTexelLUTIndexSecReg                      3
-#define GlintTexelLUTIndexSecOff                      0x74c0
-
-#define GlintTexelLUTData                             0x84c8
-#define GlintTexelLUTDataTag                          0x0099
-#define GlintTexelLUTDataReg                               1
-#define GlintTexelLUTDataOff                          0x74c8
-#define GlintTexelLUTDataSec                          0x84c8
-#define GlintTexelLUTDataSecReg                       3
-#define GlintTexelLUTDataSecOff                       0x74c8
-
-#define GlintTexelLUTAddress                          0x84d0
-#define GlintTexelLUTAddressTag                       0x009a
-#define GlintTexelLUTAddressReg                            1
-#define GlintTexelLUTAddressOff                       0x74d0
-#define GlintTexelLUTAddressSec                       0x84d0
-#define GlintTexelLUTAddressSecReg                    3
-#define GlintTexelLUTAddressSecOff                    0x74d0
-
-#define GlintTexelLUTTransfer                         0x84d8
-#define GlintTexelLUTTransferTag                      0x009b
-#define GlintTexelLUTTransferReg                           1
-#define GlintTexelLUTTransferOff                      0x74d8
-#define GlintTexelLUTTransferSec                      0x84d8
-#define GlintTexelLUTTransferSecReg                   3
-#define GlintTexelLUTTransferSecOff                   0x74d8
-
-#define GlintTextureFilterMode                        0x84e0
-#define GlintTextureFilterModeTag                     0x009c
-#define GlintTextureFilterModeReg                          1
-#define GlintTextureFilterModeOff                     0x74e0
-#define GlintTextureFilterModeSec                     0x84e0
-#define GlintTextureFilterModeSecReg                  3
-#define GlintTextureFilterModeSecOff                  0x74e0
-
-#define GlintTextureChromaUpper                       0x84e8
-#define GlintTextureChromaUpperTag                    0x009d
-#define GlintTextureChromaUpperReg                         1
-#define GlintTextureChromaUpperOff                    0x74e8
-#define GlintTextureChromaUpperSec                    0x84e8
-#define GlintTextureChromaUpperSecReg                 3
-#define GlintTextureChromaUpperSecOff                 0x74e8
-
-#define GlintTextureChromaLower                       0x84f0
-#define GlintTextureChromaLowerTag                    0x009e
-#define GlintTextureChromaLowerReg                         1
-#define GlintTextureChromaLowerOff                    0x74f0
-#define GlintTextureChromaLowerSec                    0x84f0
-#define GlintTextureChromaLowerSecReg                 3
-#define GlintTextureChromaLowerSecOff                 0x74f0
-
-#define GlintTxBaseAddr0                              0x8500
-#define GlintTxBaseAddr0Tag                           0x00a0
-#define GlintTxBaseAddr0Reg                                1
-#define GlintTxBaseAddr0Off                           0x7500
-#define GlintTxBaseAddr0Sec                           0x8500
-#define GlintTxBaseAddr0SecReg                        3
-#define GlintTxBaseAddr0SecOff                        0x7500
-
-#define GlintTxBaseAddr1                              0x8508
-#define GlintTxBaseAddr1Tag                           0x00a1
-#define GlintTxBaseAddr1Reg                                1
-#define GlintTxBaseAddr1Off                           0x7508
-#define GlintTxBaseAddr1Sec                           0x8508
-#define GlintTxBaseAddr1SecReg                        3
-#define GlintTxBaseAddr1SecOff                        0x7508
-
-#define GlintTxBaseAddr2                              0x8510
-#define GlintTxBaseAddr2Tag                           0x00a2
-#define GlintTxBaseAddr2Reg                                1
-#define GlintTxBaseAddr2Off                           0x7510
-#define GlintTxBaseAddr2Sec                           0x8510
-#define GlintTxBaseAddr2SecReg                        3
-#define GlintTxBaseAddr2SecOff                        0x7510
-
-#define GlintTxBaseAddr3                              0x8518
-#define GlintTxBaseAddr3Tag                           0x00a3
-#define GlintTxBaseAddr3Reg                                1
-#define GlintTxBaseAddr3Off                           0x7518
-#define GlintTxBaseAddr3Sec                           0x8518
-#define GlintTxBaseAddr3SecReg                        3
-#define GlintTxBaseAddr3SecOff                        0x7518
-
-#define GlintTxBaseAddr4                              0x8520
-#define GlintTxBaseAddr4Tag                           0x00a4
-#define GlintTxBaseAddr4Reg                                1
-#define GlintTxBaseAddr4Off                           0x7520
-#define GlintTxBaseAddr4Sec                           0x8520
-#define GlintTxBaseAddr4SecReg                        3
-#define GlintTxBaseAddr4SecOff                        0x7520
-
-#define GlintTxBaseAddr5                              0x8528
-#define GlintTxBaseAddr5Tag                           0x00a5
-#define GlintTxBaseAddr5Reg                                1
-#define GlintTxBaseAddr5Off                           0x7528
-#define GlintTxBaseAddr5Sec                           0x8528
-#define GlintTxBaseAddr5SecReg                        3
-#define GlintTxBaseAddr5SecOff                        0x7528
-
-#define GlintTxBaseAddr6                              0x8530
-#define GlintTxBaseAddr6Tag                           0x00a6
-#define GlintTxBaseAddr6Reg                                1
-#define GlintTxBaseAddr6Off                           0x7530
-#define GlintTxBaseAddr6Sec                           0x8530
-#define GlintTxBaseAddr6SecReg                        3
-#define GlintTxBaseAddr6SecOff                        0x7530
-
-#define GlintTxBaseAddr7                              0x8538
-#define GlintTxBaseAddr7Tag                           0x00a7
-#define GlintTxBaseAddr7Reg                                1
-#define GlintTxBaseAddr7Off                           0x7538
-#define GlintTxBaseAddr7Sec                           0x8538
-#define GlintTxBaseAddr7SecReg                        3
-#define GlintTxBaseAddr7SecOff                        0x7538
-
-#define GlintTxBaseAddr8                              0x8540
-#define GlintTxBaseAddr8Tag                           0x00a8
-#define GlintTxBaseAddr8Reg                                1
-#define GlintTxBaseAddr8Off                           0x7540
-#define GlintTxBaseAddr8Sec                           0x8540
-#define GlintTxBaseAddr8SecReg                        3
-#define GlintTxBaseAddr8SecOff                        0x7540
-
-#define GlintTxBaseAddr9                              0x8548
-#define GlintTxBaseAddr9Tag                           0x00a9
-#define GlintTxBaseAddr9Reg                                1
-#define GlintTxBaseAddr9Off                           0x7548
-#define GlintTxBaseAddr9Sec                           0x8548
-#define GlintTxBaseAddr9SecReg                        3
-#define GlintTxBaseAddr9SecOff                        0x7548
-
-#define GlintTxBaseAddr10                             0x8550
-#define GlintTxBaseAddr10Tag                          0x00aa
-#define GlintTxBaseAddr10Reg                               1
-#define GlintTxBaseAddr10Off                          0x7550
-#define GlintTxBaseAddr10Sec                          0x8550
-#define GlintTxBaseAddr10SecReg                       3
-#define GlintTxBaseAddr10SecOff                       0x7550
-
-#define GlintTxBaseAddr11                             0x8558
-#define GlintTxBaseAddr11Tag                          0x00ab
-#define GlintTxBaseAddr11Reg                               1
-#define GlintTxBaseAddr11Off                          0x7558
-#define GlintTxBaseAddr11Sec                          0x8558
-#define GlintTxBaseAddr11SecReg                       3
-#define GlintTxBaseAddr11SecOff                       0x7558
-
-#define GlintTxBaseAddr12                             0x8560
-#define GlintTxBaseAddr12Tag                          0x00ac
-#define GlintTxBaseAddr12Reg                               1
-#define GlintTxBaseAddr12Off                          0x7560
-#define GlintTxBaseAddr12Sec                          0x8560
-#define GlintTxBaseAddr12SecReg                       3
-#define GlintTxBaseAddr12SecOff                       0x7560
-
-#define GlintTexelLUT0                                0x8e80
-#define GlintTexelLUT0Tag                             0x01d0
-#define GlintTexelLUT0Reg                                  1
-#define GlintTexelLUT0Off                             0x7e80
-#define GlintTexelLUT0Sec                             0x8e80
-#define GlintTexelLUT0SecReg                          3
-#define GlintTexelLUT0SecOff                          0x7e80
-
-#define GlintTexelLUT1                                0x8e88
-#define GlintTexelLUT1Tag                             0x01d1
-#define GlintTexelLUT1Reg                                  1
-#define GlintTexelLUT1Off                             0x7e88
-#define GlintTexelLUT1Sec                             0x8e88
-#define GlintTexelLUT1SecReg                          3
-#define GlintTexelLUT1SecOff                          0x7e88
-
-#define GlintTexelLUT2                                0x8e90
-#define GlintTexelLUT2Tag                             0x01d2
-#define GlintTexelLUT2Reg                                  1
-#define GlintTexelLUT2Off                             0x7e90
-#define GlintTexelLUT2Sec                             0x8e90
-#define GlintTexelLUT2SecReg                          3
-#define GlintTexelLUT2SecOff                          0x7e90
-
-#define GlintTexelLUT3                                0x8e98
-#define GlintTexelLUT3Tag                             0x01d3
-#define GlintTexelLUT3Reg                                  1
-#define GlintTexelLUT3Off                             0x7e98
-#define GlintTexelLUT3Sec                             0x8e98
-#define GlintTexelLUT3SecReg                          3
-#define GlintTexelLUT3SecOff                          0x7e98
-
-#define GlintTexelLUT4                                0x8ea0
-#define GlintTexelLUT4Tag                             0x01d4
-#define GlintTexelLUT4Reg                                  1
-#define GlintTexelLUT4Off                             0x7ea0
-#define GlintTexelLUT4Sec                             0x8ea0
-#define GlintTexelLUT4SecReg                          3
-#define GlintTexelLUT4SecOff                          0x7ea0
-
-#define GlintTexelLUT5                                0x8ea8
-#define GlintTexelLUT5Tag                             0x01d5
-#define GlintTexelLUT5Reg                                  1
-#define GlintTexelLUT5Off                             0x7ea8
-#define GlintTexelLUT5Sec                             0x8ea8
-#define GlintTexelLUT5SecReg                          3
-#define GlintTexelLUT5SecOff                          0x7ea8
-
-#define GlintTexelLUT6                                0x8eb0
-#define GlintTexelLUT6Tag                             0x01d6
-#define GlintTexelLUT6Reg                                  1
-#define GlintTexelLUT6Off                             0x7eb0
-#define GlintTexelLUT6Sec                             0x8eb0
-#define GlintTexelLUT6SecReg                          3
-#define GlintTexelLUT6SecOff                          0x7eb0
-
-#define GlintTexelLUT7                                0x8eb8
-#define GlintTexelLUT7Tag                             0x01d7
-#define GlintTexelLUT7Reg                                  1
-#define GlintTexelLUT7Off                             0x7eb8
-#define GlintTexelLUT7Sec                             0x8eb8
-#define GlintTexelLUT7SecReg                          3
-#define GlintTexelLUT7SecOff                          0x7eb8
-
-#define GlintTexelLUT8                                0x8ec0
-#define GlintTexelLUT8Tag                             0x01d8
-#define GlintTexelLUT8Reg                                  1
-#define GlintTexelLUT8Off                             0x7ec0
-#define GlintTexelLUT8Sec                             0x8ec0
-#define GlintTexelLUT8SecReg                          3
-#define GlintTexelLUT8SecOff                          0x7ec0
-
-#define GlintTexelLUT9                                0x8ec8
-#define GlintTexelLUT9Tag                             0x01d9
-#define GlintTexelLUT9Reg                                  1
-#define GlintTexelLUT9Off                             0x7ec8
-#define GlintTexelLUT9Sec                             0x8ec8
-#define GlintTexelLUT9SecReg                          3
-#define GlintTexelLUT9SecOff                          0x7ec8
-
-#define GlintTexelLUT10                               0x8ed0
-#define GlintTexelLUT10Tag                            0x01da
-#define GlintTexelLUT10Reg                                 1
-#define GlintTexelLUT10Off                            0x7ed0
-#define GlintTexelLUT10Sec                            0x8ed0
-#define GlintTexelLUT10SecReg                         3
-#define GlintTexelLUT10SecOff                         0x7ed0
-
-#define GlintTexelLUT11                               0x8ed8
-#define GlintTexelLUT11Tag                            0x01db
-#define GlintTexelLUT11Reg                                 1
-#define GlintTexelLUT11Off                            0x7ed8
-#define GlintTexelLUT11Sec                            0x8ed8
-#define GlintTexelLUT11SecReg                         3
-#define GlintTexelLUT11SecOff                         0x7ed8
-
-#define GlintTexelLUT12                               0x8ee0
-#define GlintTexelLUT12Tag                            0x01dc
-#define GlintTexelLUT12Reg                                 1
-#define GlintTexelLUT12Off                            0x7ee0
-#define GlintTexelLUT12Sec                            0x8ee0
-#define GlintTexelLUT12SecReg                         3
-#define GlintTexelLUT12SecOff                         0x7ee0
-
-#define GlintTexelLUT13                               0x8ee8
-#define GlintTexelLUT13Tag                            0x01dd
-#define GlintTexelLUT13Reg                                 1
-#define GlintTexelLUT13Off                            0x7ee8
-#define GlintTexelLUT13Sec                            0x8ee8
-#define GlintTexelLUT13SecReg                         3
-#define GlintTexelLUT13SecOff                         0x7ee8
-
-#define GlintTexelLUT14                               0x8ef0
-#define GlintTexelLUT14Tag                            0x01de
-#define GlintTexelLUT14Reg                                 1
-#define GlintTexelLUT14Off                            0x7ef0
-#define GlintTexelLUT14Sec                            0x8ef0
-#define GlintTexelLUT14SecReg                         3
-#define GlintTexelLUT14SecOff                         0x7ef0
-
-#define GlintTexelLUT15                               0x8ef8
-#define GlintTexelLUT15Tag                            0x01df
-#define GlintTexelLUT15Reg                                 1
-#define GlintTexelLUT15Off                            0x7ef8
-#define GlintTexelLUT15Sec                            0x8ef8
-#define GlintTexelLUT15SecReg                         3
-#define GlintTexelLUT15SecOff                         0x7ef8
-
-#define GlintTexel0                                   0x8600
-#define GlintTexel0Tag                                0x00c0
-#define GlintTexel0Reg                                     1
-#define GlintTexel0Off                                0x7600
-#define GlintTexel0Sec                                0x8600
-#define GlintTexel0SecReg                             3
-#define GlintTexel0SecOff                             0x7600
-
-#define GlintTexel1                                   0x8608
-#define GlintTexel1Tag                                0x00c1
-#define GlintTexel1Reg                                     1
-#define GlintTexel1Off                                0x7608
-#define GlintTexel1Sec                                0x8608
-#define GlintTexel1SecReg                             3
-#define GlintTexel1SecOff                             0x7608
-
-#define GlintTexel2                                   0x8610
-#define GlintTexel2Tag                                0x00c2
-#define GlintTexel2Reg                                     1
-#define GlintTexel2Off                                0x7610
-#define GlintTexel2Sec                                0x8610
-#define GlintTexel2SecReg                             3
-#define GlintTexel2SecOff                             0x7610
-
-#define GlintTexel3                                   0x8618
-#define GlintTexel3Tag                                0x00c3
-#define GlintTexel3Reg                                     1
-#define GlintTexel3Off                                0x7618
-#define GlintTexel3Sec                                0x8618
-#define GlintTexel3SecReg                             3
-#define GlintTexel3SecOff                             0x7618
-
-#define GlintTexel4                                   0x8620
-#define GlintTexel4Tag                                0x00c4
-#define GlintTexel4Reg                                     1
-#define GlintTexel4Off                                0x7620
-#define GlintTexel4Sec                                0x8620
-#define GlintTexel4SecReg                             3
-#define GlintTexel4SecOff                             0x7620
-
-#define GlintTexel5                                   0x8628
-#define GlintTexel5Tag                                0x00c5
-#define GlintTexel5Reg                                     1
-#define GlintTexel5Off                                0x7628
-#define GlintTexel5Sec                                0x8628
-#define GlintTexel5SecReg                             3
-#define GlintTexel5SecOff                             0x7628
-
-#define GlintTexel6                                   0x8630
-#define GlintTexel6Tag                                0x00c6
-#define GlintTexel6Reg                                     1
-#define GlintTexel6Off                                0x7630
-#define GlintTexel6Sec                                0x8630
-#define GlintTexel6SecReg                             3
-#define GlintTexel6SecOff                             0x7630
-
-#define GlintTexel7                                   0x8638
-#define GlintTexel7Tag                                0x00c7
-#define GlintTexel7Reg                                     1
-#define GlintTexel7Off                                0x7638
-#define GlintTexel7Sec                                0x8638
-#define GlintTexel7SecReg                             3
-#define GlintTexel7SecOff                             0x7638
-
-#define GlintInterp0                                  0x8640
-#define GlintInterp0Tag                               0x00c8
-#define GlintInterp0Reg                                    1
-#define GlintInterp0Off                               0x7640
-#define GlintInterp0Sec                               0x8640
-#define GlintInterp0SecReg                            3
-#define GlintInterp0SecOff                            0x7640
-
-#define GlintInterp1                                  0x8648
-#define GlintInterp1Tag                               0x00c9
-#define GlintInterp1Reg                                    1
-#define GlintInterp1Off                               0x7648
-#define GlintInterp1Sec                               0x8648
-#define GlintInterp1SecReg                            3
-#define GlintInterp1SecOff                            0x7648
-
-#define GlintInterp2                                  0x8650
-#define GlintInterp2Tag                               0x00ca
-#define GlintInterp2Reg                                    1
-#define GlintInterp2Off                               0x7650
-#define GlintInterp2Sec                               0x8650
-#define GlintInterp2SecReg                            3
-#define GlintInterp2SecOff                            0x7650
-
-#define GlintInterp3                                  0x8658
-#define GlintInterp3Tag                               0x00cb
-#define GlintInterp3Reg                                    1
-#define GlintInterp3Off                               0x7658
-#define GlintInterp3Sec                               0x8658
-#define GlintInterp3SecReg                            3
-#define GlintInterp3SecOff                            0x7658
-
-#define GlintInterp4                                  0x8660
-#define GlintInterp4Tag                               0x00cc
-#define GlintInterp4Reg                                    1
-#define GlintInterp4Off                               0x7660
-#define GlintInterp4Sec                               0x8660
-#define GlintInterp4SecReg                            3
-#define GlintInterp4SecOff                            0x7660
-
-#define GlintTextureFilter                            0x8668
-#define GlintTextureFilterTag                         0x00cd
-#define GlintTextureFilterReg                              1
-#define GlintTextureFilterOff                         0x7668
-#define GlintTextureFilterSec                         0x8668
-#define GlintTextureFilterSecReg                      3
-#define GlintTextureFilterSecOff                      0x7668
-
-#define GlintTextureColorMode                         0x8680
-#define GlintTextureColorModeTag                      0x00d0
-#define GlintTextureColorModeReg                           1
-#define GlintTextureColorModeOff                      0x7680
-#define GlintTextureColorModeSec                      0x8680
-#define GlintTextureColorModeSecReg                   3
-#define GlintTextureColorModeSecOff                   0x7680
-
-#define GlintTextureEnvColor                          0x8688
-#define GlintTextureEnvColorTag                       0x00d1
-#define GlintTextureEnvColorReg                            1
-#define GlintTextureEnvColorOff                       0x7688
-#define GlintTextureEnvColorSec                       0x8688
-#define GlintTextureEnvColorSecReg                    3
-#define GlintTextureEnvColorSecOff                    0x7688
-
-#define GlintFogMode                                  0x8690
-#define GlintFogModeTag                               0x00d2
-#define GlintFogModeReg                                    1
-#define GlintFogModeOff                               0x7690
-#define GlintFogModeSec                               0x8690
-#define GlintFogModeSecReg                            3
-#define GlintFogModeSecOff                            0x7690
-
-#define GlintFogColor                                 0x8698
-#define GlintFogColorTag                              0x00d3
-#define GlintFogColorReg                                   1
-#define GlintFogColorOff                              0x7698
-#define GlintFogColorSec                              0x8698
-#define GlintFogColorSecReg                           3
-#define GlintFogColorSecOff                           0x7698
-
-#define GlintFStart                                   0x86a0
-#define GlintFStartTag                                0x00d4
-#define GlintFStartReg                                     1
-#define GlintFStartOff                                0x76a0
-#define GlintFStartSec                                0x86a0
-#define GlintFStartSecReg                             3
-#define GlintFStartSecOff                             0x76a0
-
-#define GlintdFdx                                     0x86a8
-#define GlintdFdxTag                                  0x00d5
-#define GlintdFdxReg                                       1
-#define GlintdFdxOff                                  0x76a8
-#define GlintdFdxSec                                  0x86a8
-#define GlintdFdxSecReg                               3
-#define GlintdFdxSecOff                               0x76a8
-
-#define GlintdFdyDom                                  0x86b0
-#define GlintdFdyDomTag                               0x00d6
-#define GlintdFdyDomReg                                    1
-#define GlintdFdyDomOff                               0x76b0
-#define GlintdFdyDomSec                               0x86b0
-#define GlintdFdyDomSecReg                            3
-#define GlintdFdyDomSecOff                            0x76b0
-
-#define GlintKsStart                                  0x86c8
-#define GlintKsStartTag                               0x00d9
-#define GlintKsStartReg                                    1
-#define GlintKsStartOff                               0x76c8
-#define GlintKsStartSec                               0x86c8
-#define GlintKsStartSecReg                            3
-#define GlintKsStartSecOff                            0x76c8
-
-#define GlintdKsdx                                    0x86d0
-#define GlintdKsdxTag                                 0x00da
-#define GlintdKsdxReg                                      1
-#define GlintdKsdxOff                                 0x76d0
-#define GlintdKsdxSec                                 0x86d0
-#define GlintdKsdxSecReg                              3
-#define GlintdKsdxSecOff                              0x76d0
-
-#define GlintdKsdyDom                                 0x86d8
-#define GlintdKsdyDomTag                              0x00db
-#define GlintdKsdyDomReg                                   1
-#define GlintdKsdyDomOff                              0x76d8
-#define GlintdKsdyDomSec                              0x86d8
-#define GlintdKsdyDomSecReg                           3
-#define GlintdKsdyDomSecOff                           0x76d8
-
-#define GlintKdStart                                  0x86e0
-#define GlintKdStartTag                               0x00dc
-#define GlintKdStartReg                                    1
-#define GlintKdStartOff                               0x76e0
-#define GlintKdStartSec                               0x86e0
-#define GlintKdStartSecReg                            3
-#define GlintKdStartSecOff                            0x76e0
-
-#define GlintdKdStart                                 0x86e8
-#define GlintdKdStartTag                              0x00dd
-#define GlintdKdStartReg                                   1
-#define GlintdKdStartOff                              0x76e8
-#define GlintdKdStartSec                              0x86e8
-#define GlintdKdStartSecReg                           3
-#define GlintdKdStartSecOff                           0x76e8
-
-#define GlintdKddyDom                                 0x86f0
-#define GlintdKddyDomTag                              0x00de
-#define GlintdKddyDomReg                                   1
-#define GlintdKddyDomOff                              0x76f0
-#define GlintdKddyDomSec                              0x86f0
-#define GlintdKddyDomSecReg                           3
-#define GlintdKddyDomSecOff                           0x76f0
-
-#define GlintRStart                                   0x8780
-#define GlintRStartTag                                0x00f0
-#define GlintRStartReg                                     1
-#define GlintRStartOff                                0x7780
-#define GlintRStartSec                                0x8780
-#define GlintRStartSecReg                             3
-#define GlintRStartSecOff                             0x7780
-
-#define GlintdRdx                                     0x8788
-#define GlintdRdxTag                                  0x00f1
-#define GlintdRdxReg                                       1
-#define GlintdRdxOff                                  0x7788
-#define GlintdRdxSec                                  0x8788
-#define GlintdRdxSecReg                               3
-#define GlintdRdxSecOff                               0x7788
-
-#define GlintdRdyDom                                  0x8790
-#define GlintdRdyDomTag                               0x00f2
-#define GlintdRdyDomReg                                    1
-#define GlintdRdyDomOff                               0x7790
-#define GlintdRdyDomSec                               0x8790
-#define GlintdRdyDomSecReg                            3
-#define GlintdRdyDomSecOff                            0x7790
-
-#define GlintGStart                                   0x8798
-#define GlintGStartTag                                0x00f3
-#define GlintGStartReg                                     1
-#define GlintGStartOff                                0x7798
-#define GlintGStartSec                                0x8798
-#define GlintGStartSecReg                             3
-#define GlintGStartSecOff                             0x7798
-
-#define GlintdGdx                                     0x87a0
-#define GlintdGdxTag                                  0x00f4
-#define GlintdGdxReg                                       1
-#define GlintdGdxOff                                  0x77a0
-#define GlintdGdxSec                                  0x87a0
-#define GlintdGdxSecReg                               3
-#define GlintdGdxSecOff                               0x77a0
-
-#define GlintdGdyDom                                  0x87a8
-#define GlintdGdyDomTag                               0x00f5
-#define GlintdGdyDomReg                                    1
-#define GlintdGdyDomOff                               0x77a8
-#define GlintdGdyDomSec                               0x87a8
-#define GlintdGdyDomSecReg                            3
-#define GlintdGdyDomSecOff                            0x77a8
-
-#define GlintBStart                                   0x87b0
-#define GlintBStartTag                                0x00f6
-#define GlintBStartReg                                     1
-#define GlintBStartOff                                0x77b0
-#define GlintBStartSec                                0x87b0
-#define GlintBStartSecReg                             3
-#define GlintBStartSecOff                             0x77b0
-
-#define GlintdBdx                                     0x87b8
-#define GlintdBdxTag                                  0x00f7
-#define GlintdBdxReg                                       1
-#define GlintdBdxOff                                  0x77b8
-#define GlintdBdxSec                                  0x87b8
-#define GlintdBdxSecReg                               3
-#define GlintdBdxSecOff                               0x77b8
-
-#define GlintdBdyDom                                  0x87c0
-#define GlintdBdyDomTag                               0x00f8
-#define GlintdBdyDomReg                                    1
-#define GlintdBdyDomOff                               0x77c0
-#define GlintdBdyDomSec                               0x87c0
-#define GlintdBdyDomSecReg                            3
-#define GlintdBdyDomSecOff                            0x77c0
-
-#define GlintAStart                                   0x87c8
-#define GlintAStartTag                                0x00f9
-#define GlintAStartReg                                     1
-#define GlintAStartOff                                0x77c8
-#define GlintAStartSec                                0x87c8
-#define GlintAStartSecReg                             3
-#define GlintAStartSecOff                             0x77c8
-
-#define GlintdAdx                                     0x87d0
-#define GlintdAdxTag                                  0x00fa
-#define GlintdAdxReg                                       1
-#define GlintdAdxOff                                  0x77d0
-#define GlintdAdxSec                                  0x87d0
-#define GlintdAdxSecReg                               3
-#define GlintdAdxSecOff                               0x77d0
-
-#define GlintdAdyDom                                  0x87d8
-#define GlintdAdyDomTag                               0x00fb
-#define GlintdAdyDomReg                                    1
-#define GlintdAdyDomOff                               0x77d8
-#define GlintdAdyDomSec                               0x87d8
-#define GlintdAdyDomSecReg                            3
-#define GlintdAdyDomSecOff                            0x77d8
-
-#define GlintColorDDAMode                             0x87e0
-#define GlintColorDDAModeTag                          0x00fc
-#define GlintColorDDAModeReg                               1
-#define GlintColorDDAModeOff                          0x77e0
-#define GlintColorDDAModeSec                          0x87e0
-#define GlintColorDDAModeSecReg                       3
-#define GlintColorDDAModeSecOff                       0x77e0
-
-#define GlintConstantColor                            0x87e8
-#define GlintConstantColorTag                         0x00fd
-#define GlintConstantColorReg                              1
-#define GlintConstantColorOff                         0x77e8
-#define GlintConstantColorSec                         0x87e8
-#define GlintConstantColorSecReg                      3
-#define GlintConstantColorSecOff                      0x77e8
-
-#define GlintGLINTColor                               0x87f0
-#define GlintGLINTColorTag                            0x00fe
-#define GlintGLINTColorReg                                 1
-#define GlintGLINTColorOff                            0x77f0
-#define GlintGLINTColorSec                            0x87f0
-#define GlintGLINTColorSecReg                         3
-#define GlintGLINTColorSecOff                         0x77f0
-
-#define GlintAlphaTestMode                            0x8800
-#define GlintAlphaTestModeTag                         0x0100
-#define GlintAlphaTestModeReg                              1
-#define GlintAlphaTestModeOff                         0x7800
-#define GlintAlphaTestModeSec                         0x8800
-#define GlintAlphaTestModeSecReg                      3
-#define GlintAlphaTestModeSecOff                      0x7800
-
-#define GlintAntialiasMode                            0x8808
-#define GlintAntialiasModeTag                         0x0101
-#define GlintAntialiasModeReg                              1
-#define GlintAntialiasModeOff                         0x7808
-#define GlintAntialiasModeSec                         0x8808
-#define GlintAntialiasModeSecReg                      3
-#define GlintAntialiasModeSecOff                      0x7808
-
-#define GlintAlphaBlendMode                           0x8810
-#define GlintAlphaBlendModeTag                        0x0102
-#define GlintAlphaBlendModeReg                             1
-#define GlintAlphaBlendModeOff                        0x7810
-#define GlintAlphaBlendModeSec                        0x8810
-#define GlintAlphaBlendModeSecReg                     3
-#define GlintAlphaBlendModeSecOff                     0x7810
-
-#define GlintChromaUpper                              0x8f08
-#define GlintChromaUpperTag                           0x01e1
-#define GlintChromaUpperReg                                1
-#define GlintChromaUpperOff                           0x7f08
-#define GlintChromaUpperSec                           0x8f08
-#define GlintChromaUpperSecReg                        3
-#define GlintChromaUpperSecOff                        0x7f08
-
-#define GlintChromaLower                              0x8f10
-#define GlintChromaLowerTag                           0x01e2
-#define GlintChromaLowerReg                                1
-#define GlintChromaLowerOff                           0x7f10
-#define GlintChromaLowerSec                           0x8f10
-#define GlintChromaLowerSecReg                        3
-#define GlintChromaLowerSecOff                        0x7f10
-
-#define GlintChromaTestMode                           0x8f18
-#define GlintChromaTestModeTag                        0x01e3
-#define GlintChromaTestModeReg                             1
-#define GlintChromaTestModeOff                        0x7f18
-#define GlintChromaTestModeSec                        0x8f18
-#define GlintChromaTestModeSecReg                     3
-#define GlintChromaTestModeSecOff                     0x7f18
-
-#define GlintDitherMode                               0x8818
-#define GlintDitherModeTag                            0x0103
-#define GlintDitherModeReg                                 1
-#define GlintDitherModeOff                            0x7818
-#define GlintDitherModeSec                            0x8818
-#define GlintDitherModeSecReg                         3
-#define GlintDitherModeSecOff                         0x7818
-
-#define GlintFBSoftwareWriteMask                      0x8820
-#define GlintFBSoftwareWriteMaskTag                   0x0104
-#define GlintFBSoftwareWriteMaskReg                        1
-#define GlintFBSoftwareWriteMaskOff                   0x7820
-#define GlintFBSoftwareWriteMaskSec                   0x8820
-#define GlintFBSoftwareWriteMaskSecReg                3
-#define GlintFBSoftwareWriteMaskSecOff                0x7820
-
-#define GlintLogicalOpMode                            0x8828
-#define GlintLogicalOpModeTag                         0x0105
-#define GlintLogicalOpModeReg                              1
-#define GlintLogicalOpModeOff                         0x7828
-#define GlintLogicalOpModeSec                         0x8828
-#define GlintLogicalOpModeSecReg                      3
-#define GlintLogicalOpModeSecOff                      0x7828
-
-#define GlintFBWriteData                              0x8830
-#define GlintFBWriteDataTag                           0x0106
-#define GlintFBWriteDataReg                                1
-#define GlintFBWriteDataOff                           0x7830
-#define GlintFBWriteDataSec                           0x8830
-#define GlintFBWriteDataSecReg                        3
-#define GlintFBWriteDataSecOff                        0x7830
-
-#define GlintLBReadMode                               0x8880
-#define GlintLBReadModeTag                            0x0110
-#define GlintLBReadModeReg                                 1
-#define GlintLBReadModeOff                            0x7880
-#define GlintLBReadModeSec                            0x8880
-#define GlintLBReadModeSecReg                         3
-#define GlintLBReadModeSecOff                         0x7880
-
-#define GlintLBReadFormat                             0x8888
-#define GlintLBReadFormatTag                          0x0111
-#define GlintLBReadFormatReg                               1
-#define GlintLBReadFormatOff                          0x7888
-#define GlintLBReadFormatSec                          0x8888
-#define GlintLBReadFormatSecReg                       3
-#define GlintLBReadFormatSecOff                       0x7888
-
-#define GlintLBSourceOffset                           0x8890
-#define GlintLBSourceOffsetTag                        0x0112
-#define GlintLBSourceOffsetReg                             1
-#define GlintLBSourceOffsetOff                        0x7890
-#define GlintLBSourceOffsetSec                        0x8890
-#define GlintLBSourceOffsetSecReg                     3
-#define GlintLBSourceOffsetSecOff                     0x7890
-
-#define GlintLBStencil                                0x88a8
-#define GlintLBStencilTag                             0x0115
-#define GlintLBStencilReg                                  1
-#define GlintLBStencilOff                             0x78a8
-#define GlintLBStencilSec                             0x88a8
-#define GlintLBStencilSecReg                          3
-#define GlintLBStencilSecOff                          0x78a8
-
-#define GlintLBDepth                                  0x88b0
-#define GlintLBDepthTag                               0x0116
-#define GlintLBDepthReg                                    1
-#define GlintLBDepthOff                               0x78b0
-#define GlintLBDepthSec                               0x88b0
-#define GlintLBDepthSecReg                            3
-#define GlintLBDepthSecOff                            0x78b0
-
-#define GlintLBWindowBase                             0x88b8
-#define GlintLBWindowBaseTag                          0x0117
-#define GlintLBWindowBaseReg                               1
-#define GlintLBWindowBaseOff                          0x78b8
-#define GlintLBWindowBaseSec                          0x88b8
-#define GlintLBWindowBaseSecReg                       3
-#define GlintLBWindowBaseSecOff                       0x78b8
-
-#define GlintLBWriteMode                              0x88c0
-#define GlintLBWriteModeTag                           0x0118
-#define GlintLBWriteModeReg                                1
-#define GlintLBWriteModeOff                           0x78c0
-#define GlintLBWriteModeSec                           0x88c0
-#define GlintLBWriteModeSecReg                        3
-#define GlintLBWriteModeSecOff                        0x78c0
-
-#define GlintLBWriteFormat                            0x88c8
-#define GlintLBWriteFormatTag                         0x0119
-#define GlintLBWriteFormatReg                              1
-#define GlintLBWriteFormatOff                         0x78c8
-#define GlintLBWriteFormatSec                         0x88c8
-#define GlintLBWriteFormatSecReg                      3
-#define GlintLBWriteFormatSecOff                      0x78c8
-
-#define GlintTextureData                              0x88e8
-#define GlintTextureDataTag                           0x011d
-#define GlintTextureDataReg                                1
-#define GlintTextureDataOff                           0x78e8
-#define GlintTextureDataSec                           0x88e8
-#define GlintTextureDataSecReg                        3
-#define GlintTextureDataSecOff                        0x78e8
-
-#define GlintTextureDownloadOffset                    0x88f0
-#define GlintTextureDownloadOffsetTag                 0x011e
-#define GlintTextureDownloadOffsetReg                      1
-#define GlintTextureDownloadOffsetOff                 0x78f0
-#define GlintTextureDownloadOffsetSec                 0x88f0
-#define GlintTextureDownloadOffsetSecReg              3
-#define GlintTextureDownloadOffsetSecOff              0x78f0
-
-#define GlintLBWindowOffset                           0x88f8
-#define GlintLBWindowOffsetTag                        0x011f
-#define GlintLBWindowOffsetReg                             1
-#define GlintLBWindowOffsetOff                        0x78f8
-#define GlintLBWindowOffsetSec                        0x88f8
-#define GlintLBWindowOffsetSecReg                     3
-#define GlintLBWindowOffsetSecOff                     0x78f8
-
-#define GlintGLINTWindow                              0x8980
-#define GlintGLINTWindowTag                           0x0130
-#define GlintGLINTWindowReg                                1
-#define GlintGLINTWindowOff                           0x7980
-#define GlintGLINTWindowSec                           0x8980
-#define GlintGLINTWindowSecReg                        3
-#define GlintGLINTWindowSecOff                        0x7980
-
-#define GlintStencilMode                              0x8988
-#define GlintStencilModeTag                           0x0131
-#define GlintStencilModeReg                                1
-#define GlintStencilModeOff                           0x7988
-#define GlintStencilModeSec                           0x8988
-#define GlintStencilModeSecReg                        3
-#define GlintStencilModeSecOff                        0x7988
-
-#define GlintStencilData                              0x8990
-#define GlintStencilDataTag                           0x0132
-#define GlintStencilDataReg                                1
-#define GlintStencilDataOff                           0x7990
-#define GlintStencilDataSec                           0x8990
-#define GlintStencilDataSecReg                        3
-#define GlintStencilDataSecOff                        0x7990
-
-#define GlintGLINTStencil                             0x8998
-#define GlintGLINTStencilTag                          0x0133
-#define GlintGLINTStencilReg                               1
-#define GlintGLINTStencilOff                          0x7998
-#define GlintGLINTStencilSec                          0x8998
-#define GlintGLINTStencilSecReg                       3
-#define GlintGLINTStencilSecOff                       0x7998
-
-#define GlintDepthMode                                0x89a0
-#define GlintDepthModeTag                             0x0134
-#define GlintDepthModeReg                                  1
-#define GlintDepthModeOff                             0x79a0
-#define GlintDepthModeSec                             0x89a0
-#define GlintDepthModeSecReg                          3
-#define GlintDepthModeSecOff                          0x79a0
-
-#define GlintGLINTDepth                               0x89a8
-#define GlintGLINTDepthTag                            0x0135
-#define GlintGLINTDepthReg                                 1
-#define GlintGLINTDepthOff                            0x79a8
-#define GlintGLINTDepthSec                            0x89a8
-#define GlintGLINTDepthSecReg                         3
-#define GlintGLINTDepthSecOff                         0x79a8
-
-#define GlintZStartU                                  0x89b0
-#define GlintZStartUTag                               0x0136
-#define GlintZStartUReg                                    1
-#define GlintZStartUOff                               0x79b0
-#define GlintZStartUSec                               0x89b0
-#define GlintZStartUSecReg                            3
-#define GlintZStartUSecOff                            0x79b0
-
-#define GlintZStartL                                  0x89b8
-#define GlintZStartLTag                               0x0137
-#define GlintZStartLReg                                    1
-#define GlintZStartLOff                               0x79b8
-#define GlintZStartLSec                               0x89b8
-#define GlintZStartLSecReg                            3
-#define GlintZStartLSecOff                            0x79b8
-
-#define GlintdZdxU                                    0x89c0
-#define GlintdZdxUTag                                 0x0138
-#define GlintdZdxUReg                                      1
-#define GlintdZdxUOff                                 0x79c0
-#define GlintdZdxUSec                                 0x89c0
-#define GlintdZdxUSecReg                              3
-#define GlintdZdxUSecOff                              0x79c0
-
-#define GlintdZdxL                                    0x89c8
-#define GlintdZdxLTag                                 0x0139
-#define GlintdZdxLReg                                      1
-#define GlintdZdxLOff                                 0x79c8
-#define GlintdZdxLSec                                 0x89c8
-#define GlintdZdxLSecReg                              3
-#define GlintdZdxLSecOff                              0x79c8
-
-#define GlintdZdyDomU                                 0x89d0
-#define GlintdZdyDomUTag                              0x013a
-#define GlintdZdyDomUReg                                   1
-#define GlintdZdyDomUOff                              0x79d0
-#define GlintdZdyDomUSec                              0x89d0
-#define GlintdZdyDomUSecReg                           3
-#define GlintdZdyDomUSecOff                           0x79d0
-
-#define GlintdZdyDomL                                 0x89d8
-#define GlintdZdyDomLTag                              0x013b
-#define GlintdZdyDomLReg                                   1
-#define GlintdZdyDomLOff                              0x79d8
-#define GlintdZdyDomLSec                              0x89d8
-#define GlintdZdyDomLSecReg                           3
-#define GlintdZdyDomLSecOff                           0x79d8
-
-#define GlintFastClearDepth                           0x89e0
-#define GlintFastClearDepthTag                        0x013c
-#define GlintFastClearDepthReg                             1
-#define GlintFastClearDepthOff                        0x79e0
-#define GlintFastClearDepthSec                        0x89e0
-#define GlintFastClearDepthSecReg                     3
-#define GlintFastClearDepthSecOff                     0x79e0
-
-#define GlintFBReadMode                               0x8a80
-#define GlintFBReadModeTag                            0x0150
-#define GlintFBReadModeReg                                 1
-#define GlintFBReadModeOff                            0x7a80
-#define GlintFBReadModeSec                            0x8a80
-#define GlintFBReadModeSecReg                         3
-#define GlintFBReadModeSecOff                         0x7a80
-
-#define GlintFBSourceOffset                           0x8a88
-#define GlintFBSourceOffsetTag                        0x0151
-#define GlintFBSourceOffsetReg                             1
-#define GlintFBSourceOffsetOff                        0x7a88
-#define GlintFBSourceOffsetSec                        0x8a88
-#define GlintFBSourceOffsetSecReg                     3
-#define GlintFBSourceOffsetSecOff                     0x7a88
-
-#define GlintFBPixelOffset                            0x8a90
-#define GlintFBPixelOffsetTag                         0x0152
-#define GlintFBPixelOffsetReg                              1
-#define GlintFBPixelOffsetOff                         0x7a90
-#define GlintFBPixelOffsetSec                         0x8a90
-#define GlintFBPixelOffsetSecReg                      3
-#define GlintFBPixelOffsetSecOff                      0x7a90
-
-#define GlintFBColor                                  0x8a98
-#define GlintFBColorTag                               0x0153
-#define GlintFBColorReg                                    1
-#define GlintFBColorOff                               0x7a98
-#define GlintFBColorSec                               0x8a98
-#define GlintFBColorSecReg                            3
-#define GlintFBColorSecOff                            0x7a98
-
-#define GlintFBData                                   0x8aa0
-#define GlintFBDataTag                                0x0154
-#define GlintFBDataReg                                     1
-#define GlintFBDataOff                                0x7aa0
-#define GlintFBDataSec                                0x8aa0
-#define GlintFBDataSecReg                             3
-#define GlintFBDataSecOff                             0x7aa0
-
-#define GlintFBSourceData                             0x8aa8
-#define GlintFBSourceDataTag                          0x0155
-#define GlintFBSourceDataReg                               1
-#define GlintFBSourceDataOff                          0x7aa8
-#define GlintFBSourceDataSec                          0x8aa8
-#define GlintFBSourceDataSecReg                       3
-#define GlintFBSourceDataSecOff                       0x7aa8
-
-#define GlintFBWindowBase                             0x8ab0
-#define GlintFBWindowBaseTag                          0x0156
-#define GlintFBWindowBaseReg                               1
-#define GlintFBWindowBaseOff                          0x7ab0
-#define GlintFBWindowBaseSec                          0x8ab0
-#define GlintFBWindowBaseSecReg                       3
-#define GlintFBWindowBaseSecOff                       0x7ab0
-
-#define GlintFBWriteMode                              0x8ab8
-#define GlintFBWriteModeTag                           0x0157
-#define GlintFBWriteModeReg                                1
-#define GlintFBWriteModeOff                           0x7ab8
-#define GlintFBWriteModeSec                           0x8ab8
-#define GlintFBWriteModeSecReg                        3
-#define GlintFBWriteModeSecOff                        0x7ab8
-
-#define GlintFBHardwareWriteMask                      0x8ac0
-#define GlintFBHardwareWriteMaskTag                   0x0158
-#define GlintFBHardwareWriteMaskReg                        1
-#define GlintFBHardwareWriteMaskOff                   0x7ac0
-#define GlintFBHardwareWriteMaskSec                   0x8ac0
-#define GlintFBHardwareWriteMaskSecReg                3
-#define GlintFBHardwareWriteMaskSecOff                0x7ac0
-
-#define GlintFBBlockColor                             0x8ac8
-#define GlintFBBlockColorTag                          0x0159
-#define GlintFBBlockColorReg                               1
-#define GlintFBBlockColorOff                          0x7ac8
-#define GlintFBBlockColorSec                          0x8ac8
-#define GlintFBBlockColorSecReg                       3
-#define GlintFBBlockColorSecOff                       0x7ac8
-
-#define GlintPatternRamMode                           0x8af8
-#define GlintPatternRamModeTag                        0x015f
-#define GlintPatternRamModeReg                             1
-#define GlintPatternRamModeOff                        0x7af8
-#define GlintPatternRamModeSec                        0x8af8
-#define GlintPatternRamModeSecReg                     3
-#define GlintPatternRamModeSecOff                     0x7af8
-
-#define GlintPatternRamData0                          0x8b00
-#define GlintPatternRamData0Tag                       0x0160
-#define GlintPatternRamData0Reg                            1
-#define GlintPatternRamData0Off                       0x7b00
-#define GlintPatternRamData0Sec                       0x8b00
-#define GlintPatternRamData0SecReg                    3
-#define GlintPatternRamData0SecOff                    0x7b00
-
-#define GlintPatternRamData1                          0x8b08
-#define GlintPatternRamData1Tag                       0x0161
-#define GlintPatternRamData1Reg                            1
-#define GlintPatternRamData1Off                       0x7b08
-#define GlintPatternRamData1Sec                       0x8b08
-#define GlintPatternRamData1SecReg                    3
-#define GlintPatternRamData1SecOff                    0x7b08
-
-#define GlintPatternRamData2                          0x8b10
-#define GlintPatternRamData2Tag                       0x0162
-#define GlintPatternRamData2Reg                            1
-#define GlintPatternRamData2Off                       0x7b10
-#define GlintPatternRamData2Sec                       0x8b10
-#define GlintPatternRamData2SecReg                    3
-#define GlintPatternRamData2SecOff                    0x7b10
-
-#define GlintPatternRamData3                          0x8b18
-#define GlintPatternRamData3Tag                       0x0163
-#define GlintPatternRamData3Reg                            1
-#define GlintPatternRamData3Off                       0x7b18
-#define GlintPatternRamData3Sec                       0x8b18
-#define GlintPatternRamData3SecReg                    3
-#define GlintPatternRamData3SecOff                    0x7b18
-
-#define GlintPatternRamData4                          0x8b20
-#define GlintPatternRamData4Tag                       0x0164
-#define GlintPatternRamData4Reg                            1
-#define GlintPatternRamData4Off                       0x7b20
-#define GlintPatternRamData4Sec                       0x8b20
-#define GlintPatternRamData4SecReg                    3
-#define GlintPatternRamData4SecOff                    0x7b20
-
-#define GlintPatternRamData5                          0x8b28
-#define GlintPatternRamData5Tag                       0x0165
-#define GlintPatternRamData5Reg                            1
-#define GlintPatternRamData5Off                       0x7b28
-#define GlintPatternRamData5Sec                       0x8b28
-#define GlintPatternRamData5SecReg                    3
-#define GlintPatternRamData5SecOff                    0x7b28
-
-#define GlintPatternRamData6                          0x8b30
-#define GlintPatternRamData6Tag                       0x0166
-#define GlintPatternRamData6Reg                            1
-#define GlintPatternRamData6Off                       0x7b30
-#define GlintPatternRamData6Sec                       0x8b30
-#define GlintPatternRamData6SecReg                    3
-#define GlintPatternRamData6SecOff                    0x7b30
-
-#define GlintPatternRamData7                          0x8b38
-#define GlintPatternRamData7Tag                       0x0167
-#define GlintPatternRamData7Reg                            1
-#define GlintPatternRamData7Off                       0x7b38
-#define GlintPatternRamData7Sec                       0x8b38
-#define GlintPatternRamData7SecReg                    3
-#define GlintPatternRamData7SecOff                    0x7b38
-
-#define GlintPatternRamData8                          0x8b40
-#define GlintPatternRamData8Tag                       0x0168
-#define GlintPatternRamData8Reg                            1
-#define GlintPatternRamData8Off                       0x7b40
-#define GlintPatternRamData8Sec                       0x8b40
-#define GlintPatternRamData8SecReg                    3
-#define GlintPatternRamData8SecOff                    0x7b40
-
-#define GlintPatternRamData9                          0x8b48
-#define GlintPatternRamData9Tag                       0x0169
-#define GlintPatternRamData9Reg                            1
-#define GlintPatternRamData9Off                       0x7b48
-#define GlintPatternRamData9Sec                       0x8b48
-#define GlintPatternRamData9SecReg                    3
-#define GlintPatternRamData9SecOff                    0x7b48
-
-#define GlintPatternRamData10                         0x8b50
-#define GlintPatternRamData10Tag                      0x016a
-#define GlintPatternRamData10Reg                           1
-#define GlintPatternRamData10Off                      0x7b50
-#define GlintPatternRamData10Sec                      0x8b50
-#define GlintPatternRamData10SecReg                   3
-#define GlintPatternRamData10SecOff                   0x7b50
-
-#define GlintPatternRamData11                         0x8b58
-#define GlintPatternRamData11Tag                      0x016b
-#define GlintPatternRamData11Reg                           1
-#define GlintPatternRamData11Off                      0x7b58
-#define GlintPatternRamData11Sec                      0x8b58
-#define GlintPatternRamData11SecReg                   3
-#define GlintPatternRamData11SecOff                   0x7b58
-
-#define GlintPatternRamData12                         0x8b60
-#define GlintPatternRamData12Tag                      0x016c
-#define GlintPatternRamData12Reg                           1
-#define GlintPatternRamData12Off                      0x7b60
-#define GlintPatternRamData12Sec                      0x8b60
-#define GlintPatternRamData12SecReg                   3
-#define GlintPatternRamData12SecOff                   0x7b60
-
-#define GlintPatternRamData13                         0x8b68
-#define GlintPatternRamData13Tag                      0x016d
-#define GlintPatternRamData13Reg                           1
-#define GlintPatternRamData13Off                      0x7b68
-#define GlintPatternRamData13Sec                      0x8b68
-#define GlintPatternRamData13SecReg                   3
-#define GlintPatternRamData13SecOff                   0x7b68
-
-#define GlintPatternRamData14                         0x8b70
-#define GlintPatternRamData14Tag                      0x016e
-#define GlintPatternRamData14Reg                           1
-#define GlintPatternRamData14Off                      0x7b70
-#define GlintPatternRamData14Sec                      0x8b70
-#define GlintPatternRamData14SecReg                   3
-#define GlintPatternRamData14SecOff                   0x7b70
-
-#define GlintPatternRamData15                         0x8b78
-#define GlintPatternRamData15Tag                      0x016f
-#define GlintPatternRamData15Reg                           1
-#define GlintPatternRamData15Off                      0x7b78
-#define GlintPatternRamData15Sec                      0x8b78
-#define GlintPatternRamData15SecReg                   3
-#define GlintPatternRamData15SecOff                   0x7b78
-
-#define GlintPatternRamData16                         0x8b80
-#define GlintPatternRamData16Tag                      0x0170
-#define GlintPatternRamData16Reg                           1
-#define GlintPatternRamData16Off                      0x7b80
-#define GlintPatternRamData16Sec                      0x8b80
-#define GlintPatternRamData16SecReg                   3
-#define GlintPatternRamData16SecOff                   0x7b80
-
-#define GlintPatternRamData17                         0x8b88
-#define GlintPatternRamData17Tag                      0x0171
-#define GlintPatternRamData17Reg                           1
-#define GlintPatternRamData17Off                      0x7b88
-#define GlintPatternRamData17Sec                      0x8b88
-#define GlintPatternRamData17SecReg                   3
-#define GlintPatternRamData17SecOff                   0x7b88
-
-#define GlintPatternRamData18                         0x8b90
-#define GlintPatternRamData18Tag                      0x0172
-#define GlintPatternRamData18Reg                           1
-#define GlintPatternRamData18Off                      0x7b90
-#define GlintPatternRamData18Sec                      0x8b90
-#define GlintPatternRamData18SecReg                   3
-#define GlintPatternRamData18SecOff                   0x7b90
-
-#define GlintPatternRamData19                         0x8b98
-#define GlintPatternRamData19Tag                      0x0173
-#define GlintPatternRamData19Reg                           1
-#define GlintPatternRamData19Off                      0x7b98
-#define GlintPatternRamData19Sec                      0x8b98
-#define GlintPatternRamData19SecReg                   3
-#define GlintPatternRamData19SecOff                   0x7b98
-
-#define GlintPatternRamData20                         0x8ba0
-#define GlintPatternRamData20Tag                      0x0174
-#define GlintPatternRamData20Reg                           1
-#define GlintPatternRamData20Off                      0x7ba0
-#define GlintPatternRamData20Sec                      0x8ba0
-#define GlintPatternRamData20SecReg                   3
-#define GlintPatternRamData20SecOff                   0x7ba0
-
-#define GlintPatternRamData21                         0x8ba8
-#define GlintPatternRamData21Tag                      0x0175
-#define GlintPatternRamData21Reg                           1
-#define GlintPatternRamData21Off                      0x7ba8
-#define GlintPatternRamData21Sec                      0x8ba8
-#define GlintPatternRamData21SecReg                   3
-#define GlintPatternRamData21SecOff                   0x7ba8
-
-#define GlintPatternRamData22                         0x8bb0
-#define GlintPatternRamData22Tag                      0x0176
-#define GlintPatternRamData22Reg                           1
-#define GlintPatternRamData22Off                      0x7bb0
-#define GlintPatternRamData22Sec                      0x8bb0
-#define GlintPatternRamData22SecReg                   3
-#define GlintPatternRamData22SecOff                   0x7bb0
-
-#define GlintPatternRamData23                         0x8bb8
-#define GlintPatternRamData23Tag                      0x0177
-#define GlintPatternRamData23Reg                           1
-#define GlintPatternRamData23Off                      0x7bb8
-#define GlintPatternRamData23Sec                      0x8bb8
-#define GlintPatternRamData23SecReg                   3
-#define GlintPatternRamData23SecOff                   0x7bb8
-
-#define GlintPatternRamData24                         0x8bc0
-#define GlintPatternRamData24Tag                      0x0178
-#define GlintPatternRamData24Reg                           1
-#define GlintPatternRamData24Off                      0x7bc0
-#define GlintPatternRamData24Sec                      0x8bc0
-#define GlintPatternRamData24SecReg                   3
-#define GlintPatternRamData24SecOff                   0x7bc0
-
-#define GlintPatternRamData25                         0x8bc8
-#define GlintPatternRamData25Tag                      0x0179
-#define GlintPatternRamData25Reg                           1
-#define GlintPatternRamData25Off                      0x7bc8
-#define GlintPatternRamData25Sec                      0x8bc8
-#define GlintPatternRamData25SecReg                   3
-#define GlintPatternRamData25SecOff                   0x7bc8
-
-#define GlintPatternRamData26                         0x8bd0
-#define GlintPatternRamData26Tag                      0x017a
-#define GlintPatternRamData26Reg                           1
-#define GlintPatternRamData26Off                      0x7bd0
-#define GlintPatternRamData26Sec                      0x8bd0
-#define GlintPatternRamData26SecReg                   3
-#define GlintPatternRamData26SecOff                   0x7bd0
-
-#define GlintPatternRamData27                         0x8bd8
-#define GlintPatternRamData27Tag                      0x017b
-#define GlintPatternRamData27Reg                           1
-#define GlintPatternRamData27Off                      0x7bd8
-#define GlintPatternRamData27Sec                      0x8bd8
-#define GlintPatternRamData27SecReg                   3
-#define GlintPatternRamData27SecOff                   0x7bd8
-
-#define GlintPatternRamData28                         0x8be0
-#define GlintPatternRamData28Tag                      0x017c
-#define GlintPatternRamData28Reg                           1
-#define GlintPatternRamData28Off                      0x7be0
-#define GlintPatternRamData28Sec                      0x8be0
-#define GlintPatternRamData28SecReg                   3
-#define GlintPatternRamData28SecOff                   0x7be0
-
-#define GlintPatternRamData29                         0x8be8
-#define GlintPatternRamData29Tag                      0x017d
-#define GlintPatternRamData29Reg                           1
-#define GlintPatternRamData29Off                      0x7be8
-#define GlintPatternRamData29Sec                      0x8be8
-#define GlintPatternRamData29SecReg                   3
-#define GlintPatternRamData29SecOff                   0x7be8
-
-#define GlintPatternRamData30                         0x8bf0
-#define GlintPatternRamData30Tag                      0x017e
-#define GlintPatternRamData30Reg                           1
-#define GlintPatternRamData30Off                      0x7bf0
-#define GlintPatternRamData30Sec                      0x8bf0
-#define GlintPatternRamData30SecReg                   3
-#define GlintPatternRamData30SecOff                   0x7bf0
-
-#define GlintPatternRamData31                         0x8bf8
-#define GlintPatternRamData31Tag                      0x017f
-#define GlintPatternRamData31Reg                           1
-#define GlintPatternRamData31Off                      0x7bf8
-#define GlintPatternRamData31Sec                      0x8bf8
-#define GlintPatternRamData31SecReg                   3
-#define GlintPatternRamData31SecOff                   0x7bf8
-
-#define GlintFBBlockColorU                            0x8c68
-#define GlintFBBlockColorUTag                         0x018d
-#define GlintFBBlockColorUReg                              1
-#define GlintFBBlockColorUOff                         0x7c68
-#define GlintFBBlockColorUSec                         0x8c68
-#define GlintFBBlockColorUSecReg                      3
-#define GlintFBBlockColorUSecOff                      0x7c68
-
-#define GlintFBBlockColorL                            0x8c70
-#define GlintFBBlockColorLTag                         0x018e
-#define GlintFBBlockColorLReg                              1
-#define GlintFBBlockColorLOff                         0x7c70
-#define GlintFBBlockColorLSec                         0x8c70
-#define GlintFBBlockColorLSecReg                      3
-#define GlintFBBlockColorLSecOff                      0x7c70
-
-#define GlintSuspendUntilFrameBlank                   0x8c78
-#define GlintSuspendUntilFrameBlankTag                0x018f
-#define GlintSuspendUntilFrameBlankReg                     1
-#define GlintSuspendUntilFrameBlankOff                0x7c78
-#define GlintSuspendUntilFrameBlankSec                0x8c78
-#define GlintSuspendUntilFrameBlankSecReg             3
-#define GlintSuspendUntilFrameBlankSecOff             0x7c78
-
-#define GlintFilterMode                               0x8c00
-#define GlintFilterModeTag                            0x0180
-#define GlintFilterModeReg                                 1
-#define GlintFilterModeOff                            0x7c00
-#define GlintFilterModeSec                            0x8c00
-#define GlintFilterModeSecReg                         3
-#define GlintFilterModeSecOff                         0x7c00
-
-#define GlintStatisticMode                            0x8c08
-#define GlintStatisticModeTag                         0x0181
-#define GlintStatisticModeReg                              1
-#define GlintStatisticModeOff                         0x7c08
-#define GlintStatisticModeSec                         0x8c08
-#define GlintStatisticModeSecReg                      3
-#define GlintStatisticModeSecOff                      0x7c08
-
-#define GlintMinRegion                                0x8c10
-#define GlintMinRegionTag                             0x0182
-#define GlintMinRegionReg                                  1
-#define GlintMinRegionOff                             0x7c10
-#define GlintMinRegionSec                             0x8c10
-#define GlintMinRegionSecReg                          3
-#define GlintMinRegionSecOff                          0x7c10
-
-#define GlintMaxRegion                                0x8c18
-#define GlintMaxRegionTag                             0x0183
-#define GlintMaxRegionReg                                  1
-#define GlintMaxRegionOff                             0x7c18
-#define GlintMaxRegionSec                             0x8c18
-#define GlintMaxRegionSecReg                          3
-#define GlintMaxRegionSecOff                          0x7c18
-
-#define GlintResetPickResult                          0x8c20
-#define GlintResetPickResultTag                       0x0184
-#define GlintResetPickResultReg                            1
-#define GlintResetPickResultOff                       0x7c20
-#define GlintResetPickResultSec                       0x8c20
-#define GlintResetPickResultSecReg                    3
-#define GlintResetPickResultSecOff                    0x7c20
-
-#define GlintMitHitRegion                             0x8c28
-#define GlintMitHitRegionTag                          0x0185
-#define GlintMitHitRegionReg                               1
-#define GlintMitHitRegionOff                          0x7c28
-#define GlintMitHitRegionSec                          0x8c28
-#define GlintMitHitRegionSecReg                       3
-#define GlintMitHitRegionSecOff                       0x7c28
-
-#define GlintMaxHitRegion                             0x8c30
-#define GlintMaxHitRegionTag                          0x0186
-#define GlintMaxHitRegionReg                               1
-#define GlintMaxHitRegionOff                          0x7c30
-#define GlintMaxHitRegionSec                          0x8c30
-#define GlintMaxHitRegionSecReg                       3
-#define GlintMaxHitRegionSecOff                       0x7c30
-
-#define GlintPickResult                               0x8c38
-#define GlintPickResultTag                            0x0187
-#define GlintPickResultReg                                 1
-#define GlintPickResultOff                            0x7c38
-#define GlintPickResultSec                            0x8c38
-#define GlintPickResultSecReg                         3
-#define GlintPickResultSecOff                         0x7c38
-
-#define GlintGLINTSync                                0x8c40
-#define GlintGLINTSyncTag                             0x0188
-#define GlintGLINTSyncReg                                  1
-#define GlintGLINTSyncOff                             0x7c40
-#define GlintGLINTSyncSec                             0x8c40
-#define GlintGLINTSyncSecReg                          3
-#define GlintGLINTSyncSecOff                          0x7c40
-
-#define GlintKsRStart                                 0x8c80
-#define GlintKsRStartTag                              0x0190
-#define GlintKsRStartReg                                   1
-#define GlintKsRStartOff                              0x7c80
-#define GlintKsRStartSec                              0x8c80
-#define GlintKsRStartSecReg                           3
-#define GlintKsRStartSecOff                           0x7c80
-
-#define GlintdKsRdx                                   0x8c88
-#define GlintdKsRdxTag                                0x0191
-#define GlintdKsRdxReg                                     1
-#define GlintdKsRdxOff                                0x7c88
-#define GlintdKsRdxSec                                0x8c88
-#define GlintdKsRdxSecReg                             3
-#define GlintdKsRdxSecOff                             0x7c88
-
-#define GlintdKsRdyDom                                0x8c90
-#define GlintdKsRdyDomTag                             0x0192
-#define GlintdKsRdyDomReg                                  1
-#define GlintdKsRdyDomOff                             0x7c90
-#define GlintdKsRdyDomSec                             0x8c90
-#define GlintdKsRdyDomSecReg                          3
-#define GlintdKsRdyDomSecOff                          0x7c90
-
-#define GlintKsGStart                                 0x8c98
-#define GlintKsGStartTag                              0x0193
-#define GlintKsGStartReg                                   1
-#define GlintKsGStartOff                              0x7c98
-#define GlintKsGStartSec                              0x8c98
-#define GlintKsGStartSecReg                           3
-#define GlintKsGStartSecOff                           0x7c98
-
-#define GlintdKsGdx                                   0x8ca0
-#define GlintdKsGdxTag                                0x0194
-#define GlintdKsGdxReg                                     1
-#define GlintdKsGdxOff                                0x7ca0
-#define GlintdKsGdxSec                                0x8ca0
-#define GlintdKsGdxSecReg                             3
-#define GlintdKsGdxSecOff                             0x7ca0
-
-#define GlintdKsGdyDom                                0x8ca8
-#define GlintdKsGdyDomTag                             0x0195
-#define GlintdKsGdyDomReg                                  1
-#define GlintdKsGdyDomOff                             0x7ca8
-#define GlintdKsGdyDomSec                             0x8ca8
-#define GlintdKsGdyDomSecReg                          3
-#define GlintdKsGdyDomSecOff                          0x7ca8
-
-#define GlintKsBStart                                 0x8cb0
-#define GlintKsBStartTag                              0x0196
-#define GlintKsBStartReg                                   1
-#define GlintKsBStartOff                              0x7cb0
-#define GlintKsBStartSec                              0x8cb0
-#define GlintKsBStartSecReg                           3
-#define GlintKsBStartSecOff                           0x7cb0
-
-#define GlintdKsBdx                                   0x8cb8
-#define GlintdKsBdxTag                                0x0197
-#define GlintdKsBdxReg                                     1
-#define GlintdKsBdxOff                                0x7cb8
-#define GlintdKsBdxSec                                0x8cb8
-#define GlintdKsBdxSecReg                             3
-#define GlintdKsBdxSecOff                             0x7cb8
-
-#define GlintdKsBdyDom                                0x8cc0
-#define GlintdKsBdyDomTag                             0x0198
-#define GlintdKsBdyDomReg                                  1
-#define GlintdKsBdyDomOff                             0x7cc0
-#define GlintdKsBdyDomSec                             0x8cc0
-#define GlintdKsBdyDomSecReg                          3
-#define GlintdKsBdyDomSecOff                          0x7cc0
-
-#define GlintKdRStart                                 0x8d00
-#define GlintKdRStartTag                              0x01a0
-#define GlintKdRStartReg                                   1
-#define GlintKdRStartOff                              0x7d00
-#define GlintKdRStartSec                              0x8d00
-#define GlintKdRStartSecReg                           3
-#define GlintKdRStartSecOff                           0x7d00
-
-#define GlintdKdRdx                                   0x8d08
-#define GlintdKdRdxTag                                0x01a1
-#define GlintdKdRdxReg                                     1
-#define GlintdKdRdxOff                                0x7d08
-#define GlintdKdRdxSec                                0x8d08
-#define GlintdKdRdxSecReg                             3
-#define GlintdKdRdxSecOff                             0x7d08
-
-#define GlintdKdRdyDom                                0x8d10
-#define GlintdKdRdyDomTag                             0x01a2
-#define GlintdKdRdyDomReg                                  1
-#define GlintdKdRdyDomOff                             0x7d10
-#define GlintdKdRdyDomSec                             0x8d10
-#define GlintdKdRdyDomSecReg                          3
-#define GlintdKdRdyDomSecOff                          0x7d10
-
-#define GlintKdGStart                                 0x8d18
-#define GlintKdGStartTag                              0x01a3
-#define GlintKdGStartReg                                   1
-#define GlintKdGStartOff                              0x7d18
-#define GlintKdGStartSec                              0x8d18
-#define GlintKdGStartSecReg                           3
-#define GlintKdGStartSecOff                           0x7d18
-
-#define GlintdKdGdx                                   0x8d20
-#define GlintdKdGdxTag                                0x01a4
-#define GlintdKdGdxReg                                     1
-#define GlintdKdGdxOff                                0x7d20
-#define GlintdKdGdxSec                                0x8d20
-#define GlintdKdGdxSecReg                             3
-#define GlintdKdGdxSecOff                             0x7d20
-
-#define GlintdKdGdyDom                                0x8d28
-#define GlintdKdGdyDomTag                             0x01a5
-#define GlintdKdGdyDomReg                                  1
-#define GlintdKdGdyDomOff                             0x7d28
-#define GlintdKdGdyDomSec                             0x8d28
-#define GlintdKdGdyDomSecReg                          3
-#define GlintdKdGdyDomSecOff                          0x7d28
-
-#define GlintKdBStart                                 0x8d30
-#define GlintKdBStartTag                              0x01a6
-#define GlintKdBStartReg                                   1
-#define GlintKdBStartOff                              0x7d30
-#define GlintKdBStartSec                              0x8d30
-#define GlintKdBStartSecReg                           3
-#define GlintKdBStartSecOff                           0x7d30
-
-#define GlintdKdBdx                                   0x8d38
-#define GlintdKdBdxTag                                0x01a7
-#define GlintdKdBdxReg                                     1
-#define GlintdKdBdxOff                                0x7d38
-#define GlintdKdBdxSec                                0x8d38
-#define GlintdKdBdxSecReg                             3
-#define GlintdKdBdxSecOff                             0x7d38
-
-#define GlintdKdBdyDom                                0x8d40
-#define GlintdKdBdyDomTag                             0x01a8
-#define GlintdKdBdyDomReg                                  1
-#define GlintdKdBdyDomOff                             0x7d40
-#define GlintdKdBdyDomSec                             0x8d40
-#define GlintdKdBdyDomSecReg                          3
-#define GlintdKdBdyDomSecOff                          0x7d40
-
-#define GlintContextDump                              0x8dc0
-#define GlintContextDumpTag                           0x01b8
-#define GlintContextDumpReg                                1
-#define GlintContextDumpOff                           0x7dc0
-
-#define GlintContextRestore                           0x8dc8
-#define GlintContextRestoreTag                        0x01b9
-#define GlintContextRestoreReg                             1
-#define GlintContextRestoreOff                        0x7dc8
-
-#define GlintContextData                              0x8dd0
-#define GlintContextDataTag                           0x01ba
-#define GlintContextDataReg                                1
-#define GlintContextDataOff                           0x7dd0
-
-#define GlintFeedbackToken                            0x8f80
-#define GlintFeedbackTokenTag                         0x01f0
-#define GlintFeedbackTokenReg                              1
-#define GlintFeedbackTokenOff                         0x7f80
-
-#define GlintFeedbackX                                0x8f88
-#define GlintFeedbackXTag                             0x01f1
-#define GlintFeedbackXReg                                  1
-#define GlintFeedbackXOff                             0x7f88
-
-#define GlintFeedbackY                                0x8f90
-#define GlintFeedbackYTag                             0x01f2
-#define GlintFeedbackYReg                                  1
-#define GlintFeedbackYOff                             0x7f90
-
-#define GlintFeedbackZ                                0x8f98
-#define GlintFeedbackZTag                             0x01f3
-#define GlintFeedbackZReg                                  1
-#define GlintFeedbackZOff                             0x7f98
-
-#define GlintFeedbackW                                0x8fa0
-#define GlintFeedbackWTag                             0x01f4
-#define GlintFeedbackWReg                                  1
-#define GlintFeedbackWOff                             0x7fa0
-
-#define GlintFeedbackRed                              0x8fa8
-#define GlintFeedbackRedTag                           0x01f5
-#define GlintFeedbackRedReg                                1
-#define GlintFeedbackRedOff                           0x7fa8
-
-#define GlintFeedbackGreen                            0x8fb0
-#define GlintFeedbackGreenTag                         0x01f6
-#define GlintFeedbackGreenReg                              1
-#define GlintFeedbackGreenOff                         0x7fb0
-
-#define GlintFeedbackBlue                             0x8fb8
-#define GlintFeedbackBlueTag                          0x01f7
-#define GlintFeedbackBlueReg                               1
-#define GlintFeedbackBlueOff                          0x7fb8
-
-#define GlintFeedbackAlpha                            0x8fc0
-#define GlintFeedbackAlphaTag                         0x01f8
-#define GlintFeedbackAlphaReg                              1
-#define GlintFeedbackAlphaOff                         0x7fc0
-
-#define GlintFeedbackS                                0x8fc8
-#define GlintFeedbackSTag                             0x01f9
-#define GlintFeedbackSReg                                  1
-#define GlintFeedbackSOff                             0x7fc8
-
-#define GlintFeedbackT                                0x8fd0
-#define GlintFeedbackTTag                             0x01fa
-#define GlintFeedbackTReg                                  1
-#define GlintFeedbackTOff                             0x7fd0
-
-#define GlintFeedbackR                                0x8fd8
-#define GlintFeedbackRTag                             0x01fb
-#define GlintFeedbackRReg                                  1
-#define GlintFeedbackROff                             0x7fd8
-
-#define GlintFeedbackQ                                0x8fe0
-#define GlintFeedbackQTag                             0x01fc
-#define GlintFeedbackQReg                                  1
-#define GlintFeedbackQOff                             0x7fe0
-
-#define GlintSelectRecord                             0x8fe8
-#define GlintSelectRecordTag                          0x01fd
-#define GlintSelectRecordReg                               1
-#define GlintSelectRecordOff                          0x7fe8
-
-#define GlintPassThrough                              0x8ff0
-#define GlintPassThroughTag                           0x01fe
-#define GlintPassThroughReg                                1
-#define GlintPassThroughOff                           0x7ff0
-
-#define GlintEndOfFeedback                            0x8ff8
-#define GlintEndOfFeedbackTag                         0x01ff
-#define GlintEndOfFeedbackReg                              1
-#define GlintEndOfFeedbackOff                         0x7ff8
-
-#define GlintV0FixedS                                 0x9000
-#define GlintV0FixedSTag                              0x0200
-#define GlintV0FixedSReg                                   1
-#define GlintV0FixedSOff                              0x8000
-
-#define GlintV0FixedT                                 0x9008
-#define GlintV0FixedTTag                              0x0201
-#define GlintV0FixedTReg                                   1
-#define GlintV0FixedTOff                              0x8008
-
-#define GlintV0FixedQ                                 0x9010
-#define GlintV0FixedQTag                              0x0202
-#define GlintV0FixedQReg                                   1
-#define GlintV0FixedQOff                              0x8010
-
-#define GlintV0FixedKs                                0x9018
-#define GlintV0FixedKsTag                             0x0203
-#define GlintV0FixedKsReg                                  1
-#define GlintV0FixedKsOff                             0x8018
-
-#define GlintV0FixedKd                                0x9020
-#define GlintV0FixedKdTag                             0x0204
-#define GlintV0FixedKdReg                                  1
-#define GlintV0FixedKdOff                             0x8020
-
-#define GlintV0FixedR                                 0x9028
-#define GlintV0FixedRTag                              0x0205
-#define GlintV0FixedRReg                                   1
-#define GlintV0FixedROff                              0x8028
-
-#define GlintV0FixedG                                 0x9030
-#define GlintV0FixedGTag                              0x0206
-#define GlintV0FixedGReg                                   1
-#define GlintV0FixedGOff                              0x8030
-
-#define GlintV0FixedB                                 0x9038
-#define GlintV0FixedBTag                              0x0207
-#define GlintV0FixedBReg                                   1
-#define GlintV0FixedBOff                              0x8038
-
-#define GlintV0FixedA                                 0x9040
-#define GlintV0FixedATag                              0x0208
-#define GlintV0FixedAReg                                   1
-#define GlintV0FixedAOff                              0x8040
-
-#define GlintV0FixedF                                 0x9048
-#define GlintV0FixedFTag                              0x0209
-#define GlintV0FixedFReg                                   1
-#define GlintV0FixedFOff                              0x8048
-
-#define GlintV0FixedX                                 0x9050
-#define GlintV0FixedXTag                              0x020a
-#define GlintV0FixedXReg                                   1
-#define GlintV0FixedXOff                              0x8050
-
-#define GlintV0FixedY                                 0x9058
-#define GlintV0FixedYTag                              0x020b
-#define GlintV0FixedYReg                                   1
-#define GlintV0FixedYOff                              0x8058
-
-#define GlintV0FixedZ                                 0x9060
-#define GlintV0FixedZTag                              0x020c
-#define GlintV0FixedZReg                                   1
-#define GlintV0FixedZOff                              0x8060
-
-#define GlintV1FixedS                                 0x9080
-#define GlintV1FixedSTag                              0x0210
-#define GlintV1FixedSReg                                   1
-#define GlintV1FixedSOff                              0x8080
-
-#define GlintV1FixedT                                 0x9088
-#define GlintV1FixedTTag                              0x0211
-#define GlintV1FixedTReg                                   1
-#define GlintV1FixedTOff                              0x8088
-
-#define GlintV1FixedQ                                 0x9090
-#define GlintV1FixedQTag                              0x0212
-#define GlintV1FixedQReg                                   1
-#define GlintV1FixedQOff                              0x8090
-
-#define GlintV1FixedKs                                0x9098
-#define GlintV1FixedKsTag                             0x0213
-#define GlintV1FixedKsReg                                  1
-#define GlintV1FixedKsOff                             0x8098
-
-#define GlintV1FixedKd                                0x90a0
-#define GlintV1FixedKdTag                             0x0214
-#define GlintV1FixedKdReg                                  1
-#define GlintV1FixedKdOff                             0x80a0
-
-#define GlintV1FixedR                                 0x90a8
-#define GlintV1FixedRTag                              0x0215
-#define GlintV1FixedRReg                                   1
-#define GlintV1FixedROff                              0x80a8
-
-#define GlintV1FixedG                                 0x90b0
-#define GlintV1FixedGTag                              0x0216
-#define GlintV1FixedGReg                                   1
-#define GlintV1FixedGOff                              0x80b0
-
-#define GlintV1FixedB                                 0x90b8
-#define GlintV1FixedBTag                              0x0217
-#define GlintV1FixedBReg                                   1
-#define GlintV1FixedBOff                              0x80b8
-
-#define GlintV1FixedA                                 0x90c0
-#define GlintV1FixedATag                              0x0218
-#define GlintV1FixedAReg                                   1
-#define GlintV1FixedAOff                              0x80c0
-
-#define GlintV1FixedF                                 0x90c8
-#define GlintV1FixedFTag                              0x0219
-#define GlintV1FixedFReg                                   1
-#define GlintV1FixedFOff                              0x80c8
-
-#define GlintV1FixedX                                 0x90d0
-#define GlintV1FixedXTag                              0x021a
-#define GlintV1FixedXReg                                   1
-#define GlintV1FixedXOff                              0x80d0
-
-#define GlintV1FixedY                                 0x90d8
-#define GlintV1FixedYTag                              0x021b
-#define GlintV1FixedYReg                                   1
-#define GlintV1FixedYOff                              0x80d8
-
-#define GlintV1FixedZ                                 0x90e0
-#define GlintV1FixedZTag                              0x021c
-#define GlintV1FixedZReg                                   1
-#define GlintV1FixedZOff                              0x80e0
-
-#define GlintV2FixedS                                 0x9100
-#define GlintV2FixedSTag                              0x0220
-#define GlintV2FixedSReg                                   1
-#define GlintV2FixedSOff                              0x8100
-
-#define GlintV2FixedT                                 0x9108
-#define GlintV2FixedTTag                              0x0221
-#define GlintV2FixedTReg                                   1
-#define GlintV2FixedTOff                              0x8108
-
-#define GlintV2FixedQ                                 0x9110
-#define GlintV2FixedQTag                              0x0222
-#define GlintV2FixedQReg                                   1
-#define GlintV2FixedQOff                              0x8110
-
-#define GlintV2FixedKs                                0x9118
-#define GlintV2FixedKsTag                             0x0223
-#define GlintV2FixedKsReg                                  1
-#define GlintV2FixedKsOff                             0x8118
-
-#define GlintV2FixedKd                                0x9120
-#define GlintV2FixedKdTag                             0x0224
-#define GlintV2FixedKdReg                                  1
-#define GlintV2FixedKdOff                             0x8120
-
-#define GlintV2FixedR                                 0x9128
-#define GlintV2FixedRTag                              0x0225
-#define GlintV2FixedRReg                                   1
-#define GlintV2FixedROff                              0x8128
-
-#define GlintV2FixedG                                 0x9130
-#define GlintV2FixedGTag                              0x0226
-#define GlintV2FixedGReg                                   1
-#define GlintV2FixedGOff                              0x8130
-
-#define GlintV2FixedB                                 0x9138
-#define GlintV2FixedBTag                              0x0227
-#define GlintV2FixedBReg                                   1
-#define GlintV2FixedBOff                              0x8138
-
-#define GlintV2FixedA                                 0x9140
-#define GlintV2FixedATag                              0x0228
-#define GlintV2FixedAReg                                   1
-#define GlintV2FixedAOff                              0x8140
-
-#define GlintV2FixedF                                 0x9148
-#define GlintV2FixedFTag                              0x0229
-#define GlintV2FixedFReg                                   1
-#define GlintV2FixedFOff                              0x8148
-
-#define GlintV2FixedX                                 0x9150
-#define GlintV2FixedXTag                              0x022a
-#define GlintV2FixedXReg                                   1
-#define GlintV2FixedXOff                              0x8150
-
-#define GlintV2FixedY                                 0x9158
-#define GlintV2FixedYTag                              0x022b
-#define GlintV2FixedYReg                                   1
-#define GlintV2FixedYOff                              0x8158
-
-#define GlintV2FixedZ                                 0x9160
-#define GlintV2FixedZTag                              0x022c
-#define GlintV2FixedZReg                                   1
-#define GlintV2FixedZOff                              0x8160
-
-#define GlintV0FloatS                                 0x9180
-#define GlintV0FloatSTag                              0x0230
-#define GlintV0FloatSReg                                   1
-#define GlintV0FloatSOff                              0x8180
-
-#define GlintV0FloatT                                 0x9188
-#define GlintV0FloatTTag                              0x0231
-#define GlintV0FloatTReg                                   1
-#define GlintV0FloatTOff                              0x8188
-
-#define GlintV0FloatQ                                 0x9190
-#define GlintV0FloatQTag                              0x0232
-#define GlintV0FloatQReg                                   1
-#define GlintV0FloatQOff                              0x8190
-
-#define GlintV0FloatKs                                0x9198
-#define GlintV0FloatKsTag                             0x0233
-#define GlintV0FloatKsReg                                  1
-#define GlintV0FloatKsOff                             0x8198
-
-#define GlintV0FloatKd                                0x91a0
-#define GlintV0FloatKdTag                             0x0234
-#define GlintV0FloatKdReg                                  1
-#define GlintV0FloatKdOff                             0x81a0
-
-#define GlintV0FloatR                                 0x91a8
-#define GlintV0FloatRTag                              0x0235
-#define GlintV0FloatRReg                                   1
-#define GlintV0FloatROff                              0x81a8
-
-#define GlintV0FloatG                                 0x91b0
-#define GlintV0FloatGTag                              0x0236
-#define GlintV0FloatGReg                                   1
-#define GlintV0FloatGOff                              0x81b0
-
-#define GlintV0FloatB                                 0x91b8
-#define GlintV0FloatBTag                              0x0237
-#define GlintV0FloatBReg                                   1
-#define GlintV0FloatBOff                              0x81b8
-
-#define GlintV0FloatA                                 0x91c0
-#define GlintV0FloatATag                              0x0238
-#define GlintV0FloatAReg                                   1
-#define GlintV0FloatAOff                              0x81c0
-
-#define GlintV0FloatF                                 0x91c8
-#define GlintV0FloatFTag                              0x0239
-#define GlintV0FloatFReg                                   1
-#define GlintV0FloatFOff                              0x81c8
-
-#define GlintV0FloatX                                 0x91d0
-#define GlintV0FloatXTag                              0x023a
-#define GlintV0FloatXReg                                   1
-#define GlintV0FloatXOff                              0x81d0
-
-#define GlintV0FloatY                                 0x91d8
-#define GlintV0FloatYTag                              0x023b
-#define GlintV0FloatYReg                                   1
-#define GlintV0FloatYOff                              0x81d8
-
-#define GlintV0FloatZ                                 0x91e0
-#define GlintV0FloatZTag                              0x023c
-#define GlintV0FloatZReg                                   1
-#define GlintV0FloatZOff                              0x81e0
-
-#define GlintV1FloatS                                 0x9200
-#define GlintV1FloatSTag                              0x0240
-#define GlintV1FloatSReg                                   1
-#define GlintV1FloatSOff                              0x8200
-
-#define GlintV1FloatT                                 0x9208
-#define GlintV1FloatTTag                              0x0241
-#define GlintV1FloatTReg                                   1
-#define GlintV1FloatTOff                              0x8208
-
-#define GlintV1FloatQ                                 0x9210
-#define GlintV1FloatQTag                              0x0242
-#define GlintV1FloatQReg                                   1
-#define GlintV1FloatQOff                              0x8210
-
-#define GlintV1FloatKs                                0x9218
-#define GlintV1FloatKsTag                             0x0243
-#define GlintV1FloatKsReg                                  1
-#define GlintV1FloatKsOff                             0x8218
-
-#define GlintV1FloatKd                                0x9220
-#define GlintV1FloatKdTag                             0x0244
-#define GlintV1FloatKdReg                                  1
-#define GlintV1FloatKdOff                             0x8220
-
-#define GlintV1FloatR                                 0x9228
-#define GlintV1FloatRTag                              0x0245
-#define GlintV1FloatRReg                                   1
-#define GlintV1FloatROff                              0x8228
-
-#define GlintV1FloatG                                 0x9230
-#define GlintV1FloatGTag                              0x0246
-#define GlintV1FloatGReg                                   1
-#define GlintV1FloatGOff                              0x8230
-
-#define GlintV1FloatB                                 0x9238
-#define GlintV1FloatBTag                              0x0247
-#define GlintV1FloatBReg                                   1
-#define GlintV1FloatBOff                              0x8238
-
-#define GlintV1FloatA                                 0x9240
-#define GlintV1FloatATag                              0x0248
-#define GlintV1FloatAReg                                   1
-#define GlintV1FloatAOff                              0x8240
-
-#define GlintV1FloatF                                 0x9248
-#define GlintV1FloatFTag                              0x0249
-#define GlintV1FloatFReg                                   1
-#define GlintV1FloatFOff                              0x8248
-
-#define GlintV1FloatX                                 0x9250
-#define GlintV1FloatXTag                              0x024a
-#define GlintV1FloatXReg                                   1
-#define GlintV1FloatXOff                              0x8250
-
-#define GlintV1FloatY                                 0x9258
-#define GlintV1FloatYTag                              0x024b
-#define GlintV1FloatYReg                                   1
-#define GlintV1FloatYOff                              0x8258
-
-#define GlintV1FloatZ                                 0x9260
-#define GlintV1FloatZTag                              0x024c
-#define GlintV1FloatZReg                                   1
-#define GlintV1FloatZOff                              0x8260
-
-#define GlintV2FloatS                                 0x9280
-#define GlintV2FloatSTag                              0x0250
-#define GlintV2FloatSReg                                   1
-#define GlintV2FloatSOff                              0x8280
-
-#define GlintV2FloatT                                 0x9288
-#define GlintV2FloatTTag                              0x0251
-#define GlintV2FloatTReg                                   1
-#define GlintV2FloatTOff                              0x8288
-
-#define GlintV2FloatQ                                 0x9290
-#define GlintV2FloatQTag                              0x0252
-#define GlintV2FloatQReg                                   1
-#define GlintV2FloatQOff                              0x8290
-
-#define GlintV2FloatKs                                0x9298
-#define GlintV2FloatKsTag                             0x0253
-#define GlintV2FloatKsReg                                  1
-#define GlintV2FloatKsOff                             0x8298
-
-#define GlintV2FloatKd                                0x92a0
-#define GlintV2FloatKdTag                             0x0254
-#define GlintV2FloatKdReg                                  1
-#define GlintV2FloatKdOff                             0x82a0
-
-#define GlintV2FloatR                                 0x92a8
-#define GlintV2FloatRTag                              0x0255
-#define GlintV2FloatRReg                                   1
-#define GlintV2FloatROff                              0x82a8
-
-#define GlintV2FloatG                                 0x92b0
-#define GlintV2FloatGTag                              0x0256
-#define GlintV2FloatGReg                                   1
-#define GlintV2FloatGOff                              0x82b0
-
-#define GlintV2FloatB                                 0x92b8
-#define GlintV2FloatBTag                              0x0257
-#define GlintV2FloatBReg                                   1
-#define GlintV2FloatBOff                              0x82b8
-
-#define GlintV2FloatA                                 0x92c0
-#define GlintV2FloatATag                              0x0258
-#define GlintV2FloatAReg                                   1
-#define GlintV2FloatAOff                              0x82c0
-
-#define GlintV2FloatF                                 0x92c8
-#define GlintV2FloatFTag                              0x0259
-#define GlintV2FloatFReg                                   1
-#define GlintV2FloatFOff                              0x82c8
-
-#define GlintV2FloatX                                 0x92d0
-#define GlintV2FloatXTag                              0x025a
-#define GlintV2FloatXReg                                   1
-#define GlintV2FloatXOff                              0x82d0
-
-#define GlintV2FloatY                                 0x92d8
-#define GlintV2FloatYTag                              0x025b
-#define GlintV2FloatYReg                                   1
-#define GlintV2FloatYOff                              0x82d8
-
-#define GlintV2FloatZ                                 0x92e0
-#define GlintV2FloatZTag                              0x025c
-#define GlintV2FloatZReg                                   1
-#define GlintV2FloatZOff                              0x82e0
-
-#define GlintDeltaMode                                0x9300
-#define GlintDeltaModeTag                             0x0260
-#define GlintDeltaModeReg                                  1
-#define GlintDeltaModeOff                             0x8300
-
-#define GlintDrawTriangle                             0x9308
-#define GlintDrawTriangleTag                          0x0261
-#define GlintDrawTriangleReg                               1
-#define GlintDrawTriangleOff                          0x8308
-
-#define GlintRepeatTriangle                           0x9310
-#define GlintRepeatTriangleTag                        0x0262
-#define GlintRepeatTriangleReg                             1
-#define GlintRepeatTriangleOff                        0x8310
-
-#define GlintDrawLine01                               0x9318
-#define GlintDrawLine01Tag                            0x0263
-#define GlintDrawLine01Reg                                 1
-#define GlintDrawLine01Off                            0x8318
-
-#define GlintDrawLine10                               0x9320
-#define GlintDrawLine10Tag                            0x0264
-#define GlintDrawLine10Reg                                 1
-#define GlintDrawLine10Off                            0x8320
-
-#define GlintRepeatLine                               0x9328
-#define GlintRepeatLineTag                            0x0265
-#define GlintRepeatLineReg                                 1
-#define GlintRepeatLineOff                            0x8328
-
-#define GlintEpilogueTag                              0x9368
-#define GlintEpilogueTagTag                           0x026d
-#define GlintEpilogueTagReg                                1
-#define GlintEpilogueTagOff                           0x8368
-
-#define GlintEpilogueData                             0x9370
-#define GlintEpilogueDataTag                          0x026e
-#define GlintEpilogueDataReg                               1
-#define GlintEpilogueDataOff                          0x8370
-
-#define GlintBroadcastMask                            0x9378
-#define GlintBroadcastMaskTag                         0x026f
-#define GlintBroadcastMaskReg                              1
-#define GlintBroadcastMaskOff                         0x8378
-
-#define GlintXBias                                    0x9480
-#define GlintXBiasTag                                 0x0290
-#define GlintXBiasReg                                      1
-#define GlintXBiasOff                                 0x8480
-
-#define GlintYBias                                    0x9488
-#define GlintYBiasTag                                 0x0291
-#define GlintYBiasReg                                      1
-#define GlintYBiasOff                                 0x8488
-
-#define GlintPointMode                                0x9490
-#define GlintPointModeTag                             0x0292
-#define GlintPointModeReg                                  1
-#define GlintPointModeOff                             0x8490
-
-#define GlintPointSize                                0x9498
-#define GlintPointSizeTag                             0x0293
-#define GlintPointSizeReg                                  1
-#define GlintPointSizeOff                             0x8498
-
-#define GlintAApointSize                              0x94a0
-#define GlintAApointSizeTag                           0x0294
-#define GlintAApointSizeReg                                1
-#define GlintAApointSizeOff                           0x84a0
-
-#define GlintLineMode                                 0x94a8
-#define GlintLineModeTag                              0x0295
-#define GlintLineModeReg                                   1
-#define GlintLineModeOff                              0x84a8
-
-#define GlintLineWidth                                0x94b0
-#define GlintLineWidthTag                             0x0296
-#define GlintLineWidthReg                                  1
-#define GlintLineWidthOff                             0x84b0
-
-#define GlintLineWidthOffset                          0x94b8
-#define GlintLineWidthOffsetTag                       0x0297
-#define GlintLineWidthOffsetReg                            1
-#define GlintLineWidthOffsetOff                       0x84b8
-
-#define GlintAAlineWidth                              0x94c0
-#define GlintAAlineWidthTag                           0x0298
-#define GlintAAlineWidthReg                                1
-#define GlintAAlineWidthOff                           0x84c0
-
-#define GlintTriangleMode                             0x94c8
-#define GlintTriangleModeTag                          0x0299
-#define GlintTriangleModeReg                               1
-#define GlintTriangleModeOff                          0x84c8
-
-#define GlintRectangleMode                            0x94d0
-#define GlintRectangleModeTag                         0x029a
-#define GlintRectangleModeReg                              1
-#define GlintRectangleModeOff                         0x84d0
-
-#define GlintRectangleWidth                           0x94d8
-#define GlintRectangleWidthTag                        0x029b
-#define GlintRectangleWidthReg                             1
-#define GlintRectangleWidthOff                        0x84d8
-
-#define GlintRectangleHeight                          0x94e0
-#define GlintRectangleHeightTag                       0x029c
-#define GlintRectangleHeightReg                            1
-#define GlintRectangleHeightOff                       0x84e0
-
-#define GlintRectangle2DMode                          0x94e8
-#define GlintRectangle2DModeTag                       0x029d
-#define GlintRectangle2DModeReg                            1
-#define GlintRectangle2DModeOff                       0x84e8
-
-#define GlintRectangle2DControl                       0x94f0
-#define GlintRectangle2DControlTag                    0x029e
-#define GlintRectangle2DControlReg                         1
-#define GlintRectangle2DControlOff                    0x84f0
-
-#define GlintTransformMode                            0x9508
-#define GlintTransformModeTag                         0x02a1
-#define GlintTransformModeReg                              1
-#define GlintTransformModeOff                         0x8508
-
-#define GlintGeometryMode                             0x9510
-#define GlintGeometryModeTag                          0x02a2
-#define GlintGeometryModeReg                               1
-#define GlintGeometryModeOff                          0x8510
-
-#define GlintNormalizeMode                            0x9518
-#define GlintNormalizeModeTag                         0x02a3
-#define GlintNormalizeModeReg                              1
-#define GlintNormalizeModeOff                         0x8518
-
-#define GlintLightingMode                             0x9520
-#define GlintLightingModeTag                          0x02a4
-#define GlintLightingModeReg                               1
-#define GlintLightingModeOff                          0x8520
-
-#define GlintColorMaterialMode                        0x9528
-#define GlintColorMaterialModeTag                     0x02a5
-#define GlintColorMaterialModeReg                          1
-#define GlintColorMaterialModeOff                     0x8528
-
-#define GlintMaterialMode                             0x9530
-#define GlintMaterialModeTag                          0x02a6
-#define GlintMaterialModeReg                               1
-#define GlintMaterialModeOff                          0x8530
-
-#define GlintSelectResult                             0x9580
-#define GlintSelectResultTag                          0x02b0
-#define GlintSelectResultReg                               1
-#define GlintSelectResultOff                          0x8580
-
-#define GlintBegin                                    0x9590
-#define GlintBeginTag                                 0x02b2
-#define GlintBeginReg                                      1
-#define GlintBeginOff                                 0x8590
-
-#define GlintEnd                                      0x9598
-#define GlintEndTag                                   0x02b3
-#define GlintEndReg                                        1
-#define GlintEndOff                                   0x8598
-
-#define GlintEdgeFlag                                 0x95a0
-#define GlintEdgeFlagTag                              0x02b4
-#define GlintEdgeFlagReg                                   1
-#define GlintEdgeFlagOff                              0x85a0
-
-#define GlintObjectIDvalue                            0x95a8
-#define GlintObjectIDvalueTag                         0x02b5
-#define GlintObjectIDvalueReg                              1
-#define GlintObjectIDvalueOff                         0x85a8
-
-#define GlintIncrementObjectID                        0x95b0
-#define GlintIncrementObjectIDTag                     0x02b6
-#define GlintIncrementObjectIDReg                          1
-#define GlintIncrementObjectIDOff                     0x85b0
-
-#define GlintTransformCurrent                         0x95b8
-#define GlintTransformCurrentTag                      0x02b7
-#define GlintTransformCurrentReg                           1
-#define GlintTransformCurrentOff                      0x85b8
-
-#define GlintSaveCurrent                              0x95c8
-#define GlintSaveCurrentTag                           0x02b9
-#define GlintSaveCurrentReg                                1
-#define GlintSaveCurrentOff                           0x85c8
-
-#define GlintRestoreCurrent                           0x95d0
-#define GlintRestoreCurrentTag                        0x02ba
-#define GlintRestoreCurrentReg                             1
-#define GlintRestoreCurrentOff                        0x85d0
-
-#define GlintInitNames                                0x95d8
-#define GlintInitNamesTag                             0x02bb
-#define GlintInitNamesReg                                  1
-#define GlintInitNamesOff                             0x85d8
-
-#define GlintPushName                                 0x95e0
-#define GlintPushNameTag                              0x02bc
-#define GlintPushNameReg                                   1
-#define GlintPushNameOff                              0x85e0
-
-#define GlintPopName                                  0x95e8
-#define GlintPopNameTag                               0x02bd
-#define GlintPopNameReg                                    1
-#define GlintPopNameOff                               0x85e8
-
-#define GlintLoadName                                 0x95f0
-#define GlintLoadNameTag                              0x02be
-#define GlintLoadNameReg                                   1
-#define GlintLoadNameOff                              0x85f0
-
-#define GlintGeomRectangle                            0x96a0
-#define GlintGeomRectangleTag                         0x02d4
-#define GlintGeomRectangleReg                              1
-#define GlintGeomRectangleOff                         0x86a0
-
-#define GlintDrawRectangle2D                          0x97a0
-#define GlintDrawRectangle2DTag                       0x02f4
-#define GlintDrawRectangle2DReg                            1
-#define GlintDrawRectangle2DOff                       0x87a0
-
-#define GlintNz                                       0x9800
-#define GlintNzTag                                    0x0300
-#define GlintNzReg                                         1
-#define GlintNzOff                                    0x8800
-
-#define GlintNy                                       0x9808
-#define GlintNyTag                                    0x0301
-#define GlintNyReg                                         1
-#define GlintNyOff                                    0x8808
-
-#define GlintNx                                       0x9810
-#define GlintNxTag                                    0x0302
-#define GlintNxReg                                         1
-#define GlintNxOff                                    0x8810
-
-#define GlintCa                                       0x9818
-#define GlintCaTag                                    0x0303
-#define GlintCaReg                                         1
-#define GlintCaOff                                    0x8818
-
-#define GlintCb                                       0x9820
-#define GlintCbTag                                    0x0304
-#define GlintCbReg                                         1
-#define GlintCbOff                                    0x8820
-
-#define GlintCg                                       0x9828
-#define GlintCgTag                                    0x0305
-#define GlintCgReg                                         1
-#define GlintCgOff                                    0x8828
-
-#define GlintCr3                                      0x9830
-#define GlintCr3Tag                                   0x0306
-#define GlintCr3Reg                                        1
-#define GlintCr3Off                                   0x8830
-
-#define GlintCr4                                      0x9838
-#define GlintCr4Tag                                   0x0307
-#define GlintCr4Reg                                        1
-#define GlintCr4Off                                   0x8838
-
-#define GlintTt2                                      0x9840
-#define GlintTt2Tag                                   0x0308
-#define GlintTt2Reg                                        1
-#define GlintTt2Off                                   0x8840
-
-#define GlintTs2                                      0x9848
-#define GlintTs2Tag                                   0x0309
-#define GlintTs2Reg                                        1
-#define GlintTs2Off                                   0x8848
-
-#define GlintVw                                       0x9850
-#define GlintVwTag                                    0x030a
-#define GlintVwReg                                         1
-#define GlintVwOff                                    0x8850
-
-#define GlintVz                                       0x9858
-#define GlintVzTag                                    0x030b
-#define GlintVzReg                                         1
-#define GlintVzOff                                    0x8858
-
-#define GlintVy                                       0x9860
-#define GlintVyTag                                    0x030c
-#define GlintVyReg                                         1
-#define GlintVyOff                                    0x8860
-
-#define GlintVx2                                      0x9868
-#define GlintVx2Tag                                   0x030d
-#define GlintVx2Reg                                        1
-#define GlintVx2Off                                   0x8868
-
-#define GlintVx3                                      0x9870
-#define GlintVx3Tag                                   0x030e
-#define GlintVx3Reg                                        1
-#define GlintVx3Off                                   0x8870
-
-#define GlintVx4                                      0x9878
-#define GlintVx4Tag                                   0x030f
-#define GlintVx4Reg                                        1
-#define GlintVx4Off                                   0x8878
-
-#define GlintFNz                                      0x9880
-#define GlintFNzTag                                   0x0310
-#define GlintFNzReg                                        1
-#define GlintFNzOff                                   0x8880
-
-#define GlintFNy                                      0x9888
-#define GlintFNyTag                                   0x0311
-#define GlintFNyReg                                        1
-#define GlintFNyOff                                   0x8888
-
-#define GlintFNx                                      0x9890
-#define GlintFNxTag                                   0x0312
-#define GlintFNxReg                                        1
-#define GlintFNxOff                                   0x8890
-
-#define GlintPackedColor3                             0x9898
-#define GlintPackedColor3Tag                          0x0313
-#define GlintPackedColor3Reg                               1
-#define GlintPackedColor3Off                          0x8898
-
-#define GlintPackedColor4                             0x98a0
-#define GlintPackedColor4Tag                          0x0314
-#define GlintPackedColor4Reg                               1
-#define GlintPackedColor4Off                          0x88a0
-
-#define GlintTq4                                      0x98a8
-#define GlintTq4Tag                                   0x0315
-#define GlintTq4Reg                                        1
-#define GlintTq4Off                                   0x88a8
-
-#define GlintTr4                                      0x98b0
-#define GlintTr4Tag                                   0x0316
-#define GlintTr4Reg                                        1
-#define GlintTr4Off                                   0x88b0
-
-#define GlintTt4                                      0x98b8
-#define GlintTt4Tag                                   0x0317
-#define GlintTt4Reg                                        1
-#define GlintTt4Off                                   0x88b8
-
-#define GlintTs4                                      0x98c0
-#define GlintTs4Tag                                   0x0318
-#define GlintTs4Reg                                        1
-#define GlintTs4Off                                   0x88c0
-
-#define GlintRPw                                      0x98c8
-#define GlintRPwTag                                   0x0319
-#define GlintRPwReg                                        1
-#define GlintRPwOff                                   0x88c8
-
-#define GlintRPz                                      0x98d0
-#define GlintRPzTag                                   0x031a
-#define GlintRPzReg                                        1
-#define GlintRPzOff                                   0x88d0
-
-#define GlintRPy                                      0x98d8
-#define GlintRPyTag                                   0x031b
-#define GlintRPyReg                                        1
-#define GlintRPyOff                                   0x88d8
-
-#define GlintRPx2                                     0x98e0
-#define GlintRPx2Tag                                  0x031c
-#define GlintRPx2Reg                                       1
-#define GlintRPx2Off                                  0x88e0
-
-#define GlintRPx3                                     0x98e8
-#define GlintRPx3Tag                                  0x031d
-#define GlintRPx3Reg                                       1
-#define GlintRPx3Off                                  0x88e8
-
-#define GlintRPx4                                     0x98f0
-#define GlintRPx4Tag                                  0x031e
-#define GlintRPx4Reg                                       1
-#define GlintRPx4Off                                  0x88f0
-
-#define GlintTs1                                      0x98f8
-#define GlintTs1Tag                                   0x031f
-#define GlintTs1Reg                                        1
-#define GlintTs1Off                                   0x88f8
-
-#define GlintModelViewMatrix0                         0x9900
-#define GlintModelViewMatrix0Tag                      0x0320
-#define GlintModelViewMatrix0Reg                           1
-#define GlintModelViewMatrix0Off                      0x8900
-
-#define GlintModelViewMatrix1                         0x9908
-#define GlintModelViewMatrix1Tag                      0x0321
-#define GlintModelViewMatrix1Reg                           1
-#define GlintModelViewMatrix1Off                      0x8908
-
-#define GlintModelViewMatrix2                         0x9910
-#define GlintModelViewMatrix2Tag                      0x0322
-#define GlintModelViewMatrix2Reg                           1
-#define GlintModelViewMatrix2Off                      0x8910
-
-#define GlintModelViewMatrix3                         0x9918
-#define GlintModelViewMatrix3Tag                      0x0323
-#define GlintModelViewMatrix3Reg                           1
-#define GlintModelViewMatrix3Off                      0x8918
-
-#define GlintModelViewMatrix4                         0x9920
-#define GlintModelViewMatrix4Tag                      0x0324
-#define GlintModelViewMatrix4Reg                           1
-#define GlintModelViewMatrix4Off                      0x8920
-
-#define GlintModelViewMatrix5                         0x9928
-#define GlintModelViewMatrix5Tag                      0x0325
-#define GlintModelViewMatrix5Reg                           1
-#define GlintModelViewMatrix5Off                      0x8928
-
-#define GlintModelViewMatrix6                         0x9930
-#define GlintModelViewMatrix6Tag                      0x0326
-#define GlintModelViewMatrix6Reg                           1
-#define GlintModelViewMatrix6Off                      0x8930
-
-#define GlintModelViewMatrix7                         0x9938
-#define GlintModelViewMatrix7Tag                      0x0327
-#define GlintModelViewMatrix7Reg                           1
-#define GlintModelViewMatrix7Off                      0x8938
-
-#define GlintModelViewMatrix8                         0x9940
-#define GlintModelViewMatrix8Tag                      0x0328
-#define GlintModelViewMatrix8Reg                           1
-#define GlintModelViewMatrix8Off                      0x8940
-
-#define GlintModelViewMatrix9                         0x9948
-#define GlintModelViewMatrix9Tag                      0x0329
-#define GlintModelViewMatrix9Reg                           1
-#define GlintModelViewMatrix9Off                      0x8948
-
-#define GlintModelViewMatrix10                        0x9950
-#define GlintModelViewMatrix10Tag                     0x032a
-#define GlintModelViewMatrix10Reg                          1
-#define GlintModelViewMatrix10Off                     0x8950
-
-#define GlintModelViewMatrix11                        0x9958
-#define GlintModelViewMatrix11Tag                     0x032b
-#define GlintModelViewMatrix11Reg                          1
-#define GlintModelViewMatrix11Off                     0x8958
-
-#define GlintModelViewMatrix12                        0x9960
-#define GlintModelViewMatrix12Tag                     0x032c
-#define GlintModelViewMatrix12Reg                          1
-#define GlintModelViewMatrix12Off                     0x8960
-
-#define GlintModelViewMatrix13                        0x9968
-#define GlintModelViewMatrix13Tag                     0x032d
-#define GlintModelViewMatrix13Reg                          1
-#define GlintModelViewMatrix13Off                     0x8968
-
-#define GlintModelViewMatrix14                        0x9970
-#define GlintModelViewMatrix14Tag                     0x032e
-#define GlintModelViewMatrix14Reg                          1
-#define GlintModelViewMatrix14Off                     0x8970
-
-#define GlintModelViewMatrix15                        0x9978
-#define GlintModelViewMatrix15Tag                     0x032f
-#define GlintModelViewMatrix15Reg                          1
-#define GlintModelViewMatrix15Off                     0x8978
-
-#define GlintModelViewProjectionMatrix0               0x9980
-#define GlintModelViewProjectionMatrix0Tag            0x0330
-#define GlintModelViewProjectionMatrix0Reg                 1
-#define GlintModelViewProjectionMatrix0Off            0x8980
-
-#define GlintModelViewProjectionMatrix1               0x9988
-#define GlintModelViewProjectionMatrix1Tag            0x0331
-#define GlintModelViewProjectionMatrix1Reg                 1
-#define GlintModelViewProjectionMatrix1Off            0x8988
-
-#define GlintModelViewProjectionMatrix2               0x9990
-#define GlintModelViewProjectionMatrix2Tag            0x0332
-#define GlintModelViewProjectionMatrix2Reg                 1
-#define GlintModelViewProjectionMatrix2Off            0x8990
-
-#define GlintModelViewProjectionMatrix3               0x9998
-#define GlintModelViewProjectionMatrix3Tag            0x0333
-#define GlintModelViewProjectionMatrix3Reg                 1
-#define GlintModelViewProjectionMatrix3Off            0x8998
-
-#define GlintModelViewProjectionMatrix4               0x99a0
-#define GlintModelViewProjectionMatrix4Tag            0x0334
-#define GlintModelViewProjectionMatrix4Reg                 1
-#define GlintModelViewProjectionMatrix4Off            0x89a0
-
-#define GlintModelViewProjectionMatrix5               0x99a8
-#define GlintModelViewProjectionMatrix5Tag            0x0335
-#define GlintModelViewProjectionMatrix5Reg                 1
-#define GlintModelViewProjectionMatrix5Off            0x89a8
-
-#define GlintModelViewProjectionMatrix6               0x99b0
-#define GlintModelViewProjectionMatrix6Tag            0x0336
-#define GlintModelViewProjectionMatrix6Reg                 1
-#define GlintModelViewProjectionMatrix6Off            0x89b0
-
-#define GlintModelViewProjectionMatrix7               0x99b8
-#define GlintModelViewProjectionMatrix7Tag            0x0337
-#define GlintModelViewProjectionMatrix7Reg                 1
-#define GlintModelViewProjectionMatrix7Off            0x89b8
-
-#define GlintModelViewProjectionMatrix8               0x99c0
-#define GlintModelViewProjectionMatrix8Tag            0x0338
-#define GlintModelViewProjectionMatrix8Reg                 1
-#define GlintModelViewProjectionMatrix8Off            0x89c0
-
-#define GlintModelViewProjectionMatrix9               0x99c8
-#define GlintModelViewProjectionMatrix9Tag            0x0339
-#define GlintModelViewProjectionMatrix9Reg                 1
-#define GlintModelViewProjectionMatrix9Off            0x89c8
-
-#define GlintModelViewProjectionMatrix10              0x99d0
-#define GlintModelViewProjectionMatrix10Tag           0x033a
-#define GlintModelViewProjectionMatrix10Reg                1
-#define GlintModelViewProjectionMatrix10Off           0x89d0
-
-#define GlintModelViewProjectionMatrix11              0x99d8
-#define GlintModelViewProjectionMatrix11Tag           0x033b
-#define GlintModelViewProjectionMatrix11Reg                1
-#define GlintModelViewProjectionMatrix11Off           0x89d8
-
-#define GlintModelViewProjectionMatrix12              0x99e0
-#define GlintModelViewProjectionMatrix12Tag           0x033c
-#define GlintModelViewProjectionMatrix12Reg                1
-#define GlintModelViewProjectionMatrix12Off           0x89e0
-
-#define GlintModelViewProjectionMatrix13              0x99e8
-#define GlintModelViewProjectionMatrix13Tag           0x033d
-#define GlintModelViewProjectionMatrix13Reg                1
-#define GlintModelViewProjectionMatrix13Off           0x89e8
-
-#define GlintModelViewProjectionMatrix14              0x99f0
-#define GlintModelViewProjectionMatrix14Tag           0x033e
-#define GlintModelViewProjectionMatrix14Reg                1
-#define GlintModelViewProjectionMatrix14Off           0x89f0
-
-#define GlintModelViewProjectionMatrix15              0x99f8
-#define GlintModelViewProjectionMatrix15Tag           0x033f
-#define GlintModelViewProjectionMatrix15Reg                1
-#define GlintModelViewProjectionMatrix15Off           0x89f8
-
-#define GlintNormalMatrix0                            0x9a00
-#define GlintNormalMatrix0Tag                         0x0340
-#define GlintNormalMatrix0Reg                              1
-#define GlintNormalMatrix0Off                         0x8a00
-
-#define GlintNormalMatrix1                            0x9a08
-#define GlintNormalMatrix1Tag                         0x0341
-#define GlintNormalMatrix1Reg                              1
-#define GlintNormalMatrix1Off                         0x8a08
-
-#define GlintNormalMatrix2                            0x9a10
-#define GlintNormalMatrix2Tag                         0x0342
-#define GlintNormalMatrix2Reg                              1
-#define GlintNormalMatrix2Off                         0x8a10
-
-#define GlintNormalMatrix3                            0x9a18
-#define GlintNormalMatrix3Tag                         0x0343
-#define GlintNormalMatrix3Reg                              1
-#define GlintNormalMatrix3Off                         0x8a18
-
-#define GlintNormalMatrix4                            0x9a20
-#define GlintNormalMatrix4Tag                         0x0344
-#define GlintNormalMatrix4Reg                              1
-#define GlintNormalMatrix4Off                         0x8a20
-
-#define GlintNormalMatrix5                            0x9a28
-#define GlintNormalMatrix5Tag                         0x0345
-#define GlintNormalMatrix5Reg                              1
-#define GlintNormalMatrix5Off                         0x8a28
-
-#define GlintNormalMatrix6                            0x9a30
-#define GlintNormalMatrix6Tag                         0x0346
-#define GlintNormalMatrix6Reg                              1
-#define GlintNormalMatrix6Off                         0x8a30
-
-#define GlintNormalMatrix7                            0x9a38
-#define GlintNormalMatrix7Tag                         0x0347
-#define GlintNormalMatrix7Reg                              1
-#define GlintNormalMatrix7Off                         0x8a38
-
-#define GlintNormalMatrix8                            0x9a40
-#define GlintNormalMatrix8Tag                         0x0348
-#define GlintNormalMatrix8Reg                              1
-#define GlintNormalMatrix8Off                         0x8a40
-
-#define GlintTextureMatrix0                           0x9a80
-#define GlintTextureMatrix0Tag                        0x0350
-#define GlintTextureMatrix0Reg                             1
-#define GlintTextureMatrix0Off                        0x8a80
-
-#define GlintTextureMatrix1                           0x9a88
-#define GlintTextureMatrix1Tag                        0x0351
-#define GlintTextureMatrix1Reg                             1
-#define GlintTextureMatrix1Off                        0x8a88
-
-#define GlintTextureMatrix2                           0x9a90
-#define GlintTextureMatrix2Tag                        0x0352
-#define GlintTextureMatrix2Reg                             1
-#define GlintTextureMatrix2Off                        0x8a90
-
-#define GlintTextureMatrix3                           0x9a98
-#define GlintTextureMatrix3Tag                        0x0353
-#define GlintTextureMatrix3Reg                             1
-#define GlintTextureMatrix3Off                        0x8a98
-
-#define GlintTextureMatrix4                           0x9aa0
-#define GlintTextureMatrix4Tag                        0x0354
-#define GlintTextureMatrix4Reg                             1
-#define GlintTextureMatrix4Off                        0x8aa0
-
-#define GlintTextureMatrix5                           0x9aa8
-#define GlintTextureMatrix5Tag                        0x0355
-#define GlintTextureMatrix5Reg                             1
-#define GlintTextureMatrix5Off                        0x8aa8
-
-#define GlintTextureMatrix6                           0x9ab0
-#define GlintTextureMatrix6Tag                        0x0356
-#define GlintTextureMatrix6Reg                             1
-#define GlintTextureMatrix6Off                        0x8ab0
-
-#define GlintTextureMatrix7                           0x9ab8
-#define GlintTextureMatrix7Tag                        0x0357
-#define GlintTextureMatrix7Reg                             1
-#define GlintTextureMatrix7Off                        0x8ab8
-
-#define GlintTextureMatrix8                           0x9ac0
-#define GlintTextureMatrix8Tag                        0x0358
-#define GlintTextureMatrix8Reg                             1
-#define GlintTextureMatrix8Off                        0x8ac0
-
-#define GlintTextureMatrix9                           0x9ac8
-#define GlintTextureMatrix9Tag                        0x0359
-#define GlintTextureMatrix9Reg                             1
-#define GlintTextureMatrix9Off                        0x8ac8
-
-#define GlintTextureMatrix10                          0x9ad0
-#define GlintTextureMatrix10Tag                       0x035a
-#define GlintTextureMatrix10Reg                            1
-#define GlintTextureMatrix10Off                       0x8ad0
-
-#define GlintTextureMatrix11                          0x9ad8
-#define GlintTextureMatrix11Tag                       0x035b
-#define GlintTextureMatrix11Reg                            1
-#define GlintTextureMatrix11Off                       0x8ad8
-
-#define GlintTextureMatrix12                          0x9ae0
-#define GlintTextureMatrix12Tag                       0x035c
-#define GlintTextureMatrix12Reg                            1
-#define GlintTextureMatrix12Off                       0x8ae0
-
-#define GlintTextureMatrix13                          0x9ae8
-#define GlintTextureMatrix13Tag                       0x035d
-#define GlintTextureMatrix13Reg                            1
-#define GlintTextureMatrix13Off                       0x8ae8
-
-#define GlintTextureMatrix14                          0x9af0
-#define GlintTextureMatrix14Tag                       0x035e
-#define GlintTextureMatrix14Reg                            1
-#define GlintTextureMatrix14Off                       0x8af0
-
-#define GlintTextureMatrix15                          0x9af8
-#define GlintTextureMatrix15Tag                       0x035f
-#define GlintTextureMatrix15Reg                            1
-#define GlintTextureMatrix15Off                       0x8af8
-
-#define GlintTexGen0                                  0x9b00
-#define GlintTexGen0Tag                               0x0360
-#define GlintTexGen0Reg                                    1
-#define GlintTexGen0Off                               0x8b00
-
-#define GlintTexGen1                                  0x9b08
-#define GlintTexGen1Tag                               0x0361
-#define GlintTexGen1Reg                                    1
-#define GlintTexGen1Off                               0x8b08
-
-#define GlintTexGen2                                  0x9b10
-#define GlintTexGen2Tag                               0x0362
-#define GlintTexGen2Reg                                    1
-#define GlintTexGen2Off                               0x8b10
-
-#define GlintTexGen3                                  0x9b18
-#define GlintTexGen3Tag                               0x0363
-#define GlintTexGen3Reg                                    1
-#define GlintTexGen3Off                               0x8b18
-
-#define GlintTexGen4                                  0x9b20
-#define GlintTexGen4Tag                               0x0364
-#define GlintTexGen4Reg                                    1
-#define GlintTexGen4Off                               0x8b20
-
-#define GlintTexGen5                                  0x9b28
-#define GlintTexGen5Tag                               0x0365
-#define GlintTexGen5Reg                                    1
-#define GlintTexGen5Off                               0x8b28
-
-#define GlintTexGen6                                  0x9b30
-#define GlintTexGen6Tag                               0x0366
-#define GlintTexGen6Reg                                    1
-#define GlintTexGen6Off                               0x8b30
-
-#define GlintTexGen7                                  0x9b38
-#define GlintTexGen7Tag                               0x0367
-#define GlintTexGen7Reg                                    1
-#define GlintTexGen7Off                               0x8b38
-
-#define GlintTexGen8                                  0x9b40
-#define GlintTexGen8Tag                               0x0368
-#define GlintTexGen8Reg                                    1
-#define GlintTexGen8Off                               0x8b40
-
-#define GlintTexGen9                                  0x9b48
-#define GlintTexGen9Tag                               0x0369
-#define GlintTexGen9Reg                                    1
-#define GlintTexGen9Off                               0x8b48
-
-#define GlintTexGen10                                 0x9b50
-#define GlintTexGen10Tag                              0x036a
-#define GlintTexGen10Reg                                   1
-#define GlintTexGen10Off                              0x8b50
-
-#define GlintTexGen11                                 0x9b58
-#define GlintTexGen11Tag                              0x036b
-#define GlintTexGen11Reg                                   1
-#define GlintTexGen11Off                              0x8b58
-
-#define GlintTexGen12                                 0x9b60
-#define GlintTexGen12Tag                              0x036c
-#define GlintTexGen12Reg                                   1
-#define GlintTexGen12Off                              0x8b60
-
-#define GlintTexGen13                                 0x9b68
-#define GlintTexGen13Tag                              0x036d
-#define GlintTexGen13Reg                                   1
-#define GlintTexGen13Off                              0x8b68
-
-#define GlintTexGen14                                 0x9b70
-#define GlintTexGen14Tag                              0x036e
-#define GlintTexGen14Reg                                   1
-#define GlintTexGen14Off                              0x8b70
-
-#define GlintTexGen15                                 0x9b78
-#define GlintTexGen15Tag                              0x036f
-#define GlintTexGen15Reg                                   1
-#define GlintTexGen15Off                              0x8b78
-
-#define GlintViewPortScaleX                           0x9b80
-#define GlintViewPortScaleXTag                        0x0370
-#define GlintViewPortScaleXReg                             1
-#define GlintViewPortScaleXOff                        0x8b80
-
-#define GlintViewPortScaleY                           0x9b88
-#define GlintViewPortScaleYTag                        0x0371
-#define GlintViewPortScaleYReg                             1
-#define GlintViewPortScaleYOff                        0x8b88
-
-#define GlintViewPortScaleZ                           0x9b90
-#define GlintViewPortScaleZTag                        0x0372
-#define GlintViewPortScaleZReg                             1
-#define GlintViewPortScaleZOff                        0x8b90
-
-#define GlintViewPortOffsetX                          0x9b98
-#define GlintViewPortOffsetXTag                       0x0373
-#define GlintViewPortOffsetXReg                            1
-#define GlintViewPortOffsetXOff                       0x8b98
-
-#define GlintViewPortOffsetY                          0x9ba0
-#define GlintViewPortOffsetYTag                       0x0374
-#define GlintViewPortOffsetYReg                            1
-#define GlintViewPortOffsetYOff                       0x8ba0
-
-#define GlintViewPortOffsetZ                          0x9ba8
-#define GlintViewPortOffsetZTag                       0x0375
-#define GlintViewPortOffsetZReg                            1
-#define GlintViewPortOffsetZOff                       0x8ba8
-
-#define GlintFogDensity                               0x9bb0
-#define GlintFogDensityTag                            0x0376
-#define GlintFogDensityReg                                 1
-#define GlintFogDensityOff                            0x8bb0
-
-#define GlintFogScale                                 0x9bb8
-#define GlintFogScaleTag                              0x0377
-#define GlintFogScaleReg                                   1
-#define GlintFogScaleOff                              0x8bb8
-
-#define GlintFogEnd                                   0x9bc0
-#define GlintFogEndTag                                0x0378
-#define GlintFogEndReg                                     1
-#define GlintFogEndOff                                0x8bc0
-
-#define GlintPolygonOffsetFactor                      0x9bc8
-#define GlintPolygonOffsetFactorTag                   0x0379
-#define GlintPolygonOffsetFactorReg                        1
-#define GlintPolygonOffsetFactorOff                   0x8bc8
-
-#define GlintPolygonOffsetBias                        0x9bd0
-#define GlintPolygonOffsetBiasTag                     0x037a
-#define GlintPolygonOffsetBiasReg                          1
-#define GlintPolygonOffsetBiasOff                     0x8bd0
-
-#define GlintLineClipLengthThreshold                  0x9bd8
-#define GlintLineClipLengthThresholdTag               0x037b
-#define GlintLineClipLengthThresholdReg                    1
-#define GlintLineClipLengthThresholdOff               0x8bd8
-
-#define GlintTriangleClipAreaThreshold                0x9be0
-#define GlintTriangleClipAreaThresholdTag             0x037c
-#define GlintTriangleClipAreaThresholdReg                  1
-#define GlintTriangleClipAreaThresholdOff             0x8be0
-
-#define GlintRasterPosXIncrement                      0x9be8
-#define GlintRasterPosXIncrementTag                   0x037d
-#define GlintRasterPosXIncrementReg                        1
-#define GlintRasterPosXIncrementOff                   0x8be8
-
-#define GlintRasterPosYIncrement                      0x9bf0
-#define GlintRasterPosYIncrementTag                   0x037e
-#define GlintRasterPosYIncrementReg                        1
-#define GlintRasterPosYIncrementOff                   0x8bf0
-
-#define GlintUserClip0X                               0x9c00
-#define GlintUserClip0XTag                            0x0380
-#define GlintUserClip0XReg                                 1
-#define GlintUserClip0XOff                            0x8c00
-
-#define GlintUserClip0Y                               0x9c08
-#define GlintUserClip0YTag                            0x0381
-#define GlintUserClip0YReg                                 1
-#define GlintUserClip0YOff                            0x8c08
-
-#define GlintUserClip0Z                               0x9c10
-#define GlintUserClip0ZTag                            0x0382
-#define GlintUserClip0ZReg                                 1
-#define GlintUserClip0ZOff                            0x8c10
-
-#define GlintUserClip0W                               0x9c18
-#define GlintUserClip0WTag                            0x0383
-#define GlintUserClip0WReg                                 1
-#define GlintUserClip0WOff                            0x8c18
-
-#define GlintUserClip1X                               0x9c20
-#define GlintUserClip1XTag                            0x0384
-#define GlintUserClip1XReg                                 1
-#define GlintUserClip1XOff                            0x8c20
-
-#define GlintUserClip1Y                               0x9c28
-#define GlintUserClip1YTag                            0x0385
-#define GlintUserClip1YReg                                 1
-#define GlintUserClip1YOff                            0x8c28
-
-#define GlintUserClip1Z                               0x9c30
-#define GlintUserClip1ZTag                            0x0386
-#define GlintUserClip1ZReg                                 1
-#define GlintUserClip1ZOff                            0x8c30
-
-#define GlintUserClip1W                               0x9c38
-#define GlintUserClip1WTag                            0x0387
-#define GlintUserClip1WReg                                 1
-#define GlintUserClip1WOff                            0x8c38
-
-#define GlintUserClip2X                               0x9c40
-#define GlintUserClip2XTag                            0x0388
-#define GlintUserClip2XReg                                 1
-#define GlintUserClip2XOff                            0x8c40
-
-#define GlintUserClip2Y                               0x9c48
-#define GlintUserClip2YTag                            0x0389
-#define GlintUserClip2YReg                                 1
-#define GlintUserClip2YOff                            0x8c48
-
-#define GlintUserClip2Z                               0x9c50
-#define GlintUserClip2ZTag                            0x038a
-#define GlintUserClip2ZReg                                 1
-#define GlintUserClip2ZOff                            0x8c50
-
-#define GlintUserClip2W                               0x9c58
-#define GlintUserClip2WTag                            0x038b
-#define GlintUserClip2WReg                                 1
-#define GlintUserClip2WOff                            0x8c58
-
-#define GlintUserClip3X                               0x9c60
-#define GlintUserClip3XTag                            0x038c
-#define GlintUserClip3XReg                                 1
-#define GlintUserClip3XOff                            0x8c60
-
-#define GlintUserClip3Y                               0x9c68
-#define GlintUserClip3YTag                            0x038d
-#define GlintUserClip3YReg                                 1
-#define GlintUserClip3YOff                            0x8c68
-
-#define GlintUserClip3Z                               0x9c70
-#define GlintUserClip3ZTag                            0x038e
-#define GlintUserClip3ZReg                                 1
-#define GlintUserClip3ZOff                            0x8c70
-
-#define GlintUserClip3W                               0x9c78
-#define GlintUserClip3WTag                            0x038f
-#define GlintUserClip3WReg                                 1
-#define GlintUserClip3WOff                            0x8c78
-
-#define GlintUserClip4X                               0x9c80
-#define GlintUserClip4XTag                            0x0390
-#define GlintUserClip4XReg                                 1
-#define GlintUserClip4XOff                            0x8c80
-
-#define GlintUserClip4Y                               0x9c88
-#define GlintUserClip4YTag                            0x0391
-#define GlintUserClip4YReg                                 1
-#define GlintUserClip4YOff                            0x8c88
-
-#define GlintUserClip4Z                               0x9c90
-#define GlintUserClip4ZTag                            0x0392
-#define GlintUserClip4ZReg                                 1
-#define GlintUserClip4ZOff                            0x8c90
-
-#define GlintUserClip4W                               0x9c98
-#define GlintUserClip4WTag                            0x0393
-#define GlintUserClip4WReg                                 1
-#define GlintUserClip4WOff                            0x8c98
-
-#define GlintUserClip5X                               0x9ca0
-#define GlintUserClip5XTag                            0x0394
-#define GlintUserClip5XReg                                 1
-#define GlintUserClip5XOff                            0x8ca0
-
-#define GlintUserClip5Y                               0x9ca8
-#define GlintUserClip5YTag                            0x0395
-#define GlintUserClip5YReg                                 1
-#define GlintUserClip5YOff                            0x8ca8
-
-#define GlintUserClip5Z                               0x9cb0
-#define GlintUserClip5ZTag                            0x0396
-#define GlintUserClip5ZReg                                 1
-#define GlintUserClip5ZOff                            0x8cb0
-
-#define GlintUserClip5W                               0x9cb8
-#define GlintUserClip5WTag                            0x0397
-#define GlintUserClip5WReg                                 1
-#define GlintUserClip5WOff                            0x8cb8
-
-#define GlintRasterPosXOffset                         0x9ce8
-#define GlintRasterPosXOffsetTag                      0x039d
-#define GlintRasterPosXOffsetReg                           1
-#define GlintRasterPosXOffsetOff                      0x8ce8
-
-#define GlintRasterPosYOffset                         0x9cf0
-#define GlintRasterPosYOffsetTag                      0x039e
-#define GlintRasterPosYOffsetReg                           1
-#define GlintRasterPosYOffsetOff                      0x8cf0
-
-#define GlintAttenuationCutOff                        0x9cf8
-#define GlintAttenuationCutOffTag                     0x039f
-#define GlintAttenuationCutOffReg                          1
-#define GlintAttenuationCutOffOff                     0x8cf8
-
-#define GlintLight0Mode                               0x9d00
-#define GlintLight0ModeTag                            0x03a0
-#define GlintLight0ModeReg                                 1
-#define GlintLight0ModeOff                            0x8d00
-
-#define GlintLight0AmbientIntensityRed                0x9d08
-#define GlintLight0AmbientIntensityRedTag             0x03a1
-#define GlintLight0AmbientIntensityRedReg                  1
-#define GlintLight0AmbientIntensityRedOff             0x8d08
-
-#define GlintLight0AmbientIntensityGreen              0x9d10
-#define GlintLight0AmbientIntensityGreenTag           0x03a2
-#define GlintLight0AmbientIntensityGreenReg                1
-#define GlintLight0AmbientIntensityGreenOff           0x8d10
-
-#define GlintLight0AmbientIntensityBlue               0x9d18
-#define GlintLight0AmbientIntensityBlueTag            0x03a3
-#define GlintLight0AmbientIntensityBlueReg                 1
-#define GlintLight0AmbientIntensityBlueOff            0x8d18
-
-#define GlintLight0DiffuseIntensityRed                0x9d20
-#define GlintLight0DiffuseIntensityRedTag             0x03a4
-#define GlintLight0DiffuseIntensityRedReg                  1
-#define GlintLight0DiffuseIntensityRedOff             0x8d20
-
-#define GlintLight0DiffuseIntensityGreen              0x9d28
-#define GlintLight0DiffuseIntensityGreenTag           0x03a5
-#define GlintLight0DiffuseIntensityGreenReg                1
-#define GlintLight0DiffuseIntensityGreenOff           0x8d28
-
-#define GlintLight0DiffuseIntensityBlue               0x9d30
-#define GlintLight0DiffuseIntensityBlueTag            0x03a6
-#define GlintLight0DiffuseIntensityBlueReg                 1
-#define GlintLight0DiffuseIntensityBlueOff            0x8d30
-
-#define GlintLight0SpecularIntensityRed               0x9d38
-#define GlintLight0SpecularIntensityRedTag            0x03a7
-#define GlintLight0SpecularIntensityRedReg                 1
-#define GlintLight0SpecularIntensityRedOff            0x8d38
-
-#define GlintLight0SpecularIntensityGreen             0x9d40
-#define GlintLight0SpecularIntensityGreenTag          0x03a8
-#define GlintLight0SpecularIntensityGreenReg               1
-#define GlintLight0SpecularIntensityGreenOff          0x8d40
-
-#define GlintLight0SpecularIntensityBlue              0x9d48
-#define GlintLight0SpecularIntensityBlueTag           0x03a9
-#define GlintLight0SpecularIntensityBlueReg                1
-#define GlintLight0SpecularIntensityBlueOff           0x8d48
-
-#define GlintLight0PositionX                          0x9d50
-#define GlintLight0PositionXTag                       0x03aa
-#define GlintLight0PositionXReg                            1
-#define GlintLight0PositionXOff                       0x8d50
-
-#define GlintLight0PositionY                          0x9d58
-#define GlintLight0PositionYTag                       0x03ab
-#define GlintLight0PositionYReg                            1
-#define GlintLight0PositionYOff                       0x8d58
-
-#define GlintLight0PositionZ                          0x9d60
-#define GlintLight0PositionZTag                       0x03ac
-#define GlintLight0PositionZReg                            1
-#define GlintLight0PositionZOff                       0x8d60
-
-#define GlintLight0PositionW                          0x9d68
-#define GlintLight0PositionWTag                       0x03ad
-#define GlintLight0PositionWReg                            1
-#define GlintLight0PositionWOff                       0x8d68
-
-#define GlintLight0SpotlightDirectionX                0x9d70
-#define GlintLight0SpotlightDirectionXTag             0x03ae
-#define GlintLight0SpotlightDirectionXReg                  1
-#define GlintLight0SpotlightDirectionXOff             0x8d70
-
-#define GlintLight0SpotlightDirectionY                0x9d78
-#define GlintLight0SpotlightDirectionYTag             0x03af
-#define GlintLight0SpotlightDirectionYReg                  1
-#define GlintLight0SpotlightDirectionYOff             0x8d78
-
-#define GlintLight0SpotlightDirectionZ                0x9d80
-#define GlintLight0SpotlightDirectionZTag             0x03b0
-#define GlintLight0SpotlightDirectionZReg                  1
-#define GlintLight0SpotlightDirectionZOff             0x8d80
-
-#define GlintLight0SpotlightExponent                  0x9d88
-#define GlintLight0SpotlightExponentTag               0x03b1
-#define GlintLight0SpotlightExponentReg                    1
-#define GlintLight0SpotlightExponentOff               0x8d88
-
-#define GlintLight0CosSpotlightCutoffAngle            0x9d90
-#define GlintLight0CosSpotlightCutoffAngleTag         0x03b2
-#define GlintLight0CosSpotlightCutoffAngleReg              1
-#define GlintLight0CosSpotlightCutoffAngleOff         0x8d90
-
-#define GlintLight0ConstantAttenuation                0x9d98
-#define GlintLight0ConstantAttenuationTag             0x03b3
-#define GlintLight0ConstantAttenuationReg                  1
-#define GlintLight0ConstantAttenuationOff             0x8d98
-
-#define GlintLight0LinearAttenuation                  0x9da0
-#define GlintLight0LinearAttenuationTag               0x03b4
-#define GlintLight0LinearAttenuationReg                    1
-#define GlintLight0LinearAttenuationOff               0x8da0
-
-#define GlintLight0QuadraticAttenuation               0x9da8
-#define GlintLight0QuadraticAttenuationTag            0x03b5
-#define GlintLight0QuadraticAttenuationReg                 1
-#define GlintLight0QuadraticAttenuationOff            0x8da8
-
-#define GlintLight1Mode                               0x9db0
-#define GlintLight1ModeTag                            0x03b6
-#define GlintLight1ModeReg                                 1
-#define GlintLight1ModeOff                            0x8db0
-
-#define GlintLight1AmbientIntensityRed                0x9db8
-#define GlintLight1AmbientIntensityRedTag             0x03b7
-#define GlintLight1AmbientIntensityRedReg                  1
-#define GlintLight1AmbientIntensityRedOff             0x8db8
-
-#define GlintLight1AmbientIntensityGreen              0x9dc0
-#define GlintLight1AmbientIntensityGreenTag           0x03b8
-#define GlintLight1AmbientIntensityGreenReg                1
-#define GlintLight1AmbientIntensityGreenOff           0x8dc0
-
-#define GlintLight1AmbientIntensityBlue               0x9dc8
-#define GlintLight1AmbientIntensityBlueTag            0x03b9
-#define GlintLight1AmbientIntensityBlueReg                 1
-#define GlintLight1AmbientIntensityBlueOff            0x8dc8
-
-#define GlintLight1DiffuseIntensityRed                0x9dd0
-#define GlintLight1DiffuseIntensityRedTag             0x03ba
-#define GlintLight1DiffuseIntensityRedReg                  1
-#define GlintLight1DiffuseIntensityRedOff             0x8dd0
-
-#define GlintLight1DiffuseIntensityGreen              0x9dd8
-#define GlintLight1DiffuseIntensityGreenTag           0x03bb
-#define GlintLight1DiffuseIntensityGreenReg                1
-#define GlintLight1DiffuseIntensityGreenOff           0x8dd8
-
-#define GlintLight1DiffuseIntensityBlue               0x9de0
-#define GlintLight1DiffuseIntensityBlueTag            0x03bc
-#define GlintLight1DiffuseIntensityBlueReg                 1
-#define GlintLight1DiffuseIntensityBlueOff            0x8de0
-
-#define GlintLight1SpecularIntensityRed               0x9de8
-#define GlintLight1SpecularIntensityRedTag            0x03bd
-#define GlintLight1SpecularIntensityRedReg                 1
-#define GlintLight1SpecularIntensityRedOff            0x8de8
-
-#define GlintLight1SpecularIntensityGreen             0x9df0
-#define GlintLight1SpecularIntensityGreenTag          0x03be
-#define GlintLight1SpecularIntensityGreenReg               1
-#define GlintLight1SpecularIntensityGreenOff          0x8df0
-
-#define GlintLight1SpecularIntensityBlue              0x9df8
-#define GlintLight1SpecularIntensityBlueTag           0x03bf
-#define GlintLight1SpecularIntensityBlueReg                1
-#define GlintLight1SpecularIntensityBlueOff           0x8df8
-
-#define GlintLight1PositionX                          0x9e00
-#define GlintLight1PositionXTag                       0x03c0
-#define GlintLight1PositionXReg                            1
-#define GlintLight1PositionXOff                       0x8e00
-
-#define GlintLight1PositionY                          0x9e08
-#define GlintLight1PositionYTag                       0x03c1
-#define GlintLight1PositionYReg                            1
-#define GlintLight1PositionYOff                       0x8e08
-
-#define GlintLight1PositionZ                          0x9e10
-#define GlintLight1PositionZTag                       0x03c2
-#define GlintLight1PositionZReg                            1
-#define GlintLight1PositionZOff                       0x8e10
-
-#define GlintLight1PositionW                          0x9e18
-#define GlintLight1PositionWTag                       0x03c3
-#define GlintLight1PositionWReg                            1
-#define GlintLight1PositionWOff                       0x8e18
-
-#define GlintLight1SpotlightDirectionX                0x9e20
-#define GlintLight1SpotlightDirectionXTag             0x03c4
-#define GlintLight1SpotlightDirectionXReg                  1
-#define GlintLight1SpotlightDirectionXOff             0x8e20
-
-#define GlintLight1SpotlightDirectionY                0x9e28
-#define GlintLight1SpotlightDirectionYTag             0x03c5
-#define GlintLight1SpotlightDirectionYReg                  1
-#define GlintLight1SpotlightDirectionYOff             0x8e28
-
-#define GlintLight1SpotlightDirectionZ                0x9e30
-#define GlintLight1SpotlightDirectionZTag             0x03c6
-#define GlintLight1SpotlightDirectionZReg                  1
-#define GlintLight1SpotlightDirectionZOff             0x8e30
-
-#define GlintLight1SpotlightExponent                  0x9e38
-#define GlintLight1SpotlightExponentTag               0x03c7
-#define GlintLight1SpotlightExponentReg                    1
-#define GlintLight1SpotlightExponentOff               0x8e38
-
-#define GlintLight1CosSpotlightCutoffAngle            0x9e40
-#define GlintLight1CosSpotlightCutoffAngleTag         0x03c8
-#define GlintLight1CosSpotlightCutoffAngleReg              1
-#define GlintLight1CosSpotlightCutoffAngleOff         0x8e40
-
-#define GlintLight1ConstantAttenuation                0x9e48
-#define GlintLight1ConstantAttenuationTag             0x03c9
-#define GlintLight1ConstantAttenuationReg                  1
-#define GlintLight1ConstantAttenuationOff             0x8e48
-
-#define GlintLight1LinearAttenuation                  0x9e50
-#define GlintLight1LinearAttenuationTag               0x03ca
-#define GlintLight1LinearAttenuationReg                    1
-#define GlintLight1LinearAttenuationOff               0x8e50
-
-#define GlintLight1QuadraticAttenuation               0x9e58
-#define GlintLight1QuadraticAttenuationTag            0x03cb
-#define GlintLight1QuadraticAttenuationReg                 1
-#define GlintLight1QuadraticAttenuationOff            0x8e58
-
-#define GlintLight2Mode                               0x9e60
-#define GlintLight2ModeTag                            0x03cc
-#define GlintLight2ModeReg                                 1
-#define GlintLight2ModeOff                            0x8e60
-
-#define GlintLight2AmbientIntensityRed                0x9e68
-#define GlintLight2AmbientIntensityRedTag             0x03cd
-#define GlintLight2AmbientIntensityRedReg                  1
-#define GlintLight2AmbientIntensityRedOff             0x8e68
-
-#define GlintLight2AmbientIntensityGreen              0x9e70
-#define GlintLight2AmbientIntensityGreenTag           0x03ce
-#define GlintLight2AmbientIntensityGreenReg                1
-#define GlintLight2AmbientIntensityGreenOff           0x8e70
-
-#define GlintLight2AmbientIntensityBlue               0x9e78
-#define GlintLight2AmbientIntensityBlueTag            0x03cf
-#define GlintLight2AmbientIntensityBlueReg                 1
-#define GlintLight2AmbientIntensityBlueOff            0x8e78
-
-#define GlintLight2DiffuseIntensityRed                0x9e80
-#define GlintLight2DiffuseIntensityRedTag             0x03d0
-#define GlintLight2DiffuseIntensityRedReg                  1
-#define GlintLight2DiffuseIntensityRedOff             0x8e80
-
-#define GlintLight2DiffuseIntensityGreen              0x9e88
-#define GlintLight2DiffuseIntensityGreenTag           0x03d1
-#define GlintLight2DiffuseIntensityGreenReg                1
-#define GlintLight2DiffuseIntensityGreenOff           0x8e88
-
-#define GlintLight2DiffuseIntensityBlue               0x9e90
-#define GlintLight2DiffuseIntensityBlueTag            0x03d2
-#define GlintLight2DiffuseIntensityBlueReg                 1
-#define GlintLight2DiffuseIntensityBlueOff            0x8e90
-
-#define GlintLight2SpecularIntensityRed               0x9e98
-#define GlintLight2SpecularIntensityRedTag            0x03d3
-#define GlintLight2SpecularIntensityRedReg                 1
-#define GlintLight2SpecularIntensityRedOff            0x8e98
-
-#define GlintLight2SpecularIntensityGreen             0x9ea0
-#define GlintLight2SpecularIntensityGreenTag          0x03d4
-#define GlintLight2SpecularIntensityGreenReg               1
-#define GlintLight2SpecularIntensityGreenOff          0x8ea0
-
-#define GlintLight2SpecularIntensityBlue              0x9ea8
-#define GlintLight2SpecularIntensityBlueTag           0x03d5
-#define GlintLight2SpecularIntensityBlueReg                1
-#define GlintLight2SpecularIntensityBlueOff           0x8ea8
-
-#define GlintLight2PositionX                          0x9eb0
-#define GlintLight2PositionXTag                       0x03d6
-#define GlintLight2PositionXReg                            1
-#define GlintLight2PositionXOff                       0x8eb0
-
-#define GlintLight2PositionY                          0x9eb8
-#define GlintLight2PositionYTag                       0x03d7
-#define GlintLight2PositionYReg                            1
-#define GlintLight2PositionYOff                       0x8eb8
-
-#define GlintLight2PositionZ                          0x9ec0
-#define GlintLight2PositionZTag                       0x03d8
-#define GlintLight2PositionZReg                            1
-#define GlintLight2PositionZOff                       0x8ec0
-
-#define GlintLight2PositionW                          0x9ec8
-#define GlintLight2PositionWTag                       0x03d9
-#define GlintLight2PositionWReg                            1
-#define GlintLight2PositionWOff                       0x8ec8
-
-#define GlintLight2SpotlightDirectionX                0x9ed0
-#define GlintLight2SpotlightDirectionXTag             0x03da
-#define GlintLight2SpotlightDirectionXReg                  1
-#define GlintLight2SpotlightDirectionXOff             0x8ed0
-
-#define GlintLight2SpotlightDirectionY                0x9ed8
-#define GlintLight2SpotlightDirectionYTag             0x03db
-#define GlintLight2SpotlightDirectionYReg                  1
-#define GlintLight2SpotlightDirectionYOff             0x8ed8
-
-#define GlintLight2SpotlightDirectionZ                0x9ee0
-#define GlintLight2SpotlightDirectionZTag             0x03dc
-#define GlintLight2SpotlightDirectionZReg                  1
-#define GlintLight2SpotlightDirectionZOff             0x8ee0
-
-#define GlintLight2SpotlightExponent                  0x9ee8
-#define GlintLight2SpotlightExponentTag               0x03dd
-#define GlintLight2SpotlightExponentReg                    1
-#define GlintLight2SpotlightExponentOff               0x8ee8
-
-#define GlintLight2CosSpotlightCutoffAngle            0x9ef0
-#define GlintLight2CosSpotlightCutoffAngleTag         0x03de
-#define GlintLight2CosSpotlightCutoffAngleReg              1
-#define GlintLight2CosSpotlightCutoffAngleOff         0x8ef0
-
-#define GlintLight2ConstantAttenuation                0x9ef8
-#define GlintLight2ConstantAttenuationTag             0x03df
-#define GlintLight2ConstantAttenuationReg                  1
-#define GlintLight2ConstantAttenuationOff             0x8ef8
-
-#define GlintLight2LinearAttenuation                  0x9f00
-#define GlintLight2LinearAttenuationTag               0x03e0
-#define GlintLight2LinearAttenuationReg                    1
-#define GlintLight2LinearAttenuationOff               0x8f00
-
-#define GlintLight2QuadraticAttenuation               0x9f08
-#define GlintLight2QuadraticAttenuationTag            0x03e1
-#define GlintLight2QuadraticAttenuationReg                 1
-#define GlintLight2QuadraticAttenuationOff            0x8f08
-
-#define GlintLight3Mode                               0x9f10
-#define GlintLight3ModeTag                            0x03e2
-#define GlintLight3ModeReg                                 1
-#define GlintLight3ModeOff                            0x8f10
-
-#define GlintLight3AmbientIntensityRed                0x9f18
-#define GlintLight3AmbientIntensityRedTag             0x03e3
-#define GlintLight3AmbientIntensityRedReg                  1
-#define GlintLight3AmbientIntensityRedOff             0x8f18
-
-#define GlintLight3AmbientIntensityGreen              0x9f20
-#define GlintLight3AmbientIntensityGreenTag           0x03e4
-#define GlintLight3AmbientIntensityGreenReg                1
-#define GlintLight3AmbientIntensityGreenOff           0x8f20
-
-#define GlintLight3AmbientIntensityBlue               0x9f28
-#define GlintLight3AmbientIntensityBlueTag            0x03e5
-#define GlintLight3AmbientIntensityBlueReg                 1
-#define GlintLight3AmbientIntensityBlueOff            0x8f28
-
-#define GlintLight3DiffuseIntensityRed                0x9f30
-#define GlintLight3DiffuseIntensityRedTag             0x03e6
-#define GlintLight3DiffuseIntensityRedReg                  1
-#define GlintLight3DiffuseIntensityRedOff             0x8f30
-
-#define GlintLight3DiffuseIntensityGreen              0x9f38
-#define GlintLight3DiffuseIntensityGreenTag           0x03e7
-#define GlintLight3DiffuseIntensityGreenReg                1
-#define GlintLight3DiffuseIntensityGreenOff           0x8f38
-
-#define GlintLight3DiffuseIntensityBlue               0x9f40
-#define GlintLight3DiffuseIntensityBlueTag            0x03e8
-#define GlintLight3DiffuseIntensityBlueReg                 1
-#define GlintLight3DiffuseIntensityBlueOff            0x8f40
-
-#define GlintLight3SpecularIntensityRed               0x9f48
-#define GlintLight3SpecularIntensityRedTag            0x03e9
-#define GlintLight3SpecularIntensityRedReg                 1
-#define GlintLight3SpecularIntensityRedOff            0x8f48
-
-#define GlintLight3SpecularIntensityGreen             0x9f50
-#define GlintLight3SpecularIntensityGreenTag          0x03ea
-#define GlintLight3SpecularIntensityGreenReg               1
-#define GlintLight3SpecularIntensityGreenOff          0x8f50
-
-#define GlintLight3SpecularIntensityBlue              0x9f58
-#define GlintLight3SpecularIntensityBlueTag           0x03eb
-#define GlintLight3SpecularIntensityBlueReg                1
-#define GlintLight3SpecularIntensityBlueOff           0x8f58
-
-#define GlintLight3PositionX                          0x9f60
-#define GlintLight3PositionXTag                       0x03ec
-#define GlintLight3PositionXReg                            1
-#define GlintLight3PositionXOff                       0x8f60
-
-#define GlintLight3PositionY                          0x9f68
-#define GlintLight3PositionYTag                       0x03ed
-#define GlintLight3PositionYReg                            1
-#define GlintLight3PositionYOff                       0x8f68
-
-#define GlintLight3PositionZ                          0x9f70
-#define GlintLight3PositionZTag                       0x03ee
-#define GlintLight3PositionZReg                            1
-#define GlintLight3PositionZOff                       0x8f70
-
-#define GlintLight3PositionW                          0x9f78
-#define GlintLight3PositionWTag                       0x03ef
-#define GlintLight3PositionWReg                            1
-#define GlintLight3PositionWOff                       0x8f78
-
-#define GlintLight3SpotlightDirectionX                0x9f80
-#define GlintLight3SpotlightDirectionXTag             0x03f0
-#define GlintLight3SpotlightDirectionXReg                  1
-#define GlintLight3SpotlightDirectionXOff             0x8f80
-
-#define GlintLight3SpotlightDirectionY                0x9f88
-#define GlintLight3SpotlightDirectionYTag             0x03f1
-#define GlintLight3SpotlightDirectionYReg                  1
-#define GlintLight3SpotlightDirectionYOff             0x8f88
-
-#define GlintLight3SpotlightDirectionZ                0x9f90
-#define GlintLight3SpotlightDirectionZTag             0x03f2
-#define GlintLight3SpotlightDirectionZReg                  1
-#define GlintLight3SpotlightDirectionZOff             0x8f90
-
-#define GlintLight3SpotlightExponent                  0x9f98
-#define GlintLight3SpotlightExponentTag               0x03f3
-#define GlintLight3SpotlightExponentReg                    1
-#define GlintLight3SpotlightExponentOff               0x8f98
-
-#define GlintLight3CosSpotlightCutoffAngle            0x9fa0
-#define GlintLight3CosSpotlightCutoffAngleTag         0x03f4
-#define GlintLight3CosSpotlightCutoffAngleReg              1
-#define GlintLight3CosSpotlightCutoffAngleOff         0x8fa0
-
-#define GlintLight3ConstantAttenuation                0x9fa8
-#define GlintLight3ConstantAttenuationTag             0x03f5
-#define GlintLight3ConstantAttenuationReg                  1
-#define GlintLight3ConstantAttenuationOff             0x8fa8
-
-#define GlintLight3LinearAttenuation                  0x9fb0
-#define GlintLight3LinearAttenuationTag               0x03f6
-#define GlintLight3LinearAttenuationReg                    1
-#define GlintLight3LinearAttenuationOff               0x8fb0
-
-#define GlintLight3QuadraticAttenuation               0x9fb8
-#define GlintLight3QuadraticAttenuationTag            0x03f7
-#define GlintLight3QuadraticAttenuationReg                 1
-#define GlintLight3QuadraticAttenuationOff            0x8fb8
-
-#define GlintLight4Mode                               0x9fc0
-#define GlintLight4ModeTag                            0x03f8
-#define GlintLight4ModeReg                                 1
-#define GlintLight4ModeOff                            0x8fc0
-
-#define GlintLight4AmbientIntensityRed                0x9fc8
-#define GlintLight4AmbientIntensityRedTag             0x03f9
-#define GlintLight4AmbientIntensityRedReg                  1
-#define GlintLight4AmbientIntensityRedOff             0x8fc8
-
-#define GlintLight4AmbientIntensityGreen              0x9fd0
-#define GlintLight4AmbientIntensityGreenTag           0x03fa
-#define GlintLight4AmbientIntensityGreenReg                1
-#define GlintLight4AmbientIntensityGreenOff           0x8fd0
-
-#define GlintLight4AmbientIntensityBlue               0x9fd8
-#define GlintLight4AmbientIntensityBlueTag            0x03fb
-#define GlintLight4AmbientIntensityBlueReg                 1
-#define GlintLight4AmbientIntensityBlueOff            0x8fd8
-
-#define GlintLight4DiffuseIntensityRed                0x9fe0
-#define GlintLight4DiffuseIntensityRedTag             0x03fc
-#define GlintLight4DiffuseIntensityRedReg                  1
-#define GlintLight4DiffuseIntensityRedOff             0x8fe0
-
-#define GlintLight4DiffuseIntensityGreen              0x9fe8
-#define GlintLight4DiffuseIntensityGreenTag           0x03fd
-#define GlintLight4DiffuseIntensityGreenReg                1
-#define GlintLight4DiffuseIntensityGreenOff           0x8fe8
-
-#define GlintLight4DiffuseIntensityBlue               0x9ff0
-#define GlintLight4DiffuseIntensityBlueTag            0x03fe
-#define GlintLight4DiffuseIntensityBlueReg                 1
-#define GlintLight4DiffuseIntensityBlueOff            0x8ff0
-
-#define GlintLight4SpecularIntensityRed               0x9ff8
-#define GlintLight4SpecularIntensityRedTag            0x03ff
-#define GlintLight4SpecularIntensityRedReg                 1
-#define GlintLight4SpecularIntensityRedOff            0x8ff8
-
-#define GlintLight4SpecularIntensityGreen             0xa000
-#define GlintLight4SpecularIntensityGreenTag          0x0400
-#define GlintLight4SpecularIntensityGreenReg               1
-#define GlintLight4SpecularIntensityGreenOff          0x9000
-
-#define GlintLight4SpecularIntensityBlue              0xa008
-#define GlintLight4SpecularIntensityBlueTag           0x0401
-#define GlintLight4SpecularIntensityBlueReg                1
-#define GlintLight4SpecularIntensityBlueOff           0x9008
-
-#define GlintLight4PositionX                          0xa010
-#define GlintLight4PositionXTag                       0x0402
-#define GlintLight4PositionXReg                            1
-#define GlintLight4PositionXOff                       0x9010
-
-#define GlintLight4PositionY                          0xa018
-#define GlintLight4PositionYTag                       0x0403
-#define GlintLight4PositionYReg                            1
-#define GlintLight4PositionYOff                       0x9018
-
-#define GlintLight4PositionZ                          0xa020
-#define GlintLight4PositionZTag                       0x0404
-#define GlintLight4PositionZReg                            1
-#define GlintLight4PositionZOff                       0x9020
-
-#define GlintLight4PositionW                          0xa028
-#define GlintLight4PositionWTag                       0x0405
-#define GlintLight4PositionWReg                            1
-#define GlintLight4PositionWOff                       0x9028
-
-#define GlintLight4SpotlightDirectionX                0xa030
-#define GlintLight4SpotlightDirectionXTag             0x0406
-#define GlintLight4SpotlightDirectionXReg                  1
-#define GlintLight4SpotlightDirectionXOff             0x9030
-
-#define GlintLight4SpotlightDirectionY                0xa038
-#define GlintLight4SpotlightDirectionYTag             0x0407
-#define GlintLight4SpotlightDirectionYReg                  1
-#define GlintLight4SpotlightDirectionYOff             0x9038
-
-#define GlintLight4SpotlightDirectionZ                0xa040
-#define GlintLight4SpotlightDirectionZTag             0x0408
-#define GlintLight4SpotlightDirectionZReg                  1
-#define GlintLight4SpotlightDirectionZOff             0x9040
-
-#define GlintLight4SpotlightExponent                  0xa048
-#define GlintLight4SpotlightExponentTag               0x0409
-#define GlintLight4SpotlightExponentReg                    1
-#define GlintLight4SpotlightExponentOff               0x9048
-
-#define GlintLight4CosSpotlightCutoffAngle            0xa050
-#define GlintLight4CosSpotlightCutoffAngleTag         0x040a
-#define GlintLight4CosSpotlightCutoffAngleReg              1
-#define GlintLight4CosSpotlightCutoffAngleOff         0x9050
-
-#define GlintLight4ConstantAttenuation                0xa058
-#define GlintLight4ConstantAttenuationTag             0x040b
-#define GlintLight4ConstantAttenuationReg                  1
-#define GlintLight4ConstantAttenuationOff             0x9058
-
-#define GlintLight4LinearAttenuation                  0xa060
-#define GlintLight4LinearAttenuationTag               0x040c
-#define GlintLight4LinearAttenuationReg                    1
-#define GlintLight4LinearAttenuationOff               0x9060
-
-#define GlintLight4QuadraticAttenuation               0xa068
-#define GlintLight4QuadraticAttenuationTag            0x040d
-#define GlintLight4QuadraticAttenuationReg                 1
-#define GlintLight4QuadraticAttenuationOff            0x9068
-
-#define GlintLight5Mode                               0xa070
-#define GlintLight5ModeTag                            0x040e
-#define GlintLight5ModeReg                                 1
-#define GlintLight5ModeOff                            0x9070
-
-#define GlintLight5AmbientIntensityRed                0xa078
-#define GlintLight5AmbientIntensityRedTag             0x040f
-#define GlintLight5AmbientIntensityRedReg                  1
-#define GlintLight5AmbientIntensityRedOff             0x9078
-
-#define GlintLight5AmbientIntensityGreen              0xa080
-#define GlintLight5AmbientIntensityGreenTag           0x0410
-#define GlintLight5AmbientIntensityGreenReg                1
-#define GlintLight5AmbientIntensityGreenOff           0x9080
-
-#define GlintLight5AmbientIntensityBlue               0xa088
-#define GlintLight5AmbientIntensityBlueTag            0x0411
-#define GlintLight5AmbientIntensityBlueReg                 1
-#define GlintLight5AmbientIntensityBlueOff            0x9088
-
-#define GlintLight5DiffuseIntensityRed                0xa090
-#define GlintLight5DiffuseIntensityRedTag             0x0412
-#define GlintLight5DiffuseIntensityRedReg                  1
-#define GlintLight5DiffuseIntensityRedOff             0x9090
-
-#define GlintLight5DiffuseIntensityGreen              0xa098
-#define GlintLight5DiffuseIntensityGreenTag           0x0413
-#define GlintLight5DiffuseIntensityGreenReg                1
-#define GlintLight5DiffuseIntensityGreenOff           0x9098
-
-#define GlintLight5DiffuseIntensityBlue               0xa0a0
-#define GlintLight5DiffuseIntensityBlueTag            0x0414
-#define GlintLight5DiffuseIntensityBlueReg                 1
-#define GlintLight5DiffuseIntensityBlueOff            0x90a0
-
-#define GlintLight5SpecularIntensityRed               0xa0a8
-#define GlintLight5SpecularIntensityRedTag            0x0415
-#define GlintLight5SpecularIntensityRedReg                 1
-#define GlintLight5SpecularIntensityRedOff            0x90a8
-
-#define GlintLight5SpecularIntensityGreen             0xa0b0
-#define GlintLight5SpecularIntensityGreenTag          0x0416
-#define GlintLight5SpecularIntensityGreenReg               1
-#define GlintLight5SpecularIntensityGreenOff          0x90b0
-
-#define GlintLight5SpecularIntensityBlue              0xa0b8
-#define GlintLight5SpecularIntensityBlueTag           0x0417
-#define GlintLight5SpecularIntensityBlueReg                1
-#define GlintLight5SpecularIntensityBlueOff           0x90b8
-
-#define GlintLight5PositionX                          0xa0c0
-#define GlintLight5PositionXTag                       0x0418
-#define GlintLight5PositionXReg                            1
-#define GlintLight5PositionXOff                       0x90c0
-
-#define GlintLight5PositionY                          0xa0c8
-#define GlintLight5PositionYTag                       0x0419
-#define GlintLight5PositionYReg                            1
-#define GlintLight5PositionYOff                       0x90c8
-
-#define GlintLight5PositionZ                          0xa0d0
-#define GlintLight5PositionZTag                       0x041a
-#define GlintLight5PositionZReg                            1
-#define GlintLight5PositionZOff                       0x90d0
-
-#define GlintLight5PositionW                          0xa0d8
-#define GlintLight5PositionWTag                       0x041b
-#define GlintLight5PositionWReg                            1
-#define GlintLight5PositionWOff                       0x90d8
-
-#define GlintLight5SpotlightDirectionX                0xa0e0
-#define GlintLight5SpotlightDirectionXTag             0x041c
-#define GlintLight5SpotlightDirectionXReg                  1
-#define GlintLight5SpotlightDirectionXOff             0x90e0
-
-#define GlintLight5SpotlightDirectionY                0xa0e8
-#define GlintLight5SpotlightDirectionYTag             0x041d
-#define GlintLight5SpotlightDirectionYReg                  1
-#define GlintLight5SpotlightDirectionYOff             0x90e8
-
-#define GlintLight5SpotlightDirectionZ                0xa0f0
-#define GlintLight5SpotlightDirectionZTag             0x041e
-#define GlintLight5SpotlightDirectionZReg                  1
-#define GlintLight5SpotlightDirectionZOff             0x90f0
-
-#define GlintLight5SpotlightExponent                  0xa0f8
-#define GlintLight5SpotlightExponentTag               0x041f
-#define GlintLight5SpotlightExponentReg                    1
-#define GlintLight5SpotlightExponentOff               0x90f8
-
-#define GlintLight5CosSpotlightCutoffAngle            0xa100
-#define GlintLight5CosSpotlightCutoffAngleTag         0x0420
-#define GlintLight5CosSpotlightCutoffAngleReg              1
-#define GlintLight5CosSpotlightCutoffAngleOff         0x9100
-
-#define GlintLight5ConstantAttenuation                0xa108
-#define GlintLight5ConstantAttenuationTag             0x0421
-#define GlintLight5ConstantAttenuationReg                  1
-#define GlintLight5ConstantAttenuationOff             0x9108
-
-#define GlintLight5LinearAttenuation                  0xa110
-#define GlintLight5LinearAttenuationTag               0x0422
-#define GlintLight5LinearAttenuationReg                    1
-#define GlintLight5LinearAttenuationOff               0x9110
-
-#define GlintLight5QuadraticAttenuation               0xa118
-#define GlintLight5QuadraticAttenuationTag            0x0423
-#define GlintLight5QuadraticAttenuationReg                 1
-#define GlintLight5QuadraticAttenuationOff            0x9118
-
-#define GlintLight6Mode                               0xa120
-#define GlintLight6ModeTag                            0x0424
-#define GlintLight6ModeReg                                 1
-#define GlintLight6ModeOff                            0x9120
-
-#define GlintLight6AmbientIntensityRed                0xa128
-#define GlintLight6AmbientIntensityRedTag             0x0425
-#define GlintLight6AmbientIntensityRedReg                  1
-#define GlintLight6AmbientIntensityRedOff             0x9128
-
-#define GlintLight6AmbientIntensityGreen              0xa130
-#define GlintLight6AmbientIntensityGreenTag           0x0426
-#define GlintLight6AmbientIntensityGreenReg                1
-#define GlintLight6AmbientIntensityGreenOff           0x9130
-
-#define GlintLight6AmbientIntensityBlue               0xa138
-#define GlintLight6AmbientIntensityBlueTag            0x0427
-#define GlintLight6AmbientIntensityBlueReg                 1
-#define GlintLight6AmbientIntensityBlueOff            0x9138
-
-#define GlintLight6DiffuseIntensityRed                0xa140
-#define GlintLight6DiffuseIntensityRedTag             0x0428
-#define GlintLight6DiffuseIntensityRedReg                  1
-#define GlintLight6DiffuseIntensityRedOff             0x9140
-
-#define GlintLight6DiffuseIntensityGreen              0xa148
-#define GlintLight6DiffuseIntensityGreenTag           0x0429
-#define GlintLight6DiffuseIntensityGreenReg                1
-#define GlintLight6DiffuseIntensityGreenOff           0x9148
-
-#define GlintLight6DiffuseIntensityBlue               0xa150
-#define GlintLight6DiffuseIntensityBlueTag            0x042a
-#define GlintLight6DiffuseIntensityBlueReg                 1
-#define GlintLight6DiffuseIntensityBlueOff            0x9150
-
-#define GlintLight6SpecularIntensityRed               0xa158
-#define GlintLight6SpecularIntensityRedTag            0x042b
-#define GlintLight6SpecularIntensityRedReg                 1
-#define GlintLight6SpecularIntensityRedOff            0x9158
-
-#define GlintLight6SpecularIntensityGreen             0xa160
-#define GlintLight6SpecularIntensityGreenTag          0x042c
-#define GlintLight6SpecularIntensityGreenReg               1
-#define GlintLight6SpecularIntensityGreenOff          0x9160
-
-#define GlintLight6SpecularIntensityBlue              0xa168
-#define GlintLight6SpecularIntensityBlueTag           0x042d
-#define GlintLight6SpecularIntensityBlueReg                1
-#define GlintLight6SpecularIntensityBlueOff           0x9168
-
-#define GlintLight6PositionX                          0xa170
-#define GlintLight6PositionXTag                       0x042e
-#define GlintLight6PositionXReg                            1
-#define GlintLight6PositionXOff                       0x9170
-
-#define GlintLight6PositionY                          0xa178
-#define GlintLight6PositionYTag                       0x042f
-#define GlintLight6PositionYReg                            1
-#define GlintLight6PositionYOff                       0x9178
-
-#define GlintLight6PositionZ                          0xa180
-#define GlintLight6PositionZTag                       0x0430
-#define GlintLight6PositionZReg                            1
-#define GlintLight6PositionZOff                       0x9180
-
-#define GlintLight6PositionW                          0xa188
-#define GlintLight6PositionWTag                       0x0431
-#define GlintLight6PositionWReg                            1
-#define GlintLight6PositionWOff                       0x9188
-
-#define GlintLight6SpotlightDirectionX                0xa190
-#define GlintLight6SpotlightDirectionXTag             0x0432
-#define GlintLight6SpotlightDirectionXReg                  1
-#define GlintLight6SpotlightDirectionXOff             0x9190
-
-#define GlintLight6SpotlightDirectionY                0xa198
-#define GlintLight6SpotlightDirectionYTag             0x0433
-#define GlintLight6SpotlightDirectionYReg                  1
-#define GlintLight6SpotlightDirectionYOff             0x9198
-
-#define GlintLight6SpotlightDirectionZ                0xa1a0
-#define GlintLight6SpotlightDirectionZTag             0x0434
-#define GlintLight6SpotlightDirectionZReg                  1
-#define GlintLight6SpotlightDirectionZOff             0x91a0
-
-#define GlintLight6SpotlightExponent                  0xa1a8
-#define GlintLight6SpotlightExponentTag               0x0435
-#define GlintLight6SpotlightExponentReg                    1
-#define GlintLight6SpotlightExponentOff               0x91a8
-
-#define GlintLight6CosSpotlightCutoffAngle            0xa1b0
-#define GlintLight6CosSpotlightCutoffAngleTag         0x0436
-#define GlintLight6CosSpotlightCutoffAngleReg              1
-#define GlintLight6CosSpotlightCutoffAngleOff         0x91b0
-
-#define GlintLight6ConstantAttenuation                0xa1b8
-#define GlintLight6ConstantAttenuationTag             0x0437
-#define GlintLight6ConstantAttenuationReg                  1
-#define GlintLight6ConstantAttenuationOff             0x91b8
-
-#define GlintLight6LinearAttenuation                  0xa1c0
-#define GlintLight6LinearAttenuationTag               0x0438
-#define GlintLight6LinearAttenuationReg                    1
-#define GlintLight6LinearAttenuationOff               0x91c0
-
-#define GlintLight6QuadraticAttenuation               0xa1c8
-#define GlintLight6QuadraticAttenuationTag            0x0439
-#define GlintLight6QuadraticAttenuationReg                 1
-#define GlintLight6QuadraticAttenuationOff            0x91c8
-
-#define GlintLight7Mode                               0xa1d0
-#define GlintLight7ModeTag                            0x043a
-#define GlintLight7ModeReg                                 1
-#define GlintLight7ModeOff                            0x91d0
-
-#define GlintLight7AmbientIntensityRed                0xa1d8
-#define GlintLight7AmbientIntensityRedTag             0x043b
-#define GlintLight7AmbientIntensityRedReg                  1
-#define GlintLight7AmbientIntensityRedOff             0x91d8
-
-#define GlintLight7AmbientIntensityGreen              0xa1e0
-#define GlintLight7AmbientIntensityGreenTag           0x043c
-#define GlintLight7AmbientIntensityGreenReg                1
-#define GlintLight7AmbientIntensityGreenOff           0x91e0
-
-#define GlintLight7AmbientIntensityBlue               0xa1e8
-#define GlintLight7AmbientIntensityBlueTag            0x043d
-#define GlintLight7AmbientIntensityBlueReg                 1
-#define GlintLight7AmbientIntensityBlueOff            0x91e8
-
-#define GlintLight7DiffuseIntensityRed                0xa1f0
-#define GlintLight7DiffuseIntensityRedTag             0x043e
-#define GlintLight7DiffuseIntensityRedReg                  1
-#define GlintLight7DiffuseIntensityRedOff             0x91f0
-
-#define GlintLight7DiffuseIntensityGreen              0xa1f8
-#define GlintLight7DiffuseIntensityGreenTag           0x043f
-#define GlintLight7DiffuseIntensityGreenReg                1
-#define GlintLight7DiffuseIntensityGreenOff           0x91f8
-
-#define GlintLight7DiffuseIntensityBlue               0xa200
-#define GlintLight7DiffuseIntensityBlueTag            0x0440
-#define GlintLight7DiffuseIntensityBlueReg                 1
-#define GlintLight7DiffuseIntensityBlueOff            0x9200
-
-#define GlintLight7SpecularIntensityRed               0xa208
-#define GlintLight7SpecularIntensityRedTag            0x0441
-#define GlintLight7SpecularIntensityRedReg                 1
-#define GlintLight7SpecularIntensityRedOff            0x9208
-
-#define GlintLight7SpecularIntensityGreen             0xa210
-#define GlintLight7SpecularIntensityGreenTag          0x0442
-#define GlintLight7SpecularIntensityGreenReg               1
-#define GlintLight7SpecularIntensityGreenOff          0x9210
-
-#define GlintLight7SpecularIntensityBlue              0xa218
-#define GlintLight7SpecularIntensityBlueTag           0x0443
-#define GlintLight7SpecularIntensityBlueReg                1
-#define GlintLight7SpecularIntensityBlueOff           0x9218
-
-#define GlintLight7PositionX                          0xa220
-#define GlintLight7PositionXTag                       0x0444
-#define GlintLight7PositionXReg                            1
-#define GlintLight7PositionXOff                       0x9220
-
-#define GlintLight7PositionY                          0xa228
-#define GlintLight7PositionYTag                       0x0445
-#define GlintLight7PositionYReg                            1
-#define GlintLight7PositionYOff                       0x9228
-
-#define GlintLight7PositionZ                          0xa230
-#define GlintLight7PositionZTag                       0x0446
-#define GlintLight7PositionZReg                            1
-#define GlintLight7PositionZOff                       0x9230
-
-#define GlintLight7PositionW                          0xa238
-#define GlintLight7PositionWTag                       0x0447
-#define GlintLight7PositionWReg                            1
-#define GlintLight7PositionWOff                       0x9238
-
-#define GlintLight7SpotlightDirectionX                0xa240
-#define GlintLight7SpotlightDirectionXTag             0x0448
-#define GlintLight7SpotlightDirectionXReg                  1
-#define GlintLight7SpotlightDirectionXOff             0x9240
-
-#define GlintLight7SpotlightDirectionY                0xa248
-#define GlintLight7SpotlightDirectionYTag             0x0449
-#define GlintLight7SpotlightDirectionYReg                  1
-#define GlintLight7SpotlightDirectionYOff             0x9248
-
-#define GlintLight7SpotlightDirectionZ                0xa250
-#define GlintLight7SpotlightDirectionZTag             0x044a
-#define GlintLight7SpotlightDirectionZReg                  1
-#define GlintLight7SpotlightDirectionZOff             0x9250
-
-#define GlintLight7SpotlightExponent                  0xa258
-#define GlintLight7SpotlightExponentTag               0x044b
-#define GlintLight7SpotlightExponentReg                    1
-#define GlintLight7SpotlightExponentOff               0x9258
-
-#define GlintLight7CosSpotlightCutoffAngle            0xa260
-#define GlintLight7CosSpotlightCutoffAngleTag         0x044c
-#define GlintLight7CosSpotlightCutoffAngleReg              1
-#define GlintLight7CosSpotlightCutoffAngleOff         0x9260
-
-#define GlintLight7ConstantAttenuation                0xa268
-#define GlintLight7ConstantAttenuationTag             0x044d
-#define GlintLight7ConstantAttenuationReg                  1
-#define GlintLight7ConstantAttenuationOff             0x9268
-
-#define GlintLight7LinearAttenuation                  0xa270
-#define GlintLight7LinearAttenuationTag               0x044e
-#define GlintLight7LinearAttenuationReg                    1
-#define GlintLight7LinearAttenuationOff               0x9270
-
-#define GlintLight7QuadraticAttenuation               0xa278
-#define GlintLight7QuadraticAttenuationTag            0x044f
-#define GlintLight7QuadraticAttenuationReg                 1
-#define GlintLight7QuadraticAttenuationOff            0x9278
-
-#define GlintLight8Mode                               0xa280
-#define GlintLight8ModeTag                            0x0450
-#define GlintLight8ModeReg                                 1
-#define GlintLight8ModeOff                            0x9280
-
-#define GlintLight8AmbientIntensityRed                0xa288
-#define GlintLight8AmbientIntensityRedTag             0x0451
-#define GlintLight8AmbientIntensityRedReg                  1
-#define GlintLight8AmbientIntensityRedOff             0x9288
-
-#define GlintLight8AmbientIntensityGreen              0xa290
-#define GlintLight8AmbientIntensityGreenTag           0x0452
-#define GlintLight8AmbientIntensityGreenReg                1
-#define GlintLight8AmbientIntensityGreenOff           0x9290
-
-#define GlintLight8AmbientIntensityBlue               0xa298
-#define GlintLight8AmbientIntensityBlueTag            0x0453
-#define GlintLight8AmbientIntensityBlueReg                 1
-#define GlintLight8AmbientIntensityBlueOff            0x9298
-
-#define GlintLight8DiffuseIntensityRed                0xa2a0
-#define GlintLight8DiffuseIntensityRedTag             0x0454
-#define GlintLight8DiffuseIntensityRedReg                  1
-#define GlintLight8DiffuseIntensityRedOff             0x92a0
-
-#define GlintLight8DiffuseIntensityGreen              0xa2a8
-#define GlintLight8DiffuseIntensityGreenTag           0x0455
-#define GlintLight8DiffuseIntensityGreenReg                1
-#define GlintLight8DiffuseIntensityGreenOff           0x92a8
-
-#define GlintLight8DiffuseIntensityBlue               0xa2b0
-#define GlintLight8DiffuseIntensityBlueTag            0x0456
-#define GlintLight8DiffuseIntensityBlueReg                 1
-#define GlintLight8DiffuseIntensityBlueOff            0x92b0
-
-#define GlintLight8SpecularIntensityRed               0xa2b8
-#define GlintLight8SpecularIntensityRedTag            0x0457
-#define GlintLight8SpecularIntensityRedReg                 1
-#define GlintLight8SpecularIntensityRedOff            0x92b8
-
-#define GlintLight8SpecularIntensityGreen             0xa2c0
-#define GlintLight8SpecularIntensityGreenTag          0x0458
-#define GlintLight8SpecularIntensityGreenReg               1
-#define GlintLight8SpecularIntensityGreenOff          0x92c0
-
-#define GlintLight8SpecularIntensityBlue              0xa2c8
-#define GlintLight8SpecularIntensityBlueTag           0x0459
-#define GlintLight8SpecularIntensityBlueReg                1
-#define GlintLight8SpecularIntensityBlueOff           0x92c8
-
-#define GlintLight8PositionX                          0xa2d0
-#define GlintLight8PositionXTag                       0x045a
-#define GlintLight8PositionXReg                            1
-#define GlintLight8PositionXOff                       0x92d0
-
-#define GlintLight8PositionY                          0xa2d8
-#define GlintLight8PositionYTag                       0x045b
-#define GlintLight8PositionYReg                            1
-#define GlintLight8PositionYOff                       0x92d8
-
-#define GlintLight8PositionZ                          0xa2e0
-#define GlintLight8PositionZTag                       0x045c
-#define GlintLight8PositionZReg                            1
-#define GlintLight8PositionZOff                       0x92e0
-
-#define GlintLight8PositionW                          0xa2e8
-#define GlintLight8PositionWTag                       0x045d
-#define GlintLight8PositionWReg                            1
-#define GlintLight8PositionWOff                       0x92e8
-
-#define GlintLight8SpotlightDirectionX                0xa2f0
-#define GlintLight8SpotlightDirectionXTag             0x045e
-#define GlintLight8SpotlightDirectionXReg                  1
-#define GlintLight8SpotlightDirectionXOff             0x92f0
-
-#define GlintLight8SpotlightDirectionY                0xa2f8
-#define GlintLight8SpotlightDirectionYTag             0x045f
-#define GlintLight8SpotlightDirectionYReg                  1
-#define GlintLight8SpotlightDirectionYOff             0x92f8
-
-#define GlintLight8SpotlightDirectionZ                0xa300
-#define GlintLight8SpotlightDirectionZTag             0x0460
-#define GlintLight8SpotlightDirectionZReg                  1
-#define GlintLight8SpotlightDirectionZOff             0x9300
-
-#define GlintLight8SpotlightExponent                  0xa308
-#define GlintLight8SpotlightExponentTag               0x0461
-#define GlintLight8SpotlightExponentReg                    1
-#define GlintLight8SpotlightExponentOff               0x9308
-
-#define GlintLight8CosSpotlightCutoffAngle            0xa310
-#define GlintLight8CosSpotlightCutoffAngleTag         0x0462
-#define GlintLight8CosSpotlightCutoffAngleReg              1
-#define GlintLight8CosSpotlightCutoffAngleOff         0x9310
-
-#define GlintLight8ConstantAttenuation                0xa318
-#define GlintLight8ConstantAttenuationTag             0x0463
-#define GlintLight8ConstantAttenuationReg                  1
-#define GlintLight8ConstantAttenuationOff             0x9318
-
-#define GlintLight8LinearAttenuation                  0xa320
-#define GlintLight8LinearAttenuationTag               0x0464
-#define GlintLight8LinearAttenuationReg                    1
-#define GlintLight8LinearAttenuationOff               0x9320
-
-#define GlintLight8QuadraticAttenuation               0xa328
-#define GlintLight8QuadraticAttenuationTag            0x0465
-#define GlintLight8QuadraticAttenuationReg                 1
-#define GlintLight8QuadraticAttenuationOff            0x9328
-
-#define GlintLight9Mode                               0xa330
-#define GlintLight9ModeTag                            0x0466
-#define GlintLight9ModeReg                                 1
-#define GlintLight9ModeOff                            0x9330
-
-#define GlintLight9AmbientIntensityRed                0xa338
-#define GlintLight9AmbientIntensityRedTag             0x0467
-#define GlintLight9AmbientIntensityRedReg                  1
-#define GlintLight9AmbientIntensityRedOff             0x9338
-
-#define GlintLight9AmbientIntensityGreen              0xa340
-#define GlintLight9AmbientIntensityGreenTag           0x0468
-#define GlintLight9AmbientIntensityGreenReg                1
-#define GlintLight9AmbientIntensityGreenOff           0x9340
-
-#define GlintLight9AmbientIntensityBlue               0xa348
-#define GlintLight9AmbientIntensityBlueTag            0x0469
-#define GlintLight9AmbientIntensityBlueReg                 1
-#define GlintLight9AmbientIntensityBlueOff            0x9348
-
-#define GlintLight9DiffuseIntensityRed                0xa350
-#define GlintLight9DiffuseIntensityRedTag             0x046a
-#define GlintLight9DiffuseIntensityRedReg                  1
-#define GlintLight9DiffuseIntensityRedOff             0x9350
-
-#define GlintLight9DiffuseIntensityGreen              0xa358
-#define GlintLight9DiffuseIntensityGreenTag           0x046b
-#define GlintLight9DiffuseIntensityGreenReg                1
-#define GlintLight9DiffuseIntensityGreenOff           0x9358
-
-#define GlintLight9DiffuseIntensityBlue               0xa360
-#define GlintLight9DiffuseIntensityBlueTag            0x046c
-#define GlintLight9DiffuseIntensityBlueReg                 1
-#define GlintLight9DiffuseIntensityBlueOff            0x9360
-
-#define GlintLight9SpecularIntensityRed               0xa368
-#define GlintLight9SpecularIntensityRedTag            0x046d
-#define GlintLight9SpecularIntensityRedReg                 1
-#define GlintLight9SpecularIntensityRedOff            0x9368
-
-#define GlintLight9SpecularIntensityGreen             0xa370
-#define GlintLight9SpecularIntensityGreenTag          0x046e
-#define GlintLight9SpecularIntensityGreenReg               1
-#define GlintLight9SpecularIntensityGreenOff          0x9370
-
-#define GlintLight9SpecularIntensityBlue              0xa378
-#define GlintLight9SpecularIntensityBlueTag           0x046f
-#define GlintLight9SpecularIntensityBlueReg                1
-#define GlintLight9SpecularIntensityBlueOff           0x9378
-
-#define GlintLight9PositionX                          0xa380
-#define GlintLight9PositionXTag                       0x0470
-#define GlintLight9PositionXReg                            1
-#define GlintLight9PositionXOff                       0x9380
-
-#define GlintLight9PositionY                          0xa388
-#define GlintLight9PositionYTag                       0x0471
-#define GlintLight9PositionYReg                            1
-#define GlintLight9PositionYOff                       0x9388
-
-#define GlintLight9PositionZ                          0xa390
-#define GlintLight9PositionZTag                       0x0472
-#define GlintLight9PositionZReg                            1
-#define GlintLight9PositionZOff                       0x9390
-
-#define GlintLight9PositionW                          0xa398
-#define GlintLight9PositionWTag                       0x0473
-#define GlintLight9PositionWReg                            1
-#define GlintLight9PositionWOff                       0x9398
-
-#define GlintLight9SpotlightDirectionX                0xa3a0
-#define GlintLight9SpotlightDirectionXTag             0x0474
-#define GlintLight9SpotlightDirectionXReg                  1
-#define GlintLight9SpotlightDirectionXOff             0x93a0
-
-#define GlintLight9SpotlightDirectionY                0xa3a8
-#define GlintLight9SpotlightDirectionYTag             0x0475
-#define GlintLight9SpotlightDirectionYReg                  1
-#define GlintLight9SpotlightDirectionYOff             0x93a8
-
-#define GlintLight9SpotlightDirectionZ                0xa3b0
-#define GlintLight9SpotlightDirectionZTag             0x0476
-#define GlintLight9SpotlightDirectionZReg                  1
-#define GlintLight9SpotlightDirectionZOff             0x93b0
-
-#define GlintLight9SpotlightExponent                  0xa3b8
-#define GlintLight9SpotlightExponentTag               0x0477
-#define GlintLight9SpotlightExponentReg                    1
-#define GlintLight9SpotlightExponentOff               0x93b8
-
-#define GlintLight9CosSpotlightCutoffAngle            0xa3c0
-#define GlintLight9CosSpotlightCutoffAngleTag         0x0478
-#define GlintLight9CosSpotlightCutoffAngleReg              1
-#define GlintLight9CosSpotlightCutoffAngleOff         0x93c0
-
-#define GlintLight9ConstantAttenuation                0xa3c8
-#define GlintLight9ConstantAttenuationTag             0x0479
-#define GlintLight9ConstantAttenuationReg                  1
-#define GlintLight9ConstantAttenuationOff             0x93c8
-
-#define GlintLight9LinearAttenuation                  0xa3d0
-#define GlintLight9LinearAttenuationTag               0x047a
-#define GlintLight9LinearAttenuationReg                    1
-#define GlintLight9LinearAttenuationOff               0x93d0
-
-#define GlintLight9QuadraticAttenuation               0xa3d8
-#define GlintLight9QuadraticAttenuationTag            0x047b
-#define GlintLight9QuadraticAttenuationReg                 1
-#define GlintLight9QuadraticAttenuationOff            0x93d8
-
-#define GlintLight10Mode                              0xa3e0
-#define GlintLight10ModeTag                           0x047c
-#define GlintLight10ModeReg                                1
-#define GlintLight10ModeOff                           0x93e0
-
-#define GlintLight10AmbientIntensityRed               0xa3e8
-#define GlintLight10AmbientIntensityRedTag            0x047d
-#define GlintLight10AmbientIntensityRedReg                 1
-#define GlintLight10AmbientIntensityRedOff            0x93e8
-
-#define GlintLight10AmbientIntensityGreen             0xa3f0
-#define GlintLight10AmbientIntensityGreenTag          0x047e
-#define GlintLight10AmbientIntensityGreenReg               1
-#define GlintLight10AmbientIntensityGreenOff          0x93f0
-
-#define GlintLight10AmbientIntensityBlue              0xa3f8
-#define GlintLight10AmbientIntensityBlueTag           0x047f
-#define GlintLight10AmbientIntensityBlueReg                1
-#define GlintLight10AmbientIntensityBlueOff           0x93f8
-
-#define GlintLight10DiffuseIntensityRed               0xa400
-#define GlintLight10DiffuseIntensityRedTag            0x0480
-#define GlintLight10DiffuseIntensityRedReg                 1
-#define GlintLight10DiffuseIntensityRedOff            0x9400
-
-#define GlintLight10DiffuseIntensityGreen             0xa408
-#define GlintLight10DiffuseIntensityGreenTag          0x0481
-#define GlintLight10DiffuseIntensityGreenReg               1
-#define GlintLight10DiffuseIntensityGreenOff          0x9408
-
-#define GlintLight10DiffuseIntensityBlue              0xa410
-#define GlintLight10DiffuseIntensityBlueTag           0x0482
-#define GlintLight10DiffuseIntensityBlueReg                1
-#define GlintLight10DiffuseIntensityBlueOff           0x9410
-
-#define GlintLight10SpecularIntensityRed              0xa418
-#define GlintLight10SpecularIntensityRedTag           0x0483
-#define GlintLight10SpecularIntensityRedReg                1
-#define GlintLight10SpecularIntensityRedOff           0x9418
-
-#define GlintLight10SpecularIntensityGreen            0xa420
-#define GlintLight10SpecularIntensityGreenTag         0x0484
-#define GlintLight10SpecularIntensityGreenReg              1
-#define GlintLight10SpecularIntensityGreenOff         0x9420
-
-#define GlintLight10SpecularIntensityBlue             0xa428
-#define GlintLight10SpecularIntensityBlueTag          0x0485
-#define GlintLight10SpecularIntensityBlueReg               1
-#define GlintLight10SpecularIntensityBlueOff          0x9428
-
-#define GlintLight10PositionX                         0xa430
-#define GlintLight10PositionXTag                      0x0486
-#define GlintLight10PositionXReg                           1
-#define GlintLight10PositionXOff                      0x9430
-
-#define GlintLight10PositionY                         0xa438
-#define GlintLight10PositionYTag                      0x0487
-#define GlintLight10PositionYReg                           1
-#define GlintLight10PositionYOff                      0x9438
-
-#define GlintLight10PositionZ                         0xa440
-#define GlintLight10PositionZTag                      0x0488
-#define GlintLight10PositionZReg                           1
-#define GlintLight10PositionZOff                      0x9440
-
-#define GlintLight10PositionW                         0xa448
-#define GlintLight10PositionWTag                      0x0489
-#define GlintLight10PositionWReg                           1
-#define GlintLight10PositionWOff                      0x9448
-
-#define GlintLight10SpotlightDirectionX               0xa450
-#define GlintLight10SpotlightDirectionXTag            0x048a
-#define GlintLight10SpotlightDirectionXReg                 1
-#define GlintLight10SpotlightDirectionXOff            0x9450
-
-#define GlintLight10SpotlightDirectionY               0xa458
-#define GlintLight10SpotlightDirectionYTag            0x048b
-#define GlintLight10SpotlightDirectionYReg                 1
-#define GlintLight10SpotlightDirectionYOff            0x9458
-
-#define GlintLight10SpotlightDirectionZ               0xa460
-#define GlintLight10SpotlightDirectionZTag            0x048c
-#define GlintLight10SpotlightDirectionZReg                 1
-#define GlintLight10SpotlightDirectionZOff            0x9460
-
-#define GlintLight10SpotlightExponent                 0xa468
-#define GlintLight10SpotlightExponentTag              0x048d
-#define GlintLight10SpotlightExponentReg                   1
-#define GlintLight10SpotlightExponentOff              0x9468
-
-#define GlintLight10CosSpotlightCutoffAngle           0xa470
-#define GlintLight10CosSpotlightCutoffAngleTag        0x048e
-#define GlintLight10CosSpotlightCutoffAngleReg             1
-#define GlintLight10CosSpotlightCutoffAngleOff        0x9470
-
-#define GlintLight10ConstantAttenuation               0xa478
-#define GlintLight10ConstantAttenuationTag            0x048f
-#define GlintLight10ConstantAttenuationReg                 1
-#define GlintLight10ConstantAttenuationOff            0x9478
-
-#define GlintLight10LinearAttenuation                 0xa480
-#define GlintLight10LinearAttenuationTag              0x0490
-#define GlintLight10LinearAttenuationReg                   1
-#define GlintLight10LinearAttenuationOff              0x9480
-
-#define GlintLight10QuadraticAttenuation              0xa488
-#define GlintLight10QuadraticAttenuationTag           0x0491
-#define GlintLight10QuadraticAttenuationReg                1
-#define GlintLight10QuadraticAttenuationOff           0x9488
-
-#define GlintLight11Mode                              0xa490
-#define GlintLight11ModeTag                           0x0492
-#define GlintLight11ModeReg                                1
-#define GlintLight11ModeOff                           0x9490
-
-#define GlintLight11AmbientIntensiveRed               0xa498
-#define GlintLight11AmbientIntensiveRedTag            0x0493
-#define GlintLight11AmbientIntensiveRedReg                 1
-#define GlintLight11AmbientIntensiveRedOff            0x9498
-
-#define GlintLight11AmbientIntensityGreen             0xa4a0
-#define GlintLight11AmbientIntensityGreenTag          0x0494
-#define GlintLight11AmbientIntensityGreenReg               1
-#define GlintLight11AmbientIntensityGreenOff          0x94a0
-
-#define GlintLight11AmbientIntensityBlue              0xa4a8
-#define GlintLight11AmbientIntensityBlueTag           0x0495
-#define GlintLight11AmbientIntensityBlueReg                1
-#define GlintLight11AmbientIntensityBlueOff           0x94a8
-
-#define GlintLight11DiffuseIntensityRed               0xa4b0
-#define GlintLight11DiffuseIntensityRedTag            0x0496
-#define GlintLight11DiffuseIntensityRedReg                 1
-#define GlintLight11DiffuseIntensityRedOff            0x94b0
-
-#define GlintLight11DiffuseIntensityGreen             0xa4b8
-#define GlintLight11DiffuseIntensityGreenTag          0x0497
-#define GlintLight11DiffuseIntensityGreenReg               1
-#define GlintLight11DiffuseIntensityGreenOff          0x94b8
-
-#define GlintLight11DiffuseIntensityBlue              0xa4c0
-#define GlintLight11DiffuseIntensityBlueTag           0x0498
-#define GlintLight11DiffuseIntensityBlueReg                1
-#define GlintLight11DiffuseIntensityBlueOff           0x94c0
-
-#define GlintLight11SpecularIntensityRed              0xa4c8
-#define GlintLight11SpecularIntensityRedTag           0x0499
-#define GlintLight11SpecularIntensityRedReg                1
-#define GlintLight11SpecularIntensityRedOff           0x94c8
-
-#define GlintLight11SpecularIntensityGreen            0xa4d0
-#define GlintLight11SpecularIntensityGreenTag         0x049a
-#define GlintLight11SpecularIntensityGreenReg              1
-#define GlintLight11SpecularIntensityGreenOff         0x94d0
-
-#define GlintLight11SpecularIntensityBlue             0xa4d8
-#define GlintLight11SpecularIntensityBlueTag          0x049b
-#define GlintLight11SpecularIntensityBlueReg               1
-#define GlintLight11SpecularIntensityBlueOff          0x94d8
-
-#define GlintLight11PositionX                         0xa4e0
-#define GlintLight11PositionXTag                      0x049c
-#define GlintLight11PositionXReg                           1
-#define GlintLight11PositionXOff                      0x94e0
-
-#define GlintLight11PositionY                         0xa4e8
-#define GlintLight11PositionYTag                      0x049d
-#define GlintLight11PositionYReg                           1
-#define GlintLight11PositionYOff                      0x94e8
-
-#define GlintLight11PositionZ                         0xa4f0
-#define GlintLight11PositionZTag                      0x049e
-#define GlintLight11PositionZReg                           1
-#define GlintLight11PositionZOff                      0x94f0
-
-#define GlintLight11PositionW                         0xa4f8
-#define GlintLight11PositionWTag                      0x049f
-#define GlintLight11PositionWReg                           1
-#define GlintLight11PositionWOff                      0x94f8
-
-#define GlintLight11SpotlightDirectionX               0xa500
-#define GlintLight11SpotlightDirectionXTag            0x04a0
-#define GlintLight11SpotlightDirectionXReg                 1
-#define GlintLight11SpotlightDirectionXOff            0x9500
-
-#define GlintLight11SpotlightDirectionY               0xa508
-#define GlintLight11SpotlightDirectionYTag            0x04a1
-#define GlintLight11SpotlightDirectionYReg                 1
-#define GlintLight11SpotlightDirectionYOff            0x9508
-
-#define GlintLight11SpotlightDirectionZ               0xa510
-#define GlintLight11SpotlightDirectionZTag            0x04a2
-#define GlintLight11SpotlightDirectionZReg                 1
-#define GlintLight11SpotlightDirectionZOff            0x9510
-
-#define GlintLight11SpotlightExponent                 0xa518
-#define GlintLight11SpotlightExponentTag              0x04a3
-#define GlintLight11SpotlightExponentReg                   1
-#define GlintLight11SpotlightExponentOff              0x9518
-
-#define GlintLight11CosSpotlightCutoffAngle           0xa520
-#define GlintLight11CosSpotlightCutoffAngleTag        0x04a4
-#define GlintLight11CosSpotlightCutoffAngleReg             1
-#define GlintLight11CosSpotlightCutoffAngleOff        0x9520
-
-#define GlintLight11ConstantAttenuation               0xa528
-#define GlintLight11ConstantAttenuationTag            0x04a5
-#define GlintLight11ConstantAttenuationReg                 1
-#define GlintLight11ConstantAttenuationOff            0x9528
-
-#define GlintLight11LinearAttenuation                 0xa530
-#define GlintLight11LinearAttenuationTag              0x04a6
-#define GlintLight11LinearAttenuationReg                   1
-#define GlintLight11LinearAttenuationOff              0x9530
-
-#define GlintLight11QuadraticAttenuation              0xa538
-#define GlintLight11QuadraticAttenuationTag           0x04a7
-#define GlintLight11QuadraticAttenuationReg                1
-#define GlintLight11QuadraticAttenuationOff           0x9538
-
-#define GlintLight12Mode                              0xa540
-#define GlintLight12ModeTag                           0x04a8
-#define GlintLight12ModeReg                                1
-#define GlintLight12ModeOff                           0x9540
-
-#define GlintLight12AmbientIntensityRed               0xa548
-#define GlintLight12AmbientIntensityRedTag            0x04a9
-#define GlintLight12AmbientIntensityRedReg                 1
-#define GlintLight12AmbientIntensityRedOff            0x9548
-
-#define GlintLight12AmbientIntensityGreen             0xa550
-#define GlintLight12AmbientIntensityGreenTag          0x04aa
-#define GlintLight12AmbientIntensityGreenReg               1
-#define GlintLight12AmbientIntensityGreenOff          0x9550
-
-#define GlintLight12AmbientIntensityBlue              0xa558
-#define GlintLight12AmbientIntensityBlueTag           0x04ab
-#define GlintLight12AmbientIntensityBlueReg                1
-#define GlintLight12AmbientIntensityBlueOff           0x9558
-
-#define GlintLight12DiffuseIntensityRed               0xa560
-#define GlintLight12DiffuseIntensityRedTag            0x04ac
-#define GlintLight12DiffuseIntensityRedReg                 1
-#define GlintLight12DiffuseIntensityRedOff            0x9560
-
-#define GlintLight12DiffuseIntensityGreen             0xa568
-#define GlintLight12DiffuseIntensityGreenTag          0x04ad
-#define GlintLight12DiffuseIntensityGreenReg               1
-#define GlintLight12DiffuseIntensityGreenOff          0x9568
-
-#define GlintLight12DiffuseIntensityBlue              0xa570
-#define GlintLight12DiffuseIntensityBlueTag           0x04ae
-#define GlintLight12DiffuseIntensityBlueReg                1
-#define GlintLight12DiffuseIntensityBlueOff           0x9570
-
-#define GlintLight12SpecularIntensityRed              0xa578
-#define GlintLight12SpecularIntensityRedTag           0x04af
-#define GlintLight12SpecularIntensityRedReg                1
-#define GlintLight12SpecularIntensityRedOff           0x9578
-
-#define GlintLight12SpecularIntensityGreen            0xa580
-#define GlintLight12SpecularIntensityGreenTag         0x04b0
-#define GlintLight12SpecularIntensityGreenReg              1
-#define GlintLight12SpecularIntensityGreenOff         0x9580
-
-#define GlintLight12SpecularIntensityBlue             0xa588
-#define GlintLight12SpecularIntensityBlueTag          0x04b1
-#define GlintLight12SpecularIntensityBlueReg               1
-#define GlintLight12SpecularIntensityBlueOff          0x9588
-
-#define GlintLight12PositionX                         0xa590
-#define GlintLight12PositionXTag                      0x04b2
-#define GlintLight12PositionXReg                           1
-#define GlintLight12PositionXOff                      0x9590
-
-#define GlintLight12PositionY                         0xa598
-#define GlintLight12PositionYTag                      0x04b3
-#define GlintLight12PositionYReg                           1
-#define GlintLight12PositionYOff                      0x9598
-
-#define GlintLight12PositionZ                         0xa5a0
-#define GlintLight12PositionZTag                      0x04b4
-#define GlintLight12PositionZReg                           1
-#define GlintLight12PositionZOff                      0x95a0
-
-#define GlintLight12PositionW                         0xa5a8
-#define GlintLight12PositionWTag                      0x04b5
-#define GlintLight12PositionWReg                           1
-#define GlintLight12PositionWOff                      0x95a8
-
-#define GlintLight12SpotlightDirectionX               0xa5b0
-#define GlintLight12SpotlightDirectionXTag            0x04b6
-#define GlintLight12SpotlightDirectionXReg                 1
-#define GlintLight12SpotlightDirectionXOff            0x95b0
-
-#define GlintLight12SpotlightDirectionY               0xa5b8
-#define GlintLight12SpotlightDirectionYTag            0x04b7
-#define GlintLight12SpotlightDirectionYReg                 1
-#define GlintLight12SpotlightDirectionYOff            0x95b8
-
-#define GlintLight12SpotlightDirectionZ               0xa5c0
-#define GlintLight12SpotlightDirectionZTag            0x04b8
-#define GlintLight12SpotlightDirectionZReg                 1
-#define GlintLight12SpotlightDirectionZOff            0x95c0
-
-#define GlintLight12SpotlightExponent                 0xa5c8
-#define GlintLight12SpotlightExponentTag              0x04b9
-#define GlintLight12SpotlightExponentReg                   1
-#define GlintLight12SpotlightExponentOff              0x95c8
-
-#define GlintLight12CosSpotlightCutoffAngle           0xa5d0
-#define GlintLight12CosSpotlightCutoffAngleTag        0x04ba
-#define GlintLight12CosSpotlightCutoffAngleReg             1
-#define GlintLight12CosSpotlightCutoffAngleOff        0x95d0
-
-#define GlintLight12ConstantAttenuation               0xa5d8
-#define GlintLight12ConstantAttenuationTag            0x04bb
-#define GlintLight12ConstantAttenuationReg                 1
-#define GlintLight12ConstantAttenuationOff            0x95d8
-
-#define GlintLight12LinearAttenuation                 0xa5e0
-#define GlintLight12LinearAttenuationTag              0x04bc
-#define GlintLight12LinearAttenuationReg                   1
-#define GlintLight12LinearAttenuationOff              0x95e0
-
-#define GlintLight12QuadraticAttenuation              0xa5e8
-#define GlintLight12QuadraticAttenuationTag           0x04bd
-#define GlintLight12QuadraticAttenuationReg                1
-#define GlintLight12QuadraticAttenuationOff           0x95e8
-
-#define GlintLight13Mode                              0xa5f0
-#define GlintLight13ModeTag                           0x04be
-#define GlintLight13ModeReg                                1
-#define GlintLight13ModeOff                           0x95f0
-
-#define GlintLight13AmbientIntensityRed               0xa5f8
-#define GlintLight13AmbientIntensityRedTag            0x04bf
-#define GlintLight13AmbientIntensityRedReg                 1
-#define GlintLight13AmbientIntensityRedOff            0x95f8
-
-#define GlintLight13AmbientIntensityGreen             0xa600
-#define GlintLight13AmbientIntensityGreenTag          0x04c0
-#define GlintLight13AmbientIntensityGreenReg               1
-#define GlintLight13AmbientIntensityGreenOff          0x9600
-
-#define GlintLight13AmbientIntensityBlue              0xa608
-#define GlintLight13AmbientIntensityBlueTag           0x04c1
-#define GlintLight13AmbientIntensityBlueReg                1
-#define GlintLight13AmbientIntensityBlueOff           0x9608
-
-#define GlintLight13DiffuseIntensityRed               0xa610
-#define GlintLight13DiffuseIntensityRedTag            0x04c2
-#define GlintLight13DiffuseIntensityRedReg                 1
-#define GlintLight13DiffuseIntensityRedOff            0x9610
-
-#define GlintLight13DiffuseIntensityGreen             0xa618
-#define GlintLight13DiffuseIntensityGreenTag          0x04c3
-#define GlintLight13DiffuseIntensityGreenReg               1
-#define GlintLight13DiffuseIntensityGreenOff          0x9618
-
-#define GlintLight13DiffuseIntensityBlue              0xa620
-#define GlintLight13DiffuseIntensityBlueTag           0x04c4
-#define GlintLight13DiffuseIntensityBlueReg                1
-#define GlintLight13DiffuseIntensityBlueOff           0x9620
-
-#define GlintLight13SpecularIntensityRed              0xa628
-#define GlintLight13SpecularIntensityRedTag           0x04c5
-#define GlintLight13SpecularIntensityRedReg                1
-#define GlintLight13SpecularIntensityRedOff           0x9628
-
-#define GlintLight13SpecularIntensityGreen            0xa630
-#define GlintLight13SpecularIntensityGreenTag         0x04c6
-#define GlintLight13SpecularIntensityGreenReg              1
-#define GlintLight13SpecularIntensityGreenOff         0x9630
-
-#define GlintLight13SpecularIntensityBlue             0xa638
-#define GlintLight13SpecularIntensityBlueTag          0x04c7
-#define GlintLight13SpecularIntensityBlueReg               1
-#define GlintLight13SpecularIntensityBlueOff          0x9638
-
-#define GlintLight13PositionX                         0xa640
-#define GlintLight13PositionXTag                      0x04c8
-#define GlintLight13PositionXReg                           1
-#define GlintLight13PositionXOff                      0x9640
-
-#define GlintLight13PositionY                         0xa648
-#define GlintLight13PositionYTag                      0x04c9
-#define GlintLight13PositionYReg                           1
-#define GlintLight13PositionYOff                      0x9648
-
-#define GlintLight13PositionZ                         0xa650
-#define GlintLight13PositionZTag                      0x04ca
-#define GlintLight13PositionZReg                           1
-#define GlintLight13PositionZOff                      0x9650
-
-#define GlintLight13PositionW                         0xa658
-#define GlintLight13PositionWTag                      0x04cb
-#define GlintLight13PositionWReg                           1
-#define GlintLight13PositionWOff                      0x9658
-
-#define GlintLight13SpotlightDirectionX               0xa660
-#define GlintLight13SpotlightDirectionXTag            0x04cc
-#define GlintLight13SpotlightDirectionXReg                 1
-#define GlintLight13SpotlightDirectionXOff            0x9660
-
-#define GlintLight13SpotlightDirectionY               0xa668
-#define GlintLight13SpotlightDirectionYTag            0x04cd
-#define GlintLight13SpotlightDirectionYReg                 1
-#define GlintLight13SpotlightDirectionYOff            0x9668
-
-#define GlintLight13SpotlightDirectionZ               0xa670
-#define GlintLight13SpotlightDirectionZTag            0x04ce
-#define GlintLight13SpotlightDirectionZReg                 1
-#define GlintLight13SpotlightDirectionZOff            0x9670
-
-#define GlintLight13SpotlightExponent                 0xa678
-#define GlintLight13SpotlightExponentTag              0x04cf
-#define GlintLight13SpotlightExponentReg                   1
-#define GlintLight13SpotlightExponentOff              0x9678
-
-#define GlintLight13CosSpotlightCutoffAngle           0xa680
-#define GlintLight13CosSpotlightCutoffAngleTag        0x04d0
-#define GlintLight13CosSpotlightCutoffAngleReg             1
-#define GlintLight13CosSpotlightCutoffAngleOff        0x9680
-
-#define GlintLight13ConstantAttenuation               0xa688
-#define GlintLight13ConstantAttenuationTag            0x04d1
-#define GlintLight13ConstantAttenuationReg                 1
-#define GlintLight13ConstantAttenuationOff            0x9688
-
-#define GlintLight13LinearAttenuation                 0xa690
-#define GlintLight13LinearAttenuationTag              0x04d2
-#define GlintLight13LinearAttenuationReg                   1
-#define GlintLight13LinearAttenuationOff              0x9690
-
-#define GlintLight13QuadraticAttenuation              0xa698
-#define GlintLight13QuadraticAttenuationTag           0x04d3
-#define GlintLight13QuadraticAttenuationReg                1
-#define GlintLight13QuadraticAttenuationOff           0x9698
-
-#define GlintLight14Mode                              0xa6a0
-#define GlintLight14ModeTag                           0x04d4
-#define GlintLight14ModeReg                                1
-#define GlintLight14ModeOff                           0x96a0
-
-#define GlintLight14AmbientIntensityRed               0xa6a8
-#define GlintLight14AmbientIntensityRedTag            0x04d5
-#define GlintLight14AmbientIntensityRedReg                 1
-#define GlintLight14AmbientIntensityRedOff            0x96a8
-
-#define GlintLight14AmbientIntensityGreen             0xa6b0
-#define GlintLight14AmbientIntensityGreenTag          0x04d6
-#define GlintLight14AmbientIntensityGreenReg               1
-#define GlintLight14AmbientIntensityGreenOff          0x96b0
-
-#define GlintLight14AmbientIntensityBlue              0xa6b8
-#define GlintLight14AmbientIntensityBlueTag           0x04d7
-#define GlintLight14AmbientIntensityBlueReg                1
-#define GlintLight14AmbientIntensityBlueOff           0x96b8
-
-#define GlintLight14DiffuseIntensityRed               0xa6c0
-#define GlintLight14DiffuseIntensityRedTag            0x04d8
-#define GlintLight14DiffuseIntensityRedReg                 1
-#define GlintLight14DiffuseIntensityRedOff            0x96c0
-
-#define GlintLight14DiffuseIntensityGreen             0xa6c8
-#define GlintLight14DiffuseIntensityGreenTag          0x04d9
-#define GlintLight14DiffuseIntensityGreenReg               1
-#define GlintLight14DiffuseIntensityGreenOff          0x96c8
-
-#define GlintLight14DiffuseIntensityBlue              0xa6d0
-#define GlintLight14DiffuseIntensityBlueTag           0x04da
-#define GlintLight14DiffuseIntensityBlueReg                1
-#define GlintLight14DiffuseIntensityBlueOff           0x96d0
-
-#define GlintLight14SpecularIntensityRed              0xa6d8
-#define GlintLight14SpecularIntensityRedTag           0x04db
-#define GlintLight14SpecularIntensityRedReg                1
-#define GlintLight14SpecularIntensityRedOff           0x96d8
-
-#define GlintLight14SpecularIntensityGreen            0xa6e0
-#define GlintLight14SpecularIntensityGreenTag         0x04dc
-#define GlintLight14SpecularIntensityGreenReg              1
-#define GlintLight14SpecularIntensityGreenOff         0x96e0
-
-#define GlintLight14SpecularIntensityBlue             0xa6e8
-#define GlintLight14SpecularIntensityBlueTag          0x04dd
-#define GlintLight14SpecularIntensityBlueReg               1
-#define GlintLight14SpecularIntensityBlueOff          0x96e8
-
-#define GlintLight14PositionX                         0xa6f0
-#define GlintLight14PositionXTag                      0x04de
-#define GlintLight14PositionXReg                           1
-#define GlintLight14PositionXOff                      0x96f0
-
-#define GlintLight14PositionY                         0xa6f8
-#define GlintLight14PositionYTag                      0x04df
-#define GlintLight14PositionYReg                           1
-#define GlintLight14PositionYOff                      0x96f8
-
-#define GlintLight14PositionZ                         0xa700
-#define GlintLight14PositionZTag                      0x04e0
-#define GlintLight14PositionZReg                           1
-#define GlintLight14PositionZOff                      0x9700
-
-#define GlintLight14PositionW                         0xa708
-#define GlintLight14PositionWTag                      0x04e1
-#define GlintLight14PositionWReg                           1
-#define GlintLight14PositionWOff                      0x9708
-
-#define GlintLight14SpotlightDirectionX               0xa710
-#define GlintLight14SpotlightDirectionXTag            0x04e2
-#define GlintLight14SpotlightDirectionXReg                 1
-#define GlintLight14SpotlightDirectionXOff            0x9710
-
-#define GlintLight14SpotlightDirectionY               0xa718
-#define GlintLight14SpotlightDirectionYTag            0x04e3
-#define GlintLight14SpotlightDirectionYReg                 1
-#define GlintLight14SpotlightDirectionYOff            0x9718
-
-#define GlintLight14SpotlightDirectionZ               0xa720
-#define GlintLight14SpotlightDirectionZTag            0x04e4
-#define GlintLight14SpotlightDirectionZReg                 1
-#define GlintLight14SpotlightDirectionZOff            0x9720
-
-#define GlintLight14SpotlightExponent                 0xa728
-#define GlintLight14SpotlightExponentTag              0x04e5
-#define GlintLight14SpotlightExponentReg                   1
-#define GlintLight14SpotlightExponentOff              0x9728
-
-#define GlintLight14CosSpotlightCutoffAngle           0xa730
-#define GlintLight14CosSpotlightCutoffAngleTag        0x04e6
-#define GlintLight14CosSpotlightCutoffAngleReg             1
-#define GlintLight14CosSpotlightCutoffAngleOff        0x9730
-
-#define GlintLight14ConstantAttenuation               0xa738
-#define GlintLight14ConstantAttenuationTag            0x04e7
-#define GlintLight14ConstantAttenuationReg                 1
-#define GlintLight14ConstantAttenuationOff            0x9738
-
-#define GlintLight14LinearAttenuation                 0xa740
-#define GlintLight14LinearAttenuationTag              0x04e8
-#define GlintLight14LinearAttenuationReg                   1
-#define GlintLight14LinearAttenuationOff              0x9740
-
-#define GlintLight14QuadraticAttenuation              0xa748
-#define GlintLight14QuadraticAttenuationTag           0x04e9
-#define GlintLight14QuadraticAttenuationReg                1
-#define GlintLight14QuadraticAttenuationOff           0x9748
-
-#define GlintLight15Mode                              0xa750
-#define GlintLight15ModeTag                           0x04ea
-#define GlintLight15ModeReg                                1
-#define GlintLight15ModeOff                           0x9750
-
-#define GlintLight15AmbientIntensityRed               0xa758
-#define GlintLight15AmbientIntensityRedTag            0x04eb
-#define GlintLight15AmbientIntensityRedReg                 1
-#define GlintLight15AmbientIntensityRedOff            0x9758
-
-#define GlintLight15AmbientIntensityGreen             0xa760
-#define GlintLight15AmbientIntensityGreenTag          0x04ec
-#define GlintLight15AmbientIntensityGreenReg               1
-#define GlintLight15AmbientIntensityGreenOff          0x9760
-
-#define GlintLight15AmbientIntensityBlue              0xa768
-#define GlintLight15AmbientIntensityBlueTag           0x04ed
-#define GlintLight15AmbientIntensityBlueReg                1
-#define GlintLight15AmbientIntensityBlueOff           0x9768
-
-#define GlintLight15DiffuseIntensityRed               0xa770
-#define GlintLight15DiffuseIntensityRedTag            0x04ee
-#define GlintLight15DiffuseIntensityRedReg                 1
-#define GlintLight15DiffuseIntensityRedOff            0x9770
-
-#define GlintLight15DiffuseIntensityGreen             0xa778
-#define GlintLight15DiffuseIntensityGreenTag          0x04ef
-#define GlintLight15DiffuseIntensityGreenReg               1
-#define GlintLight15DiffuseIntensityGreenOff          0x9778
-
-#define GlintLight15DiffuseIntensityBlue              0xa780
-#define GlintLight15DiffuseIntensityBlueTag           0x04f0
-#define GlintLight15DiffuseIntensityBlueReg                1
-#define GlintLight15DiffuseIntensityBlueOff           0x9780
-
-#define GlintLight15SpecularIntensityRed              0xa788
-#define GlintLight15SpecularIntensityRedTag           0x04f1
-#define GlintLight15SpecularIntensityRedReg                1
-#define GlintLight15SpecularIntensityRedOff           0x9788
-
-#define GlintLight15SpecularIntensityGreen            0xa790
-#define GlintLight15SpecularIntensityGreenTag         0x04f2
-#define GlintLight15SpecularIntensityGreenReg              1
-#define GlintLight15SpecularIntensityGreenOff         0x9790
-
-#define GlintLight15SpecularIntensityBlue             0xa798
-#define GlintLight15SpecularIntensityBlueTag          0x04f3
-#define GlintLight15SpecularIntensityBlueReg               1
-#define GlintLight15SpecularIntensityBlueOff          0x9798
-
-#define GlintLight15PositionX                         0xa7a0
-#define GlintLight15PositionXTag                      0x04f4
-#define GlintLight15PositionXReg                           1
-#define GlintLight15PositionXOff                      0x97a0
-
-#define GlintLight15PositionY                         0xa7a8
-#define GlintLight15PositionYTag                      0x04f5
-#define GlintLight15PositionYReg                           1
-#define GlintLight15PositionYOff                      0x97a8
-
-#define GlintLight15PositionZ                         0xa7b0
-#define GlintLight15PositionZTag                      0x04f6
-#define GlintLight15PositionZReg                           1
-#define GlintLight15PositionZOff                      0x97b0
-
-#define GlintLight15PositionW                         0xa7b8
-#define GlintLight15PositionWTag                      0x04f7
-#define GlintLight15PositionWReg                           1
-#define GlintLight15PositionWOff                      0x97b8
-
-#define GlintLight15SpotlightDirectionX               0xa7c0
-#define GlintLight15SpotlightDirectionXTag            0x04f8
-#define GlintLight15SpotlightDirectionXReg                 1
-#define GlintLight15SpotlightDirectionXOff            0x97c0
-
-#define GlintLight15SpotlightDirectionY               0xa7c8
-#define GlintLight15SpotlightDirectionYTag            0x04f9
-#define GlintLight15SpotlightDirectionYReg                 1
-#define GlintLight15SpotlightDirectionYOff            0x97c8
-
-#define GlintLight15SpotlightDirectionZ               0xa7d0
-#define GlintLight15SpotlightDirectionZTag            0x04fa
-#define GlintLight15SpotlightDirectionZReg                 1
-#define GlintLight15SpotlightDirectionZOff            0x97d0
-
-#define GlintLight15SpotlightExponent                 0xa7d8
-#define GlintLight15SpotlightExponentTag              0x04fb
-#define GlintLight15SpotlightExponentReg                   1
-#define GlintLight15SpotlightExponentOff              0x97d8
-
-#define GlintLight15CosSpotlightCutoffAngle           0xa7e0
-#define GlintLight15CosSpotlightCutoffAngleTag        0x04fc
-#define GlintLight15CosSpotlightCutoffAngleReg             1
-#define GlintLight15CosSpotlightCutoffAngleOff        0x97e0
-
-#define GlintLight15ConstantAttenuation               0xa7e8
-#define GlintLight15ConstantAttenuationTag            0x04fd
-#define GlintLight15ConstantAttenuationReg                 1
-#define GlintLight15ConstantAttenuationOff            0x97e8
-
-#define GlintLight15LinearAttenuation                 0xa7f0
-#define GlintLight15LinearAttenuationTag              0x04fe
-#define GlintLight15LinearAttenuationReg                   1
-#define GlintLight15LinearAttenuationOff              0x97f0
-
-#define GlintLight15QuadraticAttenuation              0xa7f8
-#define GlintLight15QuadraticAttenuationTag           0x04ff
-#define GlintLight15QuadraticAttenuationReg                1
-#define GlintLight15QuadraticAttenuationOff           0x97f8
-
-#define GlintSceneAmbientColorRed                     0xa800
-#define GlintSceneAmbientColorRedTag                  0x0500
-#define GlintSceneAmbientColorRedReg                       1
-#define GlintSceneAmbientColorRedOff                  0x9800
-
-#define GlintSceneAmbientColorGreen                   0xa808
-#define GlintSceneAmbientColorGreenTag                0x0501
-#define GlintSceneAmbientColorGreenReg                     1
-#define GlintSceneAmbientColorGreenOff                0x9808
-
-#define GlintSceneAmbientColorBlue                    0xa810
-#define GlintSceneAmbientColorBlueTag                 0x0502
-#define GlintSceneAmbientColorBlueReg                      1
-#define GlintSceneAmbientColorBlueOff                 0x9810
-
-#define GlintFrontAmbientColorRed                     0xa880
-#define GlintFrontAmbientColorRedTag                  0x0510
-#define GlintFrontAmbientColorRedReg                       1
-#define GlintFrontAmbientColorRedOff                  0x9880
-
-#define GlintFrontAmbientColorGreen                   0xa888
-#define GlintFrontAmbientColorGreenTag                0x0511
-#define GlintFrontAmbientColorGreenReg                     1
-#define GlintFrontAmbientColorGreenOff                0x9888
-
-#define GlintFrontAmbientColorBlue                    0xa890
-#define GlintFrontAmbientColorBlueTag                 0x0512
-#define GlintFrontAmbientColorBlueReg                      1
-#define GlintFrontAmbientColorBlueOff                 0x9890
-
-#define GlintFrontDiffuseColorRed                     0xa898
-#define GlintFrontDiffuseColorRedTag                  0x0513
-#define GlintFrontDiffuseColorRedReg                       1
-#define GlintFrontDiffuseColorRedOff                  0x9898
-
-#define GlintFrontDiffuseColorGreen                   0xa8a0
-#define GlintFrontDiffuseColorGreenTag                0x0514
-#define GlintFrontDiffuseColorGreenReg                     1
-#define GlintFrontDiffuseColorGreenOff                0x98a0
-
-#define GlintFrontDiffuseColorBlue                    0xa8a8
-#define GlintFrontDiffuseColorBlueTag                 0x0515
-#define GlintFrontDiffuseColorBlueReg                      1
-#define GlintFrontDiffuseColorBlueOff                 0x98a8
-
-#define GlintFrontAlpha                               0xa8b0
-#define GlintFrontAlphaTag                            0x0516
-#define GlintFrontAlphaReg                                 1
-#define GlintFrontAlphaOff                            0x98b0
-
-#define GlintFrontSpecularColorRed                    0xa8b8
-#define GlintFrontSpecularColorRedTag                 0x0517
-#define GlintFrontSpecularColorRedReg                      1
-#define GlintFrontSpecularColorRedOff                 0x98b8
-
-#define GlintFrontSpecularColorGreen                  0xa8c0
-#define GlintFrontSpecularColorGreenTag               0x0518
-#define GlintFrontSpecularColorGreenReg                    1
-#define GlintFrontSpecularColorGreenOff               0x98c0
-
-#define GlintFrontSpecularColorBlue                   0xa8c8
-#define GlintFrontSpecularColorBlueTag                0x0519
-#define GlintFrontSpecularColorBlueReg                     1
-#define GlintFrontSpecularColorBlueOff                0x98c8
-
-#define GlintFrontEmissiveColorRed                    0xa8d0
-#define GlintFrontEmissiveColorRedTag                 0x051a
-#define GlintFrontEmissiveColorRedReg                      1
-#define GlintFrontEmissiveColorRedOff                 0x98d0
-
-#define GlintFrontEmissiveColorGreen                  0xa8d8
-#define GlintFrontEmissiveColorGreenTag               0x051b
-#define GlintFrontEmissiveColorGreenReg                    1
-#define GlintFrontEmissiveColorGreenOff               0x98d8
-
-#define GlintFrontEmissiveColorBlue                   0xa8e0
-#define GlintFrontEmissiveColorBlueTag                0x051c
-#define GlintFrontEmissiveColorBlueReg                     1
-#define GlintFrontEmissiveColorBlueOff                0x98e0
-
-#define GlintFrontSpecularExponent                    0xa8e8
-#define GlintFrontSpecularExponentTag                 0x051d
-#define GlintFrontSpecularExponentReg                      1
-#define GlintFrontSpecularExponentOff                 0x98e8
-
-#define GlintBackAmbientColorRed                      0xa900
-#define GlintBackAmbientColorRedTag                   0x0520
-#define GlintBackAmbientColorRedReg                        1
-#define GlintBackAmbientColorRedOff                   0x9900
-
-#define GlintBackAmbientColorGreen                    0xa908
-#define GlintBackAmbientColorGreenTag                 0x0521
-#define GlintBackAmbientColorGreenReg                      1
-#define GlintBackAmbientColorGreenOff                 0x9908
-
-#define GlintBackAmbientColorBlue                     0xa910
-#define GlintBackAmbientColorBlueTag                  0x0522
-#define GlintBackAmbientColorBlueReg                       1
-#define GlintBackAmbientColorBlueOff                  0x9910
-
-#define GlintBackDiffuseColorRed                      0xa918
-#define GlintBackDiffuseColorRedTag                   0x0523
-#define GlintBackDiffuseColorRedReg                        1
-#define GlintBackDiffuseColorRedOff                   0x9918
-
-#define GlintBackDiffuseColorGreen                    0xa920
-#define GlintBackDiffuseColorGreenTag                 0x0524
-#define GlintBackDiffuseColorGreenReg                      1
-#define GlintBackDiffuseColorGreenOff                 0x9920
-
-#define GlintBackDiffuseColorBlue                     0xa928
-#define GlintBackDiffuseColorBlueTag                  0x0525
-#define GlintBackDiffuseColorBlueReg                       1
-#define GlintBackDiffuseColorBlueOff                  0x9928
-
-#define GlintBackAlpha                                0xa930
-#define GlintBackAlphaTag                             0x0526
-#define GlintBackAlphaReg                                  1
-#define GlintBackAlphaOff                             0x9930
-
-#define GlintBackSpecularColorRed                     0xa938
-#define GlintBackSpecularColorRedTag                  0x0527
-#define GlintBackSpecularColorRedReg                       1
-#define GlintBackSpecularColorRedOff                  0x9938
-
-#define GlintBackSpecularColorGreen                   0xa940
-#define GlintBackSpecularColorGreenTag                0x0528
-#define GlintBackSpecularColorGreenReg                     1
-#define GlintBackSpecularColorGreenOff                0x9940
-
-#define GlintBackSpecularColorBlue                    0xa948
-#define GlintBackSpecularColorBlueTag                 0x0529
-#define GlintBackSpecularColorBlueReg                      1
-#define GlintBackSpecularColorBlueOff                 0x9948
-
-#define GlintBackEmissiveColorRed                     0xa950
-#define GlintBackEmissiveColorRedTag                  0x052a
-#define GlintBackEmissiveColorRedReg                       1
-#define GlintBackEmissiveColorRedOff                  0x9950
-
-#define GlintBackEmissiveColorGreen                   0xa958
-#define GlintBackEmissiveColorGreenTag                0x052b
-#define GlintBackEmissiveColorGreenReg                     1
-#define GlintBackEmissiveColorGreenOff                0x9958
-
-#define GlintBackEmissiveColorBlue                    0xa960
-#define GlintBackEmissiveColorBlueTag                 0x052c
-#define GlintBackEmissiveColorBlueReg                      1
-#define GlintBackEmissiveColorBlueOff                 0x9960
-
-#define GlintBackSpecularExponent                     0xa968
-#define GlintBackSpecularExponentTag                  0x052d
-#define GlintBackSpecularExponentReg                       1
-#define GlintBackSpecularExponentOff                  0x9968
-
-#define GlintDMAAddr                                  0xa980
-#define GlintDMAAddrTag                               0x0530
-#define GlintDMAAddrReg                                    1
-#define GlintDMAAddrOff                               0x9980
-
-#define GlintGammaDMACount                            0xa988
-#define GlintGammaDMACountTag                         0x0531
-#define GlintGammaDMACountReg                              1
-#define GlintGammaDMACountOff                         0x9988
-
-#define GlintCommandInterrupt                         0xa990
-#define GlintCommandInterruptTag                      0x0532
-#define GlintCommandInterruptReg                           1
-#define GlintCommandInterruptOff                      0x9990
-
-#define GlintDMACall                                  0xa998
-#define GlintDMACallTag                               0x0533
-#define GlintDMACallReg                                    1
-#define GlintDMACallOff                               0x9998
-
-#define GlintDMAReturn                                0xa9a0
-#define GlintDMAReturnTag                             0x0534
-#define GlintDMAReturnReg                                  1
-#define GlintDMAReturnOff                             0x99a0
-
-#define GlintDMARectangularRead                       0xa9a8
-#define GlintDMARectangularReadTag                    0x0535
-#define GlintDMARectangularReadReg                         1
-#define GlintDMARectangularReadOff                    0x99a8
-
-#define GlintDMARectangleReadAddress                  0xa9b0
-#define GlintDMARectangleReadAddressTag               0x0536
-#define GlintDMARectangleReadAddressReg                    1
-#define GlintDMARectangleReadAddressOff               0x99b0
-
-#define GlintDMARectangleReadLinePitch                0xa9b8
-#define GlintDMARectangleReadLinePitchTag             0x0537
-#define GlintDMARectangleReadLinePitchReg                  1
-#define GlintDMARectangleReadLinePitchOff             0x99b8
-
-#define GlintDMARectangleReadTarget                   0xa9c0
-#define GlintDMARectangleReadTargetTag                0x0538
-#define GlintDMARectangleReadTargetReg                     1
-#define GlintDMARectangleReadTargetOff                0x99c0
-
-#define GlintDMARectangleWrite                        0xa9c8
-#define GlintDMARectangleWriteTag                     0x0539
-#define GlintDMARectangleWriteReg                          1
-#define GlintDMARectangleWriteOff                     0x99c8
-
-#define GlintDMARectangleWriteAddress                 0xa9d0
-#define GlintDMARectangleWriteAddressTag              0x053a
-#define GlintDMARectangleWriteAddressReg                   1
-#define GlintDMARectangleWriteAddressOff              0x99d0
-
-#define GlintDMARectangleWriteLinePitch               0xa9d8
-#define GlintDMARectangleWriteLinePitchTag            0x053b
-#define GlintDMARectangleWriteLinePitchReg                 1
-#define GlintDMARectangleWriteLinePitchOff            0x99d8
-
-#define GlintDMAOutputAddress                         0xa9e0
-#define GlintDMAOutputAddressTag                      0x053c
-#define GlintDMAOutputAddressReg                           1
-#define GlintDMAOutputAddressOff                      0x99e0
-
-#define GlintDMAOutputCount                           0xa9e8
-#define GlintDMAOutputCountTag                        0x053d
-#define GlintDMAOutputCountReg                             1
-#define GlintDMAOutputCountOff                        0x99e8
-
-#define GlintDMAReadGLINTSource                       0xa9f0
-#define GlintDMAReadGLINTSourceTag                    0x053e
-#define GlintDMAReadGLINTSourceReg                         1
-#define GlintDMAReadGLINTSourceOff                    0x99f0
-
-#define GlintDMAFeedback                              0xaa10
-#define GlintDMAFeedbackTag                           0x0542
-#define GlintDMAFeedbackReg                                1
-#define GlintDMAFeedbackOff                           0x9a10
-
-#define GlintTransformModeAnd                         0xaa80
-#define GlintTransformModeAndTag                      0x0550
-#define GlintTransformModeAndReg                           1
-#define GlintTransformModeAndOff                      0x9a80
-
-#define GlintTransformModeOr                          0xaa88
-#define GlintTransformModeOrTag                       0x0551
-#define GlintTransformModeOrReg                            1
-#define GlintTransformModeOrOff                       0x9a88
-
-#define GlintGeometryModeAnd                          0xaa90
-#define GlintGeometryModeAndTag                       0x0552
-#define GlintGeometryModeAndReg                            1
-#define GlintGeometryModeAndOff                       0x9a90
-
-#define GlintGeometryModeOr                           0xaa98
-#define GlintGeometryModeOrTag                        0x0553
-#define GlintGeometryModeOrReg                             1
-#define GlintGeometryModeOrOff                        0x9a98
-
-#define GlintNormalizeModeAnd                         0xaaa0
-#define GlintNormalizeModeAndTag                      0x0554
-#define GlintNormalizeModeAndReg                           1
-#define GlintNormalizeModeAndOff                      0x9aa0
-
-#define GlintNormalizeModeOr                          0xaaa8
-#define GlintNormalizeModeOrTag                       0x0555
-#define GlintNormalizeModeOrReg                            1
-#define GlintNormalizeModeOrOff                       0x9aa8
-
-#define GlintLightingModeAnd                          0xaab0
-#define GlintLightingModeAndTag                       0x0556
-#define GlintLightingModeAndReg                            1
-#define GlintLightingModeAndOff                       0x9ab0
-
-#define GlintLightingModeOr                           0xaab8
-#define GlintLightingModeOrTag                        0x0557
-#define GlintLightingModeOrReg                             1
-#define GlintLightingModeOrOff                        0x9ab8
-
-#define GlintColorMaterialModeAnd                     0xaac0
-#define GlintColorMaterialModeAndTag                  0x0558
-#define GlintColorMaterialModeAndReg                       1
-#define GlintColorMaterialModeAndOff                  0x9ac0
-
-#define GlintColorMaterialModeOr                      0xaac8
-#define GlintColorMaterialModeOrTag                   0x0559
-#define GlintColorMaterialModeOrReg                        1
-#define GlintColorMaterialModeOrOff                   0x9ac8
-
-#define GlintDeltaModeAnd                             0xaad0
-#define GlintDeltaModeAndTag                          0x055a
-#define GlintDeltaModeAndReg                               1
-#define GlintDeltaModeAndOff                          0x9ad0
-
-#define GlintDeltaModeOr                              0xaad8
-#define GlintDeltaModeOrTag                           0x055b
-#define GlintDeltaModeOrReg                                1
-#define GlintDeltaModeOrOff                           0x9ad8
-
-#define GlintPointModeAnd                             0xaae0
-#define GlintPointModeAndTag                          0x055c
-#define GlintPointModeAndReg                               1
-#define GlintPointModeAndOff                          0x9ae0
-
-#define GlintPointModeOr                              0xaae8
-#define GlintPointModeOrTag                           0x055d
-#define GlintPointModeOrReg                                1
-#define GlintPointModeOrOff                           0x9ae8
-
-#define GlintLineModeAnd                              0xaaf0
-#define GlintLineModeAndTag                           0x055e
-#define GlintLineModeAndReg                                1
-#define GlintLineModeAndOff                           0x9af0
-
-#define GlintLineModeOr                               0xaaf8
-#define GlintLineModeOrTag                            0x055f
-#define GlintLineModeOrReg                                 1
-#define GlintLineModeOrOff                            0x9af8
-
-#define GlintTriangleModeAnd                          0xab00
-#define GlintTriangleModeAndTag                       0x0560
-#define GlintTriangleModeAndReg                            1
-#define GlintTriangleModeAndOff                       0x9b00
-
-#define GlintTriangleModeOr                           0xab08
-#define GlintTriangleModeOrTag                        0x0561
-#define GlintTriangleModeOrReg                             1
-#define GlintTriangleModeOrOff                        0x9b08
-
-#define GlintMaterialModeAnd                          0xab10
-#define GlintMaterialModeAndTag                       0x0562
-#define GlintMaterialModeAndReg                            1
-#define GlintMaterialModeAndOff                       0x9b10
-
-#define GlintMaterialModeOr                           0xab18
-#define GlintMaterialModeOrTag                        0x0563
-#define GlintMaterialModeOrReg                             1
-#define GlintMaterialModeOrOff                        0x9b18
-
-#define GlintWindowAnd                                0xab80
-#define GlintWindowAndTag                             0x0570
-#define GlintWindowAndReg                                  1
-#define GlintWindowAndOff                             0x9b80
-
-#define GlintWindowOr                                 0xab88
-#define GlintWindowOrTag                              0x0571
-#define GlintWindowOrReg                                   1
-#define GlintWindowOrOff                              0x9b88
-
-#define GlintLBReadModeAnd                            0xab90
-#define GlintLBReadModeAndTag                         0x0572
-#define GlintLBReadModeAndReg                              1
-#define GlintLBReadModeAndOff                         0x9b90
-
-#define GlintLBReadModeOr                             0xab98
-#define GlintLBReadModeOrTag                          0x0573
-#define GlintLBReadModeOrReg                               1
-#define GlintLBReadModeOrOff                          0x9b98
-#endif
diff --git a/src/mesa/drivers/dri/gamma/gamma_context.c b/src/mesa/drivers/dri/gamma/gamma_context.c
deleted file mode 100644
index 5e666c5c8c..0000000000
--- a/src/mesa/drivers/dri/gamma/gamma_context.c
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * Copyright 2001 by Alan Hourihane.
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Alan Hourihane not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission.  Alan Hourihane makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as is" without express or implied warranty.
- *
- * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * Authors:  Alan Hourihane, <alanh@tungstengraphics.com>
- *
- * 3DLabs Gamma driver.
- *
- */
-#include "gamma_context.h"
-
-#include "swrast/swrast.h"
-#include "swrast_setup/swrast_setup.h"
-#include "vbo/vbo.h"
-
-#include "tnl/tnl.h"
-#include "tnl/t_pipeline.h"
-
-#include "drivers/common/driverfuncs.h"
-
-#include "main/context.h"
-#include "main/simple_list.h"
-#include "main/imports.h"
-#include "main/matrix.h"
-#include "main/extensions.h"
-#if defined(USE_X86_ASM)
-#include "x86/common_x86_asm.h"
-#endif
-#include "main/simple_list.h"
-#include "main/mm.h"
-
-
-#include "gamma_vb.h"
-#include "gamma_tris.h"
-#include "gamma_macros.h"
-
-extern const struct tnl_pipeline_stage _gamma_render_stage;
-
-static const struct tnl_pipeline_stage *gamma_pipeline[] = {
-   &_tnl_vertex_transform_stage,
-   &_tnl_normal_transform_stage,
-   &_tnl_lighting_stage,
-   &_tnl_fog_coordinate_stage,
-   &_tnl_texgen_stage,
-   &_tnl_texture_transform_stage,
-				/* REMOVE: point attenuation stage */
-#if 1
-   &_gamma_render_stage,	/* ADD: unclipped rastersetup-to-dma */
-#endif
-   &_tnl_render_stage,
-   0,
-};
-
-GLboolean gammaCreateContext( const __GLcontextModes *glVisual,
-			     __DRIcontext *driContextPriv,
-                     	     void *sharedContextPrivate)
-{
-   GLcontext *ctx, *shareCtx;
-   __DRIscreen *sPriv = driContextPriv->driScreenPriv;
-   gammaContextPtr gmesa;
-   gammaScreenPtr gammascrn;
-   GLINTSAREADRIPtr saPriv=(GLINTSAREADRIPtr)(((char*)sPriv->pSAREA)+
-						 sizeof(drm_sarea_t));
-   struct dd_function_table functions;
-
-   gmesa = (gammaContextPtr) CALLOC( sizeof(*gmesa) );
-   if (!gmesa)
-      return GL_FALSE;
-
-   /* Init default driver functions then plug in our gamma-specific functions
-    * (the texture functions are especially important)
-    */
-   _mesa_init_driver_functions( &functions );
-   gammaDDInitTextureFuncs( &functions );
-
-   /* Allocate the Mesa context */
-   if (sharedContextPrivate)
-      shareCtx = ((gammaContextPtr) sharedContextPrivate)->glCtx;
-   else
-      shareCtx = NULL;
-
-   gmesa->glCtx = _mesa_create_context(glVisual, shareCtx,
-                                       &functions, (void *) gmesa);
-   if (!gmesa->glCtx) {
-      FREE(gmesa);
-      return GL_FALSE;
-   }
-
-   gmesa->driContext = driContextPriv;
-   gmesa->driScreen = sPriv;
-   gmesa->driDrawable = NULL; /* Set by XMesaMakeCurrent */
-
-   gmesa->hHWContext = driContextPriv->hHWContext;
-   gmesa->driHwLock = &sPriv->pSAREA->lock;
-   gmesa->driFd = sPriv->fd;
-   gmesa->sarea = saPriv;
-
-   gammascrn = gmesa->gammaScreen = (gammaScreenPtr)(sPriv->private);
-
-   ctx = gmesa->glCtx;
-
-   ctx->Const.MaxTextureLevels = GAMMA_TEX_MAXLEVELS;
-   ctx->Const.MaxTextureUnits = 1; /* Permedia 3 */
-   ctx->Const.MaxTextureImageUnits = 1;
-   ctx->Const.MaxTextureCoordUnits = 1;
-
-   ctx->Const.MinLineWidth = 0.0;
-   ctx->Const.MaxLineWidth = 255.0;
-
-   ctx->Const.MinLineWidthAA = 0.0;
-   ctx->Const.MaxLineWidthAA = 65536.0;
-
-   ctx->Const.MinPointSize = 0.0;
-   ctx->Const.MaxPointSize = 255.0;
-
-   ctx->Const.MinPointSizeAA = 0.5; /* 4x4 quality mode */
-   ctx->Const.MaxPointSizeAA = 16.0; 
-   ctx->Const.PointSizeGranularity = 0.25;
-
-   ctx->Const.MaxDrawBuffers = 1;
-
-   gmesa->texHeap = mmInit( 0, gmesa->gammaScreen->textureSize );
-
-   make_empty_list(&gmesa->TexObjList);
-   make_empty_list(&gmesa->SwappedOut);
-
-   gmesa->CurrentTexObj[0] = 0;
-   gmesa->CurrentTexObj[1] = 0; /* Permedia 3, second texture */
-
-   gmesa->RenderIndex = ~0;
-
-
-   /* Initialize the software rasterizer and helper modules.
-    */
-   _swrast_CreateContext( ctx );
-   _vbo_CreateContext( ctx );
-   _tnl_CreateContext( ctx );
-   _swsetup_CreateContext( ctx );
-
-   /* Install the customized pipeline:
-    */
-   _tnl_destroy_pipeline( ctx );
-   _tnl_install_pipeline( ctx, gamma_pipeline );
-
-   /* Configure swrast & TNL to match hardware characteristics:
-    */
-   _swrast_allow_pixel_fog( ctx, GL_FALSE );
-   _swrast_allow_vertex_fog( ctx, GL_TRUE );
-   _tnl_allow_pixel_fog( ctx, GL_FALSE );
-   _tnl_allow_vertex_fog( ctx, GL_TRUE );
-
-   gammaInitVB( ctx );
-   gammaDDInitExtensions( ctx );
-   /* XXX these should really go right after _mesa_init_driver_functions() */
-   gammaDDInitDriverFuncs( ctx );
-   gammaDDInitStateFuncs( ctx );
-   gammaDDInitSpanFuncs( ctx );
-   gammaDDInitTriFuncs( ctx );
-   gammaDDInitState( gmesa );
-
-   gammaInitTextureObjects( ctx );
-
-   driContextPriv->driverPrivate = (void *)gmesa;
-
-   GET_FIRST_DMA(gmesa->driFd, gmesa->hHWContext,
-		  1, &gmesa->bufIndex, &gmesa->bufSize,
-		  &gmesa->buf, &gmesa->bufCount, gammascrn);
-
-#ifdef DO_VALIDATE
-    GET_FIRST_DMA(gmesa->driFd, gmesa->hHWContext,
-		  1, &gmesa->WCbufIndex, &gmesa->WCbufSize,
-		  &gmesa->WCbuf, &gmesa->WCbufCount, gammascrn);
-#endif
-
-    switch (glVisual->depthBits) {
-    case 16:
-	gmesa->DeltaMode = DM_Depth16;
-	gmesa->depth_scale = 1.0f / 0xffff;
-	break;
-    case 24:
-	gmesa->DeltaMode = DM_Depth24;
-	gmesa->depth_scale = 1.0f / 0xffffff;
-	break;
-    case 32:
-	gmesa->DeltaMode = DM_Depth32;
-	gmesa->depth_scale = 1.0f / 0xffffffff;
-	break;
-    default:
-	break;
-    }
-
-    gmesa->DepthSize = glVisual->depthBits;
-    gmesa->Flags  = GAMMA_FRONT_BUFFER;
-    gmesa->Flags |= (glVisual->doubleBufferMode ? GAMMA_BACK_BUFFER : 0);
-    gmesa->Flags |= (gmesa->DepthSize > 0 ? GAMMA_DEPTH_BUFFER : 0);
-
-    gmesa->EnabledFlags = GAMMA_FRONT_BUFFER;
-    gmesa->EnabledFlags |= (glVisual->doubleBufferMode ? GAMMA_BACK_BUFFER : 0);
-
-
-    if (gmesa->Flags & GAMMA_BACK_BUFFER) {
-        gmesa->readOffset = gmesa->drawOffset = gmesa->driScreen->fbHeight * gmesa->driScreen->fbWidth * gmesa->gammaScreen->cpp;
-    } else {
-    	gmesa->readOffset = gmesa->drawOffset = 0;
-    }
-
-    gammaInitHW( gmesa );
-
-    driContextPriv->driverPrivate = (void *)gmesa;
-
-    return GL_TRUE;
-}
diff --git a/src/mesa/drivers/dri/gamma/gamma_context.h b/src/mesa/drivers/dri/gamma/gamma_context.h
deleted file mode 100644
index b03dfa6fb4..0000000000
--- a/src/mesa/drivers/dri/gamma/gamma_context.h
+++ /dev/null
@@ -1,401 +0,0 @@
-/*
- * Copyright 2001 by Alan Hourihane.
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Alan Hourihane not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission.  Alan Hourihane makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as is" without express or implied warranty.
- *
- * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * Authors:  Alan Hourihane, <alanh@tungstengraphics.com>
- *
- */
-
-#ifndef _GAMMA_CONTEXT_H_
-#define _GAMMA_CONTEXT_H_
-
-#include "dri_util.h"
-#include "drm.h"
-#include "drm_sarea.h"
-#include "main/colormac.h"
-#include "gamma_regs.h"
-#include "gamma_screen.h"
-#include "main/macros.h"
-#include "main/mtypes.h"
-#include "glint_dri.h"
-#include "main/mm.h"
-
-typedef union {
-    unsigned int i;
-    float        f;
-} dmaBufRec, *dmaBuf;
-
-/* Flags for context */
-#define GAMMA_FRONT_BUFFER    0x00000001
-#define GAMMA_BACK_BUFFER     0x00000002
-#define GAMMA_DEPTH_BUFFER    0x00000004
-#define GAMMA_STENCIL_BUFFER  0x00000008
-#define GAMMA_ACCUM_BUFFER    0x00000010
-
-#define GAMMA_MAX_TEXTURE_SIZE    2048
-
-/* These are the minimum requirements and should probably be increased */
-#define MAX_MODELVIEW_STACK    16
-#define MAX_PROJECTION_STACK    2
-#define MAX_TEXTURE_STACK       2
-
-extern void	  gammaDDUpdateHWState(GLcontext *ctx);
-extern gammaScreenPtr	  gammaCreateScreen(__DRIscreen *sPriv);
-extern void	  gammaDestroyScreen(__DRIscreen *sPriv);
-extern GLboolean gammaCreateContext( const __GLcontextModes *glVisual,
-                                     __DRIcontext *driContextPriv,
-                                     void *sharedContextPrivate);
-
-#define GAMMA_UPLOAD_ALL	0xffffffff
-#define GAMMA_UPLOAD_CLIPRECTS	0x00000002
-#define GAMMA_UPLOAD_ALPHA	0x00000004
-#define GAMMA_UPLOAD_BLEND	0x00000008
-#define GAMMA_UPLOAD_DEPTH	0x00000010
-#define GAMMA_UPLOAD_VIEWPORT	0x00000020
-#define GAMMA_UPLOAD_SHADE	0x00000040
-#define GAMMA_UPLOAD_CLIP	0x00000080
-#define GAMMA_UPLOAD_MASKS	0x00000100
-#define GAMMA_UPLOAD_WINDOW	0x00000200 /* defunct */
-#define GAMMA_UPLOAD_GEOMETRY	0x00000400
-#define GAMMA_UPLOAD_POLYGON	0x00000800
-#define GAMMA_UPLOAD_DITHER	0x00001000
-#define GAMMA_UPLOAD_LOGICOP	0x00002000
-#define GAMMA_UPLOAD_FOG	0x00004000
-#define GAMMA_UPLOAD_LIGHT	0x00008000
-#define GAMMA_UPLOAD_CONTEXT	0x00010000
-#define GAMMA_UPLOAD_TEX0	0x00020000
-#define GAMMA_UPLOAD_STIPPLE	0x00040000
-#define GAMMA_UPLOAD_TRANSFORM	0x00080000
-#define GAMMA_UPLOAD_LINEMODE	0x00100000
-#define GAMMA_UPLOAD_POINTMODE	0x00200000
-#define GAMMA_UPLOAD_TRIMODE	0x00400000
-
-#define GAMMA_NEW_CLIP		0x00000001
-#define GAMMA_NEW_WINDOW	0x00000002
-#define GAMMA_NEW_CONTEXT	0x00000004
-#define GAMMA_NEW_TEXTURE	0x00000008 /* defunct */
-#define GAMMA_NEW_ALPHA		0x00000010
-#define GAMMA_NEW_DEPTH		0x00000020
-#define GAMMA_NEW_MASKS		0x00000040
-#define GAMMA_NEW_POLYGON	0x00000080
-#define GAMMA_NEW_CULL		0x00000100
-#define GAMMA_NEW_LOGICOP	0x00000200
-#define GAMMA_NEW_FOG		0x00000400
-#define GAMMA_NEW_LIGHT		0x00000800
-#define GAMMA_NEW_STIPPLE	0x00001000
-#define GAMMA_NEW_ALL		0xffffffff
-
-#define GAMMA_FALLBACK_TRI	0x00000001
-#define GAMMA_FALLBACK_TEXTURE	0x00000002
-
-#define FLUSH_BATCH(gmesa) do {						\
-	/*FLUSH_DMA_BUFFER(gmesa);*/					\
-} while(0)
-
-struct gamma_context;
-typedef struct gamma_context gammaContextRec;
-typedef struct gamma_context *gammaContextPtr;
-typedef struct gamma_texture_object_t *gammaTextureObjectPtr;
-
-#define VALID_GAMMA_TEXTURE_OBJECT(tobj)  (tobj) 
-
-#define GAMMA_TEX_MAXLEVELS 12  /* 2K x 2K */
-
-/* For shared texture space managment, these texture objects may also
- * be used as proxies for regions of texture memory containing other
- * client's textures.  Such proxy textures (not to be confused with GL
- * proxy textures) are subject to the same LRU aging we use for our
- * own private textures, and thus we have a mechanism where we can
- * fairly decide between kicking out our own textures and those of
- * other clients.
- *
- * Non-local texture objects have a valid MemBlock to describe the
- * region managed by the other client, and can be identified by
- * 't->globj == 0' 
- */
-struct gamma_texture_object_t {
-   struct gamma_texture_object_t *next, *prev;
-
-   GLuint age;   
-   struct gl_texture_object *globj;
-     
-   int Pitch;
-   int Height;
-   int texelBytes;
-   int totalSize;
-   int bound;
-
-   struct mem_block *MemBlock;   
-   char * BufAddr;
-   
-   GLuint min_level;
-   GLuint max_level;
-   GLuint dirty_images;
-
-   GLint firstLevel, lastLevel;  /* upload tObj->Image[0][first .. lastLevel] */
-
-   struct { 
-      const struct gl_texture_image *image;
-      int offset;		/* into BufAddr */
-      int height;
-      int internalFormat;
-   } image[GAMMA_TEX_MAXLEVELS];
-
-   uint32_t TextureBaseAddr[GAMMA_TEX_MAXLEVELS];
-   uint32_t TextureAddressMode;
-   uint32_t TextureColorMode;
-   uint32_t TextureFilterMode;
-   uint32_t TextureFormat;
-   uint32_t TextureReadMode;
-   uint32_t TextureBorderColor;
-};		
-
-#define GAMMA_NO_PALETTE        0x0
-#define GAMMA_USE_PALETTE       0x1
-#define GAMMA_UPDATE_PALETTE    0x2
-#define GAMMA_FALLBACK_PALETTE  0x4
-
-void gammaUpdateTextureState( GLcontext *ctx );
-
-void gammaDestroyTexObj( gammaContextPtr gmesa, gammaTextureObjectPtr t );
-void gammaSwapOutTexObj( gammaContextPtr gmesa, gammaTextureObjectPtr t );
-void gammaUploadTexImages( gammaContextPtr gmesa, gammaTextureObjectPtr t );
-
-void gammaResetGlobalLRU( gammaContextPtr gmesa );
-void gammaUpdateTexLRU( gammaContextPtr gmesa, gammaTextureObjectPtr t );
-void gammaTexturesGone( gammaContextPtr gmesa, 
-		       GLuint start, GLuint end, 
-		       GLuint in_use ); 
-
-void gammaEmitHwState( gammaContextPtr gmesa );
-void gammaDDInitExtensions( GLcontext *ctx );
-void gammaDDInitDriverFuncs( GLcontext *ctx );
-void gammaDDInitSpanFuncs( GLcontext *ctx );
-void gammaDDInitState( gammaContextPtr gmesa );
-void gammaInitHW( gammaContextPtr gmesa );
-void gammaDDInitStateFuncs( GLcontext *ctx );
-void gammaDDInitTextureFuncs( struct dd_function_table *table );
-void gammaInitTextureObjects( GLcontext *ctx );
-void gammaDDInitTriFuncs( GLcontext *ctx );
-
-void gammaUpdateWindow( GLcontext *ctx );
-void gammaUpdateViewportOffset( GLcontext *ctx );
-
-void gammaPrintLocalLRU( gammaContextPtr gmesa );
-void gammaPrintGlobalLRU( gammaContextPtr gmesa );
-
-extern void gammaFallback( gammaContextPtr gmesa, GLuint bit, GLboolean mode );
-#define FALLBACK( imesa, bit, mode ) gammaFallback( imesa, bit, mode )
-
-/* Use the templated vertex formats.  Only one of these is used in gamma.
- */
-#define TAG(x) gamma##x
-#include "tnl_dd/t_dd_vertex.h"
-#undef TAG
-
-typedef void (*gamma_quad_func)( gammaContextPtr, 
-				 const gammaVertex *, 
-				 const gammaVertex *,
-				 const gammaVertex *,
-				 const gammaVertex * );
-typedef void (*gamma_tri_func)( gammaContextPtr, 
-				const gammaVertex *, 
-				const gammaVertex *,
-				const gammaVertex * );
-typedef void (*gamma_line_func)( gammaContextPtr, 
-				 const gammaVertex *, 
-				 const gammaVertex * );
-typedef void (*gamma_point_func)( gammaContextPtr, 
-				  const gammaVertex * );
-
-
-struct gamma_context {
-	GLcontext 		*glCtx;		/* Mesa context */
-
-	__DRIcontext	*driContext;
-	__DRIscreen	*driScreen;
-	__DRIdrawable	*driDrawable;
-
-	GLuint 			new_gl_state;
-	GLuint 			new_state;
-	GLuint 			dirty;
-
-  	GLINTSAREADRIPtr        sarea; 
-
-   	/* Mirrors of some DRI state
-    	 */
-   	drm_context_t hHWContext;
-   	drm_hw_lock_t *driHwLock;
-   	int driFd;
-
-   	GLuint numClipRects;		   /* Cliprects for the draw buffer */
-   	drm_clip_rect_t *pClipRects;
-
-    	dmaBuf              buf;           /* DMA buffer for regular cmds */
-    	int                 bufIndex;
-    	int                 bufSize;
-    	int                 bufCount;
-
-    	dmaBuf              WCbuf;         /* DMA buffer for window changed cmds */
-    	int                 WCbufIndex;
-    	int                 WCbufSize;
-    	int                 WCbufCount;
-
-   	gammaScreenPtr gammaScreen;		/* Screen private DRI data */
-
-	int			drawOffset;
-	int			readOffset;
-
-   	gamma_point_func    draw_point;
-   	gamma_line_func     draw_line;
-   	gamma_tri_func      draw_tri;
-   	gamma_quad_func     draw_quad;
-
-   	GLuint Fallback;
-	GLuint RenderIndex;
-	GLuint SetupNewInputs;
-	GLuint SetupIndex;
-
-	GLuint vertex_format;
-	GLuint vertex_size;
-	GLuint vertex_stride_shift;
-	GLubyte *verts;
-
-	GLfloat hw_viewport[16];
-	GLuint hw_primitive;
-	GLenum render_primitive;
-
-	GLfloat	depth_scale;
-
-   	gammaTextureObjectPtr CurrentTexObj[2];
-   	struct gamma_texture_object_t TexObjList;
-   	struct gamma_texture_object_t SwappedOut; 
-	GLenum TexEnvImageFmt[2];
-
-	struct mem_block *texHeap;
-
-   	unsigned int lastSwap;
-   	int texAge;
-   	int ctxAge;
-   	int dirtyAge;
-   	unsigned int lastStamp;
-   
-
-    	uint32_t 		ClearColor;
-	uint32_t		Color;
-	uint32_t		DitherMode;
-    	uint32_t		ClearDepth;
-	uint32_t		FogMode;
-	uint32_t		AreaStippleMode;
-	uint32_t		LBReadFormat;
-	uint32_t		LBWriteFormat;
-	uint32_t		LineMode;
-	uint32_t		PointMode;
-	uint32_t		TriangleMode;
-	uint32_t		AntialiasMode;
-	GLfloat			ViewportScaleX;
-	GLfloat			ViewportScaleY;
-	GLfloat			ViewportScaleZ;
-	GLfloat			ViewportOffsetX;
-	GLfloat			ViewportOffsetY;
-	GLfloat			ViewportOffsetZ;
-    int                 MatrixMode;
-    int                 DepthMode;
-    int			TransformMode;
-    int                 LBReadMode;
-    int                 FBReadMode;
-    int                 FBWindowBase;
-    int                 LBWindowBase;
-    int                 ColorDDAMode;
-    int                 GeometryMode;
-    int                 AlphaTestMode;
-    int                 AlphaBlendMode;
-    int                 AB_FBReadMode;
-    int                 AB_FBReadMode_Save;
-    int                 DeltaMode;
-    int			ColorMaterialMode;
-    int			FBHardwareWriteMask;
-    int			MaterialMode;
-    int			NormalizeMode;
-    int			LightingMode;
-    int			Light0Mode;
-    int			Light1Mode;
-    int			Light2Mode;
-    int			Light3Mode;
-    int			Light4Mode;
-    int			Light5Mode;
-    int			Light6Mode;
-    int			Light7Mode;
-    int			Light8Mode;
-    int			Light9Mode;
-    int			Light10Mode;
-    int			Light11Mode;
-    int			Light12Mode;
-    int			Light13Mode;
-    int			Light14Mode;
-    int			Light15Mode;
-    int			LogicalOpMode;
-    int			ScissorMode;
-    int			ScissorMaxXY;
-    int			ScissorMinXY;
-    int                 Window; /* GID part probably should be in draw priv */
-    int                 WindowOrigin;
-    int                 x, y, w, h; /* Probably should be in drawable priv */
-    int                 FrameCount; /* Probably should be in drawable priv */
-    int                 NotClipped; /* Probably should be in drawable priv */
-    int                 WindowChanged; /* Probably should be in drawabl... */
-    int                 Flags;
-    int                 EnabledFlags;
-    int                 DepthSize;
-    int                 Begin;
-    GLenum              ErrorValue;
-    int                 Texture1DEnabled;
-    int                 Texture2DEnabled;
-
-    float               ModelView[16];
-    float               Proj[16];
-    float               ModelViewProj[16];
-    float               Texture[16];
-
-    float               ModelViewStack[(MAX_MODELVIEW_STACK-1)*16];
-    int                 ModelViewCount;
-    float               ProjStack[(MAX_PROJECTION_STACK-1)*16];
-    int                 ProjCount;
-    float               TextureStack[(MAX_TEXTURE_STACK-1)*16];
-    int                 TextureCount;
-};
-
-static INLINE GLuint gammaPackColor( GLuint cpp,
-					GLubyte r, GLubyte g,
-					GLubyte b, GLubyte a )
-{
-   switch ( cpp ) {
-   case 2:
-      return PACK_COLOR_565( r, g, b );
-   case 4:
-      return PACK_COLOR_8888( a, r, g, b );
-   default:
-      return 0;
-   }
-}
-
-#define GAMMA_CONTEXT(ctx)		((gammaContextPtr)(ctx->DriverCtx))
-
-#endif /* _GAMMA_CONTEXT_H_ */
diff --git a/src/mesa/drivers/dri/gamma/gamma_dd.c b/src/mesa/drivers/dri/gamma/gamma_dd.c
deleted file mode 100644
index 389d2231e7..0000000000
--- a/src/mesa/drivers/dri/gamma/gamma_dd.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright 2001 by Alan Hourihane.
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Alan Hourihane not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission.  Alan Hourihane makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as is" without express or implied warranty.
- *
- * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * Authors:  Alan Hourihane, <alanh@tungstengraphics.com>
- *
- */
-
-#include "gamma_context.h"
-#include "gamma_vb.h"
-#include "gamma_lock.h"
-#include "gamma_macros.h"
-#if defined(USE_X86_ASM)
-#include "x86/common_x86_asm.h"
-#endif
-
-#include "main/context.h"
-#include "swrast/swrast.h"
-
-#define GAMMA_DATE	"20021125"
-
-
-/* Return the width and height of the current color buffer.
- */
-static void gammaDDGetBufferSize( GLframebuffer *buffer,
-				 GLuint *width, GLuint *height )
-{
-   GET_CURRENT_CONTEXT(ctx);
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-
-   GAMMAHW_LOCK( gmesa );
-   *width  = gmesa->driDrawable->w;
-   *height = gmesa->driDrawable->h;
-   GAMMAHW_UNLOCK( gmesa );
-}
-
-
-/* Return various strings for glGetString().
- */
-static const GLubyte *gammaDDGetString( GLcontext *ctx, GLenum name )
-{
-   static char buffer[128];
-
-   switch ( name ) {
-   case GL_VENDOR:
-      return (GLubyte *)"VA Linux Systems, Inc.";
-
-   case GL_RENDERER:
-      sprintf( buffer, "Mesa DRI Gamma " GAMMA_DATE );
-
-      /* Append any CPU-specific information.
-       */
-#ifdef USE_X86_ASM
-      if ( _mesa_x86_cpu_features ) {
-	 strncat( buffer, " x86", 4 );
-      }
-#ifdef USE_MMX_ASM
-      if ( cpu_has_mmx ) {
-	 strncat( buffer, "/MMX", 4 );
-      }
-#endif
-#ifdef USE_3DNOW_ASM
-      if ( cpu_has_3dnow ) {
-	 strncat( buffer, "/3DNow!", 7 );
-      }
-#endif
-#ifdef USE_SSE_ASM
-      if ( cpu_has_xmm ) {
-	 strncat( buffer, "/SSE", 4 );
-      }
-#endif
-#endif
-      return (GLubyte *)buffer;
-
-   default:
-      return NULL;
-   }
-}
-
-/* Enable the extensions supported by this driver.
- */
-void gammaDDInitExtensions( GLcontext *ctx )
-{
-   /* None... */
-}
-
-/* Initialize the driver's misc functions.
- */
-void gammaDDInitDriverFuncs( GLcontext *ctx )
-{
-   ctx->Driver.GetBufferSize = gammaDDGetBufferSize;
-   ctx->Driver.GetString = gammaDDGetString;
-}
diff --git a/src/mesa/drivers/dri/gamma/gamma_inithw.c b/src/mesa/drivers/dri/gamma/gamma_inithw.c
deleted file mode 100644
index 735acb7a57..0000000000
--- a/src/mesa/drivers/dri/gamma/gamma_inithw.c
+++ /dev/null
@@ -1,551 +0,0 @@
-/*
- * Copyright 2001 by Alan Hourihane.
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Alan Hourihane not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission.  Alan Hourihane makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as is" without express or implied warranty.
- *
- * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * Authors:  Alan Hourihane, <alanh@tungstengraphics.com>
- *           Kevin E. Martin <martin@valinux.com>
- *
- */
-
-#include "gamma_context.h"
-#include "gamma_macros.h"
-#include "glint_dri.h"
-
-void gammaInitHW( gammaContextPtr gmesa )
-{
-    GLINTDRIPtr gDRIPriv = (GLINTDRIPtr)gmesa->driScreen->pDevPriv;
-    int i;
-
-    if (gDRIPriv->numMultiDevices == 2) {
-	/* Set up each MX's ScanLineOwnership for OpenGL */
-	CHECK_DMA_BUFFER(gmesa, 5);
-	WRITE(gmesa->buf, BroadcastMask, 1);
-	WRITE(gmesa->buf, ScanLineOwnership, 5); /* Use bottom left as [0,0] */
-	WRITE(gmesa->buf, BroadcastMask, 2);
-	WRITE(gmesa->buf, ScanLineOwnership, 1); /* Use bottom left as [0,0] */
-	/* Broadcast to both MX's */
-	WRITE(gmesa->buf, BroadcastMask, 3);
-	FLUSH_DMA_BUFFER(gmesa); 
-    }
-
-    gmesa->AlphaBlendMode = (AlphaBlendModeDisable |
-			     AB_Src_One |
-			     AB_Dst_Zero |
-			     AB_NoAlphaBufferPresent |
-			     AB_ColorFmt_8888 |
-			     AB_ColorOrder_RGB |
-			     AB_OpenGLType |
-			     AB_AlphaDst_FBData |
-			     AB_ColorConversionScale |
-			     AB_AlphaConversionScale);
-
-    gmesa->DitherMode = DitherModeEnable | DM_ColorOrder_RGB;
-
-    switch (gmesa->gammaScreen->cpp) {
-	case 2:
-    		gmesa->DitherMode |= DM_ColorFmt_5555;
-		gmesa->AlphaBlendMode |= AB_ColorFmt_5555;
-		CHECK_DMA_BUFFER(gmesa, 1);
-		WRITE(gmesa->buf, PixelSize, 1);
-		break;
-	case 4:
-    		gmesa->DitherMode |= DM_ColorFmt_8888;
-		gmesa->AlphaBlendMode |= AB_ColorFmt_8888;
-		WRITE(gmesa->buf, PixelSize, 0);
-		break;
-    }
-
-    /* FIXME for stencil, gid, etc */
-    switch (gmesa->DepthSize) {
-	case 16:
-   		gmesa->LBReadFormat = 
-			 (LBRF_DepthWidth16    | 
-                          LBRF_StencilWidth8   |
-                          LBRF_StencilPos16    |
-                          LBRF_FrameCount8     |
-                          LBRF_FrameCountPos24 |
-                          LBRF_GIDWidth4       |
-                          LBRF_GIDPos32         );
-   		gmesa->LBWriteFormat = 
-			 (LBRF_DepthWidth16    | 
-                          LBRF_StencilWidth8   |
-                          LBRF_StencilPos16    |
-                          LBRF_FrameCount8     |
-                          LBRF_FrameCountPos24 |
-                          LBRF_GIDWidth4       |
-                          LBRF_GIDPos32         );
-		break;
-	case 24:
-   		gmesa->LBReadFormat = 
-			 (LBRF_DepthWidth24    | 
-                          LBRF_StencilWidth8   |
-                          LBRF_StencilPos24    |
-                          LBRF_FrameCount8     |
-                          LBRF_FrameCountPos32 |
-                          LBRF_GIDWidth4       |
-                          LBRF_GIDPos36         );
-   		gmesa->LBWriteFormat = 
-			 (LBRF_DepthWidth24    | 
-                          LBRF_StencilWidth8   |
-                          LBRF_StencilPos24    |
-                          LBRF_FrameCount8     |
-                          LBRF_FrameCountPos32 |
-                          LBRF_GIDWidth4       |
-                          LBRF_GIDPos36         );
-		break;
-	case 32:
-   		gmesa->LBReadFormat = 
-			 (LBRF_DepthWidth32    | 
-                          LBRF_StencilWidth8   |
-                          LBRF_StencilPos32    |
-                          LBRF_FrameCount8     |
-                          LBRF_FrameCountPos40 |
-                          LBRF_GIDWidth4       |
-                          LBRF_GIDPos44         );
-   		gmesa->LBWriteFormat = 
-			 (LBRF_DepthWidth32    | 
-                          LBRF_StencilWidth8   |
-                          LBRF_StencilPos32    |
-                          LBRF_FrameCount8     |
-                          LBRF_FrameCountPos40 |
-                          LBRF_GIDWidth4       |
-                          LBRF_GIDPos44         );
-		break;
-    }
-
-    gmesa->FBHardwareWriteMask = 0xffffffff;
-    gmesa->FogMode = FogModeDisable;
-    gmesa->ClearDepth = 0xffffffff;
-    gmesa->AreaStippleMode = AreaStippleModeDisable;
-    gmesa->x = 0;
-    gmesa->y = 0;
-    gmesa->w = 0;
-    gmesa->h = 0;
-    gmesa->FrameCount = 0;
-    gmesa->MatrixMode = GL_MODELVIEW;
-    gmesa->ModelViewCount = 0;
-    gmesa->ProjCount = 0;
-    gmesa->TextureCount = 0;
-    gmesa->PointMode = PM_AntialiasQuality_4x4;
-    gmesa->LineMode = LM_AntialiasQuality_4x4;
-    gmesa->TriangleMode = TM_AntialiasQuality_4x4;
-    gmesa->AntialiasMode = AntialiasModeDisable;
-
-    for (i = 0; i < 16; i++)
-	if (i % 5 == 0)
-	    gmesa->ModelView[i] =
-		gmesa->Proj[i] =
-		gmesa->ModelViewProj[i] =
-		gmesa->Texture[i] = 1.0;
-	else
-	    gmesa->ModelView[i] =
-		gmesa->Proj[i] =
-		gmesa->ModelViewProj[i] =
-		gmesa->Texture[i] = 0.0;
-
-    gmesa->LBReadMode = (LBReadSrcDisable |
-			 LBReadDstDisable |
-			 LBDataTypeDefault |
-			 LBWindowOriginBot | 
-			 gDRIPriv->pprod);
-    gmesa->FBReadMode = (FBReadSrcDisable |
-			 FBReadDstDisable |
-			 FBDataTypeDefault |
-			 FBWindowOriginBot |  
-			 gDRIPriv->pprod);
- 
-    if (gDRIPriv->numMultiDevices == 2) {
-	gmesa->LBReadMode |= LBScanLineInt2;
-	gmesa->FBReadMode |= FBScanLineInt2;
-        gmesa->LBWindowBase = gmesa->driScreen->fbWidth *
-			     (gmesa->driScreen->fbHeight/2 - 1);
-    	gmesa->FBWindowBase = gmesa->driScreen->fbWidth * 
-			     (gmesa->driScreen->fbHeight/2 - 1);
-    } else {
-        gmesa->LBWindowBase = gmesa->driScreen->fbWidth *
-			     (gmesa->driScreen->fbHeight - 1);
-    	gmesa->FBWindowBase = gmesa->driScreen->fbWidth * 
-			     (gmesa->driScreen->fbHeight - 1);
-    }
-
-    gmesa->Begin = (B_AreaStippleDisable |
-		    B_LineStippleDisable |
-		    B_AntiAliasDisable |
-		    B_TextureDisable |
-		    B_FogDisable |
-		    B_SubPixelCorrectEnable |
-		    B_PrimType_Null);
-
-    gmesa->ColorDDAMode = (ColorDDAEnable |
-			   ColorDDAGouraud);
-
-    gmesa->GeometryMode = (GM_TextureDisable |
-			   GM_FogDisable |
-			   GM_FogExp |
-			   GM_FrontPolyFill |
-			   GM_BackPolyFill |
-			   GM_FrontFaceCCW |
-			   GM_PolyCullDisable |
-			   GM_PolyCullBack |
-			   GM_ClipShortLinesDisable |
-			   GM_ClipSmallTrisDisable |
-			   GM_RenderMode |
-			   GM_Feedback2D |
-			   GM_CullFaceNormDisable |
-			   GM_AutoFaceNormDisable |
-			   GM_GouraudShading |
-			   GM_UserClipNone |
-			   GM_PolyOffsetPointDisable |
-			   GM_PolyOffsetLineDisable |
-			   GM_PolyOffsetFillDisable |
-			   GM_InvertFaceNormCullDisable);
-
-    gmesa->AlphaTestMode = (AlphaTestModeDisable |
-			    AT_Always);
-
-    gmesa->AB_FBReadMode_Save = gmesa->AB_FBReadMode = 0;
-
-    gmesa->Window = (WindowEnable  | /* For GID testing */
-		     W_PassIfEqual |
-		     (0 << 5)); /* GID part is set from draw priv (below) */
-
-    gmesa->NotClipped = GL_FALSE;
-    gmesa->WindowChanged = GL_TRUE;
-
-    gmesa->Texture1DEnabled = GL_FALSE;
-    gmesa->Texture2DEnabled = GL_FALSE;
-
-    gmesa->DepthMode |= (DepthModeDisable |
-			DM_WriteMask |
-			DM_Less);
-
-    gmesa->DeltaMode |= (DM_SubPixlCorrectionEnable |
-			DM_SmoothShadingEnable |
-			DM_Target500TXMX);
-
-    gmesa->LightingMode = LightingModeDisable | LightingModeSpecularEnable;
-    gmesa->Light0Mode = LNM_Off;
-    gmesa->Light1Mode = LNM_Off;
-    gmesa->Light2Mode = LNM_Off;
-    gmesa->Light3Mode = LNM_Off;
-    gmesa->Light4Mode = LNM_Off;
-    gmesa->Light5Mode = LNM_Off;
-    gmesa->Light6Mode = LNM_Off;
-    gmesa->Light7Mode = LNM_Off;
-    gmesa->Light8Mode = LNM_Off;
-    gmesa->Light9Mode = LNM_Off;
-    gmesa->Light10Mode = LNM_Off;
-    gmesa->Light11Mode = LNM_Off;
-    gmesa->Light12Mode = LNM_Off;
-    gmesa->Light13Mode = LNM_Off;
-    gmesa->Light14Mode = LNM_Off;
-    gmesa->Light15Mode = LNM_Off;
-
-    gmesa->LogicalOpMode = LogicalOpModeDisable;
-
-    gmesa->MaterialMode = MaterialModeDisable;
-
-    gmesa->ScissorMode = UserScissorDisable | ScreenScissorDisable;
-
-    gmesa->TransformMode = XM_UseModelViewProjMatrix |
-				    XM_TexGenModeS_None |
-				    XM_TexGenModeT_None |
-				    XM_TexGenModeR_None |
-				    XM_TexGenModeQ_None;
-
-    CHECK_DMA_BUFFER(gmesa, 20);
-    WRITE(gmesa->buf, LineStippleMode, 0);
-    WRITE(gmesa->buf, RouterMode, 0);
-    WRITE(gmesa->buf, TextureAddressMode, 0);
-    WRITE(gmesa->buf, TextureReadMode, 0);
-    WRITE(gmesa->buf, TextureFilterMode, 0);
-    WRITE(gmesa->buf, TextureColorMode, 0);
-    WRITE(gmesa->buf, StencilMode, 0);
-    WRITE(gmesa->buf, PatternRamMode, 0);
-    WRITE(gmesa->buf, ChromaTestMode, 0);
-    WRITE(gmesa->buf, StatisticMode, 0);
-    WRITE(gmesa->buf, AreaStippleMode, gmesa->AreaStippleMode);
-    WRITE(gmesa->buf, ScissorMode, gmesa->ScissorMode);
-    WRITE(gmesa->buf, FogMode, gmesa->FogMode);
-    WRITE(gmesa->buf, AntialiasMode, gmesa->AntialiasMode);
-    WRITE(gmesa->buf, LogicalOpMode, gmesa->LogicalOpMode);
-    WRITE(gmesa->buf, TriangleMode, gmesa->TriangleMode);
-    WRITE(gmesa->buf, PointMode, gmesa->PointMode);
-    WRITE(gmesa->buf, LineMode, gmesa->LineMode);
-    WRITE(gmesa->buf, LBWriteFormat, gmesa->LBWriteFormat);
-    WRITE(gmesa->buf, LBReadFormat,  gmesa->LBReadFormat);
-
-    /* Framebuffer initialization */
-    CHECK_DMA_BUFFER(gmesa, 10);
-    WRITE(gmesa->buf, FBSourceData, 0);
-    WRITE(gmesa->buf, FBReadMode, gmesa->FBReadMode);
-    if (gmesa->EnabledFlags & GAMMA_BACK_BUFFER) {
-	if (gDRIPriv->numMultiDevices == 2) {
-	    WRITE(gmesa->buf, FBPixelOffset,
-	      (gmesa->driScreen->fbHeight/2)*gmesa->driScreen->fbWidth);
-	} else {
-	    WRITE(gmesa->buf, FBPixelOffset,
-	      gmesa->driScreen->fbHeight*gmesa->driScreen->fbWidth);
-	}
-    } else
-	WRITE(gmesa->buf, FBPixelOffset, 0);
-    WRITE(gmesa->buf, FBSourceOffset, 0);
-    WRITE(gmesa->buf, FBHardwareWriteMask, 0xffffffff);
-    WRITE(gmesa->buf, FBSoftwareWriteMask, 0xffffffff);
-    WRITE(gmesa->buf, FBWriteMode, FBWriteModeEnable);
-    WRITE(gmesa->buf, FBWindowBase, gmesa->FBWindowBase);
-    WRITE(gmesa->buf, ScreenSize, ((gmesa->driScreen->fbHeight << 16) |
-				 (gmesa->driScreen->fbWidth)));
-    WRITE(gmesa->buf, WindowOrigin, 0x00000000);
-
-    /* Localbuffer initialization */
-    CHECK_DMA_BUFFER(gmesa, 5);
-    WRITE(gmesa->buf, LBReadMode, gmesa->LBReadMode);
-    WRITE(gmesa->buf, LBSourceOffset, 0);
-    WRITE(gmesa->buf, LBWriteMode, LBWriteModeEnable);
-    WRITE(gmesa->buf, LBWindowOffset, 0);
-    WRITE(gmesa->buf, LBWindowBase, gmesa->LBWindowBase);
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, Rectangle2DControl, 1);
-
-    CHECK_DMA_BUFFER(gmesa, 11);
-    WRITE(gmesa->buf, DepthMode, gmesa->DepthMode);
-    WRITE(gmesa->buf, ColorDDAMode, gmesa->ColorDDAMode);
-    WRITE(gmesa->buf, FBBlockColor, 0x00000000);
-    WRITE(gmesa->buf, ConstantColor, 0x00000000);
-    WRITE(gmesa->buf, AlphaTestMode, gmesa->AlphaTestMode);
-    WRITE(gmesa->buf, AlphaBlendMode, gmesa->AlphaBlendMode);
-    WRITE(gmesa->buf, DitherMode, gmesa->DitherMode);
-    if (gDRIPriv->numMultiDevices == 2)
-    	WRITE(gmesa->buf, RasterizerMode, RM_MultiGLINT | RM_BiasCoordNearHalf);
-    else
-    	WRITE(gmesa->buf, RasterizerMode, RM_BiasCoordNearHalf);
-    WRITE(gmesa->buf, GLINTWindow, gmesa->Window);
-    WRITE(gmesa->buf, FastClearDepth, gmesa->ClearDepth);
-    WRITE(gmesa->buf, GLINTDepth, gmesa->ClearDepth);
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, EdgeFlag, EdgeFlagEnable);
-
-    CHECK_DMA_BUFFER(gmesa, 16);
-    WRITEF(gmesa->buf, ModelViewMatrix0,  1.0);
-    WRITEF(gmesa->buf, ModelViewMatrix1,  0.0);
-    WRITEF(gmesa->buf, ModelViewMatrix2,  0.0);
-    WRITEF(gmesa->buf, ModelViewMatrix3,  0.0);
-    WRITEF(gmesa->buf, ModelViewMatrix4,  0.0);
-    WRITEF(gmesa->buf, ModelViewMatrix5,  1.0);
-    WRITEF(gmesa->buf, ModelViewMatrix6,  0.0);
-    WRITEF(gmesa->buf, ModelViewMatrix7,  0.0);
-    WRITEF(gmesa->buf, ModelViewMatrix8,  0.0);
-    WRITEF(gmesa->buf, ModelViewMatrix9,  0.0);
-    WRITEF(gmesa->buf, ModelViewMatrix10, 1.0);
-    WRITEF(gmesa->buf, ModelViewMatrix11, 0.0);
-    WRITEF(gmesa->buf, ModelViewMatrix12, 0.0);
-    WRITEF(gmesa->buf, ModelViewMatrix13, 0.0);
-    WRITEF(gmesa->buf, ModelViewMatrix14, 0.0);
-    WRITEF(gmesa->buf, ModelViewMatrix15, 1.0);
-
-    CHECK_DMA_BUFFER(gmesa, 16);
-    WRITEF(gmesa->buf, ModelViewProjectionMatrix0,  1.0);
-    WRITEF(gmesa->buf, ModelViewProjectionMatrix1,  0.0);
-    WRITEF(gmesa->buf, ModelViewProjectionMatrix2,  0.0);
-    WRITEF(gmesa->buf, ModelViewProjectionMatrix3,  0.0);
-    WRITEF(gmesa->buf, ModelViewProjectionMatrix4,  0.0);
-    WRITEF(gmesa->buf, ModelViewProjectionMatrix5,  1.0);
-    WRITEF(gmesa->buf, ModelViewProjectionMatrix6,  0.0);
-    WRITEF(gmesa->buf, ModelViewProjectionMatrix7,  0.0);
-    WRITEF(gmesa->buf, ModelViewProjectionMatrix8,  0.0);
-    WRITEF(gmesa->buf, ModelViewProjectionMatrix9,  0.0);
-    WRITEF(gmesa->buf, ModelViewProjectionMatrix10, 1.0);
-    WRITEF(gmesa->buf, ModelViewProjectionMatrix11, 0.0);
-    WRITEF(gmesa->buf, ModelViewProjectionMatrix12, 0.0);
-    WRITEF(gmesa->buf, ModelViewProjectionMatrix13, 0.0);
-    WRITEF(gmesa->buf, ModelViewProjectionMatrix14, 0.0);
-    WRITEF(gmesa->buf, ModelViewProjectionMatrix15, 1.0);
-
-    CHECK_DMA_BUFFER(gmesa, 16);
-    WRITEF(gmesa->buf, TextureMatrix0,  1.0);
-    WRITEF(gmesa->buf, TextureMatrix1,  0.0);
-    WRITEF(gmesa->buf, TextureMatrix2,  0.0);
-    WRITEF(gmesa->buf, TextureMatrix3,  0.0);
-    WRITEF(gmesa->buf, TextureMatrix4,  0.0);
-    WRITEF(gmesa->buf, TextureMatrix5,  1.0);
-    WRITEF(gmesa->buf, TextureMatrix6,  0.0);
-    WRITEF(gmesa->buf, TextureMatrix7,  0.0);
-    WRITEF(gmesa->buf, TextureMatrix8,  0.0);
-    WRITEF(gmesa->buf, TextureMatrix9,  0.0);
-    WRITEF(gmesa->buf, TextureMatrix10, 1.0);
-    WRITEF(gmesa->buf, TextureMatrix11, 0.0);
-    WRITEF(gmesa->buf, TextureMatrix12, 0.0);
-    WRITEF(gmesa->buf, TextureMatrix13, 0.0);
-    WRITEF(gmesa->buf, TextureMatrix14, 0.0);
-    WRITEF(gmesa->buf, TextureMatrix15, 1.0);
-
-    CHECK_DMA_BUFFER(gmesa, 16);
-    WRITEF(gmesa->buf, TexGen0,  0.0);
-    WRITEF(gmesa->buf, TexGen1,  0.0);
-    WRITEF(gmesa->buf, TexGen2,  0.0);
-    WRITEF(gmesa->buf, TexGen3,  0.0);
-    WRITEF(gmesa->buf, TexGen4,  0.0);
-    WRITEF(gmesa->buf, TexGen5,  0.0);
-    WRITEF(gmesa->buf, TexGen6,  0.0);
-    WRITEF(gmesa->buf, TexGen7,  0.0);
-    WRITEF(gmesa->buf, TexGen8,  0.0);
-    WRITEF(gmesa->buf, TexGen9,  0.0);
-    WRITEF(gmesa->buf, TexGen10, 0.0);
-    WRITEF(gmesa->buf, TexGen11, 0.0);
-    WRITEF(gmesa->buf, TexGen12, 0.0);
-    WRITEF(gmesa->buf, TexGen13, 0.0);
-    WRITEF(gmesa->buf, TexGen14, 0.0);
-    WRITEF(gmesa->buf, TexGen15, 0.0);
-
-    CHECK_DMA_BUFFER(gmesa, 9);
-    WRITEF(gmesa->buf, NormalMatrix0, 1.0);
-    WRITEF(gmesa->buf, NormalMatrix1, 0.0);
-    WRITEF(gmesa->buf, NormalMatrix2, 0.0);
-    WRITEF(gmesa->buf, NormalMatrix3, 0.0);
-    WRITEF(gmesa->buf, NormalMatrix4, 1.0);
-    WRITEF(gmesa->buf, NormalMatrix5, 0.0);
-    WRITEF(gmesa->buf, NormalMatrix6, 0.0);
-    WRITEF(gmesa->buf, NormalMatrix7, 0.0);
-    WRITEF(gmesa->buf, NormalMatrix8, 1.0);
-
-    CHECK_DMA_BUFFER(gmesa, 3);
-    WRITEF(gmesa->buf, FogDensity, 0.0);
-    WRITEF(gmesa->buf, FogEnd,     0.0);
-    WRITEF(gmesa->buf, FogScale,   0.0);
-
-    CHECK_DMA_BUFFER(gmesa, 2);
-    WRITEF(gmesa->buf, LineClipLengthThreshold,   0.0);
-    WRITEF(gmesa->buf, TriangleClipAreaThreshold, 0.0);
-
-    CHECK_DMA_BUFFER(gmesa, 5);
-    WRITE(gmesa->buf, GeometryMode, gmesa->GeometryMode);
-    WRITE(gmesa->buf, NormalizeMode, NormalizeModeDisable);
-    WRITE(gmesa->buf, LightingMode, gmesa->LightingMode);
-    WRITE(gmesa->buf, ColorMaterialMode, ColorMaterialModeDisable);
-    WRITE(gmesa->buf, MaterialMode, MaterialModeDisable);
-
-    CHECK_DMA_BUFFER(gmesa, 2);
-    WRITE(gmesa->buf, FrontSpecularExponent, 0); /* fixed point */
-    WRITE(gmesa->buf, BackSpecularExponent,  0); /* fixed point */
-
-    CHECK_DMA_BUFFER(gmesa, 29);
-    WRITEF(gmesa->buf, FrontAmbientColorRed,    0.2);
-    WRITEF(gmesa->buf, FrontAmbientColorGreen,  0.2);
-    WRITEF(gmesa->buf, FrontAmbientColorBlue,   0.2);
-    WRITEF(gmesa->buf, BackAmbientColorRed,     0.2);
-    WRITEF(gmesa->buf, BackAmbientColorGreen,   0.2);
-    WRITEF(gmesa->buf, BackAmbientColorBlue,    0.2);
-    WRITEF(gmesa->buf, FrontDiffuseColorRed,    0.8);
-    WRITEF(gmesa->buf, FrontDiffuseColorGreen,  0.8);
-    WRITEF(gmesa->buf, FrontDiffuseColorBlue,   0.8);
-    WRITEF(gmesa->buf, BackDiffuseColorRed,     0.8);
-    WRITEF(gmesa->buf, BackDiffuseColorGreen,   0.8);
-    WRITEF(gmesa->buf, BackDiffuseColorBlue,    0.8);
-    WRITEF(gmesa->buf, FrontSpecularColorRed,   0.0);
-    WRITEF(gmesa->buf, FrontSpecularColorGreen, 0.0);
-    WRITEF(gmesa->buf, FrontSpecularColorBlue,  0.0);
-    WRITEF(gmesa->buf, BackSpecularColorRed,    0.0);
-    WRITEF(gmesa->buf, BackSpecularColorGreen,  0.0);
-    WRITEF(gmesa->buf, BackSpecularColorBlue,   0.0);
-    WRITEF(gmesa->buf, FrontEmissiveColorRed,   0.0);
-    WRITEF(gmesa->buf, FrontEmissiveColorGreen, 0.0);
-    WRITEF(gmesa->buf, FrontEmissiveColorBlue,  0.0);
-    WRITEF(gmesa->buf, BackEmissiveColorRed,    0.0);
-    WRITEF(gmesa->buf, BackEmissiveColorGreen,  0.0);
-    WRITEF(gmesa->buf, BackEmissiveColorBlue,   0.0);
-    WRITEF(gmesa->buf, SceneAmbientColorRed,    0.2);
-    WRITEF(gmesa->buf, SceneAmbientColorGreen,  0.2);
-    WRITEF(gmesa->buf, SceneAmbientColorBlue,   0.2);
-    WRITEF(gmesa->buf, FrontAlpha,              1.0);
-    WRITEF(gmesa->buf, BackAlpha,               1.0);
-
-    CHECK_DMA_BUFFER(gmesa, 7);
-    WRITE(gmesa->buf, PointSize, 1);
-    WRITEF(gmesa->buf, AApointSize, 1.0);
-    WRITE(gmesa->buf, LineWidth, 1);
-    WRITEF(gmesa->buf, AAlineWidth, 1.0);
-    WRITE(gmesa->buf, LineWidthOffset, 0);
-    WRITE(gmesa->buf, TransformMode, gmesa->TransformMode);
-    WRITE(gmesa->buf, DeltaMode, gmesa->DeltaMode);
-
-    CHECK_DMA_BUFFER(gmesa, 16);
-    WRITE(gmesa->buf, Light0Mode,  LNM_Off);
-    WRITE(gmesa->buf, Light1Mode,  LNM_Off);
-    WRITE(gmesa->buf, Light2Mode,  LNM_Off);
-    WRITE(gmesa->buf, Light3Mode,  LNM_Off);
-    WRITE(gmesa->buf, Light4Mode,  LNM_Off);
-    WRITE(gmesa->buf, Light5Mode,  LNM_Off);
-    WRITE(gmesa->buf, Light6Mode,  LNM_Off);
-    WRITE(gmesa->buf, Light7Mode,  LNM_Off);
-    WRITE(gmesa->buf, Light8Mode,  LNM_Off);
-    WRITE(gmesa->buf, Light9Mode,  LNM_Off);
-    WRITE(gmesa->buf, Light10Mode, LNM_Off);
-    WRITE(gmesa->buf, Light11Mode, LNM_Off);
-    WRITE(gmesa->buf, Light12Mode, LNM_Off);
-    WRITE(gmesa->buf, Light13Mode, LNM_Off);
-    WRITE(gmesa->buf, Light14Mode, LNM_Off);
-    WRITE(gmesa->buf, Light15Mode, LNM_Off);
-
-    CHECK_DMA_BUFFER(gmesa, 22);
-    WRITEF(gmesa->buf, Light0AmbientIntensityBlue, 0.0);
-    WRITEF(gmesa->buf, Light0AmbientIntensityGreen, 0.0);
-    WRITEF(gmesa->buf, Light0AmbientIntensityRed, 0.0);
-    WRITEF(gmesa->buf, Light0DiffuseIntensityBlue, 1.0);
-    WRITEF(gmesa->buf, Light0DiffuseIntensityGreen, 1.0);
-    WRITEF(gmesa->buf, Light0DiffuseIntensityRed, 1.0);
-    WRITEF(gmesa->buf, Light0SpecularIntensityBlue, 1.0);
-    WRITEF(gmesa->buf, Light0SpecularIntensityGreen, 1.0);
-    WRITEF(gmesa->buf, Light0SpecularIntensityRed, 1.0);
-    WRITEF(gmesa->buf, Light0SpotlightDirectionZ, 0.0);
-    WRITEF(gmesa->buf, Light0SpotlightDirectionY, 0.0);
-    WRITEF(gmesa->buf, Light0SpotlightDirectionX, -1.0);
-    WRITEF(gmesa->buf, Light0SpotlightExponent, 0.0);
-    WRITEF(gmesa->buf, Light0PositionZ, 0.0);
-    WRITEF(gmesa->buf, Light0PositionY, 0.0);
-    WRITEF(gmesa->buf, Light0PositionX, 1.0);
-    WRITEF(gmesa->buf, Light0PositionW, 0.0);
-    WRITEF(gmesa->buf, Light0CosSpotlightCutoffAngle, -1.0);
-    WRITEF(gmesa->buf, Light0ConstantAttenuation, 1.0);
-    WRITEF(gmesa->buf, Light0LinearAttenuation,   0.0);
-    WRITEF(gmesa->buf, Light0QuadraticAttenuation,0.0);
-
-    CHECK_DMA_BUFFER(gmesa, 2);
-    WRITEF(gmesa->buf, XBias, 0.0);
-    WRITEF(gmesa->buf, YBias, 0.0);
-
-    CHECK_DMA_BUFFER(gmesa, 6);
-    WRITEF(gmesa->buf, ViewPortScaleX, gmesa->driScreen->fbWidth/4);
-    WRITEF(gmesa->buf, ViewPortScaleY, gmesa->driScreen->fbHeight/4);
-    WRITEF(gmesa->buf, ViewPortScaleZ, 1.0f);
-    WRITEF(gmesa->buf, ViewPortOffsetX, gmesa->x);
-    WRITEF(gmesa->buf, ViewPortOffsetY, gmesa->y);
-    WRITEF(gmesa->buf, ViewPortOffsetZ, 0.0f);
-
-    CHECK_DMA_BUFFER(gmesa, 3);
-    WRITEF(gmesa->buf, Nz, 1.0);
-    WRITEF(gmesa->buf, Ny, 0.0);
-    WRITEF(gmesa->buf, Nx, 0.0);
-
-    /* Send the initialization commands to the HW */
-    FLUSH_DMA_BUFFER(gmesa);
-}
diff --git a/src/mesa/drivers/dri/gamma/gamma_lock.c b/src/mesa/drivers/dri/gamma/gamma_lock.c
deleted file mode 100644
index c58b59aa1b..0000000000
--- a/src/mesa/drivers/dri/gamma/gamma_lock.c
+++ /dev/null
@@ -1,60 +0,0 @@
-
-#include "gamma_context.h"
-#include "gamma_lock.h"
-#include "drirenderbuffer.h"
-
-#ifdef DEBUG_LOCKING
-char *prevLockFile = NULL;
-int prevLockLine = 0;
-#endif
-
-
-/* Update the hardware state.  This is called if another context has
- * grabbed the hardware lock, which includes the X server.  This
- * function also updates the driver's window state after the X server
- * moves, resizes or restacks a window -- the change will be reflected
- * in the drawable position and clip rects.  Since the X server grabs
- * the hardware lock when it changes the window state, this routine will
- * automatically be called after such a change.
- */
-void gammaGetLock( gammaContextPtr gmesa, GLuint flags )
-{
-   __DRIdrawable *dPriv = gmesa->driDrawable;
-   __DRIscreen *sPriv = gmesa->driScreen;
-
-   drmGetLock( gmesa->driFd, gmesa->hHWContext, flags );
-
-   /* The window might have moved, so we might need to get new clip
-    * rects.
-    *
-    * NOTE: This releases and regrabs the hw lock to allow the X server
-    * to respond to the DRI protocol request for new drawable info.
-    * Since the hardware state depends on having the latest drawable
-    * clip rects, all state checking must be done _after_ this call.
-    */
-   DRI_VALIDATE_DRAWABLE_INFO( sPriv, dPriv );
-
-   if ( gmesa->lastStamp != dPriv->lastStamp ) {
-      driUpdateFramebufferSize(gmesa->glCtx, dPriv);
-      gmesa->lastStamp = dPriv->lastStamp;
-      gmesa->new_state |= GAMMA_NEW_WINDOW | GAMMA_NEW_CLIP;
-   }
-
-   gmesa->numClipRects = dPriv->numClipRects;
-   gmesa->pClipRects = dPriv->pClipRects;
-
-#if 0
-   gmesa->dirty = ~0;
-
-   if ( sarea->ctxOwner != gmesa->hHWContext ) {
-      sarea->ctxOwner = gmesa->hHWContext;
-      gmesa->dirty = GAMMA_UPLOAD_ALL;
-   }
-
-   for ( i = 0 ; i < gmesa->lastTexHeap ; i++ ) {
-      if ( sarea->texAge[i] != gmesa->lastTexAge[i] ) {
-	 gammaAgeTextures( gmesa, i );
-      }
-   }
-#endif
-}
diff --git a/src/mesa/drivers/dri/gamma/gamma_lock.h b/src/mesa/drivers/dri/gamma/gamma_lock.h
deleted file mode 100644
index 2d117320da..0000000000
--- a/src/mesa/drivers/dri/gamma/gamma_lock.h
+++ /dev/null
@@ -1,84 +0,0 @@
-#ifndef __GAMMA_LOCK_H__
-#define __GAMMA_LOCK_H__
-
-extern void gammaGetLock( gammaContextPtr gmesa, GLuint flags );
-
-/* Turn DEBUG_LOCKING on to find locking conflicts.
- */
-#define DEBUG_LOCKING	0
-
-#if DEBUG_LOCKING
-extern char *prevLockFile;
-extern int prevLockLine;
-
-#define DEBUG_LOCK()							\
-   do {									\
-      prevLockFile = (__FILE__);					\
-      prevLockLine = (__LINE__);					\
-   } while (0)
-
-#define DEBUG_RESET()							\
-   do {									\
-      prevLockFile = 0;							\
-      prevLockLine = 0;							\
-   } while (0)
-
-#define DEBUG_CHECK_LOCK()						\
-   do {									\
-      if ( prevLockFile ) {						\
-	 fprintf( stderr,						\
-		  "LOCK SET!\n\tPrevious %s:%d\n\tCurrent: %s:%d\n",	\
-		  prevLockFile, prevLockLine, __FILE__, __LINE__ );	\
-	 exit( 1 );							\
-      }									\
-   } while (0)
-
-#else
-
-#define DEBUG_LOCK()
-#define DEBUG_RESET()
-#define DEBUG_CHECK_LOCK()
-
-#endif
-
-/*
- * !!! We may want to separate locks from locks with validation.  This
- * could be used to improve performance for those things commands that
- * do not do any drawing !!!
- */
-
-/* Lock the hardware and validate our state.
- */
-#define LOCK_HARDWARE( gmesa )						\
-   do {									\
-      char __ret = 0;							\
-      DEBUG_CHECK_LOCK();						\
-      DRM_CAS( gmesa->driHwLock, gmesa->hHWContext,			\
-	       (DRM_LOCK_HELD | gmesa->hHWContext), __ret );		\
-      if ( __ret )							\
-	 gammaGetLock( gmesa, 0 );					\
-      DEBUG_LOCK();							\
-   } while (0)
-
-/* Unlock the hardware.
- */
-#define UNLOCK_HARDWARE( gmesa )					\
-   do {									\
-      DRM_UNLOCK( gmesa->driFd,						\
-		  gmesa->driHwLock,					\
-		  gmesa->hHWContext );					\
-      DEBUG_RESET();							\
-   } while (0)
-
-#define GAMMAHW_LOCK( gmesa )						\
-   DRM_UNLOCK(gmesa->driFd, gmesa->driHwLock, gmesa->hHWContext);	\
-   DRM_SPINLOCK(&gmesa->driScreen->pSAREA->drawable_lock,		\
-		 gmesa->driScreen->drawLockID);				\
-   VALIDATE_DRAWABLE_INFO_NO_LOCK(gmesa);
-
-#define GAMMAHW_UNLOCK( gmesa )						\
-    DRM_SPINUNLOCK(&gmesa->driScreen->pSAREA->drawable_lock,		\
-		   gmesa->driScreen->drawLockID);			\
-    VALIDATE_DRAWABLE_INFO_NO_LOCK_POST(gmesa);
-
-#endif /* __GAMMA_LOCK_H__ */
diff --git a/src/mesa/drivers/dri/gamma/gamma_macros.h b/src/mesa/drivers/dri/gamma/gamma_macros.h
deleted file mode 100644
index d962dcdb56..0000000000
--- a/src/mesa/drivers/dri/gamma/gamma_macros.h
+++ /dev/null
@@ -1,323 +0,0 @@
-/**************************************************************************
-
-Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
-All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sub license, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice (including the
-next paragraph) shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
-IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
-ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-**************************************************************************/
-
-/*
- * Authors:
- *   Kevin E. Martin <kevin@precisioninsight.com>
- *
- */
-
-#ifndef _GAMMA_MACROS_H_
-#define _GAMMA_MACROS_H_
-
-#define DEBUG_DRMDMA
-#define DEBUG_ERRORS
-#define DEBUG_COMMANDS_NOT
-#define DEBUG_VERBOSE_NOT
-#define DEBUG_VERBOSE_EXTRA_NOT
-
-#define RANDOMIZE_COLORS_NOT
-#define TURN_OFF_CLEARS_NOT
-#define CULL_ALL_PRIMS_NOT
-#define TURN_OFF_DEPTH_NOT
-#define TURN_OFF_BLEND_NOT
-#define FAST_CLEAR_4_NOT
-#define FORCE_DEPTH32_NOT
-#define DONT_SEND_DMA_NOT
-#define TURN_OFF_FCP_NOT
-#define TURN_OFF_TEXTURES_NOT
-#define DO_VALIDATE
-
-#define GAMMA_DMA_BUFFER_SIZE 4096
-
-#if 0
-#define GAMMA_DMA_SEND_FLAGS    DRM_DMA_PRIORITY
-#define GAMMA_DMA_SEND_FLAGS    DRM_DMA_BLOCK
-#else
-/* MUST use non-blocking dma flags for drawable lock routines */
-#define GAMMA_DMA_SEND_FLAGS    0
-#endif
-
-#if 0
-#define GAMMA_DMA_GET_FLAGS     \
-    (DRM_DMA_SMALLER_OK | DRM_DMA_LARGER_OK | DRM_DMA_WAIT)
-#else
-#define GAMMA_DMA_GET_FLAGS     DRM_DMA_WAIT
-#endif
-
-#if defined(DEBUG_DRMDMA) || defined(DEBUG_COMMANDS) || defined(DEBUG_VERBOSE)
-#include <stdio.h>
-#endif
-
-/* Note: The argument to DEBUG_GLCMDS() _must_ be enclosed in parenthesis */
-#ifdef DEBUG_VERBOSE
-#define DEBUG_GLCMDS(s) printf s
-#else
-#define DEBUG_GLCMDS(s)
-#endif
-
-/* Note: The argument to DEBUG_DMACMDS() _must_ be enclosed in parenthesis */
-#ifdef DEBUG_DRMDMA
-#define DEBUG_DMACMDS(s) printf s
-#else
-#define DEBUG_DMACMDS(s)
-#endif
-
-/* Note: The argument to DEBUG_WRITE() _must_ be enclosed in parenthesis */
-#ifdef DEBUG_COMMANDS
-#define DEBUG_WRITE(s) printf s
-#else
-#define DEBUG_WRITE(s)
-#endif
-
-/* Note: The argument to DEBUG_ERROR() _must_ be enclosed in parenthesis */
-#ifdef DEBUG_ERRORS
-#define DEBUG_ERROR(s) printf s
-#else
-#define DEBUG_ERROR(s)
-#endif
-
-#define WRITEV(buf,val1,val2,val3,val4)                               \
-do {                                                                  \
-    buf++->i = 0x9C008300;                        \
-    buf++->f = val1;                                                   \
-    buf++->f = val2;                                                   \
-    buf++->f = val3;                                                   \
-    buf++->f = val4;                                                   \
-} while (0)
-
-#define WRITE(buf,reg,val)                                            \
-do {                                                                  \
-    buf++->i = Glint##reg##Tag;                                       \
-    buf++->i = val;                                                   \
-    DEBUG_WRITE(("WRITE(buf, %s, 0x%08x);\n", #reg, (int)val));       \
-} while (0)
-
-#define WRITEF(buf,reg,val)                                           \
-do {                                                                  \
-    buf++->i = Glint##reg##Tag;                                       \
-    buf++->f = val;                                                   \
-    DEBUG_WRITE(("WRITEF(buf, %s, %f);\n", #reg, (float)val));        \
-} while (0)
-
-#define CHECK_WC_DMA_BUFFER(gcp,n)                                    \
-do {                                                                  \
-    (gcp)->WCbufCount += (n<<1);                                      \
-} while (0)
-
-#define CHECK_DMA_BUFFER(gcp,n)                                   \
-do {                                                                  \
-    if ((gcp)->bufCount+(n<<1) >= (gcp)->bufSize)                     \
-	PROCESS_DMA_BUFFER(gcp);                                  \
-    (gcp)->bufCount += (n<<1);                                        \
-} while (0)
-
-#define CHECK_DMA_BUFFER2(gcp,n)                                   \
-do {                                                                  \
-    if ((gcp)->bufCount+n >= (gcp)->bufSize)                     \
-	PROCESS_DMA_BUFFER(gcp);                                  \
-    (gcp)->bufCount += n;                                        \
-} while (0)
-
-#define FLUSH_DMA_BUFFER(gcp)                                     \
-do {                                                                  \
-   if (gcp->bufCount)                                                \
-	PROCESS_DMA_BUFFER(gcp);                                  \
-} while (0)
-
-#ifdef DONT_SEND_DMA
-#define GET_DMA(fd, hHWCtx, n, idx, size)
-#define SEND_DMA(fd, hHWCtx,n, idx, cnt)
-#else
-#define GET_DMA(fd, hHWCtx, n, idx, size)                                  \
-do {                                                                       \
-    drmDMAReq dma;                                                         \
-    int retcode, i;                                                        \
-                                                                           \
-    dma.context       = (hHWCtx);                                          \
-    dma.send_count    = 0;                                                 \
-    dma.send_list     = NULL;                                              \
-    dma.send_sizes    = NULL;                                              \
-    dma.flags         = GAMMA_DMA_GET_FLAGS;                               \
-    dma.request_count = (n);                                               \
-    dma.request_size  = GAMMA_DMA_BUFFER_SIZE;                             \
-    dma.request_list  = (idx);                                             \
-    dma.request_sizes = (size);                                            \
-                                                                           \
-    do {                                                                   \
-	if ((retcode = drmDMA((fd), &dma))) {                              \
-	    DEBUG_DMACMDS(("drmDMA returned %d\n", retcode));              \
-	}                                                                  \
-    } while (!(dma).granted_count);                                        \
-                                                                           \
-    for (i = 0; i < (n); i++) {                                            \
-	(size)[i] >>= 2; /* Convert from bytes to words */                 \
-    }                                                                      \
-} while (0)
-
-#define SEND_DMA(fd, hHWCtx, n, idx, cnt)                                  \
-do {                                                                       \
-    drmDMAReq dma;                                                         \
-    int retcode, i;                                                        \
-                                                                           \
-    for (i = 0; i < (n); i++) {                                            \
-	(cnt)[i] <<= 2; /* Convert from words to bytes */                  \
-    }                                                                      \
-                                                                           \
-    dma.context       = (hHWCtx);                                          \
-    dma.send_count    = 1;                                                 \
-    dma.send_list     = (idx);                                             \
-    dma.send_sizes    = (cnt);                                             \
-    dma.flags         = GAMMA_DMA_SEND_FLAGS;                              \
-    dma.request_count = 0;                                                 \
-    dma.request_size  = 0;                                                 \
-    dma.request_list  = NULL;                                              \
-    dma.request_sizes = NULL;                                              \
-                                                                           \
-    if ((retcode = drmDMA((fd), &dma))) {                                  \
-	DEBUG_DMACMDS(("drmDMA returned %d\n", retcode));                  \
-    }                                                                      \
-                                                                           \
-    for (i = 0; i < (n); i++) {                                            \
-	(cnt)[i] = 0;                                                      \
-    }                                                                      \
-} while (0)
-#endif
-
-#define GET_FIRST_DMA(fd, hHWCtx, n, idx, size, buf, cnt, gPriv)           \
-do {                                                                       \
-    int i;                                                                 \
-                                                                           \
-    GET_DMA(fd, hHWCtx, n, idx, size);                                     \
-                                                                           \
-    for (i = 0; i < (n); i++) {                                            \
-	(buf)[i] = (dmaBuf)(gPriv)->bufs->list[(idx)[i]].address;          \
-	(cnt)[i] = 0;                                                      \
-    }                                                                      \
-} while (0)
-
-#define PROCESS_DMA_BUFFER_TOP_HALF(gcp)                                   \
-do {                                                                       \
-    SEND_DMA((gcp)->driFd,                        \
-	     (gcp)->hHWContext, 1, &(gcp)->bufIndex, &(gcp)->bufCount);    \
-} while (0)
-
-#define PROCESS_DMA_BUFFER_BOTTOM_HALF(gcp)                                \
-do {                                                                       \
-    GET_DMA((gcp)->driFd,                         \
-	    (gcp)->hHWContext, 1, &(gcp)->bufIndex, &(gcp)->bufSize);      \
-                                                                           \
-    (gcp)->buf =                                                           \
-	(dmaBuf)(gcp)->gammaScreen->bufs->list[(gcp)->bufIndex].address; \
-} while (0)
-
-#define PROCESS_DMA_BUFFER(gcp)                                        \
-do {                                                                       \
-    VALIDATE_DRAWABLE_INFO(gcp);                             \
-    PROCESS_DMA_BUFFER_TOP_HALF(gcp);                                      \
-    PROCESS_DMA_BUFFER_BOTTOM_HALF(gcp);                                   \
-} while (0)
-
-#ifdef DO_VALIDATE
-#define VALIDATE_DRAWABLE_INFO_NO_LOCK(gcp)                                \
-do {                                                                       \
-    /*__DRIscreen *psp = gcp->driScreen;*/                          \
-    __DRIdrawable *pdp = gcp->driDrawable;                          \
-                                                                           \
-    if (*(pdp->pStamp) != pdp->lastStamp) {                                \
-	int old_index = pdp->index;                                        \
-	while (*(pdp->pStamp) != pdp->lastStamp) {                         \
-	    DRI_VALIDATE_DRAWABLE_INFO_ONCE(pdp);                          \
-        }                                                                  \
-	if (pdp->index != old_index) {                                     \
-	    gcp->Window &= ~W_GIDMask;                                     \
-	    gcp->Window |= (pdp->index << 5);                              \
-	    CHECK_WC_DMA_BUFFER(gcp, 1);                                   \
-	    WRITE(gcp->WCbuf, GLINTWindow, gcp->Window|(gcp->FrameCount<<9));\
-	}                                                                  \
-									   \
-	gammaUpdateViewportOffset( gcp->glCtx);				   \
-                                                                           \
-	if (pdp->numClipRects == 1 &&                                      \
-	    pdp->pClipRects->x1 ==  pdp->x &&                              \
-	    pdp->pClipRects->x2 == (pdp->x+pdp->w) &&                      \
-	    pdp->pClipRects->y1 ==  pdp->y &&                              \
-	    pdp->pClipRects->y2 == (pdp->y+pdp->h)) {                      \
-	    CHECK_WC_DMA_BUFFER(gcp, 1);                                   \
-	    WRITE(gcp->WCbuf, Rectangle2DControl, 0);                     \
-	    gcp->NotClipped = GL_TRUE;                                     \
-	} else {                                                           \
-	    CHECK_WC_DMA_BUFFER(gcp, 1);                                   \
-	    WRITE(gcp->WCbuf, Rectangle2DControl, 1);                     \
-	    gcp->NotClipped = GL_FALSE;                                    \
-	}                                                                  \
-	gcp->WindowChanged = GL_TRUE;                                      \
-                                                                           \
-	if (gcp->WCbufCount) {                                             \
-	    SEND_DMA((gcp)->gammaScreen->driScreen->fd,                \
-		     (gcp)->hHWContext, 1, &(gcp)->WCbufIndex,             \
-		     &(gcp)->WCbufCount);                                  \
-	    (gcp)->WCbufIndex = -1;                                        \
-	}                                                                  \
-    }                                                                      \
-} while (0)
-
-#define VALIDATE_DRAWABLE_INFO_NO_LOCK_POST(gcp)                       \
-do {                                                                       \
-    if ((gcp)->WCbufIndex < 0) {                                           \
-	GET_DMA((gcp)->gammaScreen->driScreen->fd,                     \
-		(gcp)->hHWContext, 1, &(gcp)->WCbufIndex,                  \
-		&(gcp)->WCbufSize);                                        \
-                                                                           \
-	(gcp)->WCbuf =                                                     \
-	    (dmaBuf)(gcp)->gammaScreen->bufs->                           \
-		list[(gcp)->WCbufIndex].address;                           \
-    }                                                                      \
-} while (0)
-
-#define VALIDATE_DRAWABLE_INFO(gcp)                                    \
-do {                                                                       \
-    __DRIscreen *psp = gcp->driScreen;                          \
-if (gcp->driDrawable) { \
-    DRM_SPINLOCK(&psp->pSAREA->drawable_lock, psp->drawLockID);            \
-    VALIDATE_DRAWABLE_INFO_NO_LOCK(gcp);                               \
-    DRM_SPINUNLOCK(&psp->pSAREA->drawable_lock, psp->drawLockID);          \
-    VALIDATE_DRAWABLE_INFO_NO_LOCK_POST(gcp);                          \
-} \
-} while (0)
-#else
-#define VALIDATE_DRAWABLE_INFO(gcp)
-#endif
-
-#define CALC_LOG2(l2,s)                       \
-do {                                          \
-    int __s = s;                              \
-    l2 = 0;                                   \
-    while (__s > 1) { ++l2; __s >>= 1; }      \
-} while (0)
-
-#endif /* _GAMMA_MACROS_H_ */
diff --git a/src/mesa/drivers/dri/gamma/gamma_regs.h b/src/mesa/drivers/dri/gamma/gamma_regs.h
deleted file mode 100644
index 9e1c735019..0000000000
--- a/src/mesa/drivers/dri/gamma/gamma_regs.h
+++ /dev/null
@@ -1,658 +0,0 @@
-/**************************************************************************
-
-Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
-All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sub license, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice (including the
-next paragraph) shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
-IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
-ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-**************************************************************************/
-
-/*
- * Authors:
- *   Kevin E. Martin <kevin@precisioninsight.com>
- *
- */
-
-#ifndef _GAMMA_REGS_H_
-#define _GAMMA_REGS_H_
-
-#include "gamma_client.h"
-
-/**************** MX FLAGS ****************/
-/* FBReadMode */
-#define FBReadSrcDisable              0x00000000
-#define FBReadSrcEnable               0x00000200
-#define FBReadDstDisable              0x00000000
-#define FBReadDstEnable               0x00000400
-#define FBDataTypeDefault             0x00000000
-#define FBDataTypeColor               0x00008000
-#define FBWindowOriginTop             0x00000000
-#define FBWindowOriginBot             0x00010000
-#define FBScanLineInt1                0x00000000
-#define FBScanLineInt2                0x00800000
-#define FBScanLineInt4                0x01000000
-#define FBScanLineInt8                0x01800000
-#define FBSrcAddrConst                0x00000000
-#define FBSrcAddrIndex                0x10000000
-#define FBSrcAddrCoord                0x20000000
-
-/* LBReadMode */
-#define LBPartialProdMask             0x000001ff
-#define LBReadSrcDisable              0x00000000
-#define LBReadSrcEnable               0x00000200
-#define LBReadDstDisable              0x00000000
-#define LBReadDstEnable               0x00000400
-#define LBDataTypeDefault             0x00000000
-#define LBDataTypeStencil             0x00010000
-#define LBDataTypeDepth               0x00020000
-#define LBWindowOriginTop             0x00000000
-#define LBWindowOriginBot             0x00040000
-#define LBScanLineInt1                0x00000000
-#define LBScanLineInt2                0x00100000
-#define LBScanLineInt4                0x00200000
-#define LBScanLineInt8                0x00300000
-
-/* ColorDDAMode */
-#define ColorDDADisable               0x00000000
-#define ColorDDAEnable                0x00000001
-#define ColorDDAFlat                  0x00000000
-#define ColorDDAGouraud               0x00000002
-#define ColorDDAShadingMask           0x00000002
-
-/* AlphaTestMode */
-#define AlphaTestModeDisable          0x00000000
-#define AlphaTestModeEnable           0x00000001
-#define AT_Never                      0x00000000
-#define AT_Less                       0x00000002
-#define AT_Equal                      0x00000004
-#define AT_LessEqual                  0x00000006
-#define AT_Greater                    0x00000008
-#define AT_NotEqual                   0x0000000a
-#define AT_GreaterEqual               0x0000000c
-#define AT_Always                     0x0000000e
-#define AT_CompareMask                0x0000000e
-#define AT_RefValueMask               0x00000ff0
-
-/* AlphaBlendMode */
-#define AlphaBlendModeDisable         0x00000000
-#define AlphaBlendModeEnable          0x00000001
-#define AB_Src_Zero                   0x00000000
-#define AB_Src_One                    0x00000002
-#define AB_Src_DstColor               0x00000004
-#define AB_Src_OneMinusDstColor       0x00000006
-#define AB_Src_SrcAlpha               0x00000008
-#define AB_Src_OneMinusSrcAlpha       0x0000000a
-#define AB_Src_DstAlpha               0x0000000c
-#define AB_Src_OneMinusDstAlpha       0x0000000e
-#define AB_Src_SrcAlphaSaturate       0x00000010
-#define AB_SrcBlendMask               0x0000001e
-#define AB_Dst_Zero                   0x00000000
-#define AB_Dst_One                    0x00000020
-#define AB_Dst_SrcColor               0x00000040
-#define AB_Dst_OneMinusSrcColor       0x00000060
-#define AB_Dst_SrcAlpha               0x00000080
-#define AB_Dst_OneMinusSrcAlpha       0x000000a0
-#define AB_Dst_DstAlpha               0x000000c0
-#define AB_Dst_OneMinusDstAlpha       0x000000e0
-#define AB_DstBlendMask               0x000000e0
-#define AB_ColorFmt_8888              0x00000000
-#define AB_ColorFmt_5555              0x00000100
-#define AB_ColorFmt_4444              0x00000200
-#define AB_ColorFmt_4444Front         0x00000300
-#define AB_ColorFmt_4444Back          0x00000400
-#define AB_ColorFmt_332Front          0x00000500
-#define AB_ColorFmt_332Back           0x00000600
-#define AB_ColorFmt_121Front          0x00000700
-#define AB_ColorFmt_121Back           0x00000800
-#define AB_ColorFmt_555Back           0x00000d00
-#define AB_ColorFmt_CI8               0x00000e00
-#define AB_ColorFmt_CI4               0x00000f00
-#define AB_AlphaBufferPresent         0x00000000
-#define AB_NoAlphaBufferPresent       0x00001000
-#define AB_ColorOrder_BGR             0x00000000
-#define AB_ColorOrder_RGB             0x00002000
-#define AB_OpenGLType                 0x00000000
-#define AB_QuickDraw3DType            0x00004000
-#define AB_AlphaDst_FBData            0x00000000
-#define AB_AlphaDst_FBSourceData      0x00008000
-#define AB_ColorConversionScale       0x00000000
-#define AB_ColorConversionShift       0x00010000
-#define AB_AlphaConversionScale       0x00000000
-#define AB_AlphaConversionShift       0x00020000
-
-/* AntialiasMode */
-#define AntialiasModeDisable          0x00000000
-#define AntialiasModeEnable           0x00000001
-
-/* AreaStippleMode */
-#define AreaStippleModeDisable        0x00000000
-#define AreaStippleModeEnable         0x00000001
-#define ASM_X32                       0x00000008
-#define ASM_Y32                       0x00000040
-
-/* DepthMode */
-#define DepthModeDisable              0x00000000
-#define DepthModeEnable               0x00000001
-#define DM_WriteMask                  0x00000002
-#define DM_SourceFragment             0x00000000
-#define DM_SourceLBData               0x00000004
-#define DM_SourceDepthRegister        0x00000008
-#define DM_SourceLBSourceData         0x0000000c
-#define DM_SourceMask                 0x0000000c
-#define DM_Never                      0x00000000
-#define DM_Less                       0x00000010
-#define DM_Equal                      0x00000020
-#define DM_LessEqual                  0x00000030
-#define DM_Greater                    0x00000040
-#define DM_NotEqual                   0x00000050
-#define DM_GreaterEqual               0x00000060
-#define DM_Always                     0x00000070
-#define DM_CompareMask                0x00000070
-
-/* FBWriteMode */
-#define FBWriteModeDisable            0x00000000
-#define FBWriteModeEnable             0x00000001
-#define FBW_UploadColorData           0x00000008
-
-/* FogMode */
-#define FogModeDisable                0x00000000
-#define FogModeEnable                 0x00000001
-
-/* LBWriteMode */
-#define LBWriteModeDisable            0x00000000
-#define LBWriteModeEnable             0x00000001
-#define LBW_UploadNone                0x00000000
-#define LBW_UploadDepth               0x00000002
-#define LBW_UploadStencil             0x00000004
-
-/* LBRead/Write Format */
-#define LBRF_DepthWidth15   0x03  /* only permedia */
-#define LBRF_DepthWidth16   0x00
-#define LBRF_DepthWidth24   0x01
-#define LBRF_DepthWidth32   0x02
-#define LBRF_StencilWidth0  (0 << 2)
-#define LBRF_StencilWidth4  (1 << 2)
-#define LBRF_StencilWidth8  (2 << 2)
-#define LBRF_StencilPos16   (0 << 4)
-#define LBRF_StencilPos20   (1 << 4)
-#define LBRF_StencilPos24   (2 << 4)
-#define LBRF_StencilPos28   (3 << 4)
-#define LBRF_StencilPos32   (4 << 4)
-#define LBRF_FrameCount0    (0 << 7)
-#define LBRF_FrameCount4    (1 << 7)
-#define LBRF_FrameCount8    (2 << 7)
-#define LBRF_FrameCountPos16  (0 << 9)
-#define LBRF_FrameCountPos20  (1 << 9)
-#define LBRF_FrameCountPos24  (2 << 9)
-#define LBRF_FrameCountPos28  (3 << 9)
-#define LBRF_FrameCountPos32  (4 << 9)
-#define LBRF_FrameCountPos36  (5 << 9)
-#define LBRF_FrameCountPos40  (6 << 9)
-#define LBRF_GIDWidth0 (0 << 12)
-#define LBRF_GIDWidth4 (1 << 12)
-#define LBRF_GIDPos16  (0 << 13)
-#define LBRF_GIDPos20  (1 << 13)
-#define LBRF_GIDPos24  (2 << 13)
-#define LBRF_GIDPos28  (3 << 13)
-#define LBRF_GIDPos32  (4 << 13)
-#define LBRF_GIDPos36  (5 << 13)
-#define LBRF_GIDPos40  (6 << 13)
-#define LBRF_GIDPos44  (7 << 13)
-#define LBRF_GIDPos48  (8 << 13)
-#define LBRF_Compact32  (1 << 17)
-
-/* StencilMode */
-#define StencilDisable                0x00000000
-#define StencilEnable                 0x00000001
-
-/* RouterMode */
-#define R_Order_TextureDepth          0x00000000
-#define R_Order_DepthTexture          0x00000001
-
-/* ScissorMode */
-#define UserScissorDisable            0x00000000
-#define UserScissorEnable             0x00000001
-#define ScreenScissorDisable          0x00000000
-#define ScreenScissorEnable           0x00000002
-
-/* DitherMode */
-#define DitherModeDisable             0x00000000
-#define DitherModeEnable              0x00000001
-#define DM_DitherDisable              0x00000000
-#define DM_DitherEnable               0x00000002
-#define DM_ColorFmt_8888              0x00000000
-#define DM_ColorFmt_5555              0x00000004
-#define DM_ColorFmt_4444              0x00000008
-#define DM_ColorFmt_4444Front         0x0000000c
-#define DM_ColorFmt_4444Back          0x00000010
-#define DM_ColorFmt_332Front          0x00000014
-#define DM_ColorFmt_332Back           0x00000018
-#define DM_ColorFmt_121Front          0x0000001c
-#define DM_ColorFmt_121Back           0x00000020
-#define DM_ColorFmt_555Back           0x00000024
-#define DM_ColorFmt_CI8               0x00000028
-#define DM_ColorFmt_CI4               0x0000002c
-#define DM_XOffsetMask                0x000000c0
-#define DM_YOffsetMask                0x00000300
-#define DM_ColorOrder_BGR             0x00000000
-#define DM_ColorOrder_RGB             0x00000400
-#define DM_AlphaDitherDefault         0x00000000
-#define DM_AlphaDitherNone            0x00004000
-#define DM_Truncate                   0x00000000
-#define DM_Round                      0x00008000
-
-/* RasterizerMode */
-#define RM_MirrorBitMask              0x00000001
-#define RM_InvertBitMask              0x00000002
-#define RM_FractionAdjNo              0x00000000
-#define RM_FractionAdjZero            0x00000004
-#define RM_FractionAdjHalf            0x00000008
-#define RM_FractionAdjNearHalf        0x0000000c
-#define RM_BiasCoordZero              0x00000000
-#define RM_BiasCoordHalf              0x00000010
-#define RM_BiasCoordNearHalf          0x00000020
-#define RM_BitMaskByteSwap_ABCD       0x00000000
-#define RM_BitMaskByteSwap_BADC       0x00000080
-#define RM_BitMaskByteSwap_CDAB       0x00000100
-#define RM_BitMaskByteSwap_DCBA       0x00000180
-#define RM_BitMaskPacked              0x00000000
-#define RM_BitMaskEveryScanline       0x00000200
-#define RM_BitMaskOffsetMask          0x00007c00
-#define RM_HostDataByteSwap_ABCD      0x00000000
-#define RM_HostDataByteSwap_BADC      0x00008000
-#define RM_HostDataByteSwap_CDAB      0x00010000
-#define RM_HostDataByteSwap_DCBA      0x00018000
-#define RM_SingleGLINT                0x00000000
-#define RM_MultiGLINT                 0x00020000
-#define RM_YLimitsEnable              0x00040000
-
-/* Window */
-#define WindowDisable                 0x00000000
-#define WindowEnable                  0x00000001
-#define W_AlwaysPass                  0x00000000
-#define W_NeverPass                   0x00000002
-#define W_PassIfEqual                 0x00000004
-#define W_PassIfNotEqual              0x00000006
-#define W_CompareMask                 0x00000006
-#define W_ForceLBUpdate               0x00000008
-#define W_LBUpdateFromSource          0x00000000
-#define W_LBUpdateFromRegisters       0x00000010
-#define W_GIDMask                     0x000001e0
-#define W_FrameCountMask              0x0001fe00
-#define W_StencilFCP                  0x00020000
-#define W_DepthFCP                    0x00040000
-#define W_OverrideWriteFiltering      0x00080000
-
-/* TextureAddressMode */
-#define TextureAddressModeDisable     0x00000000
-#define TextureAddressModeEnable      0x00000001
-#define TAM_SWrap_Clamp               0x00000000
-#define TAM_SWrap_Repeat              0x00000002
-#define TAM_SWrap_Mirror              0x00000004
-#define TAM_SWrap_Mask                0x00000006
-#define TAM_TWrap_Clamp               0x00000000
-#define TAM_TWrap_Repeat              0x00000008
-#define TAM_TWrap_Mirror              0x00000010
-#define TAM_TWrap_Mask                0x00000018
-#define TAM_Operation_2D              0x00000000
-#define TAM_Operation_3D              0x00000020
-#define TAM_InhibitDDAInit            0x00000040
-#define TAM_LODDisable                0x00000000
-#define TAM_LODEnable                 0x00000080
-#define TAM_DY_Disable                0x00000000
-#define TAM_DY_Enable                 0x00000100
-#define TAM_WidthMask                 0x00001e00
-#define TAM_HeightMask                0x0001e000
-#define TAM_TexMapType_1D             0x00000000
-#define TAM_TexMapType_2D             0x00020000
-#define TAM_TexMapType_Mask           0x00020000
-
-/* TextureReadMode */
-#define TextureReadModeDisable        0x00000000
-#define TextureReadModeEnable         0x00000001
-#define TRM_WidthMask                 0x0000001e
-#define TRM_HeightMask                0x000001e0
-#define TRM_Depth1                    0x00000000
-#define TRM_Depth2                    0x00000200
-#define TRM_Depth4                    0x00000400
-#define TRM_Depth8                    0x00000600
-#define TRM_Depth16                   0x00000800
-#define TRM_Depth32                   0x00000a00
-#define TRM_DepthMask                 0x00000e00
-#define TRM_Border                    0x00001000
-#define TRM_Patch                     0x00002000
-#define TRM_Mag_Nearest               0x00000000
-#define TRM_Mag_Linear                0x00004000
-#define TRM_Mag_Mask                  0x00004000
-#define TRM_Min_Nearest               0x00000000
-#define TRM_Min_Linear                0x00008000
-#define TRM_Min_NearestMMNearest      0x00010000
-#define TRM_Min_NearestMMLinear       0x00018000
-#define TRM_Min_LinearMMNearest       0x00020000
-#define TRM_Min_LinearMMLinear        0x00028000
-#define TRM_Min_Mask                  0x00038000
-#define TRM_UWrap_Clamp               0x00000000
-#define TRM_UWrap_Repeat              0x00040000
-#define TRM_UWrap_Mirror              0x00080000
-#define TRM_UWrap_Mask                0x000c0000
-#define TRM_VWrap_Clamp               0x00000000
-#define TRM_VWrap_Repeat              0x00100000
-#define TRM_VWrap_Mirror              0x00200000
-#define TRM_VWrap_Mask                0x00300000
-#define TRM_TexMapType_1D             0x00000000
-#define TRM_TexMapType_2D             0x00400000
-#define TRM_TexMapType_Mask           0x00400000
-#define TRM_MipMapDisable             0x00000000
-#define TRM_MipMapEnable              0x00800000
-#define TRM_PrimaryCacheDisable       0x00000000
-#define TRM_PrimaryCacheEnable        0x01000000
-#define TRM_FBSourceAddr_None         0x00000000
-#define TRM_FBSourceAddr_Index        0x02000000
-#define TRM_FBSourceAddr_Coord        0x04000000
-#define TRM_BorderClamp               0x08000000
-
-/* TextureColorMode */
-#define TextureColorModeDisable       0x00000000
-#define TextureColorModeEnable        0x00000001
-#define TCM_Modulate                  0x00000000
-#define TCM_Decal                     0x00000002
-#define TCM_Blend                     0x00000004
-#define TCM_Replace                   0x00000006
-#define TCM_ApplicationMask           0x0000000e
-#define TCM_OpenGLType                0x00000000
-#define TCM_QuickDraw3DType           0x00000010
-#define TCM_KdDDA_Disable             0x00000000
-#define TCM_KdDDA_Enable              0x00000020
-#define TCM_KsDDA_Disable             0x00000000
-#define TCM_KsDDA_Enable              0x00000040
-#define TCM_BaseFormat_Alpha          0x00000000
-#define TCM_BaseFormat_Lum            0x00000080
-#define TCM_BaseFormat_LumAlpha       0x00000100
-#define TCM_BaseFormat_Intensity      0x00000180
-#define TCM_BaseFormat_RGB            0x00000200
-#define TCM_BaseFormat_RGBA           0x00000280
-#define TCM_BaseFormatMask            0x00000380
-#define TCM_LoadMode_None             0x00000000
-#define TCM_LoadMode_Ks               0x00000400
-#define TCM_LoadMode_Kd               0x00000800
-
-/* TextureCacheControl */
-#define TCC_Invalidate                0x00000001
-#define TCC_Disable                   0x00000000
-#define TCC_Enable                    0x00000002
-
-/* TextureFilterMode */
-#define TextureFilterModeDisable      0x00000000
-#define TextureFilterModeEnable       0x00000001
-#define TFM_AlphaMapEnable            0x00000002
-#define TFM_AlphaMapSense             0x00000004
-
-/* TextureFormat */
-#define TF_LittleEndian               0x00000000
-#define TF_BigEndian                  0x00000001
-#define TF_16Bit_565                  0x00000000
-#define TF_16Bit_555                  0x00000002
-#define TF_ColorOrder_BGR             0x00000000
-#define TF_ColorOrder_RGB             0x00000004
-#define TF_Compnents_1                0x00000000
-#define TF_Compnents_2                0x00000008
-#define TF_Compnents_3                0x00000010
-#define TF_Compnents_4                0x00000018
-#define TF_CompnentsMask              0x00000018
-#define TF_OutputFmt_Texel            0x00000000
-#define TF_OutputFmt_Color            0x00000020
-#define TF_OutputFmt_BitMask          0x00000040
-#define TF_OutputFmtMask              0x00000060
-#define TF_MirrorEnable               0x00000080
-#define TF_InvertEnable               0x00000100
-#define TF_ByteSwapEnable             0x00000200
-#define TF_LUTOffsetMask              0x0003fc00
-#define TF_OneCompFmt_Lum             0x00000000
-#define TF_OneCompFmt_Alpha           0x00040000
-#define TF_OneCompFmt_Intensity        0x00080000
-#define TF_OneCompFmt_Mask            0x000c0000
-/**************** MX FLAGS ****************/
-
-/************** GAMMA FLAGS ***************/
-/* GeometryMode */
-#define GM_TextureDisable             0x00000000
-#define GM_TextureEnable              0x00000001
-#define GM_FogDisable                 0x00000000
-#define GM_FogEnable                  0x00000002
-#define GM_FogLinear                  0x00000000
-#define GM_FogExp                     0x00000004
-#define GM_FogExpSquared              0x00000008
-#define GM_FogMask                    0x0000000C
-#define GM_FrontPolyPoint             0x00000000
-#define GM_FrontPolyLine              0x00000010
-#define GM_FrontPolyFill              0x00000020
-#define GM_BackPolyPoint              0x00000000
-#define GM_BackPolyLine               0x00000040
-#define GM_BackPolyFill               0x00000080
-#define GM_FB_PolyMask                0x000000F0
-#define GM_FrontFaceCW                0x00000000
-#define GM_FrontFaceCCW               0x00000100
-#define GM_FFMask                     0x00000100
-#define GM_PolyCullDisable            0x00000000
-#define GM_PolyCullEnable             0x00000200
-#define GM_PolyCullFront              0x00000000
-#define GM_PolyCullBack               0x00000400
-#define GM_PolyCullBoth               0x00000800
-#define GM_PolyCullMask               0x00000c00
-#define GM_ClipShortLinesDisable      0x00000000
-#define GM_ClipShortLinesEnable       0x00001000
-#define GM_ClipSmallTrisDisable       0x00000000
-#define GM_ClipSmallTrisEnable        0x00002000
-#define GM_RenderMode                 0x00000000
-#define GM_SelectMode                 0x00004000
-#define GM_FeedbackMode               0x00008000
-#define GM_Feedback2D                 0x00000000
-#define GM_Feedback3D                 0x00010000
-#define GM_Feedback3DColor            0x00020000
-#define GM_Feedback3DColorTexture     0x00030000
-#define GM_Feedback4DColorTexture     0x00040000
-#define GM_CullFaceNormDisable        0x00000000
-#define GM_CullFaceNormEnable         0x00080000
-#define GM_AutoFaceNormDisable        0x00000000
-#define GM_AutoFaceNormEnable         0x00100000
-#define GM_GouraudShading             0x00000000
-#define GM_FlatShading                0x00200000
-#define GM_ShadingMask                0x00200000
-#define GM_UserClipNone               0x00000000
-#define GM_UserClip0                  0x00400000
-#define GM_UserClip1                  0x00800000
-#define GM_UserClip2                  0x01000000
-#define GM_UserClip3                  0x02000000
-#define GM_UserClip4                  0x04000000
-#define GM_UserClip5                  0x08000000
-#define GM_PolyOffsetPointDisable     0x00000000
-#define GM_PolyOffsetPointEnable      0x10000000
-#define GM_PolyOffsetLineDisable      0x00000000
-#define GM_PolyOffsetLineEnable       0x20000000
-#define GM_PolyOffsetFillDisable      0x00000000
-#define GM_PolyOffsetFillEnable       0x40000000
-#define GM_InvertFaceNormCullDisable  0x00000000
-#define GM_InvertFaceNormCullEnable   0x80000000
-
-/* Begin */
-#define B_AreaStippleDisable          0x00000000
-#define B_AreaStippleEnable           0x00000001
-#define B_LineStippleDisable          0x00000000
-#define B_LineStippleEnable           0x00000002
-#define B_AntiAliasDisable            0x00000000
-#define B_AntiAliasEnable             0x00000100
-#define B_TextureDisable              0x00000000
-#define B_TextureEnable               0x00002000
-#define B_FogDisable                  0x00000000
-#define B_FogEnable                   0x00004000
-#define B_SubPixelCorrectDisable      0x00000000
-#define B_SubPixelCorrectEnable       0x00010000
-#define B_PrimType_Null               0x00000000
-#define B_PrimType_Points             0x10000000
-#define B_PrimType_Lines              0x20000000
-#define B_PrimType_LineLoop           0x30000000
-#define B_PrimType_LineStrip          0x40000000
-#define B_PrimType_Triangles          0x50000000
-#define B_PrimType_TriangleStrip      0x60000000
-#define B_PrimType_TriangleFan        0x70000000
-#define B_PrimType_Quads              0x80000000
-#define B_PrimType_QuadStrip          0x90000000
-#define B_PrimType_Polygon            0xa0000000
-#define B_PrimType_Mask               0xf0000000
-
-/* EdgeFlag */
-#define EdgeFlagDisable               0x00000000
-#define EdgeFlagEnable                0x00000001
-
-/* NormalizeMode */
-#define NormalizeModeDisable          0x00000000
-#define NormalizeModeEnable           0x00000001
-#define FaceNormalDisable             0x00000000
-#define FaceNormalEnable              0x00000002
-#define InvertAutoFaceNormal          0x00000004
-
-/* LightingMode */
-#define LightingModeDisable           0x00000000
-#define LightingModeEnable            0x00000001
-#define LightingModeTwoSides          0x00000004
-#define LightingModeLocalViewer       0x00000008
-#define LightingModeSpecularEnable    0x00008000
-
-/* Light0Mode */
-#define Light0ModeDisable             0x00000000
-#define Light0ModeEnable              0x00000001
-#define Light0ModeSpotLight           0x00000002
-#define Light0ModeAttenuation         0x00000004
-#define Light0ModeLocal               0x00000008
-
-/* Light0Mode */
-#define Light1ModeDisable             0x00000000
-#define Light1ModeEnable              0x00000001
-#define Light1ModeSpotLight           0x00000002
-#define Light1ModeAttenuation         0x00000004
-#define Light1ModeLocal               0x00000008
-
-/* ColorMaterialMode */
-#define ColorMaterialModeDisable      0x00000000
-#define ColorMaterialModeEnable       0x00000001
-#define ColorMaterialModeFront        0x00000000
-#define ColorMaterialModeBack         0x00000002
-#define ColorMaterialModeFrontAndBack 0x00000004
-#define ColorMaterialModeEmission     0x00000000
-#define ColorMaterialModeAmbient      0x00000008
-#define ColorMaterialModeDiffuse      0x00000010
-#define ColorMaterialModeSpecular     0x00000018
-#define ColorMaterialModeAmbAndDiff   0x00000020
-#define ColorMaterialModeMask         0x0000003e
-
-/* MaterialMode */
-#define MaterialModeDisable           0x00000000
-#define MaterialModeEnable            0x00000001
-#define MaterialModeTwoSides          0x00000080
-
-/* DeltaMode */
-#define DM_Target300SX                0x00000000
-#define DM_Target500TXMX              0x00000001
-#define DM_Depth16                    0x00000004
-#define DM_Depth24                    0x00000008
-#define DM_Depth32                    0x0000000c
-#define DM_FogEnable                  0x00000010
-#define DM_TextureEnable              0x00000020
-#define DM_SmoothShadingEnable        0x00000040
-#define DM_DepthEnable                0x00000080
-#define DM_SpecularEnable             0x00000100
-#define DM_DiffuseEnable              0x00000200
-#define DM_SubPixlCorrectionEnable    0x00000400
-#define DM_DiamondExit                0x00000800
-#define DM_NoDraw                     0x00001000
-#define DM_ClampEnable                0x00002000
-#define DM_TextureParameterAsGiven    0x00000000
-#define DM_TextureParameterClamped    0x00004000
-#define DM_TextureParameterNormalized 0x00008000
-#define DM_BiasCoords                 0x00080000
-#define DM_ColorDiffuse               0x00100000
-#define DM_ColorSpecular              0x00200000
-#define DM_FlatShadingMethod          0x00400000
-
-/* PointMode */
-#define PM_AntialiasDisable           0x00000000
-#define PM_AntialiasEnable            0x00000001
-#define PM_AntialiasQuality_4x4       0x00000000
-#define PM_AntialiasQuality_8x8       0x00000002
-
-/* LogicalOpMode */
-#define LogicalOpModeDisable          0x00000000
-#define LogicalOpModeEnable           0x00000001
-#define LogicalOpModeMask             0x0000001e
-
-/* LineMode */
-#define LM_StippleDisable             0x00000000
-#define LM_StippleEnable              0x00000001
-#define LM_RepeatFactorMask           0x000003fe
-#define LM_StippleMask                0x03fffc00
-#define LM_MirrorDisable              0x00000000
-#define LM_MirrorEnable               0x04000000
-#define LM_AntialiasDisable           0x00000000
-#define LM_AntialiasEnable            0x08000000
-#define LM_AntialiasQuality_4x4       0x00000000
-#define LM_AntialiasQuality_8x8       0x10000000
-
-/* TriangleMode */
-#define TM_AntialiasDisable           0x00000000
-#define TM_AntialiasEnable            0x00000001
-#define TM_AntialiasQuality_4x4       0x00000000
-#define TM_AntialiasQuality_8x8       0x00000002
-#define TM_UseTriPacketInterface      0x00000004
-
-/* TransformMode */
-#define XM_UseModelViewMatrix         0x00000001
-#define XM_UseModelViewProjMatrix     0x00000002
-#define XM_XformNormals               0x00000004
-#define XM_XformFaceNormals           0x00000008
-#define XM_XformTexture               0x00000010
-#define XM_XMask                      0x00000013
-#define XM_TexGenModeS_None           0x00000000
-#define XM_TexGenModeS_ObjLinear      0x00000020
-#define XM_TexGenModeS_EyeLinear      0x00000040
-#define XM_TexGenModeS_SphereMap      0x00000060
-#define XM_TexGenModeT_None           0x00000000
-#define XM_TexGenModeT_ObjLinear      0x00000080
-#define XM_TexGenModeT_EyeLinear      0x00000100
-#define XM_TexGenModeT_SphereMap      0x00000180
-#define XM_TexGenModeR_None           0x00000000
-#define XM_TexGenModeR_ObjLinear      0x00000200
-#define XM_TexGenModeR_EyeLinear      0x00000400
-#define XM_TexGenModeR_SphereMap      0x00000600
-#define XM_TexGenModeQ_None           0x00000000
-#define XM_TexGenModeQ_ObjLinear      0x00000800
-#define XM_TexGenModeQ_EyeLinear      0x00001000
-#define XM_TexGenModeQQSphereMap      0x00001800
-#define XM_TexGenS                    0x00002000
-#define XM_TexGenT                    0x00004000
-#define XM_TexGenR                    0x00008000
-#define XM_TexGenQ                    0x00010000
-
-/* LightNMode */
-#define LNM_Off                       0x00000000
-#define LNM_On                        0x00000001
-/************** GAMMA FLAGS ***************/
-
-#endif /* _GAMMA_REGS_H_ */
diff --git a/src/mesa/drivers/dri/gamma/gamma_render.c b/src/mesa/drivers/dri/gamma/gamma_render.c
deleted file mode 100644
index 3c2fa507a9..0000000000
--- a/src/mesa/drivers/dri/gamma/gamma_render.c
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- * Copyright 2001 by Alan Hourihane.
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Alan Hourihane not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission.  Alan Hourihane makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as is" without express or implied warranty.
- *
- * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * Authors:  Alan Hourihane, <alanh@tungstengraphics.com>
- *
- * 3DLabs Gamma driver.
- *
- */
-
-#include "main/glheader.h"
-#include "main/context.h"
-#include "main/macros.h"
-#include "main/imports.h"
-#include "main/mtypes.h"
-
-#include "tnl/t_context.h"
-
-#include "gamma_context.h"
-#include "gamma_macros.h"
-#include "gamma_tris.h"
-#include "gamma_vb.h"
-
-
-/* !! Should template this eventually !! */
-
-static void gamma_emit( GLcontext *ctx, GLuint start, GLuint end)
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-   struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
-   GLfloat (*coord)[4];
-   GLuint coord_stride;
-   GLfloat (*col)[4];
-   GLuint col_stride;
-   int i;
-   GLuint tc0_stride = 0;
-   GLfloat (*tc0)[4] = 0;
-   GLuint tc0_size = 0;
-
-   col = VB->AttribPtr[_TNL_ATTRIB_COLOR0]->data;
-   col_stride = VB->AttribPtr[_TNL_ATTRIB_COLOR0]->stride;
-
-   if (ctx->Texture.Unit[0]._ReallyEnabled) {
-      tc0_stride = VB->AttribPtr[_TNL_ATTRIB_TEX0]->stride;
-      tc0 = VB->AttribPtr[_TNL_ATTRIB_TEX0]->data;
-      tc0_size = VB->AttribPtr[_TNL_ATTRIB_TEX0]->size;
-      coord = VB->ClipPtr->data;
-      coord_stride = VB->ClipPtr->stride;
-   } else {
-      coord = VB->NdcPtr->data;
-      coord_stride = VB->NdcPtr->stride;
-   }
-
-   if (ctx->Texture.Unit[0]._ReallyEnabled && tc0_size == 4) {
-      for (i=start; i < end; i++) {
-	    CHECK_DMA_BUFFER(gmesa, 9);
-	    WRITEF(gmesa->buf, Tq4, tc0[i][3]);
-	    WRITEF(gmesa->buf, Tr4, tc0[i][2]);
-	    WRITEF(gmesa->buf, Tt4, tc0[i][0]);
-	    WRITEF(gmesa->buf, Ts4, tc0[i][1]);
-	    WRITE(gmesa->buf, PackedColor4, *(uint32_t*)col[i]);
-	    WRITEF(gmesa->buf, Vw, coord[i][3]);
-	    WRITEF(gmesa->buf, Vz, coord[i][2]);
-	    WRITEF(gmesa->buf, Vy, coord[i][1]);
-	    WRITEF(gmesa->buf, Vx4, coord[i][0]);
-      }
-   } else if (ctx->Texture.Unit[0]._ReallyEnabled && tc0_size == 2) {
-      for (i=start; i < end; i++) {
-	    CHECK_DMA_BUFFER(gmesa, 7);
-	    WRITEF(gmesa->buf, Tt2, tc0[i][0]);
-	    WRITEF(gmesa->buf, Ts2, tc0[i][1]);
-	    WRITE(gmesa->buf, PackedColor4, *(uint32_t*)col[i]);
-	    WRITEF(gmesa->buf, Vw, coord[i][3]);
-	    WRITEF(gmesa->buf, Vz, coord[i][2]);
-	    WRITEF(gmesa->buf, Vy, coord[i][1]);
-	    WRITEF(gmesa->buf, Vx4, coord[i][0]);
-      }
-   } else {
-      for (i=start; i < end; i++) {
-	    CHECK_DMA_BUFFER(gmesa, 4);
-	    WRITE(gmesa->buf, PackedColor4, *(uint32_t*)col[i]);
-	    WRITEF(gmesa->buf, Vz, coord[i][2]);
-	    WRITEF(gmesa->buf, Vy, coord[i][1]);
-	    WRITEF(gmesa->buf, Vx3, coord[i][0]);
-      }
-   }
-}
-
-#define HAVE_POINTS      1
-#define HAVE_LINES       1
-#define HAVE_LINE_STRIPS 1
-#define HAVE_TRIANGLES   1
-#define HAVE_TRI_STRIPS  1
-#define HAVE_TRI_STRIP_1 0
-#define HAVE_TRI_FANS    1
-#define HAVE_QUADS       1
-#define HAVE_QUAD_STRIPS 1
-#define HAVE_POLYGONS    1
-
-#define HAVE_ELTS        0
-
-
-static const GLuint hw_prim[GL_POLYGON+1] = {
-   B_PrimType_Points,
-   B_PrimType_Lines,
-   B_PrimType_LineLoop,
-   B_PrimType_LineStrip,
-   B_PrimType_Triangles,
-   B_PrimType_TriangleStrip,
-   B_PrimType_TriangleFan,
-   B_PrimType_Quads,
-   B_PrimType_QuadStrip,
-   B_PrimType_Polygon
-};
-
-static INLINE void gammaStartPrimitive( gammaContextPtr gmesa, GLenum prim )
-{
-   CHECK_DMA_BUFFER(gmesa, 1);
-   WRITE(gmesa->buf, Begin, gmesa->Begin | hw_prim[prim]);
-}
-
-static INLINE void gammaEndPrimitive( gammaContextPtr gmesa )
-{
-   GLcontext *ctx = gmesa->glCtx;
-
-   if ( ctx->Line.SmoothFlag || 
-        ctx->Polygon.SmoothFlag || 
-        ctx->Point.SmoothFlag ) {
-      CHECK_DMA_BUFFER(gmesa, 1);
-      WRITE(gmesa->buf, FlushSpan, 0);
-   }
-
-   CHECK_DMA_BUFFER(gmesa, 1);
-   WRITE(gmesa->buf, End, 0);
-}
-
-#define LOCAL_VARS gammaContextPtr gmesa = GAMMA_CONTEXT(ctx)
-#define INIT( prim ) gammaStartPrimitive( gmesa, prim )
-#define FLUSH() gammaEndPrimitive( gmesa )
-#define GET_CURRENT_VB_MAX_VERTS() \
-  (gmesa->bufSize - gmesa->bufCount) / 2
-#define GET_SUBSEQUENT_VB_MAX_VERTS() \
-  GAMMA_DMA_BUFFER_SIZE / 2
-
-#define ALLOC_VERTS( nr ) (void *)0	/* todo: explicit alloc */
-#define EMIT_VERTS( ctx, j, nr, buf ) (gamma_emit(ctx, j, (j)+(nr)), (void *)0)
-
-#define TAG(x) gamma_##x
-#include "tnl_dd/t_dd_dmatmp.h"
-
-
-/**********************************************************************/
-/*                          Render pipeline stage                     */
-/**********************************************************************/
-
-
-static GLboolean gamma_run_render( GLcontext *ctx,
-				  struct tnl_pipeline_stage *stage )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-   TNLcontext *tnl = TNL_CONTEXT(ctx);
-   struct vertex_buffer *VB = &tnl->vb;
-   GLuint i;
-   tnl_render_func *tab;
-
-				/* GH: THIS IS A HACK!!! */
-   if (VB->ClipOrMask || gmesa->RenderIndex != 0)
-      return GL_TRUE;		/* don't handle clipping here */
-
-   /* We don't do elts */
-   if (VB->Elts || !gamma_validate_render( ctx, VB ))
-      return GL_TRUE;
-
-   tab = TAG(render_tab_verts);
-
-   tnl->Driver.Render.Start( ctx );
-
-   for (i = 0 ; i < VB->PrimitiveCount ; i++)
-   {
-      GLuint prim = _tnl_translate_prim(&VB->Primitive[i]);
-      GLuint start = VB->Primitive[i].start;
-      GLuint length = VB->Primitive[i].count;
-
-      if (!length)
-	 continue;
-
-      tab[prim & PRIM_MODE_MASK]( ctx, start, start + length, prim);
-   }
-
-   tnl->Driver.Render.Finish( ctx );
-
-   return GL_FALSE;		/* finished the pipe */
-}
-
-
-const struct tnl_pipeline_stage _gamma_render_stage =
-{
-   "gamma render",
-   NULL,
-   NULL,
-   NULL,
-   NULL,
-   gamma_run_render		/* run */
-};
diff --git a/src/mesa/drivers/dri/gamma/gamma_screen.c b/src/mesa/drivers/dri/gamma/gamma_screen.c
deleted file mode 100644
index 47862f1d77..0000000000
--- a/src/mesa/drivers/dri/gamma/gamma_screen.c
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright 2001 by Alan Hourihane.
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Alan Hourihane not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission.  Alan Hourihane makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as is" without express or implied warranty.
- *
- * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * Authors:  Alan Hourihane, <alanh@tungstengraphics.com>
- *
- */
-
-#include "gamma_context.h"
-#include "gamma_vb.h"
-#include "glint_dri.h"
-
-#include "main/imports.h"
-
-gammaScreenPtr gammaCreateScreen( __DRIscreen *sPriv )
-{
-   gammaScreenPtr gammaScreen;
-   GLINTDRIPtr gDRIPriv = (GLINTDRIPtr)sPriv->pDevPriv;
-   int i;
-
-   if (sPriv->devPrivSize != sizeof(GLINTDRIRec)) {
-      fprintf(stderr,"\nERROR!  sizeof(GLINTDRIRec) does not match passed size from device driver\n");
-      return GL_FALSE;
-   }
-
-#if 0
-   /* Check the DRI externsion version */
-   if ( sPriv->driMajor != 3 || sPriv->driMinor != 1 ) {
-      __driUtilMessage( "Gamma DRI driver expected DRI version 4.0.x "
-                        "but got version %d.%d.%d",
-                        sPriv->driMajor, sPriv->driMinor, sPriv->driPatch );
-      return NULL;
-   }
-
-   /* Check that the DDX driver version is compatible */
-   if ( sPriv->ddxMajor != 4 ||
-	sPriv->ddxMinor != 0 ||
-	sPriv->ddxPatch < 0 ) {
-      __driUtilMessage( "r128 DRI driver expected DDX driver version 4.0.x but got version %d.%d.%d", sPriv->ddxMajor, sPriv->ddxMinor, sPriv->ddxPatch );
-      return GL_FALSE;
-   }
-
-   /* Check that the DRM driver version is compatible */
-   if ( sPriv->drmMajor != 2 ||
-	sPriv->drmMinor != 1 ||
-	sPriv->drmPatch < 0 ) {
-      __driUtilMessage( "r128 DRI driver expected DRM driver version 2.1.x but got version %d.%d.%d", sPriv->drmMajor, sPriv->drmMinor, sPriv->drmPatch );
-      return GL_FALSE;
-   }
-#endif
-
-    /* Allocate the private area */
-    gammaScreen = (gammaScreenPtr) CALLOC( sizeof(*gammaScreen) );
-    if ( !gammaScreen ) return NULL;
-
-    gammaScreen->regionCount  = 4;	/* Magic number.  Can we fix this? */
-    
-    gammaScreen->regions = CALLOC(gammaScreen->regionCount * 
-							sizeof(gammaRegion));
-
-    gammaScreen->regions[0].handle = gDRIPriv->registers0.handle;
-    gammaScreen->regions[0].size   = gDRIPriv->registers0.size;
-    gammaScreen->regions[1].handle = gDRIPriv->registers1.handle;
-    gammaScreen->regions[1].size   = gDRIPriv->registers1.size;
-    gammaScreen->regions[2].handle = gDRIPriv->registers2.handle;
-    gammaScreen->regions[2].size   = gDRIPriv->registers2.size;
-    gammaScreen->regions[3].handle = gDRIPriv->registers3.handle;
-    gammaScreen->regions[3].size   = gDRIPriv->registers3.size;
-    
-    /* Next, map all the regions */
-    for (i = 0; i < gammaScreen->regionCount; i++) {
-	if (drmMap(sPriv->fd,
-		   gammaScreen->regions[i].handle,
-		   gammaScreen->regions[i].size,
-		   &gammaScreen->regions[i].map)) {
-	    while (--i > 0) {
-		(void)drmUnmap(gammaScreen->regions[i].map, 
-			       gammaScreen->regions[i].size);
-	    }
-	    return GL_FALSE;
-	}
-    }
-
-    /* Get the list of dma buffers */
-    gammaScreen->bufs = drmMapBufs(sPriv->fd);
-
-    if (!gammaScreen->bufs) {
-	while (gammaScreen->regionCount > 0) {
-	    (void)drmUnmap(gammaScreen->regions[gammaScreen->regionCount].map,
-			   gammaScreen->regions[gammaScreen->regionCount].size);
-	    gammaScreen->regionCount--;
-	}
-	return GL_FALSE;
-    }
-
-   gammaScreen->textureSize	= gDRIPriv->textureSize;
-   gammaScreen->logTextureGranularity = gDRIPriv->logTextureGranularity;
-   gammaScreen->cpp = gDRIPriv->cpp;
-   gammaScreen->frontOffset	= gDRIPriv->frontOffset;
-   gammaScreen->frontPitch	= gDRIPriv->frontPitch;
-   gammaScreen->backOffset	= gDRIPriv->backOffset;
-   gammaScreen->backPitch	= gDRIPriv->backPitch;
-   gammaScreen->backX		= gDRIPriv->backX;
-   gammaScreen->backY		= gDRIPriv->backY;
-   gammaScreen->depthOffset	= gDRIPriv->depthOffset;
-   gammaScreen->depthPitch	= gDRIPriv->depthPitch;
-
-   gammaScreen->driScreen = sPriv;
-
-   return gammaScreen;
-}
-
-/* Destroy the device specific screen private data struct.
- */
-void gammaDestroyScreen( __DRIscreen *sPriv )
-{
-    gammaScreenPtr gammaScreen = (gammaScreenPtr)sPriv->private;
-
-    /* First, unmap the dma buffers */
-    drmUnmapBufs( gammaScreen->bufs );
-
-    /* Next, unmap all the regions */
-    while (gammaScreen->regionCount > 0) {
-	(void)drmUnmap(gammaScreen->regions[gammaScreen->regionCount].map,
-		       gammaScreen->regions[gammaScreen->regionCount].size);
-	gammaScreen->regionCount--;
-    }
-    FREE(gammaScreen->regions);
-    FREE(gammaScreen);
-}
diff --git a/src/mesa/drivers/dri/gamma/gamma_screen.h b/src/mesa/drivers/dri/gamma/gamma_screen.h
deleted file mode 100644
index c716ea89c2..0000000000
--- a/src/mesa/drivers/dri/gamma/gamma_screen.h
+++ /dev/null
@@ -1,30 +0,0 @@
-typedef struct _gammaRegion {
-    drm_handle_t  handle;
-    drmSize    size;
-    drmAddress map;
-} gammaRegion, *gammaRegionPtr;
-
-typedef struct {
-
-    int           regionCount;       /* Count of register regions */
-    gammaRegion  *regions;           /* Vector of mapped region info */
-
-    drmBufMapPtr  bufs;              /* Map of DMA buffers */
-
-    __DRIscreen *driScreen; /* Back pointer to DRI screen */
-
-    int		cpp;
-    int		frontPitch;
-    int		frontOffset;
-
-    int		backPitch;
-    int		backOffset;
-    int		backX;
-    int		backY;
-
-    int		depthOffset;
-    int		depthPitch;
-
-    int		textureSize;
-    int		logTextureGranularity;
-} gammaScreenRec, *gammaScreenPtr;
diff --git a/src/mesa/drivers/dri/gamma/gamma_span.c b/src/mesa/drivers/dri/gamma/gamma_span.c
deleted file mode 100644
index 00160f760b..0000000000
--- a/src/mesa/drivers/dri/gamma/gamma_span.c
+++ /dev/null
@@ -1,315 +0,0 @@
-
-#include "gamma_context.h"
-#include "gamma_lock.h"
-#include "gamma_macros.h"
-#include "main/colormac.h"
-
-#include "swrast/swrast.h"
-
-#define DBG 0
-
-#define LOCAL_VARS							\
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);				\
-   gammaScreenPtr gammascrn = gmesa->gammaScreen;			\
-   __DRIscreen *sPriv = gmesa->driScreen;			\
-   __DRIdrawable *dPriv = gmesa->driDrawable;			\
-   GLuint pitch = sPriv->fbWidth * gammascrn->cpp;		\
-   GLuint height = dPriv->h;						\
-   char *buf = (char *)(sPriv->pFB +					\
-			gmesa->drawOffset +				\
-			(dPriv->x * gammascrn->cpp) +			\
-			(dPriv->y * pitch));				\
-   GLuint p;								\
-   (void) buf; (void) p
-
-/* FIXME! Depth/Stencil read/writes don't work ! */
-#define LOCAL_DEPTH_VARS				\
-   gammaScreenPtr gammascrn = gmesa->gammaScreen;	\
-   __DRIdrawable *dPriv = gmesa->driDrawable;	\
-   __DRIscreen *sPriv = gmesa->driScreen;	\
-   GLuint pitch = gammascrn->depthPitch;		\
-   GLuint height = dPriv->h;				\
-   char *buf = (char *)(sPriv->pFB +			\
-			gammascrn->depthOffset +	\
-			dPriv->x * gammascrn->cpp +	\
-			dPriv->y * pitch)
-
-#define LOCAL_STENCIL_VARS	LOCAL_DEPTH_VARS
-
-#define Y_FLIP( _y )		(height - _y - 1)
-
-#define HW_LOCK()							\
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);				\
-   FLUSH_DMA_BUFFER(gmesa);						\
-   gammaGetLock( gmesa, DRM_LOCK_FLUSH | DRM_LOCK_QUIESCENT );		\
-   GAMMAHW_LOCK( gmesa );
-
-#define HW_UNLOCK() GAMMAHW_UNLOCK( gmesa )
-
-
-
-/* ================================================================
- * Color buffer
- */
-
-/* 16 bit, RGB565 color spanline and pixel functions
- */
-#define INIT_MONO_PIXEL(p, color) \
-  p = PACK_COLOR_565( color[0], color[1], color[2] )
-
-#define WRITE_RGBA( _x, _y, r, g, b, a )				\
-   *(GLushort *)(buf + _x*2 + _y*pitch) = ((((int)r & 0xf8) << 8) |	\
-					   (((int)g & 0xfc) << 3) |	\
-					   (((int)b & 0xf8) >> 3))
-
-#define WRITE_PIXEL( _x, _y, p )					\
-   *(GLushort *)(buf + _x*2 + _y*pitch) = p
-
-#define READ_RGBA( rgba, _x, _y )					\
-   do {									\
-      GLushort p = *(GLushort *)(buf + _x*2 + _y*pitch);		\
-      rgba[0] = (p >> 8) & 0xf8;					\
-      rgba[1] = (p >> 3) & 0xfc;					\
-      rgba[2] = (p << 3) & 0xf8;					\
-      rgba[3] = 0xff;							\
-      if ( rgba[0] & 0x08 ) rgba[0] |= 0x07;				\
-      if ( rgba[1] & 0x04 ) rgba[1] |= 0x03;				\
-      if ( rgba[2] & 0x08 ) rgba[2] |= 0x07;				\
-   } while (0)
-
-#define TAG(x) gamma##x##_RGB565
-#include "spantmp.h"
-
-
-/* 32 bit, ARGB8888 color spanline and pixel functions
- */
-
-#undef INIT_MONO_PIXEL
-#define INIT_MONO_PIXEL(p, color) \
-  p = PACK_COLOR_8888( color[3], color[0], color[1], color[2] )
-
-#define WRITE_RGBA( _x, _y, r, g, b, a )				\
-   *(GLuint *)(buf + _x*4 + _y*pitch) = ((b <<  0) |			\
-					 (g <<  8) |			\
-					 (r << 16) |			\
-					 (a << 24) )
-
-#define WRITE_PIXEL( _x, _y, p )					\
-   *(GLuint *)(buf + _x*4 + _y*pitch) = p
-
-#define READ_RGBA( rgba, _x, _y )					\
-do {									\
-   GLuint p = *(GLuint *)(buf + _x*4 + _y*pitch);			\
-   rgba[0] = (p >> 16) & 0xff;						\
-   rgba[1] = (p >>  8) & 0xff;						\
-   rgba[2] = (p >>  0) & 0xff;						\
-   rgba[3] = (p >> 24) & 0xff;						\
-} while (0)
-
-#define TAG(x) gamma##x##_ARGB8888
-#include "spantmp.h"
-
-
-/* 16 bit depthbuffer functions.
- */
-#define VALUE_TYPE GLushort
-
-#define WRITE_DEPTH( _x, _y, d )	\
-   *(GLushort *)(buf + (_x)*2 + (_y)*pitch) = d;
-
-#define READ_DEPTH( d, _x, _y )		\
-   d = *(GLushort *)(buf + (_x)*2 + (_y)*pitch);	
-
-#define TAG(x) gamma##x##_16
-#include "depthtmp.h"
-
-
-#if 0 /* Unused */
-/* 32 bit depthbuffer functions.
- */
-#define VALUE_TYPE GLuint
-
-#define WRITE_DEPTH( _x, _y, d )	\
-   *(GLuint *)(buf + (_x)*4 + (_y)*pitch) = d;
-
-#define READ_DEPTH( d, _x, _y )		\
-   d = *(GLuint *)(buf + (_x)*4 + (_y)*pitch);	
-
-#define TAG(x) gamma##x##_32
-#include "depthtmp.h"
-#endif
-
-
-/* 24/8 bit interleaved depth/stencil functions
- */
-#define VALUE_TYPE GLuint
-
-#define WRITE_DEPTH( _x, _y, d ) {			\
-   GLuint tmp = *(GLuint *)(buf + (_x)*4 + (_y)*pitch);	\
-   tmp &= 0xff;						\
-   tmp |= (d) & 0xffffff00;				\
-   *(GLuint *)(buf + (_x)*4 + (_y)*pitch) = tmp;		\
-}
-
-#define READ_DEPTH( d, _x, _y )		\
-   d = *(GLuint *)(buf + (_x)*4 + (_y)*pitch) & ~0xff;	
-
-
-#define TAG(x) gamma##x##_24_8
-#include "depthtmp.h"
-
-#if 0
-#define WRITE_STENCIL( _x, _y, d ) {			\
-   GLuint tmp = *(GLuint *)(buf + _x*4 + _y*pitch);	\
-   tmp &= 0xffffff00;					\
-   tmp |= d & 0xff;					\
-   *(GLuint *)(buf + _x*4 + _y*pitch) = tmp;		\
-}
-
-#define READ_STENCIL( d, _x, _y )		\
-   d = *(GLuint *)(buf + _x*4 + _y*pitch) & 0xff;	
-
-#define TAG(x) gamma##x##_24_8
-#include "stenciltmp.h"
-
-static void gammaReadRGBASpan8888( const GLcontext *ctx,
-			       GLuint n, GLint x, GLint y,
-			       GLubyte rgba[][4])
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-   gammaScreenPtr gammascrn = gmesa->gammaScreen;
-   uint32_t dwords1, dwords2, i = 0;
-   char *src = (char *)rgba[0];
-   GLuint read = n * gammascrn->cpp; /* Number of bytes we are expecting */
-   uint32_t data;
-
-   FLUSH_DMA_BUFFER(gmesa);
-   CHECK_DMA_BUFFER(gmesa, 16);
-   WRITE(gmesa->buf, LBReadMode, gmesa->LBReadMode & ~(LBReadSrcEnable | LBReadDstEnable));
-   WRITE(gmesa->buf, ColorDDAMode, ColorDDAEnable);
-   WRITE(gmesa->buf, LBWriteMode, LBWriteModeDisable);
-   WRITE(gmesa->buf, FBReadMode, (gmesa->FBReadMode & ~FBReadSrcEnable) | FBReadDstEnable | FBDataTypeColor);
-   WRITE(gmesa->buf, FilterMode, 0x200); /* Pass FBColorData */
-   WRITE(gmesa->buf, FBWriteMode, FBW_UploadColorData | FBWriteModeDisable);
-   WRITE(gmesa->buf, StartXSub, (x+n)<<16);
-   WRITE(gmesa->buf, StartXDom, x<<16);
-   WRITE(gmesa->buf, StartY, y<<16);
-   WRITE(gmesa->buf, GLINTCount, 1);
-   WRITE(gmesa->buf, dXDom, 0<<16);
-   WRITE(gmesa->buf, dXSub, 0<<16);
-   WRITE(gmesa->buf, dY, 1<<16);
-   WRITE(gmesa->buf, Render, PrimitiveTrapezoid);
-   FLUSH_DMA_BUFFER(gmesa);
-
-moredata:
-
-   dwords1 = *(volatile uint32_t*)(void *)(((uint8_t*)gammascrn->regions[0].map) + (GlintOutFIFOWords));
-   dwords2 = *(volatile uint32_t*)(void *)(((uint8_t*)gammascrn->regions[2].map) + (GlintOutFIFOWords));
-
-   if (dwords1) {
-	memcpy(src, (char*)gammascrn->regions[1].map + 0x1000, dwords1 << 2);
-	src += dwords1 << 2;
-	read -= dwords1 << 2;
-   }
-   if (dwords2) {
-	memcpy(src, (char*)gammascrn->regions[3].map + 0x1000, dwords2 << 2);
-	src += dwords2 << 2;
-	read -= dwords2 << 2;
-   }
-
-   if (read)
-	goto moredata;
-
-done:
-
-   CHECK_DMA_BUFFER(gmesa, 6);
-   WRITE(gmesa->buf, ColorDDAMode, gmesa->ColorDDAMode);
-   WRITE(gmesa->buf, LBWriteMode, LBWriteModeEnable);
-   WRITE(gmesa->buf, LBReadMode, gmesa->LBReadMode);
-   WRITE(gmesa->buf, FBReadMode, gmesa->FBReadMode);
-   WRITE(gmesa->buf, FBWriteMode, FBWriteModeEnable);
-   WRITE(gmesa->buf, FilterMode, 0x400);
-}
-#endif
-
-static void gammaSetBuffer( GLcontext *ctx,
-                            GLframebuffer *colorBuffer,
-                            GLuint bufferBit )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-
-   switch ( bufferBit ) {
-   case BUFFER_BIT_FRONT_LEFT:
-      gmesa->readOffset = 0;
-      break;
-   case BUFFER_BIT_BACK_LEFT:
-      gmesa->readOffset = gmesa->driScreen->fbHeight * gmesa->driScreen->fbWidth * gmesa->gammaScreen->cpp; 
-      break;
-   default:
-      _mesa_problem(ctx, "Unexpected buffer 0x%x in gammaSetBuffer()", bufferBit);
-   }
-}
-
-
-void gammaDDInitSpanFuncs( GLcontext *ctx )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-   struct swrast_device_driver *swdd = _swrast_GetDeviceDriverReference(ctx);
-
-   swdd->SetBuffer = gammaSetBuffer;
-
-   switch ( gmesa->gammaScreen->cpp ) {
-   case 2:
-      swdd->WriteRGBASpan	= gammaWriteRGBASpan_RGB565;
-      swdd->WriteRGBSpan	= gammaWriteRGBSpan_RGB565;
-      swdd->WriteMonoRGBASpan	= gammaWriteMonoRGBASpan_RGB565;
-      swdd->WriteRGBAPixels	= gammaWriteRGBAPixels_RGB565;
-      swdd->WriteMonoRGBAPixels	= gammaWriteMonoRGBAPixels_RGB565;
-      swdd->ReadRGBASpan	= gammaReadRGBASpan_RGB565;
-      swdd->ReadRGBAPixels      = gammaReadRGBAPixels_RGB565;
-      break;
-
-   case 4:
-      swdd->WriteRGBASpan	= gammaWriteRGBASpan_ARGB8888;
-      swdd->WriteRGBSpan	= gammaWriteRGBSpan_ARGB8888;
-      swdd->WriteMonoRGBASpan   = gammaWriteMonoRGBASpan_ARGB8888;
-      swdd->WriteRGBAPixels     = gammaWriteRGBAPixels_ARGB8888;
-      swdd->WriteMonoRGBAPixels = gammaWriteMonoRGBAPixels_ARGB8888;
-#if 1
-      swdd->ReadRGBASpan	= gammaReadRGBASpan_ARGB8888;
-#else
-      swdd->ReadRGBASpan	= gammaReadRGBASpan8888;
-#endif
-      swdd->ReadRGBAPixels      = gammaReadRGBAPixels_ARGB8888;
-      break;
-
-   default:
-      break;
-   }
-
-   switch ( gmesa->glCtx->Visual.depthBits ) {
-   case 16:
-      swdd->ReadDepthSpan	= gammaReadDepthSpan_16;
-      swdd->WriteDepthSpan	= gammaWriteDepthSpan_16;
-      swdd->ReadDepthPixels	= gammaReadDepthPixels_16;
-      swdd->WriteDepthPixels	= gammaWriteDepthPixels_16;
-      break;
-
-   case 24:
-      swdd->ReadDepthSpan	= gammaReadDepthSpan_24_8;
-      swdd->WriteDepthSpan	= gammaWriteDepthSpan_24_8;
-      swdd->ReadDepthPixels	= gammaReadDepthPixels_24_8;
-      swdd->WriteDepthPixels	= gammaWriteDepthPixels_24_8;
-
-#if 0
-      swdd->ReadStencilSpan	= gammaReadStencilSpan_24_8;
-      swdd->WriteStencilSpan	= gammaWriteStencilSpan_24_8;
-      swdd->ReadStencilPixels	= gammaReadStencilPixels_24_8;
-      swdd->WriteStencilPixels	= gammaWriteStencilPixels_24_8;
-#endif
-      break;
-
-   default:
-      break;
-   }
-}
diff --git a/src/mesa/drivers/dri/gamma/gamma_state.c b/src/mesa/drivers/dri/gamma/gamma_state.c
deleted file mode 100644
index c628457fba..0000000000
--- a/src/mesa/drivers/dri/gamma/gamma_state.c
+++ /dev/null
@@ -1,1721 +0,0 @@
-/*
- * Copyright 2001 by Alan Hourihane.
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Alan Hourihane not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission.  Alan Hourihane makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as is" without express or implied warranty.
- *
- * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * Authors:  Alan Hourihane, <alanh@tungstengraphics.com>
- *
- * 3DLabs Gamma driver
- */
-
-#include "gamma_context.h"
-#include "gamma_macros.h"
-#include "main/macros.h"
-#include "glint_dri.h"
-#include "main/colormac.h"
-#include "swrast/swrast.h"
-#include "swrast_setup/swrast_setup.h"
-#include "vbo/vbo.h"
-#include "tnl/tnl.h"
-
-#define ENABLELIGHTING 0
-
-/* =============================================================
- * Alpha blending
- */
-
-static void gammaUpdateAlphaMode( GLcontext *ctx )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-   uint32_t a = gmesa->AlphaTestMode;
-   uint32_t b = gmesa->AlphaBlendMode;
-   uint32_t f = gmesa->AB_FBReadMode_Save = 0;
-   GLubyte refByte = (GLint) (ctx->Color.AlphaRef * 255.0);
-
-   a &= ~(AT_CompareMask | AT_RefValueMask);
-   b &= ~(AB_SrcBlendMask | AB_DstBlendMask);
-
-   a |= refByte << 4;
-
-   switch ( ctx->Color.AlphaFunc ) {
-      case GL_NEVER:
-	 a |= AT_Never;
-	 break;
-      case GL_LESS:
-	 a |= AT_Less;
-         break;
-      case GL_EQUAL:
-	 a |= AT_Equal;
-	 break;
-      case GL_LEQUAL:
-	 a |= AT_LessEqual;
-	 break;
-      case GL_GEQUAL:
-	 a |= AT_GreaterEqual;
-	 break;
-      case GL_GREATER:
-	 a |= AT_Greater;
-	 break;
-      case GL_NOTEQUAL:
-	 a |= AT_NotEqual;
-	 break;
-      case GL_ALWAYS:
-	 a |= AT_Always;
-	 break;
-   }
-
-   if ( ctx->Color.AlphaEnabled ) {
-      f |= FBReadDstEnable;
-      a |= AlphaTestModeEnable;
-   } else {
-      a &= ~AlphaTestModeEnable;
-   }
-
-   switch ( ctx->Color.BlendSrcRGB ) {
-      case GL_ZERO:
-	 b |= AB_Src_Zero; 
-	 break;
-      case GL_ONE:
-	 b |= AB_Src_One;
-	 break;
-      case GL_DST_COLOR:
-	 b |= AB_Src_DstColor;
-	 break;
-      case GL_ONE_MINUS_DST_COLOR:
-	 b |= AB_Src_OneMinusDstColor;
-	 break;
-      case GL_SRC_ALPHA:
-	 b |= AB_Src_SrcAlpha;
-	 break;
-      case GL_ONE_MINUS_SRC_ALPHA:
-	 b |= AB_Src_OneMinusSrcAlpha;
-	 break;
-      case GL_DST_ALPHA:
-	 b |= AB_Src_DstAlpha;
-         f |= FBReadSrcEnable;
-	 break;
-      case GL_ONE_MINUS_DST_ALPHA:
-	 b |= AB_Src_OneMinusDstAlpha;
-         f |= FBReadSrcEnable;
-	 break;
-      case GL_SRC_ALPHA_SATURATE:
-	 b |= AB_Src_SrcAlphaSaturate;
-	 break;
-   }
-
-   switch ( ctx->Color.BlendDstRGB ) {
-      case GL_ZERO:
-	 b |= AB_Dst_Zero;
-	 break;
-      case GL_ONE:
-	 b |= AB_Dst_One;
-	 break;
-      case GL_SRC_COLOR:
-	 b |= AB_Dst_SrcColor;
-	 break;
-      case GL_ONE_MINUS_SRC_COLOR:
-	 b |= AB_Dst_OneMinusSrcColor;
-	 break;
-      case GL_SRC_ALPHA:
-	 b |= AB_Dst_SrcAlpha;
-	 break;
-      case GL_ONE_MINUS_SRC_ALPHA:
-	 b |= AB_Dst_OneMinusSrcAlpha;
-	 break;
-      case GL_DST_ALPHA:
-	 b |= AB_Dst_DstAlpha;
-         f |= FBReadSrcEnable;
-	 break;
-      case GL_ONE_MINUS_DST_ALPHA:
-	 b |= AB_Dst_OneMinusDstAlpha;
-         f |= FBReadSrcEnable;
-	 break;
-   }
-
-   if ( ctx->Color.BlendEnabled ) {
-      f |= FBReadDstEnable;
-      b |= AlphaBlendModeEnable;
-   } else {
-      b &= ~AlphaBlendModeEnable;
-   }
-
-   if ( gmesa->AlphaTestMode != a ) {
-      gmesa->AlphaTestMode = a;
-      gmesa->dirty |= GAMMA_UPLOAD_ALPHA;
-   }
-   if ( gmesa->AlphaBlendMode != b) {
-      gmesa->AlphaBlendMode = b;
-      gmesa->dirty |= GAMMA_UPLOAD_BLEND;
-   }
-   gmesa->AB_FBReadMode_Save = f;
-}
-
-static void gammaDDAlphaFunc( GLcontext *ctx, GLenum func, GLfloat ref )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-   (void) ref;
-
-   FLUSH_BATCH( gmesa );
-
-   gmesa->new_state |= GAMMA_NEW_ALPHA;
-}
-
-static void gammaDDBlendEquationSeparate( GLcontext *ctx, 
-					  GLenum modeRGB, GLenum modeA )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-
-   assert( modeRGB == modeA );
-   FLUSH_BATCH( gmesa );
-
-   gmesa->new_state |= GAMMA_NEW_ALPHA;
-}
-
-static void gammaDDBlendFuncSeparate( GLcontext *ctx,
-				     GLenum sfactorRGB, GLenum dfactorRGB,
-				     GLenum sfactorA, GLenum dfactorA )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-
-   FLUSH_BATCH( gmesa );
-
-   gmesa->new_state |= GAMMA_NEW_ALPHA;
-}
-
-
-/* ================================================================
- * Buffer clear
- */
-
-static void gammaDDClear( GLcontext *ctx, GLbitfield mask )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-   GLINTDRIPtr gDRIPriv = (GLINTDRIPtr)gmesa->driScreen->pDevPriv;
-   GLuint temp = 0;
-
-   FLUSH_BATCH( gmesa );
-
-   /* Update and emit any new state.  We need to do this here to catch
-    * changes to the masks.
-    * FIXME: Just update the masks?
-    */
-   if ( gmesa->new_state )
-      gammaDDUpdateHWState( ctx );
-
-#ifdef DO_VALIDATE
-    /* Flush any partially filled buffers */
-    FLUSH_DMA_BUFFER(gmesa);
-
-    DRM_SPINLOCK(&gmesa->driScreen->pSAREA->drawable_lock,
-		 gmesa->driScreen->drawLockID);
-    VALIDATE_DRAWABLE_INFO_NO_LOCK(gmesa);
-#endif
-
-    if (mask & BUFFER_BIT_DEPTH) {
-	 /* Turn off writes the FB */
-	 CHECK_DMA_BUFFER(gmesa, 1);
-	 WRITE(gmesa->buf, FBWriteMode, FBWriteModeDisable);
-
-	 mask &= ~BUFFER_BIT_DEPTH;
-
-	 /*
-	  * Turn Rectangle2DControl off when the window is not clipped
-	  * (i.e., the GID tests are not necessary).  This dramatically
-	  * increases the performance of the depth clears.
-	  */
-	 if (!gmesa->NotClipped) {
-	    CHECK_DMA_BUFFER(gmesa, 1);
-	    WRITE(gmesa->buf, Rectangle2DControl, 1);
-	 }
-
-	 temp = (gmesa->LBReadMode & LBPartialProdMask) | LBWindowOriginBot;
-	 if (gDRIPriv->numMultiDevices == 2) temp |= LBScanLineInt2;
-	 
-	 CHECK_DMA_BUFFER(gmesa, 5);
-	 WRITE(gmesa->buf, LBReadMode, temp);
-	 WRITE(gmesa->buf, DeltaMode, DM_DepthEnable);
-	 WRITE(gmesa->buf, DepthMode, (DepthModeEnable |
-					DM_Always |
-					DM_SourceDepthRegister |
-					DM_WriteMask));
-	 WRITE(gmesa->buf, GLINTDepth, gmesa->ClearDepth);
-
-	 /* Increment the frame count */
-	 gmesa->FrameCount++;
-#ifdef FAST_CLEAR_4
-	 gmesa->FrameCount &= 0x0f;
-#else
-	 gmesa->FrameCount &= 0xff;
-#endif
-
-	 /* Force FCP to be written */
-	 WRITE(gmesa->buf, GLINTWindow, (WindowEnable |
-					  W_PassIfEqual |
-					  (gmesa->Window & W_GIDMask) |
-					  W_DepthFCP |
-					  W_LBUpdateFromRegisters |
-					  W_OverrideWriteFiltering |
-					  (gmesa->FrameCount << 9)));
-
-	/* Clear part of the depth and FCP buffers */
-	{
-	    int y = gmesa->driScreen->fbHeight - gmesa->driDrawable->y - gmesa->driDrawable->h;
-	    int x = gmesa->driDrawable->x;
-	    int w = gmesa->driDrawable->w;
-	    int h = gmesa->driDrawable->h;
-#ifndef TURN_OFF_FCP
-	    float hsub = h;
-
-	    if (gmesa->WindowChanged) {
-		gmesa->WindowChanged = GL_FALSE;
-	    } else {
-#ifdef FAST_CLEAR_4
-		hsub /= 16;
-#else
-		hsub /= 256;
-#endif
-
-		/* Handle the case where the height < # of FCPs */
-		if (hsub < 1.0) {
-		    if (gmesa->FrameCount > h)
-			gmesa->FrameCount = 0;
-		    h = 1;
-		    y += gmesa->FrameCount;
-		} else {
-		    h = (gmesa->FrameCount+1)*hsub;
-		    h -= (int)(gmesa->FrameCount*hsub);
-		    y += gmesa->FrameCount*hsub;
-		}
-	    }
-#endif
-	    if (h && w) {
-#if 0
-		CHECK_DMA_BUFFER(gmesa, 2);
-		WRITE(gmesa->buf, Rectangle2DMode, ((h & 0xfff)<<12) |
-						   (w & 0xfff) );
-		WRITE(gmesa->buf, DrawRectangle2D, ((y & 0xffff)<<16) |
-						   (x & 0xffff) );
-#else
-		CHECK_DMA_BUFFER(gmesa, 8);
-		WRITE(gmesa->buf, StartXDom,   x<<16);
-		WRITE(gmesa->buf, StartY,      y<<16);
-		WRITE(gmesa->buf, StartXSub,   (x+w)<<16);
-		WRITE(gmesa->buf, GLINTCount,  h);
-		WRITE(gmesa->buf, dY,          1<<16);
-		WRITE(gmesa->buf, dXDom,       0<<16);
-		WRITE(gmesa->buf, dXSub,       0<<16);
-		WRITE(gmesa->buf, Render,      0x00000040); /* NOT_DONE */
-#endif
-	    }
-	}
-
-	CHECK_DMA_BUFFER(gmesa, 6);
-	WRITE(gmesa->buf, DepthMode, gmesa->DepthMode);
-	WRITE(gmesa->buf, DeltaMode, gmesa->DeltaMode);
-	WRITE(gmesa->buf, LBReadMode, gmesa->LBReadMode);
-	WRITE(gmesa->buf, GLINTWindow, gmesa->Window);
-	WRITE(gmesa->buf, FastClearDepth, gmesa->ClearDepth);
-	WRITE(gmesa->buf, FBWriteMode, FBWriteModeEnable);
-
-	/* Turn on Depth FCP */
-	if (gmesa->Window & W_DepthFCP) {
-	    CHECK_DMA_BUFFER(gmesa, 1);
-	    WRITE(gmesa->buf, WindowOr, (gmesa->FrameCount << 9));
-	}
-
-	/* Turn off GID clipping if window is not clipped */
-	if (gmesa->NotClipped) {
-	    CHECK_DMA_BUFFER(gmesa, 1);
-	    WRITE(gmesa->buf, Rectangle2DControl, 0);
-	}
-    }
-
-    if (mask & (BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_BACK_LEFT)) {
-	int y = gmesa->driScreen->fbHeight - gmesa->driDrawable->y - gmesa->driDrawable->h;
-	int x = gmesa->driDrawable->x;
-	int w = gmesa->driDrawable->w;
-	int h = gmesa->driDrawable->h;
-
-	mask &= ~(BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_BACK_LEFT);
-
-	if (x < 0) { w -= -x; x = 0; }
-
-	/* Turn on GID clipping if window is clipped */
-	if (!gmesa->NotClipped) {
-	    CHECK_DMA_BUFFER(gmesa, 1);
-	    WRITE(gmesa->buf, Rectangle2DControl, 1);
-	}
-
-        CHECK_DMA_BUFFER(gmesa, 18);
-        WRITE(gmesa->buf, FBBlockColor, gmesa->ClearColor);
-        WRITE(gmesa->buf, ColorDDAMode, ColorDDADisable);
-	WRITE(gmesa->buf, FBWriteMode, FBWriteModeEnable);
-	WRITE(gmesa->buf, DepthMode, 0);
-	WRITE(gmesa->buf, DeltaMode, 0);
-	WRITE(gmesa->buf, AlphaBlendMode, 0);
-#if 1
-	WRITE(gmesa->buf, dY,          1<<16);
-	WRITE(gmesa->buf, dXDom,       0<<16);
-	WRITE(gmesa->buf, dXSub,       0<<16);
-	WRITE(gmesa->buf, StartXSub,   (x+w)<<16);
-	WRITE(gmesa->buf, GLINTCount,  h);
-	WRITE(gmesa->buf, StartXDom,   x<<16);
-	WRITE(gmesa->buf, StartY,      y<<16);
-	WRITE(gmesa->buf, Render,      0x00000048); /* NOT_DONE */
-#else
-	WRITE(gmesa->buf, Rectangle2DMode, (((h & 0xfff)<<12) |
-					      (w & 0xfff)));
-	WRITE(gmesa->buf, DrawRectangle2D, (((y & 0xffff)<<16) |
-					      (x & 0xffff)));
-#endif
-	WRITE(gmesa->buf, DepthMode, gmesa->DepthMode);
-	WRITE(gmesa->buf, DeltaMode, gmesa->DeltaMode);
-	WRITE(gmesa->buf, AlphaBlendMode, gmesa->AlphaBlendMode);
-	WRITE(gmesa->buf, ColorDDAMode, gmesa->ColorDDAMode);
-
-	/* Turn off GID clipping if window is clipped */
-	if (gmesa->NotClipped) {
-	    CHECK_DMA_BUFFER(gmesa, 1);
-	    WRITE(gmesa->buf, Rectangle2DControl, 0);
-	}
-    }
-
-#ifdef DO_VALIDATE
-    PROCESS_DMA_BUFFER_TOP_HALF(gmesa);
-
-    DRM_SPINUNLOCK(&gmesa->driScreen->pSAREA->drawable_lock,
-		   gmesa->driScreen->drawLockID);
-    VALIDATE_DRAWABLE_INFO_NO_LOCK_POST(gmesa);
-
-    PROCESS_DMA_BUFFER_BOTTOM_HALF(gmesa);
-#endif
-
-   if ( mask )
-      _swrast_Clear( ctx, mask );
-}
-
-/* =============================================================
- * Depth testing
- */
-
-static void gammaUpdateZMode( GLcontext *ctx )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-   uint32_t z = gmesa->DepthMode;
-   uint32_t delta = gmesa->DeltaMode;
-   uint32_t window = gmesa->Window;
-   uint32_t lbread = gmesa->LBReadMode;
-
-   z &= ~DM_CompareMask;
-
-   switch ( ctx->Depth.Func ) {
-      case GL_NEVER:
-	 z |= DM_Never;
-	 break;
-      case GL_ALWAYS:
-	 z |= DM_Always;
-	 break;
-      case GL_LESS:
-	 z |= DM_Less;
-	 break;
-      case GL_LEQUAL:
-	 z |= DM_LessEqual;
-	 break;
-      case GL_EQUAL:
-	 z |= DM_Equal;
-	 break;
-      case GL_GEQUAL:
-	 z |= DM_GreaterEqual;
-	 break;
-      case GL_GREATER:
-	 z |= DM_Greater;
-	 break;
-      case GL_NOTEQUAL:
-	 z |= DM_NotEqual;
-	 break;
-   }
-
-   if ( ctx->Depth.Test ) {
-      z      |= DepthModeEnable;
-      delta  |= DM_DepthEnable;
-      window |= W_DepthFCP;
-      lbread |= LBReadDstEnable;
-   } else {
-      z      &= ~DepthModeEnable;
-      delta  &= ~DM_DepthEnable;
-      window &= ~W_DepthFCP;
-      lbread &= ~LBReadDstEnable;
-   }
-
-   if ( ctx->Depth.Mask ) {
-      z |= DM_WriteMask;
-   } else {
-      z &= ~DM_WriteMask;
-   }
-
-#if 0
-   if ( gmesa->DepthMode != z ){
-#endif
-      gmesa->DepthMode = z;
-      gmesa->DeltaMode = delta;
-      gmesa->Window = window;
-      gmesa->LBReadMode = lbread;
-      gmesa->dirty |= GAMMA_UPLOAD_DEPTH;
-#if 0
-   }
-#endif
-}
-
-static void gammaDDDepthFunc( GLcontext *ctx, GLenum func )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-
-   FLUSH_BATCH( gmesa );
-   gmesa->new_state |= GAMMA_NEW_DEPTH;
-}
-
-static void gammaDDDepthMask( GLcontext *ctx, GLboolean flag )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-
-   FLUSH_BATCH( gmesa );
-   gmesa->new_state |= GAMMA_NEW_DEPTH;
-}
-
-static void gammaDDClearDepth( GLcontext *ctx, GLclampd d )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-
-   switch ( gmesa->DepthSize ) {
-   case 16:
-      gmesa->ClearDepth = d * 0x0000ffff;
-      break;
-   case 24:
-      gmesa->ClearDepth = d * 0x00ffffff;
-      break;
-   case 32:
-      gmesa->ClearDepth = d * 0xffffffff;
-      break;
-   }
-}
-
-static void gammaDDFinish( GLcontext *ctx )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-
-   FLUSH_DMA_BUFFER(gmesa);
-}
-
-static void gammaDDFlush( GLcontext *ctx )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-
-   FLUSH_DMA_BUFFER(gmesa);
-}
-
-/* =============================================================
- * Fog
- */
-
-static void gammaUpdateFogAttrib( GLcontext *ctx )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-   uint32_t f = gmesa->FogMode;
-   uint32_t g = gmesa->GeometryMode;
-   uint32_t d = gmesa->DeltaMode;
-
-   if (ctx->Fog.Enabled) {
-      f |= FogModeEnable;
-      g |= GM_FogEnable;
-      d |= DM_FogEnable;
-   } else {
-      f &= ~FogModeEnable;
-      g &= ~GM_FogEnable;
-      d &= ~DM_FogEnable;
-   }
-
-   g &= ~GM_FogMask;
-
-   switch (ctx->Fog.Mode) {
-      case GL_LINEAR:
-         g |= GM_FogLinear;
-         break;
-      case GL_EXP:
-         g |= GM_FogExp;
-         break;
-      case GL_EXP2:
-         g |= GM_FogExpSquared;
-         break;
-   }
-
-   if ( gmesa->FogMode != f ) {
-      gmesa->FogMode = f;
-      gmesa->dirty |= GAMMA_UPLOAD_FOG;
-   }
- 
-   if ( gmesa->GeometryMode != g ) {
-      gmesa->GeometryMode = g;
-      gmesa->dirty |= GAMMA_UPLOAD_GEOMETRY;
-   }
-
-   if ( gmesa->DeltaMode != d ) {
-      gmesa->DeltaMode = d;
-      gmesa->dirty |= GAMMA_UPLOAD_DEPTH;
-   }
-}
-
-#if 0
-static void gammaDDFogfv( GLcontext *ctx, GLenum pname, const GLfloat *param )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-
-   FLUSH_BATCH( gmesa );
-   gmesa->new_state |= GAMMA_NEW_FOG;
-}
-#endif
-
-/* =============================================================
- * Lines
- */
-static void gammaDDLineWidth( GLcontext *ctx, GLfloat width )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-
-   CHECK_DMA_BUFFER(gmesa, 3);
-   WRITE(gmesa->buf, LineWidth, (GLuint)width);
-   WRITEF(gmesa->buf, AAlineWidth, width);
-   WRITE(gmesa->buf, LineWidthOffset, (GLuint)(width-1)/2);
-}
-
-static void gammaDDLineStipple( GLcontext *ctx, GLint factor, GLushort pattern )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-
-   gmesa->LineMode &= ~(LM_StippleMask | LM_RepeatFactorMask);
-   gmesa->LineMode |= ((GLuint)(factor - 1) << 1) | ((GLuint)pattern << 10); 
-
-   gmesa->dirty |= GAMMA_UPLOAD_LINEMODE;
-}
-
-
-
-/* =============================================================
- * Points
- */
-static void gammaDDPointSize( GLcontext *ctx, GLfloat size )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-
-   CHECK_DMA_BUFFER(gmesa, 2);
-   WRITE(gmesa->buf, PointSize, (GLuint)size);
-   WRITEF(gmesa->buf, AApointSize, size);
-}
-
-/* =============================================================
- * Polygon 
- */
-
-static void gammaUpdatePolygon( GLcontext *ctx )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-   uint32_t g = gmesa->GeometryMode;
-
-   g &= ~(GM_PolyOffsetFillEnable | GM_PolyOffsetPointEnable |
-          GM_PolyOffsetLineEnable);
-
-   if (ctx->Polygon.OffsetFill) g |= GM_PolyOffsetFillEnable;
-   if (ctx->Polygon.OffsetPoint) g |= GM_PolyOffsetPointEnable;
-   if (ctx->Polygon.OffsetLine) g |= GM_PolyOffsetLineEnable;
-
-   g &= ~GM_FB_PolyMask;
-
-   switch (ctx->Polygon.FrontMode) {
-      case GL_FILL:
-         g |= GM_FrontPolyFill;
-         break;
-      case GL_LINE:
-         g |= GM_FrontPolyLine;
-         break;
-      case GL_POINT:
-         g |= GM_FrontPolyPoint;
-         break;
-   }
-
-   switch (ctx->Polygon.BackMode) {
-      case GL_FILL:
-         g |= GM_BackPolyFill;
-         break;
-      case GL_LINE:
-         g |= GM_BackPolyLine;
-         break;
-      case GL_POINT:
-         g |= GM_BackPolyPoint;
-         break;
-   }
-
-   if ( gmesa->GeometryMode != g ) {
-      gmesa->GeometryMode = g;
-      gmesa->dirty |= GAMMA_UPLOAD_GEOMETRY;
-   }
-
-   gmesa->dirty |= GAMMA_UPLOAD_POLYGON;
-}
-
-static void gammaDDPolygonMode( GLcontext *ctx, GLenum face, GLenum mode)
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-
-   FLUSH_BATCH( gmesa );
-
-   gmesa->new_state |= GAMMA_NEW_POLYGON;
-}
-
-static void gammaUpdateStipple( GLcontext *ctx )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-
-   FLUSH_BATCH( gmesa );
-
-   if (ctx->Polygon.StippleFlag) {
-      gmesa->AreaStippleMode |= AreaStippleModeEnable/* | ASM_X32 | ASM_Y32*/;
-   } else {
-      gmesa->AreaStippleMode &= ~AreaStippleModeEnable;
-   }
-
-   gmesa->dirty |= GAMMA_UPLOAD_STIPPLE;
-}
-
-static void gammaDDPolygonStipple( GLcontext *ctx, const GLubyte *mask)
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-   FLUSH_BATCH( gmesa );
-   gmesa->new_state |= GAMMA_NEW_STIPPLE;
-}
-
-/* =============================================================
- * Clipping
- */
-
-static void gammaUpdateClipping( GLcontext *ctx )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-   GLint x1, y1, x2, y2;
-
-   if ( gmesa->driDrawable ) {
-      x1 = gmesa->driDrawable->x + ctx->Scissor.X;
-      y1 = gmesa->driScreen->fbHeight -
-	(gmesa->driDrawable->y +
-	 gmesa->driDrawable->h) + ctx->Scissor.Y;
-      x2 = x1 + ctx->Scissor.Width;
-      y2 = y1 + ctx->Scissor.Height;
-
-      gmesa->ScissorMinXY = x1 | (y1 << 16);
-      gmesa->ScissorMaxXY = x2 | (y2 << 16);
-      if (ctx->Scissor.Enabled) 
-         gmesa->ScissorMode |= UserScissorEnable;
-      else
-         gmesa->ScissorMode &= ~UserScissorEnable;
-
-      gmesa->dirty |= GAMMA_UPLOAD_CLIP;
-   }
-}
-
-static void gammaDDScissor( GLcontext *ctx,
-			   GLint x, GLint y, GLsizei w, GLsizei h )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-
-   FLUSH_BATCH( gmesa );
-   gmesa->new_state |= GAMMA_NEW_CLIP;
-}
-
-/* =============================================================
- * Culling
- */
-
-static void gammaUpdateCull( GLcontext *ctx )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-   uint32_t g = gmesa->GeometryMode;
-
-   g &= ~(GM_PolyCullMask | GM_FFMask);
-
-   if (ctx->Polygon.FrontFace == GL_CCW) {
-      g |= GM_FrontFaceCCW;
-   } else {
-      g |= GM_FrontFaceCW;
-   }
-
-   switch ( ctx->Polygon.CullFaceMode ) {
-      case GL_FRONT:
-	 g |= GM_PolyCullFront;
-	 break;
-      case GL_BACK:
-	 g |= GM_PolyCullBack;
-	 break;
-      case GL_FRONT_AND_BACK:
-	 g |= GM_PolyCullBoth;
-	 break;
-   }
-
-   if ( ctx->Polygon.CullFlag ) {
-      g |= GM_PolyCullEnable;
-   } else {
-      g &= ~GM_PolyCullEnable;
-   }
-
-   if ( gmesa->GeometryMode != g ) {
-      gmesa->GeometryMode = g;
-      gmesa->dirty |= GAMMA_UPLOAD_GEOMETRY;
-   }
-}
-
-static void gammaDDCullFace( GLcontext *ctx, GLenum mode )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-
-   FLUSH_BATCH( gmesa );
-   gmesa->new_state |= GAMMA_NEW_CULL;
-}
-
-static void gammaDDFrontFace( GLcontext *ctx, GLenum mode )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-
-   FLUSH_BATCH( gmesa );
-   gmesa->new_state |= GAMMA_NEW_CULL;
-}
-
-/* =============================================================
- * Masks
- */
-
-static void gammaUpdateMasks( GLcontext *ctx )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-
-
-   GLuint mask = gammaPackColor( gmesa->gammaScreen->cpp,
-				ctx->Color.ColorMask[0][RCOMP],
-				ctx->Color.ColorMask[0][GCOMP],
-				ctx->Color.ColorMask[0][BCOMP],
-				ctx->Color.ColorMask[0][ACOMP] );
-
-   if (gmesa->gammaScreen->cpp == 2) mask |= mask << 16;
-
-   if ( gmesa->FBHardwareWriteMask != mask ) {
-      gmesa->FBHardwareWriteMask = mask;
-      gmesa->dirty |= GAMMA_UPLOAD_MASKS;
-   }
-}
-
-static void gammaDDColorMask( GLcontext *ctx, GLboolean r, GLboolean g,
-			      GLboolean b, GLboolean a)
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-
-   FLUSH_BATCH( gmesa );
-   gmesa->new_state |= GAMMA_NEW_MASKS;
-}
-
-/* =============================================================
- * Rendering attributes
- *
- * We really don't want to recalculate all this every time we bind a
- * texture.  These things shouldn't change all that often, so it makes
- * sense to break them out of the core texture state update routines.
- */
-
-#if ENABLELIGHTING
-static void gammaDDLightfv(GLcontext *ctx, GLenum light, GLenum pname, 
-				const GLfloat *params, GLint nParams)
-{
-    gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-    GLfloat l,x,y,z,w;
-
-    switch(light) {
-    case GL_LIGHT0:
-	switch (pname) {
-	case GL_AMBIENT:
-	    CHECK_DMA_BUFFER(gmesa, 3);
-	    /* We don't do alpha */
-	    WRITEF(gmesa->buf, Light0AmbientIntensityBlue, params[2]);
-	    WRITEF(gmesa->buf, Light0AmbientIntensityGreen, params[1]);
-	    WRITEF(gmesa->buf, Light0AmbientIntensityRed, params[0]);
-	    break;
-	case GL_DIFFUSE:
-	    CHECK_DMA_BUFFER(gmesa, 3);
-	    /* We don't do alpha */
-	    WRITEF(gmesa->buf, Light0DiffuseIntensityBlue, params[2]);
-	    WRITEF(gmesa->buf, Light0DiffuseIntensityGreen, params[1]);
-	    WRITEF(gmesa->buf, Light0DiffuseIntensityRed, params[0]);
-	    break;
-	case GL_SPECULAR:
-	    CHECK_DMA_BUFFER(gmesa, 3);
-	    /* We don't do alpha */
-	    WRITEF(gmesa->buf, Light0SpecularIntensityBlue, params[2]);
-	    WRITEF(gmesa->buf, Light0SpecularIntensityGreen, params[1]);
-	    WRITEF(gmesa->buf, Light0SpecularIntensityRed, params[0]);
-	    break;
-	case GL_POSITION:
-    	    /* Normalize <x,y,z> */
-	    x = params[0]; y = params[1]; z = params[2]; w = params[3];
-	    l = sqrt(x*x + y*y + z*z + w*w);
-	    w /= l;
-	    x /= l;
-	    y /= l;
-	    z /= l;
-	    if (params[3] != 0.0) {
-		gmesa->Light0Mode |= Light0ModeAttenuation;
-		gmesa->Light0Mode |= Light0ModeLocal;
-	    } else {
-		gmesa->Light0Mode &= ~Light0ModeAttenuation;
-		gmesa->Light0Mode &= ~Light0ModeLocal;
-	    }
-	    CHECK_DMA_BUFFER(gmesa, 5);
-	    WRITE(gmesa->buf, Light0Mode, gmesa->Light0Mode);
-	    WRITEF(gmesa->buf, Light0PositionW, w);
-	    WRITEF(gmesa->buf, Light0PositionZ, z);
-	    WRITEF(gmesa->buf, Light0PositionY, y);
-	    WRITEF(gmesa->buf, Light0PositionX, x);
-	    break;
-	case GL_SPOT_DIRECTION:
-	    CHECK_DMA_BUFFER(gmesa, 3);
-	    /* WRITEF(gmesa->buf, Light0SpotlightDirectionW, params[3]); */
-	    WRITEF(gmesa->buf, Light0SpotlightDirectionZ, params[2]);
-	    WRITEF(gmesa->buf, Light0SpotlightDirectionY, params[1]);
-	    WRITEF(gmesa->buf, Light0SpotlightDirectionX, params[0]);
-	    break;
-	case GL_SPOT_EXPONENT:
-	    CHECK_DMA_BUFFER(gmesa, 1);
-	    WRITEF(gmesa->buf, Light0SpotlightExponent, params[0]);
-	    break;
-	case GL_SPOT_CUTOFF:
-	    if (params[0] != 180.0) 
-		gmesa->Light0Mode |= Light0ModeSpotLight;
-	    else
-		gmesa->Light0Mode &= ~Light0ModeSpotLight;
-	    CHECK_DMA_BUFFER(gmesa, 2);
-	    WRITE(gmesa->buf, Light0Mode, gmesa->Light0Mode);
-	    WRITEF(gmesa->buf, Light0CosSpotlightCutoffAngle, cos(params[0]*DEG2RAD));
-	    break;
-	case GL_CONSTANT_ATTENUATION:
-	    CHECK_DMA_BUFFER(gmesa, 1);
-	    WRITEF(gmesa->buf, Light0ConstantAttenuation, params[0]);
-	    break;
-	case GL_LINEAR_ATTENUATION:
-	    CHECK_DMA_BUFFER(gmesa, 1);
-	    WRITEF(gmesa->buf, Light0LinearAttenuation, params[0]);
-	    break;
-	case GL_QUADRATIC_ATTENUATION:
-	    CHECK_DMA_BUFFER(gmesa, 1);
-	    WRITEF(gmesa->buf, Light0QuadraticAttenuation, params[0]);
-	    break;
-	}
-	break;
-    }
-}
-
-static void gammaDDLightModelfv( GLcontext *ctx, GLenum pname,
-				const GLfloat *params )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-
-   switch (pname) {
-   case GL_LIGHT_MODEL_AMBIENT:
-	CHECK_DMA_BUFFER(gmesa, 3);
-	/* We don't do alpha */
-	WRITEF(gmesa->buf, SceneAmbientColorBlue, params[2]);
-	WRITEF(gmesa->buf, SceneAmbientColorGreen, params[1]);
-	WRITEF(gmesa->buf, SceneAmbientColorRed, params[0]);
-	break;
-    case GL_LIGHT_MODEL_LOCAL_VIEWER:
-	if (params[0] != 0.0)
-	    gmesa->LightingMode |= LightingModeLocalViewer;
-	else
-	    gmesa->LightingMode &= ~LightingModeLocalViewer;
-	CHECK_DMA_BUFFER(gmesa, 1);
-	WRITE(gmesa->buf, LightingMode, gmesa->LightingMode);
-	break;
-    case GL_LIGHT_MODEL_TWO_SIDE:
-	if (params[0] == 1.0f) {
-	    gmesa->LightingMode |= LightingModeTwoSides;
-	    gmesa->MaterialMode |= MaterialModeTwoSides;
-	} else {
-	    gmesa->LightingMode &= ~LightingModeTwoSides;
-	    gmesa->MaterialMode &= ~MaterialModeTwoSides;
-	}
-	CHECK_DMA_BUFFER(gmesa, 2);
-	WRITE(gmesa->buf, LightingMode, gmesa->LightingMode);
-	WRITE(gmesa->buf, MaterialMode, gmesa->MaterialMode);
-	break;
-    }
-}
-#endif
-
-static void gammaDDShadeModel( GLcontext *ctx, GLenum mode )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-   uint32_t g = gmesa->GeometryMode;
-   uint32_t c = gmesa->ColorDDAMode;
-
-   g &= ~GM_ShadingMask;
-   c &= ~ColorDDAShadingMask;
-
-   switch ( mode ) {
-   case GL_FLAT:
-      g |= GM_FlatShading;
-      c |= ColorDDAFlat;
-      break;
-   case GL_SMOOTH:
-      g |= GM_GouraudShading;
-      c |= ColorDDAGouraud;
-      break;
-   default:
-      return;
-   }
-
-   if ( gmesa->ColorDDAMode != c ) {
-      FLUSH_BATCH( gmesa );
-      gmesa->ColorDDAMode = c;
-
-      gmesa->dirty |= GAMMA_UPLOAD_SHADE;
-   }
-
-   if ( gmesa->GeometryMode != g ) {
-      FLUSH_BATCH( gmesa );
-      gmesa->GeometryMode = g;
-
-      gmesa->dirty |= GAMMA_UPLOAD_GEOMETRY;
-   }
-}
-
-/* =============================================================
- * Miscellaneous
- */
-
-static void gammaDDClearColor( GLcontext *ctx, const GLfloat color[4])
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-   GLubyte c[4];
-   UNCLAMPED_FLOAT_TO_UBYTE(c[0], color[0]);
-   UNCLAMPED_FLOAT_TO_UBYTE(c[1], color[1]);
-   UNCLAMPED_FLOAT_TO_UBYTE(c[2], color[2]);
-   UNCLAMPED_FLOAT_TO_UBYTE(c[3], color[3]);
-
-   gmesa->ClearColor = gammaPackColor( gmesa->gammaScreen->cpp,
-                                       c[0], c[1], c[2], c[3] );
-
-   if (gmesa->gammaScreen->cpp == 2) gmesa->ClearColor |= gmesa->ClearColor<<16;
-}
-
-
-static void gammaDDLogicalOpcode( GLcontext *ctx, GLenum opcode )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-
-   FLUSH_BATCH( gmesa );
-
-   if ( ctx->Color.ColorLogicOpEnabled ) {
-      gmesa->LogicalOpMode = opcode << 1 | LogicalOpModeEnable;
-   } else {
-      gmesa->LogicalOpMode = LogicalOpModeDisable;
-   }
-
-   gmesa->dirty |= GAMMA_UPLOAD_LOGICOP;
-}
-
-static void gammaDDDrawBuffer( GLcontext *ctx, GLenum mode )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-
-   FLUSH_BATCH( gmesa );
-
-   switch ( mode ) {
-   case GL_FRONT_LEFT:
-      gmesa->drawOffset = gmesa->readOffset = 0;
-      break;
-   case GL_BACK_LEFT:
-      gmesa->drawOffset = gmesa->readOffset = gmesa->driScreen->fbHeight * gmesa->driScreen->fbWidth * gmesa->gammaScreen->cpp; 
-      break;
-   }
-}
-
-static void gammaDDReadBuffer( GLcontext *ctx, GLenum mode )
-{
-   /* XXX anything? */
-}
-
-/* =============================================================
- * Window position and viewport transformation
- */
-
-void gammaUpdateWindow( GLcontext *ctx )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-   __DRIdrawable *dPriv = gmesa->driDrawable;
-   GLfloat xoffset = (GLfloat)dPriv->x;
-   GLfloat yoffset = gmesa->driScreen->fbHeight - (GLfloat)dPriv->y - dPriv->h;
-   const GLfloat *v = ctx->Viewport._WindowMap.m;
-
-   GLfloat sx = v[MAT_SX];
-   GLfloat tx = v[MAT_TX] + xoffset;
-   GLfloat sy = v[MAT_SY];
-   GLfloat ty = v[MAT_TY] + yoffset;
-   GLfloat sz = v[MAT_SZ] * gmesa->depth_scale;
-   GLfloat tz = v[MAT_TZ] * gmesa->depth_scale;
-
-   gmesa->dirty |= GAMMA_UPLOAD_VIEWPORT;
-
-   gmesa->ViewportScaleX = sx;
-   gmesa->ViewportScaleY = sy;
-   gmesa->ViewportScaleZ = sz;
-   gmesa->ViewportOffsetX = tx;
-   gmesa->ViewportOffsetY = ty;
-   gmesa->ViewportOffsetZ = tz;
-}
-
-
-
-static void gammaDDViewport( GLcontext *ctx, GLint x, GLint y,
-			    GLsizei width, GLsizei height )
-{
-   gammaUpdateWindow( ctx );
-}
-
-static void gammaDDDepthRange( GLcontext *ctx, GLclampd nearval,
-			      GLclampd farval )
-{
-   gammaUpdateWindow( ctx );
-}
-
-void gammaUpdateViewportOffset( GLcontext *ctx )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-   __DRIdrawable *dPriv = gmesa->driDrawable;
-   GLfloat xoffset = (GLfloat)dPriv->x;
-   GLfloat yoffset = gmesa->driScreen->fbHeight - (GLfloat)dPriv->y - dPriv->h;
-   const GLfloat *v = ctx->Viewport._WindowMap.m;
-
-   GLfloat tx = v[MAT_TX] + xoffset;
-   GLfloat ty = v[MAT_TY] + yoffset;
-
-   if ( gmesa->ViewportOffsetX != tx ||
-        gmesa->ViewportOffsetY != ty )
-   {
-      gmesa->ViewportOffsetX = tx;
-      gmesa->ViewportOffsetY = ty;
-
-      gmesa->new_state |= GAMMA_NEW_WINDOW;
-   }
-
-   gmesa->new_state |= GAMMA_NEW_CLIP;
-}
-
-#if 0
-/* 
- * Matrix 
- */
-
-static void gammaLoadHWMatrix(GLcontext *ctx)
-{
-    gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-    const GLfloat *m;
-
-    gmesa->TransformMode &= ~XM_XformTexture;
-
-    switch (ctx->Transform.MatrixMode) {
-    case GL_MODELVIEW:
-	gmesa->TransformMode |= XM_UseModelViewMatrix;
-        m = ctx->ModelviewMatrixStack.Top->m;
-	CHECK_DMA_BUFFER(gmesa, 16);
-	WRITEF(gmesa->buf, ModelViewMatrix0,  m[0]);
-	WRITEF(gmesa->buf, ModelViewMatrix1,  m[1]);
-	WRITEF(gmesa->buf, ModelViewMatrix2,  m[2]);
-	WRITEF(gmesa->buf, ModelViewMatrix3,  m[3]);
-	WRITEF(gmesa->buf, ModelViewMatrix4,  m[4]);
-	WRITEF(gmesa->buf, ModelViewMatrix5,  m[5]);
-	WRITEF(gmesa->buf, ModelViewMatrix6,  m[6]);
-	WRITEF(gmesa->buf, ModelViewMatrix7,  m[7]);
-	WRITEF(gmesa->buf, ModelViewMatrix8,  m[8]);
-	WRITEF(gmesa->buf, ModelViewMatrix9,  m[9]);
-	WRITEF(gmesa->buf, ModelViewMatrix10, m[10]);
-	WRITEF(gmesa->buf, ModelViewMatrix11, m[11]);
-	WRITEF(gmesa->buf, ModelViewMatrix12, m[12]);
-	WRITEF(gmesa->buf, ModelViewMatrix13, m[13]);
-	WRITEF(gmesa->buf, ModelViewMatrix14, m[14]);
-	WRITEF(gmesa->buf, ModelViewMatrix15, m[15]);
-	break;
-    case GL_PROJECTION:
-        m = ctx->ProjectionMatrixStack.Top->m;
-	CHECK_DMA_BUFFER(gmesa, 16);
-	WRITEF(gmesa->buf, ModelViewProjectionMatrix0, m[0]);
-	WRITEF(gmesa->buf, ModelViewProjectionMatrix1, m[1]);
-	WRITEF(gmesa->buf, ModelViewProjectionMatrix2, m[2]);
-	WRITEF(gmesa->buf, ModelViewProjectionMatrix3, m[3]);
-	WRITEF(gmesa->buf, ModelViewProjectionMatrix4, m[4]);
-	WRITEF(gmesa->buf, ModelViewProjectionMatrix5, m[5]);
-	WRITEF(gmesa->buf, ModelViewProjectionMatrix6, m[6]);
-	WRITEF(gmesa->buf, ModelViewProjectionMatrix7, m[7]);
-	WRITEF(gmesa->buf, ModelViewProjectionMatrix8, m[8]);
-	WRITEF(gmesa->buf, ModelViewProjectionMatrix9, m[9]);
-	WRITEF(gmesa->buf, ModelViewProjectionMatrix10, m[10]);
-	WRITEF(gmesa->buf, ModelViewProjectionMatrix11, m[11]);
-	WRITEF(gmesa->buf, ModelViewProjectionMatrix12, m[12]);
-	WRITEF(gmesa->buf, ModelViewProjectionMatrix13, m[13]);
-	WRITEF(gmesa->buf, ModelViewProjectionMatrix14, m[14]);
-	WRITEF(gmesa->buf, ModelViewProjectionMatrix15, m[15]);
-	break;
-    case GL_TEXTURE:
-        m = ctx->TextureMatrixStack[0].Top->m;
-	CHECK_DMA_BUFFER(gmesa, 16);
-	gmesa->TransformMode |= XM_XformTexture;
-	WRITEF(gmesa->buf, TextureMatrix0,  m[0]);
-	WRITEF(gmesa->buf, TextureMatrix1,  m[1]);
-	WRITEF(gmesa->buf, TextureMatrix2,  m[2]);
-	WRITEF(gmesa->buf, TextureMatrix3,  m[3]);
-	WRITEF(gmesa->buf, TextureMatrix4,  m[4]);
-	WRITEF(gmesa->buf, TextureMatrix5,  m[5]);
-	WRITEF(gmesa->buf, TextureMatrix6,  m[6]);
-	WRITEF(gmesa->buf, TextureMatrix7,  m[7]);
-	WRITEF(gmesa->buf, TextureMatrix8,  m[8]);
-	WRITEF(gmesa->buf, TextureMatrix9,  m[9]);
-	WRITEF(gmesa->buf, TextureMatrix10,  m[10]);
-	WRITEF(gmesa->buf, TextureMatrix11,  m[11]);
-	WRITEF(gmesa->buf, TextureMatrix12,  m[12]);
-	WRITEF(gmesa->buf, TextureMatrix13,  m[13]);
-	WRITEF(gmesa->buf, TextureMatrix14,  m[14]);
-	WRITEF(gmesa->buf, TextureMatrix15,  m[15]);
-	break;
-
-    default:
-	/* ERROR!!! -- how did this happen? */
-	break;
-    }
-
-    gmesa->dirty |= GAMMA_UPLOAD_TRANSFORM;
-}
-#endif
-
-/* =============================================================
- * State enable/disable
- */
-
-static void gammaDDEnable( GLcontext *ctx, GLenum cap, GLboolean state )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-
-   switch ( cap ) {
-   case GL_ALPHA_TEST:
-   case GL_BLEND:
-      FLUSH_BATCH( gmesa );
-      gmesa->new_state |= GAMMA_NEW_ALPHA;
-      break;
-
-   case GL_CULL_FACE:
-      FLUSH_BATCH( gmesa );
-      gmesa->new_state |= GAMMA_NEW_CULL;
-      break;
-
-   case GL_DEPTH_TEST:
-      FLUSH_BATCH( gmesa );
-      gmesa->new_state |= GAMMA_NEW_DEPTH;
-      break;
-
-   case GL_DITHER:
-      do {
-	 uint32_t d = gmesa->DitherMode;
-	 FLUSH_BATCH( gmesa );
-
-	 if ( state ) {
-	    d |=  DM_DitherEnable;
-	 } else {
-	    d &= ~DM_DitherEnable;
-	 }
-
-	 if ( gmesa->DitherMode != d ) {
-	    gmesa->DitherMode = d;
-	    gmesa->dirty |= GAMMA_UPLOAD_DITHER;
-	 }
-      } while (0);
-      break;
-
-#if 0
-   case GL_FOG:
-      FLUSH_BATCH( gmesa );
-      gmesa->new_state |= GAMMA_NEW_FOG;
-      break;
-#endif
-
-   case GL_INDEX_LOGIC_OP:
-   case GL_COLOR_LOGIC_OP:
-      FLUSH_BATCH( gmesa );
-      gmesa->new_state |= GAMMA_NEW_LOGICOP;
-      break;
-
-#if ENABLELIGHTING
-   case GL_LIGHTING:
-      do {
-	 uint32_t l = gmesa->LightingMode;
-	 FLUSH_BATCH( gmesa );
-
-	 if ( state ) {
-	    l |=  LightingModeEnable;
-	 } else {
-	    l &= ~LightingModeEnable;
-	 }
-
-	 if ( gmesa->LightingMode != l ) {
-	    gmesa->LightingMode = l;
-	    gmesa->dirty |= GAMMA_UPLOAD_LIGHT;
-	 }
-      } while (0);
-      break;
-
-   case GL_COLOR_MATERIAL:
-      do {
-	 uint32_t m = gmesa->MaterialMode;
-	 FLUSH_BATCH( gmesa );
-
-	 if ( state ) {
-	    m |=  MaterialModeEnable;
-	 } else {
-	    m &= ~MaterialModeEnable;
-	 }
-
-	 if ( gmesa->MaterialMode != m ) {
-	    gmesa->MaterialMode = m;
-	    gmesa->dirty |= GAMMA_UPLOAD_LIGHT;
-	 }
-      } while (0);
-      break;
-#endif
-
-   case GL_LINE_SMOOTH:
-      FLUSH_BATCH( gmesa );
-      if ( state ) {
-         gmesa->AntialiasMode |= AntialiasModeEnable;
-         gmesa->LineMode |= LM_AntialiasEnable;
-      } else {
-         gmesa->AntialiasMode &= ~AntialiasModeEnable;
-         gmesa->LineMode &= ~LM_AntialiasEnable;
-      }
-      gmesa->dirty |= GAMMA_UPLOAD_LINEMODE;
-      break;
-
-   case GL_POINT_SMOOTH:
-      FLUSH_BATCH( gmesa );
-      if ( state ) {
-         gmesa->AntialiasMode |= AntialiasModeEnable;
-         gmesa->PointMode |= PM_AntialiasEnable;
-      } else {
-         gmesa->AntialiasMode &= ~AntialiasModeEnable;
-         gmesa->PointMode &= ~PM_AntialiasEnable;
-      }
-      gmesa->dirty |= GAMMA_UPLOAD_POINTMODE;
-      break;
-
-   case GL_POLYGON_SMOOTH:
-      FLUSH_BATCH( gmesa );
-      if ( state ) {
-         gmesa->AntialiasMode |= AntialiasModeEnable;
-         gmesa->TriangleMode |= TM_AntialiasEnable;
-      } else {
-         gmesa->AntialiasMode &= ~AntialiasModeEnable;
-         gmesa->TriangleMode &= ~TM_AntialiasEnable;
-      }
-      gmesa->dirty |= GAMMA_UPLOAD_TRIMODE;
-      break;
-
-   case GL_SCISSOR_TEST:
-      FLUSH_BATCH( gmesa );
-      gmesa->new_state |= GAMMA_NEW_CLIP;
-      break;
-
-   case GL_POLYGON_OFFSET_FILL:
-   case GL_POLYGON_OFFSET_POINT:
-   case GL_POLYGON_OFFSET_LINE:
-      FLUSH_BATCH( gmesa );
-      gmesa->new_state |= GAMMA_NEW_POLYGON;
-      break;
-
-   case GL_LINE_STIPPLE:
-      FLUSH_BATCH( gmesa );
-      if ( state )
-         gmesa->LineMode |= LM_StippleEnable;
-      else
-         gmesa->LineMode &= ~LM_StippleEnable;
-      gmesa->dirty |= GAMMA_UPLOAD_LINEMODE;
-      break;
-
-   case GL_POLYGON_STIPPLE:
-      FLUSH_BATCH( gmesa );
-      gmesa->new_state |= GAMMA_NEW_STIPPLE;
-      break;
-
-   default:
-      return;
-   }
-}
-
-/* =============================================================
- * State initialization, management
- */
-
-
-/*
- * Load the current context's state into the hardware.
- *
- * NOTE: Be VERY careful about ensuring the context state is marked for
- * upload, the only place it shouldn't be uploaded is when the setup
- * state has changed in ReducedPrimitiveChange as this comes right after
- * a state update.
- *
- * Blits of any type should always upload the context and masks after
- * they are done.
- */
-void gammaEmitHwState( gammaContextPtr gmesa )
-{
-    if (!gmesa->driDrawable) return;
-
-    if (!gmesa->dirty) return;
-
-#ifdef DO_VALIDATE
-    /* Flush any partially filled buffers */
-    FLUSH_DMA_BUFFER(gmesa);
-
-    DRM_SPINLOCK(&gmesa->driScreen->pSAREA->drawable_lock,
-		 gmesa->driScreen->drawLockID);
-    VALIDATE_DRAWABLE_INFO_NO_LOCK(gmesa);
-#endif
-
-    if (gmesa->dirty & GAMMA_UPLOAD_VIEWPORT) {
-	gmesa->dirty &= ~GAMMA_UPLOAD_VIEWPORT;
- 	CHECK_DMA_BUFFER(gmesa, 6);
- 	WRITEF(gmesa->buf, ViewPortOffsetX, gmesa->ViewportOffsetX);
- 	WRITEF(gmesa->buf, ViewPortOffsetY, gmesa->ViewportOffsetY);
- 	WRITEF(gmesa->buf, ViewPortOffsetZ, gmesa->ViewportOffsetZ);
- 	WRITEF(gmesa->buf, ViewPortScaleX, gmesa->ViewportScaleX);
- 	WRITEF(gmesa->buf, ViewPortScaleY, gmesa->ViewportScaleY);
- 	WRITEF(gmesa->buf, ViewPortScaleZ, gmesa->ViewportScaleZ);
-    }
-    if ( (gmesa->dirty & GAMMA_UPLOAD_POINTMODE) ||
-	 (gmesa->dirty & GAMMA_UPLOAD_LINEMODE) ||
-	 (gmesa->dirty & GAMMA_UPLOAD_TRIMODE) ) {
- 	CHECK_DMA_BUFFER(gmesa, 1);
-	WRITE(gmesa->buf, AntialiasMode, gmesa->AntialiasMode);
-    }
-    if (gmesa->dirty & GAMMA_UPLOAD_POINTMODE) {
-	gmesa->dirty &= ~GAMMA_UPLOAD_POINTMODE;
- 	CHECK_DMA_BUFFER(gmesa, 1);
- 	WRITE(gmesa->buf, PointMode, gmesa->PointMode);
-    }
-    if (gmesa->dirty & GAMMA_UPLOAD_LINEMODE) {
-	gmesa->dirty &= ~GAMMA_UPLOAD_LINEMODE;
- 	CHECK_DMA_BUFFER(gmesa, 2);
- 	WRITE(gmesa->buf, LineMode, gmesa->LineMode);
- 	WRITE(gmesa->buf, LineStippleMode, gmesa->LineMode);
-    }
-    if (gmesa->dirty & GAMMA_UPLOAD_TRIMODE) {
-	gmesa->dirty &= ~GAMMA_UPLOAD_TRIMODE;
- 	CHECK_DMA_BUFFER(gmesa, 1);
- 	WRITE(gmesa->buf, TriangleMode, gmesa->TriangleMode);
-    }
-    if (gmesa->dirty & GAMMA_UPLOAD_FOG) {
-	GLchan c[3], col;
-   	UNCLAMPED_FLOAT_TO_RGB_CHAN( c, gmesa->glCtx->Fog.Color );
-	col = gammaPackColor(4, c[0], c[1], c[2], 0);
-	gmesa->dirty &= ~GAMMA_UPLOAD_FOG;
-	CHECK_DMA_BUFFER(gmesa, 5);
-#if 0
-	WRITE(gmesa->buf, FogMode, gmesa->FogMode);
-	WRITE(gmesa->buf, FogColor, col);
-	WRITEF(gmesa->buf, FStart, gmesa->glCtx->Fog.Start);
-#endif
-	WRITEF(gmesa->buf, FogEnd, gmesa->glCtx->Fog.End);
-	WRITEF(gmesa->buf, FogDensity, gmesa->glCtx->Fog.Density);
-	WRITEF(gmesa->buf, FogScale, 
-		1.0f/(gmesa->glCtx->Fog.End - gmesa->glCtx->Fog.Start));
-    }
-    if (gmesa->dirty & GAMMA_UPLOAD_DITHER) {
-	gmesa->dirty &= ~GAMMA_UPLOAD_DITHER;
-	CHECK_DMA_BUFFER(gmesa, 1);
-	WRITE(gmesa->buf, DitherMode, gmesa->DitherMode);
-    }
-    if (gmesa->dirty & GAMMA_UPLOAD_LOGICOP) {
-	gmesa->dirty &= ~GAMMA_UPLOAD_LOGICOP;
-	CHECK_DMA_BUFFER(gmesa, 1);
-	WRITE(gmesa->buf, LogicalOpMode, gmesa->LogicalOpMode);
-    }
-    if (gmesa->dirty & GAMMA_UPLOAD_CLIP) {
-	gmesa->dirty &= ~GAMMA_UPLOAD_CLIP;
-	CHECK_DMA_BUFFER(gmesa, 3);
-	WRITE(gmesa->buf, ScissorMinXY, gmesa->ScissorMinXY);
-	WRITE(gmesa->buf, ScissorMaxXY, gmesa->ScissorMaxXY);
-	WRITE(gmesa->buf, ScissorMode, gmesa->ScissorMode);
-    }
-    if (gmesa->dirty & GAMMA_UPLOAD_MASKS) {
-	gmesa->dirty &= ~GAMMA_UPLOAD_MASKS;
-	CHECK_DMA_BUFFER(gmesa, 1);
-	WRITE(gmesa->buf, FBHardwareWriteMask, gmesa->FBHardwareWriteMask);
-    }
-    if (gmesa->dirty & GAMMA_UPLOAD_ALPHA) {
-	gmesa->dirty &= ~GAMMA_UPLOAD_ALPHA;
-	CHECK_DMA_BUFFER(gmesa, 1);
-	WRITE(gmesa->buf, AlphaTestMode, gmesa->AlphaTestMode);
-    }
-    if (gmesa->dirty & GAMMA_UPLOAD_BLEND) {
-	gmesa->dirty &= ~GAMMA_UPLOAD_BLEND;
-	CHECK_DMA_BUFFER(gmesa, 1);
-	WRITE(gmesa->buf, AlphaBlendMode, gmesa->AlphaBlendMode);
-    } 
-    CHECK_DMA_BUFFER(gmesa, 1);
-    if (gmesa->glCtx->Color.BlendEnabled || gmesa->glCtx->Color.AlphaEnabled) {
-    	WRITE(gmesa->buf, FBReadMode, gmesa->FBReadMode | gmesa->AB_FBReadMode_Save);
-    } else {
-    	WRITE(gmesa->buf, FBReadMode, gmesa->FBReadMode);
-    }
-    if (gmesa->dirty & GAMMA_UPLOAD_LIGHT) {
-	gmesa->dirty &= ~GAMMA_UPLOAD_LIGHT;
-	CHECK_DMA_BUFFER(gmesa, 2);
-	WRITE(gmesa->buf, LightingMode, gmesa->LightingMode);
-	WRITE(gmesa->buf, MaterialMode, gmesa->MaterialMode);
-    }
-    if (gmesa->dirty & GAMMA_UPLOAD_SHADE) {
-	gmesa->dirty &= ~GAMMA_UPLOAD_SHADE;
-	CHECK_DMA_BUFFER(gmesa, 1);
-	WRITE(gmesa->buf, ColorDDAMode, gmesa->ColorDDAMode);
-    }
-    if (gmesa->dirty & GAMMA_UPLOAD_POLYGON) {
-	gmesa->dirty &= ~GAMMA_UPLOAD_POLYGON;
-	CHECK_DMA_BUFFER(gmesa, 2);
-	WRITEF(gmesa->buf, PolygonOffsetBias, gmesa->glCtx->Polygon.OffsetUnits);
-	WRITEF(gmesa->buf, PolygonOffsetFactor, gmesa->glCtx->Polygon.OffsetFactor);
-    }
-    if (gmesa->dirty & GAMMA_UPLOAD_STIPPLE) {
-	gmesa->dirty &= ~GAMMA_UPLOAD_STIPPLE;
-	CHECK_DMA_BUFFER(gmesa, 33);
-	WRITE(gmesa->buf, AreaStippleMode, gmesa->AreaStippleMode);
-	WRITE(gmesa->buf, AreaStipplePattern0, gmesa->glCtx->PolygonStipple[0]);
-	WRITE(gmesa->buf, AreaStipplePattern1, gmesa->glCtx->PolygonStipple[1]);
-	WRITE(gmesa->buf, AreaStipplePattern2, gmesa->glCtx->PolygonStipple[2]);
-	WRITE(gmesa->buf, AreaStipplePattern3, gmesa->glCtx->PolygonStipple[3]);
-	WRITE(gmesa->buf, AreaStipplePattern4, gmesa->glCtx->PolygonStipple[4]);
-	WRITE(gmesa->buf, AreaStipplePattern5, gmesa->glCtx->PolygonStipple[5]);
-	WRITE(gmesa->buf, AreaStipplePattern6, gmesa->glCtx->PolygonStipple[6]);
-	WRITE(gmesa->buf, AreaStipplePattern7, gmesa->glCtx->PolygonStipple[7]);
-	WRITE(gmesa->buf, AreaStipplePattern8, gmesa->glCtx->PolygonStipple[8]);
-	WRITE(gmesa->buf, AreaStipplePattern9, gmesa->glCtx->PolygonStipple[9]);
-	WRITE(gmesa->buf, AreaStipplePattern10, gmesa->glCtx->PolygonStipple[10]);
-	WRITE(gmesa->buf, AreaStipplePattern11, gmesa->glCtx->PolygonStipple[11]);
-	WRITE(gmesa->buf, AreaStipplePattern12, gmesa->glCtx->PolygonStipple[12]);
-	WRITE(gmesa->buf, AreaStipplePattern13, gmesa->glCtx->PolygonStipple[13]);
-	WRITE(gmesa->buf, AreaStipplePattern14, gmesa->glCtx->PolygonStipple[14]);
-	WRITE(gmesa->buf, AreaStipplePattern15, gmesa->glCtx->PolygonStipple[15]);
-	WRITE(gmesa->buf, AreaStipplePattern16, gmesa->glCtx->PolygonStipple[16]);
-	WRITE(gmesa->buf, AreaStipplePattern17, gmesa->glCtx->PolygonStipple[17]);
-	WRITE(gmesa->buf, AreaStipplePattern18, gmesa->glCtx->PolygonStipple[18]);
-	WRITE(gmesa->buf, AreaStipplePattern19, gmesa->glCtx->PolygonStipple[19]);
-	WRITE(gmesa->buf, AreaStipplePattern20, gmesa->glCtx->PolygonStipple[20]);
-	WRITE(gmesa->buf, AreaStipplePattern21, gmesa->glCtx->PolygonStipple[21]);
-	WRITE(gmesa->buf, AreaStipplePattern22, gmesa->glCtx->PolygonStipple[22]);
-	WRITE(gmesa->buf, AreaStipplePattern23, gmesa->glCtx->PolygonStipple[23]);
-	WRITE(gmesa->buf, AreaStipplePattern24, gmesa->glCtx->PolygonStipple[24]);
-	WRITE(gmesa->buf, AreaStipplePattern25, gmesa->glCtx->PolygonStipple[25]);
-	WRITE(gmesa->buf, AreaStipplePattern26, gmesa->glCtx->PolygonStipple[26]);
-	WRITE(gmesa->buf, AreaStipplePattern27, gmesa->glCtx->PolygonStipple[27]);
-	WRITE(gmesa->buf, AreaStipplePattern28, gmesa->glCtx->PolygonStipple[28]);
-	WRITE(gmesa->buf, AreaStipplePattern29, gmesa->glCtx->PolygonStipple[29]);
-	WRITE(gmesa->buf, AreaStipplePattern30, gmesa->glCtx->PolygonStipple[30]);
-	WRITE(gmesa->buf, AreaStipplePattern31, gmesa->glCtx->PolygonStipple[31]);
-    }
-    if (gmesa->dirty & GAMMA_UPLOAD_DEPTH) {
-	gmesa->dirty &= ~GAMMA_UPLOAD_DEPTH;
-	CHECK_DMA_BUFFER(gmesa, 4);
-	WRITE(gmesa->buf, DepthMode,  gmesa->DepthMode);
-	WRITE(gmesa->buf, DeltaMode,  gmesa->DeltaMode);
-	WRITE(gmesa->buf, GLINTWindow,gmesa->Window | (gmesa->FrameCount << 9));
-	WRITE(gmesa->buf, LBReadMode, gmesa->LBReadMode);
-    }
-    if (gmesa->dirty & GAMMA_UPLOAD_GEOMETRY) {
-	gmesa->dirty &= ~GAMMA_UPLOAD_GEOMETRY;
-	CHECK_DMA_BUFFER(gmesa, 1);
-	WRITE(gmesa->buf, GeometryMode, gmesa->GeometryMode);
-    }
-    if (gmesa->dirty & GAMMA_UPLOAD_TRANSFORM) {
-	gmesa->dirty &= ~GAMMA_UPLOAD_TRANSFORM;
-	CHECK_DMA_BUFFER(gmesa, 1);
-	WRITE(gmesa->buf, TransformMode, gmesa->TransformMode);
-    }
-    if (gmesa->dirty & GAMMA_UPLOAD_TEX0) {
-	gammaTextureObjectPtr curTex = gmesa->CurrentTexObj[0];
-	gmesa->dirty &= ~GAMMA_UPLOAD_TEX0;
-	if (curTex) {
-	CHECK_DMA_BUFFER(gmesa, 21);
-	WRITE(gmesa->buf, GeometryMode, gmesa->GeometryMode | GM_TextureEnable);
-	WRITE(gmesa->buf, DeltaMode, gmesa->DeltaMode | DM_TextureEnable);
-	WRITE(gmesa->buf, TextureAddressMode, curTex->TextureAddressMode);
-	WRITE(gmesa->buf, TextureReadMode, curTex->TextureReadMode);
-	WRITE(gmesa->buf, TextureColorMode, curTex->TextureColorMode);
-	WRITE(gmesa->buf, TextureFilterMode, curTex->TextureFilterMode);
-	WRITE(gmesa->buf, TextureFormat, curTex->TextureFormat);
-	WRITE(gmesa->buf, GLINTBorderColor, curTex->TextureBorderColor);
-	WRITE(gmesa->buf, TxBaseAddr0, curTex->TextureBaseAddr[0]);
-	WRITE(gmesa->buf, TxBaseAddr1, curTex->TextureBaseAddr[1]);
-	WRITE(gmesa->buf, TxBaseAddr2, curTex->TextureBaseAddr[2]);
-	WRITE(gmesa->buf, TxBaseAddr3, curTex->TextureBaseAddr[3]);
-	WRITE(gmesa->buf, TxBaseAddr4, curTex->TextureBaseAddr[4]);
-	WRITE(gmesa->buf, TxBaseAddr5, curTex->TextureBaseAddr[5]);
-	WRITE(gmesa->buf, TxBaseAddr6, curTex->TextureBaseAddr[6]);
-	WRITE(gmesa->buf, TxBaseAddr7, curTex->TextureBaseAddr[7]);
-	WRITE(gmesa->buf, TxBaseAddr8, curTex->TextureBaseAddr[8]);
-	WRITE(gmesa->buf, TxBaseAddr9, curTex->TextureBaseAddr[9]);
-	WRITE(gmesa->buf, TxBaseAddr10, curTex->TextureBaseAddr[10]);
-	WRITE(gmesa->buf, TxBaseAddr11, curTex->TextureBaseAddr[11]);
-	WRITE(gmesa->buf, TextureCacheControl, (TCC_Enable | TCC_Invalidate));
-	} else {
-	CHECK_DMA_BUFFER(gmesa, 6);
-	WRITE(gmesa->buf, GeometryMode, gmesa->GeometryMode);
-	WRITE(gmesa->buf, DeltaMode, gmesa->DeltaMode);
-	WRITE(gmesa->buf, TextureAddressMode, TextureAddressModeDisable);
-	WRITE(gmesa->buf, TextureReadMode, TextureReadModeDisable);
-	WRITE(gmesa->buf, TextureFilterMode, TextureFilterModeDisable);
-	WRITE(gmesa->buf, TextureColorMode, TextureColorModeDisable);
-	}
-    }
-#ifdef DO_VALIDATE
-    PROCESS_DMA_BUFFER_TOP_HALF(gmesa);
-
-    DRM_SPINUNLOCK(&gmesa->driScreen->pSAREA->drawable_lock,
-		   gmesa->driScreen->drawLockID);
-    VALIDATE_DRAWABLE_INFO_NO_LOCK_POST(gmesa);
-
-    PROCESS_DMA_BUFFER_BOTTOM_HALF(gmesa);
-#endif
-}
-
-void gammaDDUpdateHWState( GLcontext *ctx )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-   int new_state = gmesa->new_state;
-
-   if ( new_state )
-   {
-      FLUSH_BATCH( gmesa );
-
-      gmesa->new_state = 0;
-
-      /* Update the various parts of the context's state.
-       */
-      if ( new_state & GAMMA_NEW_ALPHA )
-	 gammaUpdateAlphaMode( ctx );
-
-      if ( new_state & GAMMA_NEW_DEPTH )
-	 gammaUpdateZMode( ctx );
-
-      if ( new_state & GAMMA_NEW_FOG )
-	 gammaUpdateFogAttrib( ctx );
-
-      if ( new_state & GAMMA_NEW_CLIP )
-	 gammaUpdateClipping( ctx );
-
-      if ( new_state & GAMMA_NEW_POLYGON )
-	 gammaUpdatePolygon( ctx );
-
-      if ( new_state & GAMMA_NEW_CULL )
-	 gammaUpdateCull( ctx );
-
-      if ( new_state & GAMMA_NEW_MASKS )
-	 gammaUpdateMasks( ctx );
-
-      if ( new_state & GAMMA_NEW_WINDOW )
-	 gammaUpdateWindow( ctx );
-
-      if ( new_state & GAMMA_NEW_STIPPLE )
-	 gammaUpdateStipple( ctx );
-   }
-
-   /* HACK ! */
-
-   gammaEmitHwState( gmesa );
-}
-
-
-static void gammaDDUpdateState( GLcontext *ctx, GLuint new_state )
-{
-   _swrast_InvalidateState( ctx, new_state );
-   _swsetup_InvalidateState( ctx, new_state );
-   _vbo_InvalidateState( ctx, new_state );
-   _tnl_InvalidateState( ctx, new_state );
-   GAMMA_CONTEXT(ctx)->new_gl_state |= new_state;
-}
-
-
-/* Initialize the context's hardware state.
- */
-void gammaDDInitState( gammaContextPtr gmesa )
-{
-   gmesa->new_state = 0;
-}
-
-/* Initialize the driver's state functions.
- */
-void gammaDDInitStateFuncs( GLcontext *ctx )
-{
-   ctx->Driver.UpdateState		= gammaDDUpdateState;
-
-   ctx->Driver.Clear			= gammaDDClear;
-   ctx->Driver.ClearIndex		= NULL;
-   ctx->Driver.ClearColor		= gammaDDClearColor;
-   ctx->Driver.DrawBuffer		= gammaDDDrawBuffer;
-   ctx->Driver.ReadBuffer		= gammaDDReadBuffer;
-
-   ctx->Driver.IndexMask		= NULL;
-   ctx->Driver.ColorMask		= gammaDDColorMask;
-
-   ctx->Driver.AlphaFunc		= gammaDDAlphaFunc;
-   ctx->Driver.BlendEquationSeparate	= gammaDDBlendEquationSeparate;
-   ctx->Driver.BlendFuncSeparate	= gammaDDBlendFuncSeparate;
-   ctx->Driver.ClearDepth		= gammaDDClearDepth;
-   ctx->Driver.CullFace			= gammaDDCullFace;
-   ctx->Driver.FrontFace		= gammaDDFrontFace;
-   ctx->Driver.DepthFunc		= gammaDDDepthFunc;
-   ctx->Driver.DepthMask		= gammaDDDepthMask;
-   ctx->Driver.DepthRange		= gammaDDDepthRange;
-   ctx->Driver.Enable			= gammaDDEnable;
-   ctx->Driver.Finish			= gammaDDFinish;
-   ctx->Driver.Flush			= gammaDDFlush;
-#if 0
-   ctx->Driver.Fogfv			= gammaDDFogfv;
-#endif
-   ctx->Driver.Hint			= NULL;
-   ctx->Driver.LineWidth		= gammaDDLineWidth;
-   ctx->Driver.LineStipple		= gammaDDLineStipple;
-#if ENABLELIGHTING
-   ctx->Driver.Lightfv			= gammaDDLightfv; 
-   ctx->Driver.LightModelfv		= gammaDDLightModelfv;
-#endif
-   ctx->Driver.LogicOpcode		= gammaDDLogicalOpcode;
-   ctx->Driver.PointSize		= gammaDDPointSize;
-   ctx->Driver.PolygonMode		= gammaDDPolygonMode;
-   ctx->Driver.PolygonStipple		= gammaDDPolygonStipple;
-   ctx->Driver.Scissor			= gammaDDScissor;
-   ctx->Driver.ShadeModel		= gammaDDShadeModel;
-   ctx->Driver.Viewport			= gammaDDViewport;
-}
diff --git a/src/mesa/drivers/dri/gamma/gamma_tex.c b/src/mesa/drivers/dri/gamma/gamma_tex.c
deleted file mode 100644
index bef8cf27db..0000000000
--- a/src/mesa/drivers/dri/gamma/gamma_tex.c
+++ /dev/null
@@ -1,434 +0,0 @@
-
-#include "main/glheader.h"
-#include "main/mtypes.h"
-#include "main/colormac.h"
-#include "main/imports.h"
-#include "main/simple_list.h"
-#include "main/enums.h"
-#include "main/mm.h"
-#include "main/texstore.h"
-#include "main/teximage.h"
-#include "main/texobj.h"
-
-#include "swrast/swrast.h"
-
-#include "gamma_context.h"
-
-
-/*
- * Compute the 'S2.4' lod bias factor from the floating point OpenGL bias.
- */
-#if 0
-static GLuint gammaComputeLodBias(GLfloat bias)
-{
-   return bias;
-}
-#endif
-
-static void gammaSetTexWrapping(gammaTextureObjectPtr t, 
-			       GLenum wraps, GLenum wrapt)
-{
-   uint32_t t1 = t->TextureAddressMode;
-   uint32_t t2 = t->TextureReadMode;
-
-   t1 &= ~(TAM_SWrap_Mask | TAM_TWrap_Mask);
-   t2 &= ~(TRM_UWrap_Mask | TRM_VWrap_Mask);
-   
-   if (wraps != GL_CLAMP) {
-      t1 |= TAM_SWrap_Repeat;
-      t2 |= TRM_UWrap_Repeat;
-   }
-
-   if (wrapt != GL_CLAMP) {
-      t1 |= TAM_TWrap_Repeat;
-      t2 |= TRM_VWrap_Repeat;
-   }
-
-   t->TextureAddressMode = t1;
-   t->TextureReadMode = t2;
-}
-
-
-static void gammaSetTexFilter(gammaContextPtr gmesa, 
-			     gammaTextureObjectPtr t, 
-			     GLenum minf, GLenum magf,
-                             GLfloat bias)
-{
-   uint32_t t1 = t->TextureAddressMode;
-   uint32_t t2 = t->TextureReadMode;
-
-   t2 &= ~(TRM_Mag_Mask | TRM_Min_Mask);
-
-   switch (minf) {
-   case GL_NEAREST:
-      t1 &= ~TAM_LODEnable;
-      t2 &= ~TRM_MipMapEnable;
-      t2 |= TRM_Min_Nearest;
-      break;
-   case GL_LINEAR:
-      t1 &= ~TAM_LODEnable;
-      t2 &= ~TRM_MipMapEnable;
-      t2 |= TRM_Min_Linear;
-      break;
-   case GL_NEAREST_MIPMAP_NEAREST:
-      t2 |= TRM_Min_NearestMMNearest;
-      break;
-   case GL_LINEAR_MIPMAP_NEAREST:
-      t2 |= TRM_Min_LinearMMNearest;
-      break;
-   case GL_NEAREST_MIPMAP_LINEAR:
-      t2 |= TRM_Min_NearestMMLinear;
-      break;
-   case GL_LINEAR_MIPMAP_LINEAR:
-      t2 |= TRM_Min_LinearMMLinear;
-      break;
-   default:
-      break;
-   }
-
-   switch (magf) {
-   case GL_NEAREST:
-      t2 |= TRM_Mag_Nearest;
-      break;
-   case GL_LINEAR:
-      t2 |= TRM_Mag_Linear;
-      break;
-   default:
-      break;
-   }  
-
-   t->TextureAddressMode = t1;
-   t->TextureReadMode = t2;
-}
-
-
-static void gammaSetTexBorderColor(gammaContextPtr gmesa,
-				  gammaTextureObjectPtr t, 
-                                  const GLfloat color[4])
-{
-   GLubyte c[4];
-   CLAMPED_FLOAT_TO_UBYTE(c[0], color[0]);
-   CLAMPED_FLOAT_TO_UBYTE(c[1], color[1]);
-   CLAMPED_FLOAT_TO_UBYTE(c[2], color[2]);
-   CLAMPED_FLOAT_TO_UBYTE(c[3], color[3]);
-   t->TextureBorderColor = PACK_COLOR_8888(c[0], c[1], c[2], c[3]);
-}
-
-
-static void gammaTexParameter( GLcontext *ctx, GLenum target,
-			      struct gl_texture_object *tObj,
-			      GLenum pname, const GLfloat *params )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-   gammaTextureObjectPtr t = (gammaTextureObjectPtr) tObj->DriverData;
-   if (!t)
-      return;
-
-   /* Can't do the update now as we don't know whether to flush
-    * vertices or not.  Setting gmesa->new_state means that
-    * gammaUpdateTextureState() will be called before any triangles are
-    * rendered.  If a statechange has occurred, it will be detected at
-    * that point, and buffered vertices flushed.  
-    */
-   switch (pname) {
-   case GL_TEXTURE_MIN_FILTER:
-   case GL_TEXTURE_MAG_FILTER:
-      {
-         GLfloat bias = ctx->Texture.Unit[ctx->Texture.CurrentUnit].LodBias;
-         gammaSetTexFilter( gmesa, t, tObj->MinFilter, tObj->MagFilter, bias );
-      }
-      break;
-
-   case GL_TEXTURE_WRAP_S:
-   case GL_TEXTURE_WRAP_T:
-      gammaSetTexWrapping( t, tObj->WrapS, tObj->WrapT );
-      break;
-  
-   case GL_TEXTURE_BORDER_COLOR:
-      gammaSetTexBorderColor( gmesa, t, tObj->BorderColor.f );
-      break;
-
-   case GL_TEXTURE_BASE_LEVEL:
-   case GL_TEXTURE_MAX_LEVEL:
-   case GL_TEXTURE_MIN_LOD:
-   case GL_TEXTURE_MAX_LOD:
-      /* This isn't the most efficient solution but there doesn't appear to
-       * be a nice alternative for Radeon.  Since there's no LOD clamping,
-       * we just have to rely on loading the right subset of mipmap levels
-       * to simulate a clamped LOD.
-       */
-      gammaSwapOutTexObj( gmesa, t );
-      break;
-
-   default:
-      return;
-   }
-
-   if (t == gmesa->CurrentTexObj[0])
-      gmesa->dirty |= GAMMA_UPLOAD_TEX0;
-
-#if 0
-   if (t == gmesa->CurrentTexObj[1]) {
-      gmesa->dirty |= GAMMA_UPLOAD_TEX1;
-   }
-#endif
-}
-
-
-static void gammaTexEnv( GLcontext *ctx, GLenum target, 
-			GLenum pname, const GLfloat *param )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT( ctx );
-   GLuint unit = ctx->Texture.CurrentUnit;
-
-   /* Only one env color.  Need a fallback if env colors are different
-    * and texture setup references env color in both units.  
-    */
-   switch (pname) {
-   case GL_TEXTURE_ENV_COLOR: {
-      struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
-      GLfloat *fc = texUnit->EnvColor;
-      GLuint r, g, b, a, col;
-      CLAMPED_FLOAT_TO_UBYTE(r, fc[0]);
-      CLAMPED_FLOAT_TO_UBYTE(g, fc[1]);
-      CLAMPED_FLOAT_TO_UBYTE(b, fc[2]);
-      CLAMPED_FLOAT_TO_UBYTE(a, fc[3]);
-
-      col = ((a << 24) | 
-	     (r << 16) | 
-	     (g <<  8) | 
-	     (b <<  0));
-
-      break;
-   }
-   case GL_TEXTURE_ENV_MODE:
-      gmesa->TexEnvImageFmt[unit] = 0; /* force recalc of env state */
-      break;
-
-   case GL_TEXTURE_LOD_BIAS_EXT:
-#if 0  /* ?!?!?! */
-      {
-         struct gl_texture_object *tObj = ctx->Texture.Unit[unit]._Current;
-         gammaTextureObjectPtr t = (gammaTextureObjectPtr) tObj->DriverData;
-         (void) t;
-	 /* XXX Looks like there's something missing here */
-      }
-#endif
-      break;
-
-   default:
-      break;
-   }
-} 
-
-#if 0
-static void gammaTexImage1D( GLcontext *ctx, GLenum target, GLint level,
-			    GLint internalFormat,
-			    GLint width, GLint border,
-			    GLenum format, GLenum type, 
-			    const GLvoid *pixels,
-			    const struct gl_pixelstore_attrib *pack,
-			    struct gl_texture_object *texObj,
-			    struct gl_texture_image *texImage )
-{
-   gammaTextureObjectPtr t = (gammaTextureObjectPtr) texObj->DriverData;
-   if (t) {
-      gammaSwapOutTexObj( GAMMA_CONTEXT(ctx), t );
-   }
-   _mesa_store_teximage1d( ctx, target, level, internalFormat,
-			   width, border, format, type,
-			   pixels, pack, texObj, texImage );
-}
-#endif
-
-#if 0
-static void gammaTexSubImage1D( GLcontext *ctx, 
-			       GLenum target,
-			       GLint level,	
-			       GLint xoffset,
-			       GLsizei width,
-			       GLenum format, GLenum type,
-			       const GLvoid *pixels,
-			       const struct gl_pixelstore_attrib *pack,
-			       struct gl_texture_object *texObj,
-			       struct gl_texture_image *texImage )
-{
-   gammaTextureObjectPtr t = (gammaTextureObjectPtr) texObj->DriverData;
-   if (t) {
-      gammaSwapOutTexObj( GAMMA_CONTEXT(ctx), t );
-   }
-   _mesa_store_texsubimage1d(ctx, target, level, xoffset, width, 
-			     format, type, pixels, pack, texObj,
-			     texImage);
-}
-#endif
-
-static void gammaTexImage2D( GLcontext *ctx, GLenum target, GLint level,
-			    GLint internalFormat,
-			    GLint width, GLint height, GLint border,
-			    GLenum format, GLenum type, const GLvoid *pixels,
-			    const struct gl_pixelstore_attrib *packing,
-			    struct gl_texture_object *texObj,
-			    struct gl_texture_image *texImage )
-{
-   gammaTextureObjectPtr t = (gammaTextureObjectPtr) texObj->DriverData;
-   if (t) {
-      gammaSwapOutTexObj( GAMMA_CONTEXT(ctx), t );
-   }
-   _mesa_store_teximage2d( ctx, target, level, internalFormat,
-			   width, height, border, format, type,
-			   pixels, packing, texObj, texImage );
-}
-
-static void gammaTexSubImage2D( GLcontext *ctx, 
-			       GLenum target,
-			       GLint level,	
-			       GLint xoffset, GLint yoffset,
-			       GLsizei width, GLsizei height,
-			       GLenum format, GLenum type,
-			       const GLvoid *pixels,
-			       const struct gl_pixelstore_attrib *packing,
-			       struct gl_texture_object *texObj,
-			       struct gl_texture_image *texImage )
-{
-   gammaTextureObjectPtr t = (gammaTextureObjectPtr) texObj->DriverData;
-   if (t) {
-      gammaSwapOutTexObj( GAMMA_CONTEXT(ctx), t );
-   }
-   _mesa_store_texsubimage2d(ctx, target, level, xoffset, yoffset, width, 
-			     height, format, type, pixels, packing, texObj,
-			     texImage);
-}
-
-static void gammaBindTexture( GLcontext *ctx, GLenum target,
-			     struct gl_texture_object *tObj )
-{
-      gammaContextPtr gmesa = GAMMA_CONTEXT( ctx );
-      gammaTextureObjectPtr t = (gammaTextureObjectPtr) tObj->DriverData;
-
-      if (!t) {
-         GLfloat bias = ctx->Texture.Unit[ctx->Texture.CurrentUnit].LodBias;
-	 t = CALLOC_STRUCT(gamma_texture_object_t);
-
-	 /* Initialize non-image-dependent parts of the state:
-	  */
-	 t->globj = tObj;
-
-   	 t->TextureAddressMode = TextureAddressModeEnable | TAM_Operation_3D |
-			   TAM_DY_Enable | TAM_LODEnable;
-         t->TextureReadMode = TextureReadModeEnable | TRM_PrimaryCacheEnable |
-			TRM_MipMapEnable | TRM_BorderClamp | TRM_Border;
-         t->TextureColorMode = TextureColorModeEnable;
-         t->TextureFilterMode = TextureFilterModeEnable;
-
-         if (target == GL_TEXTURE_2D) {
-            t->TextureAddressMode |= TAM_TexMapType_2D;
-            t->TextureReadMode |= TRM_TexMapType_2D;
-         }
-         else if (target == GL_TEXTURE_1D) {
-            t->TextureAddressMode |= TAM_TexMapType_1D;
-            t->TextureReadMode |= TRM_TexMapType_1D;
-         }
-
-         t->TextureColorMode = TextureColorModeEnable;
-
-         t->TextureFilterMode = TextureFilterModeEnable;
-
-#ifdef MESA_LITTLE_ENDIAN
-         t->TextureFormat = (TF_LittleEndian |
-#else
-         t->TextureFormat = (TF_BigEndian |
-#endif
-			TF_ColorOrder_RGB |
-			TF_OutputFmt_Texel);
-
-	 t->dirty_images = ~0;
-
-	 tObj->DriverData = t;
-	 make_empty_list( t );
-
-	 gammaSetTexWrapping( t, tObj->WrapS, tObj->WrapT );
-	 gammaSetTexFilter( gmesa, t, tObj->MinFilter, tObj->MagFilter, bias );
-	 gammaSetTexBorderColor( gmesa, t, tObj->BorderColor.f );
-      }
-}
-
-static void gammaDeleteTexture( GLcontext *ctx, struct gl_texture_object *tObj )
-{
-   gammaTextureObjectPtr t = (gammaTextureObjectPtr)tObj->DriverData;
-
-   if (t) {
-      gammaContextPtr gmesa = GAMMA_CONTEXT( ctx );
-#if 0
-      if (gmesa)
-         GAMMA_FIREVERTICES( gmesa );
-#endif
-      gammaDestroyTexObj( gmesa, t );
-      tObj->DriverData = 0;
-   }
-   /* Free mipmap images and the texture object itself */
-   _mesa_delete_texture_object(ctx, tObj);
-}
-
-static GLboolean gammaIsTextureResident( GLcontext *ctx, 
-					struct gl_texture_object *tObj )
-{
-   gammaTextureObjectPtr t = (gammaTextureObjectPtr)tObj->DriverData;
-   return t && t->MemBlock;
-}
-
-#ifdef UNUSED
-/**
- * Allocate a new texture object.
- * Called via ctx->Driver.NewTextureObject.
- * Note: this function will be called during context creation to
- * allocate the default texture objects.
- * Note: we could use containment here to 'derive' the driver-specific
- * texture object from the core mesa gl_texture_object.  Not done at this time.
- */
-static struct gl_texture_object *
-gammaNewTextureObject( GLcontext *ctx, GLuint name, GLenum target )
-{
-   struct gl_texture_object *obj;
-   obj = _mesa_new_texture_object(ctx, name, target);
-   return obj;
-}
-#endif
-
-void gammaInitTextureObjects( GLcontext *ctx )
-{
-   struct gl_texture_object *texObj;
-   GLuint tmp = ctx->Texture.CurrentUnit;
-
-   ctx->Texture.CurrentUnit = 0;
-
-   texObj = ctx->Texture.Unit[0].CurrentTex[TEXTURE_1D_INDEX];
-   gammaBindTexture( ctx, GL_TEXTURE_1D, texObj );
-
-   texObj = ctx->Texture.Unit[0].CurrentTex[TEXTURE_2D_INDEX];
-   gammaBindTexture( ctx, GL_TEXTURE_2D, texObj );
-
-#if 0
-   ctx->Texture.CurrentUnit = 1;
-
-   texObj = ctx->Texture.Unit[1].CurrentTex[TEXTURE_1D_INDEX];
-   gammaBindTexture( ctx, GL_TEXTURE_1D, texObj );
-
-   texObj = ctx->Texture.Unit[1].CurrentTex[TEXTURE_2D_INDEX];
-   gammaBindTexture( ctx, GL_TEXTURE_2D, texObj );
-#endif
-
-   ctx->Texture.CurrentUnit = tmp;
-}
-
-
-void gammaDDInitTextureFuncs( struct dd_function_table *functions )
-{
-   functions->TexEnv = gammaTexEnv;
-   functions->TexImage2D = gammaTexImage2D;
-   functions->TexSubImage2D = gammaTexSubImage2D;
-   functions->BindTexture = gammaBindTexture;
-   functions->DeleteTexture = gammaDeleteTexture;
-   functions->TexParameter = gammaTexParameter;
-   functions->IsTextureResident = gammaIsTextureResident;
-}
diff --git a/src/mesa/drivers/dri/gamma/gamma_texmem.c b/src/mesa/drivers/dri/gamma/gamma_texmem.c
deleted file mode 100644
index 45a0c0148e..0000000000
--- a/src/mesa/drivers/dri/gamma/gamma_texmem.c
+++ /dev/null
@@ -1,535 +0,0 @@
-
-#include <stdlib.h>
-#include <stdio.h>
-
-#include "main/glheader.h"
-#include "main/colormac.h"
-#include "main/macros.h"
-#include "main/mtypes.h"
-#include "main/simple_list.h"
-#include "main/enums.h"
-
-#include "main/mm.h"
-#include "glint_dri.h"
-#include "gamma_context.h"
-#include "gamma_lock.h"
-#include "gamma_macros.h"
-
-void gammaDestroyTexObj(gammaContextPtr gmesa, gammaTextureObjectPtr t)
-{
-   if (!t) return;
-
-   /* This is sad - need to sync *in case* we upload a texture
-    * to this newly free memory...
-    */
-   if (t->MemBlock) {
-      mmFreeMem(t->MemBlock);
-      t->MemBlock = 0;
-
-      if (gmesa && t->age > gmesa->dirtyAge)
-	 gmesa->dirtyAge = t->age;
-   }
-
-   if (t->globj)
-      t->globj->DriverData = 0;
-
-   if (gmesa) {
-      if (gmesa->CurrentTexObj[0] == t) {
-         gmesa->CurrentTexObj[0] = 0;
-         gmesa->dirty &= ~GAMMA_UPLOAD_TEX0;
-      }
-
-#if 0
-      if (gmesa->CurrentTexObj[1] == t) {
-         gmesa->CurrentTexObj[1] = 0;
-         gmesa->dirty &= ~GAMMA_UPLOAD_TEX1;
-      }
-#endif
-   }
-
-   remove_from_list(t);
-   free(t);
-}
-
-
-void gammaSwapOutTexObj(gammaContextPtr gmesa, gammaTextureObjectPtr t)
-{
-/*     fprintf(stderr, "%s\n", __FUNCTION__); */
-
-   if (t->MemBlock) {
-      mmFreeMem(t->MemBlock);
-      t->MemBlock = 0;
-
-      if (t->age > gmesa->dirtyAge)
-	 gmesa->dirtyAge = t->age;
-   }
-
-   t->dirty_images = ~0;
-   move_to_tail(&(gmesa->SwappedOut), t);
-}
-
-
-
-/* Upload an image from mesa's internal copy.
- */
-static void gammaUploadTexLevel( gammaContextPtr gmesa, gammaTextureObjectPtr t, int level )
-{
-   const struct gl_texture_image *image = t->image[level].image;
-   int i,j;
-   int l2d;
-#if 0
-   int offset = 0;
-#endif
-   int words, depthLog2;
-
-   /* fprintf(stderr, "%s\n", __FUNCTION__);  */
-
-   l2d = 5; /* 32bits per texel == 1<<5 */
-
-   if (level == 0) {
-      t->TextureAddressMode &= ~(TAM_WidthMask | TAM_HeightMask);
-      t->TextureAddressMode |= (image->WidthLog2 << 9) | 
-			       (image->HeightLog2 << 13);
-      t->TextureReadMode &= ~(TRM_WidthMask | TRM_HeightMask | 
-			      TRM_DepthMask | TRM_Border |
-			      TRM_Patch);
-      t->TextureReadMode |= (image->WidthLog2 << 1) | 
-			    (image->HeightLog2 << 5) | 
-			    (l2d << 9);
-      t->TextureFormat &= ~(TF_CompnentsMask | TF_OneCompFmt_Mask);
-   }
-
-   t->TextureBaseAddr[level] = /* ??? */
-	(unsigned long)(t->image[level].offset + t->BufAddr) << 5;
-
-   CALC_LOG2(depthLog2, 1<<l2d);
-   words = (image->Width * image->Height) >> (5-depthLog2);
-
-   CHECK_DMA_BUFFER(gmesa, 3);
-   WRITE(gmesa->buf, LBWindowBase, t->TextureBaseAddr[level] >> 5);
-   WRITE(gmesa->buf, TextureCacheControl, (TCC_Enable | TCC_Invalidate));
-   WRITE(gmesa->buf, WaitForCompletion, 0);
-   FLUSH_DMA_BUFFER(gmesa);
-
-   switch (t->image[level].internalFormat) {
-   case GL_RGB:
-   case 3:
-   {
-      GLubyte  *src = (GLubyte *)image->Data;
-
-      if (level == 0)
-         t->TextureFormat |= TF_Compnents_3;
-      
-#if 0 /* This is the texture download code we SHOULD be using */
-      /* In the routines below, but this causes an DMA overrun - WHY ? */
-      while (offset < words) {
-         int count = gmesa->bufSize;
-	 int i;
-	 count -= 3;
-         if (count > words-offset) count = words-offset;
-
-	 gmesa->buf->i = GlintTextureDownloadOffsetTag;
-	 gmesa->buf++;
-	 gmesa->buf->i = offset;
-	 gmesa->buf++;
-         gmesa->buf->i = (GlintTextureDataTag | ((count-1) << 16));
-	 gmesa->buf++;
-
-	 for (i = 0; i < count; i++) {
-		gmesa->buf->i = PACK_COLOR_565(src[0],src[1],src[2]);
-	 	gmesa->buf++;
-		src += 3;
-	 }
-
-	 gmesa->bufCount = count+3; /* texture data + 3 values */
-	 offset += count;
-
-         FLUSH_DMA_BUFFER(gmesa);
-      }   
-#else
-	/* The UGLY way, and SLOW !, but the above sometimes causes
-	 * a DMA overrun error ??? FIXME ! */
-
-      CHECK_DMA_BUFFER(gmesa, 1);
-      WRITE(gmesa->buf, TextureDownloadOffset, 0);
-      for (i = 0; i < words; i++) {
- 	unsigned int data;
-	data = PACK_COLOR_565(src[0],src[1],src[2]);
- 	CHECK_DMA_BUFFER(gmesa, 1);
- 	WRITE(gmesa->buf, TextureData, data);
- 	src += 3;
-      }
-      FLUSH_DMA_BUFFER(gmesa);
-#endif
-   }
-   break;
-
-   case GL_RGBA:
-   case 4:
-   {
-      GLubyte  *src = (GLubyte *)image->Data;
-
-      if (level == 0)
-         t->TextureFormat |= TF_Compnents_4;
-
-	/* The UGLY way, and SLOW !, but the above sometimes causes
-	 * a DMA overrun error ??? FIXME ! */
-      CHECK_DMA_BUFFER(gmesa, 1);
-      WRITE(gmesa->buf, TextureDownloadOffset, 0);
-      for (i = 0; i < words; i++) {
- 	unsigned int data;
-	data = PACK_COLOR_8888(src[0],src[1],src[2],src[3]);
- 	CHECK_DMA_BUFFER(gmesa, 1);
- 	WRITE(gmesa->buf, TextureData, data);
- 	src += 4;
-      }
-      FLUSH_DMA_BUFFER(gmesa);
-   }
-   break;
-
-   case GL_LUMINANCE:
-   {
-      GLubyte  *src = (GLubyte *)image->Data;
-
-      if (level == 0)
-         t->TextureFormat |= TF_Compnents_1 | TF_OneCompFmt_Lum;
-
-	/* The UGLY way, and SLOW !, but the above sometimes causes
-	 * a DMA overrun error ??? FIXME ! */
-      CHECK_DMA_BUFFER(gmesa, 1);
-      WRITE(gmesa->buf, TextureDownloadOffset, 0);
-      for (i = 0; i < words; i++) {
- 	unsigned int data;
-	data = PACK_COLOR_888(src[0],src[0],src[0]);
- 	CHECK_DMA_BUFFER(gmesa, 1);
- 	WRITE(gmesa->buf, TextureData, data);
- 	src ++;
-      }
-      FLUSH_DMA_BUFFER(gmesa);
-   }
-   break;
-
-   case GL_INTENSITY:
-   {
-      GLubyte  *src = (GLubyte *)image->Data;
-
-      if (level == 0)
-         t->TextureFormat |= TF_Compnents_1 | TF_OneCompFmt_Intensity;
-
-	/* The UGLY way, and SLOW !, but the above sometimes causes
-	 * a DMA overrun error ??? FIXME ! */
-      CHECK_DMA_BUFFER(gmesa, 1);
-      WRITE(gmesa->buf, TextureDownloadOffset, 0);
-      for (i = 0; i < words; i++) {
- 	unsigned int data;
-	data = PACK_COLOR_8888(src[0],src[0],src[0],src[0]);
- 	CHECK_DMA_BUFFER(gmesa, 1);
- 	WRITE(gmesa->buf, TextureData, data);
- 	src ++;
-      }
-      FLUSH_DMA_BUFFER(gmesa);
-   }
-   break;
-
-   case GL_LUMINANCE_ALPHA:
-   {
-      GLubyte  *src = (GLubyte *)image->Data;
-
-      if (level == 0)
-         t->TextureFormat |= TF_Compnents_2;
-
-	/* The UGLY way, and SLOW !, but the above sometimes causes
-	 * a DMA overrun error ??? FIXME ! */
-      CHECK_DMA_BUFFER(gmesa, 1);
-      WRITE(gmesa->buf, TextureDownloadOffset, 0);
-      for (i = 0; i < words; i++) {
- 	unsigned int data;
-	data = PACK_COLOR_8888(src[0],src[0],src[0],src[1]);
- 	CHECK_DMA_BUFFER(gmesa, 1);
- 	WRITE(gmesa->buf, TextureData, data);
- 	src += 2;
-      }
-      FLUSH_DMA_BUFFER(gmesa);
-   }
-   break;
-
-   case GL_ALPHA:
-   {
-      GLubyte  *src = (GLubyte *)image->Data;
-
-      if (level == 0)
-         t->TextureFormat |= TF_Compnents_1 | TF_OneCompFmt_Alpha;
-
-	/* The UGLY way, and SLOW !, but the above sometimes causes
-	 * a DMA overrun error ??? FIXME ! */
-      CHECK_DMA_BUFFER(gmesa, 1);
-      WRITE(gmesa->buf, TextureDownloadOffset, 0);
-      for (i = 0; i < words; i++) {
- 	unsigned int data;
-	data = PACK_COLOR_8888(255,255,255,src[0]);
- 	CHECK_DMA_BUFFER(gmesa, 1);
- 	WRITE(gmesa->buf, TextureData, data);
- 	src += 1;
-      }
-      FLUSH_DMA_BUFFER(gmesa);
-   }
-   break;
-
-   /* TODO: Translate color indices *now*:
-    */
-   case GL_COLOR_INDEX:
-      {
-	 GLubyte *dst = (GLubyte *)(t->BufAddr + t->image[level].offset);
-	 GLubyte *src = (GLubyte *)image->Data;
-
-	 for (j = 0 ; j < image->Height ; j++, dst += t->Pitch) {
-	    for (i = 0 ; i < image->Width ; i++) {
-	       dst[i] = src[0];
-	       src += 1;
-	    }
-	 }
-      }
-   break;
-
-   default:
-      fprintf(stderr, "Not supported texture format %s\n",
-              _mesa_lookup_enum_by_nr(image->Format));
-   }
-
-   CHECK_DMA_BUFFER(gmesa, 2);
-   WRITE(gmesa->buf, WaitForCompletion, 0);
-   WRITE(gmesa->buf, LBWindowBase, gmesa->LBWindowBase);
-}
-
-void gammaPrintLocalLRU( gammaContextPtr gmesa )
-{
-   gammaTextureObjectPtr t;
-   int sz = 1 << (gmesa->gammaScreen->logTextureGranularity);
-
-   foreach( t, &gmesa->TexObjList ) {
-      if (!t->globj)
-	 fprintf(stderr, "Placeholder %d at %x sz %x\n",
-		 t->MemBlock->ofs / sz,
-		 t->MemBlock->ofs,
-		 t->MemBlock->size);
-      else
-	 fprintf(stderr, "Texture at %x sz %x\n",
-		 t->MemBlock->ofs,
-		 t->MemBlock->size);
-
-   }
-}
-
-void gammaPrintGlobalLRU( gammaContextPtr gmesa )
-{
-   int i, j;
-   GAMMATextureRegionPtr list = gmesa->sarea->texList;
-
-   for (i = 0, j = GAMMA_NR_TEX_REGIONS ; i < GAMMA_NR_TEX_REGIONS ; i++) {
-      fprintf(stderr, "list[%d] age %d next %d prev %d\n",
-	      j, list[j].age, list[j].next, list[j].prev);
-      j = list[j].next;
-      if (j == GAMMA_NR_TEX_REGIONS) break;
-   }
-
-   if (j != GAMMA_NR_TEX_REGIONS)
-      fprintf(stderr, "Loop detected in global LRU\n");
-}
-
-
-void gammaResetGlobalLRU( gammaContextPtr gmesa )
-{
-   GAMMATextureRegionPtr list = gmesa->sarea->texList;
-   int sz = 1 << gmesa->gammaScreen->logTextureGranularity;
-   int i;
-
-   /* (Re)initialize the global circular LRU list.  The last element
-    * in the array (GAMMA_NR_TEX_REGIONS) is the sentinal.  Keeping it
-    * at the end of the array allows it to be addressed rationally
-    * when looking up objects at a particular location in texture
-    * memory.
-    */
-   for (i = 0 ; (i+1) * sz <= gmesa->gammaScreen->textureSize ; i++) {
-      list[i].prev = i-1;
-      list[i].next = i+1;
-      list[i].age = 0;
-   }
-
-   i--;
-   list[0].prev = GAMMA_NR_TEX_REGIONS;
-   list[i].prev = i-1;
-   list[i].next = GAMMA_NR_TEX_REGIONS;
-   list[GAMMA_NR_TEX_REGIONS].prev = i;
-   list[GAMMA_NR_TEX_REGIONS].next = 0;
-   gmesa->sarea->texAge = 0;
-}
-
-
-void gammaUpdateTexLRU( gammaContextPtr gmesa, gammaTextureObjectPtr t )
-{
-   int i;
-   int logsz = gmesa->gammaScreen->logTextureGranularity;
-   int start = t->MemBlock->ofs >> logsz;
-   int end = (t->MemBlock->ofs + t->MemBlock->size - 1) >> logsz;
-   GAMMATextureRegionPtr list = gmesa->sarea->texList;
-
-   gmesa->texAge = ++gmesa->sarea->texAge;
-
-   /* Update our local LRU
-    */
-   move_to_head( &(gmesa->TexObjList), t );
-
-   /* Update the global LRU
-    */
-   for (i = start ; i <= end ; i++) {
-
-      list[i].in_use = 1;
-      list[i].age = gmesa->texAge;
-
-      /* remove_from_list(i)
-       */
-      list[(unsigned)list[i].next].prev = list[i].prev;
-      list[(unsigned)list[i].prev].next = list[i].next;
-
-      /* insert_at_head(list, i)
-       */
-      list[i].prev = GAMMA_NR_TEX_REGIONS;
-      list[i].next = list[GAMMA_NR_TEX_REGIONS].next;
-      list[(unsigned)list[GAMMA_NR_TEX_REGIONS].next].prev = i;
-      list[GAMMA_NR_TEX_REGIONS].next = i;
-   }
-}
-
-
-/* Called for every shared texture region which has increased in age
- * since we last held the lock.
- *
- * Figures out which of our textures have been ejected by other clients,
- * and pushes a placeholder texture onto the LRU list to represent
- * the other client's textures.
- */
-void gammaTexturesGone( gammaContextPtr gmesa,
-		       GLuint offset,
-		       GLuint size,
-		       GLuint in_use )
-{
-   gammaTextureObjectPtr t, tmp;
-
-   foreach_s ( t, tmp, &gmesa->TexObjList ) {
-
-      if (t->MemBlock->ofs >= offset + size ||
-	  t->MemBlock->ofs + t->MemBlock->size <= offset)
-	 continue;
-
-      /* It overlaps - kick it off.  Need to hold onto the currently bound
-       * objects, however.
-       */
-      gammaSwapOutTexObj( gmesa, t );
-   }
-
-   if (in_use) {
-      t = (gammaTextureObjectPtr) calloc(1,sizeof(*t));
-      if (!t) return;
-
-      t->MemBlock = mmAllocMem( gmesa->texHeap, size, 0, offset);
-      insert_at_head( &gmesa->TexObjList, t );
-   }
-
-   /* Reload any lost textures referenced by current vertex buffer.
-    */
-#if 0
-   if (gmesa->vertex_buffer) {
-      int i, j;
-
-      fprintf(stderr, "\n\nreload tex\n");
-
-      for (i = 0 ; i < gmesa->statenr ; i++) {
-	 for (j = 0 ; j < 2 ; j++) {
-	    gammaTextureObjectPtr t = gmesa->state_tex[j][i];
-	    if (t) {
-	       if (t->MemBlock == 0)
-		  gammaUploadTexImages( gmesa, t );
-	    }
-	 }
-      }
-
-      /* Hard to do this with the lock held:
-       */
-/*        GAMMA_FIREVERTICES( gmesa ); */
-   }
-#endif
-}
-
-
-
-
-
-/* This is called with the lock held.  May have to eject our own and/or
- * other client's texture objects to make room for the upload.
- */
-void gammaUploadTexImages( gammaContextPtr gmesa, gammaTextureObjectPtr t )
-{
-   int i;
-   int ofs;
-   int numLevels;
-
-   /* /fprintf(stderr, "%s\n", __FUNCTION__); */
-#if 0
-   LOCK_HARDWARE( gmesa );
-#endif
-
-   /* Do we need to eject LRU texture objects?
-    */
-   if (!t->MemBlock) {
-      while (1)
-      {
-	 t->MemBlock = mmAllocMem( gmesa->texHeap, t->totalSize, 12, 0 );
-	 if (t->MemBlock)
-	    break;
-
-	 if (gmesa->TexObjList.prev == gmesa->CurrentTexObj[0] ||
-	     gmesa->TexObjList.prev == gmesa->CurrentTexObj[1]) {
-  	    fprintf(stderr, "Hit bound texture in upload\n");
-	    gammaPrintLocalLRU( gmesa );
-	    return;
-	 }
-
-	 if (gmesa->TexObjList.prev == &(gmesa->TexObjList)) {
- 	    fprintf(stderr, "Failed to upload texture, sz %d\n", t->totalSize);
-	    mmDumpMemInfo( gmesa->texHeap );
-	    return;
-	 }
-
-	 gammaSwapOutTexObj( gmesa, gmesa->TexObjList.prev );
-      }
-
-      ofs = t->MemBlock->ofs;
-      t->BufAddr = (char *)(unsigned long)(gmesa->LBWindowBase + ofs); /* ??? */
-
-      if (t == gmesa->CurrentTexObj[0])
-	 gmesa->dirty |= GAMMA_UPLOAD_TEX0;
-
-#if 0
-      if (t == gmesa->CurrentTexObj[1])
-	 gmesa->dirty |= GAMMA_UPLOAD_TEX1;
-#endif
-
-      gammaUpdateTexLRU( gmesa, t );
-   }
-
-#if 0
-   if (gmesa->dirtyAge >= GET_DISPATCH_AGE(gmesa))
-      gammaWaitAgeLocked( gmesa, gmesa->dirtyAge );
-#endif
-
-   numLevels = t->lastLevel - t->firstLevel + 1;
-   for (i = 0 ; i < numLevels ; i++)
-      if (t->dirty_images & (1<<i))
-	 gammaUploadTexLevel( gmesa, t, i );
-
-   t->dirty_images = 0;
-
-#if 0
-   UNLOCK_HARDWARE( gmesa );
-#endif
-}
diff --git a/src/mesa/drivers/dri/gamma/gamma_texstate.c b/src/mesa/drivers/dri/gamma/gamma_texstate.c
deleted file mode 100644
index 46f39135dc..0000000000
--- a/src/mesa/drivers/dri/gamma/gamma_texstate.c
+++ /dev/null
@@ -1,215 +0,0 @@
-
-#include <stdlib.h>
-#include <stdio.h>
-
-#include "main/glheader.h"
-#include "main/macros.h"
-#include "main/mtypes.h"
-#include "main/simple_list.h"
-#include "main/enums.h"
-
-#include "main/mm.h"
-#include "gamma_context.h"
-
-static void gammaSetTexImages( gammaContextPtr gmesa, 
-			      struct gl_texture_object *tObj )
-{
-   GLuint height, width, pitch, i, log_pitch;
-   gammaTextureObjectPtr t = (gammaTextureObjectPtr) tObj->DriverData;
-   const struct gl_texture_image *baseImage = tObj->Image[0][tObj->BaseLevel];
-   GLint firstLevel, lastLevel, numLevels;
-   GLint log2Width, log2Height;
-
-   /* fprintf(stderr, "%s\n", __FUNCTION__);  */
-
-   t->texelBytes = 2;
-
-   /* Compute which mipmap levels we really want to send to the hardware.
-    * This depends on the base image size, GL_TEXTURE_MIN_LOD,
-    * GL_TEXTURE_MAX_LOD, GL_TEXTURE_BASE_LEVEL, and GL_TEXTURE_MAX_LEVEL.
-    * Yes, this looks overly complicated, but it's all needed.
-    */
-   if (tObj->MinFilter == GL_LINEAR || tObj->MinFilter == GL_NEAREST) {
-      firstLevel = lastLevel = tObj->BaseLevel;
-   }
-   else {
-      firstLevel = tObj->BaseLevel + (GLint) (tObj->MinLod + 0.5);
-      firstLevel = MAX2(firstLevel, tObj->BaseLevel);
-      lastLevel = tObj->BaseLevel + (GLint) (tObj->MaxLod + 0.5);
-      lastLevel = MAX2(lastLevel, tObj->BaseLevel);
-      lastLevel = MIN2(lastLevel, tObj->BaseLevel + baseImage->MaxLog2);
-      lastLevel = MIN2(lastLevel, tObj->MaxLevel);
-      lastLevel = MAX2(firstLevel, lastLevel); /* need at least one level */
-   }
-
-   /* save these values */
-   t->firstLevel = firstLevel;
-   t->lastLevel = lastLevel;
-
-   numLevels = lastLevel - firstLevel + 1;
-
-   log2Width = tObj->Image[0][firstLevel]->WidthLog2;
-   log2Height = tObj->Image[0][firstLevel]->HeightLog2;
-
-
-   /* Figure out the amount of memory required to hold all the mipmap
-    * levels.  Choose the smallest pitch to accomodate the largest
-    * mipmap:
-    */
-   width = tObj->Image[0][firstLevel]->Width * t->texelBytes;
-   for (pitch = 32, log_pitch=2 ; pitch < width ; pitch *= 2 )
-      log_pitch++;
-   
-   /* All images must be loaded at this pitch.  Count the number of
-    * lines required:
-    */
-   for ( height = i = 0 ; i < numLevels ; i++ ) {
-      t->image[i].image = tObj->Image[0][firstLevel + i];
-      t->image[i].offset = height * pitch;
-      t->image[i].internalFormat = baseImage->Format;
-      height += t->image[i].image->Height;
-      t->TextureBaseAddr[i] = /* ??? */
-	(unsigned long)(t->image[i].offset + t->BufAddr) << 5;
-
-   }
-
-   t->Pitch = pitch;
-   t->totalSize = height*pitch;
-   t->max_level = i-1;
-   gmesa->dirty |= GAMMA_UPLOAD_TEX0 /* | GAMMA_UPLOAD_TEX1*/;   
-
-   gammaUploadTexImages( gmesa, t );
-}
-
-static void gammaUpdateTexEnv( GLcontext *ctx, GLuint unit )
-{
-   const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
-   const struct gl_texture_object *tObj = texUnit->_Current;
-   const GLuint format = tObj->Image[0][tObj->BaseLevel]->Format;
-   gammaTextureObjectPtr t = (gammaTextureObjectPtr)tObj->DriverData;
-   GLuint tc;
-
-   /* fprintf(stderr, "%s\n", __FUNCTION__);  */
-
-   tc = t->TextureColorMode & ~(TCM_BaseFormatMask | TCM_ApplicationMask);
-
-   switch (format) {
-   case GL_RGB:
-      tc |= TCM_BaseFormat_RGB;
-      break;
-   case GL_LUMINANCE:
-      tc |= TCM_BaseFormat_Lum;
-      break;
-   case GL_ALPHA:
-      tc |= TCM_BaseFormat_Alpha;
-      break;
-   case GL_LUMINANCE_ALPHA:
-      tc |= TCM_BaseFormat_LumAlpha;
-      break;
-   case GL_INTENSITY:
-      tc |= TCM_BaseFormat_Intensity;
-      break;
-   case GL_RGBA:
-      tc |= TCM_BaseFormat_RGBA;
-      break;
-   case GL_COLOR_INDEX:
-      break;
-   }
-
-   switch (texUnit->EnvMode) {
-   case GL_REPLACE:
-      tc |= TCM_Replace;
-      break;
-   case GL_MODULATE:
-      tc |= TCM_Modulate;
-      break;
-   case GL_ADD:
-      /* do nothing ???*/
-      break;
-   case GL_DECAL:
-      tc |= TCM_Decal;
-      break;
-   case GL_BLEND:
-      tc |= TCM_Blend;
-      break;
-   default:
-      fprintf(stderr, "unknown tex env mode");
-      return;
-   }
-
-   t->TextureColorMode = tc;
-}
-
-
-
-
-static void gammaUpdateTexUnit( GLcontext *ctx, GLuint unit )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-   struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
-
-   /* fprintf(stderr, "%s\n", __FUNCTION__);  */
-
-   if (texUnit->_ReallyEnabled == TEXTURE_2D_BIT) 
-   {
-      struct gl_texture_object *tObj = texUnit->_Current;
-      gammaTextureObjectPtr t = (gammaTextureObjectPtr)tObj->DriverData;
-
-      /* Upload teximages (not pipelined)
-       */
-      if (t->dirty_images) {
-	 gammaSetTexImages( gmesa, tObj );
-	 if (!t->MemBlock) {
-	    FALLBACK( gmesa, GAMMA_FALLBACK_TEXTURE, GL_TRUE );
-	    return;
-	 }
-      }
-
-#if 0
-      if (tObj->Image[0][tObj->BaseLevel]->Border > 0) {
-         FALLBACK( gmesa, GAMMA_FALLBACK_TEXTURE, GL_TRUE );
-         return;
-      }
-#endif
-
-      /* Update state if this is a different texture object to last
-       * time.
-       */
-      if (gmesa->CurrentTexObj[unit] != t) {
-	 gmesa->dirty |= GAMMA_UPLOAD_TEX0 /* << unit */;
-	 gmesa->CurrentTexObj[unit] = t;
-	 gammaUpdateTexLRU( gmesa, t ); /* done too often */
-      }
-      
-      /* Update texture environment if texture object image format or 
-       * texture environment state has changed.
-       */
-      if (tObj->Image[0][tObj->BaseLevel]->Format != gmesa->TexEnvImageFmt[unit]) {
-	 gmesa->TexEnvImageFmt[unit] = tObj->Image[0][tObj->BaseLevel]->Format;
-	 gammaUpdateTexEnv( ctx, unit );
-      }
-   }
-   else if (texUnit->_ReallyEnabled) {
-      FALLBACK( gmesa, GAMMA_FALLBACK_TEXTURE, GL_TRUE );
-   }
-   else /*if (gmesa->CurrentTexObj[unit])*/ {
-      gmesa->CurrentTexObj[unit] = 0;
-      gmesa->TexEnvImageFmt[unit] = 0;	
-      gmesa->dirty &= ~(GAMMA_UPLOAD_TEX0<<unit); 
-   }
-}
-
-
-void gammaUpdateTextureState( GLcontext *ctx )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-   /* fprintf(stderr, "%s\n", __FUNCTION__);  */
-   FALLBACK( gmesa, GAMMA_FALLBACK_TEXTURE, GL_FALSE );
-   gammaUpdateTexUnit( ctx, 0 );
-#if 0
-   gammaUpdateTexUnit( ctx, 1 );
-#endif
-}
-
-
-
diff --git a/src/mesa/drivers/dri/gamma/gamma_tris.c b/src/mesa/drivers/dri/gamma/gamma_tris.c
deleted file mode 100644
index babe964951..0000000000
--- a/src/mesa/drivers/dri/gamma/gamma_tris.c
+++ /dev/null
@@ -1,660 +0,0 @@
-/*
- * Copyright 2001 by Alan Hourihane.
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Alan Hourihane not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission.  Alan Hourihane makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as is" without express or implied warranty.
- *
- * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * Authors:  Alan Hourihane, <alanh@tungstengraphics.com>
- *           Keith Whitwell, <keith@tungstengraphics.com>
- *
- * 3DLabs Gamma driver.
- */
-
-#include "gamma_context.h"
-#include "gamma_macros.h"
-#include "gamma_vb.h"
-#include "gamma_tris.h"
-
-#include "main/glheader.h"
-#include "main/mtypes.h"
-#include "main/macros.h"
-#include "main/colormac.h"
-
-#include "swrast/swrast.h"
-#include "swrast_setup/swrast_setup.h"
-#include "tnl/tnl.h"
-#include "tnl/t_context.h"
-#include "tnl/t_pipeline.h"
-
-
-/***********************************************************************
- *                   Build hardware rasterization functions            *
- ***********************************************************************/
-
-#define GAMMA_RAST_ALPHA_BIT	0x01
-#define GAMMA_RAST_TEX_BIT	0x02
-#define GAMMA_RAST_FLAT_BIT	0x04
-
-static gamma_point_func gamma_point_tab[0x8];
-static gamma_line_func gamma_line_tab[0x8];
-static gamma_tri_func gamma_tri_tab[0x8];
-static gamma_quad_func gamma_quad_tab[0x8];
-
-#define IND (0)
-#define TAG(x) x
-#include "gamma_tritmp.h"
-
-#define IND (GAMMA_RAST_ALPHA_BIT)
-#define TAG(x) x##_alpha
-#include "gamma_tritmp.h"
-
-#define IND (GAMMA_RAST_TEX_BIT)
-#define TAG(x) x##_tex
-#include "gamma_tritmp.h"
-
-#define IND (GAMMA_RAST_ALPHA_BIT|GAMMA_RAST_TEX_BIT)
-#define TAG(x) x##_alpha_tex
-#include "gamma_tritmp.h"
-
-#define IND (GAMMA_RAST_FLAT_BIT)
-#define TAG(x) x##_flat
-#include "gamma_tritmp.h"
-
-#define IND (GAMMA_RAST_ALPHA_BIT|GAMMA_RAST_FLAT_BIT)
-#define TAG(x) x##_alpha_flat
-#include "gamma_tritmp.h"
-
-#define IND (GAMMA_RAST_TEX_BIT|GAMMA_RAST_FLAT_BIT)
-#define TAG(x) x##_tex_flat
-#include "gamma_tritmp.h"
-
-#define IND (GAMMA_RAST_ALPHA_BIT|GAMMA_RAST_TEX_BIT|GAMMA_RAST_FLAT_BIT)
-#define TAG(x) x##_alpha_tex_flat
-#include "gamma_tritmp.h"
-
-
-static void init_rast_tab( void )
-{
-   gamma_init();
-   gamma_init_alpha();
-   gamma_init_tex();
-   gamma_init_alpha_tex();
-   gamma_init_flat();
-   gamma_init_alpha_flat();
-   gamma_init_tex_flat();
-   gamma_init_alpha_tex_flat();
-}
-
-/***********************************************************************
- *                    Rasterization fallback helpers                   *
- ***********************************************************************/
-
-
-/* This code is hit only when a mix of accelerated and unaccelerated
- * primitives are being drawn, and only for the unaccelerated
- * primitives.  
- */
-static void 
-gamma_fallback_quad( gammaContextPtr gmesa, 
-		    const gammaVertex *v0, 
-		    const gammaVertex *v1, 
-		    const gammaVertex *v2, 
-		    const gammaVertex *v3 )
-{
-   GLcontext *ctx = gmesa->glCtx;
-   SWvertex v[4];
-   gamma_translate_vertex( ctx, v0, &v[0] );
-   gamma_translate_vertex( ctx, v1, &v[1] );
-   gamma_translate_vertex( ctx, v2, &v[2] );
-   gamma_translate_vertex( ctx, v3, &v[3] );
-   _swrast_Quad( ctx, &v[0], &v[1], &v[2], &v[3] );
-}
-
-static void 
-gamma_fallback_tri( gammaContextPtr gmesa, 
-		    const gammaVertex *v0, 
-		    const gammaVertex *v1, 
-		    const gammaVertex *v2 )
-{
-   GLcontext *ctx = gmesa->glCtx;
-   SWvertex v[3];
-   gamma_translate_vertex( ctx, v0, &v[0] );
-   gamma_translate_vertex( ctx, v1, &v[1] );
-   gamma_translate_vertex( ctx, v2, &v[2] );
-   _swrast_Triangle( ctx, &v[0], &v[1], &v[2] );
-}
-
-static void 
-gamma_fallback_line( gammaContextPtr gmesa,
-		     const gammaVertex *v0,
-		     const gammaVertex *v1 )
-{
-   GLcontext *ctx = gmesa->glCtx;
-   SWvertex v[2];
-   gamma_translate_vertex( ctx, v0, &v[0] );
-   gamma_translate_vertex( ctx, v1, &v[1] );
-   _swrast_Line( ctx, &v[0], &v[1] );
-}
-
-
-#if 0
-static void 
-gamma_fallback_point( gammaContextPtr gmesa, 
-		      const gammaVertex *v0 )
-{
-   GLcontext *ctx = gmesa->glCtx;
-   SWvertex v[1];
-   gamma_translate_vertex( ctx, v0, &v[0] );
-   _swrast_Point( ctx, &v[0] );
-}
-#endif
-
-
-/***********************************************************************
- *                    Choose rasterization functions                   *
- ***********************************************************************/
-
-#define _GAMMA_NEW_RASTER_STATE (_NEW_FOG | \
-				 _NEW_TEXTURE | \
-				 _DD_NEW_TRI_SMOOTH | \
-				 _DD_NEW_LINE_SMOOTH | \
-				 _DD_NEW_POINT_SMOOTH | \
-				 _DD_NEW_TRI_STIPPLE | \
-				 _DD_NEW_LINE_STIPPLE)
-
-#define LINE_FALLBACK (0)
-#define TRI_FALLBACK (0)
-
-static void gammaChooseRasterState(GLcontext *ctx)
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-   GLuint flags = ctx->_TriangleCaps;
-   GLuint ind = 0;
-
-   if ( ctx->Line.SmoothFlag || 
-        ctx->Polygon.SmoothFlag || 
-        ctx->Point.SmoothFlag )
-      gmesa->Begin |= B_AntiAliasEnable;
-   else
-      gmesa->Begin &= ~B_AntiAliasEnable;
-
-   if ( ctx->Texture.Unit[0]._ReallyEnabled ) {
-      ind |= GAMMA_RAST_TEX_BIT;
-      gmesa->Begin |= B_TextureEnable;
-   } else
-      gmesa->Begin &= ~B_TextureEnable;
-
-   if (flags & DD_LINE_STIPPLE)
-      gmesa->Begin |= B_LineStippleEnable;
-   else
-      gmesa->Begin &= ~B_LineStippleEnable;
-   
-   if (flags & DD_TRI_STIPPLE)
-      gmesa->Begin |= B_AreaStippleEnable;
-   else
-      gmesa->Begin &= ~B_AreaStippleEnable;
-
-   if (ctx->Fog.Enabled) 
-      gmesa->Begin |= B_FogEnable;
-   else
-      gmesa->Begin &= ~B_FogEnable;
-
-   if (ctx->Color.BlendEnabled || ctx->Color.AlphaEnabled)
-      ind |= GAMMA_RAST_ALPHA_BIT;
-
-   if ( flags & DD_FLATSHADE )
-      ind |= GAMMA_RAST_FLAT_BIT;
-
-   gmesa->draw_line = gamma_line_tab[ind];
-   gmesa->draw_tri = gamma_tri_tab[ind];
-   gmesa->draw_quad = gamma_quad_tab[ind];
-   gmesa->draw_point = gamma_point_tab[ind];
-
-   /* Hook in fallbacks for specific primitives.  CURRENTLY DISABLED
-    */
-   if (flags & LINE_FALLBACK) 
-      gmesa->draw_line = gamma_fallback_line;
-	 
-   if (flags & TRI_FALLBACK) {
-      gmesa->draw_tri = gamma_fallback_tri;
-      gmesa->draw_quad = gamma_fallback_quad;
-   }
-}
-
-
-
-
-/***********************************************************************
- *          Macros for t_dd_tritmp.h to draw basic primitives          *
- ***********************************************************************/
-
-#define TRI( a, b, c )				\
-do {						\
-   gmesa->draw_tri( gmesa, a, b, c );	\
-} while (0)
-
-#define QUAD( a, b, c, d )			\
-do {						\
-   gmesa->draw_quad( gmesa, a, b, c, d );	\
-} while (0)
-
-#define LINE( v0, v1 )				\
-do {						\
-   gmesa->draw_line( gmesa, v0, v1 );	\
-} while (0)
-
-#define POINT( v0 )				\
-do {						\
-   gmesa->draw_point( gmesa, v0 );		\
-} while (0)
-
-
-/***********************************************************************
- *              Build render functions from dd templates               *
- ***********************************************************************/
-
-#define GAMMA_OFFSET_BIT 	0x01
-#define GAMMA_TWOSIDE_BIT	0x02
-#define GAMMA_UNFILLED_BIT	0x04
-#define GAMMA_FALLBACK_BIT	0x08
-#define GAMMA_MAX_TRIFUNC	0x10
-
-
-static struct {
-   tnl_points_func		points;
-   tnl_line_func		line;
-   tnl_triangle_func	triangle;
-   tnl_quad_func		quad;
-} rast_tab[GAMMA_MAX_TRIFUNC];
-
-
-#define DO_FALLBACK (IND & GAMMA_FALLBACK_BIT)
-#define DO_OFFSET    0 /* (IND & GAMMA_OFFSET_BIT) */
-#define DO_UNFILLED  0 /* (IND & GAMMA_UNFILLED_BIT) */
-#define DO_TWOSIDE  (IND & GAMMA_TWOSIDE_BIT)
-#define DO_FLAT      0
-#define DO_TRI       1
-#define DO_QUAD      1
-#define DO_LINE      1
-#define DO_POINTS    1
-#define DO_FULL_QUAD 1
-
-#define HAVE_RGBA         1
-#define HAVE_SPEC         0
-#define HAVE_BACK_COLORS  0
-#define HAVE_HW_FLATSHADE 1
-#define VERTEX            gammaVertex
-#define TAB               rast_tab
-
-#define DEPTH_SCALE 1.0
-#define UNFILLED_TRI unfilled_tri
-#define UNFILLED_QUAD unfilled_quad
-#define VERT_X(_v) _v->v.x
-#define VERT_Y(_v) _v->v.y
-#define VERT_Z(_v) _v->v.z
-#define AREA_IS_CCW( a ) (a > 0)
-#define GET_VERTEX(e) (gmesa->verts + (e * gmesa->vertex_size * sizeof(int)))
-
-#define VERT_SET_RGBA( v, c )  					\
-do {								\
-   UNCLAMPED_FLOAT_TO_UBYTE(v->ub4[4][0], (c)[0]);		\
-   UNCLAMPED_FLOAT_TO_UBYTE(v->ub4[4][1], (c)[1]);		\
-   UNCLAMPED_FLOAT_TO_UBYTE(v->ub4[4][2], (c)[2]);		\
-   UNCLAMPED_FLOAT_TO_UBYTE(v->ub4[4][3], (c)[3]);		\
-} while (0)
-#define VERT_COPY_RGBA( v0, v1 ) v0->ui[4] = v1->ui[4]
-#define VERT_SAVE_RGBA( idx )    color[idx] = v[idx]->ui[4]
-#define VERT_RESTORE_RGBA( idx ) v[idx]->ui[4] = color[idx]   
-
-#define LOCAL_VARS(n)					\
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);	\
-   GLuint color[n] = { 0 };			\
-   (void) color;
-
-
-/***********************************************************************
- *                Helpers for rendering unfilled primitives            *
- ***********************************************************************/
-
-static const GLuint hw_prim[GL_POLYGON+1] = {
-   B_PrimType_Points,
-   B_PrimType_Lines,
-   B_PrimType_Lines,
-   B_PrimType_Lines,
-   B_PrimType_Triangles,
-   B_PrimType_Triangles,
-   B_PrimType_Triangles,
-   B_PrimType_Triangles,
-   B_PrimType_Triangles,
-   B_PrimType_Triangles
-};
-
-static void gammaResetLineStipple( GLcontext *ctx );
-static void gammaRasterPrimitive( GLcontext *ctx, GLuint hwprim );
-static void gammaRenderPrimitive( GLcontext *ctx, GLenum prim );
-
-#define RASTERIZE(x) if (gmesa->hw_primitive != hw_prim[x]) \
-                        gammaRasterPrimitive( ctx, hw_prim[x] )
-#define RENDER_PRIMITIVE gmesa->render_primitive
-#define TAG(x) x
-#define IND GAMMA_FALLBACK_BIT
-#include "tnl_dd/t_dd_unfilled.h"
-#undef IND
-
-/***********************************************************************
- *                      Generate GL render functions                   *
- ***********************************************************************/
-
-#define IND (0)
-#define TAG(x) x
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (GAMMA_OFFSET_BIT)
-#define TAG(x) x##_offset
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (GAMMA_TWOSIDE_BIT)
-#define TAG(x) x##_twoside
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (GAMMA_TWOSIDE_BIT|GAMMA_OFFSET_BIT)
-#define TAG(x) x##_twoside_offset
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (GAMMA_UNFILLED_BIT)
-#define TAG(x) x##_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (GAMMA_OFFSET_BIT|GAMMA_UNFILLED_BIT)
-#define TAG(x) x##_offset_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (GAMMA_TWOSIDE_BIT|GAMMA_UNFILLED_BIT)
-#define TAG(x) x##_twoside_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (GAMMA_TWOSIDE_BIT|GAMMA_OFFSET_BIT|GAMMA_UNFILLED_BIT)
-#define TAG(x) x##_twoside_offset_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-
-
-static void init_render_tab( void )
-{
-   init();
-   init_offset();
-   init_twoside();
-   init_twoside_offset();
-   init_unfilled();
-   init_offset_unfilled();
-   init_twoside_unfilled();
-   init_twoside_offset_unfilled();
-}
-
-
-/**********************************************************************/
-/*               Render unclipped begin/end objects                   */
-/**********************************************************************/
-
-#define VERT(x) (gammaVertex *)(gammaverts + (x * size * sizeof(int)))
-#define RENDER_POINTS( start, count )		\
-   for ( ; start < count ; start++) 		\
-      gmesa->draw_point( gmesa, VERT(start) )
-#define RENDER_LINE( v0, v1 ) \
-   gmesa->draw_line( gmesa, VERT(v0), VERT(v1) )
-#define RENDER_TRI( v0, v1, v2 )  \
-   gmesa->draw_tri( gmesa, VERT(v0), VERT(v1), VERT(v2) )
-#define RENDER_QUAD( v0, v1, v2, v3 ) \
-   gmesa->draw_quad( gmesa, VERT(v0), VERT(v1), VERT(v2), VERT(v3) )
-#define INIT(x) gammaRenderPrimitive( ctx, x );
-#undef LOCAL_VARS
-#define LOCAL_VARS						\
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);		\
-   const GLuint size = gmesa->vertex_size;		\
-   const char *gammaverts = (char *)gmesa->verts;		\
-   const GLboolean stipple = ctx->Line.StippleFlag;		\
-   (void) stipple;
-#define RESET_STIPPLE	if ( stipple ) gammaResetLineStipple( ctx );
-#define RESET_OCCLUSION
-#define PRESERVE_VB_DEFS
-#define ELT(x) (x)
-#define TAG(x) gamma_##x##_verts
-#include "tnl/t_vb_rendertmp.h"
-
-
-/**********************************************************************/
-/*                   Render clipped primitives                        */
-/**********************************************************************/
-
-static void gammaRenderClippedPoly( GLcontext *ctx, const GLuint *elts, 
-				   GLuint n )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-   struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
-   TNLcontext *tnl = TNL_CONTEXT(ctx);
-   GLuint prim = gmesa->render_primitive;
-
-   /* Render the new vertices as an unclipped polygon. 
-    */
-   {
-      GLuint *tmp = VB->Elts;
-      VB->Elts = (GLuint *)elts;
-      tnl->Driver.Render.PrimTabElts[GL_POLYGON]( ctx, 0, n, PRIM_BEGIN|PRIM_END );
-      VB->Elts = tmp;
-   }
-
-   /* Restore the render primitive
-    */
-   if (prim != GL_POLYGON)
-      tnl->Driver.Render.PrimitiveNotify( ctx, prim );
-}
-
-static void gammaRenderClippedLine( GLcontext *ctx, GLuint ii, GLuint jj )
-{
-   TNLcontext *tnl = TNL_CONTEXT(ctx);
-   tnl->Driver.Render.Line( ctx, ii, jj );
-}
-
-
-/**********************************************************************/
-/*                    Choose render functions                         */
-/**********************************************************************/
-
-
-
-#define _GAMMA_NEW_RENDERSTATE (_DD_NEW_TRI_UNFILLED |		\
-			       _DD_NEW_TRI_LIGHT_TWOSIDE |	\
-			       _DD_NEW_TRI_OFFSET)
-
-#define ANY_RASTER_FLAGS (DD_TRI_LIGHT_TWOSIDE|DD_TRI_OFFSET|DD_TRI_UNFILLED)
-
-static void gammaChooseRenderState(GLcontext *ctx)
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-   TNLcontext *tnl = TNL_CONTEXT(ctx);
-   GLuint flags = ctx->_TriangleCaps;
-   GLuint index = 0;
-
-   if (flags & ANY_RASTER_FLAGS) {
-      if (flags & DD_TRI_LIGHT_TWOSIDE)       index |= GAMMA_TWOSIDE_BIT;
-      if (flags & DD_TRI_OFFSET)	      index |= GAMMA_OFFSET_BIT;
-      if (flags & DD_TRI_UNFILLED)	      index |= GAMMA_UNFILLED_BIT;
-   }
-
-   if (gmesa->RenderIndex != index) {
-      gmesa->RenderIndex = index;
-
-      tnl->Driver.Render.Points = rast_tab[index].points;
-      tnl->Driver.Render.Line = rast_tab[index].line;
-      tnl->Driver.Render.Triangle = rast_tab[index].triangle;
-      tnl->Driver.Render.Quad = rast_tab[index].quad;
-         
-      if (gmesa->RenderIndex == 0)
-         tnl->Driver.Render.PrimTabVerts = gamma_render_tab_verts;
-      else
-         tnl->Driver.Render.PrimTabVerts = _tnl_render_tab_verts;
-      tnl->Driver.Render.PrimTabElts = _tnl_render_tab_elts;
-      tnl->Driver.Render.ClippedLine = gammaRenderClippedLine;
-      tnl->Driver.Render.ClippedPolygon = gammaRenderClippedPoly;
-   }
-}
-
-
-/**********************************************************************/
-/*                 High level hooks for t_vb_render.c                 */
-/**********************************************************************/
-
-
-
-/* Determine the rasterized primitive when not drawing unfilled 
- * polygons.
- *
- * Used only for the default render stage which always decomposes
- * primitives to trianges/lines/points.  For the accelerated stage,
- * which renders strips as strips, the equivalent calculations are
- * performed in gammarender.c.
- */
-
-static void gammaRasterPrimitive( GLcontext *ctx, GLuint hwprim )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-   if (gmesa->hw_primitive != hwprim)
-      gmesa->hw_primitive = hwprim;
-}
-
-static void gammaRenderPrimitive( GLcontext *ctx, GLenum prim )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-   gmesa->render_primitive = prim;
-}
-
-static void gammaRunPipeline( GLcontext *ctx )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-
-   if ( gmesa->new_state )
-      gammaDDUpdateHWState( ctx );
-
-   if (gmesa->new_gl_state) {
-      if (gmesa->new_gl_state & _NEW_TEXTURE)
-	 gammaUpdateTextureState( ctx );
-
-   if (!gmesa->Fallback) {
-      if (gmesa->new_gl_state & _GAMMA_NEW_VERTEX)
-	 gammaChooseVertexState( ctx );
-      
-      if (gmesa->new_gl_state & _GAMMA_NEW_RASTER_STATE)
-	 gammaChooseRasterState( ctx );
-      
-      if (gmesa->new_gl_state & _GAMMA_NEW_RENDERSTATE)
-	 gammaChooseRenderState( ctx );
-   }
-      
-      gmesa->new_gl_state = 0;
-   }
-
-   _tnl_run_pipeline( ctx );
-}
-
-static void gammaRenderStart( GLcontext *ctx )
-{
-   /* Check for projective texturing.  Make sure all texcoord
-    * pointers point to something.  (fix in mesa?)  
-    */
-   gammaCheckTexSizes( ctx );
-}
-
-static void gammaRenderFinish( GLcontext *ctx )
-{
-   if (0)
-      _swrast_flush( ctx );	/* never needed */
-}
-
-static void gammaResetLineStipple( GLcontext *ctx )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-
-   /* Reset the hardware stipple counter.
-    */
-   CHECK_DMA_BUFFER(gmesa, 1);
-   WRITE(gmesa->buf, UpdateLineStippleCounters, 0);
-}
-
-
-/**********************************************************************/
-/*           Transition to/from hardware rasterization.               */
-/**********************************************************************/
-
-
-void gammaFallback( gammaContextPtr gmesa, GLuint bit, GLboolean mode )
-{
-   GLcontext *ctx = gmesa->glCtx;
-   TNLcontext *tnl = TNL_CONTEXT(ctx);
-   GLuint oldfallback = gmesa->Fallback;
-
-   if (mode) {
-      gmesa->Fallback |= bit;
-      if (oldfallback == 0) {
-	 _swsetup_Wakeup( ctx );
-	 _tnl_need_projected_coords( ctx, GL_TRUE );
-	 gmesa->RenderIndex = ~0;
-      }
-   }
-   else {
-      gmesa->Fallback &= ~bit;
-      if (oldfallback == bit) {
-	 _swrast_flush( ctx );
-	 tnl->Driver.Render.Start = gammaRenderStart;
-	 tnl->Driver.Render.PrimitiveNotify = gammaRenderPrimitive;
-	 tnl->Driver.Render.Finish = gammaRenderFinish;
-	 tnl->Driver.Render.BuildVertices = gammaBuildVertices;
-         tnl->Driver.Render.ResetLineStipple = gammaResetLineStipple;
-	 gmesa->new_gl_state |= (_GAMMA_NEW_RENDERSTATE|
-				 _GAMMA_NEW_RASTER_STATE|
-				 _GAMMA_NEW_VERTEX);
-      }
-   }
-}
-
-
-/**********************************************************************/
-/*                            Initialization.                         */
-/**********************************************************************/
-
-
-void gammaDDInitTriFuncs( GLcontext *ctx )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-   TNLcontext *tnl = TNL_CONTEXT(ctx);
-   static int firsttime = 1;
-
-   if (firsttime) {
-      init_rast_tab();
-      init_render_tab();
-      firsttime = 0;
-   }
-   
-   gmesa->RenderIndex = ~0;
-
-   tnl->Driver.RunPipeline = gammaRunPipeline;
-   tnl->Driver.Render.Start = gammaRenderStart;
-   tnl->Driver.Render.Finish = gammaRenderFinish; 
-   tnl->Driver.Render.PrimitiveNotify = gammaRenderPrimitive;
-   tnl->Driver.Render.ResetLineStipple = gammaResetLineStipple;
-   tnl->Driver.Render.BuildVertices = gammaBuildVertices;
-}
diff --git a/src/mesa/drivers/dri/gamma/gamma_tris.h b/src/mesa/drivers/dri/gamma/gamma_tris.h
deleted file mode 100644
index 02bec28690..0000000000
--- a/src/mesa/drivers/dri/gamma/gamma_tris.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2001 by Alan Hourihane.
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Alan Hourihane not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission.  Alan Hourihane makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as is" without express or implied warranty.
- *
- * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * Authors:  Alan Hourihane, <alanh@tungstengraphics.com>
- *           Keith Whitwell, <keith@tungstengraphics.com>
- *
- * 3DLabs Gamma driver.
- */
-
-#ifndef _GAMMA_TRIS_H
-#define _GAMMA_TRIS_H
-
-extern void gammaDDTrifuncInit(void);
-extern void gammaDDChooseTriRenderState(GLcontext *);
-
-
-
-#endif /* !(_GAMMA_TRIS_H) */
diff --git a/src/mesa/drivers/dri/gamma/gamma_tritmp.h b/src/mesa/drivers/dri/gamma/gamma_tritmp.h
deleted file mode 100644
index bea2508d4a..0000000000
--- a/src/mesa/drivers/dri/gamma/gamma_tritmp.h
+++ /dev/null
@@ -1,496 +0,0 @@
-
-static void TAG(gamma_point)( gammaContextPtr gmesa, 
-			     const gammaVertex *v0 )
-{
-    uint32_t vColor;
-    uint32_t vBegin;
-
-    vBegin = gmesa->Begin | B_PrimType_Points;
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, Begin, vBegin);
-
-#if (IND & GAMMA_RAST_ALPHA_BIT)
-    vColor = (v0->v.color.alpha << 24) |
-	     (v0->v.color.blue  << 16) |
-	     (v0->v.color.green <<  8) |
-	     (v0->v.color.red   <<  0);
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, PackedColor4, vColor);
-#else
-    vColor = (v0->v.color.blue  << 16) |
-	     (v0->v.color.green <<  8) |
-	     (v0->v.color.red   <<  0);
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, PackedColor3, vColor);
-#endif
-
-#if (IND & GAMMA_RAST_TEX_BIT)
-    CHECK_DMA_BUFFER(gmesa, 6);
-    WRITEF(gmesa->buf, Tt2, v0->v.u0);
-    WRITEF(gmesa->buf, Ts2, v0->v.v0);
-    WRITEF(gmesa->buf, Vw, v0->v.w);
-    WRITEF(gmesa->buf, Vz, v0->v.z);
-    WRITEF(gmesa->buf, Vy, v0->v.y);
-    WRITEF(gmesa->buf, Vx4, v0->v.x);
-#else
-    CHECK_DMA_BUFFER(gmesa, 4);
-    WRITEF(gmesa->buf, Vw, v0->v.w);
-    WRITEF(gmesa->buf, Vz, v0->v.z);
-    WRITEF(gmesa->buf, Vy, v0->v.y);
-    WRITEF(gmesa->buf, Vx4, v0->v.x);
-#endif
-
-#if !(IND & GAMMA_RAST_FLAT_BIT)
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, FlushSpan, 0);
-#endif
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, End, 0);
-}
-
-static void TAG(gamma_line)( gammaContextPtr gmesa, 
-			     const gammaVertex *v0,
-			     const gammaVertex *v1 )
-{
-    uint32_t vColor;
-    uint32_t vBegin;
-
-    vBegin = gmesa->Begin | B_PrimType_Lines;
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, Begin, vBegin);
-
-#if !(IND & GAMMA_RAST_FLAT_BIT)
-#if (IND & GAMMA_RAST_ALPHA_BIT)
-    vColor = (v0->v.color.alpha << 24) |
-	     (v0->v.color.blue  << 16) |
-	     (v0->v.color.green <<  8) |
-	     (v0->v.color.red   <<  0);
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, PackedColor4, vColor);
-#else
-    vColor = (v0->v.color.blue  << 16) |
-	     (v0->v.color.green <<  8) |
-	     (v0->v.color.red   <<  0);
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, PackedColor3, vColor);
-#endif
-#else
-#if (IND & GAMMA_RAST_ALPHA_BIT)
-    vColor = (v1->v.color.alpha << 24) |
-	     (v1->v.color.blue  << 16) |
-	     (v1->v.color.green <<  8) |
-	     (v1->v.color.red   <<  0);
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, PackedColor4, vColor);
-#else
-    vColor = (v1->v.color.blue  << 16) |
-	     (v1->v.color.green <<  8) |
-	     (v1->v.color.red   <<  0);
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, PackedColor3, vColor);
-#endif
-#endif
-
-#if (IND & GAMMA_RAST_TEX_BIT)
-    CHECK_DMA_BUFFER(gmesa, 6);
-    WRITEF(gmesa->buf, Tt2, v0->v.u0);
-    WRITEF(gmesa->buf, Ts2, v0->v.v0);
-    WRITEF(gmesa->buf, Vw, v0->v.w);
-    WRITEF(gmesa->buf, Vz, v0->v.z);
-    WRITEF(gmesa->buf, Vy, v0->v.y);
-    WRITEF(gmesa->buf, Vx4, v0->v.x);
-#else
-    CHECK_DMA_BUFFER(gmesa, 4);
-    WRITEF(gmesa->buf, Vw, v0->v.w);
-    WRITEF(gmesa->buf, Vz, v0->v.z);
-    WRITEF(gmesa->buf, Vy, v0->v.y);
-    WRITEF(gmesa->buf, Vx4, v0->v.x);
-#endif
-
-#if !(IND & GAMMA_RAST_FLAT_BIT)
-#if (IND & GAMMA_RAST_ALPHA_BIT)
-    vColor = (v1->v.color.alpha << 24) |
-	     (v1->v.color.blue  << 16) |
-	     (v1->v.color.green <<  8) |
-	     (v1->v.color.red   <<  0);
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, PackedColor4, vColor);
-#else
-    vColor = (v1->v.color.blue  << 16) |
-	     (v1->v.color.green <<  8) |
-	     (v1->v.color.red   <<  0);
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, PackedColor3, vColor);
-#endif
-#endif
-
-#if (IND & GAMMA_RAST_TEX_BIT)
-    CHECK_DMA_BUFFER(gmesa, 6);
-    WRITEF(gmesa->buf, Tt2, v1->v.u0);
-    WRITEF(gmesa->buf, Ts2, v1->v.v0);
-    WRITEF(gmesa->buf, Vw, v1->v.w);
-    WRITEF(gmesa->buf, Vz, v1->v.z);
-    WRITEF(gmesa->buf, Vy, v1->v.y);
-    WRITEF(gmesa->buf, Vx4, v1->v.x);
-#else
-    CHECK_DMA_BUFFER(gmesa, 4);
-    WRITEF(gmesa->buf, Vw, v1->v.w);
-    WRITEF(gmesa->buf, Vz, v1->v.z);
-    WRITEF(gmesa->buf, Vy, v1->v.y);
-    WRITEF(gmesa->buf, Vx4, v1->v.x);
-#endif
-
-#if !(IND & GAMMA_RAST_FLAT_BIT)
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, FlushSpan, 0);
-#endif
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, End, 0);
-}
-
-static void TAG(gamma_triangle)( gammaContextPtr gmesa,
-				 const gammaVertex *v0,
-				 const gammaVertex *v1, 
-				 const gammaVertex *v2 )
-{
-    uint32_t vColor;
-    uint32_t vBegin;
-
-    vBegin = gmesa->Begin | B_PrimType_Triangles;
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, Begin, vBegin);
-
-#if !(IND & GAMMA_RAST_FLAT_BIT)
-#if (IND & GAMMA_RAST_ALPHA_BIT)
-    vColor = (v0->v.color.alpha << 24) |
-	     (v0->v.color.blue  << 16) |
-	     (v0->v.color.green <<  8) |
-	     (v0->v.color.red   <<  0);
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, PackedColor4, vColor);
-#else
-    vColor = (v0->v.color.blue  << 16) |
-	     (v0->v.color.green <<  8) |
-	     (v0->v.color.red   <<  0);
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, PackedColor3, vColor);
-#endif
-#else
-#if (IND & GAMMA_RAST_ALPHA_BIT)
-    vColor = (v2->v.color.alpha << 24) |
-	     (v2->v.color.blue  << 16) |
-	     (v2->v.color.green <<  8) |
-	     (v2->v.color.red   <<  0);
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, PackedColor4, vColor);
-#else
-    vColor = (v2->v.color.blue  << 16) |
-	     (v2->v.color.green <<  8) |
-	     (v2->v.color.red   <<  0);
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, PackedColor3, vColor);
-#endif
-#endif
-
-#if (IND & GAMMA_RAST_TEX_BIT)
-    CHECK_DMA_BUFFER(gmesa, 6);
-    WRITEF(gmesa->buf, Tt2, v0->v.u0);
-    WRITEF(gmesa->buf, Ts2, v0->v.v0);
-    WRITEF(gmesa->buf, Vw, v0->v.w);
-    WRITEF(gmesa->buf, Vz, v0->v.z);
-    WRITEF(gmesa->buf, Vy, v0->v.y);
-    WRITEF(gmesa->buf, Vx4, v0->v.x);
-#else
-    CHECK_DMA_BUFFER(gmesa, 4);
-    WRITEF(gmesa->buf, Vw, v0->v.w);
-    WRITEF(gmesa->buf, Vz, v0->v.z);
-    WRITEF(gmesa->buf, Vy, v0->v.y);
-    WRITEF(gmesa->buf, Vx4, v0->v.x);
-#endif
-
-#if !(IND & GAMMA_RAST_FLAT_BIT)
-#if (IND & GAMMA_RAST_ALPHA_BIT)
-    vColor = (v1->v.color.alpha << 24) |
-	     (v1->v.color.blue  << 16) |
-	     (v1->v.color.green <<  8) |
-	     (v1->v.color.red   <<  0);
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, PackedColor4, vColor);
-#else
-    vColor = (v1->v.color.blue  << 16) |
-	     (v1->v.color.green <<  8) |
-	     (v1->v.color.red   <<  0);
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, PackedColor3, vColor);
-#endif
-#endif
-
-#if (IND & GAMMA_RAST_TEX_BIT)
-    CHECK_DMA_BUFFER(gmesa, 6);
-    WRITEF(gmesa->buf, Tt2, v1->v.u0);
-    WRITEF(gmesa->buf, Ts2, v1->v.v0);
-    WRITEF(gmesa->buf, Vw, v1->v.w);
-    WRITEF(gmesa->buf, Vz, v1->v.z);
-    WRITEF(gmesa->buf, Vy, v1->v.y);
-    WRITEF(gmesa->buf, Vx4, v1->v.x);
-#else
-    CHECK_DMA_BUFFER(gmesa, 4);
-    WRITEF(gmesa->buf, Vw, v1->v.w);
-    WRITEF(gmesa->buf, Vz, v1->v.z);
-    WRITEF(gmesa->buf, Vy, v1->v.y);
-    WRITEF(gmesa->buf, Vx4, v1->v.x);
-#endif
-
-#if !(IND & GAMMA_RAST_FLAT_BIT)
-#if (IND & GAMMA_RAST_ALPHA_BIT)
-    vColor = (v2->v.color.alpha << 24) |
-	     (v2->v.color.blue  << 16) |
-	     (v2->v.color.green <<  8) |
-	     (v2->v.color.red   <<  0);
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, PackedColor4, vColor);
-#else
-    vColor = (v2->v.color.blue  << 16) |
-	     (v2->v.color.green <<  8) |
-	     (v2->v.color.red   <<  0);
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, PackedColor3, vColor);
-#endif
-#endif
-
-#if (IND & GAMMA_RAST_TEX_BIT)
-    CHECK_DMA_BUFFER(gmesa, 6);
-    WRITEF(gmesa->buf, Tt2, v2->v.u0);
-    WRITEF(gmesa->buf, Ts2, v2->v.v0);
-    WRITEF(gmesa->buf, Vw, v2->v.w);
-    WRITEF(gmesa->buf, Vz, v2->v.z);
-    WRITEF(gmesa->buf, Vy, v2->v.y);
-    WRITEF(gmesa->buf, Vx4, v2->v.x);
-#else
-    CHECK_DMA_BUFFER(gmesa, 4);
-    WRITEF(gmesa->buf, Vw, v2->v.w);
-    WRITEF(gmesa->buf, Vz, v2->v.z);
-    WRITEF(gmesa->buf, Vy, v2->v.y);
-    WRITEF(gmesa->buf, Vx4, v2->v.x);
-#endif
-
-#if !(IND & GAMMA_RAST_FLAT_BIT)
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, FlushSpan, 0);
-#endif
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, End, 0);
-}
-
-static void TAG(gamma_quad)( gammaContextPtr gmesa,
-			    const gammaVertex *v0,
-			    const gammaVertex *v1,
-			    const gammaVertex *v2,
-			    const gammaVertex *v3 )
-{
-    uint32_t vColor;
-    uint32_t vBegin;
-
-    vBegin = gmesa->Begin | B_PrimType_Quads;
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, Begin, vBegin);
-
-#if !(IND & GAMMA_RAST_FLAT_BIT)
-#if (IND & GAMMA_RAST_ALPHA_BIT)
-    vColor = (v0->v.color.alpha << 24) |
-	     (v0->v.color.blue  << 16) |
-	     (v0->v.color.green <<  8) |
-	     (v0->v.color.red   <<  0);
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, PackedColor4, vColor);
-#else
-    vColor = (v0->v.color.blue  << 16) |
-	     (v0->v.color.green <<  8) |
-	     (v0->v.color.red   <<  0);
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, PackedColor3, vColor);
-#endif
-#else
-#if (IND & GAMMA_RAST_ALPHA_BIT)
-    vColor = (v3->v.color.alpha << 24) |
-	     (v3->v.color.blue  << 16) |
-	     (v3->v.color.green <<  8) |
-	     (v3->v.color.red   <<  0);
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, PackedColor4, vColor);
-#else
-    vColor = (v3->v.color.blue  << 16) |
-	     (v3->v.color.green <<  8) |
-	     (v3->v.color.red   <<  0);
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, PackedColor3, vColor);
-#endif
-#endif
-
-#if (IND & GAMMA_RAST_TEX_BIT)
-    CHECK_DMA_BUFFER(gmesa, 6);
-    WRITEF(gmesa->buf, Tt2, v0->v.u0);
-    WRITEF(gmesa->buf, Ts2, v0->v.v0);
-    WRITEF(gmesa->buf, Vw, v0->v.w);
-    WRITEF(gmesa->buf, Vz, v0->v.z);
-    WRITEF(gmesa->buf, Vy, v0->v.y);
-    WRITEF(gmesa->buf, Vx4, v0->v.x);
-#else
-    CHECK_DMA_BUFFER(gmesa, 4);
-    WRITEF(gmesa->buf, Vw, v0->v.w);
-    WRITEF(gmesa->buf, Vz, v0->v.z);
-    WRITEF(gmesa->buf, Vy, v0->v.y);
-    WRITEF(gmesa->buf, Vx4, v0->v.x);
-#endif
-
-#if !(IND & GAMMA_RAST_FLAT_BIT)
-#if (IND & GAMMA_RAST_ALPHA_BIT)
-    vColor = (v1->v.color.alpha << 24) |
-	     (v1->v.color.blue  << 16) |
-	     (v1->v.color.green <<  8) |
-	     (v1->v.color.red   <<  0);
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, PackedColor4, vColor);
-#else
-    vColor = (v1->v.color.blue  << 16) |
-	     (v1->v.color.green <<  8) |
-	     (v1->v.color.red   <<  0);
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, PackedColor3, vColor);
-#endif
-#endif
-
-#if (IND & GAMMA_RAST_TEX_BIT)
-    CHECK_DMA_BUFFER(gmesa, 6);
-    WRITEF(gmesa->buf, Tt2, v1->v.u0);
-    WRITEF(gmesa->buf, Ts2, v1->v.v0);
-    WRITEF(gmesa->buf, Vw, v1->v.w);
-    WRITEF(gmesa->buf, Vz, v1->v.z);
-    WRITEF(gmesa->buf, Vy, v1->v.y);
-    WRITEF(gmesa->buf, Vx4, v1->v.x);
-#else
-    CHECK_DMA_BUFFER(gmesa, 4);
-    WRITEF(gmesa->buf, Vw, v1->v.w);
-    WRITEF(gmesa->buf, Vz, v1->v.z);
-    WRITEF(gmesa->buf, Vy, v1->v.y);
-    WRITEF(gmesa->buf, Vx4, v1->v.x);
-#endif
-
-#if !(IND & GAMMA_RAST_FLAT_BIT)
-#if (IND & GAMMA_RAST_ALPHA_BIT)
-    vColor = (v2->v.color.alpha << 24) |
-	     (v2->v.color.blue  << 16) |
-	     (v2->v.color.green <<  8) |
-	     (v2->v.color.red   <<  0);
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, PackedColor4, vColor);
-#else
-    vColor = (v2->v.color.blue  << 16) |
-	     (v2->v.color.green <<  8) |
-	     (v2->v.color.red   <<  0);
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, PackedColor3, vColor);
-#endif
-#endif
-
-#if (IND & GAMMA_RAST_TEX_BIT)
-    CHECK_DMA_BUFFER(gmesa, 6);
-    WRITEF(gmesa->buf, Tt2, v2->v.u0);
-    WRITEF(gmesa->buf, Ts2, v2->v.v0);
-    WRITEF(gmesa->buf, Vw, v2->v.w);
-    WRITEF(gmesa->buf, Vz, v2->v.z);
-    WRITEF(gmesa->buf, Vy, v2->v.y);
-    WRITEF(gmesa->buf, Vx4, v2->v.x);
-#else
-    CHECK_DMA_BUFFER(gmesa, 4);
-    WRITEF(gmesa->buf, Vw, v2->v.w);
-    WRITEF(gmesa->buf, Vz, v2->v.z);
-    WRITEF(gmesa->buf, Vy, v2->v.y);
-    WRITEF(gmesa->buf, Vx4, v2->v.x);
-#endif
-
-#if !(IND & GAMMA_RAST_FLAT_BIT)
-#if (IND & GAMMA_RAST_ALPHA_BIT)
-    vColor = (v3->v.color.alpha << 24) |
-	     (v3->v.color.blue  << 16) |
-	     (v3->v.color.green <<  8) |
-	     (v3->v.color.red   <<  0);
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, PackedColor4, vColor);
-#else
-    vColor = (v3->v.color.blue  << 16) |
-	     (v3->v.color.green <<  8) |
-	     (v3->v.color.red   <<  0);
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, PackedColor3, vColor);
-#endif
-#endif
-
-#if (IND & GAMMA_RAST_TEX_BIT)
-    CHECK_DMA_BUFFER(gmesa, 6);
-    WRITEF(gmesa->buf, Tt2, v3->v.u0);
-    WRITEF(gmesa->buf, Ts2, v3->v.v0);
-    WRITEF(gmesa->buf, Vw, v3->v.w);
-    WRITEF(gmesa->buf, Vz, v3->v.z);
-    WRITEF(gmesa->buf, Vy, v3->v.y);
-    WRITEF(gmesa->buf, Vx4, v3->v.x);
-#else
-    CHECK_DMA_BUFFER(gmesa, 4);
-    WRITEF(gmesa->buf, Vw, v3->v.w);
-    WRITEF(gmesa->buf, Vz, v3->v.z);
-    WRITEF(gmesa->buf, Vy, v3->v.y);
-    WRITEF(gmesa->buf, Vx4, v3->v.x);
-#endif
-
-#if !(IND & GAMMA_RAST_FLAT_BIT)
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, FlushSpan, 0);
-#endif
-
-    CHECK_DMA_BUFFER(gmesa, 1);
-    WRITE(gmesa->buf, End, 0);
-}
-
-static void TAG(gamma_init)(void)
-{
-	gamma_point_tab[IND]	= TAG(gamma_point);
-	gamma_line_tab[IND]	= TAG(gamma_line);
-	gamma_tri_tab[IND]	= TAG(gamma_triangle);
-	gamma_quad_tab[IND]	= TAG(gamma_quad);
-}
-
-#undef IND
-#undef TAG
diff --git a/src/mesa/drivers/dri/gamma/gamma_vb.c b/src/mesa/drivers/dri/gamma/gamma_vb.c
deleted file mode 100644
index c9c1ebf62a..0000000000
--- a/src/mesa/drivers/dri/gamma/gamma_vb.c
+++ /dev/null
@@ -1,361 +0,0 @@
-/*
- * Copyright 2001 by Alan Hourihane.
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Alan Hourihane not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission.  Alan Hourihane makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as is" without express or implied warranty.
- *
- * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * Authors:  Alan Hourihane, <alanh@tungstengraphics.com>
- *           Keith Whitwell, <keith@tungstengraphics.com>
- *
- * 3DLabs Gamma driver.
- */
- 
-#include "main/glheader.h"
-#include "main/mtypes.h"
-#include "main/imports.h"
-#include "main/macros.h"
-#include "main/colormac.h"
-
-#include "swrast_setup/swrast_setup.h"
-#include "tnl/t_context.h"
-#include "tnl/tnl.h"
-
-#include "gamma_context.h"
-#include "gamma_vb.h"
-#include "gamma_tris.h"
-
-
-#define GAMMA_TEX0_BIT       0x1	
-#define GAMMA_RGBA_BIT       0x2
-#define GAMMA_XYZW_BIT       0x4
-#define GAMMA_PTEX_BIT       0x8
-#define GAMMA_FOG_BIT        0x10
-#define GAMMA_SPEC_BIT       0x20
-#define GAMMA_MAX_SETUP      0x40
-
-static struct {
-   void                (*emit)( GLcontext *, GLuint, GLuint, void *, GLuint );
-   tnl_interp_func		interp;
-   tnl_copy_pv_func	        copy_pv;
-   GLboolean           (*check_tex_sizes)( GLcontext *ctx );
-   GLuint               vertex_size;
-   GLuint               vertex_format;
-} setup_tab[GAMMA_MAX_SETUP];
-
-#define TINY_VERTEX_FORMAT      1
-#define NOTEX_VERTEX_FORMAT     2
-#define TEX0_VERTEX_FORMAT      3
-#define TEX1_VERTEX_FORMAT      0
-#define PROJ_TEX1_VERTEX_FORMAT 0
-#define TEX2_VERTEX_FORMAT      0
-#define TEX3_VERTEX_FORMAT      0
-#define PROJ_TEX3_VERTEX_FORMAT 0
-
-#define DO_XYZW (IND & GAMMA_XYZW_BIT)
-#define DO_RGBA (IND & GAMMA_RGBA_BIT)
-#define DO_SPEC (IND & GAMMA_SPEC_BIT)
-#define DO_FOG  (IND & GAMMA_FOG_BIT)
-#define DO_TEX0 (IND & GAMMA_TEX0_BIT)
-#define DO_TEX1 0
-#define DO_TEX2 0
-#define DO_TEX3 0
-#define DO_PTEX (IND & GAMMA_PTEX_BIT)
-			       
-#define VERTEX gammaVertex
-#define VERTEX_COLOR gamma_color_t
-#define GET_VIEWPORT_MAT() 0
-#define GET_TEXSOURCE(n)  n
-#define GET_VERTEX_FORMAT() GAMMA_CONTEXT(ctx)->vertex_format
-#define GET_VERTEX_STORE() GAMMA_CONTEXT(ctx)->verts
-#define GET_VERTEX_SIZE() GAMMA_CONTEXT(ctx)->vertex_size * sizeof(GLuint)
-#define INVALIDATE_STORED_VERTICES()
-
-#define HAVE_HW_VIEWPORT    1
-#define HAVE_HW_DIVIDE      1
-#define HAVE_RGBA_COLOR     0 	/* we're BGRA */
-#define HAVE_TINY_VERTICES  1
-#define HAVE_NOTEX_VERTICES 1
-#define HAVE_TEX0_VERTICES  1
-#define HAVE_TEX1_VERTICES  0
-#define HAVE_TEX2_VERTICES  0
-#define HAVE_TEX3_VERTICES  0
-#define HAVE_PTEX_VERTICES  1
-
-#define PTEX_FALLBACK()		/* never needed */
-
-#define INTERP_VERTEX setup_tab[GAMMA_CONTEXT(ctx)->SetupIndex].interp
-#define COPY_PV_VERTEX setup_tab[GAMMA_CONTEXT(ctx)->SetupIndex].copy_pv
-
-
-
-/***********************************************************************
- *         Generate  pv-copying and translation functions              *
- ***********************************************************************/
-
-#define TAG(x) gamma_##x
-#include "tnl_dd/t_dd_vb.c"
-
-/***********************************************************************
- *             Generate vertex emit and interp functions               *
- ***********************************************************************/
-
-#define IND (GAMMA_XYZW_BIT|GAMMA_RGBA_BIT)
-#define TAG(x) x##_wg
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (GAMMA_XYZW_BIT|GAMMA_RGBA_BIT|GAMMA_SPEC_BIT)
-#define TAG(x) x##_wgs
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (GAMMA_XYZW_BIT|GAMMA_RGBA_BIT|GAMMA_TEX0_BIT)
-#define TAG(x) x##_wgt0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (GAMMA_XYZW_BIT|GAMMA_RGBA_BIT|GAMMA_TEX0_BIT|GAMMA_PTEX_BIT)
-#define TAG(x) x##_wgpt0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (GAMMA_XYZW_BIT|GAMMA_RGBA_BIT|GAMMA_SPEC_BIT|GAMMA_TEX0_BIT)
-#define TAG(x) x##_wgst0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (GAMMA_XYZW_BIT|GAMMA_RGBA_BIT|GAMMA_SPEC_BIT|GAMMA_TEX0_BIT|\
-             GAMMA_PTEX_BIT)
-#define TAG(x) x##_wgspt0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (GAMMA_XYZW_BIT|GAMMA_RGBA_BIT|GAMMA_FOG_BIT)
-#define TAG(x) x##_wgf
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (GAMMA_XYZW_BIT|GAMMA_RGBA_BIT|GAMMA_FOG_BIT|GAMMA_SPEC_BIT)
-#define TAG(x) x##_wgfs
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (GAMMA_XYZW_BIT|GAMMA_RGBA_BIT|GAMMA_FOG_BIT|GAMMA_TEX0_BIT)
-#define TAG(x) x##_wgft0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (GAMMA_XYZW_BIT|GAMMA_RGBA_BIT|GAMMA_FOG_BIT|GAMMA_TEX0_BIT|\
-             GAMMA_PTEX_BIT)
-#define TAG(x) x##_wgfpt0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (GAMMA_XYZW_BIT|GAMMA_RGBA_BIT|GAMMA_FOG_BIT|GAMMA_SPEC_BIT|\
-             GAMMA_TEX0_BIT)
-#define TAG(x) x##_wgfst0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (GAMMA_XYZW_BIT|GAMMA_RGBA_BIT|GAMMA_FOG_BIT|GAMMA_SPEC_BIT|\
-             GAMMA_TEX0_BIT|GAMMA_PTEX_BIT)
-#define TAG(x) x##_wgfspt0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (GAMMA_TEX0_BIT)
-#define TAG(x) x##_t0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (GAMMA_FOG_BIT)
-#define TAG(x) x##_f
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (GAMMA_FOG_BIT|GAMMA_TEX0_BIT)
-#define TAG(x) x##_ft0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (GAMMA_RGBA_BIT)
-#define TAG(x) x##_g
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (GAMMA_RGBA_BIT|GAMMA_SPEC_BIT)
-#define TAG(x) x##_gs
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (GAMMA_RGBA_BIT|GAMMA_TEX0_BIT)
-#define TAG(x) x##_gt0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (GAMMA_RGBA_BIT|GAMMA_SPEC_BIT|GAMMA_TEX0_BIT)
-#define TAG(x) x##_gst0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (GAMMA_RGBA_BIT|GAMMA_FOG_BIT)
-#define TAG(x) x##_gf
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (GAMMA_RGBA_BIT|GAMMA_FOG_BIT|GAMMA_SPEC_BIT)
-#define TAG(x) x##_gfs
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (GAMMA_RGBA_BIT|GAMMA_FOG_BIT|GAMMA_TEX0_BIT)
-#define TAG(x) x##_gft0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (GAMMA_RGBA_BIT|GAMMA_FOG_BIT|GAMMA_SPEC_BIT|GAMMA_TEX0_BIT)
-#define TAG(x) x##_gfst0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-static void init_setup_tab( void )
-{
-   init_wg();
-   init_wgs();
-   init_wgt0();
-   init_wgpt0();
-   init_wgst0();
-   init_wgspt0();
-   init_wgf();
-   init_wgfs();
-   init_wgft0();
-   init_wgfpt0();
-   init_wgfst0();
-   init_wgfspt0();
-   init_t0();
-   init_f();
-   init_ft0();
-   init_g();
-   init_gs();
-   init_gt0();
-   init_gst0();
-   init_gf();
-   init_gfs();
-   init_gft0();
-   init_gfst0();
-}
-
-void gammaCheckTexSizes( GLcontext *ctx )
-{
-   TNLcontext *tnl = TNL_CONTEXT(ctx);
-   gammaContextPtr gmesa = GAMMA_CONTEXT( ctx );
-
-   if (!setup_tab[gmesa->SetupIndex].check_tex_sizes(ctx)) {
-      /* Invalidate stored verts
-       */
-      gmesa->SetupNewInputs = ~0;
-      gmesa->SetupIndex |= GAMMA_PTEX_BIT;
-
-      if (!(ctx->_TriangleCaps & (DD_TRI_LIGHT_TWOSIDE|DD_TRI_UNFILLED))) {
-	 tnl->Driver.Render.Interp = setup_tab[gmesa->SetupIndex].interp;
-	 tnl->Driver.Render.CopyPV = setup_tab[gmesa->SetupIndex].copy_pv;
-      }
-   }
-}
-
-void gammaBuildVertices( GLcontext *ctx, 
-			 GLuint start, 
-			 GLuint count,
-			 GLuint newinputs )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT( ctx );
-   GLuint stride = gmesa->vertex_size * sizeof(int);
-   GLubyte *v = ((GLubyte *)gmesa->verts + (start * stride));
-
-   newinputs |= gmesa->SetupNewInputs;
-   gmesa->SetupNewInputs = 0;
-
-   if (!newinputs)
-      return;
-
-   if (newinputs & VERT_BIT_POS) {
-      setup_tab[gmesa->SetupIndex].emit( ctx, start, count, v, stride );
-   } else {
-      GLuint ind = 0;
-
-      if (newinputs & VERT_BIT_COLOR0)
-	 ind |= GAMMA_RGBA_BIT;
-
-      if (newinputs & VERT_BIT_COLOR1)
-	 ind |= GAMMA_SPEC_BIT;
-
-      if (newinputs & VERT_BIT_TEX0)
-	 ind |= GAMMA_TEX0_BIT;
-
-      if (newinputs & VERT_BIT_FOG)
-	 ind |= GAMMA_FOG_BIT;
-
-      if (gmesa->SetupIndex & GAMMA_PTEX_BIT)
-	 ind = ~0;
-
-      ind &= gmesa->SetupIndex;
-
-      if (ind) {
-	 setup_tab[ind].emit( ctx, start, count, v, stride );
-      }
-   }
-}
-
-void gammaChooseVertexState( GLcontext *ctx )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT( ctx );
-   TNLcontext *tnl = TNL_CONTEXT(ctx);
-   GLuint ind = GAMMA_XYZW_BIT|GAMMA_RGBA_BIT;
-
-   if (ctx->_TriangleCaps & DD_SEPARATE_SPECULAR)
-      ind |= GAMMA_SPEC_BIT;
-
-   if (ctx->Fog.Enabled)
-      ind |= GAMMA_FOG_BIT;
-
-   if (ctx->Texture.Unit[0]._ReallyEnabled) {
-      _tnl_need_projected_coords( ctx, GL_FALSE );
-      ind |= GAMMA_TEX0_BIT;
-   } else
-      _tnl_need_projected_coords( ctx, GL_FALSE );
-
-   gmesa->SetupIndex = ind;
-
-   if (setup_tab[ind].vertex_format != gmesa->vertex_format) {
-      gmesa->vertex_format = setup_tab[ind].vertex_format;
-      gmesa->vertex_size = setup_tab[ind].vertex_size;
-   }
-
-   if (ctx->_TriangleCaps & (DD_TRI_LIGHT_TWOSIDE|DD_TRI_UNFILLED)) {
-      tnl->Driver.Render.Interp = gamma_interp_extras;
-      tnl->Driver.Render.CopyPV = gamma_copy_pv_extras;
-   } else {
-      tnl->Driver.Render.Interp = setup_tab[ind].interp;
-      tnl->Driver.Render.CopyPV = setup_tab[ind].copy_pv;
-   }
-}
-
-
-void gammaInitVB( GLcontext *ctx )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-   GLuint size = TNL_CONTEXT(ctx)->vb.Size;
-
-   gmesa->verts = (GLubyte *)_mesa_align_malloc(size * 4 * 16, 32);
-
-   {
-      static int firsttime = 1;
-      if (firsttime) {
-	 init_setup_tab();
-	 firsttime = 0;
-	 gmesa->vertex_size = 16; /* FIXME - only one vertex setup */
-      }
-   }
-}
-
-
-void gammaFreeVB( GLcontext *ctx )
-{
-   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
-   if (gmesa->verts) {
-      _mesa_align_free(gmesa->verts);
-      gmesa->verts = 0;
-   }
-}
diff --git a/src/mesa/drivers/dri/gamma/gamma_vb.h b/src/mesa/drivers/dri/gamma/gamma_vb.h
deleted file mode 100644
index 8701226f59..0000000000
--- a/src/mesa/drivers/dri/gamma/gamma_vb.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2001 by Alan Hourihane.
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Alan Hourihane not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission.  Alan Hourihane makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as is" without express or implied warranty.
- *
- * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * Authors:  Alan Hourihane, <alanh@tungstengraphics.com>
- *           Keith Whitwell, <keith@tungstengraphics.com>
- *
- * 3DLabs Gamma driver.
- */
-
-#ifndef GAMMAVB_INC
-#define GAMMAVB_INC
-
-#include "main/mtypes.h"
-#include "swrast/swrast.h"
-
-#define _GAMMA_NEW_VERTEX (_NEW_TEXTURE |		\
-			   _DD_NEW_TRI_UNFILLED |	\
-			   _DD_NEW_TRI_LIGHT_TWOSIDE)
-
-
-extern void gammaChooseVertexState( GLcontext *ctx );
-extern void gammaCheckTexSizes( GLcontext *ctx );
-extern void gammaBuildVertices( GLcontext *ctx, 
-				GLuint start, 
-				GLuint count,
-				GLuint newinputs );
-
-
-extern void gamma_import_float_colors( GLcontext *ctx );
-extern void gamma_import_float_spec_colors( GLcontext *ctx );
-
-extern void gamma_translate_vertex( GLcontext *ctx, 
-				    const gammaVertex *src, 
-				    SWvertex *dst );
-
-extern void gammaInitVB( GLcontext *ctx );
-extern void gammaFreeVB( GLcontext *ctx );
-
-extern void gamma_print_vertex( GLcontext *ctx, const gammaVertex *v );
-extern void gammaPrintSetupFlags(char *msg, GLuint flags );
-
-#endif
diff --git a/src/mesa/drivers/dri/gamma/gamma_xmesa.c b/src/mesa/drivers/dri/gamma/gamma_xmesa.c
deleted file mode 100644
index 622121eed4..0000000000
--- a/src/mesa/drivers/dri/gamma/gamma_xmesa.c
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
- * Copyright 2001 by Alan Hourihane.
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Alan Hourihane not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission.  Alan Hourihane makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as is" without express or implied warranty.
- *
- * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * Authors:  Alan Hourihane, <alanh@tungstengraphics.com>
- *
- * 3DLabs Gamma driver
- */
-
-#include "gamma_context.h"
-#include "gamma_macros.h"
-#include "gamma_vb.h"
-#include "main/context.h"
-#include "main/matrix.h"
-#include "glint_dri.h"
-
-#include "swrast/swrast.h"
-#include "swrast_setup/swrast_setup.h"
-#include "tnl/tnl.h"
-#include "vbo/vbo.h"
-
-static GLboolean 
-gammaInitDriver(__DRIscreen *sPriv)
-{
-    sPriv->private = (void *) gammaCreateScreen( sPriv );
-
-    if (!sPriv->private) {
-	gammaDestroyScreen( sPriv );
-	return GL_FALSE;
-    }
-
-    return GL_TRUE;
-}
-
-static void 
-gammaDestroyContext(__DRIcontext *driContextPriv)
-{
-    gammaContextPtr gmesa = (gammaContextPtr)driContextPriv->driverPrivate;
-
-    if (gmesa) {
-      _swsetup_DestroyContext( gmesa->glCtx );
-      _tnl_DestroyContext( gmesa->glCtx );
-      _vbo_DestroyContext( gmesa->glCtx );
-      _swrast_DestroyContext( gmesa->glCtx );
-
-      gammaFreeVB( gmesa->glCtx );
-
-      /* free the Mesa context */
-      gmesa->glCtx->DriverCtx = NULL;
-      _mesa_destroy_context(gmesa->glCtx);
-
-      FREE(gmesa);
-      driContextPriv->driverPrivate = NULL;
-    }
-}
-
-
-static GLboolean
-gammaCreateBuffer( __DRIscreen *driScrnPriv,
-                   __DRIdrawable *driDrawPriv,
-                   const __GLcontextModes *mesaVis,
-                   GLboolean isPixmap )
-{
-   if (isPixmap) {
-      return GL_FALSE; /* not implemented */
-   }
-   else {
-      driDrawPriv->driverPrivate = (void *) 
-         _mesa_create_framebuffer(mesaVis,
-                                  GL_FALSE,  /* software depth buffer? */
-                                  mesaVis->stencilBits > 0,
-                                  mesaVis->accumRedBits > 0,
-                                  mesaVis->alphaBits > 0
-                                  );
-      return (driDrawPriv->driverPrivate != NULL);
-   }
-}
-
-
-static void
-gammaDestroyBuffer(__DRIdrawable *driDrawPriv)
-{
-   _mesa_reference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate)), NULL);
-}
-
-static void
-gammaSwapBuffers( __DRIdrawable *dPriv )
-{
-   if (dPriv->driContextPriv && dPriv->driContextPriv->driverPrivate) {
-    gammaContextPtr gmesa;
-    __DRIscreen *driScrnPriv;
-    GLcontext *ctx;
-
-    gmesa = (gammaContextPtr) dPriv->driContextPriv->driverPrivate;
-    ctx = gmesa->glCtx;
-    driScrnPriv = gmesa->driScreen;
-
-    _mesa_notifySwapBuffers(ctx);
-
-    VALIDATE_DRAWABLE_INFO(gmesa);
-
-    /* Flush any partially filled buffers */
-    FLUSH_DMA_BUFFER(gmesa);
-
-    DRM_SPINLOCK(&driScrnPriv->pSAREA->drawable_lock,
-		     driScrnPriv->drawLockID);
-    VALIDATE_DRAWABLE_INFO_NO_LOCK(gmesa);
-
-    if (gmesa->EnabledFlags & GAMMA_BACK_BUFFER) {
-	int src, dst, x0, y0, x1, h;
-	int i;
-	int nRect = dPriv->numClipRects;
-	drm_clip_rect_t *pRect = dPriv->pClipRects;
-	__DRIscreen *driScrnPriv = gmesa->driScreen;
-   	GLINTDRIPtr gDRIPriv = (GLINTDRIPtr)driScrnPriv->pDevPriv;
-
-	CHECK_DMA_BUFFER(gmesa, 2);
-	WRITE(gmesa->buf, FBReadMode, (gmesa->FBReadMode |
-					 FBReadSrcEnable));
-	WRITE(gmesa->buf, LBWriteMode, LBWriteModeDisable);
-
-	for (i = 0; i < nRect; i++, pRect++) {
-	    x0 = pRect->x1;
-	    x1 = pRect->x2;
-	    h  = pRect->y2 - pRect->y1;
-
-	    y0 = driScrnPriv->fbHeight - (pRect->y1+h);
-	    if (gDRIPriv->numMultiDevices == 2) 
-	    	src = (y0/2)*driScrnPriv->fbWidth+x0;
-	    else
-	    	src = y0*driScrnPriv->fbWidth+x0;
-
-	    y0 += driScrnPriv->fbHeight;
-	    if (gDRIPriv->numMultiDevices == 2) 
-	    	dst = (y0/2)*driScrnPriv->fbWidth+x0;
-	    else
-	    	dst = y0*driScrnPriv->fbWidth+x0;
-
-	    CHECK_DMA_BUFFER(gmesa, 9);
-	    WRITE(gmesa->buf, StartXDom,       x0<<16);   /* X0dest */
-	    WRITE(gmesa->buf, StartY,          y0<<16);   /* Y0dest */
-	    WRITE(gmesa->buf, StartXSub,       x1<<16);   /* X1dest */
-	    WRITE(gmesa->buf, GLINTCount,      h);        /* H */
-	    WRITE(gmesa->buf, dY,              1<<16);    /* ydir */
-	    WRITE(gmesa->buf, dXDom,           0<<16);
-	    WRITE(gmesa->buf, dXSub,           0<<16);
-	    WRITE(gmesa->buf, FBSourceOffset, (dst-src));
-	    WRITE(gmesa->buf, Render,          0x00040048); /* NOT_DONE */
-	}
-
-	/*
-	** NOTE: FBSourceOffset (above) is backwards from what is
-	** described in the manual (i.e., dst-src instead of src-dst)
-	** due to our using the bottom-left window origin instead of the
-	** top-left window origin.
-	*/
-
-	/* Restore FBReadMode */
-	CHECK_DMA_BUFFER(gmesa, 2);
-	WRITE(gmesa->buf, FBReadMode, (gmesa->FBReadMode |
-				       gmesa->AB_FBReadMode));
-	WRITE(gmesa->buf, LBWriteMode, LBWriteModeEnable);
-    }
-
-    if (gmesa->EnabledFlags & GAMMA_BACK_BUFFER)
-        PROCESS_DMA_BUFFER_TOP_HALF(gmesa);
-
-    DRM_SPINUNLOCK(&driScrnPriv->pSAREA->drawable_lock,
-		       driScrnPriv->drawLockID);
-    VALIDATE_DRAWABLE_INFO_NO_LOCK_POST(gmesa);
-
-    if (gmesa->EnabledFlags & GAMMA_BACK_BUFFER)
-        PROCESS_DMA_BUFFER_BOTTOM_HALF(gmesa);
-  } else {
-    _mesa_problem(NULL, "gammaSwapBuffers: drawable has no context!\n");
-  }
-}
-
-static GLboolean 
-gammaMakeCurrent(__DRIcontext *driContextPriv,
-		 __DRIdrawable *driDrawPriv,
-		 __DRIdrawable *driReadPriv)
-{
-    if (driContextPriv) {
-	GET_CURRENT_CONTEXT(ctx);
-	gammaContextPtr oldGammaCtx = ctx ? GAMMA_CONTEXT(ctx) : NULL;
-	gammaContextPtr newGammaCtx = (gammaContextPtr) driContextPriv->driverPrivate;
-
-	if ( newGammaCtx != oldGammaCtx ) {
-	    newGammaCtx->dirty = ~0;
-	}
-
-	if (newGammaCtx->driDrawable != driDrawPriv) {
-	    newGammaCtx->driDrawable = driDrawPriv;
-	    gammaUpdateWindow ( newGammaCtx->glCtx );
-	    gammaUpdateViewportOffset( newGammaCtx->glCtx );
-	}
-
-#if 0
-	newGammaCtx->Window &= ~W_GIDMask;
-	newGammaCtx->Window |= (driDrawPriv->index << 5);
-	CHECK_DMA_BUFFER(newGammaCtx,1);
-	WRITE(newGammaCtx->buf, GLINTWindow, newGammaCtx->Window);
-#endif
-
-newGammaCtx->new_state |= GAMMA_NEW_WINDOW; /* FIXME */
-
-	_mesa_make_current2( newGammaCtx->glCtx, 
-			  (GLframebuffer *) driDrawPriv->driverPrivate,
-			  (GLframebuffer *) driReadPriv->driverPrivate );
-    } else {
-	_mesa_make_current( 0, 0 );
-    }
-    return GL_TRUE;
-}
-
-
-static GLboolean 
-gammaUnbindContext( __DRIcontext *driContextPriv )
-{
-   return GL_TRUE;
-}
-
-const struct __DriverAPIRec driDriverAPI = {
-   gammaInitDriver,
-   gammaDestroyScreen,
-   gammaCreateContext,
-   gammaDestroyContext,
-   gammaCreateBuffer,
-   gammaDestroyBuffer,
-   gammaSwapBuffers,
-   gammaMakeCurrent,
-   gammaUnbindContext
-};
-
-
-
-/*
- * This is the bootstrap function for the driver.
- * The __driCreateScreen name is the symbol that libGL.so fetches.
- * Return:  pointer to a __DRIscreen.
- */
-void *__driCreateScreen(Display *dpy, int scrn, __DRIscreen *psc,
-                        int numConfigs, __GLXvisualConfig *config)
-{
-   __DRIscreen *psp;
-   psp = __driUtilCreateScreen(dpy, scrn, psc, numConfigs, config, &gammaAPI);
-   return (void *) psp;
-}
-
-/* This is the table of extensions that the loader will dlsym() for. */
-PUBLIC const __DRIextension *__driDriverExtensions[] = {
-    &driCoreExtension.base,
-    &driLegacyExtension.base,
-    NULL
-};
diff --git a/src/mesa/drivers/dri/gamma/server/glint_common.h b/src/mesa/drivers/dri/gamma/server/glint_common.h
deleted file mode 100644
index 36554e4ac2..0000000000
--- a/src/mesa/drivers/dri/gamma/server/glint_common.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* glint_common.h -- common header definitions for Gamma 2D/3D/DRM suite
- *
- * Copyright 2002 Tungsten Graphics, Inc., Cedar Park, Texas.
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Converted to common header format:
- *   Jens Owen <jens@tungstengraphics.com>
- *
- *
- */
-
-#ifndef _GLINT_COMMON_H_
-#define _GLINT_COMMON_H_
-
-/*
- * WARNING: If you change any of these defines, make sure to change
- * the kernel include file as well (gamma_drm.h)
- */
-
-/* Driver specific DRM command indices
- * NOTE: these are not OS specific, but they are driver specific
- */
-#define DRM_GAMMA_INIT                0x00
-#define DRM_GAMMA_COPY                0x01
-
-typedef struct {
-   enum {
-      GAMMA_INIT_DMA    = 0x01,
-      GAMMA_CLEANUP_DMA = 0x02
-   } func;
-   int sarea_priv_offset;
-   int pcimode;
-   unsigned int mmio0;
-   unsigned int mmio1;
-   unsigned int mmio2;
-   unsigned int mmio3;
-   unsigned int buffers_offset;
-   int num_rast;
-} drmGAMMAInit;
-
-extern int drmGAMMAInitDMA( int fd, drmGAMMAInit *info );
-extern int drmGAMMACleanupDMA( int fd );
-
-#endif
diff --git a/src/mesa/drivers/dri/gamma/server/glint_dri.h b/src/mesa/drivers/dri/gamma/server/glint_dri.h
deleted file mode 100644
index df1992a5d1..0000000000
--- a/src/mesa/drivers/dri/gamma/server/glint_dri.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/**************************************************************************
-
-Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
-All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sub license, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice (including the
-next paragraph) shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
-IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
-ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-**************************************************************************/
-
-/*
- * Author:
- *   Jens Owen <jens@tungstengraphics.com>
- *
- */
-
-#ifndef _GLINT_DRI_H_
-#define _GLINT_DRI_H_
-
-#include "xf86drm.h"
-#include "glint_common.h"
-
-typedef struct {
-	unsigned int	GDeltaMode;
-	unsigned int	GDepthMode;
-	unsigned int	GGeometryMode;
-	unsigned int	GTransformMode;
-} GAMMAContextRegionRec, *GAMMAContextRegionPtr;
-
-typedef struct {
-	unsigned char next, prev; /* indices to form a circular LRU  */
-	unsigned char in_use;	/* owned by a client, or free? */
-	int age;		/* tracked by clients to update local LRU's */
-} GAMMATextureRegionRec, *GAMMATextureRegionPtr;
-
-typedef struct {
-	GAMMAContextRegionRec context_state;
-
-	unsigned int dirty;
-
-	/* Maintain an LRU of contiguous regions of texture space.  If
-	 * you think you own a region of texture memory, and it has an
-	 * age different to the one you set, then you are mistaken and
-	 * it has been stolen by another client.  If global texAge
-	 * hasn't changed, there is no need to walk the list.
-	 *
-	 * These regions can be used as a proxy for the fine-grained
-	 * texture information of other clients - by maintaining them
-	 * in the same lru which is used to age their own textures,
-	 * clients have an approximate lru for the whole of global
-	 * texture space, and can make informed decisions as to which
-	 * areas to kick out.  There is no need to choose whether to
-	 * kick out your own texture or someone else's - simply eject
-	 * them all in LRU order.  
-	 */
-   
-#define GAMMA_NR_TEX_REGIONS 64
-	GAMMATextureRegionRec texList[GAMMA_NR_TEX_REGIONS+1];
-				/* Last elt is sentinal */
-        int texAge;		/* last time texture was uploaded */
-        int last_enqueue;	/* last time a buffer was enqueued */
-	int last_dispatch;	/* age of the most recently dispatched buffer */
-	int last_quiescent;     /*  */
-	int ctxOwner;		/* last context to upload state */
-
-	int vertex_prim;
-} GLINTSAREADRIRec, *GLINTSAREADRIPtr;
-
-/* 
- * Glint specific record passed back to client driver 
- * via DRIGetDeviceInfo request
- */
-typedef struct {
-    drmRegion	registers0;
-    drmRegion	registers1;
-    drmRegion	registers2;
-    drmRegion	registers3;
-    int			numMultiDevices;
-    int			pprod;
-    int			cpp;
-    int			frontOffset;
-    int			frontPitch;
-    int			backOffset;
-    int			backPitch;
-    int			backX;
-    int			backY;
-    int			depthOffset;
-    int			depthPitch;
-    int			textureSize;
-    int 		logTextureGranularity;
-} GLINTDRIRec, *GLINTDRIPtr;
-
-#define GLINT_DRI_BUF_COUNT 256
-#define GLINT_DRI_BUF_SIZE  4096
-
-#define GAMMA_NR_TEX_REGIONS 64
-
-#define DMA_WRITE(val,reg)                                            \
-do {                                                                  \
-    pGlint->buf2D++ = Glint##reg##Tag;                                 \
-    pGlint->buf2D++ = val;                                           \
-} while (0)
-
-#endif /* _GLINT_DRI_H_ */
-- 
cgit v1.2.3


From c9e8ff1976cd14fdc84db440a554185be29a0ca2 Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Thu, 25 Feb 2010 18:59:56 -0700
Subject: mesa: use simplified _BaseFormat value in render-to-texture code

Fixes fd.o bug 26762.
---
 src/mesa/main/texrender.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/main/texrender.c b/src/mesa/main/texrender.c
index dbed51a77f..11d7c06914 100644
--- a/src/mesa/main/texrender.c
+++ b/src/mesa/main/texrender.c
@@ -496,21 +496,24 @@ update_wrapper(GLcontext *ctx, const struct gl_renderbuffer_attachment *att)
    if (trb->TexImage->TexFormat == MESA_FORMAT_Z24_S8) {
       trb->Base.Format = MESA_FORMAT_Z24_S8;
       trb->Base.DataType = GL_UNSIGNED_INT_24_8_EXT;
+      trb->Base._BaseFormat = GL_DEPTH_STENCIL;
    }
    else if (trb->TexImage->TexFormat == MESA_FORMAT_Z16) {
       trb->Base.Format = MESA_FORMAT_Z16;
       trb->Base.DataType = GL_UNSIGNED_SHORT;
+      trb->Base._BaseFormat = GL_DEPTH_STENCIL;
    }
    else if (trb->TexImage->TexFormat == MESA_FORMAT_Z32) {
       trb->Base.Format = MESA_FORMAT_Z32;
       trb->Base.DataType = GL_UNSIGNED_INT;
+      trb->Base._BaseFormat = GL_DEPTH_COMPONENT;
    }
    else {
       trb->Base.Format = trb->TexImage->TexFormat;
       trb->Base.DataType = CHAN_TYPE;
+      trb->Base._BaseFormat = GL_RGBA;
    }
    trb->Base.Data = trb->TexImage->Data;
-   trb->Base._BaseFormat = _mesa_base_fbo_format(ctx, trb->Base.InternalFormat);
 }
 
 
-- 
cgit v1.2.3


From 593eb8a642e8853d50da7792d7c111500d5cbe34 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Fri, 26 Feb 2010 04:02:40 +0200
Subject: drop stray src/mesa/main/sources

---
 src/mesa/main/sources | 158 --------------------------------------------------
 1 file changed, 158 deletions(-)
 delete mode 100644 src/mesa/main/sources

(limited to 'src/mesa')

diff --git a/src/mesa/main/sources b/src/mesa/main/sources
deleted file mode 100644
index 5d9d99040e..0000000000
--- a/src/mesa/main/sources
+++ /dev/null
@@ -1,158 +0,0 @@
-# List of source files in this directory used for X.org xserver build
-MESA_MAIN_SOURCES = \
-accum.c \
-api_arrayelt.c \
-api_exec.c \
-api_loopback.c \
-api_noop.c \
-api_validate.c \
-arrayobj.c \
-attrib.c \
-blend.c \
-bufferobj.c \
-buffers.c \
-clear.c \
-clip.c \
-colortab.c \
-context.c \
-convolve.c \
-debug.c \
-depth.c \
-depthstencil.c \
-dlist.c \
-dlopen.c \
-drawpix.c \
-enable.c \
-enums.c \
-eval.c \
-execmem.c \
-extensions.c \
-fbobject.c \
-feedback.c \
-fog.c \
-framebuffer.c \
-get.c \
-getstring.c \
-hash.c \
-hint.c \
-histogram.c \
-image.c \
-imports.c \
-light.c \
-lines.c \
-matrix.c \
-mipmap.c \
-mm.c \
-multisample.c \
-occlude.c \
-pixel.c \
-pixelstore.c \
-points.c \
-polygon.c \
-readpix.c \
-rastpos.c \
-rbadaptors.c \
-renderbuffer.c \
-scissor.c \
-state.c \
-stencil.c \
-texcompress.c \
-texcompress_fxt1.c \
-texcompress_s3tc.c \
-texenv.c \
-texenvprogram.c \
-texformat.c \
-texgen.c \
-texgetimage.c \
-teximage.c \
-texobj.c \
-texparam.c \
-texrender.c \
-texstate.c \
-texstore.c \
-varray.c \
-$(VSNPRINTF_SOURCES) \
-vtxfmt.c
-
-MESA_VSNPRINTF_SOURCES = \
-vsnprintf.c
-
-MESA_MAIN_HEADERS = \
-accum.h \
-api_arrayelt.h \
-api_exec.h \
-api_loopback.h \
-api_noop.h \
-api_validate.h \
-arrayobj.h \
-attrib.h \
-bitset.h \
-blend.h \
-bufferobj.h \
-buffers.h \
-clear.h \
-clip.h \
-colormac.h \
-colortab.h \
-config.h \
-context.h \
-convolve.h \
-dd.h \
-debug.h \
-depth.h \
-depthstencil.h \
-dlist.h \
-dlopen.h \
-drawpix.h \
-enable.h \
-enums.h \
-eval.h \
-extensions.h \
-fbobject.h \
-feedback.h \
-fog.h \
-framebuffer.h \
-get.h \
-glheader.h \
-hash.h \
-hint.h \
-histogram.h \
-image.h \
-imports.h \
-light.h \
-lines.h \
-macros.h \
-matrix.h \
-mipmap.h \
-mm.h \
-mtypes.h \
-multisample.h \
-occlude.h \
-pixel.h \
-pixelstore.h \
-points.h \
-polygon.h \
-rastpos.h \
-rbadaptors.h \
-readpix.h \
-renderbuffer.h \
-simple_list.h \
-scissor.h \
-state.h \
-stencil.h \
-texcompress.h \
-texenv.h \
-texenvprogram.h \
-texformat.h \
-texformat_tmp.h \
-texgen.h \
-teximage.h \
-texobj.h \
-texparam.h \
-texrender.h \
-texstate.h \
-texstore.h \
-varray.h \
-version.h \
-vtxfmt.h \
-vtxfmt_tmp.h
-- 
cgit v1.2.3


From 900b163a86cc97f029c8bf8cf2779fa173f353de Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Fri, 26 Feb 2010 04:02:41 +0200
Subject: minor cleanup of dri/Makefile.template's after miniglx drop

also makes the WINDOW_SYSTEM configure var useless ...
---
 src/gallium/winsys/drm/Makefile.template   | 25 ++++---------------------
 src/gallium/winsys/drm/radeon/dri/Makefile |  2 --
 src/mesa/drivers/dri/Makefile.template     | 24 +++---------------------
 3 files changed, 7 insertions(+), 44 deletions(-)

(limited to 'src/mesa')

diff --git a/src/gallium/winsys/drm/Makefile.template b/src/gallium/winsys/drm/Makefile.template
index 960353a73d..f4cc0def47 100644
--- a/src/gallium/winsys/drm/Makefile.template
+++ b/src/gallium/winsys/drm/Makefile.template
@@ -19,30 +19,12 @@ COMMON_BM_SOURCES = \
 	$(TOP)/src/mesa/drivers/dri/common/dri_bufmgr.c \
 	$(TOP)/src/mesa/drivers/dri/common/dri_drmpool.c
 
-
-ifeq ($(WINDOW_SYSTEM),dri)
-WINOBJ=
-WINLIB=
 INCLUDES = $(SHARED_INCLUDES) $(EXPAT_INCLUDES)
 
 OBJECTS = \
 	$(C_SOURCES:.c=.o) \
 	$(ASM_SOURCES:.S=.o) 
 
-else
-# miniglx
-WINOBJ=
-WINLIB=-L$(MESA)/src/glx/mini
-MINIGLX_INCLUDES = -I$(TOP)/src/glx/mini
-INCLUDES = $(MINIGLX_INCLUDES) \
-	   $(SHARED_INCLUDES) \
-	   $(PCIACCESS_CFLAGS)
-
-OBJECTS = $(C_SOURCES:.c=.o) \
-	  $(MINIGLX_SOURCES:.c=.o) \
-	  $(ASM_SOURCES:.S=.o) 
-endif
-
 
 ### Include directories
 SHARED_INCLUDES = \
@@ -74,18 +56,19 @@ SHARED_INCLUDES = \
 	$(CC) -c $(INCLUDES) $(CFLAGS) $(DRIVER_DEFINES) $< -o $@
 
 .S.o:
-	$(CC) -c $(INCLUDES) $(CFLAGS) $(DRIVER_DEFINES)  $< -o $@
+	$(CC) -c $(INCLUDES) $(CFLAGS) $(DRIVER_DEFINES) $< -o $@
 
 
 ##### TARGETS #####
 
 default: depend symlinks $(TOP)/$(LIB_DIR)/gallium/$(LIBNAME)
 
-$(LIBNAME): $(OBJECTS) $(MESA_MODULES) $(PIPE_DRIVERS) $(WINOBJ) Makefile $(TOP)/src/mesa/drivers/dri/Makefile.template
+$(LIBNAME): $(OBJECTS) $(MESA_MODULES) $(PIPE_DRIVERS) Makefile \
+		$(TOP)/src/mesa/drivers/dri/Makefile.template
 	$(MKLIB) -o $@ -noprefix -linker '$(CC)' -ldflags '$(LDFLAGS)' \
 		$(OBJECTS) $(PIPE_DRIVERS) \
                 -Wl,--start-group $(MESA_MODULES) -Wl,--end-group \
-                 $(WINOBJ) $(DRI_LIB_DEPS) $(DRIVER_EXTRAS)
+                 $(DRI_LIB_DEPS) $(DRIVER_EXTRAS)
 
 $(TOP)/$(LIB_DIR)/gallium:
 	mkdir -p $@
diff --git a/src/gallium/winsys/drm/radeon/dri/Makefile b/src/gallium/winsys/drm/radeon/dri/Makefile
index eaa3418032..d75f7dd6da 100644
--- a/src/gallium/winsys/drm/radeon/dri/Makefile
+++ b/src/gallium/winsys/drm/radeon/dri/Makefile
@@ -4,8 +4,6 @@ include $(TOP)/configs/current
 
 LIBNAME = radeong_dri.so
 
-MINIGLX_SOURCES =
-
 PIPE_DRIVERS = \
 	$(TOP)/src/gallium/state_trackers/dri/libdridrm.a \
 	$(TOP)/src/gallium/winsys/drm/radeon/core/libradeonwinsys.a \
diff --git a/src/mesa/drivers/dri/Makefile.template b/src/mesa/drivers/dri/Makefile.template
index 39d25ce3f4..a0c25d26cd 100644
--- a/src/mesa/drivers/dri/Makefile.template
+++ b/src/mesa/drivers/dri/Makefile.template
@@ -14,28 +14,11 @@ COMMON_SOURCES = $(COMMON_GALLIUM_SOURCES) \
         ../common/drirenderbuffer.c \
 	../common/dri_metaops.c
 
-ifeq ($(WINDOW_SYSTEM),dri)
-WINOBJ=
-WINLIB=
 INCLUDES = $(SHARED_INCLUDES) $(EXPAT_INCLUDES)
 
 OBJECTS = $(C_SOURCES:.c=.o) \
 	  $(ASM_SOURCES:.S=.o) 
 
-else
-# miniglx
-WINOBJ=
-WINLIB=-L$(MESA)/src/glx/mini
-MINIGLX_INCLUDES = -I$(TOP)/src/glx/mini
-INCLUDES = $(MINIGLX_INCLUDES) \
-	   $(SHARED_INCLUDES) \
-	   $(PCIACCESS_CFLAGS)
-
-OBJECTS = $(C_SOURCES:.c=.o) \
-	  $(MINIGLX_SOURCES:.c=.o) \
-	  $(ASM_SOURCES:.S=.o) 
-endif
-
 
 ### Include directories
 SHARED_INCLUDES = \
@@ -55,7 +38,7 @@ SHARED_INCLUDES = \
 	$(CC) -c $(INCLUDES) $(CFLAGS) $(DRIVER_DEFINES) $< -o $@
 
 .S.o:
-	$(CC) -c $(INCLUDES) $(CFLAGS) $(DRIVER_DEFINES)  $< -o $@
+	$(CC) -c $(INCLUDES) $(CFLAGS) $(DRIVER_DEFINES) $< -o $@
 
 
 ##### TARGETS #####
@@ -67,11 +50,10 @@ default: subdirs lib
 lib: symlinks subdirs depend
 	@$(MAKE) $(LIBNAME) $(TOP)/$(LIB_DIR)/$(LIBNAME)
 
-$(LIBNAME): $(OBJECTS) $(MESA_MODULES) $(EXTRA_MODULES) $(WINOBJ) Makefile \
+$(LIBNAME): $(OBJECTS) $(MESA_MODULES) $(EXTRA_MODULES) Makefile \
 		$(TOP)/src/mesa/drivers/dri/Makefile.template
 	$(MKLIB) -o $@ -noprefix -linker '$(CC)' -ldflags '$(LDFLAGS)' \
-		$(OBJECTS) $(MESA_MODULES) $(EXTRA_MODULES) $(WINOBJ) \
-		$(DRI_LIB_DEPS)
+		$(OBJECTS) $(MESA_MODULES) $(EXTRA_MODULES) $(DRI_LIB_DEPS)
 
 
 $(TOP)/$(LIB_DIR)/$(LIBNAME): $(LIBNAME)
-- 
cgit v1.2.3


From 25da8e66f8f9b5a6a20ba95412e80b1f422f48d0 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Fri, 26 Feb 2010 04:02:41 +0200
Subject: remove hack for miniglx from dri/utils.c

---
 src/mesa/drivers/dri/common/utils.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/common/utils.c b/src/mesa/drivers/dri/common/utils.c
index 8c15cbbf73..b6f291098d 100644
--- a/src/mesa/drivers/dri/common/utils.c
+++ b/src/mesa/drivers/dri/common/utils.c
@@ -275,10 +275,9 @@ driCheckDriDdxDrmVersions3(const char * driver_name,
    }
 
    /* Check that the DDX driver version is compatible */
-   /* for miniglx we pass in -1 so we can ignore the DDX version */
-   if ( (ddxActual->major != -1) && ((ddxActual->major < ddxExpected->major_min)
+   if ( (ddxActual->major < ddxExpected->major_min)
 	|| (ddxActual->major > ddxExpected->major_max)
-	|| (ddxActual->minor < ddxExpected->minor)) ) {
+	|| (ddxActual->minor < ddxExpected->minor) ) {
       fprintf(stderr, format2, driver_name, "DDX",
 		       ddxExpected->major_min, ddxExpected->major_max, ddxExpected->minor,
 		       ddxActual->major, ddxActual->minor, ddxActual->patch);
-- 
cgit v1.2.3


From 17ddb7c7e897719fa28fb64ac3ecbc7b7e9f8d24 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Thu, 25 Feb 2010 13:46:45 -0800
Subject: i965: Fix the SNB URB entry count setup.

---
 src/mesa/drivers/dri/i965/gen6_urb.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/gen6_urb.c b/src/mesa/drivers/dri/i965/gen6_urb.c
index 55f7ac7727..5445e4035a 100644
--- a/src/mesa/drivers/dri/i965/gen6_urb.c
+++ b/src/mesa/drivers/dri/i965/gen6_urb.c
@@ -64,9 +64,9 @@ upload_urb(struct brw_context *brw)
    BEGIN_BATCH(3);
    OUT_BATCH(CMD_URB << 16 | (3 - 2));
    OUT_BATCH(((brw->urb.vs_size - 1) << GEN6_URB_VS_SIZE_SHIFT) |
-	     ((brw->urb.nr_vs_entries) << GEN6_URB_VS_SIZE_SHIFT));
+	     ((brw->urb.nr_vs_entries) << GEN6_URB_VS_ENTRIES_SHIFT));
    OUT_BATCH(((brw->urb.vs_size - 1) << GEN6_URB_GS_SIZE_SHIFT) |
-	     ((brw->urb.nr_gs_entries) << GEN6_URB_GS_SIZE_SHIFT));
+	     ((brw->urb.nr_gs_entries) << GEN6_URB_GS_ENTRIES_SHIFT));
    ADVANCE_BATCH();
 
    intel_batchbuffer_emit_mi_flush(intel->batch);
-- 
cgit v1.2.3


From dedfc0e6e606594b9b1772c6b0689f7fa547c3aa Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Thu, 25 Feb 2010 14:05:27 -0800
Subject: i965: Fix the SNB clip near VP API bit.

---
 src/mesa/drivers/dri/i965/brw_defines.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h
index 2bb3448da7..76ae17c96a 100644
--- a/src/mesa/drivers/dri/i965/brw_defines.h
+++ b/src/mesa/drivers/dri/i965/brw_defines.h
@@ -879,7 +879,8 @@
 # define GEN6_CLIP_STATISTICS_ENABLE			(1 << 10)
 /* DW2 */
 # define GEN6_CLIP_ENABLE				(1 << 31)
-# define GEN6_CLIP_API_OGL				(1 << 30)
+# define GEN6_CLIP_API_OGL				(0 << 30)
+# define GEN6_CLIP_API_D3D				(1 << 30)
 # define GEN6_CLIP_XY_TEST				(1 << 28)
 # define GEN6_CLIP_Z_TEST				(1 << 27)
 # define GEN6_CLIP_GB_TEST				(1 << 26)
-- 
cgit v1.2.3


From 89cce536cbc55460bc534acc06ea9f4d9ae71016 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Thu, 25 Feb 2010 14:24:36 -0800
Subject: i965: Don't include SNB in has_negative_rhw_bug.

---
 src/mesa/drivers/dri/i965/brw_context.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c
index 3614149966..a512896f31 100644
--- a/src/mesa/drivers/dri/i965/brw_context.c
+++ b/src/mesa/drivers/dri/i965/brw_context.c
@@ -170,7 +170,7 @@ GLboolean brwCreateContext( const __GLcontextModes *mesaVis,
       brw->urb.size = 384;
       brw->vs_max_threads = 32;
       brw->wm_max_threads = 10 * 5;
-   } else {
+   } else if (intel->gen < 6) {
       brw->urb.size = 256;
       brw->vs_max_threads = 16;
       brw->wm_max_threads = 8 * 4;
-- 
cgit v1.2.3


From fc26f894babc47dd3a823bd4d63ee4d8ee0dad04 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Thu, 25 Feb 2010 14:27:07 -0800
Subject: intel: Fix up INTEL_NO_HW support.

This was accidentally (it seems) deleted in
5203b7227ccb6b618fa42f08434d4a3cf123dca2
---
 src/mesa/drivers/dri/intel/intel_batchbuffer.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/intel/intel_batchbuffer.c b/src/mesa/drivers/dri/intel/intel_batchbuffer.c
index 4c99dcde23..e38f10ebc6 100644
--- a/src/mesa/drivers/dri/intel/intel_batchbuffer.c
+++ b/src/mesa/drivers/dri/intel/intel_batchbuffer.c
@@ -104,7 +104,8 @@ do_flush_locked(struct intel_batchbuffer *batch, GLuint used)
    batch->map = NULL;
    batch->ptr = NULL;
 
-   dri_bo_exec(batch->buf, used, NULL, 0, (x_off & 0xffff) | (y_off << 16));
+   if (!intel->no_hw)
+      dri_bo_exec(batch->buf, used, NULL, 0, (x_off & 0xffff) | (y_off << 16));
 
    if (INTEL_DEBUG & DEBUG_BATCH) {
       dri_bo_map(batch->buf, GL_FALSE);
-- 
cgit v1.2.3


From d790564f9452d6fa0378346a85c792aa346c1a57 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Thu, 25 Feb 2010 15:22:20 -0800
Subject: i965: Fix the SNB VE valid bit.

So, when the docs say that 0 means enabled now?  That's a lie.
---
 src/mesa/drivers/dri/i965/brw_defines.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h
index 76ae17c96a..bb1b5f5ef0 100644
--- a/src/mesa/drivers/dri/i965/brw_defines.h
+++ b/src/mesa/drivers/dri/i965/brw_defines.h
@@ -806,7 +806,7 @@
 # define GEN6_VE0_INDEX_SHIFT		26
 # define BRW_VE0_FORMAT_SHIFT		16
 # define BRW_VE0_VALID			(1 << 26)
-# define GEN6_VE0_VALID			(0 << 25)
+# define GEN6_VE0_VALID			(1 << 25)
 # define BRW_VE0_SRC_OFFSET_SHIFT	0
 # define BRW_VE1_COMPONENT_NOSTORE	0
 # define BRW_VE1_COMPONENT_STORE_SRC	1
-- 
cgit v1.2.3


From 1d7aec053b061caef928cfffc786660603d5f14c Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Thu, 25 Feb 2010 15:23:13 -0800
Subject: i965: Lump SNB in with Ironlake for bigger VUEs.

This gets the VS to the point of accepting vertices.  \o/
---
 src/mesa/drivers/dri/i965/brw_vs_emit.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_vs_emit.c b/src/mesa/drivers/dri/i965/brw_vs_emit.c
index b6e5f945eb..4e3338293b 100644
--- a/src/mesa/drivers/dri/i965/brw_vs_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_vs_emit.c
@@ -279,7 +279,7 @@ static void brw_vs_alloc_regs( struct brw_vs_compile *c )
     */
    attributes_in_vue = MAX2(c->nr_outputs, c->nr_inputs);
 
-   if (intel->is_ironlake)
+   if (intel->is_ironlake || intel->gen >= 6)
        c->prog_data.urb_entry_size = (attributes_in_vue + 6 + 3) / 4;
    else
        c->prog_data.urb_entry_size = (attributes_in_vue + 2 + 3) / 4;
@@ -1273,7 +1273,7 @@ static void emit_vertex_write( struct brw_vs_compile *c)
    brw_set_access_mode(p, BRW_ALIGN_1);
    brw_MOV(p, offset(m0, 2), ndc);
 
-   if (intel->is_ironlake) {
+   if (intel->is_ironlake || intel->gen >= 6) {
        /* There are 20 DWs (D0-D19) in VUE vertex header on Ironlake */
        brw_MOV(p, offset(m0, 3), pos); /* a portion of vertex header */
        /* m4, m5 contain the distances from vertex to the user clip planeXXX. 
-- 
cgit v1.2.3


From 54ea39f768871eb10286b195e1cd77f757c99752 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Thu, 25 Feb 2010 16:25:17 -0800
Subject: i965: Don't set a nonexistent enable bit in several SNB state
 pointers.

The modify bit is now usually in the instruction header.  The
exception is CC state pointers.
---
 src/mesa/drivers/dri/i965/gen6_sampler_state.c  | 2 +-
 src/mesa/drivers/dri/i965/gen6_scissor_state.c  | 2 +-
 src/mesa/drivers/dri/i965/gen6_viewport_state.c | 6 +++---
 3 files changed, 5 insertions(+), 5 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/gen6_sampler_state.c b/src/mesa/drivers/dri/i965/gen6_sampler_state.c
index 641d8859b3..f5d537b1cf 100644
--- a/src/mesa/drivers/dri/i965/gen6_sampler_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_sampler_state.c
@@ -47,7 +47,7 @@ upload_sampler_state_pointers(struct brw_context *brw)
    OUT_BATCH(0); /* VS */
    OUT_BATCH(0); /* GS */
    if (brw->wm.sampler_bo)
-      OUT_RELOC(brw->wm.sampler_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 1);
+      OUT_RELOC(brw->wm.sampler_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0);
    else
       OUT_BATCH(0);
 
diff --git a/src/mesa/drivers/dri/i965/gen6_scissor_state.c b/src/mesa/drivers/dri/i965/gen6_scissor_state.c
index 2d36f0056d..81ebbf4ddf 100644
--- a/src/mesa/drivers/dri/i965/gen6_scissor_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_scissor_state.c
@@ -85,7 +85,7 @@ static void upload_scissor_state_pointers(struct brw_context *brw)
 
    BEGIN_BATCH(2);
    OUT_BATCH(CMD_3D_SCISSOR_STATE_POINTERS << 16 | (2 - 2));
-   OUT_RELOC(brw->sf.state_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 1);
+   OUT_RELOC(brw->sf.state_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0);
    ADVANCE_BATCH();
 
    intel_batchbuffer_emit_mi_flush(intel->batch);
diff --git a/src/mesa/drivers/dri/i965/gen6_viewport_state.c b/src/mesa/drivers/dri/i965/gen6_viewport_state.c
index 13d2fc1b42..df3cbfb224 100644
--- a/src/mesa/drivers/dri/i965/gen6_viewport_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_viewport_state.c
@@ -154,9 +154,9 @@ static void upload_viewport_state_pointers(struct brw_context *brw)
 	     GEN6_CC_VIEWPORT_MODIFY |
 	     GEN6_SF_VIEWPORT_MODIFY |
 	     GEN6_CLIP_VIEWPORT_MODIFY);
-   OUT_RELOC(brw->clip.vp_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 1);
-   OUT_RELOC(brw->sf.vp_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 1);
-   OUT_RELOC(brw->cc.vp_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 1);
+   OUT_RELOC(brw->clip.vp_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0);
+   OUT_RELOC(brw->sf.vp_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0);
+   OUT_RELOC(brw->cc.vp_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0);
    ADVANCE_BATCH();
 
    intel_batchbuffer_emit_mi_flush(intel->batch);
-- 
cgit v1.2.3


From c8e5100a3910fd9b36d4424ef94c0581982f0b1a Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Thu, 25 Feb 2010 17:58:04 -0800
Subject: i965: Fix up the VUE handling for SNB, and hopefully clarify
 comments.

---
 src/mesa/drivers/dri/i965/brw_vs_emit.c | 74 ++++++++++++++++++++++-----------
 1 file changed, 49 insertions(+), 25 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_vs_emit.c b/src/mesa/drivers/dri/i965/brw_vs_emit.c
index 4e3338293b..e0be3cc6e3 100644
--- a/src/mesa/drivers/dri/i965/brw_vs_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_vs_emit.c
@@ -180,10 +180,12 @@ static void brw_vs_alloc_regs( struct brw_vs_compile *c )
    c->first_output = reg;
    c->first_overflow_output = 0;
 
-   if (intel->is_ironlake)
-       mrf = 8;
+   if (intel->gen >= 6)
+      mrf = 6;
+   else if (intel->is_ironlake)
+      mrf = 8;
    else
-       mrf = 4;
+      mrf = 4;
 
    for (i = 0; i < VERT_RESULT_MAX; i++) {
       if (c->prog_data.outputs_written & BITFIELD64_BIT(i)) {
@@ -1195,7 +1197,7 @@ static void emit_vertex_write( struct brw_vs_compile *c)
    struct brw_reg pos = c->regs[PROGRAM_OUTPUT][VERT_RESULT_HPOS];
    struct brw_reg ndc;
    int eot;
-   GLuint len_vertext_header = 2;
+   GLuint len_vertex_header = 2;
 
    if (c->key.copy_edgeflag) {
       brw_MOV(p, 
@@ -1203,12 +1205,14 @@ static void emit_vertex_write( struct brw_vs_compile *c)
 	      get_reg(c, PROGRAM_INPUT, VERT_ATTRIB_EDGEFLAG));
    }
 
-   /* Build ndc coords */
-   ndc = get_tmp(c);
-   /* ndc = 1.0 / pos.w */
-   emit_math1(c, BRW_MATH_FUNCTION_INV, ndc, brw_swizzle1(pos, 3), BRW_MATH_PRECISION_FULL);
-   /* ndc.xyz = pos * ndc */
-   brw_MUL(p, brw_writemask(ndc, WRITEMASK_XYZ), pos, ndc);
+   if (intel->gen < 6) {
+      /* Build ndc coords */
+      ndc = get_tmp(c);
+      /* ndc = 1.0 / pos.w */
+      emit_math1(c, BRW_MATH_FUNCTION_INV, ndc, brw_swizzle1(pos, 3), BRW_MATH_PRECISION_FULL);
+      /* ndc.xyz = pos * ndc */
+      brw_MUL(p, brw_writemask(ndc, WRITEMASK_XYZ), pos, ndc);
+   }
 
    /* Update the header for point size, user clipping flags, and -ve rhw
     * workaround.
@@ -1271,21 +1275,41 @@ static void emit_vertex_write( struct brw_vs_compile *c)
     * of zeros followed by two sets of NDC coordinates:
     */
    brw_set_access_mode(p, BRW_ALIGN_1);
-   brw_MOV(p, offset(m0, 2), ndc);
-
-   if (intel->is_ironlake || intel->gen >= 6) {
-       /* There are 20 DWs (D0-D19) in VUE vertex header on Ironlake */
-       brw_MOV(p, offset(m0, 3), pos); /* a portion of vertex header */
-       /* m4, m5 contain the distances from vertex to the user clip planeXXX. 
-        * Seems it is useless for us.
-        * m6 is used for aligning, so that the remainder of vertex element is 
-        * reg-aligned.
-        */
-       brw_MOV(p, offset(m0, 7), pos); /* the remainder of vertex element */
-       len_vertext_header = 6;
+
+   if (intel->gen >= 6) {
+      /* There are 16 DWs (D0-D15) in VUE header on Sandybridge:
+       * dword 0-3 (m1) of the header is indices, point width, clip flags.
+       * dword 4-7 (m2) is the 4D space position
+       * dword 8-15 (m3,m4) of the vertex header is the user clip distance.
+       * m5 is the first vertex data we fill, which is the vertex position.
+       */
+      brw_MOV(p, offset(m0, 2), pos);
+      brw_MOV(p, offset(m0, 5), pos);
+      len_vertex_header = 4;
+   } else if (intel->is_ironlake) {
+      /* There are 20 DWs (D0-D19) in VUE header on Ironlake:
+       * dword 0-3 (m1) of the header is indices, point width, clip flags.
+       * dword 4-7 (m2) is the ndc position (set above)
+       * dword 8-11 (m3) of the vertex header is the 4D space position
+       * dword 12-19 (m4,m5) of the vertex header is the user clip distance.
+       * m6 is a pad so that the vertex element data is aligned
+       * m7 is the first vertex data we fill, which is the vertex position.
+       */
+      brw_MOV(p, offset(m0, 2), ndc);
+      brw_MOV(p, offset(m0, 3), pos);
+      brw_MOV(p, offset(m0, 7), pos);
+      len_vertex_header = 6;
    } else {
-       brw_MOV(p, offset(m0, 3), pos);
-       len_vertext_header = 2;
+      /* There are 8 dwords in VUE header pre-Ironlake:
+       * dword 0-3 (m1) is indices, point width, clip flags.
+       * dword 4-7 (m2) is ndc position (set above)
+       *
+       * dword 8-11 (m3) is the first vertex data, which we always have be the
+       * vertex position.
+       */
+      brw_MOV(p, offset(m0, 2), ndc);
+      brw_MOV(p, offset(m0, 3), pos);
+      len_vertex_header = 2;
    }
 
    eot = (c->first_overflow_output == 0);
@@ -1296,7 +1320,7 @@ static void emit_vertex_write( struct brw_vs_compile *c)
 		 c->r0,		/* src */
 		 0,		/* allocate */
 		 1,		/* used */
-		 MIN2(c->nr_outputs + 1 + len_vertext_header, (BRW_MAX_MRF-1)), /* msg len */
+		 MIN2(c->nr_outputs + 1 + len_vertex_header, (BRW_MAX_MRF-1)), /* msg len */
 		 0,		/* response len */
 		 eot, 		/* eot */
 		 eot, 		/* writes complete */
-- 
cgit v1.2.3


From 839e6bd8b90a124e88020d54ded46460b2a3bc2d Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Thu, 25 Feb 2010 18:35:08 -0800
Subject: i965: Try to hook up the Sandybridge URB_WRITE SEND message.

My units still hang when doing this if the VS is enabled.
---
 src/mesa/drivers/dri/i965/brw_eu_emit.c | 32 +++++++++++++++++++++++++-------
 1 file changed, 25 insertions(+), 7 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_eu_emit.c b/src/mesa/drivers/dri/i965/brw_eu_emit.c
index 2d55299ddb..f69d529613 100644
--- a/src/mesa/drivers/dri/i965/brw_eu_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_eu_emit.c
@@ -102,8 +102,6 @@ static void brw_set_dest( struct brw_instruction *insn,
 static void brw_set_src0( struct brw_instruction *insn,
                           struct brw_reg reg )
 {
-   assert(reg.file != BRW_MESSAGE_REGISTER_FILE);
-
    if (reg.type != BRW_ARCHITECTURE_REGISTER_FILE)
       assert(reg.nr < 128);
 
@@ -323,7 +321,7 @@ static void brw_set_urb_message( struct brw_context *brw,
     struct intel_context *intel = &brw->intel;
     brw_set_src1(insn, brw_imm_d(0));
 
-    if (intel->is_ironlake) {
+    if (intel->is_ironlake || intel->gen >= 6) {
         insn->bits3.urb_igdng.opcode = 0;	/* ? */
         insn->bits3.urb_igdng.offset = offset;
         insn->bits3.urb_igdng.swizzle_control = swizzle_control;
@@ -334,8 +332,16 @@ static void brw_set_urb_message( struct brw_context *brw,
         insn->bits3.urb_igdng.response_length = response_length;
         insn->bits3.urb_igdng.msg_length = msg_length;
         insn->bits3.urb_igdng.end_of_thread = end_of_thread;
-        insn->bits2.send_igdng.sfid = BRW_MESSAGE_TARGET_URB;
-        insn->bits2.send_igdng.end_of_thread = end_of_thread;
+	if (intel->gen >= 6) {
+	   /* For SNB, the SFID bits moved to the condmod bits, and
+	    * EOT stayed in bits3 above.  Does the EOT bit setting
+	    * below on Ironlake even do anything?
+	    */
+	   insn->header.destreg__conditionalmod = BRW_MESSAGE_TARGET_URB;
+	} else {
+	   insn->bits2.send_igdng.sfid = BRW_MESSAGE_TARGET_URB;
+	   insn->bits2.send_igdng.end_of_thread = end_of_thread;
+	}
     } else {
         insn->bits3.urb.opcode = 0;	/* ? */
         insn->bits3.urb.offset = offset;
@@ -1391,7 +1397,18 @@ void brw_urb_WRITE(struct brw_compile *p,
 		   GLuint offset,
 		   GLuint swizzle)
 {
-   struct brw_instruction *insn = next_insn(p, BRW_OPCODE_SEND);
+   struct intel_context *intel = &p->brw->intel;
+   struct brw_instruction *insn;
+
+   /* Sandybridge doesn't have the implied move for SENDs,
+    * and the first message register index comes from src0.
+    */
+   if (intel->gen >= 6) {
+      brw_MOV(p, brw_message_reg(msg_reg_nr), src0);
+      src0 = brw_message_reg(msg_reg_nr);
+   }
+
+   insn = next_insn(p, BRW_OPCODE_SEND);
 
    assert(msg_length < BRW_MAX_MRF);
 
@@ -1399,7 +1416,8 @@ void brw_urb_WRITE(struct brw_compile *p,
    brw_set_src0(insn, src0);
    brw_set_src1(insn, brw_imm_d(0));
 
-   insn->header.destreg__conditionalmod = msg_reg_nr;
+   if (intel->gen < 6)
+      insn->header.destreg__conditionalmod = msg_reg_nr;
 
    brw_set_urb_message(p->brw,
 		       insn,
-- 
cgit v1.2.3


From a858bc393ec431f836bea275edb4437fe41adc75 Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Thu, 25 Feb 2010 19:03:24 -0700
Subject: mesa: added renderbuffer->_BaseFormat assertion

---
 src/mesa/main/renderbuffer.c | 1 +
 1 file changed, 1 insertion(+)

(limited to 'src/mesa')

diff --git a/src/mesa/main/renderbuffer.c b/src/mesa/main/renderbuffer.c
index c44db255d6..4276b23b69 100644
--- a/src/mesa/main/renderbuffer.c
+++ b/src/mesa/main/renderbuffer.c
@@ -1143,6 +1143,7 @@ _mesa_soft_renderbuffer_storage(GLcontext *ctx, struct gl_renderbuffer *rb,
    rb->Width = width;
    rb->Height = height;
    rb->_BaseFormat = _mesa_base_fbo_format(ctx, rb->InternalFormat);
+   ASSERT(rb->_BaseFormat);
 
    return GL_TRUE;
 }
-- 
cgit v1.2.3


From a8dafe713f4b45fd09c678e1ca9fbe4eab16f8be Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Thu, 25 Feb 2010 19:03:55 -0700
Subject: mesa: remove redundant call to _mesa_base_fbo_format()

---
 src/mesa/main/fbobject.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
index 4ce3998812..14c533e0d4 100644
--- a/src/mesa/main/fbobject.c
+++ b/src/mesa/main/fbobject.c
@@ -987,7 +987,7 @@ renderbuffer_storage(GLenum target, GLenum internalFormat,
       assert(rb->Width == (GLuint) width);
       assert(rb->Height == (GLuint) height);
       rb->InternalFormat = internalFormat;
-      rb->_BaseFormat = _mesa_base_fbo_format(ctx, internalFormat);
+      rb->_BaseFormat = baseFormat;
       assert(rb->_BaseFormat != 0);
    }
    else {
-- 
cgit v1.2.3


From 2c1619869a9af1420e0a23b65e31d40a694b7f46 Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Thu, 25 Feb 2010 19:04:21 -0700
Subject: mesa: added cases for texture array targets

---
 src/mesa/shader/prog_print.c | 2 ++
 1 file changed, 2 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/shader/prog_print.c b/src/mesa/shader/prog_print.c
index 765aa003b7..f66c240ce7 100644
--- a/src/mesa/shader/prog_print.c
+++ b/src/mesa/shader/prog_print.c
@@ -649,6 +649,8 @@ _mesa_fprint_instruction_opt(FILE *f,
       case TEXTURE_3D_INDEX:   fprintf(f, "3D");    break;
       case TEXTURE_CUBE_INDEX: fprintf(f, "CUBE");  break;
       case TEXTURE_RECT_INDEX: fprintf(f, "RECT");  break;
+      case TEXTURE_1D_ARRAY_INDEX: fprintf(f, "1D_ARRAY"); break;
+      case TEXTURE_2D_ARRAY_INDEX: fprintf(f, "2D_ARRAY"); break;
       default:
          ;
       }
-- 
cgit v1.2.3


From ac498f2dce6a0d4e78ed2a78b567d61fe6569970 Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Thu, 25 Feb 2010 19:05:11 -0700
Subject: mesa: added texture array targets in sizeof_glsl_type()

---
 src/mesa/shader/shader_api.c | 4 ++++
 1 file changed, 4 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/shader/shader_api.c b/src/mesa/shader/shader_api.c
index d0d0575b0b..940fe2d03c 100644
--- a/src/mesa/shader/shader_api.c
+++ b/src/mesa/shader/shader_api.c
@@ -769,6 +769,8 @@ sizeof_glsl_type(GLenum type)
    case GL_SAMPLER_2D_SHADOW:
    case GL_SAMPLER_2D_RECT_ARB:
    case GL_SAMPLER_2D_RECT_SHADOW_ARB:
+   case GL_SAMPLER_1D_ARRAY_EXT:
+   case GL_SAMPLER_2D_ARRAY_EXT:
    case GL_SAMPLER_1D_ARRAY_SHADOW_EXT:
    case GL_SAMPLER_2D_ARRAY_SHADOW_EXT:
    case GL_SAMPLER_CUBE_SHADOW_EXT:
@@ -848,6 +850,8 @@ is_sampler_type(GLenum type)
    case GL_SAMPLER_2D_RECT_SHADOW_ARB:
    case GL_SAMPLER_1D_ARRAY_EXT:
    case GL_SAMPLER_2D_ARRAY_EXT:
+   case GL_SAMPLER_1D_ARRAY_SHADOW_EXT:
+   case GL_SAMPLER_2D_ARRAY_SHADOW_EXT:
       return GL_TRUE;
    default:
       return GL_FALSE;
-- 
cgit v1.2.3


From 58ab56d32308e36f331294047e11c3e0b4b73cde Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Thu, 25 Feb 2010 19:06:27 -0700
Subject: swrast: the only wrap mode for selecting texture array slices is
 clamp

---
 src/mesa/swrast/s_texfilter.c | 29 ++++++++++++++++++++---------
 1 file changed, 20 insertions(+), 9 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/swrast/s_texfilter.c b/src/mesa/swrast/s_texfilter.c
index ff7deecc39..478fb1557f 100644
--- a/src/mesa/swrast/s_texfilter.c
+++ b/src/mesa/swrast/s_texfilter.c
@@ -474,6 +474,18 @@ clamp_rect_coord_linear(GLenum wrapMode, GLfloat coord, GLint max,
 }
 
 
+/**
+ * Compute slice/image to use for 1D or 2D array texture.
+ */
+static INLINE GLint
+tex_array_slice(GLfloat coord, GLsizei size)
+{
+   GLint slice = IFLOOR(coord);
+   slice = CLAMP(slice, 0, size - 1);
+   return slice;
+}
+
+
 /**
  * Compute nearest integer texcoords for given texobj and coordinate.
  */
@@ -506,13 +518,13 @@ nearest_texcoord(const struct gl_texture_object *texObj,
       break;
    case GL_TEXTURE_1D_ARRAY_EXT:
       *i = nearest_texel_location(texObj->WrapS, img, width, texcoord[0]);
-      *j = clamp_rect_coord_nearest(texObj->WrapT, texcoord[1], height);
+      *j = tex_array_slice(texcoord[1], height);
       *k = 0;
       break;
    case GL_TEXTURE_2D_ARRAY_EXT:
       *i = nearest_texel_location(texObj->WrapS, img, width, texcoord[0]);
       *j = nearest_texel_location(texObj->WrapT, img, height, texcoord[1]);
-      *k = clamp_rect_coord_nearest(texObj->WrapR, texcoord[2], depth);
+      *k = tex_array_slice(texcoord[2], depth);
       break;
    default:
       *i = *j = *k = 0;
@@ -556,7 +568,7 @@ linear_texcoord(const struct gl_texture_object *texObj,
    case GL_TEXTURE_1D_ARRAY_EXT:
       linear_texel_locations(texObj->WrapS, img, width,
                              texcoord[0], i0, i1, wi);
-      *j0 = clamp_rect_coord_nearest(texObj->WrapT, texcoord[1], height);
+      *j0 = tex_array_slice(texcoord[1], height);
       *j1 = *j0;
       *slice = 0;
       break;
@@ -566,7 +578,7 @@ linear_texcoord(const struct gl_texture_object *texObj,
                              texcoord[0], i0, i1, wi);
       linear_texel_locations(texObj->WrapT, img, height,
                              texcoord[1], j0, j1, wj);
-      *slice = clamp_rect_coord_nearest(texObj->WrapR, texcoord[2], depth);
+      *slice = tex_array_slice(texcoord[2], depth);
       break;
 
    default:
@@ -2269,7 +2281,6 @@ sample_lambda_rect(GLcontext *ctx,
 }
 
 
-
 /**********************************************************************/
 /*                2D Texture Array Sampling Functions                 */
 /**********************************************************************/
@@ -2293,7 +2304,7 @@ sample_2d_array_nearest(GLcontext *ctx,
 
    i = nearest_texel_location(tObj->WrapS, img, width, texcoord[0]);
    j = nearest_texel_location(tObj->WrapT, img, height, texcoord[1]);
-   array = clamp_rect_coord_nearest(tObj->WrapR, texcoord[2], depth);
+   array = tex_array_slice(texcoord[2], depth);
 
    if (i < 0 || i >= (GLint) img->Width ||
        j < 0 || j >= (GLint) img->Height ||
@@ -2328,7 +2339,7 @@ sample_2d_array_linear(GLcontext *ctx,
 
    linear_texel_locations(tObj->WrapS, img, width,  texcoord[0], &i0, &i1, &a);
    linear_texel_locations(tObj->WrapT, img, height, texcoord[1], &j0, &j1, &b);
-   array = clamp_rect_coord_nearest(tObj->WrapR, texcoord[2], depth);
+   array = tex_array_slice(texcoord[2], depth);
 
    if (array < 0 || array >= depth) {
       COPY_4V(rgba, tObj->BorderColor.f);
@@ -2601,7 +2612,7 @@ sample_1d_array_nearest(GLcontext *ctx,
    (void) ctx;
 
    i = nearest_texel_location(tObj->WrapS, img, width, texcoord[0]);
-   array = clamp_rect_coord_nearest(tObj->WrapT, texcoord[1], height);
+   array = tex_array_slice(texcoord[1], height);
 
    if (i < 0 || i >= (GLint) img->Width ||
        array < 0 || array >= (GLint) img->Height) {
@@ -2633,7 +2644,7 @@ sample_1d_array_linear(GLcontext *ctx,
    GLfloat t0[4], t1[4];
 
    linear_texel_locations(tObj->WrapS, img, width, texcoord[0], &i0, &i1, &a);
-   array = clamp_rect_coord_nearest(tObj->WrapT, texcoord[1], height);
+   array = tex_array_slice(texcoord[1], height);
 
    if (img->Border) {
       i0 += img->Border;
-- 
cgit v1.2.3


From 1edd444c2e9afadb56df55682ae606b5cefd811c Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Thu, 25 Feb 2010 19:08:02 -0700
Subject: mesa: added new extension flag for GL_EXT_texture_array

---
 src/mesa/main/extensions.c | 1 +
 src/mesa/main/mtypes.h     | 1 +
 2 files changed, 2 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c
index 2c1120e19f..44190c7732 100644
--- a/src/mesa/main/extensions.c
+++ b/src/mesa/main/extensions.c
@@ -131,6 +131,7 @@ static const struct {
    { ON,  "GL_EXT_subtexture",                 F(EXT_subtexture) },
    { ON,  "GL_EXT_texture",                    F(EXT_texture) },
    { ON,  "GL_EXT_texture3D",                  F(EXT_texture3D) },
+   { OFF, "GL_EXT_texture_array",              F(EXT_texture_array) },
    { OFF, "GL_EXT_texture_compression_s3tc",   F(EXT_texture_compression_s3tc) },
    { OFF, "GL_EXT_texture_cube_map",           F(ARB_texture_cube_map) },
    { ON,  "GL_EXT_texture_edge_clamp",         F(SGIS_texture_edge_clamp) },
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 20035417b9..e0ee3c9f5d 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -2474,6 +2474,7 @@ struct gl_extensions
    GLboolean EXT_texture;
    GLboolean EXT_texture_object;
    GLboolean EXT_texture3D;
+   GLboolean EXT_texture_array;
    GLboolean EXT_texture_compression_s3tc;
    GLboolean EXT_texture_env_add;
    GLboolean EXT_texture_env_combine;
-- 
cgit v1.2.3


From 1f2b495b5567897acbd236f302a1e2b9b5faec65 Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Thu, 25 Feb 2010 19:45:45 -0700
Subject: glsl: implement support for GL_EXT_texture_array

GL_EXT_texture_array is different from the existing GL_MESA_texture_array
support in that the former is only supported for GLSL, not fixed-function.

The shadow compare versions of the sampler functions haven't been tested
yet.  The non-shadow versions have been tested with a new piglit test.
---
 src/glsl/cl/sl_cl_parse.c                          | 31 +++++++++
 .../shader/slang/library/slang_common_builtin.gc   | 12 ++++
 .../shader/slang/library/slang_fragment_builtin.gc | 64 ++++++++++++++++++
 .../shader/slang/library/slang_vertex_builtin.gc   | 20 ++++++
 src/mesa/shader/slang/slang_codegen.c              | 76 ++++++++++++++--------
 src/mesa/shader/slang/slang_compile.c              | 44 +++++++++----
 src/mesa/shader/slang/slang_print.c                | 28 ++++----
 src/mesa/shader/slang/slang_storage.c              | 21 +++---
 src/mesa/shader/slang/slang_typeinfo.c             | 44 ++++++++-----
 src/mesa/shader/slang/slang_typeinfo.h             | 20 +++---
 10 files changed, 277 insertions(+), 83 deletions(-)

(limited to 'src/mesa')

diff --git a/src/glsl/cl/sl_cl_parse.c b/src/glsl/cl/sl_cl_parse.c
index 9a20509fc6..771bdfd082 100644
--- a/src/glsl/cl/sl_cl_parse.c
+++ b/src/glsl/cl/sl_cl_parse.c
@@ -161,6 +161,12 @@
 #define TYPE_SPECIFIER_MAT34                       30
 #define TYPE_SPECIFIER_MAT43                       31
 
+/* GL_EXT_texture_array */
+#define TYPE_SPECIFIER_SAMPLER_1D_ARRAY            32
+#define TYPE_SPECIFIER_SAMPLER_2D_ARRAY            33
+#define TYPE_SPECIFIER_SAMPLER_1D_ARRAY_SHADOW     34
+#define TYPE_SPECIFIER_SAMPLER_2D_ARRAY_SHADOW     35
+
 /* type specifier array */
 #define TYPE_SPECIFIER_NONARRAY                    0
 #define TYPE_SPECIFIER_ARRAY                       1
@@ -281,6 +287,10 @@ struct parse_dict {
    int sampler2DShadow;
    int sampler2DRect;
    int sampler2DRectShadow;
+   int sampler1DArray;
+   int sampler2DArray;
+   int sampler1DArrayShadow;
+   int sampler2DArrayShadow;
 
    int invariant;
 
@@ -1028,6 +1038,15 @@ _parse_type_specifier_nonarray(struct parse_context *ctx,
       _update(ctx, e, TYPE_SPECIFIER_SAMPLER2DRECT);
    } else if (id == ctx->dict.sampler2DRectShadow) {
       _update(ctx, e, TYPE_SPECIFIER_SAMPLER2DRECTSHADOW);
+   } else if (id == ctx->dict.sampler1DArray) {
+      _update(ctx, e, TYPE_SPECIFIER_SAMPLER_1D_ARRAY);
+   } else if (id == ctx->dict.sampler2DArray) {
+      /* XXX check for GL_EXT_texture_array */
+      _update(ctx, e, TYPE_SPECIFIER_SAMPLER_2D_ARRAY);
+   } else if (id == ctx->dict.sampler1DArrayShadow) {
+      _update(ctx, e, TYPE_SPECIFIER_SAMPLER_1D_ARRAY_SHADOW);
+   } else if (id == ctx->dict.sampler2DArrayShadow) {
+      _update(ctx, e, TYPE_SPECIFIER_SAMPLER_2D_ARRAY_SHADOW);
    } else if (_parse_identifier(ctx, &p) == 0) {
       _update(ctx, e, TYPE_SPECIFIER_TYPENAME);
       *ps = p;
@@ -1944,6 +1963,14 @@ _parse_prectype(struct parse_context *ctx,
       type = TYPE_SPECIFIER_SAMPLER2DRECT;
    } else if (id == ctx->dict.sampler2DRectShadow) {
       type = TYPE_SPECIFIER_SAMPLER2DRECTSHADOW;
+   } else if (id == ctx->dict.sampler1DArray) {
+      type = TYPE_SPECIFIER_SAMPLER_1D_ARRAY;
+   } else if (id == ctx->dict.sampler2DArray) {
+      type = TYPE_SPECIFIER_SAMPLER_2D_ARRAY;
+   } else if (id == ctx->dict.sampler1DArrayShadow) {
+      type = TYPE_SPECIFIER_SAMPLER_1D_ARRAY_SHADOW;
+   } else if (id == ctx->dict.sampler2DArrayShadow) {
+      type = TYPE_SPECIFIER_SAMPLER_2D_ARRAY_SHADOW;
    } else {
       return -1;
    }
@@ -2886,6 +2913,10 @@ sl_cl_compile(struct sl_pp_context *context,
    ADD_NAME(ctx, sampler2DShadow);
    ADD_NAME(ctx, sampler2DRect);
    ADD_NAME(ctx, sampler2DRectShadow);
+   ADD_NAME(ctx, sampler1DArray);
+   ADD_NAME(ctx, sampler2DArray);
+   ADD_NAME(ctx, sampler1DArrayShadow);
+   ADD_NAME(ctx, sampler2DArrayShadow);
 
    ADD_NAME(ctx, invariant);
 
diff --git a/src/mesa/shader/slang/library/slang_common_builtin.gc b/src/mesa/shader/slang/library/slang_common_builtin.gc
index 56de47ee8d..8b7771c284 100644
--- a/src/mesa/shader/slang/library/slang_common_builtin.gc
+++ b/src/mesa/shader/slang/library/slang_common_builtin.gc
@@ -1769,6 +1769,18 @@ vec4 shadow2DRectProj(const sampler2DRectShadow sampler, const vec4 coord)
 
 
 
+//// GL_EXT_texture_array
+vec4 texture1DArray(const sampler1DArray sampler, const vec2 coord)
+{
+   __asm vec4_tex_1d_array __retVal, sampler, coord;
+}
+
+vec4 texture2DArray(const sampler2DArray sampler, const vec3 coord)
+{
+   __asm vec4_tex_2d_array __retVal, sampler, coord;
+}
+
+
 //
 // 8.9 Noise Functions
 //
diff --git a/src/mesa/shader/slang/library/slang_fragment_builtin.gc b/src/mesa/shader/slang/library/slang_fragment_builtin.gc
index 2e063e6416..54a80ea0e0 100644
--- a/src/mesa/shader/slang/library/slang_fragment_builtin.gc
+++ b/src/mesa/shader/slang/library/slang_fragment_builtin.gc
@@ -165,6 +165,70 @@ vec4 shadow2DProj(const sampler2DShadow sampler, const vec4 coord, const float b
 
 
 
+//// GL_EXT_texture_array
+
+vec4 texture1DArray(const sampler1DArray sampler, const vec2 coord)
+{
+   vec4 coord4;
+   coord4.xy = coord;
+   __asm vec4_tex_1d_array __retVal, sampler, coord4;
+}
+
+vec4 texture1DArray(const sampler1DArray sampler, const vec2 coord, const float bias)
+{
+   vec4 coord4;
+   coord4.xy = coord;
+   coord4.w = bias;
+   __asm vec4_tex_1d_array_bias __retVal, sampler, coord4;
+}
+
+vec4 texure2DArray(const sampler2DArray sampler, const vec3 coord)
+{
+   vec4 coord4;
+   coord4.xyz = coord;
+   __asm vec4_tex_2d_array __retVal, sampler, coord4;
+}
+
+vec4 texture2DArray(const sampler2DArray sampler, const vec3 coord, const float bias)
+{
+   vec4 coord4;
+   coord4.xyz = coord;
+   coord4.w = bias;
+   __asm vec4_tex_2d_array_bias __retVal, sampler, coord4;
+}
+
+vec4 shadow1DArray(const sampler1DArrayShadow sampler, const vec2 coord)
+{
+   vec4 coord4;
+   coord4.xy = coord;
+   __asm vec4_tex_1d_array_shadow __retVal, sampler, coord4;
+}
+
+vec4 shadow1DArray(const sampler1DArrayShadow sampler, const vec2 coord, const float bias)
+{
+   vec4 coord4;
+   coord4.xy = coord;
+   coord4.w = bias;
+   __asm vec4_tex_1d_array_bias_shadow __retVal, sampler, coord4;
+}
+
+vec4 shadow2DArray(const sampler2DArrayShadow sampler, const vec3 coord)
+{
+   vec4 coord4;
+   coord4.xyz = coord;
+   __asm vec4_tex_2d_array_shadow __retVal, sampler, coord4;
+}
+
+vec4 shadow2DArray(const sampler2DArrayShadow sampler, const vec3 coord, const float bias)
+{
+   vec4 coord4;
+   coord4.xyz = coord;
+   coord4.w = bias;
+   __asm vec4_tex_2d_array_bias_shadow __retVal, sampler, coord4;
+}
+
+
+
 //
 // 8.8 Fragment Processing Functions
 //
diff --git a/src/mesa/shader/slang/library/slang_vertex_builtin.gc b/src/mesa/shader/slang/library/slang_vertex_builtin.gc
index 9ad5f35425..0c67c2ef20 100644
--- a/src/mesa/shader/slang/library/slang_vertex_builtin.gc
+++ b/src/mesa/shader/slang/library/slang_vertex_builtin.gc
@@ -188,3 +188,23 @@ vec4 shadow2DProjLod(const sampler2DShadow sampler, const vec4 coord,
    __asm vec4_tex_2d_bias_shadow __retVal, sampler, pcoord;
 }
 
+
+//// GL_EXT_texture_array
+
+vec4 texture1DArrayLod(const sampler1DArray sampler, const vec2 coord, const float lod)
+{
+   vec4 coord4;
+   coord4.xy = coord;
+   coord4.w = lod;
+   __asm vec4_tex_1d_array_bias __retVal, sampler, coord4;
+}
+
+
+vec4 texture2DArrayLod(const sampler2DArray sampler, const vec3 coord, const float lod)
+{
+   vec4 coord4;
+   coord4.xyz = coord;
+   coord4.w = lod;
+   __asm vec4_tex_2d_array_bias __retVal, sampler, coord4;
+}
+
diff --git a/src/mesa/shader/slang/slang_codegen.c b/src/mesa/shader/slang/slang_codegen.c
index 6901b93d5d..adfea890b3 100644
--- a/src/mesa/shader/slang/slang_codegen.c
+++ b/src/mesa/shader/slang/slang_codegen.c
@@ -100,14 +100,18 @@ static GLboolean
 is_sampler_type(const slang_fully_specified_type *t)
 {
    switch (t->specifier.type) {
-   case SLANG_SPEC_SAMPLER1D:
-   case SLANG_SPEC_SAMPLER2D:
-   case SLANG_SPEC_SAMPLER3D:
-   case SLANG_SPEC_SAMPLERCUBE:
-   case SLANG_SPEC_SAMPLER1DSHADOW:
-   case SLANG_SPEC_SAMPLER2DSHADOW:
-   case SLANG_SPEC_SAMPLER2DRECT:
-   case SLANG_SPEC_SAMPLER2DRECTSHADOW:
+   case SLANG_SPEC_SAMPLER_1D:
+   case SLANG_SPEC_SAMPLER_2D:
+   case SLANG_SPEC_SAMPLER_3D:
+   case SLANG_SPEC_SAMPLER_CUBE:
+   case SLANG_SPEC_SAMPLER_1D_SHADOW:
+   case SLANG_SPEC_SAMPLER_2D_SHADOW:
+   case SLANG_SPEC_SAMPLER_RECT:
+   case SLANG_SPEC_SAMPLER_RECT_SHADOW:
+   case SLANG_SPEC_SAMPLER_1D_ARRAY:
+   case SLANG_SPEC_SAMPLER_2D_ARRAY:
+   case SLANG_SPEC_SAMPLER_1D_ARRAY_SHADOW:
+   case SLANG_SPEC_SAMPLER_2D_ARRAY_SHADOW:
       return GL_TRUE;
    default:
       return GL_FALSE;
@@ -222,14 +226,18 @@ _slang_sizeof_type_specifier(const slang_type_specifier *spec)
    case SLANG_SPEC_MAT43:
       sz = 4 * 4; /* 4 columns (regs) */
       break;
-   case SLANG_SPEC_SAMPLER1D:
-   case SLANG_SPEC_SAMPLER2D:
-   case SLANG_SPEC_SAMPLER3D:
-   case SLANG_SPEC_SAMPLERCUBE:
-   case SLANG_SPEC_SAMPLER1DSHADOW:
-   case SLANG_SPEC_SAMPLER2DSHADOW:
-   case SLANG_SPEC_SAMPLER2DRECT:
-   case SLANG_SPEC_SAMPLER2DRECTSHADOW:
+   case SLANG_SPEC_SAMPLER_1D:
+   case SLANG_SPEC_SAMPLER_2D:
+   case SLANG_SPEC_SAMPLER_3D:
+   case SLANG_SPEC_SAMPLER_CUBE:
+   case SLANG_SPEC_SAMPLER_1D_SHADOW:
+   case SLANG_SPEC_SAMPLER_2D_SHADOW:
+   case SLANG_SPEC_SAMPLER_RECT:
+   case SLANG_SPEC_SAMPLER_RECT_SHADOW:
+   case SLANG_SPEC_SAMPLER_1D_ARRAY:
+   case SLANG_SPEC_SAMPLER_2D_ARRAY:
+   case SLANG_SPEC_SAMPLER_1D_ARRAY_SHADOW:
+   case SLANG_SPEC_SAMPLER_2D_ARRAY_SHADOW:
       sz = 1; /* a sampler is basically just an integer index */
       break;
    case SLANG_SPEC_STRUCT:
@@ -310,22 +318,30 @@ static GLint
 sampler_to_texture_index(const slang_type_specifier_type type)
 {
    switch (type) {
-   case SLANG_SPEC_SAMPLER1D:
+   case SLANG_SPEC_SAMPLER_1D:
       return TEXTURE_1D_INDEX;
-   case SLANG_SPEC_SAMPLER2D:
+   case SLANG_SPEC_SAMPLER_2D:
       return TEXTURE_2D_INDEX;
-   case SLANG_SPEC_SAMPLER3D:
+   case SLANG_SPEC_SAMPLER_3D:
       return TEXTURE_3D_INDEX;
-   case SLANG_SPEC_SAMPLERCUBE:
+   case SLANG_SPEC_SAMPLER_CUBE:
       return TEXTURE_CUBE_INDEX;
-   case SLANG_SPEC_SAMPLER1DSHADOW:
+   case SLANG_SPEC_SAMPLER_1D_SHADOW:
       return TEXTURE_1D_INDEX; /* XXX fix */
-   case SLANG_SPEC_SAMPLER2DSHADOW:
+   case SLANG_SPEC_SAMPLER_2D_SHADOW:
       return TEXTURE_2D_INDEX; /* XXX fix */
-   case SLANG_SPEC_SAMPLER2DRECT:
+   case SLANG_SPEC_SAMPLER_RECT:
       return TEXTURE_RECT_INDEX;
-   case SLANG_SPEC_SAMPLER2DRECTSHADOW:
+   case SLANG_SPEC_SAMPLER_RECT_SHADOW:
       return TEXTURE_RECT_INDEX; /* XXX fix */
+   case SLANG_SPEC_SAMPLER_1D_ARRAY:
+      return TEXTURE_1D_ARRAY_INDEX;
+   case SLANG_SPEC_SAMPLER_2D_ARRAY:
+      return TEXTURE_2D_ARRAY_INDEX;
+   case SLANG_SPEC_SAMPLER_1D_ARRAY_SHADOW:
+      return TEXTURE_1D_ARRAY_INDEX;
+   case SLANG_SPEC_SAMPLER_2D_ARRAY_SHADOW:
+      return TEXTURE_2D_ARRAY_INDEX;
    default:
       return -1;
    }
@@ -453,6 +469,14 @@ static slang_asm_info AsmInfo[] = {
    { "vec4_tex_cube", IR_TEX, 1, 2 },      /* cubemap */
    { "vec4_tex_rect", IR_TEX, 1, 2 },      /* rectangle */
    { "vec4_tex_rect_bias", IR_TEX, 1, 2 }, /* rectangle w/ projection */
+   { "vec4_tex_1d_array", IR_TEX, 1, 2 },
+   { "vec4_tex_1d_array_bias", IR_TEXB, 1, 2 },
+   { "vec4_tex_1d_array_shadow", IR_TEX, 1, 2 },
+   { "vec4_tex_1d_array_bias_shadow", IR_TEXB, 1, 2 },
+   { "vec4_tex_2d_array", IR_TEX, 1, 2 },
+   { "vec4_tex_2d_array_bias", IR_TEXB, 1, 2 },
+   { "vec4_tex_2d_array_shadow", IR_TEX, 1, 2 },
+   { "vec4_tex_2d_array_bias_shadow", IR_TEXB, 1, 2 },
 
    /* texture / sampler but with shadow comparison */
    { "vec4_tex_1d_shadow", IR_TEX_SH, 1, 2 },
@@ -4923,8 +4947,8 @@ is_rect_sampler_spec(const slang_type_specifier *spec)
    while (spec->_array) {
       spec = spec->_array;
    }
-   return spec->type == SLANG_SPEC_SAMPLER2DRECT ||
-          spec->type == SLANG_SPEC_SAMPLER2DRECTSHADOW;
+   return spec->type == SLANG_SPEC_SAMPLER_RECT ||
+          spec->type == SLANG_SPEC_SAMPLER_RECT_SHADOW;
 }
 
 
diff --git a/src/mesa/shader/slang/slang_compile.c b/src/mesa/shader/slang/slang_compile.c
index 4280698cc9..b95c15fea6 100644
--- a/src/mesa/shader/slang/slang_compile.c
+++ b/src/mesa/shader/slang/slang_compile.c
@@ -55,7 +55,7 @@
 
 
 /** re-defined below, should be the same though */
-#define TYPE_SPECIFIER_COUNT 32
+#define TYPE_SPECIFIER_COUNT 36
 
 
 /**
@@ -742,13 +742,18 @@ parse_type_qualifier(slang_parse_ctx * C, slang_type_qualifier * qual)
 #define TYPE_SPECIFIER_MAT42 29
 #define TYPE_SPECIFIER_MAT34 30
 #define TYPE_SPECIFIER_MAT43 31
-#define TYPE_SPECIFIER_COUNT 32
+#define TYPE_SPECIFIER_SAMPLER_1D_ARRAY 32
+#define TYPE_SPECIFIER_SAMPLER_2D_ARRAY 33
+#define TYPE_SPECIFIER_SAMPLER_1D_ARRAY_SHADOW 34
+#define TYPE_SPECIFIER_SAMPLER_2D_ARRAY_SHADOW 35
+#define TYPE_SPECIFIER_COUNT 36
 
 static int
 parse_type_specifier(slang_parse_ctx * C, slang_output_ctx * O,
                      slang_type_specifier * spec)
 {
-   switch (*C->I++) {
+   int type = *C->I++;
+   switch (type) {
    case TYPE_SPECIFIER_VOID:
       spec->type = SLANG_SPEC_VOID;
       break;
@@ -816,28 +821,40 @@ parse_type_specifier(slang_parse_ctx * C, slang_output_ctx * O,
       spec->type = SLANG_SPEC_MAT43;
       break;
    case TYPE_SPECIFIER_SAMPLER1D:
-      spec->type = SLANG_SPEC_SAMPLER1D;
+      spec->type = SLANG_SPEC_SAMPLER_1D;
       break;
    case TYPE_SPECIFIER_SAMPLER2D:
-      spec->type = SLANG_SPEC_SAMPLER2D;
+      spec->type = SLANG_SPEC_SAMPLER_2D;
       break;
    case TYPE_SPECIFIER_SAMPLER3D:
-      spec->type = SLANG_SPEC_SAMPLER3D;
+      spec->type = SLANG_SPEC_SAMPLER_3D;
       break;
    case TYPE_SPECIFIER_SAMPLERCUBE:
-      spec->type = SLANG_SPEC_SAMPLERCUBE;
+      spec->type = SLANG_SPEC_SAMPLER_CUBE;
       break;
    case TYPE_SPECIFIER_SAMPLER2DRECT:
-      spec->type = SLANG_SPEC_SAMPLER2DRECT;
+      spec->type = SLANG_SPEC_SAMPLER_RECT;
       break;
    case TYPE_SPECIFIER_SAMPLER1DSHADOW:
-      spec->type = SLANG_SPEC_SAMPLER1DSHADOW;
+      spec->type = SLANG_SPEC_SAMPLER_1D_SHADOW;
       break;
    case TYPE_SPECIFIER_SAMPLER2DSHADOW:
-      spec->type = SLANG_SPEC_SAMPLER2DSHADOW;
+      spec->type = SLANG_SPEC_SAMPLER_2D_SHADOW;
       break;
    case TYPE_SPECIFIER_SAMPLER2DRECTSHADOW:
-      spec->type = SLANG_SPEC_SAMPLER2DRECTSHADOW;
+      spec->type = SLANG_SPEC_SAMPLER_RECT_SHADOW;
+      break;
+   case TYPE_SPECIFIER_SAMPLER_1D_ARRAY:
+      spec->type = SLANG_SPEC_SAMPLER_1D_ARRAY;
+      break;
+   case TYPE_SPECIFIER_SAMPLER_2D_ARRAY:
+      spec->type = SLANG_SPEC_SAMPLER_2D_ARRAY;
+      break;
+   case TYPE_SPECIFIER_SAMPLER_1D_ARRAY_SHADOW:
+      spec->type = SLANG_SPEC_SAMPLER_1D_ARRAY_SHADOW;
+      break;
+   case TYPE_SPECIFIER_SAMPLER_2D_ARRAY_SHADOW:
+      spec->type = SLANG_SPEC_SAMPLER_2D_ARRAY_SHADOW;
       break;
    case TYPE_SPECIFIER_STRUCT:
       spec->type = SLANG_SPEC_STRUCT;
@@ -2133,6 +2150,7 @@ parse_init_declarator(slang_parse_ctx * C, slang_output_ctx * O,
       var->type.qualifier = type->qualifier;
       var->type.centroid = type->centroid;
       var->type.precision = type->precision;
+      var->type.specifier = type->specifier;/*new*/
       var->type.variant = type->variant;
       var->type.layout = type->layout;
       var->type.array_len = type->array_len;
@@ -2441,6 +2459,10 @@ parse_default_precision(slang_parse_ctx * C, slang_output_ctx * O)
    case TYPE_SPECIFIER_SAMPLER2DSHADOW:
    case TYPE_SPECIFIER_SAMPLER2DRECT:
    case TYPE_SPECIFIER_SAMPLER2DRECTSHADOW:
+   case TYPE_SPECIFIER_SAMPLER_1D_ARRAY:
+   case TYPE_SPECIFIER_SAMPLER_2D_ARRAY:
+   case TYPE_SPECIFIER_SAMPLER_1D_ARRAY_SHADOW:
+   case TYPE_SPECIFIER_SAMPLER_2D_ARRAY_SHADOW:
       /* OK */
       break;
    default:
diff --git a/src/mesa/shader/slang/slang_print.c b/src/mesa/shader/slang/slang_print.c
index 6efc5b7826..3c75523c42 100644
--- a/src/mesa/shader/slang/slang_print.c
+++ b/src/mesa/shader/slang/slang_print.c
@@ -119,22 +119,22 @@ print_type(const slang_fully_specified_type *t)
    case SLANG_SPEC_MAT43:
       printf("mat4x3");
       break;
-   case SLANG_SPEC_SAMPLER1D:
+   case SLANG_SPEC_SAMPLER_1D:
       printf("sampler1D");
       break;
-   case SLANG_SPEC_SAMPLER2D:
+   case SLANG_SPEC_SAMPLER_2D:
       printf("sampler2D");
       break;
-   case SLANG_SPEC_SAMPLER3D:
+   case SLANG_SPEC_SAMPLER_3D:
       printf("sampler3D");
       break;
-   case SLANG_SPEC_SAMPLERCUBE:
+   case SLANG_SPEC_SAMPLER_CUBE:
       printf("samplerCube");
       break;
-   case SLANG_SPEC_SAMPLER1DSHADOW:
+   case SLANG_SPEC_SAMPLER_1D_SHADOW:
       printf("sampler1DShadow");
       break;
-   case SLANG_SPEC_SAMPLER2DSHADOW:
+   case SLANG_SPEC_SAMPLER_2D_SHADOW:
       printf("sampler2DShadow");
       break;
    case SLANG_SPEC_STRUCT:
@@ -783,21 +783,21 @@ slang_type_string(slang_type_specifier_type t)
       return "mat3";
    case SLANG_SPEC_MAT4:
       return "mat4";
-   case SLANG_SPEC_SAMPLER1D:
+   case SLANG_SPEC_SAMPLER_1D:
       return "sampler1D";
-   case SLANG_SPEC_SAMPLER2D:
+   case SLANG_SPEC_SAMPLER_2D:
       return "sampler2D";
-   case SLANG_SPEC_SAMPLER3D:
+   case SLANG_SPEC_SAMPLER_3D:
       return "sampler3D";
-   case SLANG_SPEC_SAMPLERCUBE:
+   case SLANG_SPEC_SAMPLER_CUBE:
       return "samplerCube";
-   case SLANG_SPEC_SAMPLER1DSHADOW:
+   case SLANG_SPEC_SAMPLER_1D_SHADOW:
       return "sampler1DShadow";
-   case SLANG_SPEC_SAMPLER2DSHADOW:
+   case SLANG_SPEC_SAMPLER_2D_SHADOW:
       return "sampler2DShadow";
-   case SLANG_SPEC_SAMPLER2DRECT:
+   case SLANG_SPEC_SAMPLER_RECT:
       return "sampler2DRect";
-   case SLANG_SPEC_SAMPLER2DRECTSHADOW:
+   case SLANG_SPEC_SAMPLER_RECT_SHADOW:
       return "sampler2DRectShadow";
    case SLANG_SPEC_STRUCT:
       return "struct";
diff --git a/src/mesa/shader/slang/slang_storage.c b/src/mesa/shader/slang/slang_storage.c
index e8b0fb7747..656e15670d 100644
--- a/src/mesa/shader/slang/slang_storage.c
+++ b/src/mesa/shader/slang/slang_storage.c
@@ -199,14 +199,19 @@ _slang_aggregate_variable(slang_storage_aggregate * agg,
    case SLANG_SPEC_MAT43:
       return aggregate_matrix(agg, SLANG_STORE_FLOAT, 4, 3);
 
-   case SLANG_SPEC_SAMPLER1D:
-   case SLANG_SPEC_SAMPLER2D:
-   case SLANG_SPEC_SAMPLER3D:
-   case SLANG_SPEC_SAMPLERCUBE:
-   case SLANG_SPEC_SAMPLER1DSHADOW:
-   case SLANG_SPEC_SAMPLER2DSHADOW:
-   case SLANG_SPEC_SAMPLER2DRECT:
-   case SLANG_SPEC_SAMPLER2DRECTSHADOW:
+   case SLANG_SPEC_SAMPLER_1D:
+   case SLANG_SPEC_SAMPLER_2D:
+   case SLANG_SPEC_SAMPLER_3D:
+   case SLANG_SPEC_SAMPLER_CUBE:
+   case SLANG_SPEC_SAMPLER_1D_SHADOW:
+   case SLANG_SPEC_SAMPLER_2D_SHADOW:
+   case SLANG_SPEC_SAMPLER_RECT:
+   case SLANG_SPEC_SAMPLER_RECT_SHADOW:
+   case SLANG_SPEC_SAMPLER_1D_ARRAY:
+   case SLANG_SPEC_SAMPLER_2D_ARRAY:
+   case SLANG_SPEC_SAMPLER_1D_ARRAY_SHADOW:
+   case SLANG_SPEC_SAMPLER_2D_ARRAY_SHADOW:
+
       return aggregate_vector(agg, SLANG_STORE_INT, 1);
    case SLANG_SPEC_STRUCT:
       return aggregate_variables(agg, spec->_struct->fields, funcs, structs,
diff --git a/src/mesa/shader/slang/slang_typeinfo.c b/src/mesa/shader/slang/slang_typeinfo.c
index 01e2bc4a22..0f96768b02 100644
--- a/src/mesa/shader/slang/slang_typeinfo.c
+++ b/src/mesa/shader/slang/slang_typeinfo.c
@@ -195,14 +195,18 @@ static const type_specifier_type_name type_specifier_type_names[] = {
    {"mat4x2", SLANG_SPEC_MAT42},
    {"mat3x4", SLANG_SPEC_MAT34},
    {"mat4x3", SLANG_SPEC_MAT43},
-   {"sampler1D", SLANG_SPEC_SAMPLER1D},
-   {"sampler2D", SLANG_SPEC_SAMPLER2D},
-   {"sampler3D", SLANG_SPEC_SAMPLER3D},
-   {"samplerCube", SLANG_SPEC_SAMPLERCUBE},
-   {"sampler1DShadow", SLANG_SPEC_SAMPLER1DSHADOW},
-   {"sampler2DShadow", SLANG_SPEC_SAMPLER2DSHADOW},
-   {"sampler2DRect", SLANG_SPEC_SAMPLER2DRECT},
-   {"sampler2DRectShadow", SLANG_SPEC_SAMPLER2DRECTSHADOW},
+   {"sampler1D", SLANG_SPEC_SAMPLER_1D},
+   {"sampler2D", SLANG_SPEC_SAMPLER_2D},
+   {"sampler3D", SLANG_SPEC_SAMPLER_3D},
+   {"samplerCube", SLANG_SPEC_SAMPLER_CUBE},
+   {"sampler1DShadow", SLANG_SPEC_SAMPLER_1D_SHADOW},
+   {"sampler2DShadow", SLANG_SPEC_SAMPLER_2D_SHADOW},
+   {"sampler2DRect", SLANG_SPEC_SAMPLER_RECT},
+   {"sampler2DRectShadow", SLANG_SPEC_SAMPLER_RECT_SHADOW},
+   {"sampler1DArray", SLANG_SPEC_SAMPLER_1D_ARRAY},
+   {"sampler2DArray", SLANG_SPEC_SAMPLER_2D_ARRAY},
+   {"sampler1DArrayShadow", SLANG_SPEC_SAMPLER_1D_ARRAY_SHADOW},
+   {"sampler2DArrayShadow", SLANG_SPEC_SAMPLER_2D_ARRAY_SHADOW},
    {NULL, SLANG_SPEC_VOID}
 };
 
@@ -1138,22 +1142,30 @@ _slang_gltype_from_specifier(const slang_type_specifier *type)
       return GL_FLOAT_MAT3x4;
    case SLANG_SPEC_MAT43:
       return GL_FLOAT_MAT4x3;
-   case SLANG_SPEC_SAMPLER1D:
+   case SLANG_SPEC_SAMPLER_1D:
       return GL_SAMPLER_1D;
-   case SLANG_SPEC_SAMPLER2D:
+   case SLANG_SPEC_SAMPLER_2D:
       return GL_SAMPLER_2D;
-   case SLANG_SPEC_SAMPLER3D:
+   case SLANG_SPEC_SAMPLER_3D:
       return GL_SAMPLER_3D;
-   case SLANG_SPEC_SAMPLERCUBE:
+   case SLANG_SPEC_SAMPLER_CUBE:
       return GL_SAMPLER_CUBE;
-   case SLANG_SPEC_SAMPLER1DSHADOW:
+   case SLANG_SPEC_SAMPLER_1D_SHADOW:
       return GL_SAMPLER_1D_SHADOW;
-   case SLANG_SPEC_SAMPLER2DSHADOW:
+   case SLANG_SPEC_SAMPLER_2D_SHADOW:
       return GL_SAMPLER_2D_SHADOW;
-   case SLANG_SPEC_SAMPLER2DRECT:
+   case SLANG_SPEC_SAMPLER_RECT:
       return GL_SAMPLER_2D_RECT_ARB;
-   case SLANG_SPEC_SAMPLER2DRECTSHADOW:
+   case SLANG_SPEC_SAMPLER_RECT_SHADOW:
       return GL_SAMPLER_2D_RECT_SHADOW_ARB;
+   case SLANG_SPEC_SAMPLER_1D_ARRAY:
+      return GL_SAMPLER_1D_ARRAY_EXT;
+   case SLANG_SPEC_SAMPLER_2D_ARRAY:
+      return GL_SAMPLER_2D_ARRAY_EXT;
+   case SLANG_SPEC_SAMPLER_1D_ARRAY_SHADOW:
+      return GL_SAMPLER_1D_ARRAY_SHADOW_EXT;
+   case SLANG_SPEC_SAMPLER_2D_ARRAY_SHADOW:
+      return GL_SAMPLER_2D_ARRAY_SHADOW_EXT;
    case SLANG_SPEC_ARRAY:
       return _slang_gltype_from_specifier(type->_array);
    case SLANG_SPEC_STRUCT:
diff --git a/src/mesa/shader/slang/slang_typeinfo.h b/src/mesa/shader/slang/slang_typeinfo.h
index aa5f14ebc7..9a6407a31b 100644
--- a/src/mesa/shader/slang/slang_typeinfo.h
+++ b/src/mesa/shader/slang/slang_typeinfo.h
@@ -130,14 +130,18 @@ typedef enum slang_type_specifier_type_
    SLANG_SPEC_MAT42,
    SLANG_SPEC_MAT34,
    SLANG_SPEC_MAT43,
-   SLANG_SPEC_SAMPLER1D,
-   SLANG_SPEC_SAMPLER2D,
-   SLANG_SPEC_SAMPLER3D,
-   SLANG_SPEC_SAMPLERCUBE,
-   SLANG_SPEC_SAMPLER2DRECT,
-   SLANG_SPEC_SAMPLER1DSHADOW,
-   SLANG_SPEC_SAMPLER2DSHADOW,
-   SLANG_SPEC_SAMPLER2DRECTSHADOW,
+   SLANG_SPEC_SAMPLER_1D,
+   SLANG_SPEC_SAMPLER_2D,
+   SLANG_SPEC_SAMPLER_3D,
+   SLANG_SPEC_SAMPLER_CUBE,
+   SLANG_SPEC_SAMPLER_RECT,
+   SLANG_SPEC_SAMPLER_1D_SHADOW,
+   SLANG_SPEC_SAMPLER_2D_SHADOW,
+   SLANG_SPEC_SAMPLER_RECT_SHADOW,
+   SLANG_SPEC_SAMPLER_1D_ARRAY,
+   SLANG_SPEC_SAMPLER_2D_ARRAY,
+   SLANG_SPEC_SAMPLER_1D_ARRAY_SHADOW,
+   SLANG_SPEC_SAMPLER_2D_ARRAY_SHADOW,
    SLANG_SPEC_STRUCT,
    SLANG_SPEC_ARRAY
 } slang_type_specifier_type;
-- 
cgit v1.2.3


From 4db9f8361207e9377eb772df8d16413d63f55636 Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Thu, 25 Feb 2010 19:48:57 -0700
Subject: mesa: enable GL_EXT_texture_array for sw drivers

---
 src/mesa/main/extensions.c | 1 +
 1 file changed, 1 insertion(+)

(limited to 'src/mesa')

diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c
index 44190c7732..0e7e52a54a 100644
--- a/src/mesa/main/extensions.c
+++ b/src/mesa/main/extensions.c
@@ -305,6 +305,7 @@ _mesa_enable_sw_extensions(GLcontext *ctx)
    ctx->Extensions.EXT_shared_texture_palette = GL_TRUE;
    ctx->Extensions.EXT_stencil_wrap = GL_TRUE;
    ctx->Extensions.EXT_stencil_two_side = GL_TRUE;
+   ctx->Extensions.EXT_texture_array = GL_TRUE;
    ctx->Extensions.EXT_texture_env_add = GL_TRUE;
    ctx->Extensions.EXT_texture_env_combine = GL_TRUE;
    ctx->Extensions.EXT_texture_env_dot3 = GL_TRUE;
-- 
cgit v1.2.3


From bdbb5f8170f48713b741ad68c26464231a01ca7a Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Thu, 25 Feb 2010 20:21:39 -0700
Subject: swrast: add 0.5 bias in tex_array_slice() per the spec

---
 src/mesa/swrast/s_texfilter.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/swrast/s_texfilter.c b/src/mesa/swrast/s_texfilter.c
index 478fb1557f..997c2f4bb7 100644
--- a/src/mesa/swrast/s_texfilter.c
+++ b/src/mesa/swrast/s_texfilter.c
@@ -480,7 +480,7 @@ clamp_rect_coord_linear(GLenum wrapMode, GLfloat coord, GLint max,
 static INLINE GLint
 tex_array_slice(GLfloat coord, GLsizei size)
 {
-   GLint slice = IFLOOR(coord);
+   GLint slice = IFLOOR(coord + 0.5f);
    slice = CLAMP(slice, 0, size - 1);
    return slice;
 }
-- 
cgit v1.2.3


From c76d4db25260dd68684bf784efacd7323c7cab8b Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Thu, 25 Feb 2010 23:51:05 -0800
Subject: i965: Remove unnecessary headers.

---
 src/mesa/drivers/dri/i965/gen6_cc.c             | 2 --
 src/mesa/drivers/dri/i965/gen6_clip_state.c     | 3 ---
 src/mesa/drivers/dri/i965/gen6_depthstencil.c   | 4 ----
 src/mesa/drivers/dri/i965/gen6_gs_state.c       | 3 ---
 src/mesa/drivers/dri/i965/gen6_sampler_state.c  | 3 ---
 src/mesa/drivers/dri/i965/gen6_scissor_state.c  | 3 ---
 src/mesa/drivers/dri/i965/gen6_sf_state.c       | 1 -
 src/mesa/drivers/dri/i965/gen6_viewport_state.c | 2 --
 src/mesa/drivers/dri/i965/gen6_vs_state.c       | 2 --
 src/mesa/drivers/dri/i965/gen6_wm_state.c       | 2 --
 10 files changed, 25 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/gen6_cc.c b/src/mesa/drivers/dri/i965/gen6_cc.c
index ba1e3abe83..65e16e70c7 100644
--- a/src/mesa/drivers/dri/i965/gen6_cc.c
+++ b/src/mesa/drivers/dri/i965/gen6_cc.c
@@ -30,8 +30,6 @@
 #include "brw_defines.h"
 #include "brw_util.h"
 #include "intel_batchbuffer.h"
-#include "main/macros.h"
-#include "main/enums.h"
 
 struct brw_blend_state_key {
    GLboolean color_blend, alpha_enabled;
diff --git a/src/mesa/drivers/dri/i965/gen6_clip_state.c b/src/mesa/drivers/dri/i965/gen6_clip_state.c
index 9fabd05341..06f8145e32 100644
--- a/src/mesa/drivers/dri/i965/gen6_clip_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_clip_state.c
@@ -28,9 +28,6 @@
 #include "brw_context.h"
 #include "brw_state.h"
 #include "brw_defines.h"
-#include "brw_util.h"
-#include "main/macros.h"
-#include "main/enums.h"
 #include "intel_batchbuffer.h"
 
 static void
diff --git a/src/mesa/drivers/dri/i965/gen6_depthstencil.c b/src/mesa/drivers/dri/i965/gen6_depthstencil.c
index 960927164c..4924f0fd55 100644
--- a/src/mesa/drivers/dri/i965/gen6_depthstencil.c
+++ b/src/mesa/drivers/dri/i965/gen6_depthstencil.c
@@ -27,10 +27,6 @@
 
 #include "brw_context.h"
 #include "brw_state.h"
-#include "brw_defines.h"
-#include "brw_util.h"
-#include "main/macros.h"
-#include "main/enums.h"
 
 struct brw_depth_stencil_state_key {
    GLenum depth_func;
diff --git a/src/mesa/drivers/dri/i965/gen6_gs_state.c b/src/mesa/drivers/dri/i965/gen6_gs_state.c
index 4032605a85..161e7b85c2 100644
--- a/src/mesa/drivers/dri/i965/gen6_gs_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_gs_state.c
@@ -28,9 +28,6 @@
 #include "brw_context.h"
 #include "brw_state.h"
 #include "brw_defines.h"
-#include "brw_util.h"
-#include "main/macros.h"
-#include "main/enums.h"
 #include "intel_batchbuffer.h"
 
 static void
diff --git a/src/mesa/drivers/dri/i965/gen6_sampler_state.c b/src/mesa/drivers/dri/i965/gen6_sampler_state.c
index f5d537b1cf..ab8e7516d2 100644
--- a/src/mesa/drivers/dri/i965/gen6_sampler_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_sampler_state.c
@@ -28,10 +28,7 @@
 #include "brw_context.h"
 #include "brw_state.h"
 #include "brw_defines.h"
-#include "brw_util.h"
 #include "intel_batchbuffer.h"
-#include "main/macros.h"
-#include "main/enums.h"
 
 static void
 upload_sampler_state_pointers(struct brw_context *brw)
diff --git a/src/mesa/drivers/dri/i965/gen6_scissor_state.c b/src/mesa/drivers/dri/i965/gen6_scissor_state.c
index 81ebbf4ddf..2e21e5f733 100644
--- a/src/mesa/drivers/dri/i965/gen6_scissor_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_scissor_state.c
@@ -28,10 +28,7 @@
 #include "brw_context.h"
 #include "brw_state.h"
 #include "brw_defines.h"
-#include "brw_util.h"
 #include "intel_batchbuffer.h"
-#include "main/macros.h"
-#include "main/enums.h"
 
 static void
 prepare_scissor_state(struct brw_context *brw)
diff --git a/src/mesa/drivers/dri/i965/gen6_sf_state.c b/src/mesa/drivers/dri/i965/gen6_sf_state.c
index 548cdb9fca..08e6753a91 100644
--- a/src/mesa/drivers/dri/i965/gen6_sf_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_sf_state.c
@@ -30,7 +30,6 @@
 #include "brw_defines.h"
 #include "brw_util.h"
 #include "main/macros.h"
-#include "main/enums.h"
 #include "intel_batchbuffer.h"
 
 static void
diff --git a/src/mesa/drivers/dri/i965/gen6_viewport_state.c b/src/mesa/drivers/dri/i965/gen6_viewport_state.c
index df3cbfb224..0c2aa4206c 100644
--- a/src/mesa/drivers/dri/i965/gen6_viewport_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_viewport_state.c
@@ -28,10 +28,8 @@
 #include "brw_context.h"
 #include "brw_state.h"
 #include "brw_defines.h"
-#include "brw_util.h"
 #include "intel_batchbuffer.h"
 #include "main/macros.h"
-#include "main/enums.h"
 
 /* The clip VP defines the guardband region where expensive clipping is skipped
  * and fragments are allowed to be generated and clipped out cheaply by the SF.
diff --git a/src/mesa/drivers/dri/i965/gen6_vs_state.c b/src/mesa/drivers/dri/i965/gen6_vs_state.c
index 04fc16e679..211a6231c9 100644
--- a/src/mesa/drivers/dri/i965/gen6_vs_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_vs_state.c
@@ -29,8 +29,6 @@
 #include "brw_state.h"
 #include "brw_defines.h"
 #include "brw_util.h"
-#include "main/macros.h"
-#include "main/enums.h"
 #include "shader/prog_parameter.h"
 #include "shader/prog_statevars.h"
 #include "intel_batchbuffer.h"
diff --git a/src/mesa/drivers/dri/i965/gen6_wm_state.c b/src/mesa/drivers/dri/i965/gen6_wm_state.c
index f4ae7ed750..e355261769 100644
--- a/src/mesa/drivers/dri/i965/gen6_wm_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_wm_state.c
@@ -29,8 +29,6 @@
 #include "brw_state.h"
 #include "brw_defines.h"
 #include "brw_util.h"
-#include "main/macros.h"
-#include "main/enums.h"
 #include "shader/prog_parameter.h"
 #include "shader/prog_statevars.h"
 #include "intel_batchbuffer.h"
-- 
cgit v1.2.3


From ead22e6a328e7d7b7c0b52af4705634e989e4d69 Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Thu, 25 Feb 2010 23:58:45 -0800
Subject: glapi: Remove unnecessary headers.

---
 src/mesa/glapi/glapi_dispatch.c | 2 --
 1 file changed, 2 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glapi_dispatch.c b/src/mesa/glapi/glapi_dispatch.c
index 32b9535e3f..b7587a2109 100644
--- a/src/mesa/glapi/glapi_dispatch.c
+++ b/src/mesa/glapi/glapi_dispatch.c
@@ -46,8 +46,6 @@
 #endif
 
 #include "glapi/glapi.h"
-#include "glapi/glapitable.h"
-#include "glapi/glapidispatch.h"
 #include "glapi/glthread.h"
 
 
-- 
cgit v1.2.3


From e5c691f445e1c02e6e2f75b817b13d7024f7a3a6 Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Fri, 26 Feb 2010 00:17:03 -0800
Subject: r300/compiler: Assert that array index is not negative.

---
 src/mesa/drivers/dri/r300/compiler/r500_fragprog_emit.c | 2 ++
 1 file changed, 2 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r300/compiler/r500_fragprog_emit.c b/src/mesa/drivers/dri/r300/compiler/r500_fragprog_emit.c
index 829f028950..710cae727a 100644
--- a/src/mesa/drivers/dri/r300/compiler/r500_fragprog_emit.c
+++ b/src/mesa/drivers/dri/r300/compiler/r500_fragprog_emit.c
@@ -469,6 +469,8 @@ void r500BuildFragmentProgramHwCode(struct r300_fragment_program_compiler *compi
 	if (compiler->Base.Error)
 		return;
 
+	assert(code->inst_end >= 0);
+
 	if ((code->inst[code->inst_end].inst0 & R500_INST_TYPE_MASK) != R500_INST_TYPE_OUT) {
 		/* This may happen when dead-code elimination is disabled or
 		 * when most of the fragment program logic is leading to a KIL */
-- 
cgit v1.2.3


From 49f35a379dc52e9847fce803b9ef73d622d0e575 Mon Sep 17 00:00:00 2001
From: José Fonseca <jfonseca@vmware.com>
Date: Fri, 26 Feb 2010 09:09:35 +0000
Subject: Revert "glapi: Remove unnecessary headers."

This reverts commit ead22e6a328e7d7b7c0b52af4705634e989e4d69.

This headers are not unnecessary on windows.
---
 src/mesa/glapi/glapi_dispatch.c | 2 ++
 1 file changed, 2 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glapi_dispatch.c b/src/mesa/glapi/glapi_dispatch.c
index b7587a2109..32b9535e3f 100644
--- a/src/mesa/glapi/glapi_dispatch.c
+++ b/src/mesa/glapi/glapi_dispatch.c
@@ -46,6 +46,8 @@
 #endif
 
 #include "glapi/glapi.h"
+#include "glapi/glapitable.h"
+#include "glapi/glapidispatch.h"
 #include "glapi/glthread.h"
 
 
-- 
cgit v1.2.3


From fe25476c04b341d50777b8edd0533f7c838f6361 Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Fri, 26 Feb 2010 09:03:31 -0700
Subject: mesa: fix _BaseFormat assignment in _mesa_soft_renderbuffer_storage()

The rb->InternalFormat field will be set by the caller if the allocation
succeeds.  Until then, this field's value can't be used.  Fixes a failed
assertion with FlightGear.
---
 src/mesa/main/renderbuffer.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/main/renderbuffer.c b/src/mesa/main/renderbuffer.c
index 4276b23b69..2f42924046 100644
--- a/src/mesa/main/renderbuffer.c
+++ b/src/mesa/main/renderbuffer.c
@@ -1142,7 +1142,7 @@ _mesa_soft_renderbuffer_storage(GLcontext *ctx, struct gl_renderbuffer *rb,
 
    rb->Width = width;
    rb->Height = height;
-   rb->_BaseFormat = _mesa_base_fbo_format(ctx, rb->InternalFormat);
+   rb->_BaseFormat = _mesa_base_fbo_format(ctx, internalFormat);
    ASSERT(rb->_BaseFormat);
 
    return GL_TRUE;
-- 
cgit v1.2.3


From ea203de2d005b311d2f7f981523ae84494d6672a Mon Sep 17 00:00:00 2001
From: Kristian Høgsberg <krh@bitplanet.net>
Date: Fri, 26 Feb 2010 13:17:30 -0500
Subject: Set API dispatch pointers for OES_EGL_image functions

This chunk fell through the cracks when I rebase the EGLImage patch series.
---
 src/mesa/main/api_exec.c | 5 +++++
 1 file changed, 5 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/main/api_exec.c b/src/mesa/main/api_exec.c
index f8e004af3f..70c154b62b 100644
--- a/src/mesa/main/api_exec.c
+++ b/src/mesa/main/api_exec.c
@@ -753,4 +753,9 @@ _mesa_init_exec_table(struct _glapi_table *exec)
    /* GL_NV_conditional_render */
    SET_BeginConditionalRenderNV(exec, _mesa_BeginConditionalRender);
    SET_EndConditionalRenderNV(exec, _mesa_EndConditionalRender);
+
+#if FEATURE_OES_EGL_image
+   SET_EGLImageTargetTexture2DOES(exec, _mesa_EGLImageTargetTexture2DOES);
+   SET_EGLImageTargetRenderbufferStorageOES(exec, _mesa_EGLImageTargetRenderbufferStorageOES);
+#endif
 }
-- 
cgit v1.2.3


From d7322c9d420e484bc3c7cecb873b04cf7da7f33a Mon Sep 17 00:00:00 2001
From: Kristian Høgsberg <krh@bitplanet.net>
Date: Fri, 26 Feb 2010 14:49:31 -0500
Subject: intel: Lookup requested renderbuffer in
 intel_create_image_from_renderbuffer

Previously we'd use the current renderbuffer.
---
 src/mesa/drivers/dri/intel/intel_screen.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/intel/intel_screen.c b/src/mesa/drivers/dri/intel/intel_screen.c
index f19e2ee81d..bc394d048e 100644
--- a/src/mesa/drivers/dri/intel/intel_screen.c
+++ b/src/mesa/drivers/dri/intel/intel_screen.c
@@ -30,6 +30,7 @@
 #include "main/framebuffer.h"
 #include "main/renderbuffer.h"
 #include "main/hash.h"
+#include "main/fbobject.h"
 
 #include "utils.h"
 #include "xmlpool.h"
@@ -194,7 +195,7 @@ intel_create_image_from_renderbuffer(__DRIcontext *context,
    struct gl_renderbuffer *rb;
    struct intel_renderbuffer *irb;
 
-   rb = intel->ctx.CurrentRenderbuffer;
+   rb = _mesa_lookup_renderbuffer(&intel->ctx, renderbuffer);
    if (!rb) {
       _mesa_error(&intel->ctx,
 		  GL_INVALID_OPERATION, "glRenderbufferExternalMESA");
-- 
cgit v1.2.3


From 424a8385e4d07860c6deca12c43d6c31698a29ed Mon Sep 17 00:00:00 2001
From: Klaus Schnass <klaus.schnass@student.tuwien.ac.at>
Date: Fri, 26 Feb 2010 15:09:50 -0500
Subject: r600: fail to validate unsupported texture formats

---
 src/mesa/drivers/dri/r600/r600_texstate.c | 28 ++++++++++++----------------
 1 file changed, 12 insertions(+), 16 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r600/r600_texstate.c b/src/mesa/drivers/dri/r600/r600_texstate.c
index dd33ef3c6a..1600033b9b 100644
--- a/src/mesa/drivers/dri/r600/r600_texstate.c
+++ b/src/mesa/drivers/dri/r600/r600_texstate.c
@@ -373,17 +373,11 @@ static GLboolean r600GetTexFormat(struct gl_texture_object *tObj, gl_format mesa
 		  break;
 		*/
 	case MESA_FORMAT_RGB_DXT1: /* not supported yet */
-
-		break;
 	case MESA_FORMAT_RGBA_DXT1: /* not supported yet */
-
-		break;
 	case MESA_FORMAT_RGBA_DXT3: /* not supported yet */
-
-		break;
 	case MESA_FORMAT_RGBA_DXT5: /* not supported yet */
+	        return GL_FALSE;
 
-		break;
 	case MESA_FORMAT_RGBA_FLOAT32:
 		SETfield(t->SQ_TEX_RESOURCE1, FMT_32_32_32_32_FLOAT,
 			 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
@@ -701,8 +695,8 @@ void r600SetDepthTexMode(struct gl_texture_object *tObj)
 
 	t = radeon_tex_obj(tObj);
 
-	r600GetTexFormat(tObj, tObj->Image[0][tObj->BaseLevel]->TexFormat);
-
+	if(!r600GetTexFormat(tObj, tObj->Image[0][tObj->BaseLevel]->TexFormat))
+	  t->validated = GL_FALSE;
 }
 
 /**
@@ -711,7 +705,7 @@ void r600SetDepthTexMode(struct gl_texture_object *tObj)
  * \param rmesa Context pointer
  * \param t the r300 texture object
  */
-static void setup_hardware_state(GLcontext * ctx, struct gl_texture_object *texObj, int unit)
+static GLboolean setup_hardware_state(GLcontext * ctx, struct gl_texture_object *texObj, int unit)
 {
 	context_t *rmesa = R700_CONTEXT(ctx);
 	radeonTexObj *t = radeon_tex_obj(texObj);
@@ -721,15 +715,15 @@ static void setup_hardware_state(GLcontext * ctx, struct gl_texture_object *texO
 	if (rmesa->radeon.radeonScreen->driScreen->dri2.enabled &&
 	    t->image_override &&
 	    t->bo)
-		return;
+		return GL_TRUE;
 
 	firstImage = t->base.Image[0][t->minLod];
 
 	if (!t->image_override) {
 		if (!r600GetTexFormat(texObj, firstImage->TexFormat)) {
-			radeon_error("unexpected texture format in %s\n",
-				      __FUNCTION__);
-			return;
+			radeon_warning("unsupported texture format in %s\n",
+				       __FUNCTION__);
+			return GL_FALSE;
 		}
 	}
 
@@ -754,7 +748,7 @@ static void setup_hardware_state(GLcontext * ctx, struct gl_texture_object *texO
 		break;
         default:
 		radeon_error("unexpected texture target type in %s\n", __FUNCTION__);
-		return;
+		return GL_FALSE;
 	}
 
 	row_align = rmesa->radeon.texture_row_align - 1;
@@ -799,6 +793,7 @@ static void setup_hardware_state(GLcontext * ctx, struct gl_texture_object *texO
 		CLEARfield(t->SQ_TEX_SAMPLER0, DEPTH_COMPARE_FUNCTION_mask);
 	}
 
+	return GL_TRUE;
 }
 
 /**
@@ -815,7 +810,8 @@ static GLboolean r600_validate_texture(GLcontext * ctx, struct gl_texture_object
 
 	/* Configure the hardware registers (more precisely, the cached version
 	 * of the hardware registers). */
-	setup_hardware_state(ctx, texObj, unit);
+	if (!setup_hardware_state(ctx, texObj, unit))
+	        return GL_FALSE;
 
 	t->validated = GL_TRUE;
 	return GL_TRUE;
-- 
cgit v1.2.3


From 52eb2ef6bf4e3327ed008c691efb821ecaa422b2 Mon Sep 17 00:00:00 2001
From: Alex Deucher <alexdeucher@gmail.com>
Date: Fri, 26 Feb 2010 15:24:12 -0500
Subject: r600: enable OQ on rv740 on drms with working pipe config

---
 src/mesa/drivers/dri/r600/r600_context.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r600/r600_context.c b/src/mesa/drivers/dri/r600/r600_context.c
index f575e74c3e..1a4b014d9f 100644
--- a/src/mesa/drivers/dri/r600/r600_context.c
+++ b/src/mesa/drivers/dri/r600/r600_context.c
@@ -340,9 +340,12 @@ static void r600InitGLExtensions(GLcontext *ctx)
 		_mesa_enable_extension(ctx, "GL_EXT_texture_compression_s3tc");
 	}
 
-	/* XXX: RV740 only seems to report results from half of its DBs */
-	if (r600->radeon.radeonScreen->chip_family == CHIP_FAMILY_RV740)
-		_mesa_disable_extension(ctx, "GL_ARB_occlusion_query");
+	/* RV740 had a broken pipe config prior to drm 1.32 */
+	if (!r600->radeon.radeonScreen->kernel_mm) {
+		if ((r600->radeon.dri.drmMinor < 32) &&
+		    (r600->radeon.radeonScreen->chip_family == CHIP_FAMILY_RV740))
+			_mesa_disable_extension(ctx, "GL_ARB_occlusion_query");
+	}
 }
 
 /* Create the device specific rendering context.
-- 
cgit v1.2.3


From be97d2c0a6269e297f1db0e3639b0b03a45f21d9 Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Fri, 26 Feb 2010 23:58:59 -0800
Subject: mesa: Remove unnecessary header.

---
 src/mesa/main/texrender.c | 1 -
 1 file changed, 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/main/texrender.c b/src/mesa/main/texrender.c
index 11d7c06914..5a528535c0 100644
--- a/src/mesa/main/texrender.c
+++ b/src/mesa/main/texrender.c
@@ -1,7 +1,6 @@
 
 #include "context.h"
 #include "colormac.h"
-#include "fbobject.h"
 #include "texfetch.h"
 #include "texrender.h"
 #include "renderbuffer.h"
-- 
cgit v1.2.3


From fd29be3831a583a1ad1d7055bd234724ce7ccfae Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Sat, 27 Feb 2010 00:08:14 -0800
Subject: glsl: Assert pointer is not null before dereferencing.

---
 src/mesa/shader/slang/slang_codegen.c | 1 +
 1 file changed, 1 insertion(+)

(limited to 'src/mesa')

diff --git a/src/mesa/shader/slang/slang_codegen.c b/src/mesa/shader/slang/slang_codegen.c
index adfea890b3..9ca5c1372d 100644
--- a/src/mesa/shader/slang/slang_codegen.c
+++ b/src/mesa/shader/slang/slang_codegen.c
@@ -3184,6 +3184,7 @@ _slang_unroll_for_loop(slang_assemble_ctx * A, const slang_operation *oper)
       varId = oper->children[0].children[0].a_id;
       var = _slang_variable_locate(oper->children[0].children[0].locals,
                                    varId, GL_TRUE);
+      assert(var);
       start = (GLint) var->initializer->literal[0];
    }
    else {
-- 
cgit v1.2.3


From 24a8b470ba592b4eb3560f7c5762e17ec0977a51 Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Sat, 27 Feb 2010 00:31:14 -0800
Subject: glsl: Assert input to strcmp is not null.

---
 src/mesa/shader/slang/slang_builtin.c | 1 +
 1 file changed, 1 insertion(+)

(limited to 'src/mesa')

diff --git a/src/mesa/shader/slang/slang_builtin.c b/src/mesa/shader/slang/slang_builtin.c
index 0a9f0b97fb..5533cc5b65 100644
--- a/src/mesa/shader/slang/slang_builtin.c
+++ b/src/mesa/shader/slang/slang_builtin.c
@@ -121,6 +121,7 @@ lookup_statevar(const char *var, GLint index1, GLint index2, const char *field,
    }
    else if (strcmp(var, "gl_DepthRange") == 0) {
       tokens[0] = STATE_DEPTH_RANGE;
+      assert(field);
       if (strcmp(field, "near") == 0) {
          *swizzleOut = SWIZZLE_XXXX;
       }
-- 
cgit v1.2.3


From 226d98173886e9e26337d6e9593b2b561c8cb758 Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Sat, 27 Feb 2010 01:52:46 -0800
Subject: r600: Assert pointer is not null before dereferencing.

---
 src/mesa/drivers/dri/r600/r700_assembler.c | 3 +++
 1 file changed, 3 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r600/r700_assembler.c b/src/mesa/drivers/dri/r600/r700_assembler.c
index 8344dd9a51..834bcc63e3 100644
--- a/src/mesa/drivers/dri/r600/r700_assembler.c
+++ b/src/mesa/drivers/dri/r600/r700_assembler.c
@@ -1746,18 +1746,21 @@ GLboolean assemble_alu_src(R700ALUInstruction*  alu_instruction_ptr,
     switch (source_index) 
     {
         case 0:
+            assert(alu_instruction_ptr);
             alu_instruction_ptr->m_Word0.f.src0_sel  = src_sel;
             alu_instruction_ptr->m_Word0.f.src0_rel  = src_rel;
             alu_instruction_ptr->m_Word0.f.src0_chan = src_chan;
             alu_instruction_ptr->m_Word0.f.src0_neg  = src_neg;
             break;
         case 1:
+            assert(alu_instruction_ptr);
             alu_instruction_ptr->m_Word0.f.src1_sel  = src_sel;
             alu_instruction_ptr->m_Word0.f.src1_rel  = src_rel;
             alu_instruction_ptr->m_Word0.f.src1_chan = src_chan;
             alu_instruction_ptr->m_Word0.f.src1_neg  = src_neg;
             break;
         case 2:
+            assert(alu_instruction_ptr);
             alu_instruction_ptr->m_Word1_OP3.f.src2_sel  = src_sel;
             alu_instruction_ptr->m_Word1_OP3.f.src2_rel  = src_rel;
             alu_instruction_ptr->m_Word1_OP3.f.src2_chan = src_chan;
-- 
cgit v1.2.3


From e63f532d26d82c06281840a84c73e2e36d7b3e1e Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Sat, 27 Feb 2010 02:18:06 -0800
Subject: dri: Assert pointer is not null before dereferencing.

---
 src/mesa/drivers/dri/common/dri_util.c | 1 +
 1 file changed, 1 insertion(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/common/dri_util.c b/src/mesa/drivers/dri/common/dri_util.c
index b80b608f4b..a4fd002664 100644
--- a/src/mesa/drivers/dri/common/dri_util.c
+++ b/src/mesa/drivers/dri/common/dri_util.c
@@ -189,6 +189,7 @@ static int driBindContext(__DRIcontext *pcp,
     ** initialize the drawable information if has not been done before.
     */
 
+    assert(psp);
     if (!psp->dri2.enabled) {
 	if (pdp && !pdp->pStamp) {
 	    DRM_SPINLOCK(&psp->pSAREA->drawable_lock, psp->drawLockID);
-- 
cgit v1.2.3


From d3004d9156e261d81adcae31d55a4b782433cd6b Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Sat, 27 Feb 2010 02:28:00 -0800
Subject: radeon: Assert pointer is not null before dereferencing.

Add back an assert that was removed in commit
cd5f167353f16fb4f5b349002625b704f3e23778.
---
 src/mesa/drivers/dri/radeon/radeon_tex_copy.c | 1 +
 1 file changed, 1 insertion(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/radeon/radeon_tex_copy.c b/src/mesa/drivers/dri/radeon/radeon_tex_copy.c
index d6aeb7049f..18cf182e54 100644
--- a/src/mesa/drivers/dri/radeon/radeon_tex_copy.c
+++ b/src/mesa/drivers/dri/radeon/radeon_tex_copy.c
@@ -58,6 +58,7 @@ do_copy_texsubimage(GLcontext *ctx,
     }
 
     assert(rrb && rrb->bo);
+    assert(timg->mt);
     assert(timg->mt->bo);
     assert(timg->base.Width >= dstx + width);
     assert(timg->base.Height >= dsty + height);
-- 
cgit v1.2.3


From e31a37966154cc8171a8663cf5aa4ef1dd070f97 Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Sat, 27 Feb 2010 14:56:27 -0800
Subject: unichrome: Assert that pointer is not null before dereferencing.

---
 src/mesa/drivers/dri/unichrome/via_ioctl.c | 2 ++
 1 file changed, 2 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/unichrome/via_ioctl.c b/src/mesa/drivers/dri/unichrome/via_ioctl.c
index c9a31f3383..25aad1b204 100644
--- a/src/mesa/drivers/dri/unichrome/via_ioctl.c
+++ b/src/mesa/drivers/dri/unichrome/via_ioctl.c
@@ -757,6 +757,8 @@ static void via_emit_cliprect(struct via_context *vmesa,
    vb[0] = HC_HEADER2;
    vb[1] = (HC_ParaType_NotTex << 16);
 
+   assert(vmesa->driDrawable);
+
    if (vmesa->driDrawable->w == 0 || vmesa->driDrawable->h == 0) {
       vb[2] = (HC_SubA_HClipTB << 24) | 0x0;
       vb[3] = (HC_SubA_HClipLR << 24) | 0x0;
-- 
cgit v1.2.3


From b22437937fece754d9644a9d4ccb8db981d5e16c Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Sat, 27 Feb 2010 15:07:30 -0800
Subject: tdfx: Add asserts to check for null pointer dereferences.

---
 src/mesa/drivers/dri/tdfx/tdfx_screen.c   | 2 ++
 src/mesa/drivers/dri/tdfx/tdfx_texstate.c | 8 ++++++++
 2 files changed, 10 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/tdfx/tdfx_screen.c b/src/mesa/drivers/dri/tdfx/tdfx_screen.c
index d554bcdc92..26de09503a 100644
--- a/src/mesa/drivers/dri/tdfx/tdfx_screen.c
+++ b/src/mesa/drivers/dri/tdfx/tdfx_screen.c
@@ -295,6 +295,8 @@ tdfxSwapBuffers( __DRIdrawable *driDrawPriv )
    }
 #endif
 
+   assert(fxMesa);
+
    if (fxMesa->scissoredClipRects) {
       /* restore clip rects without scissor box */
       fxMesa->Glide.grDRIPosition( driDrawPriv->x, driDrawPriv->y,
diff --git a/src/mesa/drivers/dri/tdfx/tdfx_texstate.c b/src/mesa/drivers/dri/tdfx/tdfx_texstate.c
index 6658b4d0c3..b04f48c7a7 100644
--- a/src/mesa/drivers/dri/tdfx/tdfx_texstate.c
+++ b/src/mesa/drivers/dri/tdfx/tdfx_texstate.c
@@ -2142,11 +2142,13 @@ tdfxUpdateTextureBinding( GLcontext *ctx )
        ctx->Texture.Unit[0]._ReallyEnabled == 0) {
       /* Only unit 0 2D enabled */
       if (shared->umaTexMemory) {
+         assert(ti0);
          fxMesa->TexSource[0].StartAddress = ti0->tm[0]->startAddr;
          fxMesa->TexSource[0].EvenOdd = GR_MIPMAPLEVELMASK_BOTH;
          fxMesa->TexSource[0].Info = &(ti0->info);
       }
       else {
+         assert(ti0);
          if (ti0->LODblend && ti0->whichTMU == TDFX_TMU_SPLIT) {
             fxMesa->TexSource[0].StartAddress = ti0->tm[TDFX_TMU0]->startAddr;
             fxMesa->TexSource[0].EvenOdd = GR_MIPMAPLEVELMASK_ODD;
@@ -2185,20 +2187,26 @@ tdfxUpdateTextureBinding( GLcontext *ctx )
       /* Both 2D enabled */
       if (shared->umaTexMemory) {
          const FxU32 tmu0 = 0, tmu1 = 1;
+
+         assert(ti0);
          fxMesa->TexSource[tmu0].StartAddress = ti0->tm[0]->startAddr;
          fxMesa->TexSource[tmu0].EvenOdd = GR_MIPMAPLEVELMASK_BOTH;
          fxMesa->TexSource[tmu0].Info = &(ti0->info);
 
+         assert(ti1);
          fxMesa->TexSource[tmu1].StartAddress = ti1->tm[0]->startAddr;
          fxMesa->TexSource[tmu1].EvenOdd = GR_MIPMAPLEVELMASK_BOTH;
          fxMesa->TexSource[tmu1].Info = &(ti1->info);
       }
       else {
          const FxU32 tmu0 = 0, tmu1 = 1;
+
+         assert(ti0);
          fxMesa->TexSource[tmu0].StartAddress = ti0->tm[tmu0]->startAddr;
          fxMesa->TexSource[tmu0].EvenOdd = GR_MIPMAPLEVELMASK_BOTH;
          fxMesa->TexSource[tmu0].Info = &(ti0->info);
 
+         assert(ti1);
          fxMesa->TexSource[tmu1].StartAddress = ti1->tm[tmu1]->startAddr;
          fxMesa->TexSource[tmu1].EvenOdd = GR_MIPMAPLEVELMASK_BOTH;
          fxMesa->TexSource[tmu1].Info = &(ti1->info);
-- 
cgit v1.2.3


From 9db6a70af583242ba5012f3451cd30a07d16b95f Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Sat, 27 Feb 2010 15:13:38 -0800
Subject: sis: Add assert to check function pointer is not null.

---
 src/mesa/drivers/dri/sis/sis_tris.c | 1 +
 1 file changed, 1 insertion(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/sis/sis_tris.c b/src/mesa/drivers/dri/sis/sis_tris.c
index 4b41d78d82..e7471f9789 100644
--- a/src/mesa/drivers/dri/sis/sis_tris.c
+++ b/src/mesa/drivers/dri/sis/sis_tris.c
@@ -994,6 +994,7 @@ sisFlushPrimsLocked(sisContextPtr smesa)
 	 MMIO(REG_3D_PrimitiveSet, smesa->dwPrimitiveSet);
       }
       while (smesa->vb_last < smesa->vb_cur) {
+	 assert(sis_emit_func);
 	 sis_emit_func(smesa, (char *)smesa->vb_last);
 	 smesa->vb_last += incr;
       }
-- 
cgit v1.2.3


From 5c007f42a128ad11c8e126443e0f040774901430 Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Sat, 27 Feb 2010 15:29:44 -0800
Subject: savage: Add assert to check for null pointer dereference.

---
 src/mesa/drivers/dri/savage/savagetex.c | 1 +
 1 file changed, 1 insertion(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/savage/savagetex.c b/src/mesa/drivers/dri/savage/savagetex.c
index 1a748ee126..1523af4065 100644
--- a/src/mesa/drivers/dri/savage/savagetex.c
+++ b/src/mesa/drivers/dri/savage/savagetex.c
@@ -1021,6 +1021,7 @@ static void savageUploadTexImages( savageContextPtr imesa, savageTexObjPtr t )
 	  return;
       }
 
+      assert(t->base.memBlock);
       ofs = t->base.memBlock->ofs;
       t->setup.physAddr = imesa->savageScreen->textureOffset[heap] + ofs;
       t->bufAddr = (GLubyte *)imesa->savageScreen->texVirtual[heap] + ofs;
-- 
cgit v1.2.3


From 3d3e3a56f2ded522267df60fdfc2c5933303d15b Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Sat, 27 Feb 2010 15:36:11 -0800
Subject: r300: Add asserts to check for null pointer dereferences.

---
 src/mesa/drivers/dri/r300/r300_vertprog.c | 2 ++
 1 file changed, 2 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r300/r300_vertprog.c b/src/mesa/drivers/dri/r300/r300_vertprog.c
index 6a366b438b..cbe4cb8304 100644
--- a/src/mesa/drivers/dri/r300/r300_vertprog.c
+++ b/src/mesa/drivers/dri/r300/r300_vertprog.c
@@ -79,6 +79,7 @@ static int r300VertexProgUpdateParams(GLcontext * ctx, struct r300_vertex_progra
 			break;
 		}
 
+		assert(src);
 		dst[4*i] = src[0];
 		dst[4*i + 1] = src[1];
 		dst[4*i + 2] = src[2];
@@ -311,6 +312,7 @@ struct r300_vertex_program * r300SelectAndTranslateVertexShader(GLcontext *ctx)
 		r300SelectAndTranslateFragmentShader(ctx);
 	}
 
+	assert(r300->selected_fp);
 	wanted_key.FpReads = r300->selected_fp->InputsRead;
 	wanted_key.FogAttr = r300->selected_fp->fog_attr;
 	wanted_key.WPosAttr = r300->selected_fp->wpos_attr;
-- 
cgit v1.2.3


From 14771ba7e492aef115a2827ac403499d074f9d0d Mon Sep 17 00:00:00 2001
From: Marcin Slusarz <marcin.slusarz@gmail.com>
Date: Sat, 27 Feb 2010 13:55:35 -0800
Subject: mesa: remove libmesagallium.a on make clean
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: José Fonseca <jfonseca@vmware.com>
---
 src/mesa/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/Makefile b/src/mesa/Makefile
index 0cb49e803f..8c0ebf84c4 100644
--- a/src/mesa/Makefile
+++ b/src/mesa/Makefile
@@ -154,7 +154,7 @@ tags:
 clean:
 	-rm -f */*.o
 	-rm -f */*/*.o
-	-rm -f depend depend.bak libmesa.a libglapi.a
+	-rm -f depend depend.bak libmesa.a libglapi.a libmesagallium.a
 	-rm -f drivers/*/*.o
 	-rm -f *.pc
 	-rm -f shader/slang/library/*_gc.h
-- 
cgit v1.2.3


From aa4d47f68f992f8bbe843822c9f75dce9e8706f8 Mon Sep 17 00:00:00 2001
From: Marek Olšák <maraeo@gmail.com>
Date: Sat, 27 Feb 2010 03:20:58 +0100
Subject: st/mesa: do not advertise S3TC if the external lib is not available

---
 src/mesa/state_tracker/st_extensions.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
index d5f5854661..e9ee65576d 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -299,8 +299,12 @@ void st_init_extensions(struct st_context *st)
 
    /* s3tc support */
    if (screen->is_format_supported(screen, PIPE_FORMAT_DXT5_RGBA,
-                                   PIPE_TEXTURE_2D, 
-                                   PIPE_TEXTURE_USAGE_SAMPLER, 0)) {
+                                   PIPE_TEXTURE_2D,
+                                   PIPE_TEXTURE_USAGE_SAMPLER, 0) &&
+       (ctx->Mesa_DXTn ||
+        screen->is_format_supported(screen, PIPE_FORMAT_DXT5_RGBA,
+                                    PIPE_TEXTURE_2D,
+                                    PIPE_TEXTURE_USAGE_RENDER_TARGET, 0))) {
       ctx->Extensions.EXT_texture_compression_s3tc = GL_TRUE;
       ctx->Extensions.S3_s3tc = GL_TRUE;
    }
-- 
cgit v1.2.3


From a5406444aeeef40c899a4159a1fae6d1501bc1cb Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Sat, 27 Feb 2010 16:28:30 -0800
Subject: r128: Add assert to check for null pointer dereference.

---
 src/mesa/drivers/dri/r128/r128_texmem.c | 1 +
 1 file changed, 1 insertion(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r128/r128_texmem.c b/src/mesa/drivers/dri/r128/r128_texmem.c
index 5eec8c08cd..412f6d4255 100644
--- a/src/mesa/drivers/dri/r128/r128_texmem.c
+++ b/src/mesa/drivers/dri/r128/r128_texmem.c
@@ -260,6 +260,7 @@ void r128UploadTexImages( r128ContextPtr rmesa, r128TexObjPtr t )
       }
 
       /* Set the base offset of the texture image */
+      assert(t->base.memBlock);
       t->bufAddr = rmesa->r128Screen->texOffset[heap] 
 	   + t->base.memBlock->ofs;
 
-- 
cgit v1.2.3


From 689249bcbe96e2655aac29569ba36554bee1c503 Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Sat, 27 Feb 2010 16:30:49 -0800
Subject: mga: Add assert to check for null pointer dereference.

---
 src/mesa/drivers/dri/mga/mgatexmem.c | 1 +
 1 file changed, 1 insertion(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/mga/mgatexmem.c b/src/mesa/drivers/dri/mga/mgatexmem.c
index 47be6f3c18..58afbbb279 100644
--- a/src/mesa/drivers/dri/mga/mgatexmem.c
+++ b/src/mesa/drivers/dri/mga/mgatexmem.c
@@ -222,6 +222,7 @@ int mgaUploadTexImages( mgaContextPtr mmesa, mgaTextureObjectPtr t )
 	 return -1;
       }
 
+      assert(t->base.memBlock);
       ofs = mmesa->mgaScreen->textureOffset[ heap ]
 	   + t->base.memBlock->ofs;
 
-- 
cgit v1.2.3


From b45af1ec61473ad3a576fc0cb564a4f71fbab7f5 Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Sat, 27 Feb 2010 16:38:09 -0800
Subject: mach64: Add asserts to check for null pointer dereferences.

---
 src/mesa/drivers/dri/mach64/mach64_texmem.c | 3 +++
 1 file changed, 3 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/mach64/mach64_texmem.c b/src/mesa/drivers/dri/mach64/mach64_texmem.c
index 46cee4320d..b09954ce23 100644
--- a/src/mesa/drivers/dri/mach64/mach64_texmem.c
+++ b/src/mesa/drivers/dri/mach64/mach64_texmem.c
@@ -305,6 +305,7 @@ void mach64UploadTexImages( mach64ContextPtr mmesa, mach64TexObjPtr t )
       t->heap = heap;
 
       /* Set the base offset of the texture image */
+      assert(t->base.memBlock);
       t->bufAddr = mmesa->mach64Screen->texOffset[heap] + t->base.memBlock->ofs;
 
       /* Force loading the new state into the hardware */
@@ -457,7 +458,9 @@ void mach64UploadMultiTexImages( mach64ContextPtr mmesa,
       }
 
       /* Set the base offset of the texture image */
+      assert(t0->base.memBlock);
       t0->bufAddr = mmesa->mach64Screen->texOffset[heap] + t0->base.memBlock->ofs;
+      assert(t1->base.memBlock);
       t1->bufAddr = mmesa->mach64Screen->texOffset[heap] + t1->base.memBlock->ofs;
 
       /* Force loading the new state into the hardware */
-- 
cgit v1.2.3


From 975f105bb88fe6c146c091556f142e733885c91a Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Sat, 27 Feb 2010 16:41:49 -0800
Subject: i810: Add assert to check for null pointer dereference.

---
 src/mesa/drivers/dri/i810/i810texmem.c | 1 +
 1 file changed, 1 insertion(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i810/i810texmem.c b/src/mesa/drivers/dri/i810/i810texmem.c
index bb426a4112..6e6b21cf2b 100644
--- a/src/mesa/drivers/dri/i810/i810texmem.c
+++ b/src/mesa/drivers/dri/i810/i810texmem.c
@@ -155,6 +155,7 @@ int i810UploadTexImagesLocked( i810ContextPtr imesa, i810TextureObjectPtr t )
 	return -1;
       }
       
+      assert(t->base.memBlock);
       ofs = t->base.memBlock->ofs;
       t->BufAddr = imesa->i810Screen->tex.map + ofs;
       t->Setup[I810_TEXREG_MI3] = imesa->i810Screen->textureOffset + ofs;
-- 
cgit v1.2.3


From cab77711b3e8d398393677bcefcd413f50503a64 Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Sat, 27 Feb 2010 16:51:17 -0800
Subject: dri: Add assert to check for null pointer dereference.

---
 src/mesa/drivers/dri/common/dri_util.c | 1 +
 1 file changed, 1 insertion(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/common/dri_util.c b/src/mesa/drivers/dri/common/dri_util.c
index a4fd002664..890ae51339 100644
--- a/src/mesa/drivers/dri/common/dri_util.c
+++ b/src/mesa/drivers/dri/common/dri_util.c
@@ -127,6 +127,7 @@ static int driUnbindContext(__DRIcontext *pcp)
     /* Let driver unbind drawable from context */
     (*psp->DriverAPI.UnbindContext)(pcp);
 
+    assert(pdp);
     if (pdp->refcount == 0) {
 	/* ERROR!!! */
 	return GL_FALSE;
-- 
cgit v1.2.3


From 65974f67e16187e1827fa4e46bde3b5df7a5bf02 Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Sat, 27 Feb 2010 17:01:25 -0800
Subject: glsl: Move assert from outside to inside of _slang_gen_swizzle
 function.

---
 src/mesa/shader/slang/slang_codegen.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/shader/slang/slang_codegen.c b/src/mesa/shader/slang/slang_codegen.c
index 9ca5c1372d..6d1cea28a7 100644
--- a/src/mesa/shader/slang/slang_codegen.c
+++ b/src/mesa/shader/slang/slang_codegen.c
@@ -4223,6 +4223,7 @@ _slang_gen_swizzle(slang_ir_node *child, GLuint swizzle)
       n->Store = _slang_new_ir_storage_relative(0,
                                                 swizzle_size(swizzle),
                                                 child->Store);
+      assert(n->Store);
       n->Store->Swizzle = swizzle;
    }
    return n;
@@ -4524,7 +4525,6 @@ _slang_gen_array_element(slang_assemble_ctx * A, slang_operation *oper)
                                         SWIZZLE_NIL);
          n = _slang_gen_swizzle(n, swizzle);
       }
-      assert(n->Store);
       return n;
    }
    else {
-- 
cgit v1.2.3


From bfdee9cc70f21ef34ca8497d30ab72106ce43bd1 Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Sat, 27 Feb 2010 17:19:31 -0800
Subject: mesa: Add assert to check input to memcpy is not null.

---
 src/mesa/main/mipmap.c | 1 +
 1 file changed, 1 insertion(+)

(limited to 'src/mesa')

diff --git a/src/mesa/main/mipmap.c b/src/mesa/main/mipmap.c
index 355af56b41..89b8c5a356 100644
--- a/src/mesa/main/mipmap.c
+++ b/src/mesa/main/mipmap.c
@@ -979,6 +979,7 @@ make_1d_mipmap(GLenum datatype, GLuint comps, GLint border,
 
    if (border) {
       /* copy left-most pixel from source */
+      assert(srcPtr);
       memcpy(dstPtr, srcPtr, bpt);
       /* copy right-most pixel from source */
       memcpy(dstPtr + (dstWidth - 1) * bpt,
-- 
cgit v1.2.3


From 75dba756b2e3d6850b56376d7c183dc3277a563b Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Sat, 27 Feb 2010 20:11:31 -0800
Subject: mesa: Add asserts to check inputs to memcpy.

---
 src/mesa/main/mipmap.c | 3 +++
 1 file changed, 3 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/main/mipmap.c b/src/mesa/main/mipmap.c
index 89b8c5a356..21ee317a31 100644
--- a/src/mesa/main/mipmap.c
+++ b/src/mesa/main/mipmap.c
@@ -979,6 +979,7 @@ make_1d_mipmap(GLenum datatype, GLuint comps, GLint border,
 
    if (border) {
       /* copy left-most pixel from source */
+      assert(dstPtr);
       assert(srcPtr);
       memcpy(dstPtr, srcPtr, bpt);
       /* copy right-most pixel from source */
@@ -1026,6 +1027,8 @@ make_2d_mipmap(GLenum datatype, GLuint comps, GLint border,
    if (border > 0) {
       /* fill in dest border */
       /* lower-left border pixel */
+      assert(dstPtr);
+      assert(srcPtr);
       memcpy(dstPtr, srcPtr, bpt);
       /* lower-right border pixel */
       memcpy(dstPtr + (dstWidth - 1) * bpt,
-- 
cgit v1.2.3


From 909c08d177638a6318382a70eee6e05ed67efd81 Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Sat, 27 Feb 2010 21:57:38 -0800
Subject: dri: Remove dead code.

---
 src/mesa/drivers/dri/common/spantmp.h  | 23 +++++------------------
 src/mesa/drivers/dri/common/spantmp2.h | 23 +++++------------------
 2 files changed, 10 insertions(+), 36 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/common/spantmp.h b/src/mesa/drivers/dri/common/spantmp.h
index d5608b8806..cdc4f422ce 100644
--- a/src/mesa/drivers/dri/common/spantmp.h
+++ b/src/mesa/drivers/dri/common/spantmp.h
@@ -288,7 +288,6 @@ static void TAG(ReadRGBAPixels)( GLcontext *ctx,
    HW_READ_LOCK()
       {
          GLubyte (*rgba)[4] = (GLubyte (*)[4]) values;
-         const GLubyte *mask = NULL; /* remove someday */
 	 GLuint i;
 	 LOCAL_VARS;
 
@@ -296,23 +295,11 @@ static void TAG(ReadRGBAPixels)( GLcontext *ctx,
 
 	 HW_READ_CLIPLOOP()
 	    {
-	       if (mask)
-	       {
-		  for (i=0;i<n;i++)
-		     if (mask[i]) {
-			int fy = Y_FLIP( y[i] );
-			if (CLIPPIXEL( x[i], fy ))
-			   READ_RGBA( rgba[i], x[i], fy );
-		     }
-	       }
-	       else
-	       {
-		  for (i=0;i<n;i++) {
-		     int fy = Y_FLIP( y[i] );
-		     if (CLIPPIXEL( x[i], fy ))
-			READ_RGBA( rgba[i], x[i], fy );
-		  }
-	       }
+               for (i=0;i<n;i++) {
+                  int fy = Y_FLIP( y[i] );
+                  if (CLIPPIXEL( x[i], fy ))
+                     READ_RGBA( rgba[i], x[i], fy );
+               }
 	    }
 	 HW_ENDCLIPLOOP();
       }
diff --git a/src/mesa/drivers/dri/common/spantmp2.h b/src/mesa/drivers/dri/common/spantmp2.h
index c152226902..98422a8564 100644
--- a/src/mesa/drivers/dri/common/spantmp2.h
+++ b/src/mesa/drivers/dri/common/spantmp2.h
@@ -805,7 +805,6 @@ static void TAG(ReadRGBAPixels)( GLcontext *ctx,
    HW_READ_LOCK()
       {
          GLubyte (*rgba)[4] = (GLubyte (*)[4]) values;
-         GLubyte *mask = NULL; /* remove someday */
 	 GLint i;
 	 LOCAL_VARS;
 
@@ -813,23 +812,11 @@ static void TAG(ReadRGBAPixels)( GLcontext *ctx,
 
 	 HW_READ_CLIPLOOP()
 	    {
-	       if (mask)
-	       {
-		  for (i=0;i<n;i++)
-		     if (mask[i]) {
-			int fy = Y_FLIP( y[i] );
-			if (CLIPPIXEL( x[i], fy ))
-			   READ_RGBA( rgba[i], x[i], fy );
-		     }
-	       }
-	       else
-	       {
-		  for (i=0;i<n;i++) {
-		     int fy = Y_FLIP( y[i] );
-		     if (CLIPPIXEL( x[i], fy ))
-			READ_RGBA( rgba[i], x[i], fy );
-		  }
-	       }
+               for (i=0;i<n;i++) {
+                  int fy = Y_FLIP( y[i] );
+                     if (CLIPPIXEL( x[i], fy ))
+                        READ_RGBA( rgba[i], x[i], fy );
+               }
 	    }
 	 HW_ENDCLIPLOOP();
       }
-- 
cgit v1.2.3


From 949587d1692f4e528f54b598ffc22a1906e4baf3 Mon Sep 17 00:00:00 2001
From: Andrew Randrianasulu <randrianasulu@gmail.com>
Date: Mon, 1 Mar 2010 01:46:32 +0100
Subject: dri/nouveau: Allow to render to XRGB8888 textures.

Signed-off-by: Francisco Jerez <currojerez@riseup.net>
---
 src/mesa/drivers/dri/nouveau/nouveau_fbo.c | 2 ++
 1 file changed, 2 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_fbo.c b/src/mesa/drivers/dri/nouveau/nouveau_fbo.c
index 1db8c5dd8d..846478650e 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_fbo.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_fbo.c
@@ -215,6 +215,8 @@ get_tex_format(struct gl_texture_image *ti)
 	switch (ti->TexFormat) {
 	case MESA_FORMAT_ARGB8888:
 		return GL_RGBA8;
+	case MESA_FORMAT_XRGB8888:
+		return GL_RGB8;
 	case MESA_FORMAT_RGB565:
 		return GL_RGB5;
 	default:
-- 
cgit v1.2.3


From 394672659ddc1175747bae29fbf9957365d61e4c Mon Sep 17 00:00:00 2001
From: Andrew Randrianasulu <randrianasulu@gmail.com>
Date: Mon, 1 Mar 2010 01:48:29 +0100
Subject: dri/nouveau: Add two stencil operation cases in nv04_state_raster.c.

Signed-off-by: Francisco Jerez <currojerez@riseup.net>
---
 src/mesa/drivers/dri/nouveau/nv04_state_raster.c | 4 ++++
 1 file changed, 4 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/nouveau/nv04_state_raster.c b/src/mesa/drivers/dri/nouveau/nv04_state_raster.c
index 5e3788d185..6d0b262a4d 100644
--- a/src/mesa/drivers/dri/nouveau/nv04_state_raster.c
+++ b/src/mesa/drivers/dri/nouveau/nv04_state_raster.c
@@ -61,6 +61,10 @@ get_stencil_op(unsigned op)
 	switch (op) {
 	case GL_KEEP:
 		return 0x1;
+	case GL_ZERO:
+		return 0x2;
+	case GL_REPLACE:
+		return 0x3;
 	case GL_INCR:
 		return 0x4;
 	case GL_DECR:
-- 
cgit v1.2.3


From c7955f1341fd01be68c73b8a79c4b720b0645064 Mon Sep 17 00:00:00 2001
From: Francisco Jerez <currojerez@riseup.net>
Date: Mon, 1 Mar 2010 01:53:22 +0100
Subject: dri/nouveau: Fix up the ADD texture environment on nv0x.

---
 src/mesa/drivers/dri/nouveau/nv04_context.c      | 1 +
 src/mesa/drivers/dri/nouveau/nv04_state_raster.c | 2 --
 2 files changed, 1 insertion(+), 2 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/nouveau/nv04_context.c b/src/mesa/drivers/dri/nouveau/nv04_context.c
index 1056171342..1acd41de54 100644
--- a/src/mesa/drivers/dri/nouveau/nv04_context.c
+++ b/src/mesa/drivers/dri/nouveau/nv04_context.c
@@ -40,6 +40,7 @@ nv04_context_engine(GLcontext *ctx)
 
 	if (ctx->Texture.Unit[0].EnvMode == GL_COMBINE ||
 	    ctx->Texture.Unit[0].EnvMode == GL_BLEND ||
+	    ctx->Texture.Unit[0].EnvMode == GL_ADD ||
 	    ctx->Texture.Unit[1]._ReallyEnabled ||
 	    ctx->Stencil.Enabled)
 		fahrenheit = hw->eng3dm;
diff --git a/src/mesa/drivers/dri/nouveau/nv04_state_raster.c b/src/mesa/drivers/dri/nouveau/nv04_state_raster.c
index 6d0b262a4d..b52922ea11 100644
--- a/src/mesa/drivers/dri/nouveau/nv04_state_raster.c
+++ b/src/mesa/drivers/dri/nouveau/nv04_state_raster.c
@@ -82,8 +82,6 @@ get_texenv_mode(unsigned mode)
 	switch (mode) {
 	case GL_REPLACE:
 		return 0x1;
-	case GL_ADD:
-		return 0x2;
 	case GL_DECAL:
 		return 0x3;
 	case GL_MODULATE:
-- 
cgit v1.2.3


From e7ca0e126e1b838d7650eb480adfd548723bcea9 Mon Sep 17 00:00:00 2001
From: Francisco Jerez <currojerez@riseup.net>
Date: Mon, 1 Mar 2010 01:56:38 +0100
Subject: dri/nouveau: Combine the dummy texture more deterministically on
 nv0x.

---
 src/mesa/drivers/dri/nouveau/nv04_state_raster.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/nouveau/nv04_state_raster.c b/src/mesa/drivers/dri/nouveau/nv04_state_raster.c
index b52922ea11..89c6753694 100644
--- a/src/mesa/drivers/dri/nouveau/nv04_state_raster.c
+++ b/src/mesa/drivers/dri/nouveau/nv04_state_raster.c
@@ -300,7 +300,10 @@ nv04_emit_blend(GLcontext *ctx, int emit)
 			blend |= NV04_TEXTURED_TRIANGLE_BLEND_SHADE_MODE_FLAT;
 
 		/* Texture environment. */
-		blend |= get_texenv_mode(ctx->Texture.Unit[0].EnvMode);
+		if (ctx->Texture._EnabledUnits)
+			blend |= get_texenv_mode(ctx->Texture.Unit[0].EnvMode);
+		else
+			blend |= get_texenv_mode(GL_MODULATE);
 
 		/* Fog. */
 		if (ctx->Fog.Enabled)
-- 
cgit v1.2.3


From 382d1d370bcf58303ffd9bc0606619e57ea3f302 Mon Sep 17 00:00:00 2001
From: José Fonseca <jfonseca@vmware.com>
Date: Mon, 1 Mar 2010 16:25:04 +0000
Subject: mesa: Use PIPE_FORMAT_R8G8B8A8_UNORM_REV where appropriate.

---
 src/mesa/state_tracker/st_format.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/state_tracker/st_format.c b/src/mesa/state_tracker/st_format.c
index c8f9ac3038..f24d6c8686 100644
--- a/src/mesa/state_tracker/st_format.c
+++ b/src/mesa/state_tracker/st_format.c
@@ -300,7 +300,7 @@ default_rgba_format(struct pipe_screen *screen,
    static const enum pipe_format colorFormats[] = {
       PIPE_FORMAT_A8R8G8B8_UNORM,
       PIPE_FORMAT_B8G8R8A8_UNORM,
-      PIPE_FORMAT_R8G8B8A8_UNORM,
+      PIPE_FORMAT_R8G8B8A8_UNORM_REV,
       PIPE_FORMAT_R5G6B5_UNORM
    };
    uint i;
@@ -327,7 +327,7 @@ default_rgb_format(struct pipe_screen *screen,
       PIPE_FORMAT_R8G8B8X8_UNORM,
       PIPE_FORMAT_A8R8G8B8_UNORM,
       PIPE_FORMAT_B8G8R8A8_UNORM,
-      PIPE_FORMAT_R8G8B8A8_UNORM,
+      PIPE_FORMAT_R8G8B8A8_UNORM_REV,
       PIPE_FORMAT_R5G6B5_UNORM
    };
    uint i;
@@ -680,7 +680,7 @@ GLboolean
 st_equal_formats(enum pipe_format pFormat, GLenum format, GLenum type)
 {
    switch (pFormat) {
-   case PIPE_FORMAT_R8G8B8A8_UNORM:
+   case PIPE_FORMAT_R8G8B8A8_UNORM_REV:
       return format == GL_RGBA && type == GL_UNSIGNED_BYTE;
    case PIPE_FORMAT_B8G8R8A8_UNORM:
       return format == GL_BGRA && type == GL_UNSIGNED_BYTE;
-- 
cgit v1.2.3


From 18603a2f07b99bfdbaab35b38b292233fc3e7689 Mon Sep 17 00:00:00 2001
From: Roland Scheidegger <sroland@vmware.com>
Date: Mon, 1 Mar 2010 18:36:19 +0100
Subject: st/mesa: fix mesa statetracker adaption to new vertex elements
 interface

---
 src/mesa/state_tracker/st_draw.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c
index 397dddbb47..15d1299a9e 100644
--- a/src/mesa/state_tracker/st_draw.c
+++ b/src/mesa/state_tracker/st_draw.c
@@ -57,6 +57,7 @@
 #include "pipe/p_defines.h"
 #include "util/u_inlines.h"
 #include "util/u_format.h"
+#include "cso_cache/cso_context.h"
 
 
 static GLuint double_types[4] = {
@@ -600,7 +601,7 @@ st_draw_vbo(GLcontext *ctx,
 #endif
 
    pipe->set_vertex_buffers(pipe, num_vbuffers, vbuffer);
-   pipe->set_vertex_elements(pipe, num_velements, velements);
+   cso_set_vertex_elements(ctx->st->cso_context, num_velements, velements);
 
    if (num_vbuffers == 0 || num_velements == 0)
       return;
-- 
cgit v1.2.3


From 7d1a79a04eb1266649956f6924f25071d85e20fe Mon Sep 17 00:00:00 2001
From: José Fonseca <jfonseca@vmware.com>
Date: Mon, 1 Mar 2010 18:10:23 +0000
Subject: mesa: Rename pipe formats.

---
 src/mesa/state_tracker/st_cb_drawpixels.c |   8 +-
 src/mesa/state_tracker/st_cb_fbo.c        |  14 +--
 src/mesa/state_tracker/st_cb_readpixels.c |  18 ++--
 src/mesa/state_tracker/st_draw.c          |   2 +-
 src/mesa/state_tracker/st_extensions.c    |  16 ++--
 src/mesa/state_tracker/st_format.c        | 144 +++++++++++++++---------------
 6 files changed, 101 insertions(+), 101 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c b/src/mesa/state_tracker/st_cb_drawpixels.c
index ba28a224e8..98453321f8 100644
--- a/src/mesa/state_tracker/st_cb_drawpixels.c
+++ b/src/mesa/state_tracker/st_cb_drawpixels.c
@@ -713,7 +713,7 @@ draw_stencil_pixels(GLcontext *ctx, GLint x, GLint y,
                   memcpy(dest, sValues, spanWidth);
                }
                break;
-            case PIPE_FORMAT_S8Z24_UNORM:
+            case PIPE_FORMAT_Z24S8_UNORM:
                if (format == GL_DEPTH_STENCIL) {
                   uint *dest = (uint *) (stmap + spanY * pt->stride + spanX*4);
                   GLint k;
@@ -731,7 +731,7 @@ draw_stencil_pixels(GLcontext *ctx, GLint x, GLint y,
                   }
                }
                break;
-            case PIPE_FORMAT_Z24S8_UNORM:
+            case PIPE_FORMAT_S8Z24_UNORM:
                if (format == GL_DEPTH_STENCIL) {
                   uint *dest = (uint *) (stmap + spanY * pt->stride + spanX*4);
                   GLint k;
@@ -879,7 +879,7 @@ copy_stencil_pixels(GLcontext *ctx, GLint srcx, GLint srcy,
       src = buffer + i * width;
 
       switch (ptDraw->texture->format) {
-      case PIPE_FORMAT_S8Z24_UNORM:
+      case PIPE_FORMAT_Z24S8_UNORM:
          {
             uint *dst4 = (uint *) dst;
             int j;
@@ -890,7 +890,7 @@ copy_stencil_pixels(GLcontext *ctx, GLint srcx, GLint srcy,
             }
          }
          break;
-      case PIPE_FORMAT_Z24S8_UNORM:
+      case PIPE_FORMAT_S8Z24_UNORM:
          {
             uint *dst4 = (uint *) dst;
             int j;
diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c
index ea040bdc4f..8fded0c69f 100644
--- a/src/mesa/state_tracker/st_cb_fbo.c
+++ b/src/mesa/state_tracker/st_cb_fbo.c
@@ -238,13 +238,13 @@ st_new_renderbuffer_fb(enum pipe_format format, int samples, boolean sw)
    strb->software = sw;
    
    switch (format) {
-   case PIPE_FORMAT_A8R8G8B8_UNORM:
    case PIPE_FORMAT_B8G8R8A8_UNORM:
-   case PIPE_FORMAT_X8R8G8B8_UNORM:
+   case PIPE_FORMAT_A8R8G8B8_UNORM:
    case PIPE_FORMAT_B8G8R8X8_UNORM:
-   case PIPE_FORMAT_A1R5G5B5_UNORM:
-   case PIPE_FORMAT_A4R4G4B4_UNORM:
-   case PIPE_FORMAT_R5G6B5_UNORM:
+   case PIPE_FORMAT_X8R8G8B8_UNORM:
+   case PIPE_FORMAT_B5G5R5A1_UNORM:
+   case PIPE_FORMAT_B4G4R4A4_UNORM:
+   case PIPE_FORMAT_B5G6R5_UNORM:
       strb->Base.InternalFormat = GL_RGBA;
       break;
    case PIPE_FORMAT_Z16_UNORM:
@@ -253,10 +253,10 @@ st_new_renderbuffer_fb(enum pipe_format format, int samples, boolean sw)
    case PIPE_FORMAT_Z32_UNORM:
       strb->Base.InternalFormat = GL_DEPTH_COMPONENT32;
       break;
-   case PIPE_FORMAT_S8Z24_UNORM:
    case PIPE_FORMAT_Z24S8_UNORM:
-   case PIPE_FORMAT_X8Z24_UNORM:
+   case PIPE_FORMAT_S8Z24_UNORM:
    case PIPE_FORMAT_Z24X8_UNORM:
+   case PIPE_FORMAT_X8Z24_UNORM:
       strb->Base.InternalFormat = GL_DEPTH24_STENCIL8_EXT;
       break;
    case PIPE_FORMAT_S8_UNORM:
diff --git a/src/mesa/state_tracker/st_cb_readpixels.c b/src/mesa/state_tracker/st_cb_readpixels.c
index 6b1fdf3ecd..952d9ce915 100644
--- a/src/mesa/state_tracker/st_cb_readpixels.c
+++ b/src/mesa/state_tracker/st_cb_readpixels.c
@@ -108,7 +108,7 @@ st_read_stencil_pixels(GLcontext *ctx, GLint x, GLint y,
             memcpy(sValues, src, width);
          }
          break;
-      case PIPE_FORMAT_S8Z24_UNORM:
+      case PIPE_FORMAT_Z24S8_UNORM:
          if (format == GL_DEPTH_STENCIL) {
             const uint *src = (uint *) (stmap + srcY * pt->stride);
             const GLfloat scale = 1.0f / (0xffffff);
@@ -126,7 +126,7 @@ st_read_stencil_pixels(GLcontext *ctx, GLint x, GLint y,
             }
          }
          break;
-      case PIPE_FORMAT_Z24S8_UNORM:
+      case PIPE_FORMAT_S8Z24_UNORM:
          if (format == GL_DEPTH_STENCIL) {
             const uint *src = (uint *) (stmap + srcY * pt->stride);
             const GLfloat scale = 1.0f / (0xffffff);
@@ -214,15 +214,15 @@ st_fast_readpixels(GLcontext *ctx, struct st_renderbuffer *strb,
    if (ctx->_ImageTransferState)
       return GL_FALSE;
 
-   if (strb->format == PIPE_FORMAT_A8R8G8B8_UNORM &&
+   if (strb->format == PIPE_FORMAT_B8G8R8A8_UNORM &&
        format == GL_RGBA && type == GL_UNSIGNED_BYTE) {
       combo = A8R8G8B8_UNORM_TO_RGBA_UBYTE;
    }
-   else if (strb->format == PIPE_FORMAT_A8R8G8B8_UNORM &&
+   else if (strb->format == PIPE_FORMAT_B8G8R8A8_UNORM &&
             format == GL_RGB && type == GL_UNSIGNED_BYTE) {
       combo = A8R8G8B8_UNORM_TO_RGB_UBYTE;
    }
-   else if (strb->format == PIPE_FORMAT_A8R8G8B8_UNORM &&
+   else if (strb->format == PIPE_FORMAT_B8G8R8A8_UNORM &&
             format == GL_BGRA && type == GL_UNSIGNED_INT_8_8_8_8_REV) {
       combo = A8R8G8B8_UNORM_TO_BGRA_UINT;
    }
@@ -429,8 +429,8 @@ st_readpixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height,
       const GLint dstStride = _mesa_image_row_stride(&clippedPacking, width,
                                                      format, type);
 
-      if (trans->texture->format == PIPE_FORMAT_S8Z24_UNORM ||
-          trans->texture->format == PIPE_FORMAT_X8Z24_UNORM) {
+      if (trans->texture->format == PIPE_FORMAT_Z24S8_UNORM ||
+          trans->texture->format == PIPE_FORMAT_Z24X8_UNORM) {
          if (format == GL_DEPTH_COMPONENT) {
             for (i = 0; i < height; i++) {
                GLuint ztemp[MAX_WIDTH];
@@ -461,8 +461,8 @@ st_readpixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height,
             }
          }
       }
-      else if (trans->texture->format == PIPE_FORMAT_Z24S8_UNORM ||
-               trans->texture->format == PIPE_FORMAT_Z24X8_UNORM) {
+      else if (trans->texture->format == PIPE_FORMAT_S8Z24_UNORM ||
+               trans->texture->format == PIPE_FORMAT_X8Z24_UNORM) {
          if (format == GL_DEPTH_COMPONENT) {
             for (i = 0; i < height; i++) {
                GLuint ztemp[MAX_WIDTH];
diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c
index 4b48c168e9..32b9a473cf 100644
--- a/src/mesa/state_tracker/st_draw.c
+++ b/src/mesa/state_tracker/st_draw.c
@@ -183,7 +183,7 @@ st_pipe_vertex_format(GLenum type, GLuint size, GLenum format,
       /* this is an odd-ball case */
       assert(type == GL_UNSIGNED_BYTE);
       assert(normalized);
-      return PIPE_FORMAT_B8G8R8A8_UNORM;
+      return PIPE_FORMAT_A8R8G8B8_UNORM;
    }
 
    if (normalized) {
diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
index e9ee65576d..79be833768 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -270,28 +270,28 @@ void st_init_extensions(struct st_context *st)
    /* GL_EXT_packed_depth_stencil requires both the ability to render to
     * a depth/stencil buffer and texture from depth/stencil source.
     */
-   if (screen->is_format_supported(screen, PIPE_FORMAT_Z24S8_UNORM,
+   if (screen->is_format_supported(screen, PIPE_FORMAT_S8Z24_UNORM,
                                    PIPE_TEXTURE_2D, 
                                    PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0) &&
-       screen->is_format_supported(screen, PIPE_FORMAT_Z24S8_UNORM,
+       screen->is_format_supported(screen, PIPE_FORMAT_S8Z24_UNORM,
                                    PIPE_TEXTURE_2D, 
                                    PIPE_TEXTURE_USAGE_SAMPLER, 0)) {
       ctx->Extensions.EXT_packed_depth_stencil = GL_TRUE;
    }
-   else if (screen->is_format_supported(screen, PIPE_FORMAT_S8Z24_UNORM,
+   else if (screen->is_format_supported(screen, PIPE_FORMAT_Z24S8_UNORM,
                                         PIPE_TEXTURE_2D, 
                                         PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0) &&
-            screen->is_format_supported(screen, PIPE_FORMAT_S8Z24_UNORM,
+            screen->is_format_supported(screen, PIPE_FORMAT_Z24S8_UNORM,
                                         PIPE_TEXTURE_2D, 
                                         PIPE_TEXTURE_USAGE_SAMPLER, 0)) {
       ctx->Extensions.EXT_packed_depth_stencil = GL_TRUE;
    }
 
    /* sRGB support */
-   if (screen->is_format_supported(screen, PIPE_FORMAT_R8G8B8A8_SRGB,
+   if (screen->is_format_supported(screen, PIPE_FORMAT_A8B8G8R8_SRGB,
                                    PIPE_TEXTURE_2D, 
                                    PIPE_TEXTURE_USAGE_SAMPLER, 0) ||
-      screen->is_format_supported(screen, PIPE_FORMAT_A8R8G8B8_SRGB,
+      screen->is_format_supported(screen, PIPE_FORMAT_B8G8R8A8_SRGB,
                                    PIPE_TEXTURE_2D, 
                                    PIPE_TEXTURE_USAGE_SAMPLER, 0)) {
       ctx->Extensions.EXT_texture_sRGB = GL_TRUE;
@@ -310,10 +310,10 @@ void st_init_extensions(struct st_context *st)
    }
 
    /* ycbcr support */
-   if (screen->is_format_supported(screen, PIPE_FORMAT_YCBCR, 
+   if (screen->is_format_supported(screen, PIPE_FORMAT_UYVY, 
                                    PIPE_TEXTURE_2D, 
                                    PIPE_TEXTURE_USAGE_SAMPLER, 0) ||
-       screen->is_format_supported(screen, PIPE_FORMAT_YCBCR_REV, 
+       screen->is_format_supported(screen, PIPE_FORMAT_YUYV, 
                                    PIPE_TEXTURE_2D, 
                                    PIPE_TEXTURE_USAGE_SAMPLER, 0)) {
       ctx->Extensions.MESA_ycbcr_texture = GL_TRUE;
diff --git a/src/mesa/state_tracker/st_format.c b/src/mesa/state_tracker/st_format.c
index f24d6c8686..9ae0c9f9ba 100644
--- a/src/mesa/state_tracker/st_format.c
+++ b/src/mesa/state_tracker/st_format.c
@@ -72,12 +72,12 @@ st_format_datatype(enum pipe_format format)
    assert(desc);
 
    if (desc->layout == UTIL_FORMAT_LAYOUT_PLAIN) {
-      if (format == PIPE_FORMAT_A1R5G5B5_UNORM ||
-          format == PIPE_FORMAT_R5G6B5_UNORM) {
+      if (format == PIPE_FORMAT_B5G5R5A1_UNORM ||
+          format == PIPE_FORMAT_B5G6R5_UNORM) {
          return GL_UNSIGNED_SHORT;
       }
-      else if (format == PIPE_FORMAT_S8Z24_UNORM ||
-               format == PIPE_FORMAT_Z24S8_UNORM) {
+      else if (format == PIPE_FORMAT_Z24S8_UNORM ||
+               format == PIPE_FORMAT_S8Z24_UNORM) {
          return GL_UNSIGNED_INT_24_8;
       }
       else {
@@ -103,10 +103,10 @@ st_format_datatype(enum pipe_format format)
          }
       }
    }
-   else if (format == PIPE_FORMAT_YCBCR) {
+   else if (format == PIPE_FORMAT_UYVY) {
       return GL_UNSIGNED_SHORT;
    }
-   else if (format == PIPE_FORMAT_YCBCR_REV) {
+   else if (format == PIPE_FORMAT_YUYV) {
       return GL_UNSIGNED_SHORT;
    }
    else {
@@ -129,17 +129,17 @@ st_mesa_format_to_pipe_format(gl_format mesaFormat)
       /* fix this */
    case MESA_FORMAT_ARGB8888_REV:
    case MESA_FORMAT_ARGB8888:
-      return PIPE_FORMAT_A8R8G8B8_UNORM;
+      return PIPE_FORMAT_B8G8R8A8_UNORM;
    case MESA_FORMAT_XRGB8888:
-      return PIPE_FORMAT_X8R8G8B8_UNORM;
+      return PIPE_FORMAT_B8G8R8X8_UNORM;
    case MESA_FORMAT_ARGB1555:
-      return PIPE_FORMAT_A1R5G5B5_UNORM;
+      return PIPE_FORMAT_B5G5R5A1_UNORM;
    case MESA_FORMAT_ARGB4444:
-      return PIPE_FORMAT_A4R4G4B4_UNORM;
+      return PIPE_FORMAT_B4G4R4A4_UNORM;
    case MESA_FORMAT_RGB565:
-      return PIPE_FORMAT_R5G6B5_UNORM;
+      return PIPE_FORMAT_B5G6R5_UNORM;
    case MESA_FORMAT_AL88:
-      return PIPE_FORMAT_A8L8_UNORM;
+      return PIPE_FORMAT_L8A8_UNORM;
    case MESA_FORMAT_A8:
       return PIPE_FORMAT_A8_UNORM;
    case MESA_FORMAT_L8:
@@ -151,11 +151,11 @@ st_mesa_format_to_pipe_format(gl_format mesaFormat)
    case MESA_FORMAT_Z32:
       return PIPE_FORMAT_Z32_UNORM;
    case MESA_FORMAT_Z24_S8:
-      return PIPE_FORMAT_Z24S8_UNORM;
-   case MESA_FORMAT_S8_Z24:
       return PIPE_FORMAT_S8Z24_UNORM;
+   case MESA_FORMAT_S8_Z24:
+      return PIPE_FORMAT_Z24S8_UNORM;
    case MESA_FORMAT_YCBCR:
-      return PIPE_FORMAT_YCBCR;
+      return PIPE_FORMAT_UYVY;
 #if FEATURE_texture_s3tc
    case MESA_FORMAT_RGB_DXT1:
       return PIPE_FORMAT_DXT1_RGB;
@@ -178,15 +178,15 @@ st_mesa_format_to_pipe_format(gl_format mesaFormat)
 #endif
 #if FEATURE_EXT_texture_sRGB
    case MESA_FORMAT_SLA8:
-      return PIPE_FORMAT_A8L8_SRGB;
+      return PIPE_FORMAT_L8A8_SRGB;
    case MESA_FORMAT_SL8:
       return PIPE_FORMAT_L8_SRGB;
    case MESA_FORMAT_SRGB8:
       return PIPE_FORMAT_R8G8B8_SRGB;
    case MESA_FORMAT_SRGBA8:
-      return PIPE_FORMAT_R8G8B8A8_SRGB;
+      return PIPE_FORMAT_A8B8G8R8_SRGB;
    case MESA_FORMAT_SARGB8:
-      return PIPE_FORMAT_A8R8G8B8_SRGB;
+      return PIPE_FORMAT_B8G8R8A8_SRGB;
 #endif
    default:
       assert(0);
@@ -202,21 +202,21 @@ gl_format
 st_pipe_format_to_mesa_format(enum pipe_format format)
 {
    switch (format) {
-   case PIPE_FORMAT_A8R8G8B8_UNORM:
+   case PIPE_FORMAT_B8G8R8A8_UNORM:
       return MESA_FORMAT_ARGB8888;
-   case PIPE_FORMAT_X8R8G8B8_UNORM:
+   case PIPE_FORMAT_B8G8R8X8_UNORM:
       return MESA_FORMAT_XRGB8888;
-   case PIPE_FORMAT_B8G8R8A8_UNORM:
+   case PIPE_FORMAT_A8R8G8B8_UNORM:
       return MESA_FORMAT_ARGB8888_REV;
-   case PIPE_FORMAT_B8G8R8X8_UNORM:
+   case PIPE_FORMAT_X8R8G8B8_UNORM:
       return MESA_FORMAT_XRGB8888_REV;
-   case PIPE_FORMAT_A1R5G5B5_UNORM:
+   case PIPE_FORMAT_B5G5R5A1_UNORM:
       return MESA_FORMAT_ARGB1555;
-   case PIPE_FORMAT_A4R4G4B4_UNORM:
+   case PIPE_FORMAT_B4G4R4A4_UNORM:
       return MESA_FORMAT_ARGB4444;
-   case PIPE_FORMAT_R5G6B5_UNORM:
+   case PIPE_FORMAT_B5G6R5_UNORM:
       return MESA_FORMAT_RGB565;
-   case PIPE_FORMAT_A8L8_UNORM:
+   case PIPE_FORMAT_L8A8_UNORM:
       return MESA_FORMAT_AL88;
    case PIPE_FORMAT_A8_UNORM:
       return MESA_FORMAT_A8;
@@ -234,18 +234,18 @@ st_pipe_format_to_mesa_format(enum pipe_format format)
       return MESA_FORMAT_Z16;
    case PIPE_FORMAT_Z32_UNORM:
       return MESA_FORMAT_Z32;
-   case PIPE_FORMAT_Z24S8_UNORM:
+   case PIPE_FORMAT_S8Z24_UNORM:
       return MESA_FORMAT_Z24_S8;
-   case PIPE_FORMAT_Z24X8_UNORM:
-      return MESA_FORMAT_Z24_X8;
    case PIPE_FORMAT_X8Z24_UNORM:
+      return MESA_FORMAT_Z24_X8;
+   case PIPE_FORMAT_Z24X8_UNORM:
       return MESA_FORMAT_X8_Z24;
-   case PIPE_FORMAT_S8Z24_UNORM:
+   case PIPE_FORMAT_Z24S8_UNORM:
       return MESA_FORMAT_S8_Z24;
 
-   case PIPE_FORMAT_YCBCR:
+   case PIPE_FORMAT_UYVY:
       return MESA_FORMAT_YCBCR;
-   case PIPE_FORMAT_YCBCR_REV:
+   case PIPE_FORMAT_YUYV:
       return MESA_FORMAT_YCBCR_REV;
 
 #if FEATURE_texture_s3tc
@@ -270,15 +270,15 @@ st_pipe_format_to_mesa_format(enum pipe_format format)
 #endif
 
 #if FEATURE_EXT_texture_sRGB
-   case PIPE_FORMAT_A8L8_SRGB:
+   case PIPE_FORMAT_L8A8_SRGB:
       return MESA_FORMAT_SLA8;
    case PIPE_FORMAT_L8_SRGB:
       return MESA_FORMAT_SL8;
    case PIPE_FORMAT_R8G8B8_SRGB:
       return MESA_FORMAT_SRGB8;
-   case PIPE_FORMAT_R8G8B8A8_SRGB:
+   case PIPE_FORMAT_A8B8G8R8_SRGB:
       return MESA_FORMAT_SRGBA8;
-   case PIPE_FORMAT_A8R8G8B8_SRGB:
+   case PIPE_FORMAT_B8G8R8A8_SRGB:
       return MESA_FORMAT_SARGB8;
 #endif
    default:
@@ -298,10 +298,10 @@ default_rgba_format(struct pipe_screen *screen,
                     unsigned geom_flags)
 {
    static const enum pipe_format colorFormats[] = {
-      PIPE_FORMAT_A8R8G8B8_UNORM,
       PIPE_FORMAT_B8G8R8A8_UNORM,
-      PIPE_FORMAT_R8G8B8A8_UNORM_REV,
-      PIPE_FORMAT_R5G6B5_UNORM
+      PIPE_FORMAT_A8R8G8B8_UNORM,
+      PIPE_FORMAT_A8B8G8R8_UNORM,
+      PIPE_FORMAT_B5G6R5_UNORM
    };
    uint i;
    for (i = 0; i < Elements(colorFormats); i++) {
@@ -322,13 +322,13 @@ default_rgb_format(struct pipe_screen *screen,
                    unsigned geom_flags)
 {
    static const enum pipe_format colorFormats[] = {
-      PIPE_FORMAT_X8R8G8B8_UNORM,
       PIPE_FORMAT_B8G8R8X8_UNORM,
-      PIPE_FORMAT_R8G8B8X8_UNORM,
-      PIPE_FORMAT_A8R8G8B8_UNORM,
+      PIPE_FORMAT_X8R8G8B8_UNORM,
+      PIPE_FORMAT_X8B8G8R8_UNORM,
       PIPE_FORMAT_B8G8R8A8_UNORM,
-      PIPE_FORMAT_R8G8B8A8_UNORM_REV,
-      PIPE_FORMAT_R5G6B5_UNORM
+      PIPE_FORMAT_A8R8G8B8_UNORM,
+      PIPE_FORMAT_A8B8G8R8_UNORM,
+      PIPE_FORMAT_B5G6R5_UNORM
    };
    uint i;
    for (i = 0; i < Elements(colorFormats); i++) {
@@ -349,9 +349,9 @@ default_srgba_format(struct pipe_screen *screen,
                     unsigned geom_flags)
 {
    static const enum pipe_format colorFormats[] = {
-      PIPE_FORMAT_A8R8G8B8_SRGB,
       PIPE_FORMAT_B8G8R8A8_SRGB,
-      PIPE_FORMAT_R8G8B8A8_SRGB,
+      PIPE_FORMAT_A8R8G8B8_SRGB,
+      PIPE_FORMAT_A8B8G8R8_SRGB,
    };
    uint i;
    for (i = 0; i < Elements(colorFormats); i++) {
@@ -393,8 +393,8 @@ default_depth_format(struct pipe_screen *screen,
    static const enum pipe_format zFormats[] = {
       PIPE_FORMAT_Z16_UNORM,
       PIPE_FORMAT_Z32_UNORM,
-      PIPE_FORMAT_S8Z24_UNORM,
-      PIPE_FORMAT_Z24S8_UNORM
+      PIPE_FORMAT_Z24S8_UNORM,
+      PIPE_FORMAT_S8Z24_UNORM
    };
    uint i;
    for (i = 0; i < Elements(zFormats); i++) {
@@ -439,13 +439,13 @@ st_choose_format(struct pipe_screen *screen, GLenum internalFormat,
 
    case GL_RGBA4:
    case GL_RGBA2:
-      if (screen->is_format_supported( screen, PIPE_FORMAT_A4R4G4B4_UNORM, target, tex_usage, geom_flags ))
-         return PIPE_FORMAT_A4R4G4B4_UNORM;
+      if (screen->is_format_supported( screen, PIPE_FORMAT_B4G4R4A4_UNORM, target, tex_usage, geom_flags ))
+         return PIPE_FORMAT_B4G4R4A4_UNORM;
       return default_rgba_format( screen, target, tex_usage, geom_flags );
 
    case GL_RGB5_A1:
-      if (screen->is_format_supported( screen, PIPE_FORMAT_A1R5G5B5_UNORM, target, tex_usage, geom_flags ))
-         return PIPE_FORMAT_A1R5G5B5_UNORM;
+      if (screen->is_format_supported( screen, PIPE_FORMAT_B5G5R5A1_UNORM, target, tex_usage, geom_flags ))
+         return PIPE_FORMAT_B5G5R5A1_UNORM;
       return default_rgba_format( screen, target, tex_usage, geom_flags );
 
    case GL_RGB8:
@@ -457,10 +457,10 @@ st_choose_format(struct pipe_screen *screen, GLenum internalFormat,
    case GL_RGB5:
    case GL_RGB4:
    case GL_R3_G3_B2:
-      if (screen->is_format_supported( screen, PIPE_FORMAT_R5G6B5_UNORM, target, tex_usage, geom_flags ))
-         return PIPE_FORMAT_R5G6B5_UNORM;
-      if (screen->is_format_supported( screen, PIPE_FORMAT_A1R5G5B5_UNORM, target, tex_usage, geom_flags ))
-         return PIPE_FORMAT_A1R5G5B5_UNORM;
+      if (screen->is_format_supported( screen, PIPE_FORMAT_B5G6R5_UNORM, target, tex_usage, geom_flags ))
+         return PIPE_FORMAT_B5G6R5_UNORM;
+      if (screen->is_format_supported( screen, PIPE_FORMAT_B5G5R5A1_UNORM, target, tex_usage, geom_flags ))
+         return PIPE_FORMAT_B5G5R5A1_UNORM;
       return default_rgba_format( screen, target, tex_usage, geom_flags );
 
    case GL_ALPHA:
@@ -493,8 +493,8 @@ st_choose_format(struct pipe_screen *screen, GLenum internalFormat,
    case GL_LUMINANCE12_ALPHA12:
    case GL_LUMINANCE16_ALPHA16:
    case GL_COMPRESSED_LUMINANCE_ALPHA:
-      if (screen->is_format_supported( screen, PIPE_FORMAT_A8L8_UNORM, target, tex_usage, geom_flags ))
-         return PIPE_FORMAT_A8L8_UNORM;
+      if (screen->is_format_supported( screen, PIPE_FORMAT_L8A8_UNORM, target, tex_usage, geom_flags ))
+         return PIPE_FORMAT_L8A8_UNORM;
       return default_rgba_format( screen, target, tex_usage, geom_flags );
 
    case GL_INTENSITY:
@@ -508,13 +508,13 @@ st_choose_format(struct pipe_screen *screen, GLenum internalFormat,
       return default_rgba_format( screen, target, tex_usage, geom_flags );
 
    case GL_YCBCR_MESA:
-      if (screen->is_format_supported(screen, PIPE_FORMAT_YCBCR,
+      if (screen->is_format_supported(screen, PIPE_FORMAT_UYVY,
                                       target, tex_usage, geom_flags)) {
-         return PIPE_FORMAT_YCBCR;
+         return PIPE_FORMAT_UYVY;
       }
-      if (screen->is_format_supported(screen, PIPE_FORMAT_YCBCR_REV,
+      if (screen->is_format_supported(screen, PIPE_FORMAT_YUYV,
                                       target, tex_usage, geom_flags)) {
-         return PIPE_FORMAT_YCBCR_REV;
+         return PIPE_FORMAT_YUYV;
       }
       return PIPE_FORMAT_NONE;
 
@@ -546,10 +546,10 @@ st_choose_format(struct pipe_screen *screen, GLenum internalFormat,
          return PIPE_FORMAT_Z16_UNORM;
       /* fall-through */
    case GL_DEPTH_COMPONENT24:
-      if (screen->is_format_supported( screen, PIPE_FORMAT_S8Z24_UNORM, target, tex_usage, geom_flags ))
-         return PIPE_FORMAT_S8Z24_UNORM;
       if (screen->is_format_supported( screen, PIPE_FORMAT_Z24S8_UNORM, target, tex_usage, geom_flags ))
          return PIPE_FORMAT_Z24S8_UNORM;
+      if (screen->is_format_supported( screen, PIPE_FORMAT_S8Z24_UNORM, target, tex_usage, geom_flags ))
+         return PIPE_FORMAT_S8Z24_UNORM;
       /* fall-through */
    case GL_DEPTH_COMPONENT32:
       if (screen->is_format_supported( screen, PIPE_FORMAT_Z32_UNORM, target, tex_usage, geom_flags ))
@@ -565,18 +565,18 @@ st_choose_format(struct pipe_screen *screen, GLenum internalFormat,
    case GL_STENCIL_INDEX16_EXT:
       if (screen->is_format_supported( screen, PIPE_FORMAT_S8_UNORM, target, tex_usage, geom_flags ))
          return PIPE_FORMAT_S8_UNORM;
-      if (screen->is_format_supported( screen, PIPE_FORMAT_S8Z24_UNORM, target, tex_usage, geom_flags ))
-         return PIPE_FORMAT_S8Z24_UNORM;
       if (screen->is_format_supported( screen, PIPE_FORMAT_Z24S8_UNORM, target, tex_usage, geom_flags ))
          return PIPE_FORMAT_Z24S8_UNORM;
+      if (screen->is_format_supported( screen, PIPE_FORMAT_S8Z24_UNORM, target, tex_usage, geom_flags ))
+         return PIPE_FORMAT_S8Z24_UNORM;
       return PIPE_FORMAT_NONE;
 
    case GL_DEPTH_STENCIL_EXT:
    case GL_DEPTH24_STENCIL8_EXT:
-      if (screen->is_format_supported( screen, PIPE_FORMAT_S8Z24_UNORM, target, tex_usage, geom_flags ))
-         return PIPE_FORMAT_S8Z24_UNORM;
       if (screen->is_format_supported( screen, PIPE_FORMAT_Z24S8_UNORM, target, tex_usage, geom_flags ))
          return PIPE_FORMAT_Z24S8_UNORM;
+      if (screen->is_format_supported( screen, PIPE_FORMAT_S8Z24_UNORM, target, tex_usage, geom_flags ))
+         return PIPE_FORMAT_S8Z24_UNORM;
       return PIPE_FORMAT_NONE;
 
    case GL_SRGB_EXT:
@@ -599,8 +599,8 @@ st_choose_format(struct pipe_screen *screen, GLenum internalFormat,
    case GL_SLUMINANCE8_ALPHA8_EXT:
    case GL_COMPRESSED_SLUMINANCE_EXT:
    case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT:
-      if (screen->is_format_supported( screen, PIPE_FORMAT_A8L8_SRGB, target, tex_usage, geom_flags ))
-         return PIPE_FORMAT_A8L8_SRGB;
+      if (screen->is_format_supported( screen, PIPE_FORMAT_L8A8_SRGB, target, tex_usage, geom_flags ))
+         return PIPE_FORMAT_L8A8_SRGB;
       return default_srgba_format( screen, target, tex_usage, geom_flags );
 
    case GL_SLUMINANCE_EXT:
@@ -680,11 +680,11 @@ GLboolean
 st_equal_formats(enum pipe_format pFormat, GLenum format, GLenum type)
 {
    switch (pFormat) {
-   case PIPE_FORMAT_R8G8B8A8_UNORM_REV:
+   case PIPE_FORMAT_A8B8G8R8_UNORM:
       return format == GL_RGBA && type == GL_UNSIGNED_BYTE;
-   case PIPE_FORMAT_B8G8R8A8_UNORM:
+   case PIPE_FORMAT_A8R8G8B8_UNORM:
       return format == GL_BGRA && type == GL_UNSIGNED_BYTE;
-   case PIPE_FORMAT_R5G6B5_UNORM:
+   case PIPE_FORMAT_B5G6R5_UNORM:
       return format == GL_RGB && type == GL_UNSIGNED_SHORT_5_6_5;
    /* XXX more combos... */
    default:
-- 
cgit v1.2.3


From a4ec52f245746b477b673e7cfb9b73d711bfa0d6 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Fri, 26 Feb 2010 20:58:24 +0200
Subject: glapi.h: consolidate GET_DISPATCH() and GET_CURRENT_CONTEXT() macros

Use likely() macro, as this is what most projects use.

Drops GL_CALL define, cannot find it in mesa tree.

Also, whitespace cleaunps in glthread.h
---
 src/mesa/glapi/glapi.h    | 29 ++++++++++++++--
 src/mesa/glapi/glthread.h | 85 ++++++++++++++++++++++-------------------------
 2 files changed, 66 insertions(+), 48 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glapi.h b/src/mesa/glapi/glapi.h
index f802a61d3b..6bfe741b7e 100644
--- a/src/mesa/glapi/glapi.h
+++ b/src/mesa/glapi/glapi.h
@@ -64,6 +64,15 @@ typedef void (*_glapi_proc)(void); /* generic function pointer */
 #endif
 
 
+#if defined(__GNUC__) && (__GNUC__ >= 3)
+#  define likely(x)   __builtin_expect(!!(x), 1)
+#  define unlikely(x) __builtin_expect(!!(x), 0)
+#else
+#  define likely(x)   (x)
+#  define unlikely(x) (x)
+#endif
+
+
 /*
  * Number of extension functions which we can dynamically add at runtime.
  */
@@ -71,7 +80,8 @@ typedef void (*_glapi_proc)(void); /* generic function pointer */
 
 
 /**
- ** Define the GET_CURRENT_CONTEXT() macro.
+ ** Define the GET_DISPATCH() and GET_CURRENT_CONTEXT() macros.
+ **
  ** \param C local variable which will hold the current context.
  **/
 #if defined (GLX_USE_TLS)
@@ -79,9 +89,14 @@ typedef void (*_glapi_proc)(void); /* generic function pointer */
 extern const void *_glapi_Context;
 extern const struct _glapi_table *_glapi_Dispatch;
 
+extern __thread struct _glapi_table * _glapi_tls_Dispatch
+    __attribute__((tls_model("initial-exec")));
+
 extern __thread void * _glapi_tls_Context
     __attribute__((tls_model("initial-exec")));
 
+# define GET_DISPATCH() _glapi_tls_Dispatch
+
 # define GET_CURRENT_CONTEXT(C)  GLcontext *C = (GLcontext *) _glapi_tls_Context
 
 #else
@@ -90,9 +105,19 @@ extern void *_glapi_Context;
 extern struct _glapi_table *_glapi_Dispatch;
 
 # ifdef THREADS
-#  define GET_CURRENT_CONTEXT(C)  GLcontext *C = (GLcontext *) (_glapi_Context ? _glapi_Context : _glapi_get_context())
+
+#  define GET_DISPATCH() \
+     (likely(_glapi_Dispatch) ? _glapi_Dispatch : _glapi_get_dispatch())
+
+#  define GET_CURRENT_CONTEXT(C)  GLcontext *C = (GLcontext *) \
+     (likely(_glapi_Context) ? _glapi_Context : _glapi_get_context())
+
 # else
+
+#  define GET_DISPATCH() _glapi_Dispatch
+
 #  define GET_CURRENT_CONTEXT(C)  GLcontext *C = (GLcontext *) _glapi_Context
+
 # endif
 
 #endif /* defined (GLX_USE_TLS) */
diff --git a/src/mesa/glapi/glthread.h b/src/mesa/glapi/glthread.h
index 8ec933a851..be39501395 100644
--- a/src/mesa/glapi/glthread.h
+++ b/src/mesa/glapi/glthread.h
@@ -64,21 +64,12 @@
 #define GLTHREAD_H
 
 
-#if defined(USE_MGL_NAMESPACE)
-#define _glapi_Dispatch _mglapi_Dispatch
+#if defined(PTHREADS) || defined(SOLARIS_THREADS) || defined(WIN32_THREADS) || defined(BEOS_THREADS)
+#ifndef THREADS
+#define THREADS
 #endif
-
-
-
-#if (defined(PTHREADS) || defined(SOLARIS_THREADS) ||\
-     defined(WIN32_THREADS) || defined(BEOS_THREADS)) \
-    && !defined(THREADS)
-# define THREADS
 #endif
 
-#ifdef VMS
-#include <GL/vms_x_fix.h>
-#endif
 
 /*
  * POSIX threads. This should be your choice in the Unix world
@@ -121,7 +112,7 @@ typedef pthread_cond_t _glthread_Cond;
 #define _glthread_DECLARE_STATIC_COND(name) \
    static _glthread_Cond name = PTHREAD_COND_INITIALIZER
 
-#define _glthread_INIT_COND(cond)			\
+#define _glthread_INIT_COND(cond) \
    pthread_cond_init(&(cond), NULL)
 
 #define _glthread_DESTROY_COND(name) \
@@ -143,7 +134,7 @@ typedef unsigned int _glthread_Cond;
 #define _glthread_DECLARE_STATIC_COND(name) \
 //  #warning Condition variables not implemented.
 
-#define _glthread_INIT_COND(cond)	    \
+#define _glthread_INIT_COND(cond) \
   ASSERT(0);
 
 #define _glthread_DESTROY_COND(name) \
@@ -209,11 +200,20 @@ typedef HANDLE _glthread_Thread;
 
 typedef CRITICAL_SECTION _glthread_Mutex;
 
-#define _glthread_DECLARE_STATIC_MUTEX(name)  /*static*/ _glthread_Mutex name = {0,0,0,0,0,0}
-#define _glthread_INIT_MUTEX(name)  InitializeCriticalSection(&name)
-#define _glthread_DESTROY_MUTEX(name)  DeleteCriticalSection(&name)
-#define _glthread_LOCK_MUTEX(name)  EnterCriticalSection(&name)
-#define _glthread_UNLOCK_MUTEX(name)  LeaveCriticalSection(&name)
+#define _glthread_DECLARE_STATIC_MUTEX(name) \
+   /* static */ _glthread_Mutex name = { 0, 0, 0, 0, 0, 0 }
+
+#define _glthread_INIT_MUTEX(name) \
+   InitializeCriticalSection(&name)
+
+#define _glthread_DESTROY_MUTEX(name) \
+   DeleteCriticalSection(&name)
+
+#define _glthread_LOCK_MUTEX(name) \
+   EnterCriticalSection(&name)
+
+#define _glthread_UNLOCK_MUTEX(name) \
+   LeaveCriticalSection(&name)
 
 #endif /* WIN32_THREADS */
 
@@ -252,12 +252,26 @@ typedef struct {
 } benaphore;
 typedef benaphore _glthread_Mutex;
 
-#define _glthread_DECLARE_STATIC_MUTEX(name)  static _glthread_Mutex name = { 0, 0 }
-#define _glthread_INIT_MUTEX(name)    	name.sem = create_sem(0, #name"_benaphore"), name.lock = 0
-#define _glthread_DESTROY_MUTEX(name) 	delete_sem(name.sem), name.lock = 0
-#define _glthread_LOCK_MUTEX(name)    	if (name.sem == 0) _glthread_INIT_MUTEX(name); \
-									  	if (atomic_add(&(name.lock), 1) >= 1) acquire_sem(name.sem)
-#define _glthread_UNLOCK_MUTEX(name)  	if (atomic_add(&(name.lock), -1) > 1) release_sem(name.sem)
+#define _glthread_DECLARE_STATIC_MUTEX(name) \
+   static _glthread_Mutex name = { 0, 0 }
+
+#define _glthread_INIT_MUTEX(name) \
+   name.sem = create_sem(0, #name"_benaphore"), \
+   name.lock = 0
+
+#define _glthread_DESTROY_MUTEX(name) \
+   delete_sem(name.sem), \
+   name.lock = 0
+
+#define _glthread_LOCK_MUTEX(name) \
+   if (name.sem == 0) \
+      _glthread_INIT_MUTEX(name); \
+   if (atomic_add(&(name.lock), 1) >= 1) \
+      acquire_sem(name.sem)
+
+#define _glthread_UNLOCK_MUTEX(name) \
+   if (atomic_add(&(name.lock), -1) > 1) \
+      release_sem(name.sem)
 
 #endif /* BEOS_THREADS */
 
@@ -308,26 +322,5 @@ _glthread_GetTSD(_glthread_TSD *);
 extern void
 _glthread_SetTSD(_glthread_TSD *, void *);
 
-#if !defined __GNUC__ || __GNUC__ < 3
-#  define __builtin_expect(x, y) x
-#endif
-
-#if defined(GLX_USE_TLS)
-
-extern __thread struct _glapi_table * _glapi_tls_Dispatch
-    __attribute__((tls_model("initial-exec")));
-
-#define GET_DISPATCH() _glapi_tls_Dispatch
-
-#elif !defined(GL_CALL)
-# if defined(THREADS)
-#  define GET_DISPATCH() \
-   ((__builtin_expect( _glapi_Dispatch != NULL, 1 )) \
-       ? _glapi_Dispatch : _glapi_get_dispatch())
-# else
-#  define GET_DISPATCH() _glapi_Dispatch
-# endif /* defined(THREADS) */
-#endif  /* ndef GL_CALL */
-
 
 #endif /* THREADS_H */
-- 
cgit v1.2.3


From 57d31591d10d656dbc8bea1d162dec90518e7b8c Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Sat, 27 Feb 2010 02:48:27 +0200
Subject: glapi.h: misc cosmetic

- revert context/dispatch order, similar to glapi.c
- stray GL_GLEXT_PROTOTYPES
---
 src/mesa/glapi/glapi.h | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glapi.h b/src/mesa/glapi/glapi.h
index 6bfe741b7e..6e28e66352 100644
--- a/src/mesa/glapi/glapi.h
+++ b/src/mesa/glapi/glapi.h
@@ -44,8 +44,6 @@
 #ifndef _GLAPI_H
 #define _GLAPI_H
 
-#define GL_GLEXT_PROTOTYPES
-
 #include "glthread.h"
 
 
@@ -59,8 +57,8 @@ typedef void (*_glapi_proc)(void); /* generic function pointer */
 #define _glapi_get_dispatch _mglapi_get_dispatch
 #define _glapi_set_context _mglapi_set_context
 #define _glapi_get_context _mglapi_get_context
-#define _glapi_Context _mglapi_Context
 #define _glapi_Dispatch _mglapi_Dispatch
+#define _glapi_Context _mglapi_Context
 #endif
 
 
@@ -73,12 +71,6 @@ typedef void (*_glapi_proc)(void); /* generic function pointer */
 #endif
 
 
-/*
- * Number of extension functions which we can dynamically add at runtime.
- */
-#define MAX_EXTENSION_FUNCS 300
-
-
 /**
  ** Define the GET_DISPATCH() and GET_CURRENT_CONTEXT() macros.
  **
@@ -86,9 +78,10 @@ typedef void (*_glapi_proc)(void); /* generic function pointer */
  **/
 #if defined (GLX_USE_TLS)
 
-extern const void *_glapi_Context;
 extern const struct _glapi_table *_glapi_Dispatch;
 
+extern const void *_glapi_Context;
+
 extern __thread struct _glapi_table * _glapi_tls_Dispatch
     __attribute__((tls_model("initial-exec")));
 
@@ -101,9 +94,10 @@ extern __thread void * _glapi_tls_Context
 
 #else
 
-extern void *_glapi_Context;
 extern struct _glapi_table *_glapi_Dispatch;
 
+extern void *_glapi_Context;
+
 # ifdef THREADS
 
 #  define GET_DISPATCH() \
@@ -183,4 +177,10 @@ extern const char *
 _glapi_get_proc_name(unsigned int offset);
 
 
+/*
+ * Number of extension functions which we can dynamically add at runtime.
+ */
+#define MAX_EXTENSION_FUNCS 300
+
+
 #endif
-- 
cgit v1.2.3


From 750a7f1f1d6438c3fb460883aa2a626970e4c534 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Fri, 26 Feb 2010 19:09:38 +0200
Subject: glapi.h: drop dispatch_override prototypes

cannot find them in mesa tree
---
 src/mesa/glapi/glapi.h | 12 ------------
 1 file changed, 12 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glapi.h b/src/mesa/glapi/glapi.h
index 6e28e66352..27571bdfbb 100644
--- a/src/mesa/glapi/glapi.h
+++ b/src/mesa/glapi/glapi.h
@@ -141,18 +141,6 @@ extern struct _glapi_table *
 _glapi_get_dispatch(void);
 
 
-extern int
-_glapi_begin_dispatch_override(struct _glapi_table *override);
-
-
-extern void
-_glapi_end_dispatch_override(int layer);
-
-
-struct _glapi_table *
-_glapi_get_override_dispatch(int layer);
-
-
 extern unsigned int
 _glapi_get_dispatch_table_size(void);
 
-- 
cgit v1.2.3


From 42f3241e04b6cd74829dfb64b4a154ac8a4e6a48 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Sat, 27 Feb 2010 00:24:58 +0200
Subject: glapi.c: split check_table to not_null and get_proc

---
 src/mesa/glapi/glapi.c | 20 +++++++++++---------
 src/mesa/glapi/glapi.h | 16 ++++++++++++----
 2 files changed, 23 insertions(+), 13 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glapi.c b/src/mesa/glapi/glapi.c
index 2fa673d307..764f1dba28 100644
--- a/src/mesa/glapi/glapi.c
+++ b/src/mesa/glapi/glapi.c
@@ -423,8 +423,9 @@ _glapi_set_dispatch(struct _glapi_table *dispatch)
       /* use the no-op functions */
       dispatch = (struct _glapi_table *) __glapi_noop_table;
    }
-#ifdef DEBUG
+#if 0 /* enable this for extra DEBUG */
    else {
+      _glapi_check_table_not_null(dispatch);
       _glapi_check_table(dispatch);
    }
 #endif
@@ -488,19 +489,23 @@ _glapi_get_dispatch_table_size(void)
  * Intended for debugging purposes.
  */
 void
-_glapi_check_table(const struct _glapi_table *table)
+_glapi_check_table_not_null(const struct _glapi_table *table)
 {
-#if 0 /* Enable this for extra DEBUG */
    const GLuint entries = _glapi_get_dispatch_table_size();
    const void **tab = (const void **) table;
    GLuint i;
    for (i = 1; i < entries; i++) {
       assert(tab[i]);
    }
+}
 
-   /* Do some spot checks to be sure that the dispatch table
-    * slots are assigned correctly.
-    */
+/**
+ * Do some spot checks to be sure that the dispatch table
+ * slots are assigned correctly.
+ */
+void
+_glapi_check_table(const struct _glapi_table *table)
+{
    {
       GLuint BeginOffset = _glapi_get_proc_offset("glBegin");
       char *BeginFunc = (char*) &table->Begin;
@@ -557,7 +562,4 @@ _glapi_check_table(const struct _glapi_table *table)
       assert(setFenceOffset == _gloffset_SetFenceNV);
       assert(setFenceOffset == offset);
    }
-#else
-   (void) table;
-#endif
 }
diff --git a/src/mesa/glapi/glapi.h b/src/mesa/glapi/glapi.h
index 27571bdfbb..d84e38ae42 100644
--- a/src/mesa/glapi/glapi.h
+++ b/src/mesa/glapi/glapi.h
@@ -145,10 +145,6 @@ extern unsigned int
 _glapi_get_dispatch_table_size(void);
 
 
-extern void
-_glapi_check_table(const struct _glapi_table *table);
-
-
 extern int
 _glapi_add_dispatch( const char * const * function_names,
 		     const char * parameter_signature );
@@ -161,6 +157,18 @@ extern _glapi_proc
 _glapi_get_proc_address(const char *funcName);
 
 
+/**
+ * GL API local functions and defines
+ */
+
+extern void
+_glapi_check_table_not_null(const struct _glapi_table *table);
+
+
+extern void
+_glapi_check_table(const struct _glapi_table *table);
+
+
 extern const char *
 _glapi_get_proc_name(unsigned int offset);
 
-- 
cgit v1.2.3


From fae5758fac963ce014e3d43f1bca7fb489e02bf9 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Fri, 26 Feb 2010 20:01:20 +0200
Subject: glapi.c: mv check_table to glapi_getproc.c

---
 src/mesa/glapi/glapi.c         | 66 -----------------------------------------
 src/mesa/glapi/glapi_getproc.c | 67 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 67 insertions(+), 66 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glapi.c b/src/mesa/glapi/glapi.c
index 764f1dba28..2fe85a930e 100644
--- a/src/mesa/glapi/glapi.c
+++ b/src/mesa/glapi/glapi.c
@@ -59,7 +59,6 @@
 #endif
 
 #include "glapi/glapi.h"
-#include "glapi/glapioffsets.h"
 #include "glapi/glapitable.h"
 
 extern _glapi_proc __glapi_noop_table[];
@@ -498,68 +497,3 @@ _glapi_check_table_not_null(const struct _glapi_table *table)
       assert(tab[i]);
    }
 }
-
-/**
- * Do some spot checks to be sure that the dispatch table
- * slots are assigned correctly.
- */
-void
-_glapi_check_table(const struct _glapi_table *table)
-{
-   {
-      GLuint BeginOffset = _glapi_get_proc_offset("glBegin");
-      char *BeginFunc = (char*) &table->Begin;
-      GLuint offset = (BeginFunc - (char *) table) / sizeof(void *);
-      assert(BeginOffset == _gloffset_Begin);
-      assert(BeginOffset == offset);
-   }
-   {
-      GLuint viewportOffset = _glapi_get_proc_offset("glViewport");
-      char *viewportFunc = (char*) &table->Viewport;
-      GLuint offset = (viewportFunc - (char *) table) / sizeof(void *);
-      assert(viewportOffset == _gloffset_Viewport);
-      assert(viewportOffset == offset);
-   }
-   {
-      GLuint VertexPointerOffset = _glapi_get_proc_offset("glVertexPointer");
-      char *VertexPointerFunc = (char*) &table->VertexPointer;
-      GLuint offset = (VertexPointerFunc - (char *) table) / sizeof(void *);
-      assert(VertexPointerOffset == _gloffset_VertexPointer);
-      assert(VertexPointerOffset == offset);
-   }
-   {
-      GLuint ResetMinMaxOffset = _glapi_get_proc_offset("glResetMinmax");
-      char *ResetMinMaxFunc = (char*) &table->ResetMinmax;
-      GLuint offset = (ResetMinMaxFunc - (char *) table) / sizeof(void *);
-      assert(ResetMinMaxOffset == _gloffset_ResetMinmax);
-      assert(ResetMinMaxOffset == offset);
-   }
-   {
-      GLuint blendColorOffset = _glapi_get_proc_offset("glBlendColor");
-      char *blendColorFunc = (char*) &table->BlendColor;
-      GLuint offset = (blendColorFunc - (char *) table) / sizeof(void *);
-      assert(blendColorOffset == _gloffset_BlendColor);
-      assert(blendColorOffset == offset);
-   }
-   {
-      GLuint secondaryColor3fOffset = _glapi_get_proc_offset("glSecondaryColor3fEXT");
-      char *secondaryColor3fFunc = (char*) &table->SecondaryColor3fEXT;
-      GLuint offset = (secondaryColor3fFunc - (char *) table) / sizeof(void *);
-      assert(secondaryColor3fOffset == _gloffset_SecondaryColor3fEXT);
-      assert(secondaryColor3fOffset == offset);
-   }
-   {
-      GLuint pointParameterivOffset = _glapi_get_proc_offset("glPointParameterivNV");
-      char *pointParameterivFunc = (char*) &table->PointParameterivNV;
-      GLuint offset = (pointParameterivFunc - (char *) table) / sizeof(void *);
-      assert(pointParameterivOffset == _gloffset_PointParameterivNV);
-      assert(pointParameterivOffset == offset);
-   }
-   {
-      GLuint setFenceOffset = _glapi_get_proc_offset("glSetFenceNV");
-      char *setFenceFunc = (char*) &table->SetFenceNV;
-      GLuint offset = (setFenceFunc - (char *) table) / sizeof(void *);
-      assert(setFenceOffset == _gloffset_SetFenceNV);
-      assert(setFenceOffset == offset);
-   }
-}
diff --git a/src/mesa/glapi/glapi_getproc.c b/src/mesa/glapi/glapi_getproc.c
index 69eb42c79e..a0a6ccca09 100644
--- a/src/mesa/glapi/glapi_getproc.c
+++ b/src/mesa/glapi/glapi_getproc.c
@@ -594,3 +594,70 @@ _glapi_get_proc_name(GLuint offset)
    }
    return NULL;
 }
+
+
+
+/**
+ * Do some spot checks to be sure that the dispatch table
+ * slots are assigned correctly. For debugging only.
+ */
+void
+_glapi_check_table(const struct _glapi_table *table)
+{
+   {
+      GLuint BeginOffset = _glapi_get_proc_offset("glBegin");
+      char *BeginFunc = (char*) &table->Begin;
+      GLuint offset = (BeginFunc - (char *) table) / sizeof(void *);
+      assert(BeginOffset == _gloffset_Begin);
+      assert(BeginOffset == offset);
+   }
+   {
+      GLuint viewportOffset = _glapi_get_proc_offset("glViewport");
+      char *viewportFunc = (char*) &table->Viewport;
+      GLuint offset = (viewportFunc - (char *) table) / sizeof(void *);
+      assert(viewportOffset == _gloffset_Viewport);
+      assert(viewportOffset == offset);
+   }
+   {
+      GLuint VertexPointerOffset = _glapi_get_proc_offset("glVertexPointer");
+      char *VertexPointerFunc = (char*) &table->VertexPointer;
+      GLuint offset = (VertexPointerFunc - (char *) table) / sizeof(void *);
+      assert(VertexPointerOffset == _gloffset_VertexPointer);
+      assert(VertexPointerOffset == offset);
+   }
+   {
+      GLuint ResetMinMaxOffset = _glapi_get_proc_offset("glResetMinmax");
+      char *ResetMinMaxFunc = (char*) &table->ResetMinmax;
+      GLuint offset = (ResetMinMaxFunc - (char *) table) / sizeof(void *);
+      assert(ResetMinMaxOffset == _gloffset_ResetMinmax);
+      assert(ResetMinMaxOffset == offset);
+   }
+   {
+      GLuint blendColorOffset = _glapi_get_proc_offset("glBlendColor");
+      char *blendColorFunc = (char*) &table->BlendColor;
+      GLuint offset = (blendColorFunc - (char *) table) / sizeof(void *);
+      assert(blendColorOffset == _gloffset_BlendColor);
+      assert(blendColorOffset == offset);
+   }
+   {
+      GLuint secondaryColor3fOffset = _glapi_get_proc_offset("glSecondaryColor3fEXT");
+      char *secondaryColor3fFunc = (char*) &table->SecondaryColor3fEXT;
+      GLuint offset = (secondaryColor3fFunc - (char *) table) / sizeof(void *);
+      assert(secondaryColor3fOffset == _gloffset_SecondaryColor3fEXT);
+      assert(secondaryColor3fOffset == offset);
+   }
+   {
+      GLuint pointParameterivOffset = _glapi_get_proc_offset("glPointParameterivNV");
+      char *pointParameterivFunc = (char*) &table->PointParameterivNV;
+      GLuint offset = (pointParameterivFunc - (char *) table) / sizeof(void *);
+      assert(pointParameterivOffset == _gloffset_PointParameterivNV);
+      assert(pointParameterivOffset == offset);
+   }
+   {
+      GLuint setFenceOffset = _glapi_get_proc_offset("glSetFenceNV");
+      char *setFenceFunc = (char*) &table->SetFenceNV;
+      GLuint offset = (setFenceFunc - (char *) table) / sizeof(void *);
+      assert(setFenceOffset == _gloffset_SetFenceNV);
+      assert(setFenceOffset == offset);
+   }
+}
-- 
cgit v1.2.3


From cccdc1783fda33da6fc12befdf288b74866e5dfa Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Fri, 26 Feb 2010 23:43:46 +0200
Subject: glapi.c: mv init_glapi_relocs to glapi_getproc.c

---
 src/mesa/glapi/glapi.c         | 186 +----------------------------------
 src/mesa/glapi/glapi.h         |   3 +
 src/mesa/glapi/glapi_getproc.c | 215 ++++++++++++++++++++++++++++++++++++-----
 3 files changed, 196 insertions(+), 208 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glapi.c b/src/mesa/glapi/glapi.c
index 2fe85a930e..5c4a394527 100644
--- a/src/mesa/glapi/glapi.c
+++ b/src/mesa/glapi/glapi.c
@@ -222,187 +222,6 @@ _glapi_get_context(void)
 #endif
 }
 
-#ifdef USE_X86_ASM
-
-#if defined( GLX_USE_TLS )
-extern       GLubyte gl_dispatch_functions_start[];
-extern       GLubyte gl_dispatch_functions_end[];
-#else
-extern const GLubyte gl_dispatch_functions_start[];
-#endif
-
-#endif /* USE_X86_ASM */
-
-
-#if defined(USE_X64_64_ASM) && defined(GLX_USE_TLS)
-# define DISPATCH_FUNCTION_SIZE  16
-#elif defined(USE_X86_ASM)
-# if defined(THREADS) && !defined(GLX_USE_TLS)
-#  define DISPATCH_FUNCTION_SIZE  32
-# else
-#  define DISPATCH_FUNCTION_SIZE  16
-# endif
-#endif
-
-#ifdef USE_SPARC_ASM
-#ifdef GLX_USE_TLS
-extern unsigned int __glapi_sparc_tls_stub;
-#else
-extern unsigned int __glapi_sparc_pthread_stub;
-#endif
-#endif
-
-#if !defined(DISPATCH_FUNCTION_SIZE) && !defined(XFree86Server) && !defined(XGLServer)
-# define NEED_FUNCTION_POINTER
-#endif
-
-#if defined(PTHREADS) || defined(GLX_USE_TLS)
-/**
- * Perform platform-specific GL API entry-point fixups.
- */
-static void
-init_glapi_relocs( void )
-{
-#if defined(USE_X86_ASM) && defined(GLX_USE_TLS) && !defined(GLX_X86_READONLY_TEXT)
-    extern unsigned long _x86_get_dispatch(void);
-    char run_time_patch[] = {
-       0x65, 0xa1, 0, 0, 0, 0 /* movl %gs:0,%eax */
-    };
-    GLuint *offset = (GLuint *) &run_time_patch[2]; /* 32-bits for x86/32 */
-    const GLubyte * const get_disp = (const GLubyte *) run_time_patch;
-    GLubyte * curr_func = (GLubyte *) gl_dispatch_functions_start;
-
-    *offset = _x86_get_dispatch();
-    while ( curr_func != (GLubyte *) gl_dispatch_functions_end ) {
-	(void) memcpy( curr_func, get_disp, sizeof(run_time_patch));
-	curr_func += DISPATCH_FUNCTION_SIZE;
-    }
-#endif
-#ifdef USE_SPARC_ASM
-    extern void __glapi_sparc_icache_flush(unsigned int *);
-    static const unsigned int template[] = {
-#ifdef GLX_USE_TLS
-	0x05000000, /* sethi %hi(_glapi_tls_Dispatch), %g2 */
-	0x8730e00a, /* srl %g3, 10, %g3 */
-	0x8410a000, /* or %g2, %lo(_glapi_tls_Dispatch), %g2 */
-#ifdef __arch64__
-	0xc259c002, /* ldx [%g7 + %g2], %g1 */
-	0xc2584003, /* ldx [%g1 + %g3], %g1 */
-#else
-	0xc201c002, /* ld [%g7 + %g2], %g1 */
-	0xc2004003, /* ld [%g1 + %g3], %g1 */
-#endif
-	0x81c04000, /* jmp %g1 */
-	0x01000000, /* nop  */
-#else
-#ifdef __arch64__
-	0x03000000, /* 64-bit 0x00 --> sethi %hh(_glapi_Dispatch), %g1 */
-	0x05000000, /* 64-bit 0x04 --> sethi %lm(_glapi_Dispatch), %g2 */
-	0x82106000, /* 64-bit 0x08 --> or %g1, %hm(_glapi_Dispatch), %g1 */
-	0x8730e00a, /* 64-bit 0x0c --> srl %g3, 10, %g3 */
-	0x83287020, /* 64-bit 0x10 --> sllx %g1, 32, %g1 */
-	0x82004002, /* 64-bit 0x14 --> add %g1, %g2, %g1 */
-	0xc2586000, /* 64-bit 0x18 --> ldx [%g1 + %lo(_glapi_Dispatch)], %g1 */
-#else
-	0x03000000, /* 32-bit 0x00 --> sethi %hi(_glapi_Dispatch), %g1 */
-	0x8730e00a, /* 32-bit 0x04 --> srl %g3, 10, %g3 */
-	0xc2006000, /* 32-bit 0x08 --> ld [%g1 + %lo(_glapi_Dispatch)], %g1 */
-#endif
-	0x80a06000, /*             --> cmp %g1, 0 */
-	0x02800005, /*             --> be +4*5 */
-	0x01000000, /*             -->  nop  */
-#ifdef __arch64__
-	0xc2584003, /* 64-bit      --> ldx [%g1 + %g3], %g1 */
-#else
-	0xc2004003, /* 32-bit      --> ld [%g1 + %g3], %g1 */
-#endif
-	0x81c04000, /*             --> jmp %g1 */
-	0x01000000, /*             --> nop  */
-#ifdef __arch64__
-	0x9de3bf80, /* 64-bit      --> save  %sp, -128, %sp */
-#else
-	0x9de3bfc0, /* 32-bit      --> save  %sp, -64, %sp */
-#endif
-	0xa0100003, /*             --> mov  %g3, %l0 */
-	0x40000000, /*             --> call _glapi_get_dispatch */
-	0x01000000, /*             -->  nop */
-	0x82100008, /*             --> mov %o0, %g1 */
-	0x86100010, /*             --> mov %l0, %g3 */
-	0x10bffff7, /*             --> ba -4*9 */
-	0x81e80000, /*             -->  restore  */
-#endif
-    };
-#ifdef GLX_USE_TLS
-    extern unsigned long __glapi_sparc_get_dispatch(void);
-    unsigned int *code = &__glapi_sparc_tls_stub;
-    unsigned long dispatch = __glapi_sparc_get_dispatch();
-#else
-    unsigned int *code = &__glapi_sparc_pthread_stub;
-    unsigned long dispatch = (unsigned long) &_glapi_Dispatch;
-    unsigned long call_dest = (unsigned long ) &_glapi_get_dispatch;
-    int idx;
-#endif
-
-#if defined(GLX_USE_TLS)
-    code[0] = template[0] | (dispatch >> 10);
-    code[1] = template[1];
-    __glapi_sparc_icache_flush(&code[0]);
-    code[2] = template[2] | (dispatch & 0x3ff);
-    code[3] = template[3];
-    __glapi_sparc_icache_flush(&code[2]);
-    code[4] = template[4];
-    code[5] = template[5];
-    __glapi_sparc_icache_flush(&code[4]);
-    code[6] = template[6];
-    __glapi_sparc_icache_flush(&code[6]);
-#else
-#if defined(__arch64__)
-    code[0] = template[0] | (dispatch >> (32 + 10));
-    code[1] = template[1] | ((dispatch & 0xffffffff) >> 10);
-    __glapi_sparc_icache_flush(&code[0]);
-    code[2] = template[2] | ((dispatch >> 32) & 0x3ff);
-    code[3] = template[3];
-    __glapi_sparc_icache_flush(&code[2]);
-    code[4] = template[4];
-    code[5] = template[5];
-    __glapi_sparc_icache_flush(&code[4]);
-    code[6] = template[6] | (dispatch & 0x3ff);
-    idx = 7;
-#else
-    code[0] = template[0] | (dispatch >> 10);
-    code[1] = template[1];
-    __glapi_sparc_icache_flush(&code[0]);
-    code[2] = template[2] | (dispatch & 0x3ff);
-    idx = 3;
-#endif
-    code[idx + 0] = template[idx + 0];
-    __glapi_sparc_icache_flush(&code[idx - 1]);
-    code[idx + 1] = template[idx + 1];
-    code[idx + 2] = template[idx + 2];
-    __glapi_sparc_icache_flush(&code[idx + 1]);
-    code[idx + 3] = template[idx + 3];
-    code[idx + 4] = template[idx + 4];
-    __glapi_sparc_icache_flush(&code[idx + 3]);
-    code[idx + 5] = template[idx + 5];
-    code[idx + 6] = template[idx + 6];
-    __glapi_sparc_icache_flush(&code[idx + 5]);
-    code[idx + 7] = template[idx + 7];
-    code[idx + 8] = template[idx + 8] |
-	    (((call_dest - ((unsigned long) &code[idx + 8]))
-	      >> 2) & 0x3fffffff);
-    __glapi_sparc_icache_flush(&code[idx + 7]);
-    code[idx + 9] = template[idx + 9];
-    code[idx + 10] = template[idx + 10];
-    __glapi_sparc_icache_flush(&code[idx + 9]);
-    code[idx + 11] = template[idx + 11];
-    code[idx + 12] = template[idx + 12];
-    __glapi_sparc_icache_flush(&code[idx + 11]);
-    code[idx + 13] = template[idx + 13];
-    __glapi_sparc_icache_flush(&code[idx + 13]);
-#endif
-#endif
-}
-#endif /* defined(PTHREADS) || defined(GLX_USE_TLS) */
 
 
 /**
@@ -413,10 +232,7 @@ init_glapi_relocs( void )
 PUBLIC void
 _glapi_set_dispatch(struct _glapi_table *dispatch)
 {
-#if defined(PTHREADS) || defined(GLX_USE_TLS)
-   static pthread_once_t once_control = PTHREAD_ONCE_INIT;
-   pthread_once( & once_control, init_glapi_relocs );
-#endif
+   init_glapi_relocs_once();
 
    if (!dispatch) {
       /* use the no-op functions */
diff --git a/src/mesa/glapi/glapi.h b/src/mesa/glapi/glapi.h
index d84e38ae42..0abec5df76 100644
--- a/src/mesa/glapi/glapi.h
+++ b/src/mesa/glapi/glapi.h
@@ -161,6 +161,9 @@ _glapi_get_proc_address(const char *funcName);
  * GL API local functions and defines
  */
 
+extern void
+init_glapi_relocs_once(void);
+
 extern void
 _glapi_check_table_not_null(const struct _glapi_table *table);
 
diff --git a/src/mesa/glapi/glapi_getproc.c b/src/mesa/glapi/glapi_getproc.c
index a0a6ccca09..5be6d65b56 100644
--- a/src/mesa/glapi/glapi_getproc.c
+++ b/src/mesa/glapi/glapi_getproc.c
@@ -43,27 +43,6 @@
 #include "glapi/glapitable.h"
 
 
-static void
-fill_in_entrypoint_offset(_glapi_proc entrypoint, GLuint offset);
-
-
-/**
- * strdup() is actually not a standard ANSI C or POSIX routine.
- * Irix will not define it if ANSI mode is in effect.
- */
-static char *
-str_dup(const char *str)
-{
-   char *copy;
-   copy = (char*) malloc(strlen(str) + 1);
-   if (!copy)
-      return NULL;
-   strcpy(copy, str);
-   return copy;
-}
-
-
-
 #if defined(USE_X64_64_ASM) && defined(GLX_USE_TLS)
 # define DISPATCH_FUNCTION_SIZE  16
 #elif defined(USE_X86_ASM)
@@ -121,7 +100,6 @@ get_static_proc_offset(const char *funcName)
 }
 
 
-#if !defined(XFree86Server) && !defined(XGLServer)
 #ifdef USE_X86_ASM
 
 #if defined( GLX_USE_TLS )
@@ -134,6 +112,8 @@ extern const GLubyte gl_dispatch_functions_start[];
 #endif /* USE_X86_ASM */
 
 
+#if !defined(XFree86Server) && !defined(XGLServer)
+
 /**
  * Return dispatch function address for the named static (built-in) function.
  * Return NULL if function not found.
@@ -182,6 +162,172 @@ get_static_proc_name( GLuint offset )
 
 
 
+#if defined(PTHREADS) || defined(GLX_USE_TLS)
+
+/**
+ * Perform platform-specific GL API entry-point fixups.
+ */
+static void
+init_glapi_relocs( void )
+{
+#if defined(USE_X86_ASM) && defined(GLX_USE_TLS) && !defined(GLX_X86_READONLY_TEXT)
+    extern unsigned long _x86_get_dispatch(void);
+    char run_time_patch[] = {
+       0x65, 0xa1, 0, 0, 0, 0 /* movl %gs:0,%eax */
+    };
+    GLuint *offset = (GLuint *) &run_time_patch[2]; /* 32-bits for x86/32 */
+    const GLubyte * const get_disp = (const GLubyte *) run_time_patch;
+    GLubyte * curr_func = (GLubyte *) gl_dispatch_functions_start;
+
+    *offset = _x86_get_dispatch();
+    while ( curr_func != (GLubyte *) gl_dispatch_functions_end ) {
+	(void) memcpy( curr_func, get_disp, sizeof(run_time_patch));
+	curr_func += DISPATCH_FUNCTION_SIZE;
+    }
+#endif
+#ifdef USE_SPARC_ASM
+    extern void __glapi_sparc_icache_flush(unsigned int *);
+    static const unsigned int template[] = {
+#ifdef GLX_USE_TLS
+	0x05000000, /* sethi %hi(_glapi_tls_Dispatch), %g2 */
+	0x8730e00a, /* srl %g3, 10, %g3 */
+	0x8410a000, /* or %g2, %lo(_glapi_tls_Dispatch), %g2 */
+#ifdef __arch64__
+	0xc259c002, /* ldx [%g7 + %g2], %g1 */
+	0xc2584003, /* ldx [%g1 + %g3], %g1 */
+#else
+	0xc201c002, /* ld [%g7 + %g2], %g1 */
+	0xc2004003, /* ld [%g1 + %g3], %g1 */
+#endif
+	0x81c04000, /* jmp %g1 */
+	0x01000000, /* nop  */
+#else
+#ifdef __arch64__
+	0x03000000, /* 64-bit 0x00 --> sethi %hh(_glapi_Dispatch), %g1 */
+	0x05000000, /* 64-bit 0x04 --> sethi %lm(_glapi_Dispatch), %g2 */
+	0x82106000, /* 64-bit 0x08 --> or %g1, %hm(_glapi_Dispatch), %g1 */
+	0x8730e00a, /* 64-bit 0x0c --> srl %g3, 10, %g3 */
+	0x83287020, /* 64-bit 0x10 --> sllx %g1, 32, %g1 */
+	0x82004002, /* 64-bit 0x14 --> add %g1, %g2, %g1 */
+	0xc2586000, /* 64-bit 0x18 --> ldx [%g1 + %lo(_glapi_Dispatch)], %g1 */
+#else
+	0x03000000, /* 32-bit 0x00 --> sethi %hi(_glapi_Dispatch), %g1 */
+	0x8730e00a, /* 32-bit 0x04 --> srl %g3, 10, %g3 */
+	0xc2006000, /* 32-bit 0x08 --> ld [%g1 + %lo(_glapi_Dispatch)], %g1 */
+#endif
+	0x80a06000, /*             --> cmp %g1, 0 */
+	0x02800005, /*             --> be +4*5 */
+	0x01000000, /*             -->  nop  */
+#ifdef __arch64__
+	0xc2584003, /* 64-bit      --> ldx [%g1 + %g3], %g1 */
+#else
+	0xc2004003, /* 32-bit      --> ld [%g1 + %g3], %g1 */
+#endif
+	0x81c04000, /*             --> jmp %g1 */
+	0x01000000, /*             --> nop  */
+#ifdef __arch64__
+	0x9de3bf80, /* 64-bit      --> save  %sp, -128, %sp */
+#else
+	0x9de3bfc0, /* 32-bit      --> save  %sp, -64, %sp */
+#endif
+	0xa0100003, /*             --> mov  %g3, %l0 */
+	0x40000000, /*             --> call _glapi_get_dispatch */
+	0x01000000, /*             -->  nop */
+	0x82100008, /*             --> mov %o0, %g1 */
+	0x86100010, /*             --> mov %l0, %g3 */
+	0x10bffff7, /*             --> ba -4*9 */
+	0x81e80000, /*             -->  restore  */
+#endif
+    };
+#ifdef GLX_USE_TLS
+    extern unsigned int __glapi_sparc_tls_stub;
+    extern unsigned long __glapi_sparc_get_dispatch(void);
+    unsigned int *code = &__glapi_sparc_tls_stub;
+    unsigned long dispatch = __glapi_sparc_get_dispatch();
+#else
+    extern unsigned int __glapi_sparc_pthread_stub;
+    unsigned int *code = &__glapi_sparc_pthread_stub;
+    unsigned long dispatch = (unsigned long) &_glapi_Dispatch;
+    unsigned long call_dest = (unsigned long ) &_glapi_get_dispatch;
+    int idx;
+#endif
+
+#if defined(GLX_USE_TLS)
+    code[0] = template[0] | (dispatch >> 10);
+    code[1] = template[1];
+    __glapi_sparc_icache_flush(&code[0]);
+    code[2] = template[2] | (dispatch & 0x3ff);
+    code[3] = template[3];
+    __glapi_sparc_icache_flush(&code[2]);
+    code[4] = template[4];
+    code[5] = template[5];
+    __glapi_sparc_icache_flush(&code[4]);
+    code[6] = template[6];
+    __glapi_sparc_icache_flush(&code[6]);
+#else
+#if defined(__arch64__)
+    code[0] = template[0] | (dispatch >> (32 + 10));
+    code[1] = template[1] | ((dispatch & 0xffffffff) >> 10);
+    __glapi_sparc_icache_flush(&code[0]);
+    code[2] = template[2] | ((dispatch >> 32) & 0x3ff);
+    code[3] = template[3];
+    __glapi_sparc_icache_flush(&code[2]);
+    code[4] = template[4];
+    code[5] = template[5];
+    __glapi_sparc_icache_flush(&code[4]);
+    code[6] = template[6] | (dispatch & 0x3ff);
+    idx = 7;
+#else
+    code[0] = template[0] | (dispatch >> 10);
+    code[1] = template[1];
+    __glapi_sparc_icache_flush(&code[0]);
+    code[2] = template[2] | (dispatch & 0x3ff);
+    idx = 3;
+#endif
+    code[idx + 0] = template[idx + 0];
+    __glapi_sparc_icache_flush(&code[idx - 1]);
+    code[idx + 1] = template[idx + 1];
+    code[idx + 2] = template[idx + 2];
+    __glapi_sparc_icache_flush(&code[idx + 1]);
+    code[idx + 3] = template[idx + 3];
+    code[idx + 4] = template[idx + 4];
+    __glapi_sparc_icache_flush(&code[idx + 3]);
+    code[idx + 5] = template[idx + 5];
+    code[idx + 6] = template[idx + 6];
+    __glapi_sparc_icache_flush(&code[idx + 5]);
+    code[idx + 7] = template[idx + 7];
+    code[idx + 8] = template[idx + 8] |
+	    (((call_dest - ((unsigned long) &code[idx + 8]))
+	      >> 2) & 0x3fffffff);
+    __glapi_sparc_icache_flush(&code[idx + 7]);
+    code[idx + 9] = template[idx + 9];
+    code[idx + 10] = template[idx + 10];
+    __glapi_sparc_icache_flush(&code[idx + 9]);
+    code[idx + 11] = template[idx + 11];
+    code[idx + 12] = template[idx + 12];
+    __glapi_sparc_icache_flush(&code[idx + 11]);
+    code[idx + 13] = template[idx + 13];
+    __glapi_sparc_icache_flush(&code[idx + 13]);
+#endif
+#endif
+}
+
+void
+init_glapi_relocs_once( void )
+{
+   static pthread_once_t once_control = PTHREAD_ONCE_INIT;
+   pthread_once( & once_control, init_glapi_relocs );
+}
+
+#else
+
+void
+init_glapi_relocs_once( void ) { }
+
+#endif /* defined(PTHREADS) || defined(GLX_USE_TLS) */
+
+
+
 /**********************************************************************
  * Extension function management.
  */
@@ -239,6 +385,9 @@ static GLuint NumExtEntryPoints = 0;
 extern void __glapi_sparc_icache_flush(unsigned int *);
 #endif
 
+static void
+fill_in_entrypoint_offset(_glapi_proc entrypoint, GLuint offset);
+
 /**
  * Generate a dispatch function (entrypoint) which jumps through
  * the given slot number (offset) in the current dispatch table.
@@ -263,7 +412,9 @@ generate_entrypoint(GLuint functionOffset)
    }
 
    return (_glapi_proc) code;
-#elif defined(USE_SPARC_ASM) && (defined(PTHREADS) || defined(GLX_USE_TLS))
+#elif defined(USE_SPARC_ASM)
+
+#if defined(PTHREADS) || defined(GLX_USE_TLS)
    static const unsigned int template[] = {
       0x07000000, /* sethi %hi(0), %g3 */
       0x8210000f, /* mov  %o7, %g1 */
@@ -289,6 +440,8 @@ generate_entrypoint(GLuint functionOffset)
       __glapi_sparc_icache_flush(&code[2]);
    }
    return (_glapi_proc) code;
+#endif
+
 #else
    (void) functionOffset;
    return NULL;
@@ -332,6 +485,22 @@ fill_in_entrypoint_offset(_glapi_proc entrypoint, GLuint offset)
 }
 
 
+/**
+ * strdup() is actually not a standard ANSI C or POSIX routine.
+ * Irix will not define it if ANSI mode is in effect.
+ */
+static char *
+str_dup(const char *str)
+{
+   char *copy;
+   copy = (char*) malloc(strlen(str) + 1);
+   if (!copy)
+      return NULL;
+   strcpy(copy, str);
+   return copy;
+}
+
+
 /**
  * Generate new entrypoint
  *
-- 
cgit v1.2.3


From 7b454b00a4423937bd83ecff2d61ff08e6504707 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Sat, 27 Feb 2010 15:19:44 +0200
Subject: glapi.c: misc cosmetic

mainly, move the multithread check mutex out of the dispatch/context block,
closer to where it is used.
---
 src/mesa/glapi/glapi.c | 61 +++++++++++++++++++++++++++-----------------------
 1 file changed, 33 insertions(+), 28 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glapi.c b/src/mesa/glapi/glapi.c
index 5c4a394527..fe523073ca 100644
--- a/src/mesa/glapi/glapi.c
+++ b/src/mesa/glapi/glapi.c
@@ -105,24 +105,17 @@ PUBLIC __thread void * _glapi_tls_Context
     __attribute__((tls_model("initial-exec")));
 
 PUBLIC const struct _glapi_table *_glapi_Dispatch = NULL;
+
 PUBLIC const void *_glapi_Context = NULL;
 
 #else
 
 #if defined(THREADS)
 
-#ifdef WIN32_THREADS
-/* _glthread_DECLARE_STATIC_MUTEX is broken on windows.  There will be race! */
-#define CHECK_MULTITHREAD_LOCK()
-#define CHECK_MULTITHREAD_UNLOCK()
-#else
-_glthread_DECLARE_STATIC_MUTEX(ThreadCheckMutex);
-#define CHECK_MULTITHREAD_LOCK() _glthread_LOCK_MUTEX(ThreadCheckMutex)
-#define CHECK_MULTITHREAD_UNLOCK() _glthread_UNLOCK_MUTEX(ThreadCheckMutex)
-#endif
-
 static GLboolean ThreadSafe = GL_FALSE;  /**< In thread-safe mode? */
+
 _glthread_TSD _gl_DispatchTSD;           /**< Per-thread dispatch pointer */
+
 static _glthread_TSD ContextTSD;         /**< Per-thread context pointer */
 
 #if defined(WIN32_THREADS)
@@ -136,8 +129,8 @@ void FreeAllTSD(void)
 
 #endif /* defined(THREADS) */
 
-PUBLIC struct _glapi_table *_glapi_Dispatch = 
-  (struct _glapi_table *) __glapi_noop_table;
+PUBLIC struct _glapi_table *_glapi_Dispatch = (struct _glapi_table *) __glapi_noop_table;
+
 PUBLIC void *_glapi_Context = NULL;
 
 #endif /* defined(GLX_USE_TLS) */
@@ -145,6 +138,20 @@ PUBLIC void *_glapi_Context = NULL;
 
 
 
+#if defined(THREADS) && !defined(GLX_USE_TLS)
+
+/**
+ * Mutex for multithread check.
+ */
+#ifdef WIN32_THREADS
+/* _glthread_DECLARE_STATIC_MUTEX is broken on windows.  There will be race! */
+#define CHECK_MULTITHREAD_LOCK()
+#define CHECK_MULTITHREAD_UNLOCK()
+#else
+_glthread_DECLARE_STATIC_MUTEX(ThreadCheckMutex);
+#define CHECK_MULTITHREAD_LOCK() _glthread_LOCK_MUTEX(ThreadCheckMutex)
+#define CHECK_MULTITHREAD_UNLOCK() _glthread_UNLOCK_MUTEX(ThreadCheckMutex)
+#endif
 
 /**
  * We should call this periodically from a function such as glXMakeCurrent
@@ -153,7 +160,6 @@ PUBLIC void *_glapi_Context = NULL;
 PUBLIC void
 _glapi_check_multithread(void)
 {
-#if defined(THREADS) && !defined(GLX_USE_TLS)
    static unsigned long knownID;
    static GLboolean firstCall = GL_TRUE;
 
@@ -175,9 +181,15 @@ _glapi_check_multithread(void)
       _glapi_set_context(NULL);
    }
    CHECK_MULTITHREAD_UNLOCK();
-#endif
 }
 
+#else
+
+PUBLIC void
+_glapi_check_multithread(void) { }
+
+#endif
+
 
 
 /**
@@ -211,12 +223,7 @@ _glapi_get_context(void)
 #if defined(GLX_USE_TLS)
    return _glapi_tls_Context;
 #elif defined(THREADS)
-   if (ThreadSafe) {
-      return _glthread_GetTSD(&ContextTSD);
-   }
-   else {
-      return _glapi_Context;
-   }
+   return (ThreadSafe) ? _glthread_GetTSD(&ContextTSD) : _glapi_Context;
 #else
    return _glapi_Context;
 #endif
@@ -234,7 +241,7 @@ _glapi_set_dispatch(struct _glapi_table *dispatch)
 {
    init_glapi_relocs_once();
 
-   if (!dispatch) {
+   if (dispatch == NULL) {
       /* use the no-op functions */
       dispatch = (struct _glapi_table *) __glapi_noop_table;
    }
@@ -250,9 +257,9 @@ _glapi_set_dispatch(struct _glapi_table *dispatch)
 #elif defined(THREADS)
    _glthread_SetTSD(&_gl_DispatchTSD, (void *) dispatch);
    _glapi_Dispatch = (ThreadSafe) ? NULL : dispatch;
-#else /*THREADS*/
+#else
    _glapi_Dispatch = dispatch;
-#endif /*THREADS*/
+#endif
 }
 
 
@@ -263,17 +270,15 @@ _glapi_set_dispatch(struct _glapi_table *dispatch)
 PUBLIC struct _glapi_table *
 _glapi_get_dispatch(void)
 {
-   struct _glapi_table * api;
 #if defined(GLX_USE_TLS)
-   api = _glapi_tls_Dispatch;
+   return _glapi_tls_Dispatch;
 #elif defined(THREADS)
-   api = (ThreadSafe)
+   return (ThreadSafe)
      ? (struct _glapi_table *) _glthread_GetTSD(&_gl_DispatchTSD)
      : _glapi_Dispatch;
 #else
-   api = _glapi_Dispatch;
+   return _glapi_Dispatch;
 #endif
-   return api;
 }
 
 
-- 
cgit v1.2.3


From d41ab94d35cb47effbd2582289298be4f13c50e4 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Mon, 1 Mar 2010 04:44:02 +0200
Subject: glapi.c: misc coscmetic for FreeTSD

- move out of of the dispatch/context block to after corresponding init functions

- use more consistent naming with corresponding init functions

- XXX use _glthread_InitTSD() vs (void)_glthread_GetTSD() in _glapi_check_multithread() XXX
---
 src/gallium/state_trackers/wgl/stw_device.c |  4 ++--
 src/mesa/glapi/glapi.c                      | 35 +++++++++++++++++++----------
 src/mesa/glapi/glapi.h                      |  8 +++++++
 src/mesa/glapi/glthread.c                   | 23 ++++++++++---------
 src/mesa/glapi/glthread.h                   |  4 ++++
 5 files changed, 50 insertions(+), 24 deletions(-)

(limited to 'src/mesa')

diff --git a/src/gallium/state_trackers/wgl/stw_device.c b/src/gallium/state_trackers/wgl/stw_device.c
index e5fa6ac8eb..472a2a5379 100644
--- a/src/gallium/state_trackers/wgl/stw_device.c
+++ b/src/gallium/state_trackers/wgl/stw_device.c
@@ -47,7 +47,6 @@
 
 #ifdef WIN32_THREADS
 extern _glthread_Mutex OneTimeLock;
-extern void FreeAllTSD(void);
 #endif
 
 
@@ -183,7 +182,8 @@ stw_cleanup(void)
 
 #ifdef WIN32_THREADS
    _glthread_DESTROY_MUTEX(OneTimeLock);
-   FreeAllTSD();
+
+   _glapi_destroy_multithread();
 #endif
 
 #ifdef DEBUG
diff --git a/src/mesa/glapi/glapi.c b/src/mesa/glapi/glapi.c
index fe523073ca..056abd7233 100644
--- a/src/mesa/glapi/glapi.c
+++ b/src/mesa/glapi/glapi.c
@@ -118,15 +118,6 @@ _glthread_TSD _gl_DispatchTSD;           /**< Per-thread dispatch pointer */
 
 static _glthread_TSD ContextTSD;         /**< Per-thread context pointer */
 
-#if defined(WIN32_THREADS)
-void FreeTSD(_glthread_TSD *p);
-void FreeAllTSD(void)
-{
-   FreeTSD(&_gl_DispatchTSD);
-   FreeTSD(&ContextTSD);
-}
-#endif /* defined(WIN32_THREADS) */
-
 #endif /* defined(THREADS) */
 
 PUBLIC struct _glapi_table *_glapi_Dispatch = (struct _glapi_table *) __glapi_noop_table;
@@ -140,6 +131,22 @@ PUBLIC void *_glapi_Context = NULL;
 
 #if defined(THREADS) && !defined(GLX_USE_TLS)
 
+void
+_glapi_init_multithread(void)
+{
+   _glthread_InitTSD(&_gl_DispatchTSD);
+   _glthread_InitTSD(&ContextTSD);
+}
+
+void
+_glapi_destroy_multithread(void)
+{
+#ifdef WIN32_THREADS
+   _glthread_DestroyTSD(&_gl_DispatchTSD);
+   _glthread_DestroyTSD(&ContextTSD);
+#endif
+}
+
 /**
  * Mutex for multithread check.
  */
@@ -168,9 +175,7 @@ _glapi_check_multithread(void)
 
    CHECK_MULTITHREAD_LOCK();
    if (firstCall) {
-      /* initialize TSDs */
-      (void) _glthread_GetTSD(&ContextTSD);
-      (void) _glthread_GetTSD(&_gl_DispatchTSD);
+      _glapi_init_multithread(void)
 
       knownID = _glthread_GetID();
       firstCall = GL_FALSE;
@@ -185,6 +190,12 @@ _glapi_check_multithread(void)
 
 #else
 
+void
+_glapi_init_multithread(void) { }
+
+void
+_glapi_destroy_multithread(void) { }
+
 PUBLIC void
 _glapi_check_multithread(void) { }
 
diff --git a/src/mesa/glapi/glapi.h b/src/mesa/glapi/glapi.h
index 0abec5df76..2eae6d5c43 100644
--- a/src/mesa/glapi/glapi.h
+++ b/src/mesa/glapi/glapi.h
@@ -121,6 +121,14 @@ extern void *_glapi_Context;
  ** GL API public functions
  **/
 
+extern void
+_glapi_init_multithread(void);
+
+
+extern void
+_glapi_destroy_multithread(void);
+
+
 extern void
 _glapi_check_multithread(void);
 
diff --git a/src/mesa/glapi/glthread.c b/src/mesa/glapi/glthread.c
index be4e2f754d..15401d730e 100644
--- a/src/mesa/glapi/glthread.c
+++ b/src/mesa/glapi/glthread.c
@@ -190,17 +190,9 @@ _glthread_SetTSD(_glthread_TSD *tsd, void *ptr)
  */
 #ifdef WIN32_THREADS
 
-void FreeTSD(_glthread_TSD *p)
+static void InsteadOf_exit(int nCode)
 {
-   if (p->initMagic==INIT_MAGIC) {
-      TlsFree(p->key);
-      p->initMagic=0;
-   }
-}
-
-void InsteadOf_exit(int nCode)
-{
-   DWORD dwErr=GetLastError();
+   DWORD dwErr = GetLastError();
 }
 
 PUBLIC unsigned long
@@ -222,6 +214,17 @@ _glthread_InitTSD(_glthread_TSD *tsd)
 }
 
 
+void
+_glthread_DestroyTSD(_glthread_TSD *tsd)
+{
+   if (tsd->initMagic != INIT_MAGIC) {
+      return;
+   }
+   TlsFree(tsd->key);
+   tsd->initMagic = 0x0;
+}
+
+
 void *
 _glthread_GetTSD(_glthread_TSD *tsd)
 {
diff --git a/src/mesa/glapi/glthread.h b/src/mesa/glapi/glthread.h
index be39501395..389c24204b 100644
--- a/src/mesa/glapi/glthread.h
+++ b/src/mesa/glapi/glthread.h
@@ -315,6 +315,10 @@ extern void
 _glthread_InitTSD(_glthread_TSD *);
 
 
+extern void
+_glthread_DestroyTSD(_glthread_TSD *); /* WIN32 only */
+
+
 extern void *
 _glthread_GetTSD(_glthread_TSD *);
 
-- 
cgit v1.2.3


From d7e6e879fdfb1a4e3125237d117f68025dfa0d72 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Mon, 1 Mar 2010 17:28:55 +0200
Subject: glapi: drop SOLARIS_THREADS

It seems that SOLARIS_THREADS is not used and does not work.
---
 docs/dispatch.html                  |  2 +-
 src/mesa/glapi/gen/gl_x86-64_asm.py |  2 +-
 src/mesa/glapi/gen/gl_x86_asm.py    |  2 +-
 src/mesa/glapi/glthread.c           | 68 -------------------------------------
 src/mesa/glapi/glthread.h           | 35 ++-----------------
 src/mesa/x86-64/glapi_x86-64.S      |  2 +-
 src/mesa/x86/glapi_x86.S            |  2 +-
 7 files changed, 7 insertions(+), 106 deletions(-)

(limited to 'src/mesa')

diff --git a/docs/dispatch.html b/docs/dispatch.html
index 0c54a84675..e5587c1a29 100644
--- a/docs/dispatch.html
+++ b/docs/dispatch.html
@@ -199,7 +199,7 @@ few preprocessor defines.</p>
 <li>If <tt>GLX_USE_TLS</tt> is defined, method #4 is used.</li>
 <li>If <tt>PTHREADS</tt> is defined, method #3 is used.</li>
 <li>If any of <tt>PTHREADS</tt>,
-<tt>SOLARIS_THREADS</tt>, <tt>WIN32_THREADS</tt>, or <tt>BEOS_THREADS</tt>
+<tt>WIN32_THREADS</tt>, or <tt>BEOS_THREADS</tt>
 is defined, method #2 is used.</li>
 <li>If none of the preceeding are defined, method #1 is used.</li>
 </ul>
diff --git a/src/mesa/glapi/gen/gl_x86-64_asm.py b/src/mesa/glapi/gen/gl_x86-64_asm.py
index 31c1a2b93a..8ac57ab7eb 100644
--- a/src/mesa/glapi/gen/gl_x86-64_asm.py
+++ b/src/mesa/glapi/gen/gl_x86-64_asm.py
@@ -138,7 +138,7 @@ class PrintGenericStubs(gl_XML.gl_print_base):
 		print '#  define GL_PREFIX(n) GLNAME(CONCAT(gl,n))'
 		print '# endif'
 		print ''
-		print '#if defined(PTHREADS) || defined(SOLARIS_THREADS) || defined(WIN32_THREADS) || defined(BEOS_THREADS)'
+		print '#if defined(PTHREADS) || defined(WIN32_THREADS) || defined(BEOS_THREADS)'
 		print '#  define THREADS'
 		print '#endif'
 		print ''
diff --git a/src/mesa/glapi/gen/gl_x86_asm.py b/src/mesa/glapi/gen/gl_x86_asm.py
index d210f3a248..a48724ee61 100644
--- a/src/mesa/glapi/gen/gl_x86_asm.py
+++ b/src/mesa/glapi/gen/gl_x86_asm.py
@@ -79,7 +79,7 @@ class PrintGenericStubs(gl_XML.gl_print_base):
 		print '#define GLOBL_FN(x) GLOBL x'
 		print '#endif'
 		print ''
-		print '#if defined(PTHREADS) || defined(SOLARIS_THREADS) || defined(WIN32_THREADS) || defined(BEOS_THREADS)'
+		print '#if defined(PTHREADS) || defined(WIN32_THREADS) || defined(BEOS_THREADS)'
 		print '#  define THREADS'
 		print '#endif'
 		print ''
diff --git a/src/mesa/glapi/glthread.c b/src/mesa/glapi/glthread.c
index 15401d730e..17b6bb2b6a 100644
--- a/src/mesa/glapi/glthread.c
+++ b/src/mesa/glapi/glthread.c
@@ -115,74 +115,6 @@ _glthread_SetTSD(_glthread_TSD *tsd, void *ptr)
 
 
 
-/*
- * Solaris/Unix International Threads -- Use only if POSIX threads
- *   aren't available on your Unix platform.  Solaris 2.[34] are examples
- *   of platforms where this is the case.  Be sure to use -mt and/or
- *   -D_REENTRANT when compiling.
- */
-#ifdef SOLARIS_THREADS
-#define USE_LOCK_FOR_KEY	/* undef this to try a version without
-				   lock for the global key... */
-
-PUBLIC unsigned long
-_glthread_GetID(void)
-{
-   abort();   /* XXX not implemented yet */
-   return (unsigned long) 0;
-}
-
-
-void
-_glthread_InitTSD(_glthread_TSD *tsd)
-{
-   if ((errno = mutex_init(&tsd->keylock, 0, NULL)) != 0 ||
-      (errno = thr_keycreate(&(tsd->key), free)) != 0) {
-      perror(INIT_TSD_ERROR);
-      exit(-1);
-   }
-   tsd->initMagic = INIT_MAGIC;
-}
-
-
-void *
-_glthread_GetTSD(_glthread_TSD *tsd)
-{
-   void* ret;
-   if (tsd->initMagic != INIT_MAGIC) {
-      _glthread_InitTSD(tsd);
-   }
-#ifdef USE_LOCK_FOR_KEY
-   mutex_lock(&tsd->keylock);
-   thr_getspecific(tsd->key, &ret);
-   mutex_unlock(&tsd->keylock);
-#else
-   if ((errno = thr_getspecific(tsd->key, &ret)) != 0) {
-      perror(GET_TSD_ERROR);
-      exit(-1);
-   }
-#endif
-   return ret;
-}
-
-
-void
-_glthread_SetTSD(_glthread_TSD *tsd, void *ptr)
-{
-   if (tsd->initMagic != INIT_MAGIC) {
-      _glthread_InitTSD(tsd);
-   }
-   if ((errno = thr_setspecific(tsd->key, ptr)) != 0) {
-      perror(SET_TSD_ERROR);
-      exit(-1);
-   }
-}
-
-#undef USE_LOCK_FOR_KEY
-#endif /* SOLARIS_THREADS */
-
-
-
 /*
  * Win32 Threads.  The only available option for Windows 95/NT.
  * Be sure that you compile using the Multithreaded runtime, otherwise
diff --git a/src/mesa/glapi/glthread.h b/src/mesa/glapi/glthread.h
index 389c24204b..e5193aaf98 100644
--- a/src/mesa/glapi/glthread.h
+++ b/src/mesa/glapi/glthread.h
@@ -64,7 +64,7 @@
 #define GLTHREAD_H
 
 
-#if defined(PTHREADS) || defined(SOLARIS_THREADS) || defined(WIN32_THREADS) || defined(BEOS_THREADS)
+#if defined(PTHREADS) || defined(WIN32_THREADS) || defined(BEOS_THREADS)
 #ifndef THREADS
 #define THREADS
 #endif
@@ -149,38 +149,7 @@ typedef unsigned int _glthread_Cond;
 #define _glthread_COND_BROADCAST(cond) \
   ASSERT(0);
 
-#endif
-
-
-/*
- * Solaris threads. Use only up to Solaris 2.4.
- * Solaris 2.5 and higher provide POSIX threads.
- * Be sure to compile with -mt on the Solaris compilers, or
- * use -D_REENTRANT if using gcc.
- */
-#ifdef SOLARIS_THREADS
-#include <thread.h>
-
-typedef struct {
-   thread_key_t key;
-   mutex_t      keylock;
-   int          initMagic;
-} _glthread_TSD;
-
-typedef thread_t _glthread_Thread;
-
-typedef mutex_t _glthread_Mutex;
-
-/* XXX need to really implement mutex-related macros */
-#define _glthread_DECLARE_STATIC_MUTEX(name)  static _glthread_Mutex name = 0
-#define _glthread_INIT_MUTEX(name)  (void) name
-#define _glthread_DESTROY_MUTEX(name) (void) name
-#define _glthread_LOCK_MUTEX(name)  (void) name
-#define _glthread_UNLOCK_MUTEX(name)  (void) name
-
-#endif /* SOLARIS_THREADS */
-
-
+#endif /* PTHREADS */
 
 
 /*
diff --git a/src/mesa/x86-64/glapi_x86-64.S b/src/mesa/x86-64/glapi_x86-64.S
index 4c9eab882b..bd5a657e19 100644
--- a/src/mesa/x86-64/glapi_x86-64.S
+++ b/src/mesa/x86-64/glapi_x86-64.S
@@ -45,7 +45,7 @@
 #  define GL_PREFIX(n) GLNAME(CONCAT(gl,n))
 # endif
 
-#if defined(PTHREADS) || defined(SOLARIS_THREADS) || defined(WIN32_THREADS) || defined(BEOS_THREADS)
+#if defined(PTHREADS) || defined(WIN32_THREADS) || defined(BEOS_THREADS)
 #  define THREADS
 #endif
 
diff --git a/src/mesa/x86/glapi_x86.S b/src/mesa/x86/glapi_x86.S
index 13270ef35d..ae5dd2b0d1 100644
--- a/src/mesa/x86/glapi_x86.S
+++ b/src/mesa/x86/glapi_x86.S
@@ -52,7 +52,7 @@
 #define GLOBL_FN(x) GLOBL x
 #endif
 
-#if defined(PTHREADS) || defined(SOLARIS_THREADS) || defined(WIN32_THREADS) || defined(BEOS_THREADS)
+#if defined(PTHREADS) || defined(WIN32_THREADS) || defined(BEOS_THREADS)
 #  define THREADS
 #endif
 
-- 
cgit v1.2.3


From a379fa8b3059d0a083dc2641a4afb3a33380e275 Mon Sep 17 00:00:00 2001
From: Karl Schultz <karl.w.schultz@gmail.com>
Date: Mon, 1 Mar 2010 12:21:13 -0700
Subject: Remove now obsolete mesa_bzero symbol.

---
 src/mesa/drivers/windows/gdi/mesa.def | 1 -
 1 file changed, 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/windows/gdi/mesa.def b/src/mesa/drivers/windows/gdi/mesa.def
index baa592f136..b537b3460c 100644
--- a/src/mesa/drivers/windows/gdi/mesa.def
+++ b/src/mesa/drivers/windows/gdi/mesa.def
@@ -867,7 +867,6 @@ EXPORTS
 	_glapi_get_proc_address
 	_mesa_add_soft_renderbuffers
 	_mesa_add_renderbuffer
-	_mesa_bzero
 	_mesa_check_conditional_render
 	_mesa_choose_tex_format
 	_mesa_create_framebuffer
-- 
cgit v1.2.3


From 9a7776696b786180f1d384eb22b928707e74dfca Mon Sep 17 00:00:00 2001
From: Pauli Nieminen <suokkos@gmail.com>
Date: Mon, 1 Mar 2010 23:47:35 +0200
Subject: radeon: Reduce number of radeon_bo_map calls that require kernel
 entry.

DMA buffers are often remapped many times for singel cs. To reduce number of
mapping calls ending to kernel dma buffers are mapped when allocated and unmapped
when full or in cs flush. This makes indifual mapping calls in other parts of
code simple increment/decrement reference count which is faster than entering
kernel.

This improves Anholt's openarena benchmark from 36 fps to 44 fps.
---
 src/mesa/drivers/dri/radeon/radeon_dma.c | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/radeon/radeon_dma.c b/src/mesa/drivers/dri/radeon/radeon_dma.c
index d31e4e47dd..22499bc38d 100644
--- a/src/mesa/drivers/dri/radeon/radeon_dma.c
+++ b/src/mesa/drivers/dri/radeon/radeon_dma.c
@@ -184,6 +184,8 @@ void radeonRefillCurrentDmaRegion(radeonContextPtr rmesa, int size)
 	radeon_print(RADEON_DMA, RADEON_NORMAL, "%s size %d minimum_size %d\n",
 			__FUNCTION__, size, rmesa->dma.minimum_size);
 
+	if (!is_empty_list(&rmesa->dma.reserved))
+		radeon_bo_unmap(first_elem(&rmesa->dma.reserved)->bo);
 
 	if (is_empty_list(&rmesa->dma.free)
 	      || last_elem(&rmesa->dma.free)->bo->size < size) {
@@ -211,7 +213,7 @@ again_alloc:
 
 	rmesa->dma.current_used = 0;
 	rmesa->dma.current_vertexptr = 0;
-	
+
 	if (radeon_cs_space_check_with_bo(rmesa->cmdbuf.cs,
 					  first_elem(&rmesa->dma.reserved)->bo,
 					  RADEON_GEM_DOMAIN_GTT, 0))
@@ -221,6 +223,7 @@ again_alloc:
         /* Cmd buff have been flushed in radeon_revalidate_bos */
 		goto again_alloc;
 	}
+	radeon_bo_map(first_elem(&rmesa->dma.reserved)->bo, 1);
 }
 
 /* Allocates a region from rmesa->dma.current.  If there isn't enough
@@ -332,6 +335,10 @@ void radeonReleaseDmaRegions(radeonContextPtr rmesa)
 		/* request updated cs processing information from kernel */
 		legacy_track_pending(rmesa->radeonScreen->bom, 0);
 	}
+
+	if (!is_empty_list(&rmesa->dma.reserved))
+		radeon_bo_unmap(first_elem(&rmesa->dma.reserved)->bo);
+
 	/* move waiting bos to free list.
 	   wait list provides gpu time to handle data before reuse */
 	foreach_s(dma_bo, temp, &rmesa->dma.wait) {
@@ -349,8 +356,11 @@ void radeonReleaseDmaRegions(radeonContextPtr rmesa)
 		   FREE(dma_bo);
 		   continue;
 		}
-		if (!radeon_bo_is_idle(dma_bo->bo))
+		if (!radeon_bo_is_idle(dma_bo->bo)) {
+			if (rmesa->radeonScreen->driScreen->dri2.enabled)
+				break;
 			continue;
+		}
 		remove_from_list(dma_bo);
 		dma_bo->expire_counter = expire_at;
 		insert_at_tail(&rmesa->dma.free, dma_bo);
@@ -388,7 +398,7 @@ void rcommon_flush_last_swtcl_prim( GLcontext *ctx  )
 {
 	radeonContextPtr rmesa = RADEON_CONTEXT(ctx);
 	struct radeon_dma *dma = &rmesa->dma;
-		
+
 	if (RADEON_DEBUG & RADEON_IOCTL)
 		fprintf(stderr, "%s\n", __FUNCTION__);
 	dma->flush = NULL;
-- 
cgit v1.2.3


From 6e48f17a1620dda83e0fedd68a8f004ed1fbfea9 Mon Sep 17 00:00:00 2001
From: José Fonseca <jfonseca@vmware.com>
Date: Mon, 1 Mar 2010 23:18:29 +0000
Subject: glapi: Fix syntax.

---
 src/mesa/glapi/glapi.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glapi.c b/src/mesa/glapi/glapi.c
index 056abd7233..fcb30895aa 100644
--- a/src/mesa/glapi/glapi.c
+++ b/src/mesa/glapi/glapi.c
@@ -175,7 +175,7 @@ _glapi_check_multithread(void)
 
    CHECK_MULTITHREAD_LOCK();
    if (firstCall) {
-      _glapi_init_multithread(void)
+      _glapi_init_multithread();
 
       knownID = _glthread_GetID();
       firstCall = GL_FALSE;
-- 
cgit v1.2.3


From d3f24ab33c284325abaf4b250f8928d4d53836e1 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Tue, 2 Mar 2010 03:31:16 +0200
Subject: glapi: fix compile with ES

---
 src/mesa/glapi/glapi.c         | 6 +++++-
 src/mesa/glapi/glapi_getproc.c | 4 ++++
 2 files changed, 9 insertions(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glapi.c b/src/mesa/glapi/glapi.c
index fcb30895aa..13de594aaf 100644
--- a/src/mesa/glapi/glapi.c
+++ b/src/mesa/glapi/glapi.c
@@ -256,7 +256,7 @@ _glapi_set_dispatch(struct _glapi_table *dispatch)
       /* use the no-op functions */
       dispatch = (struct _glapi_table *) __glapi_noop_table;
    }
-#if 0 /* enable this for extra DEBUG */
+#ifdef DEBUG
    else {
       _glapi_check_table_not_null(dispatch);
       _glapi_check_table(dispatch);
@@ -322,10 +322,14 @@ _glapi_get_dispatch_table_size(void)
 void
 _glapi_check_table_not_null(const struct _glapi_table *table)
 {
+#if 0 /* enable this for extra DEBUG */
    const GLuint entries = _glapi_get_dispatch_table_size();
    const void **tab = (const void **) table;
    GLuint i;
    for (i = 1; i < entries; i++) {
       assert(tab[i]);
    }
+#else
+   (void) table;
+#endif
 }
diff --git a/src/mesa/glapi/glapi_getproc.c b/src/mesa/glapi/glapi_getproc.c
index 5be6d65b56..a6dbf173e8 100644
--- a/src/mesa/glapi/glapi_getproc.c
+++ b/src/mesa/glapi/glapi_getproc.c
@@ -773,6 +773,7 @@ _glapi_get_proc_name(GLuint offset)
 void
 _glapi_check_table(const struct _glapi_table *table)
 {
+#if 0 /* enable this for extra DEBUG */
    {
       GLuint BeginOffset = _glapi_get_proc_offset("glBegin");
       char *BeginFunc = (char*) &table->Begin;
@@ -829,4 +830,7 @@ _glapi_check_table(const struct _glapi_table *table)
       assert(setFenceOffset == _gloffset_SetFenceNV);
       assert(setFenceOffset == offset);
    }
+#else
+   (void) table;
+#endif
 }
-- 
cgit v1.2.3


From 8bf5c229f3fdf2f3a6ae44afe03d3e1bd7194d6a Mon Sep 17 00:00:00 2001
From: Dave Airlie <airlied@redhat.com>
Date: Tue, 2 Mar 2010 14:05:21 +1000
Subject: r600: fix blender picking.

This fixes the sw fallback for GL_SELECT picking modes.

Fixes object picking blender + depthpick test

http://bugs.freedesktop.org/show_bug.cgi?id=26419

Signed-off-by: Dave Airlie <airlied@redhat.com>
---
 src/mesa/drivers/dri/r600/r700_render.c | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r600/r700_render.c b/src/mesa/drivers/dri/r600/r700_render.c
index 1d7a94cbb2..1929b7cc12 100644
--- a/src/mesa/drivers/dri/r600/r700_render.c
+++ b/src/mesa/drivers/dri/r600/r700_render.c
@@ -829,11 +829,10 @@ static void r700SetupIndexBuffer(GLcontext *ctx, const struct _mesa_index_buffer
 
 #if MESA_BIG_ENDIAN
     if (mesa_ind_buf->type == GL_UNSIGNED_INT)
-    {
 #else
     if (mesa_ind_buf->type != GL_UNSIGNED_BYTE)
-    {
 #endif
+    {
         const GLvoid *src_ptr;
         GLvoid *dst_ptr;
         GLboolean mapped_named_bo = GL_FALSE;
@@ -872,6 +871,14 @@ static void r700SetupIndexBuffer(GLcontext *ctx, const struct _mesa_index_buffer
     }
 }
 
+static GLboolean check_fallbacks(GLcontext *ctx)
+{
+	if (ctx->RenderMode != GL_RENDER)
+		return GL_TRUE;
+
+	return GL_FALSE;
+}
+
 static GLboolean r700TryDrawPrims(GLcontext *ctx,
 				  const struct gl_client_array *arrays[],
 				  const struct _mesa_prim *prim,
@@ -888,6 +895,9 @@ static GLboolean r700TryDrawPrims(GLcontext *ctx,
     if (ctx->NewState)
         _mesa_update_state( ctx );
 
+    if (check_fallbacks(ctx))
+	    return GL_FALSE;
+
     _tnl_UpdateFixedFunctionProgram(ctx);
     r700SetVertexFormat(ctx, arrays, max_index + 1);
     /* shaders need to be updated before buffers are validated */
@@ -983,8 +993,10 @@ static void r700DrawPrims(GLcontext *ctx,
 	retval = r700TryDrawPrims(ctx, arrays, prim, nr_prims, ib, min_index, max_index);
 
 	/* If failed run tnl pipeline - it should take care of fallbacks */
-	if (!retval)
+	if (!retval) {
+		_swsetup_Wakeup(ctx);
 		_tnl_draw_prims(ctx, arrays, prim, nr_prims, ib, min_index, max_index);
+	}
 }
 
 void r700InitDraw(GLcontext *ctx)
-- 
cgit v1.2.3


From 247008f6c2014c8f84de3a27ac954afe2c418a93 Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Tue, 2 Mar 2010 01:01:23 -0800
Subject: mesa: Add asserts to check inputs to memcpy.

---
 src/mesa/main/mipmap.c | 2 ++
 1 file changed, 2 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/main/mipmap.c b/src/mesa/main/mipmap.c
index 21ee317a31..e2efe81a8f 100644
--- a/src/mesa/main/mipmap.c
+++ b/src/mesa/main/mipmap.c
@@ -1269,6 +1269,8 @@ make_1d_stack_mipmap(GLenum datatype, GLuint comps, GLint border,
 
    if (border) {
       /* copy left-most pixel from source */
+      assert(dstPtr);
+      assert(srcPtr);
       memcpy(dstPtr, srcPtr, bpt);
       /* copy right-most pixel from source */
       memcpy(dstPtr + (dstWidth - 1) * bpt,
-- 
cgit v1.2.3


From 8462fe2bbf2aac87e6eabddc805b3d3ec63c6376 Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Tue, 2 Mar 2010 01:10:29 -0800
Subject: glsl: Add assert to check input to strcmp.

---
 src/mesa/shader/slang/slang_builtin.c | 1 +
 1 file changed, 1 insertion(+)

(limited to 'src/mesa')

diff --git a/src/mesa/shader/slang/slang_builtin.c b/src/mesa/shader/slang/slang_builtin.c
index 5533cc5b65..f0659a8d8b 100644
--- a/src/mesa/shader/slang/slang_builtin.c
+++ b/src/mesa/shader/slang/slang_builtin.c
@@ -142,6 +142,7 @@ lookup_statevar(const char *var, GLint index1, GLint index2, const char *field,
       tokens[1] = index1;
    }
    else if (strcmp(var, "gl_Point") == 0) {
+      assert(field);
       if (strcmp(field, "size") == 0) {
          tokens[0] = STATE_POINT_SIZE;
          *swizzleOut = SWIZZLE_XXXX;
-- 
cgit v1.2.3


From cb099c2ecfe3cf8d8ff21c3031e3c2d43efd0e69 Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Tue, 2 Mar 2010 07:47:56 -0700
Subject: i965: include macros.h to get CLAMP macro

---
 src/mesa/drivers/dri/i965/gen6_cc.c | 1 +
 1 file changed, 1 insertion(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/gen6_cc.c b/src/mesa/drivers/dri/i965/gen6_cc.c
index 65e16e70c7..42b41f3210 100644
--- a/src/mesa/drivers/dri/i965/gen6_cc.c
+++ b/src/mesa/drivers/dri/i965/gen6_cc.c
@@ -30,6 +30,7 @@
 #include "brw_defines.h"
 #include "brw_util.h"
 #include "intel_batchbuffer.h"
+#include "main/macros.h"
 
 struct brw_blend_state_key {
    GLboolean color_blend, alpha_enabled;
-- 
cgit v1.2.3


From 8417528e3a5b9f2aed783222091ca96b56e8c37a Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Tue, 2 Mar 2010 07:50:15 -0700
Subject: intel: passs correct context type to intel_prepare_render() call

---
 src/mesa/drivers/dri/intel/intel_context.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/intel/intel_context.c b/src/mesa/drivers/dri/intel/intel_context.c
index 767ad8c9d2..ec379a77ac 100644
--- a/src/mesa/drivers/dri/intel/intel_context.c
+++ b/src/mesa/drivers/dri/intel/intel_context.c
@@ -891,7 +891,7 @@ intelMakeCurrent(__DRIcontext * driContextPriv,
       intel->driDrawable = driDrawPriv;
       driContextPriv->dri2.draw_stamp = driDrawPriv->dri2.stamp - 1;
       driContextPriv->dri2.read_stamp = driReadPriv->dri2.stamp - 1;
-      intel_prepare_render(&intel->ctx);
+      intel_prepare_render(intel);
    }
    else {
       _mesa_make_current(NULL, NULL, NULL);
-- 
cgit v1.2.3


From daf85c460875c944d6918fdf4041467d97cba41e Mon Sep 17 00:00:00 2001
From: Dave Airlie <airlied@redhat.com>
Date: Wed, 3 Mar 2010 16:27:21 +1000
Subject: radeon/r200/r300/r600: fix blit BO buffer validation

there is no need for these to be persistent since we flush the CS
at the end of the blit, and we don't reuse these buffers at all.

on my r600 the Wine DX9 test suite doesn't crash at least anymore.

Signed-off-by: Dave Airlie <airlied@redhat.com>
---
 src/mesa/drivers/dri/r200/r200_blit.c     | 12 ++++++++----
 src/mesa/drivers/dri/r300/r300_blit.c     | 12 ++++++++----
 src/mesa/drivers/dri/r600/r600_blit.c     | 14 ++++++++------
 src/mesa/drivers/dri/radeon/radeon_blit.c | 12 ++++++++----
 4 files changed, 32 insertions(+), 18 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r200/r200_blit.c b/src/mesa/drivers/dri/r200/r200_blit.c
index e446d532cf..56b08a21bd 100644
--- a/src/mesa/drivers/dri/r200/r200_blit.c
+++ b/src/mesa/drivers/dri/r200/r200_blit.c
@@ -211,11 +211,15 @@ static GLboolean validate_buffers(struct r200_context *r200,
                                   struct radeon_bo *dst_bo)
 {
     int ret;
-    radeon_cs_space_add_persistent_bo(r200->radeon.cmdbuf.cs,
-                                      src_bo, RADEON_GEM_DOMAIN_VRAM, 0);
+    ret = radeon_cs_space_check_with_bo(r200->radeon.cmdbuf.cs,
+                                        src_bo, RADEON_GEM_DOMAIN_VRAM, 0);
+    if (ret)
+        return GL_FALSE;
 
-    radeon_cs_space_add_persistent_bo(r200->radeon.cmdbuf.cs,
-                                      dst_bo, 0, RADEON_GEM_DOMAIN_VRAM);
+    ret = radeon_cs_space_check_with_bo(r200->radeon.cmdbuf.cs,
+                                        dst_bo, 0, RADEON_GEM_DOMAIN_VRAM);
+    if (ret)
+        return GL_FALSE;
 
     ret = radeon_cs_space_check_with_bo(r200->radeon.cmdbuf.cs,
                                         first_elem(&r200->radeon.dma.reserved)->bo,
diff --git a/src/mesa/drivers/dri/r300/r300_blit.c b/src/mesa/drivers/dri/r300/r300_blit.c
index 54ac2510e7..35fd06734f 100644
--- a/src/mesa/drivers/dri/r300/r300_blit.c
+++ b/src/mesa/drivers/dri/r300/r300_blit.c
@@ -373,11 +373,15 @@ static GLboolean validate_buffers(struct r300_context *r300,
                                   struct radeon_bo *dst_bo)
 {
     int ret;
-    radeon_cs_space_add_persistent_bo(r300->radeon.cmdbuf.cs,
-                                      src_bo, RADEON_GEM_DOMAIN_VRAM, 0);
+    ret = radeon_cs_space_check_with_bo(r300->radeon.cmdbuf.cs,
+                                        src_bo, RADEON_GEM_DOMAIN_VRAM, 0);
+    if (ret)
+        return GL_FALSE;
 
-    radeon_cs_space_add_persistent_bo(r300->radeon.cmdbuf.cs,
-                                      dst_bo, 0, RADEON_GEM_DOMAIN_VRAM);
+    ret = radeon_cs_space_check_with_bo(r300->radeon.cmdbuf.cs,
+                                        dst_bo, 0, RADEON_GEM_DOMAIN_VRAM);
+    if (ret)
+        return GL_FALSE;
 
     ret = radeon_cs_space_check_with_bo(r300->radeon.cmdbuf.cs,
                                         first_elem(&r300->radeon.dma.reserved)->bo,
diff --git a/src/mesa/drivers/dri/r600/r600_blit.c b/src/mesa/drivers/dri/r600/r600_blit.c
index 4bb77a398f..8eafd42e8f 100644
--- a/src/mesa/drivers/dri/r600/r600_blit.c
+++ b/src/mesa/drivers/dri/r600/r600_blit.c
@@ -1532,14 +1532,16 @@ static GLboolean validate_buffers(context_t *rmesa,
                                   struct radeon_bo *dst_bo)
 {
     int ret;
-    radeon_cs_space_add_persistent_bo(rmesa->radeon.cmdbuf.cs,
-                                      src_bo, RADEON_GEM_DOMAIN_VRAM, 0);
 
-    radeon_cs_space_add_persistent_bo(rmesa->radeon.cmdbuf.cs,
-                                      dst_bo, 0, RADEON_GEM_DOMAIN_VRAM);
+    ret = radeon_cs_space_check_with_bo(rmesa->radeon.cmdbuf.cs,
+					src_bo, RADEON_GEM_DOMAIN_VRAM, 0);
+    if (ret)
+        return GL_FALSE;
 
-    radeon_cs_space_add_persistent_bo(rmesa->radeon.cmdbuf.cs,
-                                      rmesa->blit_bo, RADEON_GEM_DOMAIN_GTT, 0);
+    ret = radeon_cs_space_check_with_bo(rmesa->radeon.cmdbuf.cs,
+                                        dst_bo, 0, RADEON_GEM_DOMAIN_VRAM);
+    if (ret)
+        return GL_FALSE;
 
     ret = radeon_cs_space_check_with_bo(rmesa->radeon.cmdbuf.cs,
 					rmesa->blit_bo,
diff --git a/src/mesa/drivers/dri/radeon/radeon_blit.c b/src/mesa/drivers/dri/radeon/radeon_blit.c
index 0df4fbb33c..34b9af4063 100644
--- a/src/mesa/drivers/dri/radeon/radeon_blit.c
+++ b/src/mesa/drivers/dri/radeon/radeon_blit.c
@@ -204,11 +204,15 @@ static GLboolean validate_buffers(struct r100_context *r100,
                                   struct radeon_bo *dst_bo)
 {
     int ret;
-    radeon_cs_space_add_persistent_bo(r100->radeon.cmdbuf.cs,
-                                      src_bo, RADEON_GEM_DOMAIN_VRAM, 0);
+    ret = radeon_cs_space_check_with_bo(r100->radeon.cmdbuf.cs,
+                                        src_bo, RADEON_GEM_DOMAIN_VRAM, 0);
+    if (ret)
+        return GL_FALSE;
 
-    radeon_cs_space_add_persistent_bo(r100->radeon.cmdbuf.cs,
-                                      dst_bo, 0, RADEON_GEM_DOMAIN_VRAM);
+    ret = radeon_cs_space_check_with_bo(r100->radeon.cmdbuf.cs,
+                                        dst_bo, 0, RADEON_GEM_DOMAIN_VRAM);
+    if (ret)
+        return GL_FALSE;
 
     ret = radeon_cs_space_check_with_bo(r100->radeon.cmdbuf.cs,
                                         first_elem(&r100->radeon.dma.reserved)->bo,
-- 
cgit v1.2.3


From af3f1bb26980537522a1586fef3fc3c208b44ebc Mon Sep 17 00:00:00 2001
From: Kristian Høgsberg <krh@bitplanet.net>
Date: Tue, 2 Mar 2010 15:41:12 -0500
Subject: intel: Set InternalFormat for renderbuffers created from an EGLImage

---
 src/mesa/drivers/dri/intel/intel_fbo.c | 1 +
 1 file changed, 1 insertion(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/intel/intel_fbo.c b/src/mesa/drivers/dri/intel/intel_fbo.c
index 82c7b19eef..b388a3de2e 100644
--- a/src/mesa/drivers/dri/intel/intel_fbo.c
+++ b/src/mesa/drivers/dri/intel/intel_fbo.c
@@ -222,6 +222,7 @@ intel_image_target_renderbuffer_storage(GLcontext *ctx,
       intel_region_release(&irb->region);
    intel_region_reference(&irb->region, image->region);
 
+   rb->InternalFormat = image->internal_format;
    rb->Width = image->region->width;
    rb->Height = image->region->height;
    rb->Format = image->format;
-- 
cgit v1.2.3


From bdbf199a8c5bef12186e022babbb03f5cd763db6 Mon Sep 17 00:00:00 2001
From: Alex Deucher <alexdeucher@gmail.com>
Date: Wed, 3 Mar 2010 14:09:53 -0500
Subject: r600: add new rs880 pci id

---
 src/mesa/drivers/dri/radeon/radeon_chipset.h | 1 +
 src/mesa/drivers/dri/radeon/radeon_screen.c  | 1 +
 2 files changed, 2 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/radeon/radeon_chipset.h b/src/mesa/drivers/dri/radeon/radeon_chipset.h
index 46a9cd5ff8..f17a305bce 100644
--- a/src/mesa/drivers/dri/radeon/radeon_chipset.h
+++ b/src/mesa/drivers/dri/radeon/radeon_chipset.h
@@ -340,6 +340,7 @@
 #define PCI_CHIP_RS880_9712             0x9712
 #define PCI_CHIP_RS880_9713             0x9713
 #define PCI_CHIP_RS880_9714             0x9714
+#define PCI_CHIP_RS880_9715             0x9715
 
 #define PCI_CHIP_RV770_9440             0x9440
 #define PCI_CHIP_RV770_9441             0x9441
diff --git a/src/mesa/drivers/dri/radeon/radeon_screen.c b/src/mesa/drivers/dri/radeon/radeon_screen.c
index 631f729048..6415ec1239 100644
--- a/src/mesa/drivers/dri/radeon/radeon_screen.c
+++ b/src/mesa/drivers/dri/radeon/radeon_screen.c
@@ -826,6 +826,7 @@ static int radeon_set_screen_flags(radeonScreenPtr screen, int device_id)
    case PCI_CHIP_RS880_9712:
    case PCI_CHIP_RS880_9713:
    case PCI_CHIP_RS880_9714:
+   case PCI_CHIP_RS880_9715:
       screen->chip_family = CHIP_FAMILY_RS880;
       screen->chip_flags = RADEON_CHIPSET_TCL;
       break;
-- 
cgit v1.2.3


From 8bd8aec81d0310a3b790d425c41968003b454380 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Wed, 3 Mar 2010 21:22:38 +0200
Subject: glapi: drop condvar

Seems unused and replaced by functionality in os module.
---
 src/mesa/glapi/glthread.h | 46 +---------------------------------------------
 1 file changed, 1 insertion(+), 45 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glthread.h b/src/mesa/glapi/glthread.h
index e5193aaf98..4fe99284a8 100644
--- a/src/mesa/glapi/glthread.h
+++ b/src/mesa/glapi/glthread.h
@@ -107,48 +107,6 @@ typedef pthread_mutex_t _glthread_Mutex;
 #define _glthread_UNLOCK_MUTEX(name) \
    (void) pthread_mutex_unlock(&(name))
 
-typedef pthread_cond_t _glthread_Cond;
-
-#define _glthread_DECLARE_STATIC_COND(name) \
-   static _glthread_Cond name = PTHREAD_COND_INITIALIZER
-
-#define _glthread_INIT_COND(cond) \
-   pthread_cond_init(&(cond), NULL)
-
-#define _glthread_DESTROY_COND(name) \
-   pthread_cond_destroy(&(name))
-
-#define _glthread_COND_WAIT(cond, mutex) \
-  pthread_cond_wait(&(cond), &(mutex))
-
-#define _glthread_COND_SIGNAL(cond) \
-  pthread_cond_signal(&(cond))
-
-#define _glthread_COND_BROADCAST(cond) \
-  pthread_cond_broadcast(&(cond))
-
-
-#else /* PTHREADS */
-
-typedef unsigned int _glthread_Cond;
-#define _glthread_DECLARE_STATIC_COND(name) \
-//  #warning Condition variables not implemented.
-
-#define _glthread_INIT_COND(cond) \
-  ASSERT(0);
-
-#define _glthread_DESTROY_COND(name) \
-  ASSERT(0);
-
-#define _glthread_COND_WAIT(cond, mutex) \
-  ASSERT(0);
-
-#define _glthread_COND_SIGNAL(cond) \
-  ASSERT(0);
-
-#define _glthread_COND_BROADCAST(cond) \
-  ASSERT(0);
-
 #endif /* PTHREADS */
 
 
@@ -245,12 +203,10 @@ typedef benaphore _glthread_Mutex;
 #endif /* BEOS_THREADS */
 
 
-
-#ifndef THREADS
-
 /*
  * THREADS not defined
  */
+#ifndef THREADS
 
 typedef unsigned _glthread_TSD;
 
-- 
cgit v1.2.3


From 3b8ff24554253cf60bbbc8564c11008ff3866953 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Wed, 3 Mar 2010 21:22:38 +0200
Subject: glapi: minor cosmetic

---
 src/mesa/glapi/glthread.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glthread.c b/src/mesa/glapi/glthread.c
index 17b6bb2b6a..f365d17bdd 100644
--- a/src/mesa/glapi/glthread.c
+++ b/src/mesa/glapi/glthread.c
@@ -139,7 +139,7 @@ _glthread_InitTSD(_glthread_TSD *tsd)
 {
    tsd->key = TlsAlloc();
    if (tsd->key == TLS_OUT_OF_INDEXES) {
-      perror("Mesa:_glthread_InitTSD");
+      perror(INIT_TSD_ERROR);
       InsteadOf_exit(-1);
    }
    tsd->initMagic = INIT_MAGIC;
@@ -176,8 +176,8 @@ _glthread_SetTSD(_glthread_TSD *tsd, void *ptr)
       _glthread_InitTSD(tsd);
    }
    if (TlsSetValue(tsd->key, ptr) == 0) {
-	  perror("Mesa:_glthread_SetTSD");
-	  InsteadOf_exit(-1);
+      perror(SET_TSD_ERROR);
+      InsteadOf_exit(-1);
    }
 }
 
-- 
cgit v1.2.3


From a3593833dc2c14948c41654ed015c91634a78af3 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Tue, 2 Mar 2010 10:27:51 -0800
Subject: i965: Fix up Sandybridge VS sizing.

---
 src/mesa/drivers/dri/i965/brw_vs_emit.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_vs_emit.c b/src/mesa/drivers/dri/i965/brw_vs_emit.c
index e0be3cc6e3..a7c4b58972 100644
--- a/src/mesa/drivers/dri/i965/brw_vs_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_vs_emit.c
@@ -281,10 +281,12 @@ static void brw_vs_alloc_regs( struct brw_vs_compile *c )
     */
    attributes_in_vue = MAX2(c->nr_outputs, c->nr_inputs);
 
-   if (intel->is_ironlake || intel->gen >= 6)
-       c->prog_data.urb_entry_size = (attributes_in_vue + 6 + 3) / 4;
+   if (intel->gen >= 6)
+      c->prog_data.urb_entry_size = (attributes_in_vue + 4 + 7) / 8;
+   else if (intel->is_ironlake)
+      c->prog_data.urb_entry_size = (attributes_in_vue + 6 + 3) / 4;
    else
-       c->prog_data.urb_entry_size = (attributes_in_vue + 2 + 3) / 4;
+      c->prog_data.urb_entry_size = (attributes_in_vue + 2 + 3) / 4;
 
    c->prog_data.total_grf = reg;
 
-- 
cgit v1.2.3


From 55e90e46e0f4f3f8b5da334d84fefb65b9b3d45b Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Tue, 2 Mar 2010 10:41:08 -0800
Subject: intel: Use GTT mapping in the blit fallback path in case there's
 tiling.

---
 src/mesa/drivers/dri/intel/intel_blit.c | 29 ++++++++++++++---------------
 1 file changed, 14 insertions(+), 15 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/intel/intel_blit.c b/src/mesa/drivers/dri/intel/intel_blit.c
index 196a64a47a..1d099e7c47 100644
--- a/src/mesa/drivers/dri/intel/intel_blit.c
+++ b/src/mesa/drivers/dri/intel/intel_blit.c
@@ -122,21 +122,20 @@ intelEmitCopyBlit(struct intel_context *intel,
    intel_prepare_render(intel);
 
    if (pass >= 2) {
-       dri_bo_map(dst_buffer, GL_TRUE);
-       dri_bo_map(src_buffer, GL_FALSE);
-       _mesa_copy_rect((GLubyte *)dst_buffer->virtual + dst_offset,
-                       cpp,
-                       dst_pitch,
-                       dst_x, dst_y, 
-                       w, h, 
-                       (GLubyte *)src_buffer->virtual + src_offset, 
-                       src_pitch,
-                       src_x, src_y);
-       
-       dri_bo_unmap(src_buffer);
-       dri_bo_unmap(dst_buffer);
-
-       return GL_TRUE;
+      intel_bo_map_gtt_preferred(intel, dst_buffer, GL_TRUE);
+      intel_bo_map_gtt_preferred(intel, src_buffer, GL_FALSE);
+      _mesa_copy_rect((GLubyte *)dst_buffer->virtual + dst_offset,
+		      cpp,
+		      dst_pitch,
+		      dst_x, dst_y,
+		      w, h,
+		      (GLubyte *)src_buffer->virtual + src_offset,
+		      src_pitch,
+		      src_x, src_y);
+      intel_bo_unmap_gtt_preferred(intel, src_buffer);
+      intel_bo_unmap_gtt_preferred(intel, dst_buffer);
+
+      return GL_TRUE;
    }
 
    intel_batchbuffer_require_space(intel->batch, 8 * 4);
-- 
cgit v1.2.3


From 07439cf61717a3bde82745aa2acc878d7fd0133f Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Tue, 2 Mar 2010 15:28:36 -0800
Subject: i915: Don't do the pitch expansion for tiled buffers.

The weirdness that led to the bumping of pitch for those 512/1024
pixels is that in taking a 2x2 subspan or bilinear filtering we'd end
up hitting the same channel in 2 different pages, leading to lower
performance.  With tiling, that doesn't occur, so we don't need to
waste the memory.
---
 src/mesa/drivers/dri/intel/intel_mipmap_tree.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
index cb5a341050..a20ea5afdb 100644
--- a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
+++ b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
@@ -238,11 +238,11 @@ int intel_miptree_pitch_align (struct intel_context *intel,
       pitch = ALIGN(pitch * mt->cpp, pitch_align);
 
 #ifdef I915
-      /* XXX: At least the i915 seems very upset when the pitch is a multiple
-       * of 1024 and sometimes 512 bytes - performance can drop by several
-       * times. Go to the next multiple of the required alignment for now.
+      /* Do a little adjustment to linear allocations so that we avoid
+       * hitting the same channel of memory for 2 different pages when
+       * reading a 2x2 subspan or doing bilinear filtering.
        */
-      if (!(pitch & 511) && 
+      if (tiling == I915_TILING_NONE && !(pitch & 511) &&
 	 (pitch + pitch_align) < (1 << ctx->Const.MaxTextureLevels))
 	 pitch += pitch_align;
 #endif
-- 
cgit v1.2.3


From 179d2c0e0bcf96fc40107882ccab909af8c89853 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Tue, 2 Mar 2010 15:34:17 -0800
Subject: intel: Use drm_intel_bo_alloc_tiled for region allocs.

This moves the logic for how to align pitches, heights, and sizes of
objects to one central location.  Fixes rendering with texture tiling
on i915.  Note that current libdrm is required for the change for
I915_TILING_NONE pitch alignment.
---
 configure.ac                               |  2 +-
 src/mesa/drivers/dri/intel/intel_regions.c | 39 +++++++++---------------------
 2 files changed, 12 insertions(+), 29 deletions(-)

(limited to 'src/mesa')

diff --git a/configure.ac b/configure.ac
index d108ecdad2..e807d4acaf 100644
--- a/configure.ac
+++ b/configure.ac
@@ -804,7 +804,7 @@ AC_SUBST([DRI_LIB_DEPS])
 
 case $DRI_DIRS in
 *i915*|*i965*)
-    PKG_CHECK_MODULES([INTEL], [libdrm_intel])
+    PKG_CHECK_MODULES([INTEL], [libdrm_intel >= 2.4.19])
     ;;
 esac
 
diff --git a/src/mesa/drivers/dri/intel/intel_regions.c b/src/mesa/drivers/dri/intel/intel_regions.c
index f63d3a4082..e3c0635e5b 100644
--- a/src/mesa/drivers/dri/intel/intel_regions.c
+++ b/src/mesa/drivers/dri/intel/intel_regions.c
@@ -180,36 +180,19 @@ intel_region_alloc(struct intel_context *intel,
 {
    dri_bo *buffer;
    struct intel_region *region;
+   unsigned long flags = 0;
+   unsigned long aligned_pitch;
 
-   /* If we're tiled, our allocations are in 8 or 32-row blocks, so
-    * failure to align our height means that we won't allocate enough pages.
-    *
-    * If we're untiled, we still have to align to 2 rows high because the
-    * data port accesses 2x2 blocks even if the bottom row isn't to be
-    * rendered, so failure to align means we could walk off the end of the
-    * GTT and fault.
-    */
-   if (tiling == I915_TILING_X)
-      height = ALIGN(height, 8);
-   else if (tiling == I915_TILING_Y)
-      height = ALIGN(height, 32);
-   else
-      height = ALIGN(height, 2);
-
-   /* If we're untiled, we have to align to 2 rows high because the
-    * data port accesses 2x2 blocks even if the bottom row isn't to be
-    * rendered, so failure to align means we could walk off the end of the
-    * GTT and fault.
+   if (expect_accelerated_upload)
+      flags |= BO_ALLOC_FOR_RENDER;
+
+   buffer = drm_intel_bo_alloc_tiled(intel->bufmgr, "region",
+				     width, height, cpp,
+				     &tiling, &aligned_pitch, flags);
+   /* We've already chosen a pitch as part of miptree layout.  It had
+    * better be the same.
     */
-   height = ALIGN(height, 2);
-
-   if (expect_accelerated_upload) {
-      buffer = drm_intel_bo_alloc_for_render(intel->bufmgr, "region",
-					     pitch * cpp * height, 64);
-   } else {
-      buffer = drm_intel_bo_alloc(intel->bufmgr, "region",
-				  pitch * cpp * height, 64);
-   }
+   assert(aligned_pitch == pitch * cpp);
 
    region = intel_region_alloc_internal(intel, cpp, width, height,
 					pitch, buffer);
-- 
cgit v1.2.3


From 06d1472ffa0648efa9374fa227894fbf0b0be054 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Tue, 2 Mar 2010 18:04:40 -0800
Subject: i915: Tell the kernel when we actually need fence registers on our
 BOs.

This improves tiled texture performance of OA on my 945 from 25.3fps
to 29.0fps, whereas untiled is 28.2fps, by avoiding stalls for fence
register changes.
---
 src/mesa/drivers/dri/intel/intel_batchbuffer.c | 25 +++++++++++++++++++++++++
 src/mesa/drivers/dri/intel/intel_batchbuffer.h | 10 ++++++++++
 src/mesa/drivers/dri/intel/intel_blit.c        | 24 ++++++++++++------------
 src/mesa/drivers/dri/intel/intel_screen.c      |  2 ++
 4 files changed, 49 insertions(+), 12 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/intel/intel_batchbuffer.c b/src/mesa/drivers/dri/intel/intel_batchbuffer.c
index e38f10ebc6..a7bfd62b28 100644
--- a/src/mesa/drivers/dri/intel/intel_batchbuffer.c
+++ b/src/mesa/drivers/dri/intel/intel_batchbuffer.c
@@ -226,6 +226,31 @@ intel_batchbuffer_emit_reloc(struct intel_batchbuffer *batch,
    return GL_TRUE;
 }
 
+GLboolean
+intel_batchbuffer_emit_reloc_fenced(struct intel_batchbuffer *batch,
+				    drm_intel_bo *buffer,
+				    uint32_t read_domains, uint32_t write_domain,
+				    uint32_t delta)
+{
+   int ret;
+
+   if (batch->ptr - batch->map > batch->buf->size)
+    printf ("bad relocation ptr %p map %p offset %d size %lu\n",
+	    batch->ptr, batch->map, batch->ptr - batch->map, batch->buf->size);
+   ret = drm_intel_bo_emit_reloc_fence(batch->buf, batch->ptr - batch->map,
+				       buffer, delta,
+				       read_domains, write_domain);
+
+   /*
+    * Using the old buffer offset, write in what the right data would
+    * be, in case the buffer doesn't move and we can short-circuit the
+    * relocation processing in the kernel
+    */
+   intel_batchbuffer_emit_dword (batch, buffer->offset + delta);
+
+   return GL_TRUE;
+}
+
 void
 intel_batchbuffer_data(struct intel_batchbuffer *batch,
                        const void *data, GLuint bytes)
diff --git a/src/mesa/drivers/dri/intel/intel_batchbuffer.h b/src/mesa/drivers/dri/intel/intel_batchbuffer.h
index 4daada205a..79bdbc17ae 100644
--- a/src/mesa/drivers/dri/intel/intel_batchbuffer.h
+++ b/src/mesa/drivers/dri/intel/intel_batchbuffer.h
@@ -64,6 +64,11 @@ GLboolean intel_batchbuffer_emit_reloc(struct intel_batchbuffer *batch,
 				       uint32_t read_domains,
 				       uint32_t write_domain,
 				       uint32_t offset);
+GLboolean intel_batchbuffer_emit_reloc_fenced(struct intel_batchbuffer *batch,
+					      drm_intel_bo *buffer,
+					      uint32_t read_domains,
+					      uint32_t write_domain,
+					      uint32_t offset);
 void intel_batchbuffer_emit_mi_flush(struct intel_batchbuffer *batch);
 
 /* Inline functions - might actually be better off with these
@@ -127,6 +132,11 @@ static INLINE uint32_t float_as_int(float f)
    intel_batchbuffer_emit_reloc(intel->batch, buf,			\
 				read_domains, write_domain, delta);	\
 } while (0)
+#define OUT_RELOC_FENCED(buf, read_domains, write_domain, delta) do {	\
+   assert((unsigned) (delta) < buf->size);				\
+   intel_batchbuffer_emit_reloc_fenced(intel->batch, buf,		\
+				       read_domains, write_domain, delta); \
+} while (0)
 
 #define ADVANCE_BATCH() do {						\
    unsigned int _n = intel->batch->ptr - intel->batch->emit.start_ptr;	\
diff --git a/src/mesa/drivers/dri/intel/intel_blit.c b/src/mesa/drivers/dri/intel/intel_blit.c
index 1d099e7c47..6d6af86347 100644
--- a/src/mesa/drivers/dri/intel/intel_blit.c
+++ b/src/mesa/drivers/dri/intel/intel_blit.c
@@ -188,14 +188,14 @@ intelEmitCopyBlit(struct intel_context *intel,
    OUT_BATCH(BR13 | (uint16_t)dst_pitch);
    OUT_BATCH((dst_y << 16) | dst_x);
    OUT_BATCH((dst_y2 << 16) | dst_x2);
-   OUT_RELOC(dst_buffer,
-	     I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER,
-	     dst_offset);
+   OUT_RELOC_FENCED(dst_buffer,
+		    I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER,
+		    dst_offset);
    OUT_BATCH((src_y << 16) | src_x);
    OUT_BATCH((uint16_t)src_pitch);
-   OUT_RELOC(src_buffer,
-	     I915_GEM_DOMAIN_RENDER, 0,
-	     src_offset);
+   OUT_RELOC_FENCED(src_buffer,
+		    I915_GEM_DOMAIN_RENDER, 0,
+		    src_offset);
    ADVANCE_BATCH();
 
    intel_batchbuffer_emit_mi_flush(intel->batch);
@@ -365,9 +365,9 @@ intelClearWithBlit(GLcontext *ctx, GLbitfield mask)
       OUT_BATCH(BR13);
       OUT_BATCH((y1 << 16) | x1);
       OUT_BATCH((y2 << 16) | x2);
-      OUT_RELOC(write_buffer,
-		I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER,
-		0);
+      OUT_RELOC_FENCED(write_buffer,
+		       I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER,
+		       0);
       OUT_BATCH(clear_val);
       ADVANCE_BATCH();
 
@@ -448,9 +448,9 @@ intelEmitImmediateColorExpandBlit(struct intel_context *intel,
    OUT_BATCH(br13);
    OUT_BATCH((0 << 16) | 0); /* clip x1, y1 */
    OUT_BATCH((100 << 16) | 100); /* clip x2, y2 */
-   OUT_RELOC(dst_buffer,
-	     I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER,
-	     dst_offset);
+   OUT_RELOC_FENCED(dst_buffer,
+		    I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER,
+		    dst_offset);
    OUT_BATCH(0); /* bg */
    OUT_BATCH(fg_color); /* fg */
    OUT_BATCH(0); /* pattern base addr */
diff --git a/src/mesa/drivers/dri/intel/intel_screen.c b/src/mesa/drivers/dri/intel/intel_screen.c
index bc394d048e..a42af71104 100644
--- a/src/mesa/drivers/dri/intel/intel_screen.c
+++ b/src/mesa/drivers/dri/intel/intel_screen.c
@@ -426,6 +426,8 @@ intel_init_bufmgr(struct intel_screen *intelScreen)
    else
       intelScreen->kernel_exec_fencing = GL_FALSE;
 
+   drm_intel_bufmgr_gem_enable_fenced_relocs(intelScreen->bufmgr);
+
    intelScreen->named_regions = _mesa_NewHashTable();
 
    return GL_TRUE;
-- 
cgit v1.2.3


From b87406e55f029d29594ae76a4b39a4fe1007fe4f Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Tue, 2 Mar 2010 18:06:24 -0800
Subject: i915: Use x,y drawing offsets instead of changing buffer offsets.

This should fix rendering into mipmaps of tiled textures.
---
 src/mesa/drivers/dri/i915/i915_context.h |  1 +
 src/mesa/drivers/dri/i915/i915_vtbl.c    | 50 ++++++++++++++++++++++++--------
 src/mesa/drivers/dri/i915/intel_tris.c   |  2 ++
 3 files changed, 41 insertions(+), 12 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i915/i915_context.h b/src/mesa/drivers/dri/i915/i915_context.h
index 60b357ec28..b5169280f6 100644
--- a/src/mesa/drivers/dri/i915/i915_context.h
+++ b/src/mesa/drivers/dri/i915/i915_context.h
@@ -40,6 +40,7 @@
 #define I915_FALLBACK_POLYGON_SMOOTH	 0x40000
 #define I915_FALLBACK_POINT_SMOOTH	 0x80000
 #define I915_FALLBACK_POINT_SPRITE_COORD_ORIGIN	 0x100000
+#define I915_FALLBACK_DRAW_OFFSET	 0x200000
 
 #define I915_UPLOAD_CTX              0x1
 #define I915_UPLOAD_BUFFERS          0x2
diff --git a/src/mesa/drivers/dri/i915/i915_vtbl.c b/src/mesa/drivers/dri/i915/i915_vtbl.c
index 30aaab78c8..0a93e64b1f 100644
--- a/src/mesa/drivers/dri/i915/i915_vtbl.c
+++ b/src/mesa/drivers/dri/i915/i915_vtbl.c
@@ -378,15 +378,13 @@ i915_emit_state(struct intel_context *intel)
       OUT_BATCH(state->Buffer[I915_DESTREG_CBUFADDR0]);
       OUT_BATCH(state->Buffer[I915_DESTREG_CBUFADDR1]);
       OUT_RELOC(state->draw_region->buffer,
-		I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER,
-                state->draw_region->draw_offset);
+		I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 
       if (state->depth_region) {
          OUT_BATCH(state->Buffer[I915_DESTREG_DBUFADDR0]);
          OUT_BATCH(state->Buffer[I915_DESTREG_DBUFADDR1]);
          OUT_RELOC(state->depth_region->buffer,
-		   I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER,
-                   state->depth_region->draw_offset);
+		   I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
       }
 
       OUT_BATCH(state->Buffer[I915_DESTREG_DV0]);
@@ -534,6 +532,7 @@ i915_set_draw_region(struct intel_context *intel,
    struct intel_renderbuffer *irb = intel_renderbuffer(rb);
    GLuint value;
    struct i915_hw_state *state = &i915->state;
+   uint32_t draw_x, draw_y;
 
    if (state->draw_region != color_regions[0]) {
       intel_region_release(&state->draw_region);
@@ -596,14 +595,41 @@ i915_set_draw_region(struct intel_context *intel,
    }
    state->Buffer[I915_DESTREG_DV1] = value;
 
-   state->Buffer[I915_DESTREG_DRAWRECT0] = _3DSTATE_DRAWRECT_INFO;
-   state->Buffer[I915_DESTREG_DRAWRECT1] = 0;
-   state->Buffer[I915_DESTREG_DRAWRECT2] = 0; /* xmin, ymin */
-   state->Buffer[I915_DESTREG_DRAWRECT3] =
-      (ctx->DrawBuffer->Width & 0xffff) |
-      (ctx->DrawBuffer->Height << 16);
-   state->Buffer[I915_DESTREG_DRAWRECT4] = 0; /* xoff, yoff */
-   state->Buffer[I915_DESTREG_DRAWRECT5] = 0;
+   /* We set up the drawing rectangle to be offset into the color
+    * region's location in the miptree.  If it doesn't match with
+    * depth's offsets, we can't render to it.
+    *
+    * (Well, not actually true -- the hw grew a bit to let depth's
+    * offset get forced to 0,0.  We may want to use that if people are
+    * hitting that case.  Also, some configurations may be supportable
+    * by tweaking the start offset of the buffers around, which we
+    * can't do in general due to tiling)
+    */
+   FALLBACK(intel, I915_FALLBACK_DRAW_OFFSET,
+	    (depth_region && color_regions[0]) &&
+	    (depth_region->draw_x != color_regions[0]->draw_x ||
+	     depth_region->draw_y != color_regions[0]->draw_y));
+
+   if (color_regions[0]) {
+      draw_x = color_regions[0]->draw_x;
+      draw_y = color_regions[0]->draw_y;
+   } else if (depth_region) {
+      draw_x = depth_region->draw_x;
+      draw_y = depth_region->draw_y;
+   } else {
+      draw_x = 0;
+      draw_y = 0;
+   }
+
+   /* When changing drawing rectangle offset, an MI_FLUSH is first required. */
+   state->Buffer[I915_DESTREG_DRAWRECT0] = MI_FLUSH;
+   state->Buffer[I915_DESTREG_DRAWRECT1] = _3DSTATE_DRAWRECT_INFO;
+   state->Buffer[I915_DESTREG_DRAWRECT2] = 0;
+   state->Buffer[I915_DESTREG_DRAWRECT3] = (draw_y << 16) | draw_x;
+   state->Buffer[I915_DESTREG_DRAWRECT4] =
+      ((ctx->DrawBuffer->Width + draw_x) & 0xffff) |
+      ((ctx->DrawBuffer->Height + draw_y) << 16);
+   state->Buffer[I915_DESTREG_DRAWRECT5] = (draw_y << 16) | draw_x;
 
    I915_STATECHANGE(i915, I915_UPLOAD_BUFFERS);
 }
diff --git a/src/mesa/drivers/dri/i915/intel_tris.c b/src/mesa/drivers/dri/i915/intel_tris.c
index 0afbda2436..e63cd97db6 100644
--- a/src/mesa/drivers/dri/i915/intel_tris.c
+++ b/src/mesa/drivers/dri/i915/intel_tris.c
@@ -1177,6 +1177,8 @@ static char *fallbackStrings[] = {
    [17] = "Logic op",
    [18] = "Smooth polygon",
    [19] = "Smooth point",
+   [20] = "point sprite coord origin",
+   [21] = "depth/color drawing offset",
 };
 
 
-- 
cgit v1.2.3


From d82e1d7f95bf1fe2be9bc2ac5a2880401a8dc01c Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 14:55:25 -0800
Subject: swrast: Remove support for DrawPixels into a color-index buffer

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/swrast/s_drawpix.c | 81 ++-------------------------------------------
 1 file changed, 2 insertions(+), 79 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/swrast/s_drawpix.c b/src/mesa/swrast/s_drawpix.c
index 7571d5b8c0..3cec3a7a2b 100644
--- a/src/mesa/swrast/s_drawpix.c
+++ b/src/mesa/swrast/s_drawpix.c
@@ -267,7 +267,7 @@ fast_draw_rgba_pixels(GLcontext *ctx, GLint x, GLint y,
    if (format == GL_COLOR_INDEX && type == GL_UNSIGNED_BYTE) {
       const GLubyte *src = (const GLubyte *) pixels
          + unpack.SkipRows * unpack.RowLength + unpack.SkipPixels;
-      if (ctx->Visual.rgbMode && rbType == GL_UNSIGNED_BYTE) {
+      if (rbType == GL_UNSIGNED_BYTE) {
          /* convert ubyte/CI data to ubyte/RGBA */
          if (simpleZoom) {
             GLint row;
@@ -299,22 +299,6 @@ fast_draw_rgba_pixels(GLcontext *ctx, GLint x, GLint y,
          }
          return GL_TRUE;
       }
-      else if (!ctx->Visual.rgbMode && rbType == GL_UNSIGNED_INT) {
-         /* write CI data to CI frame buffer */
-         GLint row;
-         if (simpleZoom) {
-            for (row = 0; row < drawHeight; row++) {
-               GLuint index32[MAX_WIDTH];
-               GLint col;
-               for (col = 0; col < drawWidth; col++)
-                  index32[col] = src[col];
-               rb->PutRow(ctx, rb, drawWidth, destX, destY, index32, NULL);
-               src += unpack.RowLength;
-               destY += yStep;
-            }
-            return GL_TRUE;
-         }
-      }
    }
 
    /* can't handle this pixel format and/or data type */
@@ -323,57 +307,6 @@ fast_draw_rgba_pixels(GLcontext *ctx, GLint x, GLint y,
 
 
 
-/*
- * Draw color index image.
- */
-static void
-draw_index_pixels( GLcontext *ctx, GLint x, GLint y,
-                   GLsizei width, GLsizei height,
-                   GLenum type,
-                   const struct gl_pixelstore_attrib *unpack,
-                   const GLvoid *pixels )
-{
-   const GLint imgX = x, imgY = y;
-   const GLboolean zoom = ctx->Pixel.ZoomX!=1.0 || ctx->Pixel.ZoomY!=1.0;
-   GLint row, skipPixels;
-   SWspan span;
-
-   INIT_SPAN(span, GL_BITMAP);
-   span.arrayMask = SPAN_INDEX;
-   _swrast_span_default_attribs(ctx, &span);
-
-   /*
-    * General solution
-    */
-   skipPixels = 0;
-   while (skipPixels < width) {
-      const GLint spanWidth = MIN2(width - skipPixels, MAX_WIDTH);
-      ASSERT(spanWidth <= MAX_WIDTH);
-      for (row = 0; row < height; row++) {
-         const GLvoid *source = _mesa_image_address2d(unpack, pixels,
-                                                      width, height,
-                                                      GL_COLOR_INDEX, type,
-                                                      row, skipPixels);
-         _mesa_unpack_index_span(ctx, spanWidth, GL_UNSIGNED_INT,
-                                 span.array->index, type, source, unpack,
-                                 ctx->_ImageTransferState);
-
-         /* These may get changed during writing/clipping */
-         span.x = x + skipPixels;
-         span.y = y + row;
-         span.end = spanWidth;
-         
-         if (zoom)
-            _swrast_write_zoomed_index_span(ctx, imgX, imgY, &span);
-         else
-            _swrast_write_index_span(ctx, &span);
-      }
-      skipPixels += spanWidth;
-   }
-}
-
-
-
 /*
  * Draw stencil image.
  */
@@ -441,7 +374,6 @@ draw_depth_pixels( GLcontext *ctx, GLint x, GLint y,
        && ctx->DrawBuffer->Visual.depthBits == 16
        && !scaleOrBias
        && !zoom
-       && ctx->Visual.rgbMode
        && width <= MAX_WIDTH
        && !unpack->SwapBytes) {
       /* Special case: directly write 16-bit depth values */
@@ -462,7 +394,6 @@ draw_depth_pixels( GLcontext *ctx, GLint x, GLint y,
    else if (type == GL_UNSIGNED_INT
             && !scaleOrBias
             && !zoom
-            && ctx->Visual.rgbMode
             && width <= MAX_WIDTH
             && !unpack->SwapBytes) {
       /* Special case: shift 32-bit values down to Visual.depthBits */
@@ -515,11 +446,8 @@ draw_depth_pixels( GLcontext *ctx, GLint x, GLint y,
             if (zoom) {
                _swrast_write_zoomed_depth_span(ctx, x, y, &span);
             }
-            else if (ctx->Visual.rgbMode) {
-               _swrast_write_rgba_span(ctx, &span);
-            }
             else {
-               _swrast_write_index_span(ctx, &span);
+               _swrast_write_rgba_span(ctx, &span);
             }
          }
          skipPixels += spanWidth;
@@ -867,11 +795,6 @@ _swrast_DrawPixels( GLcontext *ctx,
       draw_depth_pixels( ctx, x, y, width, height, type, unpack, pixels );
       break;
    case GL_COLOR_INDEX:
-      if (ctx->Visual.rgbMode)
-	 draw_rgba_pixels(ctx, x,y, width, height, format, type, unpack, pixels);
-      else
-	 draw_index_pixels(ctx, x, y, width, height, type, unpack, pixels);
-      break;
    case GL_RED:
    case GL_GREEN:
    case GL_BLUE:
-- 
cgit v1.2.3


From e7e748cd04f5f014a1e4d8837ee7590d68115768 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 15:02:59 -0800
Subject: swrast: Remove support for CopyPixels to / from a color-index buffer

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/swrast/s_copypix.c | 117 ++------------------------------------------
 1 file changed, 5 insertions(+), 112 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/swrast/s_copypix.c b/src/mesa/swrast/s_copypix.c
index 3f37c027e4..f4f0c8a330 100644
--- a/src/mesa/swrast/s_copypix.c
+++ b/src/mesa/swrast/s_copypix.c
@@ -307,100 +307,6 @@ copy_rgba_pixels(GLcontext *ctx, GLint srcx, GLint srcy,
 }
 
 
-static void
-copy_ci_pixels( GLcontext *ctx, GLint srcx, GLint srcy,
-                GLint width, GLint height,
-                GLint destx, GLint desty )
-{
-   GLuint *tmpImage,*p;
-   GLint sy, dy, stepy;
-   GLint j;
-   const GLboolean zoom = ctx->Pixel.ZoomX != 1.0F || ctx->Pixel.ZoomY != 1.0F;
-   GLint overlapping;
-   SWspan span;
-
-   if (!ctx->ReadBuffer->_ColorReadBuffer) {
-      /* no readbuffer - OK */
-      return;
-   }
-
-   INIT_SPAN(span, GL_BITMAP);
-   _swrast_span_default_attribs(ctx, &span);
-   span.arrayMask = SPAN_INDEX;
-
-   if (ctx->DrawBuffer == ctx->ReadBuffer) {
-      overlapping = regions_overlap(srcx, srcy, destx, desty, width, height,
-                                    ctx->Pixel.ZoomX, ctx->Pixel.ZoomY);
-   }
-   else {
-      overlapping = GL_FALSE;
-   }
-
-   /* Determine if copy should be bottom-to-top or top-to-bottom */
-   if (!overlapping && srcy < desty) {
-      /* top-down  max-to-min */
-      sy = srcy + height - 1;
-      dy = desty + height - 1;
-      stepy = -1;
-   }
-   else {
-      /* bottom-up  min-to-max */
-      sy = srcy;
-      dy = desty;
-      stepy = 1;
-   }
-
-   if (overlapping) {
-      GLint ssy = sy;
-      tmpImage = (GLuint *) malloc(width * height * sizeof(GLuint));
-      if (!tmpImage) {
-         _mesa_error( ctx, GL_OUT_OF_MEMORY, "glCopyPixels" );
-         return;
-      }
-      /* read the image */
-      p = tmpImage;
-      for (j = 0; j < height; j++, ssy += stepy) {
-         _swrast_read_index_span( ctx, ctx->ReadBuffer->_ColorReadBuffer,
-                                  width, srcx, ssy, p );
-         p += width;
-      }
-      p = tmpImage;
-   }
-   else {
-      tmpImage = NULL;  /* silence compiler warning */
-      p = NULL;
-   }
-
-   for (j = 0; j < height; j++, sy += stepy, dy += stepy) {
-      /* Get color indexes */
-      if (overlapping) {
-         memcpy(span.array->index, p, width * sizeof(GLuint));
-         p += width;
-      }
-      else {
-         _swrast_read_index_span( ctx, ctx->ReadBuffer->_ColorReadBuffer,
-                                  width, srcx, sy, span.array->index );
-      }
-
-      if (ctx->_ImageTransferState)
-         _mesa_apply_ci_transfer_ops(ctx, ctx->_ImageTransferState,
-                                     width, span.array->index);
-
-      /* write color indexes */
-      span.x = destx;
-      span.y = dy;
-      span.end = width;
-      if (zoom)
-         _swrast_write_zoomed_index_span(ctx, destx, desty, &span);
-      else
-         _swrast_write_index_span(ctx, &span);
-   }
-
-   if (overlapping)
-      free(tmpImage);
-}
-
-
 /**
  * Convert floating point Z values to integer Z values with pixel transfer's
  * Z scale and bias.
@@ -522,18 +428,10 @@ copy_depth_pixels( GLcontext *ctx, GLint srcx, GLint srcy,
       span.x = destx;
       span.y = dy;
       span.end = width;
-      if (fb->Visual.rgbMode) {
-         if (zoom)
-            _swrast_write_zoomed_depth_span(ctx, destx, desty, &span);
-         else
-            _swrast_write_rgba_span(ctx, &span);
-      }
-      else {
-         if (zoom)
-            _swrast_write_zoomed_depth_span(ctx, destx, desty, &span);
-         else
-            _swrast_write_index_span(ctx, &span);
-      }
+      if (zoom)
+         _swrast_write_zoomed_depth_span(ctx, destx, desty, &span);
+      else
+         _swrast_write_rgba_span(ctx, &span);
    }
 
    if (overlapping)
@@ -909,12 +807,7 @@ _swrast_CopyPixels( GLcontext *ctx,
    if (!fast_copy_pixels(ctx, srcx, srcy, width, height, destx, desty, type)) {
       switch (type) {
       case GL_COLOR:
-         if (ctx->Visual.rgbMode) {
-            copy_rgba_pixels( ctx, srcx, srcy, width, height, destx, desty );
-         }
-         else {
-            copy_ci_pixels( ctx, srcx, srcy, width, height, destx, desty );
-         }
+         copy_rgba_pixels( ctx, srcx, srcy, width, height, destx, desty );
          break;
       case GL_DEPTH:
          copy_depth_pixels( ctx, srcx, srcy, width, height, destx, desty );
-- 
cgit v1.2.3


From ef0e02f93d5969e6659f5e41dd572c2db8e20044 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 15:11:04 -0800
Subject: swrast: Remove _swrast_write_zoomed_index_span and associated code

After removing support for CopyPixels and DrawPixels involving
color-index buffers, _swrast_write_zoomed_index_span is no longer
used.  Removed it and all the support for COLOR_INDEX formats in zoom_span.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/swrast/s_zoom.c | 48 ++----------------------------------------------
 src/mesa/swrast/s_zoom.h |  4 ----
 2 files changed, 2 insertions(+), 50 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/swrast/s_zoom.c b/src/mesa/swrast/s_zoom.c
index bec16208e3..f224627d50 100644
--- a/src/mesa/swrast/s_zoom.c
+++ b/src/mesa/swrast/s_zoom.c
@@ -185,15 +185,6 @@ zoom_span( GLcontext *ctx, GLint imgX, GLint imgY, const SWspan *span,
       zoomed.arrayAttribs |= FRAG_BIT_COL0;  /* we'll produce these values */
       ASSERT(span->arrayMask & SPAN_RGBA);
    }
-   else if (format == GL_COLOR_INDEX) {
-      /* copy Z info */
-      zoomed.z = span->z;
-      zoomed.zStep = span->zStep;
-      /* we'll generate an array of color indexes */
-      zoomed.interpMask = span->interpMask & ~SPAN_INDEX;
-      zoomed.arrayMask |= SPAN_INDEX;
-      ASSERT(span->arrayMask & SPAN_INDEX);
-   }
    else if (format == GL_DEPTH_COMPONENT) {
       /* Copy color info */
       zoomed.red = span->red;
@@ -288,16 +279,6 @@ zoom_span( GLcontext *ctx, GLint imgX, GLint imgY, const SWspan *span,
          }
       }
    }
-   else if (format == GL_COLOR_INDEX) {
-      const GLuint *indexes = (const GLuint *) src;
-      GLint i;
-      for (i = 0; i < zoomedWidth; i++) {
-         GLint j = unzoom_x(ctx->Pixel.ZoomX, imgX, x0 + i) - span->x;
-         ASSERT(j >= 0);
-         ASSERT(j < (GLint) span->end);
-         zoomed.array->index[i] = indexes[j];
-      }
-   }
    else if (format == GL_DEPTH_COMPONENT) {
       const GLuint *zValues = (const GLuint *) src;
       GLint i;
@@ -307,8 +288,8 @@ zoom_span( GLcontext *ctx, GLint imgX, GLint imgY, const SWspan *span,
          ASSERT(j < (GLint) span->end);
          zoomed.array->z[i] = zValues[j];
       }
-      /* Now, fall into either the RGB or COLOR_INDEX path below */
-      format = ctx->Visual.rgbMode ? GL_RGBA : GL_COLOR_INDEX;
+      /* Now, fall into the RGB path below */
+      format = GL_RGBA;
    }
 
    /* write the span in rows [r0, r1) */
@@ -335,22 +316,6 @@ zoom_span( GLcontext *ctx, GLint imgX, GLint imgY, const SWspan *span,
          }
       }
    }
-   else if (format == GL_COLOR_INDEX) {
-      /* use specular color array for temp storage */
-      GLuint *indexSave = (GLuint *) zoomed.array->attribs[FRAG_ATTRIB_FOGC];
-      const GLint end = zoomed.end; /* save */
-      if (y1 - y0 > 1) {
-         memcpy(indexSave, zoomed.array->index, zoomed.end * sizeof(GLuint));
-      }
-      for (zoomed.y = y0; zoomed.y < y1; zoomed.y++) {
-         _swrast_write_index_span(ctx, &zoomed);
-         zoomed.end = end;  /* restore */
-         if (y1 - y0 > 1) {
-            /* restore the colors */
-            memcpy(zoomed.array->index, indexSave, zoomed.end * sizeof(GLuint));
-         }
-      }
-   }
 }
 
 
@@ -370,15 +335,6 @@ _swrast_write_zoomed_rgb_span(GLcontext *ctx, GLint imgX, GLint imgY,
 }
 
 
-void
-_swrast_write_zoomed_index_span(GLcontext *ctx, GLint imgX, GLint imgY,
-                                const SWspan *span)
-{
-   zoom_span(ctx, imgX, imgY, span,
-             (const GLvoid *) span->array->index, GL_COLOR_INDEX);
-}
-
-
 void
 _swrast_write_zoomed_depth_span(GLcontext *ctx, GLint imgX, GLint imgY,
                                 const SWspan *span)
diff --git a/src/mesa/swrast/s_zoom.h b/src/mesa/swrast/s_zoom.h
index d2815b41a0..43917be65f 100644
--- a/src/mesa/swrast/s_zoom.h
+++ b/src/mesa/swrast/s_zoom.h
@@ -36,10 +36,6 @@ extern void
 _swrast_write_zoomed_rgb_span(GLcontext *ctx, GLint imgX, GLint imgY,
                               const SWspan *span, const GLvoid *rgb);
 
-extern void
-_swrast_write_zoomed_index_span(GLcontext *ctx, GLint imgX, GLint imgY,
-                                const SWspan *span);
-
 extern void
 _swrast_write_zoomed_depth_span(GLcontext *ctx, GLint imgX, GLint imgY,
                                 const SWspan *span);
-- 
cgit v1.2.3


From d05badba291ce4444b6aaabfd577bdbcf7929193 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 15:15:01 -0800
Subject: swrast: Remove support for Bitmap into a color-index buffer

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/swrast/s_bitmap.c | 15 +++------------
 1 file changed, 3 insertions(+), 12 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/swrast/s_bitmap.c b/src/mesa/swrast/s_bitmap.c
index 59e26e9ea3..da730213ac 100644
--- a/src/mesa/swrast/s_bitmap.c
+++ b/src/mesa/swrast/s_bitmap.c
@@ -125,10 +125,7 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py,
       if (count + width >= MAX_WIDTH || row + 1 == height) {
          /* flush the span */
          span.end = count;
-         if (ctx->Visual.rgbMode)
-            _swrast_write_rgba_span(ctx, &span);
-         else
-            _swrast_write_index_span(ctx, &span);
+         _swrast_write_rgba_span(ctx, &span);
          span.end = 0;
          count = 0;
       }
@@ -192,10 +189,7 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py,
             }
          }
 
-         if (ctx->Visual.rgbMode)
-            _swrast_write_rgba_span(ctx, &span);
-         else
-	    _swrast_write_index_span(ctx, &span);
+         _swrast_write_rgba_span(ctx, &span);
 
          /* get ready for next row */
          if (mask != 1)
@@ -215,10 +209,7 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py,
             }
          }
 
-         if (ctx->Visual.rgbMode)
-            _swrast_write_rgba_span(ctx, &span);
-         else
-            _swrast_write_index_span(ctx, &span);
+         _swrast_write_rgba_span(ctx, &span);
 
          /* get ready for next row */
          if (mask != 128)
-- 
cgit v1.2.3


From 0ed9c4bc7affb7a6b9be5ff129815fccf8c3885d Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 15:17:30 -0800
Subject: swrast: Remove support for rendering triangles into a color-index
 buffer

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/swrast/s_triangle.c | 29 ++++---------------------
 src/mesa/swrast/s_tritemp.h  | 50 --------------------------------------------
 2 files changed, 4 insertions(+), 75 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/swrast/s_triangle.c b/src/mesa/swrast/s_triangle.c
index 11184b72ce..812dddf15c 100644
--- a/src/mesa/swrast/s_triangle.c
+++ b/src/mesa/swrast/s_triangle.c
@@ -69,18 +69,6 @@ _swrast_culltriangle( GLcontext *ctx,
 
 
 
-/*
- * Render a smooth or flat-shaded color index triangle.
- */
-#define NAME ci_triangle
-#define INTERP_Z 1
-#define INTERP_ATTRIBS 1  /* just for fog */
-#define INTERP_INDEX 1
-#define RENDER_SPAN( span )  _swrast_write_index_span(ctx, &span);
-#include "s_tritemp.h"
-
-
-
 /*
  * Render a flat-shaded RGBA triangle.
  */
@@ -1007,7 +995,6 @@ void
 _swrast_choose_triangle( GLcontext *ctx )
 {
    SWcontext *swrast = SWRAST_CONTEXT(ctx);
-   const GLboolean rgbmode = ctx->Visual.rgbMode;
 
    if (ctx->Polygon.CullFlag &&
        ctx->Polygon.CullFaceMode == GL_FRONT_AND_BACK) {
@@ -1029,23 +1016,15 @@ _swrast_choose_triangle( GLcontext *ctx )
           ctx->Depth.Mask == GL_FALSE &&
           ctx->Depth.Func == GL_LESS &&
           !ctx->Stencil._Enabled) {
-         if ((rgbmode &&
-              ctx->Color.ColorMask[0][0] == 0 &&
-              ctx->Color.ColorMask[0][1] == 0 &&
-              ctx->Color.ColorMask[0][2] == 0 &&
-              ctx->Color.ColorMask[0][3] == 0)
-             ||
-             (!rgbmode && ctx->Color.IndexMask == 0)) {
+         if (ctx->Color.ColorMask[0][0] == 0 &&
+	     ctx->Color.ColorMask[0][1] == 0 &&
+	     ctx->Color.ColorMask[0][2] == 0 &&
+	     ctx->Color.ColorMask[0][3] == 0) {
             USE(occlusion_zless_triangle);
             return;
          }
       }
 
-      if (!rgbmode) {
-         USE(ci_triangle);
-         return;
-      }
-
       /*
        * XXX should examine swrast->_ActiveAttribMask to determine what
        * needs to be interpolated.
diff --git a/src/mesa/swrast/s_tritemp.h b/src/mesa/swrast/s_tritemp.h
index 8e3c5b5eeb..0aa8739f4f 100644
--- a/src/mesa/swrast/s_tritemp.h
+++ b/src/mesa/swrast/s_tritemp.h
@@ -32,7 +32,6 @@
  *    INTERP_Z        - if defined, interpolate integer Z values
  *    INTERP_RGB      - if defined, interpolate integer RGB values
  *    INTERP_ALPHA    - if defined, interpolate integer Alpha values
- *    INTERP_INDEX    - if defined, interpolate color index values
  *    INTERP_INT_TEX  - if defined, interpolate integer ST texcoords
  *                         (fast, simple 2-D texture mapping, without
  *                         perspective correction)
@@ -319,9 +318,6 @@ static void NAME(GLcontext *ctx, const SWvertex *v0,
 
    {
       GLint scan_from_left_to_right;  /* true if scanning left-to-right */
-#ifdef INTERP_INDEX
-      GLfloat didx, didy;
-#endif
 
       /*
        * Execute user-supplied setup code
@@ -398,21 +394,6 @@ static void NAME(GLcontext *ctx, const SWvertex *v0,
 #  endif
       }
 #endif /* INTERP_RGB */
-#ifdef INTERP_INDEX
-      span.interpMask |= SPAN_INDEX;
-      if (ctx->Light.ShadeModel == GL_SMOOTH) {
-         GLfloat eMaj_di = vMax->attrib[FRAG_ATTRIB_CI][0] - vMin->attrib[FRAG_ATTRIB_CI][0];
-         GLfloat eBot_di = vMid->attrib[FRAG_ATTRIB_CI][0] - vMin->attrib[FRAG_ATTRIB_CI][0];
-         didx = oneOverArea * (eMaj_di * eBot.dy - eMaj.dy * eBot_di);
-         didy = oneOverArea * (eMaj.dx * eBot_di - eMaj_di * eBot.dx);
-         span.indexStep = SignedFloatToFixed(didx);
-      }
-      else {
-         span.interpMask |= SPAN_FLAT;
-         didx = didy = 0.0F;
-         span.indexStep = 0;
-      }
-#endif
 #ifdef INTERP_INT_TEX
       {
          GLfloat eMaj_ds = (vMax->attrib[FRAG_ATTRIB_TEX0][0] - vMin->attrib[FRAG_ATTRIB_TEX0][0]) * S_SCALE;
@@ -531,9 +512,6 @@ static void NAME(GLcontext *ctx, const SWvertex *v0,
 #ifdef INTERP_ALPHA
          GLint aLeft = 0, fdaOuter = 0, fdaInner;
 #endif
-#ifdef INTERP_INDEX
-         GLfixed iLeft=0, diOuter=0, diInner;
-#endif
 #ifdef INTERP_INT_TEX
          GLfixed sLeft=0, dsOuter=0, dsInner;
          GLfixed tLeft=0, dtOuter=0, dtInner;
@@ -697,18 +675,6 @@ static void NAME(GLcontext *ctx, const SWvertex *v0,
 #endif /* INTERP_RGB */
 
 
-#ifdef INTERP_INDEX
-               if (ctx->Light.ShadeModel == GL_SMOOTH) {
-                  iLeft = (GLfixed)(vLower->attrib[FRAG_ATTRIB_CI][0] * FIXED_SCALE
-                                 + didx * adjx + didy * adjy) + FIXED_HALF;
-                  diOuter = SignedFloatToFixed(didy + dxOuter * didx);
-               }
-               else {
-                  ASSERT(ctx->Light.ShadeModel == GL_FLAT);
-                  iLeft = FloatToFixed(v2->attrib[FRAG_ATTRIB_CI][0]);
-                  diOuter = 0;
-               }
-#endif
 #ifdef INTERP_INT_TEX
                {
                   GLfloat s0, t0;
@@ -784,9 +750,6 @@ static void NAME(GLcontext *ctx, const SWvertex *v0,
 #ifdef INTERP_ALPHA
             fdaInner = fdaOuter + span.alphaStep;
 #endif
-#ifdef INTERP_INDEX
-            diInner = diOuter + span.indexStep;
-#endif
 #ifdef INTERP_INT_TEX
             dsInner = dsOuter + span.intTexStep[0];
             dtInner = dtOuter + span.intTexStep[1];
@@ -822,9 +785,6 @@ static void NAME(GLcontext *ctx, const SWvertex *v0,
 #ifdef INTERP_ALPHA
                span.alpha = aLeft;
 #endif
-#ifdef INTERP_INDEX
-               span.index = iLeft;
-#endif
 #ifdef INTERP_INT_TEX
                span.intTex[0] = sLeft;
                span.intTex[1] = tLeft;
@@ -854,9 +814,6 @@ static void NAME(GLcontext *ctx, const SWvertex *v0,
 #endif
 #ifdef INTERP_ALPHA
                   CLAMP_INTERPOLANT(alpha, alphaStep, len);
-#endif
-#ifdef INTERP_INDEX
-                  CLAMP_INTERPOLANT(index, indexStep, len);
 #endif
                   {
                      RENDER_SPAN( span );
@@ -896,9 +853,6 @@ static void NAME(GLcontext *ctx, const SWvertex *v0,
 #ifdef INTERP_ALPHA
                   aLeft += fdaOuter;
 #endif
-#ifdef INTERP_INDEX
-                  iLeft += diOuter;
-#endif
 #ifdef INTERP_INT_TEX
                   sLeft += dsOuter;
                   tLeft += dtOuter;
@@ -931,9 +885,6 @@ static void NAME(GLcontext *ctx, const SWvertex *v0,
 #ifdef INTERP_ALPHA
                   aLeft += fdaInner;
 #endif
-#ifdef INTERP_INDEX
-                  iLeft += diInner;
-#endif
 #ifdef INTERP_INT_TEX
                   sLeft += dsInner;
                   tLeft += dtInner;
@@ -967,7 +918,6 @@ static void NAME(GLcontext *ctx, const SWvertex *v0,
 #undef INTERP_Z
 #undef INTERP_RGB
 #undef INTERP_ALPHA
-#undef INTERP_INDEX
 #undef INTERP_INT_TEX
 #undef INTERP_ATTRIBS
 
-- 
cgit v1.2.3


From dbe901ceb01e48ba7d79fd9245b9d339ef17c692 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 15:20:11 -0800
Subject: swrast: Remove support for rendering points into a color-index buffer

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/swrast/s_points.c | 56 +++++++++++++---------------------------------
 1 file changed, 16 insertions(+), 40 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/swrast/s_points.c b/src/mesa/swrast/s_points.c
index a9a704a16e..1663ece829 100644
--- a/src/mesa/swrast/s_points.c
+++ b/src/mesa/swrast/s_points.c
@@ -244,7 +244,6 @@ static void
 smooth_point(GLcontext *ctx, const SWvertex *vert)
 {
    SWcontext *swrast = SWRAST_CONTEXT(ctx);
-   const GLboolean ciMode = !ctx->Visual.rgbMode;
    SWspan span;
    GLfloat size, alphaAtten;
 
@@ -335,10 +334,6 @@ smooth_point(GLcontext *ctx, const SWvertex *vert)
                if (dist2 >= rmin2) {
                   /* compute partial coverage */
                   coverage = 1.0F - (dist2 - rmin2) * cscale;
-                  if (ciMode) {
-                     /* coverage in [0,15] */
-                     coverage *= 15.0;
-                  }
                }
                else {
                   /* full coverage */
@@ -369,7 +364,6 @@ static void
 large_point(GLcontext *ctx, const SWvertex *vert)
 {
    SWcontext *swrast = SWRAST_CONTEXT(ctx);
-   const GLboolean ciMode = !ctx->Visual.rgbMode;
    SWspan span;
    GLfloat size;
 
@@ -389,22 +383,15 @@ large_point(GLcontext *ctx, const SWvertex *vert)
    span.arrayMask = SPAN_XY;
    span.facing = swrast->PointLineFacing;
 
-   if (ciMode) {
-      span.interpMask = SPAN_Z | SPAN_INDEX;
-      span.index = FloatToFixed(vert->attrib[FRAG_ATTRIB_CI][0]);
-      span.indexStep = 0;
-   }
-   else {
-      span.interpMask = SPAN_Z | SPAN_RGBA;
-      span.red   = ChanToFixed(vert->color[0]);
-      span.green = ChanToFixed(vert->color[1]);
-      span.blue  = ChanToFixed(vert->color[2]);
-      span.alpha = ChanToFixed(vert->color[3]);
-      span.redStep = 0;
-      span.greenStep = 0;
-      span.blueStep = 0;
-      span.alphaStep = 0;
-   }
+   span.interpMask = SPAN_Z | SPAN_RGBA;
+   span.red   = ChanToFixed(vert->color[0]);
+   span.green = ChanToFixed(vert->color[1]);
+   span.blue  = ChanToFixed(vert->color[2]);
+   span.alpha = ChanToFixed(vert->color[3]);
+   span.redStep = 0;
+   span.greenStep = 0;
+   span.blueStep = 0;
+   span.alphaStep = 0;
 
    /* need these for fragment programs */
    span.attrStart[FRAG_ATTRIB_WPOS][3] = 1.0F;
@@ -466,7 +453,6 @@ static void
 pixel_point(GLcontext *ctx, const SWvertex *vert)
 {
    SWcontext *swrast = SWRAST_CONTEXT(ctx);
-   const GLboolean ciMode = !ctx->Visual.rgbMode;
    /*
     * Note that unlike the other functions, we put single-pixel points
     * into a special span array in order to render as many points as
@@ -480,10 +466,7 @@ pixel_point(GLcontext *ctx, const SWvertex *vert)
    /* Span init */
    span->interpMask = 0;
    span->arrayMask = SPAN_XY | SPAN_Z;
-   if (ciMode)
-      span->arrayMask |= SPAN_INDEX;
-   else
-      span->arrayMask |= SPAN_RGBA;
+   span->arrayMask |= SPAN_RGBA;
    /*span->arrayMask |= SPAN_LAMBDA;*/
    span->arrayAttribs = swrast->_ActiveAttribMask; /* we'll produce these vals */
 
@@ -497,10 +480,7 @@ pixel_point(GLcontext *ctx, const SWvertex *vert)
        (swrast->_RasterMask & (BLEND_BIT | LOGIC_OP_BIT | MASKING_BIT)) ||
        span->facing != swrast->PointLineFacing) {
       if (span->end > 0) {
-         if (ciMode)
-            _swrast_write_index_span(ctx, span);
-         else
-            _swrast_write_rgba_span(ctx, span);
+	 _swrast_write_rgba_span(ctx, span);
          span->end = 0;
       }
    }
@@ -510,15 +490,11 @@ pixel_point(GLcontext *ctx, const SWvertex *vert)
    span->facing = swrast->PointLineFacing;
 
    /* fragment attributes */
-   if (ciMode) {
-      span->array->index[count] = (GLuint) vert->attrib[FRAG_ATTRIB_CI][0];
-   }
-   else {
-      span->array->rgba[count][RCOMP] = vert->color[0];
-      span->array->rgba[count][GCOMP] = vert->color[1];
-      span->array->rgba[count][BCOMP] = vert->color[2];
-      span->array->rgba[count][ACOMP] = vert->color[3];
-   }
+   span->array->rgba[count][RCOMP] = vert->color[0];
+   span->array->rgba[count][GCOMP] = vert->color[1];
+   span->array->rgba[count][BCOMP] = vert->color[2];
+   span->array->rgba[count][ACOMP] = vert->color[3];
+
    ATTRIB_LOOP_BEGIN
       COPY_4V(span->array->attribs[attr][count], vert->attrib[attr]);
    ATTRIB_LOOP_END
-- 
cgit v1.2.3


From e6df80184b0c7e83eba382b3161ba11db497c55d Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 15:22:56 -0800
Subject: swrast: Remove support for rendering lines into a color-index buffer

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/swrast/s_lines.c    | 48 +++++---------------------------------------
 src/mesa/swrast/s_linetemp.h | 18 -----------------
 2 files changed, 5 insertions(+), 61 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/swrast/s_lines.c b/src/mesa/swrast/s_lines.c
index cff36042cb..7db5af4ae1 100644
--- a/src/mesa/swrast/s_lines.c
+++ b/src/mesa/swrast/s_lines.c
@@ -87,10 +87,7 @@ draw_wide_line( GLcontext *ctx, SWspan *span, GLboolean xMajor )
             for (i = 0; i < span->end; i++)
                y[i]++;
          }
-         if (ctx->Visual.rgbMode)
-            _swrast_write_rgba_span(ctx, span);
-         else
-            _swrast_write_index_span(ctx, span);
+	 _swrast_write_rgba_span(ctx, span);
       }
    }
    else {
@@ -106,10 +103,7 @@ draw_wide_line( GLcontext *ctx, SWspan *span, GLboolean xMajor )
             for (i = 0; i < span->end; i++)
                x[i]++;
          }
-         if (ctx->Visual.rgbMode)
-            _swrast_write_rgba_span(ctx, span);
-         else
-            _swrast_write_index_span(ctx, span);
+	 _swrast_write_rgba_span(ctx, span);
       }
    }
 }
@@ -120,12 +114,6 @@ draw_wide_line( GLcontext *ctx, SWspan *span, GLboolean xMajor )
 /*****                    Rasterization                           *****/
 /**********************************************************************/
 
-/* Simple color index line (no stipple, width=1, no Z, no fog, no tex)*/
-#define NAME simple_no_z_ci_line
-#define INTERP_INDEX
-#define RENDER_SPAN(span) _swrast_write_index_span(ctx, &span)
-#include "s_linetemp.h"
-
 /* Simple RGBA index line (no stipple, width=1, no Z, no fog, no tex)*/
 #define NAME simple_no_z_rgba_line
 #define INTERP_RGBA
@@ -133,25 +121,6 @@ draw_wide_line( GLcontext *ctx, SWspan *span, GLboolean xMajor )
 #include "s_linetemp.h"
 
 
-/* Z, fog, wide, stipple color index line */
-#define NAME ci_line
-#define INTERP_INDEX
-#define INTERP_Z
-#define INTERP_ATTRIBS /* for fog */
-#define RENDER_SPAN(span)					\
-   if (ctx->Line.StippleFlag) {					\
-      span.arrayMask |= SPAN_MASK;				\
-      compute_stipple_mask(ctx, span.end, span.array->mask);    \
-   }								\
-   if (ctx->Line.Width > 1.0) {					\
-      draw_wide_line(ctx, &span, (GLboolean)(dx > dy));		\
-   }								\
-   else {							\
-      _swrast_write_index_span(ctx, &span);			\
-   }
-#include "s_linetemp.h"
-
-
 /* Z, fog, wide, stipple RGBA line */
 #define NAME rgba_line
 #define INTERP_RGBA
@@ -256,7 +225,6 @@ void
 _swrast_choose_line( GLcontext *ctx )
 {
    SWcontext *swrast = SWRAST_CONTEXT(ctx);
-   const GLboolean rgbmode = ctx->Visual.rgbMode;
    GLboolean specular = (ctx->Fog.ColorSumEnabled ||
                          (ctx->Light.Enabled &&
                           ctx->Light.Model.ColorControl == GL_SEPARATE_SPECULAR_COLOR));
@@ -277,23 +245,17 @@ _swrast_choose_line( GLcontext *ctx )
                || ctx->Line.Width != 1.0
                || ctx->Line.StippleFlag) {
          /* no texture, but Z, fog, width>1, stipple, etc. */
-         if (rgbmode)
 #if CHAN_BITS == 32
-            USE(general_line);
+         USE(general_line);
 #else
-            USE(rgba_line);
+         USE(rgba_line);
 #endif
-         else
-            USE(ci_line);
       }
       else {
          ASSERT(!ctx->Depth.Test);
          ASSERT(ctx->Line.Width == 1.0);
          /* simple lines */
-         if (rgbmode)
-            USE(simple_no_z_rgba_line);
-         else
-            USE(simple_no_z_ci_line);
+         USE(simple_no_z_rgba_line);
       }
    }
    else if (ctx->RenderMode == GL_FEEDBACK) {
diff --git a/src/mesa/swrast/s_linetemp.h b/src/mesa/swrast/s_linetemp.h
index 1abf8d6c7f..182f962e1e 100644
--- a/src/mesa/swrast/s_linetemp.h
+++ b/src/mesa/swrast/s_linetemp.h
@@ -31,8 +31,6 @@
  * The following macros may be defined to indicate what auxillary information
  * must be interplated along the line:
  *    INTERP_Z        - if defined, interpolate Z values
- *    INTERP_RGBA     - if defined, interpolate RGBA values
- *    INTERP_INDEX    - if defined, interpolate color index values
  *    INTERP_ATTRIBS  - if defined, interpolate attribs (texcoords, varying, etc)
  *
  * When one can directly address pixels in the color buffer the following
@@ -223,7 +221,6 @@ NAME( GLcontext *ctx, const SWvertex *vert0, const SWvertex *vert1 )
    /*
     * Span setup: compute start and step values for all interpolated values.
     */
-#ifdef INTERP_RGBA
    interpFlags |= SPAN_RGBA;
    if (ctx->Light.ShadeModel == GL_SMOOTH) {
       span.red   = ChanToFixed(vert0->color[0]);
@@ -245,19 +242,6 @@ NAME( GLcontext *ctx, const SWvertex *vert0, const SWvertex *vert1 )
       span.blueStep  = 0;
       span.alphaStep = 0;
    }
-#endif
-#ifdef INTERP_INDEX
-   interpFlags |= SPAN_INDEX;
-   if (ctx->Light.ShadeModel == GL_SMOOTH) {
-      span.index = FloatToFixed(vert0->attrib[FRAG_ATTRIB_CI][0]);
-      span.indexStep = FloatToFixed(  vert1->attrib[FRAG_ATTRIB_CI][0]
-                                    - vert0->attrib[FRAG_ATTRIB_CI][0]) / numPixels;
-   }
-   else {
-      span.index = FloatToFixed(vert1->attrib[FRAG_ATTRIB_CI][0]);
-      span.indexStep = 0;
-   }
-#endif
 #if defined(INTERP_Z) || defined(DEPTH_TYPE)
    interpFlags |= SPAN_Z;
    {
@@ -407,9 +391,7 @@ NAME( GLcontext *ctx, const SWvertex *vert0, const SWvertex *vert1 )
 
 #undef NAME
 #undef INTERP_Z
-#undef INTERP_RGBA
 #undef INTERP_ATTRIBS
-#undef INTERP_INDEX
 #undef PIXEL_ADDRESS
 #undef PIXEL_TYPE
 #undef DEPTH_TYPE
-- 
cgit v1.2.3


From 87b9f5a7251b96bd315a72ae6fd972aa94e226e0 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 15:26:48 -0800
Subject: swrast: Remove support for rendering antialiased triangles into a
 color-index buffer

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/swrast/s_aatriangle.c | 20 +---------------
 src/mesa/swrast/s_aatritemp.h  | 52 ------------------------------------------
 2 files changed, 1 insertion(+), 71 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/swrast/s_aatriangle.c b/src/mesa/swrast/s_aatriangle.c
index 078f16aea0..fe3338ecef 100644
--- a/src/mesa/swrast/s_aatriangle.c
+++ b/src/mesa/swrast/s_aatriangle.c
@@ -357,20 +357,6 @@ rgba_aa_tri(GLcontext *ctx,
 	    const SWvertex *v2)
 {
 #define DO_Z
-#define DO_RGBA
-#include "s_aatritemp.h"
-}
-
-
-static void
-index_aa_tri(GLcontext *ctx,
-	     const SWvertex *v0,
-	     const SWvertex *v1,
-	     const SWvertex *v2)
-{
-#define DO_Z
-#define DO_ATTRIBS
-#define DO_INDEX
 #include "s_aatritemp.h"
 }
 
@@ -382,7 +368,6 @@ general_aa_tri(GLcontext *ctx,
                const SWvertex *v2)
 {
 #define DO_Z
-#define DO_RGBA
 #define DO_ATTRIBS
 #include "s_aatritemp.h"
 }
@@ -406,11 +391,8 @@ _swrast_set_aa_triangle_function(GLcontext *ctx)
        || NEED_SECONDARY_COLOR(ctx)) {
       SWRAST_CONTEXT(ctx)->Triangle = general_aa_tri;
    }
-   else if (ctx->Visual.rgbMode) {
-      SWRAST_CONTEXT(ctx)->Triangle = rgba_aa_tri;
-   }
    else {
-      SWRAST_CONTEXT(ctx)->Triangle = index_aa_tri;
+      SWRAST_CONTEXT(ctx)->Triangle = rgba_aa_tri;
    }
 
    ASSERT(SWRAST_CONTEXT(ctx)->Triangle);
diff --git a/src/mesa/swrast/s_aatritemp.h b/src/mesa/swrast/s_aatritemp.h
index 76d4005b8c..5c1c6d9044 100644
--- a/src/mesa/swrast/s_aatritemp.h
+++ b/src/mesa/swrast/s_aatritemp.h
@@ -33,8 +33,6 @@
  * The following macros may be defined to indicate what auxillary information
  * must be copmuted across the triangle:
  *    DO_Z         - if defined, compute Z values
- *    DO_RGBA      - if defined, compute RGBA values
- *    DO_INDEX     - if defined, compute color index values
  *    DO_ATTRIBS   - if defined, compute texcoords, varying, etc.
  */
 
@@ -55,12 +53,7 @@
 #ifdef DO_Z
    GLfloat zPlane[4];
 #endif
-#ifdef DO_RGBA
    GLfloat rPlane[4], gPlane[4], bPlane[4], aPlane[4];
-#endif
-#ifdef DO_INDEX
-   GLfloat iPlane[4];
-#endif
 #if defined(DO_ATTRIBS)
    GLfloat attrPlane[FRAG_ATTRIB_MAX][4][4];
    GLfloat wPlane[4];  /* win[3] */
@@ -126,7 +119,6 @@
    compute_plane(p0, p1, p2, p0[2], p1[2], p2[2], zPlane);
    span.arrayMask |= SPAN_Z;
 #endif
-#ifdef DO_RGBA
    if (ctx->Light.ShadeModel == GL_SMOOTH) {
       compute_plane(p0, p1, p2, v0->color[RCOMP], v1->color[RCOMP], v2->color[RCOMP], rPlane);
       compute_plane(p0, p1, p2, v0->color[GCOMP], v1->color[GCOMP], v2->color[GCOMP], gPlane);
@@ -140,17 +132,6 @@
       constant_plane(v2->color[ACOMP], aPlane);
    }
    span.arrayMask |= SPAN_RGBA;
-#endif
-#ifdef DO_INDEX
-   if (ctx->Light.ShadeModel == GL_SMOOTH) {
-      compute_plane(p0, p1, p2, (GLfloat) v0->attrib[FRAG_ATTRIB_CI][0],
-                    v1->attrib[FRAG_ATTRIB_CI][0], v2->attrib[FRAG_ATTRIB_CI][0], iPlane);
-   }
-   else {
-      constant_plane(v2->attrib[FRAG_ATTRIB_CI][0], iPlane);
-   }
-   span.arrayMask |= SPAN_INDEX;
-#endif
 #if defined(DO_ATTRIBS)
    {
       const GLfloat invW0 = v0->attrib[FRAG_ATTRIB_WPOS][3];
@@ -234,23 +215,14 @@
             /* (cx,cy) = center of fragment */
             const GLfloat cx = ix + 0.5F, cy = iy + 0.5F;
             SWspanarrays *array = span.array;
-#ifdef DO_INDEX
-            array->coverage[count] = (GLfloat) compute_coveragei(pMin, pMid, pMax, ix, iy);
-#else
             array->coverage[count] = coverage;
-#endif
 #ifdef DO_Z
             array->z[count] = (GLuint) solve_plane(cx, cy, zPlane);
 #endif
-#ifdef DO_RGBA
             array->rgba[count][RCOMP] = solve_plane_chan(cx, cy, rPlane);
             array->rgba[count][GCOMP] = solve_plane_chan(cx, cy, gPlane);
             array->rgba[count][BCOMP] = solve_plane_chan(cx, cy, bPlane);
             array->rgba[count][ACOMP] = solve_plane_chan(cx, cy, aPlane);
-#endif
-#ifdef DO_INDEX
-            array->index[count] = (GLint) solve_plane(cx, cy, iPlane);
-#endif
             ix++;
             count++;
             coverage = compute_coveragef(pMin, pMid, pMax, ix, iy);
@@ -262,11 +234,7 @@
          span.x = startX;
          span.y = iy;
          span.end = (GLuint) ix - (GLuint) startX;
-#if defined(DO_RGBA)
          _swrast_write_rgba_span(ctx, &span);
-#else
-         _swrast_write_index_span(ctx, &span);
-#endif
       }
    }
    else {
@@ -304,23 +272,14 @@
             const GLfloat cx = ix + 0.5F, cy = iy + 0.5F;
             SWspanarrays *array = span.array;
             ASSERT(ix >= 0);
-#ifdef DO_INDEX
-            array->coverage[ix] = (GLfloat) compute_coveragei(pMin, pMax, pMid, ix, iy);
-#else
             array->coverage[ix] = coverage;
-#endif
 #ifdef DO_Z
             array->z[ix] = (GLuint) solve_plane(cx, cy, zPlane);
 #endif
-#ifdef DO_RGBA
             array->rgba[ix][RCOMP] = solve_plane_chan(cx, cy, rPlane);
             array->rgba[ix][GCOMP] = solve_plane_chan(cx, cy, gPlane);
             array->rgba[ix][BCOMP] = solve_plane_chan(cx, cy, bPlane);
             array->rgba[ix][ACOMP] = solve_plane_chan(cx, cy, aPlane);
-#endif
-#ifdef DO_INDEX
-            array->index[ix] = (GLint) solve_plane(cx, cy, iPlane);
-#endif
             ix--;
             count++;
             coverage = compute_coveragef(pMin, pMax, pMid, ix, iy);
@@ -351,12 +310,7 @@
             GLint j;
             for (j = 0; j < (GLint) n; j++) {
                array->coverage[j] = array->coverage[j + left];
-#ifdef DO_RGBA
                COPY_CHAN4(array->rgba[j], array->rgba[j + left]);
-#endif
-#ifdef DO_INDEX
-               array->index[j] = array->index[j + left];
-#endif
 #ifdef DO_Z
                array->z[j] = array->z[j + left];
 #endif
@@ -366,18 +320,12 @@
          span.x = left;
          span.y = iy;
          span.end = n;
-#if defined(DO_RGBA)
          _swrast_write_rgba_span(ctx, &span);
-#else
-         _swrast_write_index_span(ctx, &span);
-#endif
       }
    }
 }
 
 
 #undef DO_Z
-#undef DO_RGBA
-#undef DO_INDEX
 #undef DO_ATTRIBS
 #undef DO_OCCLUSION_TEST
-- 
cgit v1.2.3


From e5ed4c45c675ebdd595ad0d31f2835f8b2b8dc57 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 15:39:08 -0800
Subject: swrast: Remove support for rendering antialiased lines into a
 color-index buffer

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/swrast/s_aaline.c     | 50 ++++++++----------------------------------
 src/mesa/swrast/s_aalinetemp.h | 32 ---------------------------
 2 files changed, 9 insertions(+), 73 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/swrast/s_aaline.c b/src/mesa/swrast/s_aaline.c
index 9bfa8f2e61..6ba4604e69 100644
--- a/src/mesa/swrast/s_aaline.c
+++ b/src/mesa/swrast/s_aaline.c
@@ -59,10 +59,8 @@ struct LineInfo
 
    /* DO_Z */
    GLfloat zPlane[4];
-   /* DO_RGBA */
+   /* DO_RGBA - always enabled */
    GLfloat rPlane[4], gPlane[4], bPlane[4], aPlane[4];
-   /* DO_INDEX */
-   GLfloat iPlane[4];
    /* DO_ATTRIBS */
    GLfloat wPlane[4];
    GLfloat attrPlane[FRAG_ATTRIB_MAX][4][4];
@@ -325,20 +323,6 @@ compute_coveragef(const struct LineInfo *info,
 }
 
 
-/**
- * Compute coverage value for color index mode.
- * XXX this may not be quite correct.
- * \return coverage in [0,15].
- */
-static GLfloat
-compute_coveragei(const struct LineInfo *info,
-                  GLint winx, GLint winy)
-{
-   return compute_coveragef(info, winx, winy) * 15.0F;
-}
-
-
-
 typedef void (*plot_func)(GLcontext *ctx, struct LineInfo *line,
                           int ix, int iy);
                          
@@ -475,22 +459,13 @@ segment(GLcontext *ctx,
 }
 
 
-#define NAME(x) aa_ci_##x
-#define DO_Z
-#define DO_ATTRIBS /* for fog */
-#define DO_INDEX
-#include "s_aalinetemp.h"
-
-
 #define NAME(x) aa_rgba_##x
 #define DO_Z
-#define DO_RGBA
 #include "s_aalinetemp.h"
 
 
 #define NAME(x)  aa_general_rgba_##x
 #define DO_Z
-#define DO_RGBA
 #define DO_ATTRIBS
 #include "s_aalinetemp.h"
 
@@ -503,22 +478,15 @@ _swrast_choose_aa_line_function(GLcontext *ctx)
 
    ASSERT(ctx->Line.SmoothFlag);
 
-   if (ctx->Visual.rgbMode) {
-      /* RGBA */
-      if (ctx->Texture._EnabledCoordUnits != 0
-          || ctx->FragmentProgram._Current
-          || (ctx->Light.Enabled &&
-              ctx->Light.Model.ColorControl == GL_SEPARATE_SPECULAR_COLOR)
-          || ctx->Fog.ColorSumEnabled
-          || swrast->_FogEnabled) {
-         swrast->Line = aa_general_rgba_line;
-      }
-      else {
-         swrast->Line = aa_rgba_line;
-      }
+   if (ctx->Texture._EnabledCoordUnits != 0
+       || ctx->FragmentProgram._Current
+       || (ctx->Light.Enabled &&
+           ctx->Light.Model.ColorControl == GL_SEPARATE_SPECULAR_COLOR)
+       || ctx->Fog.ColorSumEnabled
+       || swrast->_FogEnabled) {
+      swrast->Line = aa_general_rgba_line;
    }
    else {
-      /* Color Index */
-      swrast->Line = aa_ci_line;
+      swrast->Line = aa_rgba_line;
    }
 }
diff --git a/src/mesa/swrast/s_aalinetemp.h b/src/mesa/swrast/s_aalinetemp.h
index 42ffe9f20c..c28d47a671 100644
--- a/src/mesa/swrast/s_aalinetemp.h
+++ b/src/mesa/swrast/s_aalinetemp.h
@@ -39,11 +39,7 @@ NAME(plot)(GLcontext *ctx, struct LineInfo *line, int ix, int iy)
    const SWcontext *swrast = SWRAST_CONTEXT(ctx);
    const GLfloat fx = (GLfloat) ix;
    const GLfloat fy = (GLfloat) iy;
-#ifdef DO_INDEX
-   const GLfloat coverage = compute_coveragei(line, ix, iy);
-#else
    const GLfloat coverage = compute_coveragef(line, ix, iy);
-#endif
    const GLuint i = line->span.end;
 
    (void) swrast;
@@ -63,15 +59,10 @@ NAME(plot)(GLcontext *ctx, struct LineInfo *line, int ix, int iy)
 #ifdef DO_Z
    line->span.array->z[i] = (GLuint) solve_plane(fx, fy, line->zPlane);
 #endif
-#ifdef DO_RGBA
    line->span.array->rgba[i][RCOMP] = solve_plane_chan(fx, fy, line->rPlane);
    line->span.array->rgba[i][GCOMP] = solve_plane_chan(fx, fy, line->gPlane);
    line->span.array->rgba[i][BCOMP] = solve_plane_chan(fx, fy, line->bPlane);
    line->span.array->rgba[i][ACOMP] = solve_plane_chan(fx, fy, line->aPlane);
-#endif
-#ifdef DO_INDEX
-   line->span.array->index[i] = (GLint) solve_plane(fx, fy, line->iPlane);
-#endif
 #if defined(DO_ATTRIBS)
    ATTRIB_LOOP_BEGIN
       GLfloat (*attribArray)[4] = line->span.array->attribs[attr];
@@ -101,11 +92,7 @@ NAME(plot)(GLcontext *ctx, struct LineInfo *line, int ix, int iy)
 #endif
 
    if (line->span.end == MAX_WIDTH) {
-#if defined(DO_RGBA)
       _swrast_write_rgba_span(ctx, &(line->span));
-#else
-      _swrast_write_index_span(ctx, &(line->span));
-#endif
       line->span.end = 0; /* reset counter */
    }
 }
@@ -150,7 +137,6 @@ NAME(line)(GLcontext *ctx, const SWvertex *v0, const SWvertex *v1)
    compute_plane(line.x0, line.y0, line.x1, line.y1,
                  v0->attrib[FRAG_ATTRIB_WPOS][2], v1->attrib[FRAG_ATTRIB_WPOS][2], line.zPlane);
 #endif
-#ifdef DO_RGBA
    line.span.arrayMask |= SPAN_RGBA;
    if (ctx->Light.ShadeModel == GL_SMOOTH) {
       compute_plane(line.x0, line.y0, line.x1, line.y1,
@@ -168,18 +154,6 @@ NAME(line)(GLcontext *ctx, const SWvertex *v0, const SWvertex *v1)
       constant_plane(v1->color[BCOMP], line.bPlane);
       constant_plane(v1->color[ACOMP], line.aPlane);
    }
-#endif
-#ifdef DO_INDEX
-   line.span.arrayMask |= SPAN_INDEX;
-   if (ctx->Light.ShadeModel == GL_SMOOTH) {
-      compute_plane(line.x0, line.y0, line.x1, line.y1,
-                    v0->attrib[FRAG_ATTRIB_CI][0],
-                    v1->attrib[FRAG_ATTRIB_CI][0], line.iPlane);
-   }
-   else {
-      constant_plane(v1->attrib[FRAG_ATTRIB_CI][0], line.iPlane);
-   }
-#endif
 #if defined(DO_ATTRIBS)
    {
       const GLfloat invW0 = v0->attrib[FRAG_ATTRIB_WPOS][3];
@@ -257,18 +231,12 @@ NAME(line)(GLcontext *ctx, const SWvertex *v0, const SWvertex *v1)
       segment(ctx, &line, NAME(plot), 0.0, 1.0);
    }
 
-#if defined(DO_RGBA)
    _swrast_write_rgba_span(ctx, &(line.span));
-#else
-   _swrast_write_index_span(ctx, &(line.span));
-#endif
 }
 
 
 
 
 #undef DO_Z
-#undef DO_RGBA
-#undef DO_INDEX
 #undef DO_ATTRIBS
 #undef NAME
-- 
cgit v1.2.3


From 9e2d30e0b8242d1e4afcf05513bd3d7e0de504a2 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 15:45:36 -0800
Subject: swrast: Remove support for Clear into a color-index buffer

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/swrast/s_clear.c | 109 +++-------------------------------------------
 1 file changed, 6 insertions(+), 103 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/swrast/s_clear.c b/src/mesa/swrast/s_clear.c
index 820297f3ee..7b0a63391f 100644
--- a/src/mesa/swrast/s_clear.c
+++ b/src/mesa/swrast/s_clear.c
@@ -51,7 +51,6 @@ clear_rgba_buffer_with_masking(GLcontext *ctx, struct gl_renderbuffer *rb,
    SWspan span;
    GLint i;
 
-   ASSERT(ctx->Visual.rgbMode);
    ASSERT(rb->PutRow);
 
    /* Initialize color span with clear color */
@@ -104,45 +103,6 @@ clear_rgba_buffer_with_masking(GLcontext *ctx, struct gl_renderbuffer *rb,
 }
 
 
-/**
- * Clear color index buffer with masking.
- */
-static void
-clear_ci_buffer_with_masking(GLcontext *ctx, struct gl_renderbuffer *rb)
-{
-   const GLint x = ctx->DrawBuffer->_Xmin;
-   const GLint y = ctx->DrawBuffer->_Ymin;
-   const GLint height = ctx->DrawBuffer->_Ymax - ctx->DrawBuffer->_Ymin;
-   const GLint width  = ctx->DrawBuffer->_Xmax - ctx->DrawBuffer->_Xmin;
-   SWspan span;
-   GLint i;
-
-   ASSERT(!ctx->Visual.rgbMode);
-   ASSERT(rb->PutRow);
-   ASSERT(rb->DataType == GL_UNSIGNED_INT);
-
-   /* Initialize index span with clear index */
-   INIT_SPAN(span, GL_BITMAP);
-   span.end = width;
-   span.arrayMask = SPAN_INDEX;
-   for (i = 0; i < width;i++) {
-      span.array->index[i] = ctx->Color.ClearIndex;
-   }
-
-   /* Note that masking will change the color indexes, but only the
-    * bits for which the write mask is GL_FALSE.  The bits
-    * which are write-enabled won't get modified.
-    */
-   for (i = 0; i < height;i++) {
-      span.x = x;
-      span.y = y + i;
-      _swrast_mask_ci_span(ctx, rb, &span);
-      /* write masked row */
-      rb->PutRow(ctx, rb, width, x, y + i, span.array->index, NULL);
-   }
-}
-
-
 /**
  * Clear an rgba color buffer without channel masking.
  */
@@ -158,8 +118,6 @@ clear_rgba_buffer(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint buf)
    GLvoid *clearVal;
    GLint i;
 
-   ASSERT(ctx->Visual.rgbMode);
-
    ASSERT(ctx->Color.ColorMask[buf][0] &&
           ctx->Color.ColorMask[buf][1] &&
           ctx->Color.ColorMask[buf][2] &&
@@ -196,50 +154,6 @@ clear_rgba_buffer(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint buf)
 }
 
 
-/**
- * Clear color index buffer without masking.
- */
-static void
-clear_ci_buffer(GLcontext *ctx, struct gl_renderbuffer *rb)
-{
-   const GLint x = ctx->DrawBuffer->_Xmin;
-   const GLint y = ctx->DrawBuffer->_Ymin;
-   const GLint height = ctx->DrawBuffer->_Ymax - ctx->DrawBuffer->_Ymin;
-   const GLint width  = ctx->DrawBuffer->_Xmax - ctx->DrawBuffer->_Xmin;
-   GLubyte clear8;
-   GLushort clear16;
-   GLuint clear32;
-   GLvoid *clearVal;
-   GLint i;
-
-   ASSERT(!ctx->Visual.rgbMode);
-
-   ASSERT(rb->PutMonoRow);
-
-   /* setup clear value */
-   switch (rb->DataType) {
-      case GL_UNSIGNED_BYTE:
-         clear8 = (GLubyte) ctx->Color.ClearIndex;
-         clearVal = &clear8;
-         break;
-      case GL_UNSIGNED_SHORT:
-         clear16 = (GLushort) ctx->Color.ClearIndex;
-         clearVal = &clear16;
-         break;
-      case GL_UNSIGNED_INT:
-         clear32 = ctx->Color.ClearIndex;
-         clearVal = &clear32;
-         break;
-      default:
-         _mesa_problem(ctx, "Bad rb DataType in clear_color_buffer");
-         return;
-   }
-
-   for (i = 0; i < height; i++)
-      rb->PutMonoRow(ctx, rb, width, x, y + i, clearVal, NULL);
-}
-
-
 /**
  * Clear the front/back/left/right/aux color buffers.
  * This function is usually only called if the device driver can't
@@ -252,25 +166,14 @@ clear_color_buffers(GLcontext *ctx)
 
    for (buf = 0; buf < ctx->DrawBuffer->_NumColorDrawBuffers; buf++) {
       struct gl_renderbuffer *rb = ctx->DrawBuffer->_ColorDrawBuffers[buf];
-      if (ctx->Visual.rgbMode) {
-         if (ctx->Color.ColorMask[buf][0] == 0 || 
-             ctx->Color.ColorMask[buf][1] == 0 || 
-             ctx->Color.ColorMask[buf][2] == 0 || 
-             ctx->Color.ColorMask[buf][3] == 0) {
-            clear_rgba_buffer_with_masking(ctx, rb, buf);
-         }
-         else {
-            clear_rgba_buffer(ctx, rb, buf);
-         }
+      if (ctx->Color.ColorMask[buf][0] == 0 ||
+          ctx->Color.ColorMask[buf][1] == 0 ||
+          ctx->Color.ColorMask[buf][2] == 0 ||
+          ctx->Color.ColorMask[buf][3] == 0) {
+         clear_rgba_buffer_with_masking(ctx, rb, buf);
       }
       else {
-         const GLuint indexMask = (1 << _mesa_get_format_bits(rb->Format, GL_INDEX_BITS)) - 1;
-         if ((ctx->Color.IndexMask & indexMask) != indexMask) {
-            clear_ci_buffer_with_masking(ctx, rb);
-         }
-         else {
-            clear_ci_buffer(ctx, rb);
-         }
+         clear_rgba_buffer(ctx, rb, buf);
       }
    }
 }
-- 
cgit v1.2.3


From 3fd8487ac65aeee8e3ed4dc6dc6468daf880da1a Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 15:54:33 -0800
Subject: swrast: Remove support for ReadPixels from a color-index buffer

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/swrast/s_readpix.c | 67 ++-------------------------------------------
 1 file changed, 2 insertions(+), 65 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/swrast/s_readpix.c b/src/mesa/swrast/s_readpix.c
index 41911337b8..ecabac6921 100644
--- a/src/mesa/swrast/s_readpix.c
+++ b/src/mesa/swrast/s_readpix.c
@@ -41,42 +41,6 @@
 #include "s_stencil.h"
 
 
-/*
- * Read a block of color index pixels.
- */
-static void
-read_index_pixels( GLcontext *ctx,
-                   GLint x, GLint y,
-                   GLsizei width, GLsizei height,
-                   GLenum type, GLvoid *pixels,
-                   const struct gl_pixelstore_attrib *packing )
-{
-   struct gl_renderbuffer *rb = ctx->ReadBuffer->_ColorReadBuffer;
-   GLint i;
-
-   if (!rb)
-      return;
-
-   /* width should never be > MAX_WIDTH since we did clipping earlier */
-   ASSERT(width <= MAX_WIDTH);
-
-   /* process image row by row */
-   for (i = 0; i < height; i++) {
-      GLuint index[MAX_WIDTH];
-      GLvoid *dest;
-      ASSERT(rb->DataType == GL_UNSIGNED_INT);
-      rb->GetRow(ctx, rb, width, x, y + i, index);
-
-      dest = _mesa_image_address2d(packing, pixels, width, height,
-                                   GL_COLOR_INDEX, type, i, 0);
-
-      _mesa_pack_index_span(ctx, width, type, dest, index,
-                            &ctx->Pack, ctx->_ImageTransferState);
-   }
-}
-
-
-
 /**
  * Read pixels for format=GL_DEPTH_COMPONENT.
  */
@@ -373,18 +337,7 @@ read_rgba_pixels( GLcontext *ctx,
       /* read full RGBA, FLOAT image */
       dest = tmpImage;
       for (row = 0; row < height; row++, y++) {
-         if (fb->Visual.rgbMode) {
-            _swrast_read_rgba_span(ctx, rb, width, x, y, GL_FLOAT, dest);
-         }
-         else {
-            GLuint index[MAX_WIDTH];
-            ASSERT(rb->DataType == GL_UNSIGNED_INT);
-            rb->GetRow(ctx, rb, width, x, y, index);
-            _mesa_apply_ci_transfer_ops(ctx,
-                                        transferOps & IMAGE_SHIFT_OFFSET_BIT,
-                                        width, index);
-            _mesa_map_ci_to_rgba(ctx, width, index, (GLfloat (*)[4]) dest);
-         }
+         _swrast_read_rgba_span(ctx, rb, width, x, y, GL_FLOAT, dest);
          _mesa_apply_rgba_transfer_ops(ctx, 
                                       transferOps & IMAGE_PRE_CONVOLUTION_BITS,
                                       width, (GLfloat (*)[4]) dest);
@@ -431,19 +384,7 @@ read_rgba_pixels( GLcontext *ctx,
       for (row = 0; row < height; row++, y++) {
 
          /* Get float rgba pixels */
-         if (fb->Visual.rgbMode) {
-            _swrast_read_rgba_span(ctx, rb, width, x, y, GL_FLOAT, rgba);
-         }
-         else {
-            /* read CI and convert to RGBA */
-            GLuint index[MAX_WIDTH];
-            ASSERT(rb->DataType == GL_UNSIGNED_INT);
-            rb->GetRow(ctx, rb, width, x, y, index);
-            _mesa_apply_ci_transfer_ops(ctx,
-                                        transferOps & IMAGE_SHIFT_OFFSET_BIT,
-                                        width, index);
-            _mesa_map_ci_to_rgba(ctx, width, index, rgba);
-         }
+         _swrast_read_rgba_span(ctx, rb, width, x, y, GL_FLOAT, rgba);
 
          /* apply fudge factor for shallow color buffers */
          if (fb->Visual.redBits < 8 ||
@@ -592,10 +533,6 @@ _swrast_ReadPixels( GLcontext *ctx,
       return;
   
    switch (format) {
-      case GL_COLOR_INDEX:
-         read_index_pixels(ctx, x, y, width, height, type, pixels,
-                           &clippedPacking);
-	 break;
       case GL_STENCIL_INDEX:
 	 read_stencil_pixels(ctx, x, y, width, height, type, pixels,
                              &clippedPacking);
-- 
cgit v1.2.3


From 2b7911d37dc1518b9047b02acdc6f8476abad70f Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 16:02:38 -0800
Subject: swrast: Remove remaining color-index state tracking infrastructure

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/swrast/s_context.c | 51 +++++++++++++++------------------------------
 src/mesa/swrast/s_span.c    | 51 +++++++++++++++++++--------------------------
 2 files changed, 39 insertions(+), 63 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/swrast/s_context.c b/src/mesa/swrast/s_context.c
index 0d4680db9f..751966348b 100644
--- a/src/mesa/swrast/s_context.c
+++ b/src/mesa/swrast/s_context.c
@@ -63,24 +63,17 @@ _swrast_update_rasterflags( GLcontext *ctx )
    if (swrast->_FogEnabled)               rasterMask |= FOG_BIT;
    if (ctx->Scissor.Enabled)              rasterMask |= CLIP_BIT;
    if (ctx->Stencil._Enabled)             rasterMask |= STENCIL_BIT;
-   if (ctx->Visual.rgbMode) {
-      for (i = 0; i < ctx->Const.MaxDrawBuffers; i++) {
-         if (!ctx->Color.ColorMask[i][0] ||
-             !ctx->Color.ColorMask[i][1] ||
-             !ctx->Color.ColorMask[i][2] ||
-             !ctx->Color.ColorMask[i][3]) {
-            rasterMask |= MASKING_BIT;
-            break;
-         }
+   for (i = 0; i < ctx->Const.MaxDrawBuffers; i++) {
+      if (!ctx->Color.ColorMask[i][0] ||
+          !ctx->Color.ColorMask[i][1] ||
+          !ctx->Color.ColorMask[i][2] ||
+          !ctx->Color.ColorMask[i][3]) {
+         rasterMask |= MASKING_BIT;
+         break;
       }
-      if (ctx->Color._LogicOpEnabled)     rasterMask |= LOGIC_OP_BIT;
-      if (ctx->Texture._EnabledUnits)     rasterMask |= TEXTURE_BIT;
-   }
-   else {
-      if (ctx->Color.IndexMask != 0xffffffff) rasterMask |= MASKING_BIT;
-      if (ctx->Color.IndexLogicOpEnabled)     rasterMask |= LOGIC_OP_BIT;
    }
-
+   if (ctx->Color._LogicOpEnabled)     rasterMask |= LOGIC_OP_BIT;
+   if (ctx->Texture._EnabledUnits)     rasterMask |= TEXTURE_BIT;
    if (   ctx->Viewport.X < 0
        || ctx->Viewport.X + ctx->Viewport.Width > (GLint) ctx->DrawBuffer->Width
        || ctx->Viewport.Y < 0
@@ -100,19 +93,14 @@ _swrast_update_rasterflags( GLcontext *ctx )
       /* more than one color buffer designated for writing (or zero buffers) */
       rasterMask |= MULTI_DRAW_BIT;
    }
-   else if (!ctx->Visual.rgbMode && ctx->Color.IndexMask==0) {
-      rasterMask |= MULTI_DRAW_BIT; /* all color index bits disabled */
-   }
 
-   if (ctx->Visual.rgbMode) {
-      for (i = 0; i < ctx->Const.MaxDrawBuffers; i++) {
-         if (ctx->Color.ColorMask[i][0] +
-             ctx->Color.ColorMask[i][1] +
-             ctx->Color.ColorMask[i][2] +
-             ctx->Color.ColorMask[i][3] == 0) {
-            rasterMask |= MULTI_DRAW_BIT; /* all RGBA channels disabled */
-            break;
-         }
+   for (i = 0; i < ctx->Const.MaxDrawBuffers; i++) {
+      if (ctx->Color.ColorMask[i][0] +
+          ctx->Color.ColorMask[i][1] +
+          ctx->Color.ColorMask[i][2] +
+          ctx->Color.ColorMask[i][3] == 0) {
+         rasterMask |= MULTI_DRAW_BIT; /* all RGBA channels disabled */
+         break;
       }
    }
 
@@ -892,12 +880,7 @@ _swrast_flush( GLcontext *ctx )
    SWcontext *swrast = SWRAST_CONTEXT(ctx);
    /* flush any pending fragments from rendering points */
    if (swrast->PointSpan.end > 0) {
-      if (ctx->Visual.rgbMode) {
-         _swrast_write_rgba_span(ctx, &(swrast->PointSpan));
-      }
-      else {
-         _swrast_write_index_span(ctx, &(swrast->PointSpan));
-      }
+      _swrast_write_rgba_span(ctx, &(swrast->PointSpan));
       swrast->PointSpan.end = 0;
    }
 }
diff --git a/src/mesa/swrast/s_span.c b/src/mesa/swrast/s_span.c
index dada364360..dd67f63321 100644
--- a/src/mesa/swrast/s_span.c
+++ b/src/mesa/swrast/s_span.c
@@ -80,41 +80,34 @@ _swrast_span_default_attribs(GLcontext *ctx, SWspan *span)
    span->attrStepY[FRAG_ATTRIB_WPOS][3] = 0.0;
 
    /* primary color, or color index */
-   if (ctx->Visual.rgbMode) {
-      GLchan r, g, b, a;
-      UNCLAMPED_FLOAT_TO_CHAN(r, ctx->Current.RasterColor[0]);
-      UNCLAMPED_FLOAT_TO_CHAN(g, ctx->Current.RasterColor[1]);
-      UNCLAMPED_FLOAT_TO_CHAN(b, ctx->Current.RasterColor[2]);
-      UNCLAMPED_FLOAT_TO_CHAN(a, ctx->Current.RasterColor[3]);
+   GLchan r, g, b, a;
+   UNCLAMPED_FLOAT_TO_CHAN(r, ctx->Current.RasterColor[0]);
+   UNCLAMPED_FLOAT_TO_CHAN(g, ctx->Current.RasterColor[1]);
+   UNCLAMPED_FLOAT_TO_CHAN(b, ctx->Current.RasterColor[2]);
+   UNCLAMPED_FLOAT_TO_CHAN(a, ctx->Current.RasterColor[3]);
 #if CHAN_TYPE == GL_FLOAT
-      span->red = r;
-      span->green = g;
-      span->blue = b;
-      span->alpha = a;
+   span->red = r;
+   span->green = g;
+   span->blue = b;
+   span->alpha = a;
 #else
-      span->red   = IntToFixed(r);
-      span->green = IntToFixed(g);
-      span->blue  = IntToFixed(b);
-      span->alpha = IntToFixed(a);
+   span->red   = IntToFixed(r);
+   span->green = IntToFixed(g);
+   span->blue  = IntToFixed(b);
+   span->alpha = IntToFixed(a);
 #endif
-      span->redStep = 0;
-      span->greenStep = 0;
-      span->blueStep = 0;
-      span->alphaStep = 0;
-      span->interpMask |= SPAN_RGBA;
+   span->redStep = 0;
+   span->greenStep = 0;
+   span->blueStep = 0;
+   span->alphaStep = 0;
+   span->interpMask |= SPAN_RGBA;
 
-      COPY_4V(span->attrStart[FRAG_ATTRIB_COL0], ctx->Current.RasterColor);
-      ASSIGN_4V(span->attrStepX[FRAG_ATTRIB_COL0], 0.0, 0.0, 0.0, 0.0);
-      ASSIGN_4V(span->attrStepY[FRAG_ATTRIB_COL0], 0.0, 0.0, 0.0, 0.0);
-   }
-   else {
-      span->index = FloatToFixed(ctx->Current.RasterIndex);
-      span->indexStep = 0;
-      span->interpMask |= SPAN_INDEX;
-   }
+   COPY_4V(span->attrStart[FRAG_ATTRIB_COL0], ctx->Current.RasterColor);
+   ASSIGN_4V(span->attrStepX[FRAG_ATTRIB_COL0], 0.0, 0.0, 0.0, 0.0);
+   ASSIGN_4V(span->attrStepY[FRAG_ATTRIB_COL0], 0.0, 0.0, 0.0, 0.0);
 
    /* Secondary color */
-   if (ctx->Visual.rgbMode && (ctx->Light.Enabled || ctx->Fog.ColorSumEnabled))
+   if (ctx->Light.Enabled || ctx->Fog.ColorSumEnabled)
    {
       COPY_4V(span->attrStart[FRAG_ATTRIB_COL1], ctx->Current.RasterSecondaryColor);
       ASSIGN_4V(span->attrStepX[FRAG_ATTRIB_COL1], 0.0, 0.0, 0.0, 0.0);
-- 
cgit v1.2.3


From c00282102aea387e8c0fb29811d0ea8f010f145a Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 16:05:20 -0800
Subject: swrast: Remove _swrast_write_index_span and associated code

After all the recent color-index rendering removal,
_swrast_write_index_span is no longer used anywhere.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/swrast/s_span.c | 275 -----------------------------------------------
 src/mesa/swrast/s_span.h |   3 -
 2 files changed, 278 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/swrast/s_span.c b/src/mesa/swrast/s_span.c
index dd67f63321..f1f37dfe83 100644
--- a/src/mesa/swrast/s_span.c
+++ b/src/mesa/swrast/s_span.c
@@ -367,38 +367,6 @@ interpolate_float_colors(SWspan *span)
 
 
 
-/* Fill in the span.color.index array from the interpolation values */
-static INLINE void
-interpolate_indexes(GLcontext *ctx, SWspan *span)
-{
-   GLfixed index = span->index;
-   const GLint indexStep = span->indexStep;
-   const GLuint n = span->end;
-   GLuint *indexes = span->array->index;
-   GLuint i;
-   (void) ctx;
-
-   ASSERT(!(span->arrayMask & SPAN_INDEX));
-
-   if ((span->interpMask & SPAN_FLAT) || (indexStep == 0)) {
-      /* constant color */
-      index = FixedToInt(index);
-      for (i = 0; i < n; i++) {
-         indexes[i] = index;
-      }
-   }
-   else {
-      /* interpolate */
-      for (i = 0; i < n; i++) {
-         indexes[i] = FixedToInt(index);
-         index += indexStep;
-      }
-   }
-   span->arrayMask |= SPAN_INDEX;
-   span->interpMask &= ~SPAN_INDEX;
-}
-
-
 /**
  * Fill in the span.zArray array from the span->z, zStep values.
  */
@@ -834,249 +802,6 @@ clip_span( GLcontext *ctx, SWspan *span )
 }
 
 
-/**
- * Apply all the per-fragment opertions to a span of color index fragments
- * and write them to the enabled color drawbuffers.
- * The 'span' parameter can be considered to be const.  Note that
- * span->interpMask and span->arrayMask may be changed but will be restored
- * to their original values before returning.
- */
-void
-_swrast_write_index_span( GLcontext *ctx, SWspan *span)
-{
-   const SWcontext *swrast = SWRAST_CONTEXT(ctx);
-   const GLbitfield origInterpMask = span->interpMask;
-   const GLbitfield origArrayMask = span->arrayMask;
-   struct gl_framebuffer *fb = ctx->DrawBuffer;
-
-   ASSERT(span->end <= MAX_WIDTH);
-   ASSERT(span->primitive == GL_POINT  ||  span->primitive == GL_LINE ||
-	  span->primitive == GL_POLYGON  ||  span->primitive == GL_BITMAP);
-   ASSERT((span->interpMask | span->arrayMask) & SPAN_INDEX);
-   /*
-   ASSERT((span->interpMask & span->arrayMask) == 0);
-   */
-
-   if (span->arrayMask & SPAN_MASK) {
-      /* mask was initialized by caller, probably glBitmap */
-      span->writeAll = GL_FALSE;
-   }
-   else {
-      memset(span->array->mask, 1, span->end);
-      span->writeAll = GL_TRUE;
-   }
-
-   /* Clipping */
-   if ((swrast->_RasterMask & CLIP_BIT) || (span->primitive != GL_POLYGON)) {
-      if (!clip_span(ctx, span)) {
-         return;
-      }
-   }
-
-   if (!(span->arrayMask & SPAN_MASK)) {
-      /* post-clip sanity check */
-      assert(span->x >= 0);
-      assert(span->y >= 0);
-   }
-
-   /* Depth bounds test */
-   if (ctx->Depth.BoundsTest && fb->Visual.depthBits > 0) {
-      if (!_swrast_depth_bounds_test(ctx, span)) {
-         return;
-      }
-   }
-
-#ifdef DEBUG
-   /* Make sure all fragments are within window bounds */
-   if (span->arrayMask & SPAN_XY) {
-      GLuint i;
-      for (i = 0; i < span->end; i++) {
-         if (span->array->mask[i]) {
-            assert(span->array->x[i] >= fb->_Xmin);
-            assert(span->array->x[i] < fb->_Xmax);
-            assert(span->array->y[i] >= fb->_Ymin);
-            assert(span->array->y[i] < fb->_Ymax);
-         }
-      }
-   }
-#endif
-
-   /* Polygon Stippling */
-   if (ctx->Polygon.StippleFlag && span->primitive == GL_POLYGON) {
-      stipple_polygon_span(ctx, span);
-   }
-
-   /* Stencil and Z testing */
-   if (ctx->Stencil._Enabled || ctx->Depth.Test) {
-      if (!(span->arrayMask & SPAN_Z))
-         _swrast_span_interpolate_z(ctx, span);
-
-      if (ctx->Transform.DepthClamp)
-	 _swrast_depth_clamp_span(ctx, span);
-
-      if (ctx->Stencil._Enabled) {
-         if (!_swrast_stencil_and_ztest_span(ctx, span)) {
-            span->arrayMask = origArrayMask;
-            return;
-         }
-      }
-      else {
-         ASSERT(ctx->Depth.Test);
-         if (!_swrast_depth_test_span(ctx, span)) {
-            span->interpMask = origInterpMask;
-            span->arrayMask = origArrayMask;
-            return;
-         }
-      }
-   }
-
-   if (ctx->Query.CurrentOcclusionObject) {
-      /* update count of 'passed' fragments */
-      struct gl_query_object *q = ctx->Query.CurrentOcclusionObject;
-      GLuint i;
-      for (i = 0; i < span->end; i++)
-         q->Result += span->array->mask[i];
-   }
-
-   /* we have to wait until after occlusion to do this test */
-   if (ctx->Color.IndexMask == 0) {
-      /* write no pixels */
-      span->arrayMask = origArrayMask;
-      return;
-   }
-
-   /* Interpolate the color indexes if needed */
-   if (swrast->_FogEnabled ||
-       ctx->Color.IndexLogicOpEnabled ||
-       ctx->Color.IndexMask != 0xffffffff ||
-       (span->arrayMask & SPAN_COVERAGE)) {
-      if (!(span->arrayMask & SPAN_INDEX) /*span->interpMask & SPAN_INDEX*/) {
-         interpolate_indexes(ctx, span);
-      }
-   }
-
-   /* Fog */
-   if (swrast->_FogEnabled) {
-      _swrast_fog_ci_span(ctx, span);
-   }
-
-   /* Antialias coverage application */
-   if (span->arrayMask & SPAN_COVERAGE) {
-      const GLfloat *coverage = span->array->coverage;
-      GLuint *index = span->array->index;
-      GLuint i;
-      for (i = 0; i < span->end; i++) {
-         ASSERT(coverage[i] < 16);
-         index[i] = (index[i] & ~0xf) | ((GLuint) coverage[i]);
-      }
-   }
-
-   /*
-    * Write to renderbuffers
-    */
-   {
-      const GLuint numBuffers = fb->_NumColorDrawBuffers;
-      GLuint buf;
-
-      for (buf = 0; buf < numBuffers; buf++) {
-         struct gl_renderbuffer *rb = fb->_ColorDrawBuffers[buf];
-         GLuint indexSave[MAX_WIDTH];
-
-         ASSERT(rb->_BaseFormat == GL_COLOR_INDEX);
-
-         if (numBuffers > 1) {
-            /* save indexes for second, third renderbuffer writes */
-            memcpy(indexSave, span->array->index,
-                   span->end * sizeof(indexSave[0]));
-         }
-
-         if (ctx->Color.IndexLogicOpEnabled) {
-            _swrast_logicop_ci_span(ctx, rb, span);
-         }
-
-         if (ctx->Color.IndexMask != 0xffffffff) {
-            _swrast_mask_ci_span(ctx, rb, span);
-         }
-
-         if (!(span->arrayMask & SPAN_INDEX) && span->indexStep == 0) {
-            /* all fragments have same color index */
-            GLubyte index8;
-            GLushort index16;
-            GLuint index32;
-            void *value;
-
-            if (rb->DataType == GL_UNSIGNED_BYTE) {
-               index8 = FixedToInt(span->index);
-               value = &index8;
-            }
-            else if (rb->DataType == GL_UNSIGNED_SHORT) {
-               index16 = FixedToInt(span->index);
-               value = &index16;
-            }
-            else {
-               ASSERT(rb->DataType == GL_UNSIGNED_INT);
-               index32 = FixedToInt(span->index);
-               value = &index32;
-            }
-
-            if (span->arrayMask & SPAN_XY) {
-               rb->PutMonoValues(ctx, rb, span->end, span->array->x, 
-                                 span->array->y, value, span->array->mask);
-            }
-            else {
-               rb->PutMonoRow(ctx, rb, span->end, span->x, span->y,
-                              value, span->array->mask);
-            }
-         }
-         else {
-            /* each fragment is a different color */
-            GLubyte index8[MAX_WIDTH];
-            GLushort index16[MAX_WIDTH];
-            void *values;
-
-            if (rb->DataType == GL_UNSIGNED_BYTE) {
-               GLuint k;
-               for (k = 0; k < span->end; k++) {
-                  index8[k] = (GLubyte) span->array->index[k];
-               }
-               values = index8;
-            }
-            else if (rb->DataType == GL_UNSIGNED_SHORT) {
-               GLuint k;
-               for (k = 0; k < span->end; k++) {
-                  index16[k] = (GLushort) span->array->index[k];
-               }
-               values = index16;
-            }
-            else {
-               ASSERT(rb->DataType == GL_UNSIGNED_INT);
-               values = span->array->index;
-            }
-
-            if (span->arrayMask & SPAN_XY) {
-               rb->PutValues(ctx, rb, span->end,
-                             span->array->x, span->array->y,
-                             values, span->array->mask);
-            }
-            else {
-               rb->PutRow(ctx, rb, span->end, span->x, span->y,
-                          values, span->array->mask);
-            }
-         }
-
-         if (buf + 1 < numBuffers) {
-            /* restore original span values */
-            memcpy(span->array->index, indexSave,
-                   span->end * sizeof(indexSave[0]));
-         }
-      } /* for buf */
-   }
-
-   span->interpMask = origInterpMask;
-   span->arrayMask = origArrayMask;
-}
-
-
 /**
  * Add specular colors to primary colors.
  * Only called during fixed-function operation.
diff --git a/src/mesa/swrast/s_span.h b/src/mesa/swrast/s_span.h
index 0eabae20e0..9f6be5a335 100644
--- a/src/mesa/swrast/s_span.h
+++ b/src/mesa/swrast/s_span.h
@@ -187,9 +187,6 @@ _swrast_compute_lambda(GLfloat dsdx, GLfloat dsdy, GLfloat dtdx, GLfloat dtdy,
                        GLfloat dqdx, GLfloat dqdy, GLfloat texW, GLfloat texH,
                        GLfloat s, GLfloat t, GLfloat q, GLfloat invQ);
 
-extern void
-_swrast_write_index_span( GLcontext *ctx, SWspan *span);
-
 
 extern void
 _swrast_write_rgba_span( GLcontext *ctx, SWspan *span);
-- 
cgit v1.2.3


From b00362e51b28b4ea43c5f42353182146bd5e802b Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 16:07:11 -0800
Subject: swrast: Remove _swrast_fog_ci_span and associated code

After all the recent color-index rendering removal,
_swrast_fog_ci_span is no longer used anywhere.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/swrast/s_fog.c | 85 -------------------------------------------------
 src/mesa/swrast/s_fog.h |  4 ---
 2 files changed, 89 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/swrast/s_fog.c b/src/mesa/swrast/s_fog.c
index 0472bbf553..3fc8439213 100644
--- a/src/mesa/swrast/s_fog.c
+++ b/src/mesa/swrast/s_fog.c
@@ -122,38 +122,6 @@ else {										\
    }										\
 }
 
-/* As above, but CI mode (XXX try to merge someday) */
-#define FOG_LOOP_CI(FOG_FUNC)							\
-if (span->arrayAttribs & FRAG_BIT_FOGC) {					\
-   GLuint i;									\
-   for (i = 0; i < span->end; i++) {						\
-      const GLfloat fogCoord = span->array->attribs[FRAG_ATTRIB_FOGC][i][0];	\
-      const GLfloat c = FABSF(fogCoord);					\
-      GLfloat f;								\
-      FOG_FUNC(f, c);								\
-      f = CLAMP(f, 0.0F, 1.0F);							\
-      index[i] = (GLuint) ((GLfloat) index[i] + (1.0F - f) * fogIndex);		\
-   }										\
-}										\
-else {										\
-   const GLfloat fogStep = span->attrStepX[FRAG_ATTRIB_FOGC][0];		\
-   GLfloat fogCoord = span->attrStart[FRAG_ATTRIB_FOGC][0];			\
-   const GLfloat wStep = span->attrStepX[FRAG_ATTRIB_WPOS][3];  		\
-   GLfloat w = span->attrStart[FRAG_ATTRIB_WPOS][3];				\
-   GLuint i;									\
-   for (i = 0; i < span->end; i++) {						\
-      const GLfloat c = FABSF(fogCoord) / w;					\
-      GLfloat f;								\
-      FOG_FUNC(f, c);								\
-      f = CLAMP(f, 0.0F, 1.0F);							\
-      index[i] = (GLuint) ((GLfloat) index[i] + (1.0F - f) * fogIndex);		\
-      fogCoord += fogStep;							\
-      w += wStep;								\
-   }										\
-}
-
-
-
 /**
  * Apply fog to a span of RGBA pixels.
  * The fog value are either in the span->array->fog array or interpolated from
@@ -275,56 +243,3 @@ _swrast_fog_rgba_span( const GLcontext *ctx, SWspan *span )
       }
    }
 }
-
-
-/**
- * As above, but color index mode.
- */
-void
-_swrast_fog_ci_span( const GLcontext *ctx, SWspan *span )
-{
-   const SWcontext *swrast = CONST_SWRAST_CONTEXT(ctx);
-   const GLuint fogIndex = (GLuint) ctx->Fog.Index;
-   GLuint *index = span->array->index;
-
-   ASSERT(swrast->_FogEnabled);
-   ASSERT(span->arrayMask & SPAN_INDEX);
-
-   /* we need to compute fog blend factors */
-   if (swrast->_PreferPixelFog) {
-      /* The span's fog values are fog coordinates, now compute blend factors
-       * and blend the fragment colors with the fog color.
-       */
-      switch (ctx->Fog.Mode) {
-      case GL_LINEAR:
-         {
-            const GLfloat fogEnd = ctx->Fog.End;
-            const GLfloat fogScale = (ctx->Fog.Start == ctx->Fog.End)
-               ? 1.0F : 1.0F / (ctx->Fog.End - ctx->Fog.Start);
-            FOG_LOOP_CI(LINEAR_FOG);
-         }
-         break;
-      case GL_EXP:
-         {
-            const GLfloat density = -ctx->Fog.Density;
-            FOG_LOOP_CI(EXP_FOG);
-         }
-         break;
-      case GL_EXP2:
-         {
-            const GLfloat negDensitySquared = -ctx->Fog.Density * ctx->Fog.Density;
-            FOG_LOOP_CI(EXP2_FOG);
-         }
-         break;
-      default:
-         _mesa_problem(ctx, "Bad fog mode in _swrast_fog_ci_span");
-         return;
-      }
-   }
-   else {
-      /* The span's fog start/step/array values are blend factors in [0,1].
-       * They were previously computed per-vertex.
-       */
-      FOG_LOOP_CI(BLEND_FOG);
-   }
-}
diff --git a/src/mesa/swrast/s_fog.h b/src/mesa/swrast/s_fog.h
index 50760d88af..06107de3f9 100644
--- a/src/mesa/swrast/s_fog.h
+++ b/src/mesa/swrast/s_fog.h
@@ -37,8 +37,4 @@ _swrast_z_to_fogfactor(GLcontext *ctx, GLfloat z);
 extern void
 _swrast_fog_rgba_span( const GLcontext *ctx, SWspan *span );
 
-extern void
-_swrast_fog_ci_span( const GLcontext *ctx, SWspan *span );
-
-
 #endif
-- 
cgit v1.2.3


From 0ca57295785f3ab040890037e6a2645a70d2b2f2 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 16:10:02 -0800
Subject: swrast: Remove _swrast_mask_ci_span

After all the recent color-index rendering removal,
_swrast_mask_ci_span is no longer used anywhere.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/swrast/s_masking.c | 31 -------------------------------
 src/mesa/swrast/s_masking.h |  5 -----
 2 files changed, 36 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/swrast/s_masking.c b/src/mesa/swrast/s_masking.c
index 69c2feb6da..e38d90f199 100644
--- a/src/mesa/swrast/s_masking.c
+++ b/src/mesa/swrast/s_masking.c
@@ -101,34 +101,3 @@ _swrast_mask_rgba_span(GLcontext *ctx, struct gl_renderbuffer *rb,
       }
    }
 }
-
-
-/**
- * Apply the index mask to a span of color index values.
- */
-void
-_swrast_mask_ci_span(GLcontext *ctx, struct gl_renderbuffer *rb,
-                     SWspan *span)
-{
-   const GLuint srcMask = ctx->Color.IndexMask;
-   const GLuint dstMask = ~srcMask;
-   GLuint *index = span->array->index;
-   GLuint dest[MAX_WIDTH];
-   GLuint i;
-
-   ASSERT(span->arrayMask & SPAN_INDEX);
-   ASSERT(span->end <= MAX_WIDTH);
-   ASSERT(rb->DataType == GL_UNSIGNED_INT);
-
-   if (span->arrayMask & SPAN_XY) {
-      _swrast_get_values(ctx, rb, span->end, span->array->x, span->array->y,
-                         dest, sizeof(GLuint));
-   }
-   else {
-      _swrast_read_index_span(ctx, rb, span->end, span->x, span->y, dest);
-   }
-
-   for (i = 0; i < span->end; i++) {
-      index[i] = (index[i] & srcMask) | (dest[i] & dstMask);
-   }
-}
diff --git a/src/mesa/swrast/s_masking.h b/src/mesa/swrast/s_masking.h
index fed47f8cfb..3ba4f8356c 100644
--- a/src/mesa/swrast/s_masking.h
+++ b/src/mesa/swrast/s_masking.h
@@ -34,9 +34,4 @@ extern void
 _swrast_mask_rgba_span(GLcontext *ctx, struct gl_renderbuffer *rb,
                        SWspan *span, GLuint buf);
 
-
-extern void
-_swrast_mask_ci_span(GLcontext *ctx, struct gl_renderbuffer *rb,
-                     SWspan *span);
-
 #endif
-- 
cgit v1.2.3


From 7ce12c9024f74bb26e45496a46b57708d8159d37 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 16:11:43 -0800
Subject: swrast: Remove _swrast_read_index_span

After all the recent color-index rendering removal,
_swrast_read_index_span is no longer used anywhere.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/swrast/s_span.c | 68 ------------------------------------------------
 src/mesa/swrast/s_span.h |  4 ---
 2 files changed, 72 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/swrast/s_span.c b/src/mesa/swrast/s_span.c
index f1f37dfe83..29f070686f 100644
--- a/src/mesa/swrast/s_span.c
+++ b/src/mesa/swrast/s_span.c
@@ -1347,74 +1347,6 @@ _swrast_read_rgba_span( GLcontext *ctx, struct gl_renderbuffer *rb,
 }
 
 
-/**
- * Read CI pixels from a renderbuffer.  Clipping will be done to prevent
- * reading ouside the buffer's boundaries.
- */
-void
-_swrast_read_index_span( GLcontext *ctx, struct gl_renderbuffer *rb,
-                         GLuint n, GLint x, GLint y, GLuint index[] )
-{
-   const GLint bufWidth = (GLint) rb->Width;
-   const GLint bufHeight = (GLint) rb->Height;
-
-   if (y < 0 || y >= bufHeight || x + (GLint) n < 0 || x >= bufWidth) {
-      /* completely above, below, or right */
-      memset(index, 0, n * sizeof(GLuint));
-   }
-   else {
-      GLint skip, length;
-      if (x < 0) {
-         /* left edge clipping */
-         skip = -x;
-         length = (GLint) n - skip;
-         if (length < 0) {
-            /* completely left of window */
-            return;
-         }
-         if (length > bufWidth) {
-            length = bufWidth;
-         }
-      }
-      else if ((GLint) (x + n) > bufWidth) {
-         /* right edge clipping */
-         skip = 0;
-         length = bufWidth - x;
-         if (length < 0) {
-            /* completely to right of window */
-            return;
-         }
-      }
-      else {
-         /* no clipping */
-         skip = 0;
-         length = (GLint) n;
-      }
-
-      ASSERT(rb->GetRow);
-      ASSERT(rb->_BaseFormat == GL_COLOR_INDEX);
-
-      if (rb->DataType == GL_UNSIGNED_BYTE) {
-         GLubyte index8[MAX_WIDTH];
-         GLint i;
-         rb->GetRow(ctx, rb, length, x + skip, y, index8);
-         for (i = 0; i < length; i++)
-            index[skip + i] = index8[i];
-      }
-      else if (rb->DataType == GL_UNSIGNED_SHORT) {
-         GLushort index16[MAX_WIDTH];
-         GLint i;
-         rb->GetRow(ctx, rb, length, x + skip, y, index16);
-         for (i = 0; i < length; i++)
-            index[skip + i] = index16[i];
-      }
-      else if (rb->DataType == GL_UNSIGNED_INT) {
-         rb->GetRow(ctx, rb, length, x + skip, y, index + skip);
-      }
-   }
-}
-
-
 /**
  * Wrapper for gl_renderbuffer::GetValues() which does clipping to avoid
  * reading values outside the buffer bounds.
diff --git a/src/mesa/swrast/s_span.h b/src/mesa/swrast/s_span.h
index 9f6be5a335..1ce3f5f5e5 100644
--- a/src/mesa/swrast/s_span.h
+++ b/src/mesa/swrast/s_span.h
@@ -196,10 +196,6 @@ extern void
 _swrast_read_rgba_span(GLcontext *ctx, struct gl_renderbuffer *rb,
                        GLuint n, GLint x, GLint y, GLenum type, GLvoid *rgba);
 
-extern void
-_swrast_read_index_span( GLcontext *ctx, struct gl_renderbuffer *rb,
-                         GLuint n, GLint x, GLint y, GLuint indx[] );
-
 extern void
 _swrast_get_values(GLcontext *ctx, struct gl_renderbuffer *rb,
                    GLuint count, const GLint x[], const GLint y[],
-- 
cgit v1.2.3


From dc14ce9e367984cece79748b177e142ca02fa06d Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 16:34:21 -0800
Subject: swrast: Remove SPAN_INDEX

Also adjust the bits that appear after it to fill in the gap.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/swrast/s_span.h | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/swrast/s_span.h b/src/mesa/swrast/s_span.h
index 1ce3f5f5e5..aaf1fec2a8 100644
--- a/src/mesa/swrast/s_span.h
+++ b/src/mesa/swrast/s_span.h
@@ -41,13 +41,12 @@
  */
 /*@{*/
 #define SPAN_RGBA       0x01  /**< interpMask and arrayMask */
-#define SPAN_INDEX      0x02  /**< interpMask and arrayMask */
-#define SPAN_Z          0x04  /**< interpMask and arrayMask */
-#define SPAN_FLAT       0x08  /**< interpMask: flat shading? */
-#define SPAN_XY         0x10  /**< array.x[], y[] valid? */
-#define SPAN_MASK       0x20  /**< was array.mask[] filled in by caller? */
-#define SPAN_LAMBDA     0x40  /**< array.lambda[] valid? */
-#define SPAN_COVERAGE   0x80  /**< array.coverage[] valid? */
+#define SPAN_Z          0x02  /**< interpMask and arrayMask */
+#define SPAN_FLAT       0x04  /**< interpMask: flat shading? */
+#define SPAN_XY         0x08  /**< array.x[], y[] valid? */
+#define SPAN_MASK       0x10  /**< was array.mask[] filled in by caller? */
+#define SPAN_LAMBDA     0x20  /**< array.lambda[] valid? */
+#define SPAN_COVERAGE   0x40  /**< array.coverage[] valid? */
 /*@}*/
 
 
-- 
cgit v1.2.3


From 718ff7e87bf9b86517e88270cc984e364ace9506 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 16:44:39 -0800
Subject: DRI/swrast: Remove color-index support from DRI swrast driver

It appears that color-index rendering wasn't actually supported
anyway.  swrastFillInModes did not previously create an color-index
configs, so it doesn't seem like there would be any way to get a
color-index visual.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/drivers/dri/swrast/swrast.c          | 57 +++++++++++----------------
 src/mesa/drivers/dri/swrast/swrast_priv.h     |  9 ++---
 src/mesa/drivers/dri/swrast/swrast_span.c     | 50 -----------------------
 src/mesa/drivers/dri/swrast/swrast_spantemp.h | 16 +-------
 4 files changed, 27 insertions(+), 105 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/swrast/swrast.c b/src/mesa/drivers/dri/swrast/swrast.c
index b2e7df34e8..03c672ecf1 100644
--- a/src/mesa/drivers/dri/swrast/swrast.c
+++ b/src/mesa/drivers/dri/swrast/swrast.c
@@ -203,34 +203,28 @@ static const __DRIextension **driGetExtensions(__DRIscreen *psp)
 static GLuint
 choose_pixel_format(const GLvisual *v)
 {
-    if (v->rgbMode) {
-	int depth = v->rgbBits;
-
-	if (depth == 32
-	    && v->redMask   == 0xff0000
-	    && v->greenMask == 0x00ff00
-	    && v->blueMask  == 0x0000ff)
-	    return PF_A8R8G8B8;
-	else if (depth == 24
-	    && v->redMask   == 0xff0000
-	    && v->greenMask == 0x00ff00
-	    && v->blueMask  == 0x0000ff)
-	    return PF_X8R8G8B8;
-	else if (depth == 16
-	    && v->redMask   == 0xf800
-	    && v->greenMask == 0x07e0
-	    && v->blueMask  == 0x001f)
-	    return PF_R5G6B5;
-	else if (depth == 8
-	    && v->redMask   == 0x07
-	    && v->greenMask == 0x38
-	    && v->blueMask  == 0xc0)
-	    return PF_R3G3B2;
-    }
-    else {
-	if (v->indexBits == 8)
-	    return PF_CI8;
-    }
+    int depth = v->rgbBits;
+
+    if (depth == 32
+	&& v->redMask   == 0xff0000
+	&& v->greenMask == 0x00ff00
+	&& v->blueMask  == 0x0000ff)
+	return PF_A8R8G8B8;
+    else if (depth == 24
+	     && v->redMask   == 0xff0000
+	     && v->greenMask == 0x00ff00
+	     && v->blueMask  == 0x0000ff)
+	return PF_X8R8G8B8;
+    else if (depth == 16
+	     && v->redMask   == 0xf800
+	     && v->greenMask == 0x07e0
+	     && v->blueMask  == 0x001f)
+	return PF_R5G6B5;
+    else if (depth == 8
+	     && v->redMask   == 0x07
+	     && v->greenMask == 0x38
+	     && v->blueMask  == 0xc0)
+	return PF_R3G3B2;
 
     _mesa_problem( NULL, "unexpected format in %s", __FUNCTION__ );
     return 0;
@@ -335,13 +329,6 @@ swrast_new_renderbuffer(const GLvisual *visual, GLboolean front)
 	xrb->Base.DataType = GL_UNSIGNED_BYTE;
 	xrb->bpp = 8;
 	break;
-    case PF_CI8:
-	xrb->Base.Format = MESA_FORMAT_CI8;
-	xrb->Base.InternalFormat = GL_COLOR_INDEX8_EXT;
-	xrb->Base._BaseFormat = GL_COLOR_INDEX;
-	xrb->Base.DataType = GL_UNSIGNED_BYTE;
-	xrb->bpp = 8;
-	break;
     default:
 	return NULL;
     }
diff --git a/src/mesa/drivers/dri/swrast/swrast_priv.h b/src/mesa/drivers/dri/swrast/swrast_priv.h
index 59b4a6d228..4722007f95 100644
--- a/src/mesa/drivers/dri/swrast/swrast_priv.h
+++ b/src/mesa/drivers/dri/swrast/swrast_priv.h
@@ -116,11 +116,10 @@ swrast_renderbuffer(struct gl_renderbuffer *rb)
 /**
  * Pixel formats we support
  */
-#define PF_CI8        1		/**< Color Index mode */
-#define PF_A8R8G8B8   2		/**< 32bpp TrueColor:  8-A, 8-R, 8-G, 8-B bits */
-#define PF_R5G6B5     3		/**< 16bpp TrueColor:  5-R, 6-G, 5-B bits */
-#define PF_R3G3B2     4		/**<  8bpp TrueColor:  3-R, 3-G, 2-B bits */
-#define PF_X8R8G8B8   5		/**< 32bpp TrueColor:  8-R, 8-G, 8-B bits */
+#define PF_A8R8G8B8   1		/**< 32bpp TrueColor:  8-A, 8-R, 8-G, 8-B bits */
+#define PF_R5G6B5     2		/**< 16bpp TrueColor:  5-R, 6-G, 5-B bits */
+#define PF_R3G3B2     3		/**<  8bpp TrueColor:  3-R, 3-G, 2-B bits */
+#define PF_X8R8G8B8   4		/**< 32bpp TrueColor:  8-R, 8-G, 8-B bits */
 
 /**
  * Renderbuffer pitch alignment (in bits).
diff --git a/src/mesa/drivers/dri/swrast/swrast_span.c b/src/mesa/drivers/dri/swrast/swrast_span.c
index f8e503463f..5290dc82b9 100644
--- a/src/mesa/drivers/dri/swrast/swrast_span.c
+++ b/src/mesa/drivers/dri/swrast/swrast_span.c
@@ -193,23 +193,6 @@ static const GLubyte kernel[16] = {
 #include "swrast/s_spantemp.h"
 
 
-/* 8-bit color index */
-#define NAME(FUNC) FUNC##_CI8
-#define CI_MODE
-#define RB_TYPE GLubyte
-#define SPAN_VARS \
-   struct swrast_renderbuffer *xrb = swrast_renderbuffer(rb);
-#define INIT_PIXEL_PTR(P, X, Y) \
-   GLubyte *P = (GLubyte *)xrb->Base.Data + YFLIP(xrb, Y) * xrb->pitch + (X);
-#define INC_PIXEL_PTR(P) P += 1
-#define STORE_PIXEL(DST, X, Y, VALUE) \
-   *DST = VALUE[0]
-#define FETCH_PIXEL(DST, SRC) \
-   DST = SRC[0]
-
-#include "swrast/s_spantemp.h"
-
-
 /*
  * Generate code for front-buffer span functions.
  */
@@ -282,23 +265,6 @@ static const GLubyte kernel[16] = {
 #include "swrast_spantemp.h"
 
 
-/* 8-bit color index */
-#define NAME(FUNC) FUNC##_CI8_front
-#define CI_MODE
-#define RB_TYPE GLubyte
-#define SPAN_VARS \
-   struct swrast_renderbuffer *xrb = swrast_renderbuffer(rb);
-#define INIT_PIXEL_PTR(P, X, Y) \
-   GLubyte *P = (GLubyte *)row;
-#define INC_PIXEL_PTR(P) P += 1
-#define STORE_PIXEL(DST, X, Y, VALUE) \
-   *DST = VALUE[0]
-#define FETCH_PIXEL(DST, SRC) \
-   DST = SRC[0]
-
-#include "swrast_spantemp.h"
-
-
 /*
  * Back-buffers are malloced memory and always private.
  *
@@ -346,14 +312,6 @@ swrast_set_span_funcs_back(struct swrast_renderbuffer *xrb,
 	xrb->Base.PutValues = put_values_R3G3B2;
 	xrb->Base.PutMonoValues = put_mono_values_R3G3B2;
 	break;
-    case PF_CI8:
-	xrb->Base.GetRow = get_row_CI8;
-	xrb->Base.GetValues = get_values_CI8;
-	xrb->Base.PutRow = put_row_CI8;
-	xrb->Base.PutMonoRow = put_mono_row_CI8;
-	xrb->Base.PutValues = put_values_CI8;
-	xrb->Base.PutMonoValues = put_mono_values_CI8;
-	break;
     default:
 	assert(0);
 	return;
@@ -410,14 +368,6 @@ swrast_set_span_funcs_front(struct swrast_renderbuffer *xrb,
 	xrb->Base.PutValues = put_values_R3G3B2_front;
 	xrb->Base.PutMonoValues = put_mono_values_R3G3B2_front;
 	break;
-    case PF_CI8:
-	xrb->Base.GetRow = get_row_CI8_front;
-	xrb->Base.GetValues = get_values_CI8_front;
-	xrb->Base.PutRow = put_row_CI8_front;
-	xrb->Base.PutMonoRow = put_mono_row_CI8_front;
-	xrb->Base.PutValues = put_values_CI8_front;
-	xrb->Base.PutMonoValues = put_mono_values_CI8_front;
-	break;
     default:
 	assert(0);
 	return;
diff --git a/src/mesa/drivers/dri/swrast/swrast_spantemp.h b/src/mesa/drivers/dri/swrast/swrast_spantemp.h
index e0cb241429..879a0c12e7 100644
--- a/src/mesa/drivers/dri/swrast/swrast_spantemp.h
+++ b/src/mesa/drivers/dri/swrast/swrast_spantemp.h
@@ -98,7 +98,6 @@ GET_ROW( GLcontext *glCtx, GLint x, GLint y, GLuint n, char *row )
  * Define the following macros before including this file:
  *   NAME(BASE)  to generate the function name (i.e. add prefix or suffix)
  *   RB_TYPE  the renderbuffer DataType
- *   CI_MODE  if set, color index mode, else RGBA
  *   SPAN_VARS  to declare any local variables
  *   INIT_PIXEL_PTR(P, X, Y)  to initialize a pointer to a pixel
  *   INC_PIXEL_PTR(P)  to increment a pixel pointer by one pixel
@@ -113,9 +112,7 @@ GET_ROW( GLcontext *glCtx, GLint x, GLint y, GLuint n, char *row )
 #include "main/macros.h"
 
 
-#ifdef CI_MODE
-#define RB_COMPONENTS 1
-#elif !defined(RB_COMPONENTS)
+#if !defined(RB_COMPONENTS)
 #define RB_COMPONENTS 4
 #endif
 
@@ -127,11 +124,7 @@ NAME(get_row)( GLcontext *ctx, struct gl_renderbuffer *rb,
 #ifdef SPAN_VARS
    SPAN_VARS
 #endif
-#ifdef CI_MODE
-   RB_TYPE *dest = (RB_TYPE *) values;
-#else
    RB_TYPE (*dest)[RB_COMPONENTS] = (RB_TYPE (*)[RB_COMPONENTS]) values;
-#endif
    GLuint i;
    char *row = swrast_drawable(ctx->ReadBuffer)->row;
    INIT_PIXEL_PTR(pixel, x, y);
@@ -151,11 +144,7 @@ NAME(get_values)( GLcontext *ctx, struct gl_renderbuffer *rb,
 #ifdef SPAN_VARS
    SPAN_VARS
 #endif
-#ifdef CI_MODE
-   RB_TYPE *dest = (RB_TYPE *) values;
-#else
    RB_TYPE (*dest)[RB_COMPONENTS] = (RB_TYPE (*)[RB_COMPONENTS]) values;
-#endif
    GLuint i;
    for (i = 0; i < count; i++) {
       RB_TYPE pixel[4];
@@ -198,7 +187,6 @@ NAME(put_row)( GLcontext *ctx, struct gl_renderbuffer *rb,
 }
 
 
-#if !defined(CI_MODE)
 static void
 NAME(put_row_rgb)( GLcontext *ctx, struct gl_renderbuffer *rb,
                    GLuint count, GLint x, GLint y,
@@ -237,7 +225,6 @@ NAME(put_row_rgb)( GLcontext *ctx, struct gl_renderbuffer *rb,
    }
    (void) rb;
 }
-#endif
 
 
 static void
@@ -319,7 +306,6 @@ NAME(put_mono_values)( GLcontext *ctx, struct gl_renderbuffer *rb,
 #undef NAME
 #undef RB_TYPE
 #undef RB_COMPONENTS
-#undef CI_MODE
 #undef SPAN_VARS
 #undef INIT_PIXEL_PTR
 #undef INC_PIXEL_PTR
-- 
cgit v1.2.3


From 6f317253bf987f6e9788eb913a587d1373192f1c Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 16:51:40 -0800
Subject: fbdev: Remove support for color-index rendering

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/drivers/fbdev/glfbdev.c | 122 ++++++++++++---------------------------
 1 file changed, 36 insertions(+), 86 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/fbdev/glfbdev.c b/src/mesa/drivers/fbdev/glfbdev.c
index 4e369ceac4..e6ece69a64 100644
--- a/src/mesa/drivers/fbdev/glfbdev.c
+++ b/src/mesa/drivers/fbdev/glfbdev.c
@@ -70,7 +70,6 @@
 #define PF_B8G8R8A8   2
 #define PF_B5G6R5     3
 #define PF_B5G5R5     4
-#define PF_CI8        5
 
 
 /**
@@ -264,25 +263,6 @@ viewport(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h)
 #include "swrast/s_spantemp.h"
 
 
-/* 8-bit color index */
-#define NAME(PREFIX) PREFIX##_CI8
-#define CI_MODE
-#define RB_TYPE GLubyte
-#define SPAN_VARS \
-   struct GLFBDevRenderbufferRec *frb = (struct GLFBDevRenderbufferRec *) rb;
-#define INIT_PIXEL_PTR(P, X, Y) \
-   GLubyte *P = frb->bottom - (Y) * frb->rowStride + (X)
-#define INC_PIXEL_PTR(P) P += 1
-#define STORE_PIXEL(DST, X, Y, VALUE) \
-   *DST = VALUE[0]
-#define FETCH_PIXEL(DST, SRC) \
-   DST = SRC[0]
-
-#include "swrast/s_spantemp.h"
-
-
-
-
 /**********************************************************************/
 /* Public API functions                                               */
 /**********************************************************************/
@@ -345,7 +325,7 @@ glFBDevCreateVisual( const struct fb_fix_screeninfo *fixInfo,
 {
    GLFBDevVisualPtr vis;
    const int *attrib;
-   GLboolean rgbFlag = GL_TRUE, dbFlag = GL_FALSE, stereoFlag = GL_FALSE;
+   GLboolean dbFlag = GL_FALSE, stereoFlag = GL_FALSE;
    GLint redBits = 0, greenBits = 0, blueBits = 0, alphaBits = 0;
    GLint indexBits = 0, depthBits = 0, stencilBits = 0;
    GLint accumRedBits = 0, accumGreenBits = 0;
@@ -367,9 +347,6 @@ glFBDevCreateVisual( const struct fb_fix_screeninfo *fixInfo,
       case GLFBDEV_DOUBLE_BUFFER:
          dbFlag = GL_TRUE;
          break;
-      case GLFBDEV_COLOR_INDEX:
-         rgbFlag = GL_FALSE;
-         break;
       case GLFBDEV_DEPTH_SIZE:
          depthBits = attrib[1];
          attrib++;
@@ -390,6 +367,8 @@ glFBDevCreateVisual( const struct fb_fix_screeninfo *fixInfo,
          numSamples = attrib[1];
          attrib++;
          break;
+      case GLFBDEV_COLOR_INDEX:
+         /* Mesa no longer supports color-index rendering. */
       default:
          /* unexpected token */
          free(vis);
@@ -397,60 +376,45 @@ glFBDevCreateVisual( const struct fb_fix_screeninfo *fixInfo,
       }
    }
 
-   if (rgbFlag) {
-      redBits   = varInfo->red.length;
-      greenBits = varInfo->green.length;
-      blueBits  = varInfo->blue.length;
-      alphaBits = varInfo->transp.length;
-
-      if (fixInfo->visual == FB_VISUAL_TRUECOLOR ||
-          fixInfo->visual == FB_VISUAL_DIRECTCOLOR) {
-         if (varInfo->bits_per_pixel == 24
-             && varInfo->red.offset == 16
-             && varInfo->green.offset == 8
-             && varInfo->blue.offset == 0) {
-            vis->pixelFormat = PF_B8G8R8;
-         }
-         else if (varInfo->bits_per_pixel == 32
-                  && varInfo->red.offset == 16
-                  && varInfo->green.offset == 8
-                  && varInfo->blue.offset == 0) {
-            vis->pixelFormat = PF_B8G8R8A8;
-         }
-         else if (varInfo->bits_per_pixel == 16
-                  && varInfo->red.offset == 11
-                  && varInfo->green.offset == 5
-                  && varInfo->blue.offset == 0) {
-            vis->pixelFormat = PF_B5G6R5;
-         }
-         else if (varInfo->bits_per_pixel == 16
-                  && varInfo->red.offset == 10
-                  && varInfo->green.offset == 5
-                  && varInfo->blue.offset == 0) {
-            vis->pixelFormat = PF_B5G5R5;
-         }
-         else {
-            _mesa_problem(NULL, "Unsupported fbdev RGB visual/bitdepth!\n");
-            free(vis);
-            return NULL;
-         }
+   redBits   = varInfo->red.length;
+   greenBits = varInfo->green.length;
+   blueBits  = varInfo->blue.length;
+   alphaBits = varInfo->transp.length;
+
+   if (fixInfo->visual == FB_VISUAL_TRUECOLOR ||
+       fixInfo->visual == FB_VISUAL_DIRECTCOLOR) {
+      if (varInfo->bits_per_pixel == 24
+          && varInfo->red.offset == 16
+          && varInfo->green.offset == 8
+          && varInfo->blue.offset == 0) {
+         vis->pixelFormat = PF_B8G8R8;
       }
-   }
-   else {
-      indexBits = varInfo->bits_per_pixel;
-      if ((fixInfo->visual == FB_VISUAL_PSEUDOCOLOR ||
-           fixInfo->visual == FB_VISUAL_STATIC_PSEUDOCOLOR)
-          && varInfo->bits_per_pixel == 8) {
-         vis->pixelFormat = PF_CI8;
+      else if (varInfo->bits_per_pixel == 32
+               && varInfo->red.offset == 16
+               && varInfo->green.offset == 8
+               && varInfo->blue.offset == 0) {
+         vis->pixelFormat = PF_B8G8R8A8;
+      }
+      else if (varInfo->bits_per_pixel == 16
+               && varInfo->red.offset == 11
+               && varInfo->green.offset == 5
+               && varInfo->blue.offset == 0) {
+         vis->pixelFormat = PF_B5G6R5;
+      }
+      else if (varInfo->bits_per_pixel == 16
+               && varInfo->red.offset == 10
+               && varInfo->green.offset == 5
+               && varInfo->blue.offset == 0) {
+         vis->pixelFormat = PF_B5G5R5;
       }
       else {
-         _mesa_problem(NULL, "Unsupported fbdev CI visual/bitdepth!\n");
+         _mesa_problem(NULL, "Unsupported fbdev RGB visual/bitdepth!\n");
          free(vis);
          return NULL;
       }
    }
 
-   if (!_mesa_initialize_visual(&vis->glvisual, rgbFlag, dbFlag, stereoFlag,
+   if (!_mesa_initialize_visual(&vis->glvisual, GL_TRUE, dbFlag, stereoFlag,
                                 redBits, greenBits, blueBits, alphaBits,
                                 indexBits, depthBits, stencilBits,
                                 accumRedBits, accumGreenBits,
@@ -554,23 +518,9 @@ new_glfbdev_renderbuffer(void *bufferStart, const GLFBDevVisualPtr visual)
          rb->Base.PutValues = put_values_B5G5R5;
          rb->Base.PutMonoValues = put_mono_values_B5G5R5;
       }
-      else if (pixelFormat == PF_CI8) {
-         rb->Base.GetRow = get_row_CI8;
-         rb->Base.GetValues = get_values_CI8;
-         rb->Base.PutRow = put_row_CI8;
-         rb->Base.PutMonoRow = put_mono_row_CI8;
-         rb->Base.PutValues = put_values_CI8;
-         rb->Base.PutMonoValues = put_mono_values_CI8;
-      }
 
-      if (pixelFormat == PF_CI8) {
-         rb->Base.InternalFormat = GL_COLOR_INDEX8_EXT;
-         rb->Base._BaseFormat = GL_COLOR_INDEX;
-      }
-      else {
-         rb->Base.InternalFormat = GL_RGBA;
-         rb->Base._BaseFormat = GL_RGBA;
-      }
+      rb->Base.InternalFormat = GL_RGBA;
+      rb->Base._BaseFormat = GL_RGBA;
       rb->Base.DataType = GL_UNSIGNED_BYTE;
       rb->Base.Data = bufferStart;
 
-- 
cgit v1.2.3


From 641705f0329c038079650089a664d76abfc5a937 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 16:59:27 -0800
Subject: osmesa: Remove support for color-index rendering

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/drivers/osmesa/osmesa.c | 78 ++++++----------------------------------
 1 file changed, 11 insertions(+), 67 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/osmesa/osmesa.c b/src/mesa/drivers/osmesa/osmesa.c
index f9672d888e..bb6dbdf1c0 100644
--- a/src/mesa/drivers/osmesa/osmesa.c
+++ b/src/mesa/drivers/osmesa/osmesa.c
@@ -484,24 +484,6 @@ osmesa_update_state( GLcontext *ctx, GLuint new_state )
 #include "swrast/s_spantemp.h"
 
 
-/* color index */
-#define NAME(PREFIX) PREFIX##_CI
-#define CI_MODE
-#define RB_TYPE GLubyte
-#define SPAN_VARS \
-   const OSMesaContext osmesa = OSMESA_CONTEXT(ctx);
-#define INIT_PIXEL_PTR(P, X, Y) \
-   GLubyte *P = (GLubyte *) osmesa->rowaddr[Y] + (X)
-#define INC_PIXEL_PTR(P) P += 1
-#define STORE_PIXEL(DST, X, Y, VALUE) \
-   *DST = VALUE[0]
-#define FETCH_PIXEL(DST, SRC) \
-   DST = SRC[0]
-#include "swrast/s_spantemp.h"
-
-
-
-
 /**
  * Macros for optimized line/triangle rendering.
  * Only for 8-bit channel, RGBA, BGRA, ARGB formats.
@@ -776,11 +758,7 @@ compute_row_addresses( OSMesaContext osmesa )
       return;
    }
 
-   if (osmesa->format == OSMESA_COLOR_INDEX) {
-      /* CI mode */
-      bytesPerPixel = 1 * sizeof(GLubyte);
-   }
-   else if ((osmesa->format == OSMESA_RGB) || (osmesa->format == OSMESA_BGR)) {
+   if ((osmesa->format == OSMESA_RGB) || (osmesa->format == OSMESA_BGR)) {
       /* RGB mode */
       bytesPerPixel = 3 * bpc;
    }
@@ -999,14 +977,6 @@ osmesa_renderbuffer_storage(GLcontext *ctx, struct gl_renderbuffer *rb,
       rb->PutValues = put_values_RGB_565;
       rb->PutMonoValues = put_mono_values_RGB_565;
    }
-   else if (osmesa->format == OSMESA_COLOR_INDEX) {
-      rb->GetRow = get_row_CI;
-      rb->GetValues = get_values_CI;
-      rb->PutRow = put_row_CI;
-      rb->PutMonoRow = put_mono_row_CI;
-      rb->PutValues = put_values_CI;
-      rb->PutMonoValues = put_mono_values_CI;
-   }
    else {
       _mesa_problem(ctx, "bad pixel format in osmesa renderbuffer_storage");
    }
@@ -1033,18 +1003,10 @@ new_osmesa_renderbuffer(GLcontext *ctx, GLenum format, GLenum type)
       rb->Delete = osmesa_delete_renderbuffer;
       rb->AllocStorage = osmesa_renderbuffer_storage;
 
-      if (format == OSMESA_COLOR_INDEX) {
-         rb->InternalFormat = GL_COLOR_INDEX;
-         rb->Format = MESA_FORMAT_CI8;
-         rb->_BaseFormat = GL_COLOR_INDEX;
-         rb->DataType = GL_UNSIGNED_BYTE;
-      }
-      else {
-         rb->InternalFormat = GL_RGBA;
-         rb->Format = MESA_FORMAT_RGBA8888;
-         rb->_BaseFormat = GL_RGBA;
-         rb->DataType = type;
-      }
+      rb->InternalFormat = GL_RGBA;
+      rb->Format = MESA_FORMAT_RGBA8888;
+      rb->_BaseFormat = GL_RGBA;
+      rb->DataType = type;
    }
    return rb;
 }
@@ -1059,7 +1021,7 @@ new_osmesa_renderbuffer(GLcontext *ctx, GLenum format, GLenum type)
  * Create an Off-Screen Mesa rendering context.  The only attribute needed is
  * an RGBA vs Color-Index mode flag.
  *
- * Input:  format - either GL_RGBA or GL_COLOR_INDEX
+ * Input:  format - Must be GL_RGBA
  *         sharelist - specifies another OSMesaContext with which to share
  *                     display lists.  NULL indicates no sharing.
  * Return:  an OSMesaContext or 0 if error
@@ -1067,9 +1029,8 @@ new_osmesa_renderbuffer(GLcontext *ctx, GLenum format, GLenum type)
 GLAPI OSMesaContext GLAPIENTRY
 OSMesaCreateContext( GLenum format, OSMesaContext sharelist )
 {
-   const GLint accumBits = (format == OSMESA_COLOR_INDEX) ? 0 : 16;
    return OSMesaCreateContextExt(format, DEFAULT_SOFTWARE_DEPTH_BITS,
-                                 8, accumBits, sharelist);
+                                 8, 0, sharelist);
 }
 
 
@@ -1086,17 +1047,11 @@ OSMesaCreateContextExt( GLenum format, GLint depthBits, GLint stencilBits,
    OSMesaContext osmesa;
    struct dd_function_table functions;
    GLint rind, gind, bind, aind;
-   GLint indexBits = 0, redBits = 0, greenBits = 0, blueBits = 0, alphaBits =0;
-   GLboolean rgbmode;
+   GLint redBits = 0, greenBits = 0, blueBits = 0, alphaBits =0;
    GLenum type = CHAN_TYPE;
 
    rind = gind = bind = aind = 0;
-   if (format==OSMESA_COLOR_INDEX) {
-      indexBits = 8;
-      rgbmode = GL_FALSE;
-   }
-   else if (format==OSMESA_RGBA) {
-      indexBits = 0;
+   if (format==OSMESA_RGBA) {
       redBits = CHAN_BITS;
       greenBits = CHAN_BITS;
       blueBits = CHAN_BITS;
@@ -1105,10 +1060,8 @@ OSMesaCreateContextExt( GLenum format, GLint depthBits, GLint stencilBits,
       gind = 1;
       bind = 2;
       aind = 3;
-      rgbmode = GL_TRUE;
    }
    else if (format==OSMESA_BGRA) {
-      indexBits = 0;
       redBits = CHAN_BITS;
       greenBits = CHAN_BITS;
       blueBits = CHAN_BITS;
@@ -1117,10 +1070,8 @@ OSMesaCreateContextExt( GLenum format, GLint depthBits, GLint stencilBits,
       gind = 1;
       rind = 2;
       aind = 3;
-      rgbmode = GL_TRUE;
    }
    else if (format==OSMESA_ARGB) {
-      indexBits = 0;
       redBits = CHAN_BITS;
       greenBits = CHAN_BITS;
       blueBits = CHAN_BITS;
@@ -1129,10 +1080,8 @@ OSMesaCreateContextExt( GLenum format, GLint depthBits, GLint stencilBits,
       rind = 1;
       gind = 2;
       bind = 3;
-      rgbmode = GL_TRUE;
    }
    else if (format==OSMESA_RGB) {
-      indexBits = 0;
       redBits = CHAN_BITS;
       greenBits = CHAN_BITS;
       blueBits = CHAN_BITS;
@@ -1140,10 +1089,8 @@ OSMesaCreateContextExt( GLenum format, GLint depthBits, GLint stencilBits,
       rind = 0;
       gind = 1;
       bind = 2;
-      rgbmode = GL_TRUE;
    }
    else if (format==OSMESA_BGR) {
-      indexBits = 0;
       redBits = CHAN_BITS;
       greenBits = CHAN_BITS;
       blueBits = CHAN_BITS;
@@ -1151,11 +1098,9 @@ OSMesaCreateContextExt( GLenum format, GLint depthBits, GLint stencilBits,
       rind = 2;
       gind = 1;
       bind = 0;
-      rgbmode = GL_TRUE;
    }
 #if CHAN_TYPE == GL_UNSIGNED_BYTE
    else if (format==OSMESA_RGB_565) {
-      indexBits = 0;
       redBits = 5;
       greenBits = 6;
       blueBits = 5;
@@ -1163,7 +1108,6 @@ OSMesaCreateContextExt( GLenum format, GLint depthBits, GLint stencilBits,
       rind = 0; /* not used */
       gind = 0;
       bind = 0;
-      rgbmode = GL_TRUE;
    }
 #endif
    else {
@@ -1172,14 +1116,14 @@ OSMesaCreateContextExt( GLenum format, GLint depthBits, GLint stencilBits,
 
    osmesa = (OSMesaContext) CALLOC_STRUCT(osmesa_context);
    if (osmesa) {
-      osmesa->gl_visual = _mesa_create_visual( rgbmode,
+      osmesa->gl_visual = _mesa_create_visual( GL_TRUE,     /* rgbMode */
                                                GL_FALSE,    /* double buffer */
                                                GL_FALSE,    /* stereo */
                                                redBits,
                                                greenBits,
                                                blueBits,
                                                alphaBits,
-                                               indexBits,
+                                               0,
                                                depthBits,
                                                stencilBits,
                                                accumBits,
-- 
cgit v1.2.3


From 81fe9949ef0293f7a6e076bd6e56f6a5340a1dc3 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 17:44:28 -0800
Subject: mesa/xlib: Remove support for color-index rendering

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/drivers/x11/fakeglx.c   | 343 ++++++++++++---------------------------
 src/mesa/drivers/x11/xm_api.c    | 112 ++++++-------
 src/mesa/drivers/x11/xm_buffer.c |  16 +-
 3 files changed, 153 insertions(+), 318 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/x11/fakeglx.c b/src/mesa/drivers/x11/fakeglx.c
index 33a3ff6d5f..f1e62b6bd4 100644
--- a/src/mesa/drivers/x11/fakeglx.c
+++ b/src/mesa/drivers/x11/fakeglx.c
@@ -152,13 +152,8 @@ is_usable_visual( XVisualInfo *vinfo )
          return GL_TRUE;
       case StaticColor:
       case PseudoColor:
-	 /* Any StaticColor/PseudoColor visual of at least 4 bits */
-	 if (vinfo->depth>=4) {
-	    return GL_TRUE;
-	 }
-	 else {
-	    return GL_FALSE;
-	 }
+	 /* Color-index rendering is not supported. */
+	 return GL_FALSE;
       case TrueColor:
       case DirectColor:
 	 /* Any depth of TrueColor or DirectColor works in RGB mode */
@@ -268,7 +263,7 @@ level_of_visual( Display *dpy, XVisualInfo *vinfo )
  */
 static XMesaVisual
 save_glx_visual( Display *dpy, XVisualInfo *vinfo,
-                 GLboolean rgbFlag, GLboolean alphaFlag, GLboolean dbFlag,
+                 GLboolean alphaFlag, GLboolean dbFlag,
                  GLboolean stereoFlag,
                  GLint depth_size, GLint stencil_size,
                  GLint accumRedSize, GLint accumGreenSize,
@@ -309,7 +304,7 @@ save_glx_visual( Display *dpy, XVisualInfo *vinfo,
       comparePointers = GL_FALSE;
 
    /* Force the visual to have an alpha channel */
-   if (rgbFlag && _mesa_getenv("MESA_GLX_FORCE_ALPHA"))
+   if (_mesa_getenv("MESA_GLX_FORCE_ALPHA"))
       alphaFlag = GL_TRUE;
 
    /* First check if a matching visual is already in the list */
@@ -319,7 +314,6 @@ save_glx_visual( Display *dpy, XVisualInfo *vinfo,
           && v->mesa_visual.level == level
           && v->mesa_visual.numAuxBuffers == numAuxBuffers
           && v->ximage_flag == ximageFlag
-          && v->mesa_visual.rgbMode == rgbFlag
           && v->mesa_visual.doubleBufferMode == dbFlag
           && v->mesa_visual.stereoMode == stereoFlag
           && (v->mesa_visual.alphaBits > 0) == alphaFlag
@@ -339,7 +333,7 @@ save_glx_visual( Display *dpy, XVisualInfo *vinfo,
 
    /* Create a new visual and add it to the list. */
 
-   xmvis = XMesaCreateVisual( dpy, vinfo, rgbFlag, alphaFlag, dbFlag,
+   xmvis = XMesaCreateVisual( dpy, vinfo, GL_TRUE, alphaFlag, dbFlag,
                               stereoFlag, ximageFlag,
                               depth_size, stencil_size,
                               accumRedSize, accumBlueSize,
@@ -422,53 +416,26 @@ create_glx_visual( Display *dpy, XVisualInfo *visinfo )
 
    vislevel = level_of_visual( dpy, visinfo );
    if (vislevel) {
-      /* Configure this visual as a CI, single-buffered overlay */
-      return save_glx_visual( dpy, visinfo,
-                              GL_FALSE,  /* rgb */
-                              GL_FALSE,  /* alpha */
-                              GL_FALSE,  /* double */
-                              GL_FALSE,  /* stereo */
-                              0,         /* depth bits */
-                              0,         /* stencil bits */
-                              0,0,0,0,   /* accum bits */
-                              vislevel,  /* level */
-                              0          /* numAux */
-                            );
+      /* Color-index rendering to overlays is not supported. */
+      return NULL;
    }
    else if (is_usable_visual( visinfo )) {
-      if (_mesa_getenv("MESA_GLX_FORCE_CI")) {
-         /* Configure this visual as a COLOR INDEX visual. */
-         return save_glx_visual( dpy, visinfo,
-                                 GL_FALSE,   /* rgb */
-                                 GL_FALSE,  /* alpha */
-                                 GL_TRUE,   /* double */
-                                 GL_FALSE,  /* stereo */
-                                 zBits,
-                                 STENCIL_BITS,
-                                 0, 0, 0, 0, /* accum bits */
-                                 0,         /* level */
-                                 0          /* numAux */
-                               );
-      }
-      else {
-         /* Configure this visual as RGB, double-buffered, depth-buffered. */
-         /* This is surely wrong for some people's needs but what else */
-         /* can be done?  They should use glXChooseVisual(). */
-         return save_glx_visual( dpy, visinfo,
-                                 GL_TRUE,   /* rgb */
-                                 alphaFlag, /* alpha */
-                                 GL_TRUE,   /* double */
-                                 GL_FALSE,  /* stereo */
-                                 zBits,
-                                 STENCIL_BITS,
-                                 accBits, /* r */
-                                 accBits, /* g */
-                                 accBits, /* b */
-                                 accBits, /* a */
-                                 0,         /* level */
-                                 0          /* numAux */
-                               );
-      }
+      /* Configure this visual as RGB, double-buffered, depth-buffered. */
+      /* This is surely wrong for some people's needs but what else */
+      /* can be done?  They should use glXChooseVisual(). */
+      return save_glx_visual( dpy, visinfo,
+			      alphaFlag, /* alpha */
+			      GL_TRUE,   /* double */
+			      GL_FALSE,  /* stereo */
+			      zBits,
+			      STENCIL_BITS,
+			      accBits, /* r */
+			      accBits, /* g */
+			      accBits, /* b */
+			      accBits, /* a */
+			      0,         /* level */
+			      0          /* numAux */
+			      );
    }
    else {
       _mesa_warning(NULL, "Mesa: error in glXCreateContext: bad visual\n");
@@ -623,8 +590,6 @@ get_env_visual(Display *dpy, int scr, const char *varname)
 
    if (strcmp(type,"TrueColor")==0)          xclass = TrueColor;
    else if (strcmp(type,"DirectColor")==0)   xclass = DirectColor;
-   else if (strcmp(type,"PseudoColor")==0)   xclass = PseudoColor;
-   else if (strcmp(type,"StaticColor")==0)   xclass = StaticColor;
    else if (strcmp(type,"GrayScale")==0)     xclass = GrayScale;
    else if (strcmp(type,"StaticGray")==0)    xclass = StaticGray;
 
@@ -646,160 +611,79 @@ get_env_visual(Display *dpy, int scr, const char *varname)
 /*
  * Select an X visual which satisfies the RGBA/CI flag and minimum depth.
  * Input:  dpy, screen - X display and screen number
- *         rgba - GL_TRUE = RGBA mode, GL_FALSE = CI mode
  *         min_depth - minimum visual depth
  *         preferred_class - preferred GLX visual class or DONT_CARE
  * Return:  pointer to an XVisualInfo or NULL.
  */
 static XVisualInfo *
-choose_x_visual( Display *dpy, int screen, GLboolean rgba, int min_depth,
-                 int preferred_class )
+choose_x_visual(Display *dpy, int screen, int min_depth, int preferred_class)
 {
    XVisualInfo *vis;
    int xclass, visclass = 0;
    int depth;
 
-   if (rgba) {
-      Atom hp_cr_maps = XInternAtom(dpy, "_HP_RGB_SMOOTH_MAP_LIST", True);
-      /* First see if the MESA_RGB_VISUAL env var is defined */
-      vis = get_env_visual( dpy, screen, "MESA_RGB_VISUAL" );
-      if (vis) {
-	 return vis;
-      }
-      /* Otherwise, search for a suitable visual */
-      if (preferred_class==DONT_CARE) {
-         for (xclass=0;xclass<6;xclass++) {
-            switch (xclass) {
-               case 0:  visclass = TrueColor;    break;
-               case 1:  visclass = DirectColor;  break;
-               case 2:  visclass = PseudoColor;  break;
-               case 3:  visclass = StaticColor;  break;
-               case 4:  visclass = GrayScale;    break;
-               case 5:  visclass = StaticGray;   break;
-            }
-            if (min_depth==0) {
-               /* start with shallowest */
-               for (depth=0;depth<=32;depth++) {
-                  if (visclass==TrueColor && depth==8 && !hp_cr_maps) {
-                     /* Special case:  try to get 8-bit PseudoColor before */
-                     /* 8-bit TrueColor */
-                     vis = get_visual( dpy, screen, 8, PseudoColor );
-                     if (vis) {
-                        return vis;
-                     }
-                  }
-                  vis = get_visual( dpy, screen, depth, visclass );
-                  if (vis) {
-                     return vis;
-                  }
-               }
-            }
-            else {
-               /* start with deepest */
-               for (depth=32;depth>=min_depth;depth--) {
-                  if (visclass==TrueColor && depth==8 && !hp_cr_maps) {
-                     /* Special case:  try to get 8-bit PseudoColor before */
-                     /* 8-bit TrueColor */
-                     vis = get_visual( dpy, screen, 8, PseudoColor );
-                     if (vis) {
-                        return vis;
-                     }
-                  }
-                  vis = get_visual( dpy, screen, depth, visclass );
-                  if (vis) {
-                     return vis;
-                  }
-               }
-            }
-         }
-      }
-      else {
-         /* search for a specific visual class */
-         switch (preferred_class) {
-            case GLX_TRUE_COLOR_EXT:    visclass = TrueColor;    break;
-            case GLX_DIRECT_COLOR_EXT:  visclass = DirectColor;  break;
-            case GLX_PSEUDO_COLOR_EXT:  visclass = PseudoColor;  break;
-            case GLX_STATIC_COLOR_EXT:  visclass = StaticColor;  break;
-            case GLX_GRAY_SCALE_EXT:    visclass = GrayScale;    break;
-            case GLX_STATIC_GRAY_EXT:   visclass = StaticGray;   break;
-            default:   return NULL;
-         }
-         if (min_depth==0) {
-            /* start with shallowest */
-            for (depth=0;depth<=32;depth++) {
-               vis = get_visual( dpy, screen, depth, visclass );
-               if (vis) {
-                  return vis;
-               }
-            }
-         }
-         else {
-            /* start with deepest */
-            for (depth=32;depth>=min_depth;depth--) {
-               vis = get_visual( dpy, screen, depth, visclass );
-               if (vis) {
-                  return vis;
-               }
-            }
-         }
+   /* First see if the MESA_RGB_VISUAL env var is defined */
+   vis = get_env_visual( dpy, screen, "MESA_RGB_VISUAL" );
+   if (vis) {
+      return vis;
+   }
+   /* Otherwise, search for a suitable visual */
+   if (preferred_class==DONT_CARE) {
+      for (xclass=0;xclass<4;xclass++) {
+	 switch (xclass) {
+	 case 0:  visclass = TrueColor;    break;
+	 case 1:  visclass = DirectColor;  break;
+	 case 2:  visclass = GrayScale;    break;
+	 case 3:  visclass = StaticGray;   break;
+	 }
+	 if (min_depth==0) {
+	    /* start with shallowest */
+	    for (depth=0;depth<=32;depth++) {
+	       vis = get_visual( dpy, screen, depth, visclass );
+	       if (vis) {
+		  return vis;
+	       }
+	    }
+	 }
+	 else {
+	    /* start with deepest */
+	    for (depth=32;depth>=min_depth;depth--) {
+	       vis = get_visual( dpy, screen, depth, visclass );
+	       if (vis) {
+		  return vis;
+	       }
+	    }
+	 }
       }
    }
    else {
-      /* First see if the MESA_CI_VISUAL env var is defined */
-      vis = get_env_visual( dpy, screen, "MESA_CI_VISUAL" );
-      if (vis) {
-	 return vis;
+      /* search for a specific visual class */
+      switch (preferred_class) {
+      case GLX_TRUE_COLOR_EXT:    visclass = TrueColor;    break;
+      case GLX_DIRECT_COLOR_EXT:  visclass = DirectColor;  break;
+      case GLX_GRAY_SCALE_EXT:    visclass = GrayScale;    break;
+      case GLX_STATIC_GRAY_EXT:   visclass = StaticGray;   break;
+      case GLX_PSEUDO_COLOR_EXT:
+      case GLX_STATIC_COLOR_EXT:
+      default:   return NULL;
       }
-      /* Otherwise, search for a suitable visual, starting with shallowest */
-      if (preferred_class==DONT_CARE) {
-         for (xclass=0;xclass<4;xclass++) {
-            switch (xclass) {
-               case 0:  visclass = PseudoColor;  break;
-               case 1:  visclass = StaticColor;  break;
-               case 2:  visclass = GrayScale;    break;
-               case 3:  visclass = StaticGray;   break;
-            }
-            /* try 8-bit up through 16-bit */
-            for (depth=8;depth<=16;depth++) {
-               vis = get_visual( dpy, screen, depth, visclass );
-               if (vis) {
-                  return vis;
-               }
-            }
-            /* try min_depth up to 8-bit */
-            for (depth=min_depth;depth<8;depth++) {
-               vis = get_visual( dpy, screen, depth, visclass );
-               if (vis) {
-                  return vis;
-               }
-            }
-         }
+      if (min_depth==0) {
+	 /* start with shallowest */
+	 for (depth=0;depth<=32;depth++) {
+	    vis = get_visual( dpy, screen, depth, visclass );
+	    if (vis) {
+	       return vis;
+	    }
+	 }
       }
       else {
-         /* search for a specific visual class */
-         switch (preferred_class) {
-            case GLX_TRUE_COLOR_EXT:    visclass = TrueColor;    break;
-            case GLX_DIRECT_COLOR_EXT:  visclass = DirectColor;  break;
-            case GLX_PSEUDO_COLOR_EXT:  visclass = PseudoColor;  break;
-            case GLX_STATIC_COLOR_EXT:  visclass = StaticColor;  break;
-            case GLX_GRAY_SCALE_EXT:    visclass = GrayScale;    break;
-            case GLX_STATIC_GRAY_EXT:   visclass = StaticGray;   break;
-            default:   return NULL;
-         }
-         /* try 8-bit up through 16-bit */
-         for (depth=8;depth<=16;depth++) {
-            vis = get_visual( dpy, screen, depth, visclass );
-            if (vis) {
-               return vis;
-            }
-         }
-         /* try min_depth up to 8-bit */
-         for (depth=min_depth;depth<8;depth++) {
-            vis = get_visual( dpy, screen, depth, visclass );
-            if (vis) {
-               return vis;
-            }
-         }
+	 /* start with deepest */
+	 for (depth=32;depth>=min_depth;depth--) {
+	    vis = get_visual( dpy, screen, depth, visclass );
+	    if (vis) {
+	       return vis;
+	    }
+	 }
       }
    }
 
@@ -822,7 +706,7 @@ choose_x_visual( Display *dpy, int screen, GLboolean rgba, int min_depth,
  * Return:  pointer to an XVisualInfo or NULL.
  */
 static XVisualInfo *
-choose_x_overlay_visual( Display *dpy, int scr, GLboolean rgbFlag,
+choose_x_overlay_visual( Display *dpy, int scr,
                          int level, int trans_type, int trans_value,
                          int min_depth, int preferred_class )
 {
@@ -889,14 +773,8 @@ choose_x_overlay_visual( Display *dpy, int scr, GLboolean rgbFlag,
          continue;
       }
 
-      /* if RGB was requested, make sure we have True/DirectColor */
-      if (rgbFlag && vislist->CLASS != TrueColor
-          && vislist->CLASS != DirectColor)
-         continue;
-
-      /* if CI was requested, make sure we have a color indexed visual */
-      if (!rgbFlag
-          && (vislist->CLASS == TrueColor || vislist->CLASS == DirectColor))
+      /* Color-index rendering is not supported.  Make sure we have True/DirectColor */
+      if (vislist->CLASS != TrueColor && vislist->CLASS != DirectColor)
          continue;
 
       if (deepvis==NULL || vislist->depth > deepest) {
@@ -1266,6 +1144,9 @@ choose_visual( Display *dpy, int screen, const int *list, GLboolean fbConfig )
       }
    }
 
+   if (!rgb_flag)
+      return NULL;
+
    (void) caveat;
 
    /*
@@ -1285,46 +1166,27 @@ choose_visual( Display *dpy, int screen, const int *list, GLboolean fbConfig )
       if (vis) {
          /* give the visual some useful GLX attributes */
          double_flag = GL_TRUE;
-         if (vis->depth > 8)
-            rgb_flag = GL_TRUE;
+         if (vis->depth <= 8)
+	    return NULL;
          depth_size = default_depth_bits();
          stencil_size = STENCIL_BITS;
          /* XXX accum??? */
       }
    }
-   else if (level==0) {
-      /* normal color planes */
-      if (rgb_flag) {
-         /* Get an RGB visual */
-         int min_rgb = min_red + min_green + min_blue;
-         if (min_rgb>1 && min_rgb<8) {
-            /* a special case to be sure we can get a monochrome visual */
-            min_rgb = 1;
-         }
-         vis = choose_x_visual( dpy, screen, rgb_flag, min_rgb, visual_type );
-      }
-      else {
-         /* Get a color index visual */
-         vis = choose_x_visual( dpy, screen, rgb_flag, min_ci, visual_type );
-         accumRedSize = accumGreenSize = accumBlueSize = accumAlphaSize = 0;
-      }
-   }
    else {
-      /* over/underlay planes */
-      if (rgb_flag) {
-         /* rgba overlay */
-         int min_rgb = min_red + min_green + min_blue;
-         if (min_rgb>1 && min_rgb<8) {
-            /* a special case to be sure we can get a monochrome visual */
-            min_rgb = 1;
-         }
-         vis = choose_x_overlay_visual( dpy, screen, rgb_flag, level,
-                              trans_type, trans_value, min_rgb, visual_type );
+      /* RGB visual */
+      int min_rgb = min_red + min_green + min_blue;
+      if (min_rgb>1 && min_rgb<8) {
+	 /* a special case to be sure we can get a monochrome visual */
+	 min_rgb = 1;
+      }
+
+      if (level==0) {
+	 vis = choose_x_visual(dpy, screen, min_rgb, visual_type);
       }
       else {
-         /* color index overlay */
-         vis = choose_x_overlay_visual( dpy, screen, rgb_flag, level,
-                              trans_type, trans_value, min_ci, visual_type );
+	 vis = choose_x_overlay_visual(dpy, screen, level,
+				       trans_type, trans_value, min_rgb, visual_type);
       }
    }
 
@@ -1357,7 +1219,7 @@ choose_visual( Display *dpy, int screen, const int *list, GLboolean fbConfig )
          accumAlphaSize = alpha_flag ? accumRedSize : 0;
       }
 
-      xmvis = save_glx_visual( dpy, vis, rgb_flag, alpha_flag, double_flag,
+      xmvis = save_glx_visual( dpy, vis, alpha_flag, double_flag,
                                stereo_flag, depth_size, stencil_size,
                                accumRedSize, accumGreenSize,
                                accumBlueSize, accumAlphaSize, level, numAux );
@@ -2493,10 +2355,7 @@ Fake_glXQueryContext( Display *dpy, GLXContext ctx, int attribute, int *value )
       *value = xmctx->xm_visual->visinfo->visualid;
       break;
    case GLX_RENDER_TYPE:
-      if (xmctx->xm_visual->mesa_visual.rgbMode)
-         *value = GLX_RGBA_TYPE;
-      else
-         *value = GLX_COLOR_INDEX_TYPE;
+      *value = GLX_RGBA_TYPE;
       break;
    case GLX_SCREEN:
       *value = 0;
diff --git a/src/mesa/drivers/x11/xm_api.c b/src/mesa/drivers/x11/xm_api.c
index 3711c88148..c59df55166 100644
--- a/src/mesa/drivers/x11/xm_api.c
+++ b/src/mesa/drivers/x11/xm_api.c
@@ -684,9 +684,7 @@ setup_grayscale(int client, XMesaVisual v,
       }
 
       prevBuffer = xmesa_find_buffer(v->display, cmap, buffer);
-      if (prevBuffer &&
-          (buffer->xm_visual->mesa_visual.rgbMode ==
-           prevBuffer->xm_visual->mesa_visual.rgbMode)) {
+      if (prevBuffer) {
          /* Copy colormap stuff from previous XMesaBuffer which uses same
           * X colormap.  Do this to avoid time spent in noFaultXAllocColor.
           */
@@ -773,9 +771,7 @@ setup_dithered_color(int client, XMesaVisual v,
       }
 
       prevBuffer = xmesa_find_buffer(v->display, cmap, buffer);
-      if (prevBuffer &&
-          (buffer->xm_visual->mesa_visual.rgbMode ==
-           prevBuffer->xm_visual->mesa_visual.rgbMode)) {
+      if (prevBuffer) {
          /* Copy colormap stuff from previous, matching XMesaBuffer.
           * Do this to avoid time spent in noFaultXAllocColor.
           */
@@ -1047,10 +1043,11 @@ setup_monochrome( XMesaVisual v, XMesaBuffer b )
  */
 static GLboolean
 initialize_visual_and_buffer(XMesaVisual v, XMesaBuffer b,
-                             GLboolean rgb_flag, XMesaDrawable window,
+                             XMesaDrawable window,
                              XMesaColormap cmap)
 {
    int client = 0;
+   const int xclass = v->mesa_visual.visualType;
 
 #ifdef XFree86Server
    client = (window) ? CLIENT_ID(window->id) : 0;
@@ -1062,45 +1059,34 @@ initialize_visual_and_buffer(XMesaVisual v, XMesaBuffer b,
    v->BitsPerPixel = bits_per_pixel(v);
    assert(v->BitsPerPixel > 0);
 
-   if (rgb_flag == GL_FALSE) {
-      /* COLOR-INDEXED WINDOW:
-       * Even if the visual is TrueColor or DirectColor we treat it as
-       * being color indexed.  This is weird but might be useful to someone.
-       */
-      v->dithered_pf = v->undithered_pf = PF_Index;
-      v->mesa_visual.indexBits = GET_VISUAL_DEPTH(v);
+   /* RGB WINDOW:
+    * We support RGB rendering into almost any kind of visual.
+    */
+   if (xclass == GLX_TRUE_COLOR || xclass == GLX_DIRECT_COLOR) {
+      setup_truecolor( v, b, cmap );
    }
-   else {
-      /* RGB WINDOW:
-       * We support RGB rendering into almost any kind of visual.
-       */
-      const int xclass = v->mesa_visual.visualType;
-      if (xclass == GLX_TRUE_COLOR || xclass == GLX_DIRECT_COLOR) {
-	 setup_truecolor( v, b, cmap );
-      }
-      else if (xclass == GLX_STATIC_GRAY && GET_VISUAL_DEPTH(v) == 1) {
-	 setup_monochrome( v, b );
-      }
-      else if (xclass == GLX_GRAY_SCALE || xclass == GLX_STATIC_GRAY) {
-         if (!setup_grayscale( client, v, b, cmap )) {
-            return GL_FALSE;
-         }
-      }
-      else if ((xclass == GLX_PSEUDO_COLOR || xclass == GLX_STATIC_COLOR)
-               && GET_VISUAL_DEPTH(v)>=4 && GET_VISUAL_DEPTH(v)<=16) {
-	 if (!setup_dithered_color( client, v, b, cmap )) {
-            return GL_FALSE;
-         }
+   else if (xclass == GLX_STATIC_GRAY && GET_VISUAL_DEPTH(v) == 1) {
+      setup_monochrome( v, b );
+   }
+   else if (xclass == GLX_GRAY_SCALE || xclass == GLX_STATIC_GRAY) {
+      if (!setup_grayscale( client, v, b, cmap )) {
+	 return GL_FALSE;
       }
-      else {
-	 _mesa_warning(NULL, "XMesa: RGB mode rendering not supported in given visual.\n");
+   }
+   else if ((xclass == GLX_PSEUDO_COLOR || xclass == GLX_STATIC_COLOR)
+	    && GET_VISUAL_DEPTH(v)>=4 && GET_VISUAL_DEPTH(v)<=16) {
+      if (!setup_dithered_color( client, v, b, cmap )) {
 	 return GL_FALSE;
       }
-      v->mesa_visual.indexBits = 0;
+   }
+   else {
+      _mesa_warning(NULL, "XMesa: RGB mode rendering not supported in given visual.\n");
+      return GL_FALSE;
+   }
+   v->mesa_visual.indexBits = 0;
 
-      if (_mesa_getenv("MESA_NO_DITHER")) {
-	 v->dithered_pf = v->undithered_pf;
-      }
+   if (_mesa_getenv("MESA_NO_DITHER")) {
+      v->dithered_pf = v->undithered_pf;
    }
 
 
@@ -1359,6 +1345,10 @@ XMesaVisual XMesaCreateVisual( XMesaDisplay *display,
    }
 #endif
 
+   /* Color-index rendering not supported. */
+   if (!rgb_flag)
+      return NULL;
+
    v = (XMesaVisual) CALLOC_STRUCT(xmesa_visual);
    if (!v) {
       return NULL;
@@ -1428,7 +1418,7 @@ XMesaVisual XMesaCreateVisual( XMesaDisplay *display,
    if (alpha_flag)
       v->mesa_visual.alphaBits = 8;
 
-   (void) initialize_visual_and_buffer( v, NULL, rgb_flag, 0, 0 );
+   (void) initialize_visual_and_buffer( v, NULL, 0, 0 );
 
    {
       const int xclass = v->mesa_visual.visualType;
@@ -1453,7 +1443,7 @@ XMesaVisual XMesaCreateVisual( XMesaDisplay *display,
    }
 
    _mesa_initialize_visual( &v->mesa_visual,
-                            rgb_flag, db_flag, stereo_flag,
+                            GL_TRUE, db_flag, stereo_flag,
                             red_bits, green_bits,
                             blue_bits, alpha_bits,
                             v->mesa_visual.indexBits,
@@ -1655,8 +1645,7 @@ XMesaCreateWindowBuffer(XMesaVisual v, XMesaWindow w)
    if (!b)
       return NULL;
 
-   if (!initialize_visual_and_buffer( v, b, v->mesa_visual.rgbMode,
-                                      (XMesaDrawable) w, cmap )) {
+   if (!initialize_visual_and_buffer( v, b, (XMesaDrawable) w, cmap )) {
       xmesa_free_buffer(b);
       return NULL;
    }
@@ -1686,8 +1675,7 @@ XMesaCreatePixmapBuffer(XMesaVisual v, XMesaPixmap p, XMesaColormap cmap)
    if (!b)
       return NULL;
 
-   if (!initialize_visual_and_buffer(v, b, v->mesa_visual.rgbMode,
-				     (XMesaDrawable) p, cmap)) {
+   if (!initialize_visual_and_buffer(v, b, (XMesaDrawable) p, cmap)) {
       xmesa_free_buffer(b);
       return NULL;
    }
@@ -1747,8 +1735,7 @@ XMesaCreatePixmapTextureBuffer(XMesaVisual v, XMesaPixmap p,
    b->TextureFormat = format;
    b->TextureMipmap = mipmap;
 
-   if (!initialize_visual_and_buffer(v, b, v->mesa_visual.rgbMode,
-				     (XMesaDrawable) p, cmap)) {
+   if (!initialize_visual_and_buffer(v, b, (XMesaDrawable) p, cmap)) {
       xmesa_free_buffer(b);
       return NULL;
    }
@@ -1778,8 +1765,7 @@ XMesaCreatePBuffer(XMesaVisual v, XMesaColormap cmap,
    if (!b)
       return NULL;
 
-   if (!initialize_visual_and_buffer(v, b, v->mesa_visual.rgbMode,
-				     drawable, cmap)) {
+   if (!initialize_visual_and_buffer(v, b, drawable, cmap)) {
       xmesa_free_buffer(b);
       return NULL;
    }
@@ -1874,19 +1860,17 @@ GLboolean XMesaMakeCurrent2( XMesaContext c, XMesaBuffer drawBuffer,
                          &drawBuffer->mesa_buffer,
                          &readBuffer->mesa_buffer);
 
-      if (c->xm_visual->mesa_visual.rgbMode) {
-         /*
-          * Must recompute and set these pixel values because colormap
-          * can be different for different windows.
-          */
-         c->clearpixel = xmesa_color_to_pixel( &c->mesa,
-                                               c->clearcolor[0],
-                                               c->clearcolor[1],
-                                               c->clearcolor[2],
-                                               c->clearcolor[3],
-                                               c->xm_visual->undithered_pf);
-         XMesaSetForeground(c->display, drawBuffer->cleargc, c->clearpixel);
-      }
+      /*
+       * Must recompute and set these pixel values because colormap
+       * can be different for different windows.
+       */
+      c->clearpixel = xmesa_color_to_pixel( &c->mesa,
+					    c->clearcolor[0],
+					    c->clearcolor[1],
+					    c->clearcolor[2],
+					    c->clearcolor[3],
+					    c->xm_visual->undithered_pf);
+      XMesaSetForeground(c->display, drawBuffer->cleargc, c->clearpixel);
 
       /* Solution to Stephane Rehel's problem with glXReleaseBuffersMESA(): */
       drawBuffer->wasCurrent = GL_TRUE;
diff --git a/src/mesa/drivers/x11/xm_buffer.c b/src/mesa/drivers/x11/xm_buffer.c
index 5ffe110484..e47949750a 100644
--- a/src/mesa/drivers/x11/xm_buffer.c
+++ b/src/mesa/drivers/x11/xm_buffer.c
@@ -337,18 +337,10 @@ xmesa_new_renderbuffer(GLcontext *ctx, GLuint name, const GLvisual *visual,
       else
          xrb->Base.AllocStorage = xmesa_alloc_front_storage;
 
-      if (visual->rgbMode) {
-         xrb->Base.InternalFormat = GL_RGBA;
-         xrb->Base.Format = MESA_FORMAT_RGBA8888;
-         xrb->Base._BaseFormat = GL_RGBA;
-         xrb->Base.DataType = GL_UNSIGNED_BYTE;
-      }
-      else {
-         xrb->Base.InternalFormat = GL_COLOR_INDEX;
-         xrb->Base.Format = MESA_FORMAT_CI8;
-         xrb->Base._BaseFormat = GL_COLOR_INDEX;
-         xrb->Base.DataType = GL_UNSIGNED_INT;
-      }
+      xrb->Base.InternalFormat = GL_RGBA;
+      xrb->Base.Format = MESA_FORMAT_RGBA8888;
+      xrb->Base._BaseFormat = GL_RGBA;
+      xrb->Base.DataType = GL_UNSIGNED_BYTE;
       /* only need to set Red/Green/EtcBits fields for user-created RBs */
    }
    return xrb;
-- 
cgit v1.2.3


From 859c98c392c1fa71911edf983dc94a201f2bf0e6 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 17:48:27 -0800
Subject: swrast: Remove color-index rendering support from s_spantemp.h

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/swrast/s_spantemp.h | 16 +---------------
 1 file changed, 1 insertion(+), 15 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/swrast/s_spantemp.h b/src/mesa/swrast/s_spantemp.h
index bab2ca7378..2948a90f6b 100644
--- a/src/mesa/swrast/s_spantemp.h
+++ b/src/mesa/swrast/s_spantemp.h
@@ -31,7 +31,6 @@
  * Define the following macros before including this file:
  *   NAME(BASE)  to generate the function name (i.e. add prefix or suffix)
  *   RB_TYPE  the renderbuffer DataType
- *   CI_MODE  if set, color index mode, else RGBA
  *   SPAN_VARS  to declare any local variables
  *   INIT_PIXEL_PTR(P, X, Y)  to initialize a pointer to a pixel
  *   INC_PIXEL_PTR(P)  to increment a pixel pointer by one pixel
@@ -46,9 +45,7 @@
 #include "main/macros.h"
 
 
-#ifdef CI_MODE
-#define RB_COMPONENTS 1
-#elif !defined(RB_COMPONENTS)
+#if !defined(RB_COMPONENTS)
 #define RB_COMPONENTS 4
 #endif
 
@@ -60,11 +57,7 @@ NAME(get_row)( GLcontext *ctx, struct gl_renderbuffer *rb,
 #ifdef SPAN_VARS
    SPAN_VARS
 #endif
-#ifdef CI_MODE
-   RB_TYPE *dest = (RB_TYPE *) values;
-#else
    RB_TYPE (*dest)[RB_COMPONENTS] = (RB_TYPE (*)[RB_COMPONENTS]) values;
-#endif
    GLuint i;
    INIT_PIXEL_PTR(pixel, x, y);
    for (i = 0; i < count; i++) {
@@ -82,11 +75,7 @@ NAME(get_values)( GLcontext *ctx, struct gl_renderbuffer *rb,
 #ifdef SPAN_VARS
    SPAN_VARS
 #endif
-#ifdef CI_MODE
-   RB_TYPE *dest = (RB_TYPE *) values;
-#else
    RB_TYPE (*dest)[RB_COMPONENTS] = (RB_TYPE (*)[RB_COMPONENTS]) values;
-#endif
    GLuint i;
    for (i = 0; i < count; i++) {
       INIT_PIXEL_PTR(pixel, x[i], y[i]);
@@ -125,7 +114,6 @@ NAME(put_row)( GLcontext *ctx, struct gl_renderbuffer *rb,
 }
 
 
-#if !defined(CI_MODE)
 static void
 NAME(put_row_rgb)( GLcontext *ctx, struct gl_renderbuffer *rb,
                    GLuint count, GLint x, GLint y,
@@ -149,7 +137,6 @@ NAME(put_row_rgb)( GLcontext *ctx, struct gl_renderbuffer *rb,
    }
    (void) rb;
 }
-#endif
 
 
 static void
@@ -226,7 +213,6 @@ NAME(put_mono_values)( GLcontext *ctx, struct gl_renderbuffer *rb,
 #undef NAME
 #undef RB_TYPE
 #undef RB_COMPONENTS
-#undef CI_MODE
 #undef SPAN_VARS
 #undef INIT_PIXEL_PTR
 #undef INC_PIXEL_PTR
-- 
cgit v1.2.3


From e650c07f47ac6f49a4dfcb58290fd049092fb768 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 18:15:40 -0800
Subject: swrast_setup: Remove more color-index rendering support

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/swrast_setup/ss_context.c  |  16 ++--
 src/mesa/swrast_setup/ss_triangle.c |  74 +++---------------
 src/mesa/swrast_setup/ss_tritmp.h   | 144 ++++++++++++++++--------------------
 3 files changed, 79 insertions(+), 155 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/swrast_setup/ss_context.c b/src/mesa/swrast_setup/ss_context.c
index 23d3cb3807..bc1ec58992 100644
--- a/src/mesa/swrast_setup/ss_context.c
+++ b/src/mesa/swrast_setup/ss_context.c
@@ -294,18 +294,12 @@ _swsetup_Translate( GLcontext *ctx, const void *vertex, SWvertex *dest )
       _tnl_get_attr( ctx, vertex, _TNL_ATTRIB_GENERIC0 + i,
                      dest->attrib[FRAG_ATTRIB_VAR0 + i] );
 
-   if (ctx->Visual.rgbMode) {
-      _tnl_get_attr( ctx, vertex, _TNL_ATTRIB_COLOR0,
-                     dest->attrib[FRAG_ATTRIB_COL0] );
-      UNCLAMPED_FLOAT_TO_RGBA_CHAN( dest->color, tmp );
+   _tnl_get_attr( ctx, vertex, _TNL_ATTRIB_COLOR0,
+                  dest->attrib[FRAG_ATTRIB_COL0] );
+   UNCLAMPED_FLOAT_TO_RGBA_CHAN( dest->color, tmp );
 
-      _tnl_get_attr( ctx, vertex, _TNL_ATTRIB_COLOR1,
-                     dest->attrib[FRAG_ATTRIB_COL1]);
-   }
-   else {
-      _tnl_get_attr( ctx, vertex, _TNL_ATTRIB_COLOR_INDEX, tmp );
-      dest->attrib[FRAG_ATTRIB_CI][0] = tmp[0];
-   }
+   _tnl_get_attr( ctx, vertex, _TNL_ATTRIB_COLOR1,
+                  dest->attrib[FRAG_ATTRIB_COL1]);
 
    _tnl_get_attr( ctx, vertex, _TNL_ATTRIB_FOG, tmp );
    dest->attrib[FRAG_ATTRIB_FOGC][0] = tmp[0];
diff --git a/src/mesa/swrast_setup/ss_triangle.c b/src/mesa/swrast_setup/ss_triangle.c
index e15b1348d8..bad0d81946 100644
--- a/src/mesa/swrast_setup/ss_triangle.c
+++ b/src/mesa/swrast_setup/ss_triangle.c
@@ -35,11 +35,10 @@
 #include "ss_triangle.h"
 #include "ss_context.h"
 
-#define SS_RGBA_BIT         0x1
-#define SS_OFFSET_BIT	    0x2
-#define SS_TWOSIDE_BIT	    0x4
-#define SS_UNFILLED_BIT	    0x8
-#define SS_MAX_TRIFUNC      0x10
+#define SS_OFFSET_BIT	    0x1
+#define SS_TWOSIDE_BIT	    0x2
+#define SS_UNFILLED_BIT	    0x4
+#define SS_MAX_TRIFUNC      0x8
 
 static tnl_triangle_func tri_tab[SS_MAX_TRIFUNC];
 static tnl_quad_func     quad_tab[SS_MAX_TRIFUNC];
@@ -134,23 +133,18 @@ static void _swsetup_render_tri(GLcontext *ctx,
    if (ctx->Light.ShadeModel == GL_FLAT) {
       GLchan c[2][4];
       GLfloat s[2][4];
-      GLfloat i[2];
 
       /* save colors/indexes for v0, v1 vertices */
       COPY_CHAN4(c[0], v0->color);
       COPY_CHAN4(c[1], v1->color);
       COPY_4V(s[0], v0->attrib[FRAG_ATTRIB_COL1]);
       COPY_4V(s[1], v1->attrib[FRAG_ATTRIB_COL1]);
-      i[0] = v0->attrib[FRAG_ATTRIB_CI][0];
-      i[1] = v1->attrib[FRAG_ATTRIB_CI][0];
 
       /* copy v2 color/indexes to v0, v1 indexes */
       COPY_CHAN4(v0->color, v2->color);
       COPY_CHAN4(v1->color, v2->color);
       COPY_4V(v0->attrib[FRAG_ATTRIB_COL1], v2->attrib[FRAG_ATTRIB_COL1]);
       COPY_4V(v1->attrib[FRAG_ATTRIB_COL1], v2->attrib[FRAG_ATTRIB_COL1]);
-      v0->attrib[FRAG_ATTRIB_CI][0] = v2->attrib[FRAG_ATTRIB_CI][0];
-      v1->attrib[FRAG_ATTRIB_CI][0] = v2->attrib[FRAG_ATTRIB_CI][0];
 
       render(ctx, ef, e0, e1, e2, v0, v1, v2);
 
@@ -158,8 +152,6 @@ static void _swsetup_render_tri(GLcontext *ctx,
       COPY_CHAN4(v1->color, c[1]);
       COPY_4V(v0->attrib[FRAG_ATTRIB_COL1], s[0]);
       COPY_4V(v1->attrib[FRAG_ATTRIB_COL1], s[1]);
-      v0->attrib[FRAG_ATTRIB_CI][0] = i[0];
-      v1->attrib[FRAG_ATTRIB_CI][0] = i[1];
    }
    else {
       render(ctx, ef, e0, e1, e2, v0, v1, v2);
@@ -171,66 +163,34 @@ static void _swsetup_render_tri(GLcontext *ctx,
 #define SS_IND(a,b) (a = b)
 
 #define IND (0)
-#define TAG(x) x
-#include "ss_tritmp.h"
-
-#define IND (SS_OFFSET_BIT)
-#define TAG(x) x##_offset
-#include "ss_tritmp.h"
-
-#define IND (SS_TWOSIDE_BIT)
-#define TAG(x) x##_twoside
-#include "ss_tritmp.h"
-
-#define IND (SS_OFFSET_BIT|SS_TWOSIDE_BIT)
-#define TAG(x) x##_offset_twoside
-#include "ss_tritmp.h"
-
-#define IND (SS_UNFILLED_BIT)
-#define TAG(x) x##_unfilled
-#include "ss_tritmp.h"
-
-#define IND (SS_OFFSET_BIT|SS_UNFILLED_BIT)
-#define TAG(x) x##_offset_unfilled
-#include "ss_tritmp.h"
-
-#define IND (SS_TWOSIDE_BIT|SS_UNFILLED_BIT)
-#define TAG(x) x##_twoside_unfilled
-#include "ss_tritmp.h"
-
-#define IND (SS_OFFSET_BIT|SS_TWOSIDE_BIT|SS_UNFILLED_BIT)
-#define TAG(x) x##_offset_twoside_unfilled
-#include "ss_tritmp.h"
-
-#define IND (0|SS_RGBA_BIT)
 #define TAG(x) x##_rgba
 #include "ss_tritmp.h"
 
-#define IND (SS_OFFSET_BIT|SS_RGBA_BIT)
+#define IND (SS_OFFSET_BIT)
 #define TAG(x) x##_offset_rgba
 #include "ss_tritmp.h"
 
-#define IND (SS_TWOSIDE_BIT|SS_RGBA_BIT)
+#define IND (SS_TWOSIDE_BIT)
 #define TAG(x) x##_twoside_rgba
 #include "ss_tritmp.h"
 
-#define IND (SS_OFFSET_BIT|SS_TWOSIDE_BIT|SS_RGBA_BIT)
+#define IND (SS_OFFSET_BIT|SS_TWOSIDE_BIT)
 #define TAG(x) x##_offset_twoside_rgba
 #include "ss_tritmp.h"
 
-#define IND (SS_UNFILLED_BIT|SS_RGBA_BIT)
+#define IND (SS_UNFILLED_BIT)
 #define TAG(x) x##_unfilled_rgba
 #include "ss_tritmp.h"
 
-#define IND (SS_OFFSET_BIT|SS_UNFILLED_BIT|SS_RGBA_BIT)
+#define IND (SS_OFFSET_BIT|SS_UNFILLED_BIT)
 #define TAG(x) x##_offset_unfilled_rgba
 #include "ss_tritmp.h"
 
-#define IND (SS_TWOSIDE_BIT|SS_UNFILLED_BIT|SS_RGBA_BIT)
+#define IND (SS_TWOSIDE_BIT|SS_UNFILLED_BIT)
 #define TAG(x) x##_twoside_unfilled_rgba
 #include "ss_tritmp.h"
 
-#define IND (SS_OFFSET_BIT|SS_TWOSIDE_BIT|SS_UNFILLED_BIT|SS_RGBA_BIT)
+#define IND (SS_OFFSET_BIT|SS_TWOSIDE_BIT|SS_UNFILLED_BIT)
 #define TAG(x) x##_offset_twoside_unfilled_rgba
 #include "ss_tritmp.h"
 
@@ -239,15 +199,6 @@ void _swsetup_trifuncs_init( GLcontext *ctx )
 {
    (void) ctx;
 
-   init();
-   init_offset();
-   init_twoside();
-   init_offset_twoside();
-   init_unfilled();
-   init_offset_unfilled();
-   init_twoside_unfilled();
-   init_offset_twoside_unfilled();
-
    init_rgba();
    init_offset_rgba();
    init_twoside_rgba();
@@ -307,9 +258,6 @@ void _swsetup_choose_trifuncs( GLcontext *ctx )
        (ctx->Stencil.Enabled && ctx->Stencil._TestTwoSide))
       ind |= SS_UNFILLED_BIT;
 
-   if (ctx->Visual.rgbMode)
-      ind |= SS_RGBA_BIT;
-
    tnl->Driver.Render.Triangle = tri_tab[ind];
    tnl->Driver.Render.Quad = quad_tab[ind];
    tnl->Driver.Render.Line = swsetup_line;
diff --git a/src/mesa/swrast_setup/ss_tritmp.h b/src/mesa/swrast_setup/ss_tritmp.h
index b9b78e16b0..8e9fa1bd55 100644
--- a/src/mesa/swrast_setup/ss_tritmp.h
+++ b/src/mesa/swrast_setup/ss_tritmp.h
@@ -43,7 +43,6 @@ static void TAG(triangle)(GLcontext *ctx, GLuint e0, GLuint e1, GLuint e2 )
    GLchan saved_color[3][4] = { { 0 } };
    GLfloat saved_col0[3][4] = { { 0 } };
    GLfloat saved_spec[3][4] = { { 0 } };
-   GLfloat saved_index[3] = { 0 };
 
    v[0] = &verts[e0];
    v[1] = &verts[e1];
@@ -66,75 +65,64 @@ static void TAG(triangle)(GLcontext *ctx, GLuint e0, GLuint e1, GLuint e2 )
 
 	 if (facing == 1) {
 	    if (IND & SS_TWOSIDE_BIT) {
-	       if (IND & SS_RGBA_BIT) {
-                  if (VB->BackfaceColorPtr) {
-                     GLfloat (*vbcolor)[4] = VB->BackfaceColorPtr->data;
+               if (VB->BackfaceColorPtr) {
+                  GLfloat (*vbcolor)[4] = VB->BackfaceColorPtr->data;
 
+                  if (swsetup->intColors) {
+                     COPY_CHAN4(saved_color[0], v[0]->color);
+                     COPY_CHAN4(saved_color[1], v[1]->color);
+                     COPY_CHAN4(saved_color[2], v[2]->color);
+                  }
+                  else {
+                     COPY_4V(saved_col0[0], v[0]->attrib[FRAG_ATTRIB_COL0]);
+                     COPY_4V(saved_col0[1], v[1]->attrib[FRAG_ATTRIB_COL0]);
+                     COPY_4V(saved_col0[2], v[2]->attrib[FRAG_ATTRIB_COL0]);
+                  }
+
+                  if (VB->BackfaceColorPtr->stride) {
                      if (swsetup->intColors) {
-                        COPY_CHAN4(saved_color[0], v[0]->color);
-                        COPY_CHAN4(saved_color[1], v[1]->color);
-                        COPY_CHAN4(saved_color[2], v[2]->color);
+                        SS_COLOR(v[0]->color, vbcolor[e0]);
+                        SS_COLOR(v[1]->color, vbcolor[e1]);
+                        SS_COLOR(v[2]->color, vbcolor[e2]);
                      }
                      else {
-                        COPY_4V(saved_col0[0], v[0]->attrib[FRAG_ATTRIB_COL0]);
-                        COPY_4V(saved_col0[1], v[1]->attrib[FRAG_ATTRIB_COL0]);
-                        COPY_4V(saved_col0[2], v[2]->attrib[FRAG_ATTRIB_COL0]);
+                        COPY_4V(v[0]->attrib[FRAG_ATTRIB_COL0], vbcolor[e0]);
+                        COPY_4V(v[1]->attrib[FRAG_ATTRIB_COL0], vbcolor[e1]);
+                        COPY_4V(v[2]->attrib[FRAG_ATTRIB_COL0], vbcolor[e2]);
                      }
-
-                     if (VB->BackfaceColorPtr->stride) {
-                        if (swsetup->intColors) {
-                           SS_COLOR(v[0]->color, vbcolor[e0]);
-                           SS_COLOR(v[1]->color, vbcolor[e1]);
-                           SS_COLOR(v[2]->color, vbcolor[e2]);
-                        }
-                        else {
-                           COPY_4V(v[0]->attrib[FRAG_ATTRIB_COL0], vbcolor[e0]);
-                           COPY_4V(v[1]->attrib[FRAG_ATTRIB_COL0], vbcolor[e1]);
-                           COPY_4V(v[2]->attrib[FRAG_ATTRIB_COL0], vbcolor[e2]);
-                        }
+                  }
+                  else {
+                     /* flat shade */
+                     if (swsetup->intColors) {
+                        SS_COLOR(v[0]->color, vbcolor[0]);
+                        SS_COLOR(v[1]->color, vbcolor[0]);
+                        SS_COLOR(v[2]->color, vbcolor[0]);
                      }
                      else {
-                        /* flat shade */
-                        if (swsetup->intColors) {
-                           SS_COLOR(v[0]->color, vbcolor[0]);
-                           SS_COLOR(v[1]->color, vbcolor[0]);
-                           SS_COLOR(v[2]->color, vbcolor[0]);
-                        }
-                        else {
-                           COPY_4V(v[0]->attrib[FRAG_ATTRIB_COL0], vbcolor[0]);
-                           COPY_4V(v[1]->attrib[FRAG_ATTRIB_COL0], vbcolor[0]);
-                           COPY_4V(v[2]->attrib[FRAG_ATTRIB_COL0], vbcolor[0]);
-                        }
+                        COPY_4V(v[0]->attrib[FRAG_ATTRIB_COL0], vbcolor[0]);
+                        COPY_4V(v[1]->attrib[FRAG_ATTRIB_COL0], vbcolor[0]);
+                        COPY_4V(v[2]->attrib[FRAG_ATTRIB_COL0], vbcolor[0]);
                      }
                   }
+               }
 
-		  if (VB->BackfaceSecondaryColorPtr) {
-		     GLfloat (*vbspec)[4] = VB->BackfaceSecondaryColorPtr->data;
+               if (VB->BackfaceSecondaryColorPtr) {
+		  GLfloat (*vbspec)[4] = VB->BackfaceSecondaryColorPtr->data;
 
-		     COPY_4V(saved_spec[0], v[0]->attrib[FRAG_ATTRIB_COL1]);
-		     COPY_4V(saved_spec[1], v[1]->attrib[FRAG_ATTRIB_COL1]);
-		     COPY_4V(saved_spec[2], v[2]->attrib[FRAG_ATTRIB_COL1]);
+		  COPY_4V(saved_spec[0], v[0]->attrib[FRAG_ATTRIB_COL1]);
+		  COPY_4V(saved_spec[1], v[1]->attrib[FRAG_ATTRIB_COL1]);
+		  COPY_4V(saved_spec[2], v[2]->attrib[FRAG_ATTRIB_COL1]);
 
-		     if (VB->BackfaceSecondaryColorPtr->stride) {
-			SS_SPEC(v[0]->attrib[FRAG_ATTRIB_COL1], vbspec[e0]);
-			SS_SPEC(v[1]->attrib[FRAG_ATTRIB_COL1], vbspec[e1]);
-			SS_SPEC(v[2]->attrib[FRAG_ATTRIB_COL1], vbspec[e2]);
-		     }
-		     else {
-			SS_SPEC(v[0]->attrib[FRAG_ATTRIB_COL1], vbspec[0]);
-			SS_SPEC(v[1]->attrib[FRAG_ATTRIB_COL1], vbspec[0]);
-			SS_SPEC(v[2]->attrib[FRAG_ATTRIB_COL1], vbspec[0]);
-		     }
+		  if (VB->BackfaceSecondaryColorPtr->stride) {
+		    SS_SPEC(v[0]->attrib[FRAG_ATTRIB_COL1], vbspec[e0]);
+		    SS_SPEC(v[1]->attrib[FRAG_ATTRIB_COL1], vbspec[e1]);
+		    SS_SPEC(v[2]->attrib[FRAG_ATTRIB_COL1], vbspec[e2]);
+		  }
+		  else {
+		    SS_SPEC(v[0]->attrib[FRAG_ATTRIB_COL1], vbspec[0]);
+		    SS_SPEC(v[1]->attrib[FRAG_ATTRIB_COL1], vbspec[0]);
+		    SS_SPEC(v[2]->attrib[FRAG_ATTRIB_COL1], vbspec[0]);
 		  }
-	       } else {
-		  GLfloat *vbindex = (GLfloat *)VB->BackfaceIndexPtr->data;
-		  saved_index[0] = v[0]->attrib[FRAG_ATTRIB_CI][0];
-		  saved_index[1] = v[1]->attrib[FRAG_ATTRIB_CI][0];
-		  saved_index[2] = v[2]->attrib[FRAG_ATTRIB_CI][0];
-		  
-		  SS_IND(v[0]->attrib[FRAG_ATTRIB_CI][0], vbindex[e0]);
-		  SS_IND(v[1]->attrib[FRAG_ATTRIB_CI][0], vbindex[e1]);
-		  SS_IND(v[2]->attrib[FRAG_ATTRIB_CI][0], vbindex[e2]);
 	       }
 	    }
 	 }
@@ -199,30 +187,24 @@ static void TAG(triangle)(GLcontext *ctx, GLuint e0, GLuint e1, GLuint e2 )
 
    if (IND & SS_TWOSIDE_BIT) {
       if (facing == 1) {
-	 if (IND & SS_RGBA_BIT) {
-            if (VB->BackfaceColorPtr) {
-               if (swsetup->intColors) {
-                  COPY_CHAN4(v[0]->color, saved_color[0]);
-                  COPY_CHAN4(v[1]->color, saved_color[1]);
-                  COPY_CHAN4(v[2]->color, saved_color[2]);
-               }
-               else {
-                  COPY_4V(v[0]->attrib[FRAG_ATTRIB_COL0], saved_col0[0]);
-                  COPY_4V(v[1]->attrib[FRAG_ATTRIB_COL0], saved_col0[1]);
-                  COPY_4V(v[2]->attrib[FRAG_ATTRIB_COL0], saved_col0[2]);
-               }
-            }
-
-	    if (VB->BackfaceSecondaryColorPtr) {
-	       COPY_4V(v[0]->attrib[FRAG_ATTRIB_COL1], saved_spec[0]);
-	       COPY_4V(v[1]->attrib[FRAG_ATTRIB_COL1], saved_spec[1]);
-	       COPY_4V(v[2]->attrib[FRAG_ATTRIB_COL1], saved_spec[2]);
-	    }
-	 } else {
-	    v[0]->attrib[FRAG_ATTRIB_CI][0] = saved_index[0];
-	    v[1]->attrib[FRAG_ATTRIB_CI][0] = saved_index[1];
-	    v[2]->attrib[FRAG_ATTRIB_CI][0] = saved_index[2];
-	 }
+	if (VB->BackfaceColorPtr) {
+	  if (swsetup->intColors) {
+	    COPY_CHAN4(v[0]->color, saved_color[0]);
+	    COPY_CHAN4(v[1]->color, saved_color[1]);
+	    COPY_CHAN4(v[2]->color, saved_color[2]);
+	  }
+	  else {
+	    COPY_4V(v[0]->attrib[FRAG_ATTRIB_COL0], saved_col0[0]);
+	    COPY_4V(v[1]->attrib[FRAG_ATTRIB_COL0], saved_col0[1]);
+	    COPY_4V(v[2]->attrib[FRAG_ATTRIB_COL0], saved_col0[2]);
+	  }
+	}
+
+	if (VB->BackfaceSecondaryColorPtr) {
+	  COPY_4V(v[0]->attrib[FRAG_ATTRIB_COL1], saved_spec[0]);
+	  COPY_4V(v[1]->attrib[FRAG_ATTRIB_COL1], saved_spec[1]);
+	  COPY_4V(v[2]->attrib[FRAG_ATTRIB_COL1], saved_spec[2]);
+	}
       }
    }
 }
-- 
cgit v1.2.3


From 5cf2c5851bcd29c2d53bb04ab692b4b156f5a74d Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 18:23:19 -0800
Subject: DRI: Remove support for color-index visuals

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/drivers/dri/common/utils.c | 15 +++++----------
 1 file changed, 5 insertions(+), 10 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/common/utils.c b/src/mesa/drivers/dri/common/utils.c
index b6f291098d..9a21f2c9f2 100644
--- a/src/mesa/drivers/dri/common/utils.c
+++ b/src/mesa/drivers/dri/common/utils.c
@@ -625,11 +625,10 @@ driCreateConfigs(GLenum fb_format, GLenum fb_type,
 		    modes->bindToTextureRgb = GL_TRUE;
 		    modes->bindToTextureRgba = GL_TRUE;
 		    modes->bindToMipmapTexture = GL_FALSE;
-		    modes->bindToTextureTargets = modes->rgbMode ?
-		    	__DRI_ATTRIB_TEXTURE_1D_BIT |
-		    	__DRI_ATTRIB_TEXTURE_2D_BIT |
-		    	__DRI_ATTRIB_TEXTURE_RECTANGLE_BIT :
-		    	0;
+		    modes->bindToTextureTargets =
+			__DRI_ATTRIB_TEXTURE_1D_BIT |
+			__DRI_ATTRIB_TEXTURE_2D_BIT |
+			__DRI_ATTRIB_TEXTURE_RECTANGLE_BIT;
 		}
 	    }
 	}
@@ -726,11 +725,7 @@ driGetConfigAttribIndex(const __DRIconfig *config,
 {
     switch (attribMap[index].attrib) {
     case __DRI_ATTRIB_RENDER_TYPE:
-	if (config->modes.rgbMode)
-	    *value = __DRI_ATTRIB_RGBA_BIT;
-	else
-	    *value = __DRI_ATTRIB_COLOR_INDEX_BIT;
-	break;
+	*value = __DRI_ATTRIB_RGBA_BIT;
     case __DRI_ATTRIB_CONFIG_CAVEAT:
 	if (config->modes.visualRating == GLX_NON_CONFORMANT_CONFIG)
 	    *value = __DRI_ATTRIB_NON_CONFORMANT_CONFIG;
-- 
cgit v1.2.3


From a9c1b3caf67f035df83c6a4e38709cfa395f4cc6 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 18:24:07 -0800
Subject: tnl: Remove color-index TNL support

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/swrast_setup/ss_context.c |   5 --
 src/mesa/tnl/t_context.c           |  33 +++----
 src/mesa/tnl/t_rasterpos.c         |  52 ++++-------
 src/mesa/tnl/t_vb_light.c          |  37 +++-----
 src/mesa/tnl/t_vb_lighttmp.h       | 173 -------------------------------------
 5 files changed, 39 insertions(+), 261 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/swrast_setup/ss_context.c b/src/mesa/swrast_setup/ss_context.c
index bc1ec58992..ebd1574c43 100644
--- a/src/mesa/swrast_setup/ss_context.c
+++ b/src/mesa/swrast_setup/ss_context.c
@@ -141,11 +141,6 @@ setup_vertex_format(GLcontext *ctx)
          EMIT_ATTR( _TNL_ATTRIB_COLOR1, EMIT_4F, attrib[FRAG_ATTRIB_COL1]);
       }
 
-      if (RENDERINPUTS_TEST( index_bitset, _TNL_ATTRIB_COLOR_INDEX )) {
-         EMIT_ATTR( _TNL_ATTRIB_COLOR_INDEX, EMIT_1F,
-                    attrib[FRAG_ATTRIB_CI][0] );
-      }
-
       if (RENDERINPUTS_TEST( index_bitset, _TNL_ATTRIB_FOG )) {
          const GLint emit = ctx->FragmentProgram._Current ? EMIT_4F : EMIT_1F;
          EMIT_ATTR( _TNL_ATTRIB_FOG, emit, attrib[FRAG_ATTRIB_FOGC]);
diff --git a/src/mesa/tnl/t_context.c b/src/mesa/tnl/t_context.c
index 5a14e595a0..f27c8ad9d6 100644
--- a/src/mesa/tnl/t_context.c
+++ b/src/mesa/tnl/t_context.c
@@ -107,6 +107,7 @@ _tnl_InvalidateState( GLcontext *ctx, GLuint new_state )
    TNLcontext *tnl = TNL_CONTEXT(ctx);
    const struct gl_vertex_program *vp = ctx->VertexProgram._Current;
    const struct gl_fragment_program *fp = ctx->FragmentProgram._Current;
+   GLuint i;
 
    if (new_state & (_NEW_HINT | _NEW_PROGRAM)) {
       ASSERT(tnl->AllowVertexFog || tnl->AllowPixelFog);
@@ -119,29 +120,21 @@ _tnl_InvalidateState( GLcontext *ctx, GLuint new_state )
    /* Calculate tnl->render_inputs.  This bitmask indicates which vertex
     * attributes need to be emitted to the rasterizer.
     */
-   if (ctx->Visual.rgbMode) {
-      GLuint i;
-
-      RENDERINPUTS_ZERO( tnl->render_inputs_bitset );
-      RENDERINPUTS_SET( tnl->render_inputs_bitset, _TNL_ATTRIB_POS );
+   RENDERINPUTS_ZERO( tnl->render_inputs_bitset );
+   RENDERINPUTS_SET( tnl->render_inputs_bitset, _TNL_ATTRIB_POS );
 
-      if (!fp || (fp->Base.InputsRead & FRAG_BIT_COL0)) {
-         RENDERINPUTS_SET( tnl->render_inputs_bitset, _TNL_ATTRIB_COLOR0 );
-      }
+   if (!fp || (fp->Base.InputsRead & FRAG_BIT_COL0)) {
+     RENDERINPUTS_SET( tnl->render_inputs_bitset, _TNL_ATTRIB_COLOR0 );
+   }
 
-      if (NEED_SECONDARY_COLOR(ctx))
-         RENDERINPUTS_SET( tnl->render_inputs_bitset, _TNL_ATTRIB_COLOR1 );
+   if (NEED_SECONDARY_COLOR(ctx))
+     RENDERINPUTS_SET( tnl->render_inputs_bitset, _TNL_ATTRIB_COLOR1 );
 
-      for (i = 0; i < ctx->Const.MaxTextureCoordUnits; i++) {
-         if (ctx->Texture._EnabledCoordUnits & (1 << i) ||
-             (fp && fp->Base.InputsRead & FRAG_BIT_TEX(i))) {
-            RENDERINPUTS_SET( tnl->render_inputs_bitset, _TNL_ATTRIB_TEX(i) );
-         }
-      }
-   }
-   else {
-      RENDERINPUTS_SET( tnl->render_inputs_bitset, _TNL_ATTRIB_POS );
-      RENDERINPUTS_SET( tnl->render_inputs_bitset, _TNL_ATTRIB_COLOR_INDEX );
+   for (i = 0; i < ctx->Const.MaxTextureCoordUnits; i++) {
+     if (ctx->Texture._EnabledCoordUnits & (1 << i) ||
+	 (fp && fp->Base.InputsRead & FRAG_BIT_TEX(i))) {
+       RENDERINPUTS_SET( tnl->render_inputs_bitset, _TNL_ATTRIB_TEX(i) );
+     }
    }
 
    if (ctx->Fog.Enabled) {
diff --git a/src/mesa/tnl/t_rasterpos.c b/src/mesa/tnl/t_rasterpos.c
index 13b84a7d77..3596d162b2 100644
--- a/src/mesa/tnl/t_rasterpos.c
+++ b/src/mesa/tnl/t_rasterpos.c
@@ -119,8 +119,7 @@ shade_rastpos(GLcontext *ctx,
               const GLfloat vertex[4],
               const GLfloat normal[3],
               GLfloat Rcolor[4],
-              GLfloat Rspec[4],
-              GLfloat *Rindex)
+              GLfloat Rspec[4])
 {
    /*const*/ GLfloat (*base)[3] = ctx->Light._BaseColor;
    const struct gl_light *light;
@@ -244,28 +243,14 @@ shade_rastpos(GLcontext *ctx,
       ACC_SCALE_SCALAR_3V( specularColor, attenuation, specularContrib );
    }
 
-   if (ctx->Visual.rgbMode) {
-      Rcolor[0] = CLAMP(diffuseColor[0], 0.0F, 1.0F);
-      Rcolor[1] = CLAMP(diffuseColor[1], 0.0F, 1.0F);
-      Rcolor[2] = CLAMP(diffuseColor[2], 0.0F, 1.0F);
-      Rcolor[3] = CLAMP(diffuseColor[3], 0.0F, 1.0F);
-      Rspec[0] = CLAMP(specularColor[0], 0.0F, 1.0F);
-      Rspec[1] = CLAMP(specularColor[1], 0.0F, 1.0F);
-      Rspec[2] = CLAMP(specularColor[2], 0.0F, 1.0F);
-      Rspec[3] = CLAMP(specularColor[3], 0.0F, 1.0F);
-   }
-   else {
-      GLfloat *ind = ctx->Light.Material.Attrib[MAT_ATTRIB_FRONT_INDEXES];
-      GLfloat d_a = ind[MAT_INDEX_DIFFUSE] - ind[MAT_INDEX_AMBIENT];
-      GLfloat s_a = ind[MAT_INDEX_SPECULAR] - ind[MAT_INDEX_AMBIENT];
-      GLfloat i = (ind[MAT_INDEX_AMBIENT]
-		   + diffuseCI * (1.0F-specularCI) * d_a
-		   + specularCI * s_a);
-      if (i > ind[MAT_INDEX_SPECULAR]) {
-	 i = ind[MAT_INDEX_SPECULAR];
-      }
-      *Rindex = i;
-   }
+   Rcolor[0] = CLAMP(diffuseColor[0], 0.0F, 1.0F);
+   Rcolor[1] = CLAMP(diffuseColor[1], 0.0F, 1.0F);
+   Rcolor[2] = CLAMP(diffuseColor[2], 0.0F, 1.0F);
+   Rcolor[3] = CLAMP(diffuseColor[3], 0.0F, 1.0F);
+   Rspec[0] = CLAMP(specularColor[0], 0.0F, 1.0F);
+   Rspec[1] = CLAMP(specularColor[1], 0.0F, 1.0F);
+   Rspec[2] = CLAMP(specularColor[2], 0.0F, 1.0F);
+   Rspec[3] = CLAMP(specularColor[3], 0.0F, 1.0F);
 }
 
 
@@ -469,21 +454,14 @@ _tnl_RasterPos(GLcontext *ctx, const GLfloat vObj[4])
          /* lighting */
          shade_rastpos( ctx, vObj, norm,
                         ctx->Current.RasterColor,
-                        ctx->Current.RasterSecondaryColor,
-                        &ctx->Current.RasterIndex );
+                        ctx->Current.RasterSecondaryColor );
       }
       else {
-         /* use current color or index */
-         if (ctx->Visual.rgbMode) {
-            COPY_4FV(ctx->Current.RasterColor,
-                     ctx->Current.Attrib[VERT_ATTRIB_COLOR0]);
-            COPY_4FV(ctx->Current.RasterSecondaryColor,
-                     ctx->Current.Attrib[VERT_ATTRIB_COLOR1]);
-         }
-         else {
-            ctx->Current.RasterIndex
-               = ctx->Current.Attrib[VERT_ATTRIB_COLOR_INDEX][0];
-         }
+         /* use current color */
+	 COPY_4FV(ctx->Current.RasterColor,
+		  ctx->Current.Attrib[VERT_ATTRIB_COLOR0]);
+	 COPY_4FV(ctx->Current.RasterSecondaryColor,
+		  ctx->Current.Attrib[VERT_ATTRIB_COLOR1]);
       }
 
       /* texture coords */
diff --git a/src/mesa/tnl/t_vb_light.c b/src/mesa/tnl/t_vb_light.c
index 8a0fe63fd8..e7309aaac6 100644
--- a/src/mesa/tnl/t_vb_light.c
+++ b/src/mesa/tnl/t_vb_light.c
@@ -64,7 +64,6 @@ struct light_stage_data {
    GLvector4f Input;
    GLvector4f LitColor[2];
    GLvector4f LitSecondary[2];
-   GLvector4f LitIndex[2];
    light_func *light_func_tab;
 
    struct material_cursor mat[MAT_ATTRIB_MAX];
@@ -161,7 +160,6 @@ static light_func _tnl_light_tab[MAX_LIGHT_FUNC];
 static light_func _tnl_light_fast_tab[MAX_LIGHT_FUNC];
 static light_func _tnl_light_fast_single_tab[MAX_LIGHT_FUNC];
 static light_func _tnl_light_spec_tab[MAX_LIGHT_FUNC];
-static light_func _tnl_light_ci_tab[MAX_LIGHT_FUNC];
 
 #define TAG(x)           x
 #define IDX              (0)
@@ -260,22 +258,18 @@ static void validate_lighting( GLcontext *ctx,
    if (!ctx->Light.Enabled || ctx->VertexProgram._Current)
       return;
 
-   if (ctx->Visual.rgbMode) {
-      if (ctx->Light._NeedVertices) {
-	 if (ctx->Light.Model.ColorControl == GL_SEPARATE_SPECULAR_COLOR)
-	    tab = _tnl_light_spec_tab;
-	 else
-	    tab = _tnl_light_tab;
-      }
-      else {
-	 if (ctx->Light.EnabledList.next == ctx->Light.EnabledList.prev)
-	    tab = _tnl_light_fast_single_tab;
-	 else
-	    tab = _tnl_light_fast_tab;
-      }
+   if (ctx->Light._NeedVertices) {
+      if (ctx->Light.Model.ColorControl == GL_SEPARATE_SPECULAR_COLOR)
+	 tab = _tnl_light_spec_tab;
+      else
+	 tab = _tnl_light_tab;
+   }
+   else {
+      if (ctx->Light.EnabledList.next == ctx->Light.EnabledList.prev)
+	 tab = _tnl_light_fast_single_tab;
+      else
+	 tab = _tnl_light_fast_tab;
    }
-   else
-      tab = _tnl_light_ci_tab;
 
 
    LIGHT_STAGE_DATA(stage)->light_func_tab = tab;
@@ -311,19 +305,12 @@ static GLboolean init_lighting( GLcontext *ctx,
    _mesa_vector4f_alloc( &store->LitColor[1], 0, size, 32 );
    _mesa_vector4f_alloc( &store->LitSecondary[0], 0, size, 32 );
    _mesa_vector4f_alloc( &store->LitSecondary[1], 0, size, 32 );
-   _mesa_vector4f_alloc( &store->LitIndex[0], 0, size, 32 );
-   _mesa_vector4f_alloc( &store->LitIndex[1], 0, size, 32 );
 
    store->LitColor[0].size = 4;
    store->LitColor[1].size = 4;
    store->LitSecondary[0].size = 3;
    store->LitSecondary[1].size = 3;
 
-   store->LitIndex[0].size = 1;
-   store->LitIndex[0].stride = sizeof(GLfloat);
-   store->LitIndex[1].size = 1;
-   store->LitIndex[1].stride = sizeof(GLfloat);
-
    return GL_TRUE;
 }
 
@@ -340,8 +327,6 @@ static void dtr( struct tnl_pipeline_stage *stage )
       _mesa_vector4f_free( &store->LitColor[1] );
       _mesa_vector4f_free( &store->LitSecondary[0] );
       _mesa_vector4f_free( &store->LitSecondary[1] );
-      _mesa_vector4f_free( &store->LitIndex[0] );
-      _mesa_vector4f_free( &store->LitIndex[1] );
       FREE( store );
       stage->privatePtr = NULL;
    }
diff --git a/src/mesa/tnl/t_vb_lighttmp.h b/src/mesa/tnl/t_vb_lighttmp.h
index 4ebef2356f..0a98c6b02a 100644
--- a/src/mesa/tnl/t_vb_lighttmp.h
+++ b/src/mesa/tnl/t_vb_lighttmp.h
@@ -637,185 +637,12 @@ static void TAG(light_fast_rgba)( GLcontext *ctx,
 
 
 
-
-/*
- * Use current lighting/material settings to compute the color indexes
- * for an array of vertices.
- * Input:  n - number of vertices to light
- *         side - 0=use front material, 1=use back material
- *         vertex - array of [n] vertex position in eye coordinates
- *         normal - array of [n] surface normal vector
- * Output:  indexResult - resulting array of [n] color indexes
- */
-static void TAG(light_ci)( GLcontext *ctx,
-			   struct vertex_buffer *VB,
-			   struct tnl_pipeline_stage *stage,
-			   GLvector4f *input )
-{
-   struct light_stage_data *store = LIGHT_STAGE_DATA(stage);
-   GLuint j;
-   const GLuint vstride = input->stride;
-   const GLfloat *vertex = (GLfloat *) input->data;
-   const GLuint nstride = VB->AttribPtr[_TNL_ATTRIB_NORMAL]->stride;
-   const GLfloat *normal = (GLfloat *)VB->AttribPtr[_TNL_ATTRIB_NORMAL]->data;
-   GLfloat *indexResult[2];
-   const GLuint nr = VB->Count;
-
-#ifdef TRACE
-   fprintf(stderr, "%s\n", __FUNCTION__ );
-#endif
-
-   VB->AttribPtr[_TNL_ATTRIB_COLOR_INDEX] = &store->LitIndex[0];
-#if IDX & LIGHT_TWOSIDE
-   VB->BackfaceIndexPtr = &store->LitIndex[1];
-#endif
-
-   indexResult[0] = (GLfloat *)VB->AttribPtr[_TNL_ATTRIB_COLOR_INDEX]->data;
-#if IDX & LIGHT_TWOSIDE
-   indexResult[1] = (GLfloat *)VB->BackfaceIndexPtr->data;
-#endif
-
-   /* loop over vertices */
-   for (j=0; j<nr; j++,STRIDE_F(vertex,vstride),STRIDE_F(normal, nstride)) {
-      GLfloat diffuse[2], specular[2];
-      GLuint side = 0;
-      struct gl_light *light;
-
-#if IDX & LIGHT_MATERIAL
-      update_materials( ctx, store );
-#endif
-
-      diffuse[0] = specular[0] = 0.0F;
-
-#if IDX & LIGHT_TWOSIDE
-	 diffuse[1] = specular[1] = 0.0F;
-#endif
-
-      /* Accumulate diffuse and specular from each light source */
-      foreach (light, &ctx->Light.EnabledList) {
-
-	 GLfloat attenuation = 1.0F;
-	 GLfloat VP[3];  /* unit vector from vertex to light */
-	 GLfloat n_dot_VP;  /* dot product of l and n */
-	 GLfloat *h, n_dot_h, correction = 1.0;
-
-	 /* compute l and attenuation */
-	 if (!(light->_Flags & LIGHT_POSITIONAL)) {
-	    /* directional light */
-	    COPY_3V(VP, light->_VP_inf_norm);
-	 }
-	 else {
-	    GLfloat d;     /* distance from vertex to light */
-
-	    SUB_3V(VP, light->_Position, vertex);
-
-	    d = (GLfloat) LEN_3FV( VP );
-	    if ( d > 1e-6) {
-	       GLfloat invd = 1.0F / d;
-	       SELF_SCALE_SCALAR_3V(VP, invd);
-	    }
-
-	    attenuation = 1.0F / (light->ConstantAttenuation + d *
-				  (light->LinearAttenuation + d *
-				   light->QuadraticAttenuation));
-
-	    /* spotlight attenuation */
-	    if (light->_Flags & LIGHT_SPOT) {
-	       GLfloat PV_dot_dir = - DOT3(VP, light->_NormSpotDirection);
-	       if (PV_dot_dir < light->_CosCutoff) {
-		  continue; /* this light makes no contribution */
-	       }
-	       else {
-		  GLdouble x = PV_dot_dir * (EXP_TABLE_SIZE-1);
-		  GLint k = (GLint) x;
-		  GLfloat spot = (GLfloat) (light->_SpotExpTable[k][0]
-				  + (x-k)*light->_SpotExpTable[k][1]);
-		  attenuation *= spot;
-	       }
-	    }
-	 }
-
-	 if (attenuation < 1e-3)
-	    continue;		/* this light makes no contribution */
-
-	 n_dot_VP = DOT3( normal, VP );
-
-	 /* which side are we lighting? */
-	 if (n_dot_VP < 0.0F) {
-#if IDX & LIGHT_TWOSIDE
-	    side = 1;
-	    correction = -1;
-	    n_dot_VP = -n_dot_VP;
-#else
-            continue;
-#endif
-	 }
-
-	 /* accumulate diffuse term */
-	 diffuse[side] += n_dot_VP * light->_dli * attenuation;
-
-	 /* specular term */
-	 if (ctx->Light.Model.LocalViewer) {
-	    GLfloat v[3];
-	    COPY_3V(v, vertex);
-	    NORMALIZE_3FV(v);
-	    SUB_3V(VP, VP, v);                /* h = VP + VPe */
-	    h = VP;
-	    NORMALIZE_3FV(h);
-	 }
-	 else if (light->_Flags & LIGHT_POSITIONAL) {
-	    h = VP;
-            /* Strangely, disabling this addition fixes a conformance
-             * problem.  If this code is enabled, l_sed.c fails.
-             */
-	    /*ACC_3V(h, ctx->_EyeZDir);*/
-	    NORMALIZE_3FV(h);
-	 }
-         else {
-	    h = light->_h_inf_norm;
-	 }
-
-	 n_dot_h = correction * DOT3(normal, h);
-	 if (n_dot_h > 0.0F) {
-	    GLfloat spec_coef;
-	    struct gl_shine_tab *tab = ctx->_ShineTable[side];
-	    GET_SHINE_TAB_ENTRY( tab, n_dot_h, spec_coef);
-	    specular[side] += spec_coef * light->_sli * attenuation;
-	 }
-      } /*loop over lights*/
-
-      /* Now compute final color index */
-      for (side = 0 ; side < NR_SIDES ; side++) {
-	 const GLfloat *ind = ctx->Light.Material.Attrib[MAT_ATTRIB_FRONT_INDEXES + side];
-	 GLfloat index;
-
-	 if (specular[side] > 1.0F) {
-	    index = ind[MAT_INDEX_SPECULAR];
-	 }
-	 else {
-	    GLfloat d_a = ind[MAT_INDEX_DIFFUSE] - ind[MAT_INDEX_AMBIENT];
-	    GLfloat s_a = ind[MAT_INDEX_SPECULAR] - ind[MAT_INDEX_AMBIENT];
-	    index = (ind[MAT_INDEX_AMBIENT]
-		     + diffuse[side] * (1.0F-specular[side]) * d_a
-		     + specular[side] * s_a);
-	    if (index > ind[MAT_INDEX_SPECULAR]) {
-	       index = ind[MAT_INDEX_SPECULAR];
-	    }
-	 }
-	 indexResult[side][j] = index;
-      }
-   } /*for vertex*/
-}
-
-
-
 static void TAG(init_light_tab)( void )
 {
    _tnl_light_tab[IDX] = TAG(light_rgba);
    _tnl_light_fast_tab[IDX] = TAG(light_fast_rgba);
    _tnl_light_fast_single_tab[IDX] = TAG(light_fast_rgba_single);
    _tnl_light_spec_tab[IDX] = TAG(light_rgba_spec);
-   _tnl_light_ci_tab[IDX] = TAG(light_ci);
 }
 
 
-- 
cgit v1.2.3


From fcf438e9e03f6e75bca4a49ad372fe7c4b1abbf8 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 18:49:33 -0800
Subject: mesa: Remove support for creating color-index visuals

Remove the rgbMode and indexBits parameters from _mesa_create_visual
and _mesa_initialize_visual.  These values are now hardcoded to
GL_TRUE and 0.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/gallium/state_trackers/glx/xlib/xm_api.c   |  3 +--
 src/mesa/drivers/beos/GLView.cpp               |  4 +---
 src/mesa/drivers/fbdev/glfbdev.c               |  6 +++---
 src/mesa/drivers/glslcompiler/glslcompiler.c   |  4 ++--
 src/mesa/drivers/osmesa/osmesa.c               |  4 +---
 src/mesa/drivers/windows/gdi/wmesa.c           |  4 +---
 src/mesa/drivers/windows/gldirect/dglcontext.c |  2 --
 src/mesa/drivers/x11/xm_api.c                  |  3 +--
 src/mesa/main/context.c                        | 15 +++++----------
 src/mesa/main/context.h                        |  6 +-----
 10 files changed, 16 insertions(+), 35 deletions(-)

(limited to 'src/mesa')

diff --git a/src/gallium/state_trackers/glx/xlib/xm_api.c b/src/gallium/state_trackers/glx/xlib/xm_api.c
index 68518b19b9..217bdeff75 100644
--- a/src/gallium/state_trackers/glx/xlib/xm_api.c
+++ b/src/gallium/state_trackers/glx/xlib/xm_api.c
@@ -746,10 +746,9 @@ XMesaVisual XMesaCreateVisual( Display *display,
    }
 
    _mesa_initialize_visual( &v->mesa_visual,
-                            rgb_flag, db_flag, stereo_flag,
+                            db_flag, stereo_flag,
                             red_bits, green_bits,
                             blue_bits, alpha_bits,
-                            v->mesa_visual.indexBits,
                             depth_size,
                             stencil_size,
                             accum_red_size, accum_green_size,
diff --git a/src/mesa/drivers/beos/GLView.cpp b/src/mesa/drivers/beos/GLView.cpp
index 9e4a7ebe56..a029f6b200 100644
--- a/src/mesa/drivers/beos/GLView.cpp
+++ b/src/mesa/drivers/beos/GLView.cpp
@@ -297,11 +297,9 @@ BGLView::BGLView(BRect rect, char *name,
    MesaDriver * md = new MesaDriver();
 
    // examine option flags and create gl_context struct
-   GLvisual * visual = _mesa_create_visual( rgbFlag,
-                                            dblFlag,
+   GLvisual * visual = _mesa_create_visual( dblFlag,
                                             stereoFlag,
                                             red, green, blue, alpha,
-                                            index,
                                             depth,
                                             stencil,
                                             accum, accum, accum, accum,
diff --git a/src/mesa/drivers/fbdev/glfbdev.c b/src/mesa/drivers/fbdev/glfbdev.c
index e6ece69a64..0ea2796eaa 100644
--- a/src/mesa/drivers/fbdev/glfbdev.c
+++ b/src/mesa/drivers/fbdev/glfbdev.c
@@ -327,7 +327,7 @@ glFBDevCreateVisual( const struct fb_fix_screeninfo *fixInfo,
    const int *attrib;
    GLboolean dbFlag = GL_FALSE, stereoFlag = GL_FALSE;
    GLint redBits = 0, greenBits = 0, blueBits = 0, alphaBits = 0;
-   GLint indexBits = 0, depthBits = 0, stencilBits = 0;
+   GLint depthBits = 0, stencilBits = 0;
    GLint accumRedBits = 0, accumGreenBits = 0;
    GLint accumBlueBits = 0, accumAlphaBits = 0;
    GLint numSamples = 0;
@@ -414,9 +414,9 @@ glFBDevCreateVisual( const struct fb_fix_screeninfo *fixInfo,
       }
    }
 
-   if (!_mesa_initialize_visual(&vis->glvisual, GL_TRUE, dbFlag, stereoFlag,
+   if (!_mesa_initialize_visual(&vis->glvisual, dbFlag, stereoFlag,
                                 redBits, greenBits, blueBits, alphaBits,
-                                indexBits, depthBits, stencilBits,
+                                depthBits, stencilBits,
                                 accumRedBits, accumGreenBits,
                                 accumBlueBits, accumAlphaBits,
                                 numSamples)) {
diff --git a/src/mesa/drivers/glslcompiler/glslcompiler.c b/src/mesa/drivers/glslcompiler/glslcompiler.c
index 448029dace..66035a4a43 100644
--- a/src/mesa/drivers/glslcompiler/glslcompiler.c
+++ b/src/mesa/drivers/glslcompiler/glslcompiler.c
@@ -113,9 +113,9 @@ CreateContext(void)
    GLcontext *ctx;
    CompilerContext *cc;
 
-   vis = _mesa_create_visual(GL_TRUE, GL_FALSE, GL_FALSE, /* RGB */
+   vis = _mesa_create_visual(GL_FALSE, GL_FALSE, /* RGB */
                              8, 8, 8, 8,  /* color */
-                             0, 0, 0,  /* z, stencil */
+                             0, 0,  /* z, stencil */
                              0, 0, 0, 0, 1);  /* accum */
    buf = _mesa_create_framebuffer(vis);
 
diff --git a/src/mesa/drivers/osmesa/osmesa.c b/src/mesa/drivers/osmesa/osmesa.c
index bb6dbdf1c0..e20507ae92 100644
--- a/src/mesa/drivers/osmesa/osmesa.c
+++ b/src/mesa/drivers/osmesa/osmesa.c
@@ -1116,14 +1116,12 @@ OSMesaCreateContextExt( GLenum format, GLint depthBits, GLint stencilBits,
 
    osmesa = (OSMesaContext) CALLOC_STRUCT(osmesa_context);
    if (osmesa) {
-      osmesa->gl_visual = _mesa_create_visual( GL_TRUE,     /* rgbMode */
-                                               GL_FALSE,    /* double buffer */
+      osmesa->gl_visual = _mesa_create_visual( GL_FALSE,    /* double buffer */
                                                GL_FALSE,    /* stereo */
                                                redBits,
                                                greenBits,
                                                blueBits,
                                                alphaBits,
-                                               0,
                                                depthBits,
                                                stencilBits,
                                                accumBits,
diff --git a/src/mesa/drivers/windows/gdi/wmesa.c b/src/mesa/drivers/windows/gdi/wmesa.c
index 2fdcb387be..91ddc3615a 100644
--- a/src/mesa/drivers/windows/gdi/wmesa.c
+++ b/src/mesa/drivers/windows/gdi/wmesa.c
@@ -1461,12 +1461,10 @@ WMesaContext WMesaCreateContext(HDC hDC,
 	break;
     }
     /* Create visual based on flags */
-    visual = _mesa_create_visual(rgb_flag,
-                                 db_flag,    /* db_flag */
+    visual = _mesa_create_visual(db_flag,    /* db_flag */
                                  GL_FALSE,   /* stereo */
                                  red_bits, green_bits, blue_bits, /* color RGB */
                                  alpha_flag ? alpha_bits : 0, /* color A */
-                                 0,          /* index bits */
                                  DEFAULT_SOFTWARE_DEPTH_BITS, /* depth_bits */
                                  8,          /* stencil_bits */
                                  16,16,16,   /* accum RGB */
diff --git a/src/mesa/drivers/windows/gldirect/dglcontext.c b/src/mesa/drivers/windows/gldirect/dglcontext.c
index e9c23d1ccb..a420b36ffb 100644
--- a/src/mesa/drivers/windows/gldirect/dglcontext.c
+++ b/src/mesa/drivers/windows/gldirect/dglcontext.c
@@ -1377,14 +1377,12 @@ SkipPrimaryCreate:
 
 #ifdef _USE_GLD3_WGL
 	lpCtx->glVis = _mesa_create_visual(
-		GL_TRUE,		// RGB mode
 		bDouble,    /* double buffer */
 		GL_FALSE,			// stereo
 		lpPFD->cRedBits,
 		lpPFD->cGreenBits,
 		lpPFD->cBlueBits,
 		dwAlphaBits,
-		0,				// index bits
 		dwDepthBits,
 		dwStencilBits,
 		lpPFD->cAccumRedBits,	// accum bits
diff --git a/src/mesa/drivers/x11/xm_api.c b/src/mesa/drivers/x11/xm_api.c
index c59df55166..a1723fa37b 100644
--- a/src/mesa/drivers/x11/xm_api.c
+++ b/src/mesa/drivers/x11/xm_api.c
@@ -1443,10 +1443,9 @@ XMesaVisual XMesaCreateVisual( XMesaDisplay *display,
    }
 
    _mesa_initialize_visual( &v->mesa_visual,
-                            GL_TRUE, db_flag, stereo_flag,
+                            db_flag, stereo_flag,
                             red_bits, green_bits,
                             blue_bits, alpha_bits,
-                            v->mesa_visual.indexBits,
                             depth_size,
                             stencil_size,
                             accum_red_size, accum_green_size,
diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
index 4ecbb5ecf6..b827d54176 100644
--- a/src/mesa/main/context.c
+++ b/src/mesa/main/context.c
@@ -184,7 +184,6 @@ _mesa_notifySwapBuffers(__GLcontext *ctx)
  * Allocates a GLvisual structure and initializes it via
  * _mesa_initialize_visual().
  * 
- * \param rgbFlag GL_TRUE for RGB(A) mode, GL_FALSE for Color Index mode.
  * \param dbFlag double buffering
  * \param stereoFlag stereo buffer
  * \param depthBits requested bits per depth buffer value. Any value in [0, 32]
@@ -206,14 +205,12 @@ _mesa_notifySwapBuffers(__GLcontext *ctx)
  * \note Need to add params for level and numAuxBuffers (at least)
  */
 GLvisual *
-_mesa_create_visual( GLboolean rgbFlag,
-                     GLboolean dbFlag,
+_mesa_create_visual( GLboolean dbFlag,
                      GLboolean stereoFlag,
                      GLint redBits,
                      GLint greenBits,
                      GLint blueBits,
                      GLint alphaBits,
-                     GLint indexBits,
                      GLint depthBits,
                      GLint stencilBits,
                      GLint accumRedBits,
@@ -224,9 +221,9 @@ _mesa_create_visual( GLboolean rgbFlag,
 {
    GLvisual *vis = (GLvisual *) calloc(1, sizeof(GLvisual));
    if (vis) {
-      if (!_mesa_initialize_visual(vis, rgbFlag, dbFlag, stereoFlag,
+      if (!_mesa_initialize_visual(vis, dbFlag, stereoFlag,
                                    redBits, greenBits, blueBits, alphaBits,
-                                   indexBits, depthBits, stencilBits,
+                                   depthBits, stencilBits,
                                    accumRedBits, accumGreenBits,
                                    accumBlueBits, accumAlphaBits,
                                    numSamples)) {
@@ -248,14 +245,12 @@ _mesa_create_visual( GLboolean rgbFlag,
  */
 GLboolean
 _mesa_initialize_visual( GLvisual *vis,
-                         GLboolean rgbFlag,
                          GLboolean dbFlag,
                          GLboolean stereoFlag,
                          GLint redBits,
                          GLint greenBits,
                          GLint blueBits,
                          GLint alphaBits,
-                         GLint indexBits,
                          GLint depthBits,
                          GLint stencilBits,
                          GLint accumRedBits,
@@ -277,7 +272,7 @@ _mesa_initialize_visual( GLvisual *vis,
    assert(accumBlueBits >= 0);
    assert(accumAlphaBits >= 0);
 
-   vis->rgbMode          = rgbFlag;
+   vis->rgbMode          = GL_TRUE;
    vis->doubleBufferMode = dbFlag;
    vis->stereoMode       = stereoFlag;
 
@@ -287,7 +282,7 @@ _mesa_initialize_visual( GLvisual *vis,
    vis->alphaBits        = alphaBits;
    vis->rgbBits          = redBits + greenBits + blueBits;
 
-   vis->indexBits      = indexBits;
+   vis->indexBits      = 0;
    vis->depthBits      = depthBits;
    vis->stencilBits    = stencilBits;
 
diff --git a/src/mesa/main/context.h b/src/mesa/main/context.h
index c3be1063f8..09bf1777da 100644
--- a/src/mesa/main/context.h
+++ b/src/mesa/main/context.h
@@ -60,14 +60,12 @@ struct _glapi_table;
 /*@{*/
  
 extern GLvisual *
-_mesa_create_visual( GLboolean rgbFlag,
-                     GLboolean dbFlag,
+_mesa_create_visual( GLboolean dbFlag,
                      GLboolean stereoFlag,
                      GLint redBits,
                      GLint greenBits,
                      GLint blueBits,
                      GLint alphaBits,
-                     GLint indexBits,
                      GLint depthBits,
                      GLint stencilBits,
                      GLint accumRedBits,
@@ -78,14 +76,12 @@ _mesa_create_visual( GLboolean rgbFlag,
 
 extern GLboolean
 _mesa_initialize_visual( GLvisual *v,
-                         GLboolean rgbFlag,
                          GLboolean dbFlag,
                          GLboolean stereoFlag,
                          GLint redBits,
                          GLint greenBits,
                          GLint blueBits,
                          GLint alphaBits,
-                         GLint indexBits,
                          GLint depthBits,
                          GLint stencilBits,
                          GLint accumRedBits,
-- 
cgit v1.2.3


From 22a96f305898b5d1aa26809c7156a01686eb9bf0 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 18:58:38 -0800
Subject: mesa: Remove checks of Visual.rgbMode

This must always be true now, so there is no reason to check it.  Ever.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/main/clear.c        | 27 +--------------------------
 src/mesa/main/context.c      |  2 --
 src/mesa/main/feedback.c     | 11 +++--------
 src/mesa/main/framebuffer.c  |  7 +------
 src/mesa/main/light.c        | 41 ++++++++++++++++-------------------------
 src/mesa/main/rastpos.c      | 38 ++++++++++++++++----------------------
 src/mesa/main/readpix.c      | 16 ++++------------
 src/mesa/main/renderbuffer.c | 25 +++++++------------------
 8 files changed, 48 insertions(+), 119 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/main/clear.c b/src/mesa/main/clear.c
index 8085bedf1c..e76ab5527b 100644
--- a/src/mesa/main/clear.c
+++ b/src/mesa/main/clear.c
@@ -51,11 +51,6 @@ _mesa_ClearIndex( GLfloat c )
 
    FLUSH_VERTICES(ctx, _NEW_COLOR);
    ctx->Color.ClearIndex = (GLuint) c;
-
-   if (!ctx->Visual.rgbMode && ctx->Driver.ClearIndex) {
-      /* it's OK to call glClearIndex in RGBA mode but it should be a NOP */
-      (*ctx->Driver.ClearIndex)( ctx, ctx->Color.ClearIndex );
-   }
 }
 #endif
 
@@ -92,7 +87,7 @@ _mesa_ClearColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha )
    FLUSH_VERTICES(ctx, _NEW_COLOR);
    COPY_4V(ctx->Color.ClearColor, tmp);
 
-   if (ctx->Visual.rgbMode && ctx->Driver.ClearColor) {
+   if (ctx->Driver.ClearColor) {
       /* it's OK to call glClearColor in CI mode but it should be a NOP */
       (*ctx->Driver.ClearColor)(ctx, ctx->Color.ClearColor);
    }
@@ -261,11 +256,6 @@ _mesa_ClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *value)
 
    FLUSH_CURRENT(ctx, 0);
 
-   if (!ctx->DrawBuffer->Visual.rgbMode) {
-      _mesa_error(ctx, GL_INVALID_OPERATION, "glClearBufferiv()");
-      return;
-   }
-
    if (ctx->NewState) {
       _mesa_update_state( ctx );
    }
@@ -342,11 +332,6 @@ _mesa_ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value)
 
    FLUSH_CURRENT(ctx, 0);
 
-   if (!ctx->DrawBuffer->Visual.rgbMode) {
-      _mesa_error(ctx, GL_INVALID_OPERATION, "glClearBufferuiv()");
-      return;
-   }
-
    if (ctx->NewState) {
       _mesa_update_state( ctx );
    }
@@ -401,11 +386,6 @@ _mesa_ClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value)
 
    FLUSH_CURRENT(ctx, 0);
 
-   if (!ctx->DrawBuffer->Visual.rgbMode) {
-      _mesa_error(ctx, GL_INVALID_OPERATION, "glClearBufferfv()");
-      return;
-   }
-
    if (ctx->NewState) {
       _mesa_update_state( ctx );
    }
@@ -480,11 +460,6 @@ _mesa_ClearBufferfi(GLenum buffer, GLint drawbuffer,
 
    FLUSH_CURRENT(ctx, 0);
 
-   if (!ctx->DrawBuffer->Visual.rgbMode) {
-      _mesa_error(ctx, GL_INVALID_OPERATION, "glClearBufferfi()");
-      return;
-   }
-
    if (buffer != GL_DEPTH_STENCIL) {
       _mesa_error(ctx, GL_INVALID_ENUM, "glClearBufferfi(buffer=%s)",
                   _mesa_lookup_enum_by_nr(buffer));
diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
index b827d54176..73126b9575 100644
--- a/src/mesa/main/context.c
+++ b/src/mesa/main/context.c
@@ -1164,8 +1164,6 @@ check_compatible(const GLcontext *ctx, const GLframebuffer *buffer)
    if (ctxvis == bufvis)
       return GL_TRUE;
 
-   if (ctxvis->rgbMode != bufvis->rgbMode)
-      return GL_FALSE;
 #if 0
    /* disabling this fixes the fgl_glxgears pbuffer demo */
    if (ctxvis->doubleBufferMode && !bufvis->doubleBufferMode)
diff --git a/src/mesa/main/feedback.c b/src/mesa/main/feedback.c
index e20456fa75..323cc53036 100644
--- a/src/mesa/main/feedback.c
+++ b/src/mesa/main/feedback.c
@@ -78,18 +78,13 @@ _mesa_FeedbackBuffer( GLsizei size, GLenum type, GLfloat *buffer )
 	 ctx->Feedback._Mask = FB_3D;
 	 break;
       case GL_3D_COLOR:
-	 ctx->Feedback._Mask = (FB_3D |
-				(ctx->Visual.rgbMode ? FB_COLOR : FB_INDEX));
+	 ctx->Feedback._Mask = (FB_3D | FB_COLOR);
 	 break;
       case GL_3D_COLOR_TEXTURE:
-	 ctx->Feedback._Mask = (FB_3D |
-				(ctx->Visual.rgbMode ? FB_COLOR : FB_INDEX) |
-				FB_TEXTURE);
+	 ctx->Feedback._Mask = (FB_3D | FB_COLOR | FB_TEXTURE);
 	 break;
       case GL_4D_COLOR_TEXTURE:
-	 ctx->Feedback._Mask = (FB_3D | FB_4D |
-				(ctx->Visual.rgbMode ? FB_COLOR : FB_INDEX) |
-				FB_TEXTURE);
+	 ctx->Feedback._Mask = (FB_3D | FB_4D | FB_COLOR | FB_TEXTURE);
 	 break;
       default:
          _mesa_error( ctx, GL_INVALID_ENUM, "glFeedbackBuffer" );
diff --git a/src/mesa/main/framebuffer.c b/src/mesa/main/framebuffer.c
index 269bc9ac6c..6a85162d5d 100644
--- a/src/mesa/main/framebuffer.c
+++ b/src/mesa/main/framebuffer.c
@@ -536,7 +536,7 @@ _mesa_update_framebuffer_visual(struct gl_framebuffer *fb)
    }
 #endif
 
-   /* find first RGB or CI renderbuffer */
+   /* find first RGB renderbuffer */
    for (i = 0; i < BUFFER_COUNT; i++) {
       if (fb->Attachment[i].Renderbuffer) {
          const struct gl_renderbuffer *rb = fb->Attachment[i].Renderbuffer;
@@ -554,11 +554,6 @@ _mesa_update_framebuffer_visual(struct gl_framebuffer *fb)
             fb->Visual.samples = rb->NumSamples;
             break;
          }
-         else if (baseFormat == GL_COLOR_INDEX) {
-            fb->Visual.indexBits = _mesa_get_format_bits(fmt, GL_INDEX_BITS);
-            fb->Visual.rgbMode = GL_FALSE;
-            break;
-         }
       }
    }
 
diff --git a/src/mesa/main/light.c b/src/mesa/main/light.c
index 6899ed0ddf..19dc96892d 100644
--- a/src/mesa/main/light.c
+++ b/src/mesa/main/light.c
@@ -1093,31 +1093,22 @@ _mesa_update_lighting( GLcontext *ctx )
     * FLUSH_UPDATE_CURRENT, as when any outstanding material changes
     * are flushed, they will update the derived state at that time.
     */
-   if (ctx->Visual.rgbMode) {
-      if (ctx->Light.Model.TwoSide)
-	 _mesa_update_material( ctx, 
-				MAT_BIT_FRONT_EMISSION |
-				MAT_BIT_FRONT_AMBIENT |
-				MAT_BIT_FRONT_DIFFUSE | 
-				MAT_BIT_FRONT_SPECULAR |
-				MAT_BIT_BACK_EMISSION |
-				MAT_BIT_BACK_AMBIENT |
-				MAT_BIT_BACK_DIFFUSE | 
-				MAT_BIT_BACK_SPECULAR);
-      else
-	 _mesa_update_material( ctx, 
-				MAT_BIT_FRONT_EMISSION |
-				MAT_BIT_FRONT_AMBIENT |
-				MAT_BIT_FRONT_DIFFUSE | 
-				MAT_BIT_FRONT_SPECULAR);
-   }
-   else {
-      static const GLfloat ci[3] = { .30F, .59F, .11F };
-      foreach(light, &ctx->Light.EnabledList) {
-	 light->_dli = DOT3(ci, light->Diffuse);
-	 light->_sli = DOT3(ci, light->Specular);
-      }
-   }
+   if (ctx->Light.Model.TwoSide)
+      _mesa_update_material(ctx,
+			    MAT_BIT_FRONT_EMISSION |
+			    MAT_BIT_FRONT_AMBIENT |
+			    MAT_BIT_FRONT_DIFFUSE |
+			    MAT_BIT_FRONT_SPECULAR |
+			    MAT_BIT_BACK_EMISSION |
+			    MAT_BIT_BACK_AMBIENT |
+			    MAT_BIT_BACK_DIFFUSE |
+			    MAT_BIT_BACK_SPECULAR);
+   else
+      _mesa_update_material(ctx,
+			    MAT_BIT_FRONT_EMISSION |
+			    MAT_BIT_FRONT_AMBIENT |
+			    MAT_BIT_FRONT_DIFFUSE |
+			    MAT_BIT_FRONT_SPECULAR);
 }
 
 
diff --git a/src/mesa/main/rastpos.c b/src/mesa/main/rastpos.c
index d72b846c36..03ff3b6bbc 100644
--- a/src/mesa/main/rastpos.c
+++ b/src/mesa/main/rastpos.c
@@ -246,28 +246,22 @@ window_pos3f(GLfloat x, GLfloat y, GLfloat z)
       ctx->Current.RasterDistance = 0.0;
 
    /* raster color = current color or index */
-   if (ctx->Visual.rgbMode) {
-      ctx->Current.RasterColor[0]
-         = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][0], 0.0F, 1.0F);
-      ctx->Current.RasterColor[1]
-         = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][1], 0.0F, 1.0F);
-      ctx->Current.RasterColor[2]
-         = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][2], 0.0F, 1.0F);
-      ctx->Current.RasterColor[3]
-         = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][3], 0.0F, 1.0F);
-      ctx->Current.RasterSecondaryColor[0]
-         = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][0], 0.0F, 1.0F);
-      ctx->Current.RasterSecondaryColor[1]
-         = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][1], 0.0F, 1.0F);
-      ctx->Current.RasterSecondaryColor[2]
-         = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][2], 0.0F, 1.0F);
-      ctx->Current.RasterSecondaryColor[3]
-         = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][3], 0.0F, 1.0F);
-   }
-   else {
-      ctx->Current.RasterIndex
-         = ctx->Current.Attrib[VERT_ATTRIB_COLOR_INDEX][0];
-   }
+   ctx->Current.RasterColor[0]
+      = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][0], 0.0F, 1.0F);
+   ctx->Current.RasterColor[1]
+      = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][1], 0.0F, 1.0F);
+   ctx->Current.RasterColor[2]
+      = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][2], 0.0F, 1.0F);
+   ctx->Current.RasterColor[3]
+      = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][3], 0.0F, 1.0F);
+   ctx->Current.RasterSecondaryColor[0]
+      = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][0], 0.0F, 1.0F);
+   ctx->Current.RasterSecondaryColor[1]
+      = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][1], 0.0F, 1.0F);
+   ctx->Current.RasterSecondaryColor[2]
+      = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][2], 0.0F, 1.0F);
+   ctx->Current.RasterSecondaryColor[3]
+      = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][3], 0.0F, 1.0F);
 
    /* raster texcoord = current texcoord */
    {
diff --git a/src/mesa/main/readpix.c b/src/mesa/main/readpix.c
index feea1d375f..f4d74e8be6 100644
--- a/src/mesa/main/readpix.c
+++ b/src/mesa/main/readpix.c
@@ -77,14 +77,7 @@ _mesa_error_check_format_type(GLcontext *ctx, GLenum format, GLenum type,
    case GL_RGBA:
    case GL_BGRA:
    case GL_ABGR_EXT:
-      if (drawing) {
-         if (!ctx->DrawBuffer->Visual.rgbMode) {
-            _mesa_error(ctx, GL_INVALID_OPERATION,
-                   "glDrawPixels(drawing RGB pixels into color index buffer)");
-            return GL_TRUE;
-         }
-      }
-      else {
+      if (!drawing) {
          /* reading */
          if (!_mesa_source_buffer_exists(ctx, GL_COLOR)) {
             _mesa_error(ctx, GL_INVALID_OPERATION,
@@ -95,10 +88,9 @@ _mesa_error_check_format_type(GLcontext *ctx, GLenum format, GLenum type,
       break;
    case GL_COLOR_INDEX:
       if (drawing) {
-         if (ctx->DrawBuffer->Visual.rgbMode &&
-             (ctx->PixelMaps.ItoR.Size == 0 ||
-              ctx->PixelMaps.ItoG.Size == 0 ||
-              ctx->PixelMaps.ItoB.Size == 0)) {
+         if (ctx->PixelMaps.ItoR.Size == 0 ||
+	     ctx->PixelMaps.ItoG.Size == 0 ||
+	     ctx->PixelMaps.ItoB.Size == 0) {
             _mesa_error(ctx, GL_INVALID_OPERATION,
                    "glDrawPixels(drawing color index pixels into RGB buffer)");
             return GL_TRUE;
diff --git a/src/mesa/main/renderbuffer.c b/src/mesa/main/renderbuffer.c
index 2f42924046..7557b791e5 100644
--- a/src/mesa/main/renderbuffer.c
+++ b/src/mesa/main/renderbuffer.c
@@ -1907,21 +1907,13 @@ _mesa_add_soft_renderbuffers(struct gl_framebuffer *fb,
    GLboolean backRight = fb->Visual.stereoMode && fb->Visual.doubleBufferMode;
 
    if (color) {
-      if (fb->Visual.rgbMode) {
-         assert(fb->Visual.redBits == fb->Visual.greenBits);
-         assert(fb->Visual.redBits == fb->Visual.blueBits);
-         _mesa_add_color_renderbuffers(NULL, fb,
-                                       fb->Visual.redBits,
-                                       fb->Visual.alphaBits,
-                                       frontLeft, backLeft,
-                                       frontRight, backRight);
-      }
-      else {
-         _mesa_add_color_index_renderbuffers(NULL, fb,
-                                             fb->Visual.indexBits,
-                                             frontLeft, backLeft,
-                                             frontRight, backRight);
-      }
+      assert(fb->Visual.redBits == fb->Visual.greenBits);
+      assert(fb->Visual.redBits == fb->Visual.blueBits);
+      _mesa_add_color_renderbuffers(NULL, fb,
+				    fb->Visual.redBits,
+				    fb->Visual.alphaBits,
+				    frontLeft, backLeft,
+				    frontRight, backRight);
    }
 
    if (depth) {
@@ -1935,7 +1927,6 @@ _mesa_add_soft_renderbuffers(struct gl_framebuffer *fb,
    }
 
    if (accum) {
-      assert(fb->Visual.rgbMode);
       assert(fb->Visual.accumRedBits > 0);
       assert(fb->Visual.accumGreenBits > 0);
       assert(fb->Visual.accumBlueBits > 0);
@@ -1947,14 +1938,12 @@ _mesa_add_soft_renderbuffers(struct gl_framebuffer *fb,
    }
 
    if (aux) {
-      assert(fb->Visual.rgbMode);
       assert(fb->Visual.numAuxBuffers > 0);
       _mesa_add_aux_renderbuffers(NULL, fb, fb->Visual.redBits,
                                   fb->Visual.numAuxBuffers);
    }
 
    if (alpha) {
-      assert(fb->Visual.rgbMode);
       assert(fb->Visual.alphaBits > 0);
       _mesa_add_alpha_renderbuffers(NULL, fb, fb->Visual.alphaBits,
                                     frontLeft, backLeft,
-- 
cgit v1.2.3


From b9f63c277ac84f7b6598cb4e908033514d379171 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 19:00:50 -0800
Subject: mesa: Remove checks of Visual.rgbMode in Get paths

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/main/get.c      | 16 ++++++++--------
 src/mesa/main/get_gen.py |  4 ++--
 2 files changed, 10 insertions(+), 10 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
index 60fef552c4..e390d29757 100644
--- a/src/mesa/main/get.c
+++ b/src/mesa/main/get.c
@@ -391,7 +391,7 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
          params[0] = INT_TO_BOOLEAN(ctx->Color.ClearIndex);
          break;
       case GL_INDEX_MODE:
-         params[0] = !ctx->DrawBuffer->Visual.rgbMode;
+         params[0] = GL_FALSE;
          break;
       case GL_INDEX_OFFSET:
          params[0] = INT_TO_BOOLEAN(ctx->Pixel.IndexOffset);
@@ -827,7 +827,7 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
          params[0] = ctx->Transform.RescaleNormals;
          break;
       case GL_RGBA_MODE:
-         params[0] = ctx->DrawBuffer->Visual.rgbMode;
+         params[0] = GL_TRUE;
          break;
       case GL_SCISSOR_BOX:
          params[0] = INT_TO_BOOLEAN(ctx->Scissor.X);
@@ -2260,7 +2260,7 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
          params[0] = (GLfloat)(ctx->Color.ClearIndex);
          break;
       case GL_INDEX_MODE:
-         params[0] = BOOLEAN_TO_FLOAT(!ctx->DrawBuffer->Visual.rgbMode);
+         params[0] = BOOLEAN_TO_FLOAT(GL_FALSE);
          break;
       case GL_INDEX_OFFSET:
          params[0] = (GLfloat)(ctx->Pixel.IndexOffset);
@@ -2696,7 +2696,7 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
          params[0] = BOOLEAN_TO_FLOAT(ctx->Transform.RescaleNormals);
          break;
       case GL_RGBA_MODE:
-         params[0] = BOOLEAN_TO_FLOAT(ctx->DrawBuffer->Visual.rgbMode);
+         params[0] = BOOLEAN_TO_FLOAT(GL_TRUE);
          break;
       case GL_SCISSOR_BOX:
          params[0] = (GLfloat)(ctx->Scissor.X);
@@ -4129,7 +4129,7 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
          params[0] = ctx->Color.ClearIndex;
          break;
       case GL_INDEX_MODE:
-         params[0] = BOOLEAN_TO_INT(!ctx->DrawBuffer->Visual.rgbMode);
+         params[0] = BOOLEAN_TO_INT(GL_FALSE);
          break;
       case GL_INDEX_OFFSET:
          params[0] = ctx->Pixel.IndexOffset;
@@ -4565,7 +4565,7 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
          params[0] = BOOLEAN_TO_INT(ctx->Transform.RescaleNormals);
          break;
       case GL_RGBA_MODE:
-         params[0] = BOOLEAN_TO_INT(ctx->DrawBuffer->Visual.rgbMode);
+         params[0] = BOOLEAN_TO_INT(GL_TRUE);
          break;
       case GL_SCISSOR_BOX:
          params[0] = ctx->Scissor.X;
@@ -5999,7 +5999,7 @@ _mesa_GetInteger64v( GLenum pname, GLint64 *params )
          params[0] = (GLint64)(ctx->Color.ClearIndex);
          break;
       case GL_INDEX_MODE:
-         params[0] = BOOLEAN_TO_INT64(!ctx->DrawBuffer->Visual.rgbMode);
+         params[0] = BOOLEAN_TO_INT64(GL_FALSE);
          break;
       case GL_INDEX_OFFSET:
          params[0] = (GLint64)(ctx->Pixel.IndexOffset);
@@ -6435,7 +6435,7 @@ _mesa_GetInteger64v( GLenum pname, GLint64 *params )
          params[0] = BOOLEAN_TO_INT64(ctx->Transform.RescaleNormals);
          break;
       case GL_RGBA_MODE:
-         params[0] = BOOLEAN_TO_INT64(ctx->DrawBuffer->Visual.rgbMode);
+         params[0] = BOOLEAN_TO_INT64(GL_TRUE);
          break;
       case GL_SCISSOR_BOX:
          params[0] = (GLint64)(ctx->Scissor.X);
diff --git a/src/mesa/main/get_gen.py b/src/mesa/main/get_gen.py
index 64aa2aca26..17ea1e4ae6 100644
--- a/src/mesa/main/get_gen.py
+++ b/src/mesa/main/get_gen.py
@@ -231,7 +231,7 @@ StateVars = [
 	( "GL_INDEX_BITS", GLint, ["ctx->DrawBuffer->Visual.indexBits"],
 	  "", None ),
 	( "GL_INDEX_CLEAR_VALUE", GLint, ["ctx->Color.ClearIndex"], "", None ),
-	( "GL_INDEX_MODE", GLboolean, ["!ctx->DrawBuffer->Visual.rgbMode"],
+	( "GL_INDEX_MODE", GLboolean, ["GL_FALSE"],
 	  "", None ),
 	( "GL_INDEX_OFFSET", GLint, ["ctx->Pixel.IndexOffset"], "", None ),
 	( "GL_INDEX_SHIFT", GLint, ["ctx->Pixel.IndexShift"], "", None ),
@@ -410,7 +410,7 @@ StateVars = [
 	( "GL_RENDER_MODE", GLenum, ["ctx->RenderMode"], "", None ),
 	( "GL_RESCALE_NORMAL", GLboolean,
 	  ["ctx->Transform.RescaleNormals"], "", None ),
-	( "GL_RGBA_MODE", GLboolean, ["ctx->DrawBuffer->Visual.rgbMode"],
+	( "GL_RGBA_MODE", GLboolean, ["GL_TRUE"],
 	  "", None ),
 	( "GL_SCISSOR_BOX", GLint,
 	  ["ctx->Scissor.X",
-- 
cgit v1.2.3


From 3d0f608e139336174121617f760398abca25eb31 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 19:03:23 -0800
Subject: mesa: Remove _mesa_add_color_index_renderbuffers

After all the recent color-index visual support removal,
_mesa_add_color_index_renderbuffers is no longer used anywhere.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/main/renderbuffer.c | 56 --------------------------------------------
 src/mesa/main/renderbuffer.h |  6 -----
 2 files changed, 62 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/main/renderbuffer.c b/src/mesa/main/renderbuffer.c
index 7557b791e5..4d7b0aff04 100644
--- a/src/mesa/main/renderbuffer.c
+++ b/src/mesa/main/renderbuffer.c
@@ -1552,62 +1552,6 @@ _mesa_add_color_renderbuffers(GLcontext *ctx, struct gl_framebuffer *fb,
 }
 
 
-/**
- * Add software-based color index renderbuffers to the given framebuffer.
- * This is a helper routine for device drivers when creating a
- * window system framebuffer (not a user-created render/framebuffer).
- * Once this function is called, you can basically forget about this
- * renderbuffer; core Mesa will handle all the buffer management and
- * rendering!
- */
-GLboolean
-_mesa_add_color_index_renderbuffers(GLcontext *ctx, struct gl_framebuffer *fb,
-                                    GLuint indexBits,
-                                    GLboolean frontLeft, GLboolean backLeft,
-                                    GLboolean frontRight, GLboolean backRight)
-{
-   GLuint b;
-
-   if (indexBits > 8) {
-      _mesa_problem(ctx,
-                "Unsupported bit depth in _mesa_add_color_index_renderbuffers");
-      return GL_FALSE;
-   }
-
-   assert(MAX_COLOR_ATTACHMENTS >= 4);
-
-   for (b = BUFFER_FRONT_LEFT; b <= BUFFER_BACK_RIGHT; b++) {
-      struct gl_renderbuffer *rb;
-
-      if (b == BUFFER_FRONT_LEFT && !frontLeft)
-         continue;
-      else if (b == BUFFER_BACK_LEFT && !backLeft)
-         continue;
-      else if (b == BUFFER_FRONT_RIGHT && !frontRight)
-         continue;
-      else if (b == BUFFER_BACK_RIGHT && !backRight)
-         continue;
-
-      assert(fb->Attachment[b].Renderbuffer == NULL);
-
-      rb = _mesa_new_renderbuffer(ctx, 0);
-      if (!rb) {
-         _mesa_error(ctx, GL_OUT_OF_MEMORY, "Allocating color buffer");
-         return GL_FALSE;
-      }
-
-      assert(indexBits <= 8);
-      rb->Format = MESA_FORMAT_CI8;
-      rb->InternalFormat = GL_COLOR_INDEX;
-
-      rb->AllocStorage = _mesa_soft_renderbuffer_storage;
-      _mesa_add_renderbuffer(fb, b, rb);
-   }
-
-   return GL_TRUE;
-}
-
-
 /**
  * Add software-based alpha renderbuffers to the given framebuffer.
  * This is a helper routine for device drivers when creating a
diff --git a/src/mesa/main/renderbuffer.h b/src/mesa/main/renderbuffer.h
index c9bf888548..7c205e141c 100644
--- a/src/mesa/main/renderbuffer.h
+++ b/src/mesa/main/renderbuffer.h
@@ -52,12 +52,6 @@ _mesa_add_color_renderbuffers(GLcontext *ctx, struct gl_framebuffer *fb,
                               GLboolean frontLeft, GLboolean backLeft,
                               GLboolean frontRight, GLboolean backRight);
 
-extern GLboolean
-_mesa_add_color_index_renderbuffers(GLcontext *ctx, struct gl_framebuffer *fb,
-                                    GLuint indexBits,
-                                    GLboolean frontLeft, GLboolean backLeft,
-                                    GLboolean frontRight, GLboolean backRight);
-
 extern GLboolean
 _mesa_add_alpha_renderbuffers(GLcontext *ctx, struct gl_framebuffer *fb,
                               GLuint alphaBits,
-- 
cgit v1.2.3


From 5034e8ad42df60a7f61319ccd6c1a3dbf28e6699 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 19:06:29 -0800
Subject: swrast: Remove _swrast_logicop_ci_span

After all the recent color-index rendering removal,
_swrast_logicop_ci_span is no longer used anywhere.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/swrast/s_logic.c | 27 ---------------------------
 src/mesa/swrast/s_logic.h |  6 ------
 2 files changed, 33 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/swrast/s_logic.c b/src/mesa/swrast/s_logic.c
index f0274b4c0b..c36a16e665 100644
--- a/src/mesa/swrast/s_logic.c
+++ b/src/mesa/swrast/s_logic.c
@@ -182,33 +182,6 @@ logicop_uint4(GLcontext *ctx, GLuint n, GLuint src[], const GLuint dest[],
 
 
 
-/*
- * Apply the current logic operator to a span of CI pixels.  This is only
- * used if the device driver can't do logic ops.
- */
-void
-_swrast_logicop_ci_span(GLcontext *ctx, struct gl_renderbuffer *rb,
-                        SWspan *span)
-{
-   GLuint dest[MAX_WIDTH];
-   GLuint *index = span->array->index;
-
-   ASSERT(span->end < MAX_WIDTH);
-   ASSERT(rb->DataType == GL_UNSIGNED_INT);
-
-   /* Read dest values from frame buffer */
-   if (span->arrayMask & SPAN_XY) {
-      _swrast_get_values(ctx, rb, span->end, span->array->x, span->array->y,
-                         dest, sizeof(GLuint));
-   }
-   else {
-      rb->GetRow(ctx, rb, span->end, span->x, span->y, dest);
-   }
-
-   logicop_uint1(ctx, span->end, index, dest, span->array->mask);
-}
-
-
 /**
  * Apply the current logic operator to a span of RGBA pixels.
  * We can handle horizontal runs of pixels (spans) or arrays of x/y
diff --git a/src/mesa/swrast/s_logic.h b/src/mesa/swrast/s_logic.h
index ba20cd7b32..e8cfae33f2 100644
--- a/src/mesa/swrast/s_logic.h
+++ b/src/mesa/swrast/s_logic.h
@@ -29,12 +29,6 @@
 
 #include "swrast.h"
 
-
-extern void
-_swrast_logicop_ci_span(GLcontext *ctx, struct gl_renderbuffer *rb,
-                        SWspan *span);
-
-
 extern void
 _swrast_logicop_rgba_span(GLcontext *ctx, struct gl_renderbuffer *rb,
                           SWspan *span);
-- 
cgit v1.2.3


From bb8c3b1bcc81fd5addc5e214f3efcfdca50c6806 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 19:12:30 -0800
Subject: mesa: Remove ClearIndex and IndexMask from device-driver interface

These are used to inform the driver of the clear value for color-index
buffers and to control write-masking of bits in color-index buffers.
No driver use or need (not even Nouveau) these interfaces.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/drivers/common/driverfuncs.c              |  2 --
 src/mesa/drivers/dri/mach64/mach64_state.c         |  2 --
 src/mesa/drivers/dri/mga/mgastate.c                |  3 --
 src/mesa/drivers/dri/nouveau/nouveau_state.c       |  7 -----
 src/mesa/drivers/dri/r128/r128_state.c             |  2 --
 src/mesa/drivers/dri/r200/r200_state.c             |  2 --
 src/mesa/drivers/dri/radeon/radeon_state.c         |  2 --
 .../windows/gldirect/mesasw/gld_wgl_mesasw.c       | 16 ----------
 src/mesa/drivers/x11/xm_dd.c                       | 34 ----------------------
 src/mesa/main/blend.c                              |  3 --
 src/mesa/main/dd.h                                 |  4 ---
 11 files changed, 77 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/common/driverfuncs.c b/src/mesa/drivers/common/driverfuncs.c
index 87163e6505..ebfaa2f07b 100644
--- a/src/mesa/drivers/common/driverfuncs.c
+++ b/src/mesa/drivers/common/driverfuncs.c
@@ -142,7 +142,6 @@ _mesa_init_driver_functions(struct dd_function_table *driver)
    driver->BlendFuncSeparate = NULL;
    driver->ClearColor = NULL;
    driver->ClearDepth = NULL;
-   driver->ClearIndex = NULL;
    driver->ClearStencil = NULL;
    driver->ClipPlane = NULL;
    driver->ColorMask = NULL;
@@ -157,7 +156,6 @@ _mesa_init_driver_functions(struct dd_function_table *driver)
    driver->Enable = NULL;
    driver->Fogfv = NULL;
    driver->Hint = NULL;
-   driver->IndexMask = NULL;
    driver->Lightfv = NULL;
    driver->LightModelfv = NULL;
    driver->LineStipple = NULL;
diff --git a/src/mesa/drivers/dri/mach64/mach64_state.c b/src/mesa/drivers/dri/mach64/mach64_state.c
index b9093b5a13..69a5aea02c 100644
--- a/src/mesa/drivers/dri/mach64/mach64_state.c
+++ b/src/mesa/drivers/dri/mach64/mach64_state.c
@@ -1156,12 +1156,10 @@ void mach64DDInitStateFuncs( GLcontext *ctx )
 {
    ctx->Driver.UpdateState		= mach64DDInvalidateState;
 
-   ctx->Driver.ClearIndex		= NULL;
    ctx->Driver.ClearColor		= mach64DDClearColor;
    ctx->Driver.DrawBuffer		= mach64DDDrawBuffer;
    ctx->Driver.ReadBuffer		= mach64DDReadBuffer;
 
-   ctx->Driver.IndexMask		= NULL;
    ctx->Driver.ColorMask		= mach64DDColorMask;
    ctx->Driver.AlphaFunc		= mach64DDAlphaFunc;
    ctx->Driver.BlendEquationSeparate	= mach64DDBlendEquationSeparate;
diff --git a/src/mesa/drivers/dri/mga/mgastate.c b/src/mesa/drivers/dri/mga/mgastate.c
index 0253044761..745d5e9852 100644
--- a/src/mesa/drivers/dri/mga/mgastate.c
+++ b/src/mesa/drivers/dri/mga/mgastate.c
@@ -1193,8 +1193,5 @@ void mgaDDInitStateFuncs( GLcontext *ctx )
    ctx->Driver.Viewport = mgaViewport;
    ctx->Driver.RenderMode = mgaRenderMode;
 
-   ctx->Driver.ClearIndex = 0;
-   ctx->Driver.IndexMask = 0;
-
    TNL_CONTEXT(ctx)->Driver.RunPipeline = mgaRunPipeline;
 }
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_state.c b/src/mesa/drivers/dri/nouveau/nouveau_state.c
index 5d593ed4dd..e1871db0eb 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_state.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_state.c
@@ -242,12 +242,6 @@ nouveau_fog(GLcontext *ctx, GLenum pname, const GLfloat *params)
 	context_dirty(ctx, FOG);
 }
 
-static void
-nouveau_index_mask(GLcontext *ctx, GLuint mask)
-{
-	context_dirty(ctx, INDEX_MASK);
-}
-
 static void
 nouveau_light(GLcontext *ctx, GLenum light, GLenum pname, const GLfloat *params)
 {
@@ -504,7 +498,6 @@ nouveau_state_init(GLcontext *ctx)
 	ctx->Driver.DrawBuffers = nouveau_draw_buffers;
 	ctx->Driver.Enable = nouveau_enable;
 	ctx->Driver.Fogfv = nouveau_fog;
-	ctx->Driver.IndexMask = nouveau_index_mask;
 	ctx->Driver.Lightfv = nouveau_light;
 	ctx->Driver.LightModelfv = nouveau_light_model;
 	ctx->Driver.LineStipple = nouveau_line_stipple;
diff --git a/src/mesa/drivers/dri/r128/r128_state.c b/src/mesa/drivers/dri/r128/r128_state.c
index 42f6dd7388..4d773feaaa 100644
--- a/src/mesa/drivers/dri/r128/r128_state.c
+++ b/src/mesa/drivers/dri/r128/r128_state.c
@@ -1407,13 +1407,11 @@ void r128DDInitStateFuncs( GLcontext *ctx )
 {
    ctx->Driver.UpdateState		= r128DDInvalidateState;
 
-   ctx->Driver.ClearIndex		= NULL;
    ctx->Driver.ClearColor		= r128DDClearColor;
    ctx->Driver.ClearStencil		= r128DDClearStencil;
    ctx->Driver.DrawBuffer		= r128DDDrawBuffer;
    ctx->Driver.ReadBuffer		= r128DDReadBuffer;
 
-   ctx->Driver.IndexMask		= NULL;
    ctx->Driver.ColorMask		= r128DDColorMask;
    ctx->Driver.AlphaFunc		= r128DDAlphaFunc;
    ctx->Driver.BlendEquationSeparate	= r128DDBlendEquationSeparate;
diff --git a/src/mesa/drivers/dri/r200/r200_state.c b/src/mesa/drivers/dri/r200/r200_state.c
index b9ec6f428f..050e5aa877 100644
--- a/src/mesa/drivers/dri/r200/r200_state.c
+++ b/src/mesa/drivers/dri/r200/r200_state.c
@@ -2501,7 +2501,6 @@ void r200InitStateFuncs( struct dd_function_table *functions )
    functions->BlendFuncSeparate		= r200BlendFuncSeparate;
    functions->ClearColor		= r200ClearColor;
    functions->ClearDepth		= r200ClearDepth;
-   functions->ClearIndex		= NULL;
    functions->ClearStencil		= r200ClearStencil;
    functions->ClipPlane			= r200ClipPlane;
    functions->ColorMask			= r200ColorMask;
@@ -2513,7 +2512,6 @@ void r200InitStateFuncs( struct dd_function_table *functions )
    functions->Fogfv			= r200Fogfv;
    functions->FrontFace			= r200FrontFace;
    functions->Hint			= NULL;
-   functions->IndexMask			= NULL;
    functions->LightModelfv		= r200LightModelfv;
    functions->Lightfv			= r200Lightfv;
    functions->LineStipple		= r200LineStipple;
diff --git a/src/mesa/drivers/dri/radeon/radeon_state.c b/src/mesa/drivers/dri/radeon/radeon_state.c
index 7db745a180..0ce97e8697 100644
--- a/src/mesa/drivers/dri/radeon/radeon_state.c
+++ b/src/mesa/drivers/dri/radeon/radeon_state.c
@@ -2254,7 +2254,6 @@ void radeonInitStateFuncs( GLcontext *ctx , GLboolean dri2 )
    ctx->Driver.BlendFuncSeparate	= radeonBlendFuncSeparate;
    ctx->Driver.ClearColor		= radeonClearColor;
    ctx->Driver.ClearDepth		= radeonClearDepth;
-   ctx->Driver.ClearIndex		= NULL;
    ctx->Driver.ClearStencil		= radeonClearStencil;
    ctx->Driver.ClipPlane		= radeonClipPlane;
    ctx->Driver.ColorMask		= radeonColorMask;
@@ -2266,7 +2265,6 @@ void radeonInitStateFuncs( GLcontext *ctx , GLboolean dri2 )
    ctx->Driver.Fogfv			= radeonFogfv;
    ctx->Driver.FrontFace		= radeonFrontFace;
    ctx->Driver.Hint			= NULL;
-   ctx->Driver.IndexMask		= NULL;
    ctx->Driver.LightModelfv		= radeonLightModelfv;
    ctx->Driver.Lightfv			= radeonLightfv;
    ctx->Driver.LineStipple              = radeonLineStipple;
diff --git a/src/mesa/drivers/windows/gldirect/mesasw/gld_wgl_mesasw.c b/src/mesa/drivers/windows/gldirect/mesasw/gld_wgl_mesasw.c
index 7ac425a109..f927abfa11 100644
--- a/src/mesa/drivers/windows/gldirect/mesasw/gld_wgl_mesasw.c
+++ b/src/mesa/drivers/windows/gldirect/mesasw/gld_wgl_mesasw.c
@@ -629,21 +629,6 @@ static void flush(GLcontext* ctx)
 }
 
 
-//---------------------------------------------------------------------------
-
-
-/*
- * Set the color index used to clear the color buffer.
- */
-static void clear_index(GLcontext* ctx, GLuint index)
-{
-	GLD_context *gldCtx = GLD_GET_CONTEXT(ctx);
-	WMesaContext *Current = GLD_GET_WMESA_DRIVER(gldCtx);
-  Current->clearpixel = index;
-}
-
-
-
 //---------------------------------------------------------------------------
 
 /*
@@ -1367,7 +1352,6 @@ static void wmesa_update_state_first_time(
 	ctx->Driver.Clear					= clear;
 	
 	ctx->Driver.Flush					= flush;
-	ctx->Driver.ClearIndex				= clear_index;
 	ctx->Driver.ClearColor				= clear_color;
 	ctx->Driver.Enable					= enable;
 	
diff --git a/src/mesa/drivers/x11/xm_dd.c b/src/mesa/drivers/x11/xm_dd.c
index d304192f4c..5edafb890b 100644
--- a/src/mesa/drivers/x11/xm_dd.c
+++ b/src/mesa/drivers/x11/xm_dd.c
@@ -106,18 +106,6 @@ finish_or_flush( GLcontext *ctx )
 }
 
 
-static void
-clear_index( GLcontext *ctx, GLuint index )
-{
-   if (ctx->DrawBuffer->Name == 0) {
-      const XMesaContext xmesa = XMESA_CONTEXT(ctx);
-      XMesaBuffer xmbuf = XMESA_BUFFER(ctx->DrawBuffer);
-      xmesa->clearpixel = (unsigned long) index;
-      XMesaSetForeground( xmesa->display, xmbuf->cleargc, (unsigned long) index );
-   }
-}
-
-
 static void
 clear_color( GLcontext *ctx, const GLfloat color[4] )
 {
@@ -144,26 +132,6 @@ clear_color( GLcontext *ctx, const GLfloat color[4] )
 
 
 
-/* Set index mask ala glIndexMask */
-static void
-index_mask( GLcontext *ctx, GLuint mask )
-{
-   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
-   XMesaBuffer xmbuf = XMESA_BUFFER(ctx->DrawBuffer);
-   /* not sure this conditional is really needed */
-   if (xmbuf->backxrb && xmbuf->backxrb->pixmap) {
-      unsigned long m;
-      if (mask==0xffffffff) {
-	 m = ((unsigned long)~0L);
-      }
-      else {
-         m = (unsigned long) mask;
-      }
-      XMesaSetPlaneMask( xmesa->display, xmbuf->cleargc, m );
-   }
-}
-
-
 /* Implements glColorMask() */
 static void
 color_mask(GLcontext *ctx,
@@ -1143,9 +1111,7 @@ xmesa_init_driver_functions( XMesaVisual xmvisual,
    driver->GetBufferSize = NULL; /* OBSOLETE */
    driver->Flush = finish_or_flush;
    driver->Finish = finish_or_flush;
-   driver->ClearIndex = clear_index;
    driver->ClearColor = clear_color;
-   driver->IndexMask = index_mask;
    driver->ColorMask = color_mask;
    driver->Enable = enable;
    driver->Viewport = xmesa_viewport;
diff --git a/src/mesa/main/blend.c b/src/mesa/main/blend.c
index de60031cc8..d022770f24 100644
--- a/src/mesa/main/blend.c
+++ b/src/mesa/main/blend.c
@@ -456,9 +456,6 @@ _mesa_IndexMask( GLuint mask )
 
    FLUSH_VERTICES(ctx, _NEW_COLOR);
    ctx->Color.IndexMask = mask;
-
-   if (ctx->Driver.IndexMask)
-      ctx->Driver.IndexMask( ctx, mask );
 }
 #endif
 
diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h
index 079e44bb95..84b83fe273 100644
--- a/src/mesa/main/dd.h
+++ b/src/mesa/main/dd.h
@@ -620,8 +620,6 @@ struct dd_function_table {
    void (*ClearColor)(GLcontext *ctx, const GLfloat color[4]);
    /** Specify the clear value for the depth buffer */
    void (*ClearDepth)(GLcontext *ctx, GLclampd d);
-   /** Specify the clear value for the color index buffers */
-   void (*ClearIndex)(GLcontext *ctx, GLuint index);
    /** Specify the clear value for the stencil buffer */
    void (*ClearStencil)(GLcontext *ctx, GLint s);
    /** Specify a plane against which all geometry is clipped */
@@ -653,8 +651,6 @@ struct dd_function_table {
    void (*Fogfv)(GLcontext *ctx, GLenum pname, const GLfloat *params);
    /** Specify implementation-specific hints */
    void (*Hint)(GLcontext *ctx, GLenum target, GLenum mode);
-   /** Control the writing of individual bits in the color index buffers */
-   void (*IndexMask)(GLcontext *ctx, GLuint mask);
    /** Set light source parameters.
     * Note: for GL_POSITION and GL_SPOT_DIRECTION, params will have already
     * been transformed to eye-space.
-- 
cgit v1.2.3


From 24d311c13339978a37885e88a49a990903652339 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 19:25:19 -0800
Subject: mesa: Eliminate index parameter to _mesa_feedback_vertex

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/main/drawpix.c                 | 3 ---
 src/mesa/main/feedback.c                | 9 ++-------
 src/mesa/main/feedback.h                | 2 --
 src/mesa/state_tracker/st_cb_feedback.c | 3 +--
 src/mesa/swrast/s_feedback.c            | 2 +-
 5 files changed, 4 insertions(+), 15 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/main/drawpix.c b/src/mesa/main/drawpix.c
index 84cb78612b..bf36a7e7a4 100644
--- a/src/mesa/main/drawpix.c
+++ b/src/mesa/main/drawpix.c
@@ -127,7 +127,6 @@ _mesa_DrawPixels( GLsizei width, GLsizei height,
       _mesa_feedback_vertex( ctx,
                              ctx->Current.RasterPos,
                              ctx->Current.RasterColor,
-                             ctx->Current.RasterIndex,
                              ctx->Current.RasterTexCoords[0] );
    }
    else {
@@ -213,7 +212,6 @@ _mesa_CopyPixels( GLint srcx, GLint srcy, GLsizei width, GLsizei height,
       _mesa_feedback_vertex( ctx, 
                              ctx->Current.RasterPos,
                              ctx->Current.RasterColor,
-                             ctx->Current.RasterIndex,
                              ctx->Current.RasterTexCoords[0] );
    }
    else {
@@ -293,7 +291,6 @@ _mesa_Bitmap( GLsizei width, GLsizei height,
       _mesa_feedback_vertex( ctx,
                              ctx->Current.RasterPos,
                              ctx->Current.RasterColor,
-                             ctx->Current.RasterIndex, 
                              ctx->Current.RasterTexCoords[0] );
    }
    else {
diff --git a/src/mesa/main/feedback.c b/src/mesa/main/feedback.c
index 323cc53036..c72b91280e 100644
--- a/src/mesa/main/feedback.c
+++ b/src/mesa/main/feedback.c
@@ -44,9 +44,8 @@
 
 #define FB_3D		0x01
 #define FB_4D		0x02
-#define FB_INDEX	0x04
-#define FB_COLOR	0x08
-#define FB_TEXTURE	0X10
+#define FB_COLOR	0x04
+#define FB_TEXTURE	0X08
 
 
 
@@ -120,7 +119,6 @@ void
 _mesa_feedback_vertex(GLcontext *ctx,
                       const GLfloat win[4],
                       const GLfloat color[4],
-                      GLfloat index,
                       const GLfloat texcoord[4])
 {
    _mesa_feedback_token( ctx, win[0] );
@@ -131,9 +129,6 @@ _mesa_feedback_vertex(GLcontext *ctx,
    if (ctx->Feedback._Mask & FB_4D) {
       _mesa_feedback_token( ctx, win[3] );
    }
-   if (ctx->Feedback._Mask & FB_INDEX) {
-      _mesa_feedback_token( ctx, (GLfloat) index );
-   }
    if (ctx->Feedback._Mask & FB_COLOR) {
       _mesa_feedback_token( ctx, color[0] );
       _mesa_feedback_token( ctx, color[1] );
diff --git a/src/mesa/main/feedback.h b/src/mesa/main/feedback.h
index 7a648f444f..3e8283ed23 100644
--- a/src/mesa/main/feedback.h
+++ b/src/mesa/main/feedback.h
@@ -41,7 +41,6 @@ extern void
 _mesa_feedback_vertex( GLcontext *ctx,
                        const GLfloat win[4],
                        const GLfloat color[4],
-                       GLfloat index,
                        const GLfloat texcoord[4] );
 
 
@@ -70,7 +69,6 @@ static INLINE void
 _mesa_feedback_vertex( GLcontext *ctx,
                        const GLfloat win[4],
                        const GLfloat color[4],
-                       GLfloat index,
                        const GLfloat texcoord[4] )
 {
    /* render mode is always GL_RENDER */
diff --git a/src/mesa/state_tracker/st_cb_feedback.c b/src/mesa/state_tracker/st_cb_feedback.c
index edf26473d4..37b1fb55f4 100644
--- a/src/mesa/state_tracker/st_cb_feedback.c
+++ b/src/mesa/state_tracker/st_cb_feedback.c
@@ -83,7 +83,6 @@ feedback_vertex(GLcontext *ctx, const struct draw_context *draw,
    const struct st_context *st = ctx->st;
    GLfloat win[4];
    const GLfloat *color, *texcoord;
-   const GLfloat ci = 0;
    GLuint slot;
 
    /* Recall that Y=0=Top of window for Gallium wincoords */
@@ -109,7 +108,7 @@ feedback_vertex(GLcontext *ctx, const struct draw_context *draw,
    else
       texcoord = ctx->Current.Attrib[VERT_ATTRIB_TEX0];
 
-   _mesa_feedback_vertex(ctx, win, color, ci, texcoord);
+   _mesa_feedback_vertex(ctx, win, color, texcoord);
 }
 
 
diff --git a/src/mesa/swrast/s_feedback.c b/src/mesa/swrast/s_feedback.c
index 2e6066983d..373b1416e2 100644
--- a/src/mesa/swrast/s_feedback.c
+++ b/src/mesa/swrast/s_feedback.c
@@ -46,7 +46,7 @@ feedback_vertex(GLcontext * ctx, const SWvertex * v, const SWvertex * pv)
    win[2] = v->attrib[FRAG_ATTRIB_WPOS][2] / ctx->DrawBuffer->_DepthMaxF;
    win[3] = 1.0F / v->attrib[FRAG_ATTRIB_WPOS][3];
 
-   _mesa_feedback_vertex(ctx, win, color, v->attrib[FRAG_ATTRIB_CI][0], vtc);
+   _mesa_feedback_vertex(ctx, win, color, vtc);
 }
 
 
-- 
cgit v1.2.3


From 5c52b4292ff1aa37f38b20f33ff1642e1c20f894 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 19:28:04 -0800
Subject: mesa: Always return default value for CURRENT_RASTER_INDEX

Since there is no color-index rendering, it is impossible to update
this value.  Just return the initial setting and be happy.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/main/get.c      | 8 ++++----
 src/mesa/main/get_gen.py | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
index e390d29757..edc4400912 100644
--- a/src/mesa/main/get.c
+++ b/src/mesa/main/get.c
@@ -253,7 +253,7 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
          params[0] = FLOAT_TO_BOOLEAN(ctx->Current.RasterDistance);
          break;
       case GL_CURRENT_RASTER_INDEX:
-         params[0] = FLOAT_TO_BOOLEAN(ctx->Current.RasterIndex);
+         params[0] = FLOAT_TO_BOOLEAN(1.0);
          break;
       case GL_CURRENT_RASTER_POSITION:
          params[0] = FLOAT_TO_BOOLEAN(ctx->Current.RasterPos[0]);
@@ -2122,7 +2122,7 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
          params[0] = ctx->Current.RasterDistance;
          break;
       case GL_CURRENT_RASTER_INDEX:
-         params[0] = ctx->Current.RasterIndex;
+         params[0] = 1.0;
          break;
       case GL_CURRENT_RASTER_POSITION:
          params[0] = ctx->Current.RasterPos[0];
@@ -3991,7 +3991,7 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
          params[0] = IROUND(ctx->Current.RasterDistance);
          break;
       case GL_CURRENT_RASTER_INDEX:
-         params[0] = IROUND(ctx->Current.RasterIndex);
+         params[0] = IROUND(1.0);
          break;
       case GL_CURRENT_RASTER_POSITION:
          params[0] = IROUND(ctx->Current.RasterPos[0]);
@@ -5861,7 +5861,7 @@ _mesa_GetInteger64v( GLenum pname, GLint64 *params )
          params[0] = IROUND64(ctx->Current.RasterDistance);
          break;
       case GL_CURRENT_RASTER_INDEX:
-         params[0] = IROUND64(ctx->Current.RasterIndex);
+         params[0] = IROUND64(1.0);
          break;
       case GL_CURRENT_RASTER_POSITION:
          params[0] = IROUND64(ctx->Current.RasterPos[0]);
diff --git a/src/mesa/main/get_gen.py b/src/mesa/main/get_gen.py
index 17ea1e4ae6..9d5a51d58c 100644
--- a/src/mesa/main/get_gen.py
+++ b/src/mesa/main/get_gen.py
@@ -155,7 +155,7 @@ StateVars = [
 	( "GL_CURRENT_RASTER_DISTANCE", GLfloat,
 	  ["ctx->Current.RasterDistance"], "", None ),
 	( "GL_CURRENT_RASTER_INDEX", GLfloat,
-	  ["ctx->Current.RasterIndex"], "", None ),
+	  ["1.0"], "", None ),
 	( "GL_CURRENT_RASTER_POSITION", GLfloat,
 	  ["ctx->Current.RasterPos[0]",
 	   "ctx->Current.RasterPos[1]",
-- 
cgit v1.2.3


From 06ceba0a7cab39e770a68b3ae8b8b4f17c0347d2 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 24 Feb 2010 19:29:53 -0800
Subject: mesa: Remove unused RasterIndex field

With the preceeding changes, gl_current_attrib::RasterIndex is not
used.  Remove it.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/main/mtypes.h  | 1 -
 src/mesa/main/rastpos.c | 1 -
 2 files changed, 2 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index e0ee3c9f5d..4d55ebb972 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -630,7 +630,6 @@ struct gl_current_attrib
    GLfloat RasterDistance;
    GLfloat RasterColor[4];
    GLfloat RasterSecondaryColor[4];
-   GLfloat RasterIndex;
    GLfloat RasterTexCoords[MAX_TEXTURE_COORD_UNITS][4];
    GLboolean RasterPosValid;
    /*@}*/
diff --git a/src/mesa/main/rastpos.c b/src/mesa/main/rastpos.c
index 03ff3b6bbc..75c67f2693 100644
--- a/src/mesa/main/rastpos.c
+++ b/src/mesa/main/rastpos.c
@@ -556,7 +556,6 @@ void _mesa_init_rastpos( GLcontext * ctx )
    ctx->Current.RasterDistance = 0.0;
    ASSIGN_4V( ctx->Current.RasterColor, 1.0, 1.0, 1.0, 1.0 );
    ASSIGN_4V( ctx->Current.RasterSecondaryColor, 0.0, 0.0, 0.0, 1.0 );
-   ctx->Current.RasterIndex = 1.0;
    for (i = 0; i < Elements(ctx->Current.RasterTexCoords); i++)
       ASSIGN_4V( ctx->Current.RasterTexCoords[i], 0.0, 0.0, 0.0, 1.0 );
    ctx->Current.RasterPosValid = GL_TRUE;
-- 
cgit v1.2.3


From 78742f8e867d8819fca49cc6559ac5ef44fdd83f Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Fri, 26 Feb 2010 17:41:15 -0800
Subject: mesa/tnl_dd: Remove color-index support from t_dd_tritmp.h

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/tnl_dd/t_dd_tritmp.h | 122 +-----------------------------------------
 1 file changed, 1 insertion(+), 121 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/tnl_dd/t_dd_tritmp.h b/src/mesa/tnl_dd/t_dd_tritmp.h
index 6acd837317..708f7560ed 100644
--- a/src/mesa/tnl_dd/t_dd_tritmp.h
+++ b/src/mesa/tnl_dd/t_dd_tritmp.h
@@ -42,7 +42,6 @@
  * DO_UNFILLED:  Decompose triangles to lines and points where appropriate.
  * DO_TWOSTENCIL:Gross hack for two-sided stencil.
  *
- * HAVE_RGBA: Vertices have rgba values (otherwise index values).
  * HAVE_SPEC: Vertices have secondary rgba values.
  *
  * VERT_X(v): Alias for vertex x value.
@@ -59,29 +58,15 @@
  * VERT_COPY_RGBA: Copy vertex rgba another vertex.
  * VERT_SAVE_RGBA: Save vertex rgba to a local variable.
  * VERT_RESTORE_RGBA: Restore vertex rgba from a local variable.
- *   --> Similar for IND and SPEC.
+ *   --> Similar for SPEC.
  *
  * LOCAL_VARS(n): (At least) define local vars for save/restore rgba.
  *
  */
 
-#if HAVE_RGBA
-#define VERT_SET_IND( v, c ) (void) c
-#define VERT_COPY_IND( v0, v1 )
-#define VERT_SAVE_IND( idx )
-#define VERT_RESTORE_IND( idx )
 #if HAVE_BACK_COLORS
 #define VERT_SET_RGBA( v, c )
 #endif
-#else
-#define VERT_SET_RGBA( v, c ) (void) c
-#define VERT_COPY_RGBA( v0, v1 )
-#define VERT_SAVE_RGBA( idx )
-#define VERT_RESTORE_RGBA( idx )
-#if HAVE_BACK_COLORS
-#define VERT_SET_IND( v, c )
-#endif
-#endif
 
 #if !HAVE_SPEC
 #define VERT_SET_SPEC( v, c ) (void) c
@@ -99,7 +84,6 @@
 
 #if !HAVE_BACK_COLORS
 #define VERT_COPY_SPEC1( v )
-#define VERT_COPY_IND1( v )
 #define VERT_COPY_RGBA1( v )
 #endif
 
@@ -173,7 +157,6 @@ static void TAG(triangle)( GLcontext *ctx, GLuint e0, GLuint e1, GLuint e2 )
 
 	 if (DO_TWOSIDE && facing == 1)
 	 {
-	    if (HAVE_RGBA) {
 	       if (HAVE_BACK_COLORS) {
 		  if (!DO_FLAT) {
 		     VERT_SAVE_RGBA( 0 );
@@ -235,18 +218,6 @@ static void TAG(triangle)( GLcontext *ctx, GLuint e0, GLuint e1, GLuint e2 )
 		     VERT_SET_SPEC( v[2], vbspec[e2] );
 		  }
 	       }
-	    }
-	    else {
-	       GLfloat (*vbindex) = (GLfloat *)VB->BackfaceIndexPtr->data;
-	       if (!DO_FLAT) {
-		  VERT_SAVE_IND( 0 );
-		  VERT_SAVE_IND( 1 );
-		  VERT_SET_IND( v[0], vbindex[e0] );
-		  VERT_SET_IND( v[1], vbindex[e1] );
-	       }
-	       VERT_SAVE_IND( 2 );
-	       VERT_SET_IND( v[2], vbindex[e2] );
-	    }
 	 }
       }
 
@@ -274,7 +245,6 @@ static void TAG(triangle)( GLcontext *ctx, GLuint e0, GLuint e1, GLuint e2 )
    }
 
    if (DO_FLAT) {
-      if (HAVE_RGBA) {
 	 VERT_SAVE_RGBA( 0 );
 	 VERT_SAVE_RGBA( 1 );
 	 VERT_COPY_RGBA( v[0], v[2] );
@@ -285,13 +255,6 @@ static void TAG(triangle)( GLcontext *ctx, GLuint e0, GLuint e1, GLuint e2 )
 	    VERT_COPY_SPEC( v[0], v[2] );
 	    VERT_COPY_SPEC( v[1], v[2] );
 	 }
-      }
-      else {
-	 VERT_SAVE_IND( 0 );
-	 VERT_SAVE_IND( 1 );
-	 VERT_COPY_IND( v[0], v[2] );
-	 VERT_COPY_IND( v[1], v[2] );
-      }
    }
 
    if (mode == GL_POINT) {
@@ -346,7 +309,6 @@ static void TAG(triangle)( GLcontext *ctx, GLuint e0, GLuint e1, GLuint e2 )
 
    if (DO_TWOSIDE && facing == 1)
    {
-      if (HAVE_RGBA) {
 	 if (!DO_FLAT) {
 	    VERT_RESTORE_RGBA( 0 );
 	    VERT_RESTORE_RGBA( 1 );
@@ -359,30 +321,16 @@ static void TAG(triangle)( GLcontext *ctx, GLuint e0, GLuint e1, GLuint e2 )
 	    }
 	    VERT_RESTORE_SPEC( 2 );
 	 }
-      }
-      else {
-	 if (!DO_FLAT) {
-	    VERT_RESTORE_IND( 0 );
-	    VERT_RESTORE_IND( 1 );
-	 }
-	 VERT_RESTORE_IND( 2 );
-      }
    }
 
 
    if (DO_FLAT) {
-      if (HAVE_RGBA) {
 	 VERT_RESTORE_RGBA( 0 );
 	 VERT_RESTORE_RGBA( 1 );
 	 if (HAVE_SPEC && VB->AttribPtr[_TNL_ATTRIB_COLOR1]) {
 	    VERT_RESTORE_SPEC( 0 );
 	    VERT_RESTORE_SPEC( 1 );
 	 }
-      }
-      else {
-	 VERT_RESTORE_IND( 0 );
-	 VERT_RESTORE_IND( 1 );
-      }
    }
 }
 #endif
@@ -435,7 +383,6 @@ static void TAG(quadr)( GLcontext *ctx,
 
 	 if (DO_TWOSIDE && facing == 1)
 	 {
-	    if (HAVE_RGBA) {
 	       GLfloat (*vbcolor)[4] = VB->BackfaceColorPtr->data;
 	       (void)vbcolor;
 
@@ -504,20 +451,6 @@ static void TAG(quadr)( GLcontext *ctx,
 		     VERT_SET_SPEC( v[3], vbspec[e3] );
 	          }
 	       }
-	    }
-	    else {
-	       GLfloat *vbindex = (GLfloat *)VB->BackfaceIndexPtr->data;
-	       if (!DO_FLAT) {
-		  VERT_SAVE_IND( 0 );
-		  VERT_SAVE_IND( 1 );
-		  VERT_SAVE_IND( 2 );
-		  VERT_SET_IND( v[0], vbindex[e0] );
-		  VERT_SET_IND( v[1], vbindex[e1] );
-		  VERT_SET_IND( v[2], vbindex[e2] );
-	       }
-	       VERT_SAVE_IND( 3 );
-	       VERT_SET_IND( v[3], vbindex[e3] );
-	    }
 	 }
       }
 
@@ -546,7 +479,6 @@ static void TAG(quadr)( GLcontext *ctx,
    }
 
    if (DO_FLAT) {
-      if (HAVE_RGBA) {
 	 VERT_SAVE_RGBA( 0 );
 	 VERT_SAVE_RGBA( 1 );
 	 VERT_SAVE_RGBA( 2 );
@@ -561,15 +493,6 @@ static void TAG(quadr)( GLcontext *ctx,
 	    VERT_COPY_SPEC( v[1], v[3] );
 	    VERT_COPY_SPEC( v[2], v[3] );
 	 }
-      }
-      else {
-	 VERT_SAVE_IND( 0 );
-	 VERT_SAVE_IND( 1 );
-	 VERT_SAVE_IND( 2 );
-	 VERT_COPY_IND( v[0], v[3] );
-	 VERT_COPY_IND( v[1], v[3] );
-	 VERT_COPY_IND( v[2], v[3] );
-      }
    }
 
    if (mode == GL_POINT) {
@@ -627,7 +550,6 @@ static void TAG(quadr)( GLcontext *ctx,
 
    if (DO_TWOSIDE && facing == 1)
    {
-      if (HAVE_RGBA) {
 	 if (!DO_FLAT) {
 	    VERT_RESTORE_RGBA( 0 );
 	    VERT_RESTORE_RGBA( 1 );
@@ -642,20 +564,10 @@ static void TAG(quadr)( GLcontext *ctx,
 	    }
 	    VERT_RESTORE_SPEC( 3 );
 	 }
-      }
-      else {
-	 if (!DO_FLAT) {
-	    VERT_RESTORE_IND( 0 );
-	    VERT_RESTORE_IND( 1 );
-	    VERT_RESTORE_IND( 2 );
-	 }
-	 VERT_RESTORE_IND( 3 );
-      }
    }
 
 
    if (DO_FLAT) {
-      if (HAVE_RGBA) {
 	 VERT_RESTORE_RGBA( 0 );
 	 VERT_RESTORE_RGBA( 1 );
 	 VERT_RESTORE_RGBA( 2 );
@@ -664,12 +576,6 @@ static void TAG(quadr)( GLcontext *ctx,
 	    VERT_RESTORE_SPEC( 1 );
 	    VERT_RESTORE_SPEC( 2 );
 	 }
-      }
-      else {
-	 VERT_RESTORE_IND( 0 );
-	 VERT_RESTORE_IND( 1 );
-	 VERT_RESTORE_IND( 2 );
-      }
    }
 }
 #else
@@ -705,33 +611,22 @@ static void TAG(line)( GLcontext *ctx, GLuint e0, GLuint e1 )
    v[1] = (VERTEX *)GET_VERTEX(e1);
 
    if (DO_FLAT) {
-      if (HAVE_RGBA) {
 	 VERT_SAVE_RGBA( 0 );
 	 VERT_COPY_RGBA( v[0], v[1] );
 	 if (HAVE_SPEC && VB->AttribPtr[_TNL_ATTRIB_COLOR1]) {
 	    VERT_SAVE_SPEC( 0 );
 	    VERT_COPY_SPEC( v[0], v[1] );
 	 }
-      }
-      else {
-	 VERT_SAVE_IND( 0 );
-	 VERT_COPY_IND( v[0], v[1] );
-      }
    }
 
    LINE( v[0], v[1] );
 
    if (DO_FLAT) {
-      if (HAVE_RGBA) {
 	 VERT_RESTORE_RGBA( 0 );
 
 	 if (HAVE_SPEC && VB->AttribPtr[_TNL_ATTRIB_COLOR1]) {
 	    VERT_RESTORE_SPEC( 0 );
 	 }
-      }
-      else {
-	 VERT_RESTORE_IND( 0 );
-      }
    }
 }
 #endif
@@ -781,23 +676,9 @@ static void TAG(init)( void )
 #undef IND
 #undef TAG
 
-#if HAVE_RGBA
-#undef VERT_SET_IND
-#undef VERT_COPY_IND
-#undef VERT_SAVE_IND
-#undef VERT_RESTORE_IND
 #if HAVE_BACK_COLORS
 #undef VERT_SET_RGBA
 #endif
-#else
-#undef VERT_SET_RGBA
-#undef VERT_COPY_RGBA
-#undef VERT_SAVE_RGBA
-#undef VERT_RESTORE_RGBA
-#if HAVE_BACK_COLORS
-#undef VERT_SET_IND
-#endif
-#endif
 
 #if !HAVE_SPEC
 #undef VERT_SET_SPEC
@@ -815,7 +696,6 @@ static void TAG(init)( void )
 
 #if !HAVE_BACK_COLORS
 #undef VERT_COPY_SPEC1
-#undef VERT_COPY_IND1
 #undef VERT_COPY_RGBA1
 #endif
 
-- 
cgit v1.2.3


From e00b50c39ad13090c74877a421d10483c3c5bab1 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Fri, 26 Feb 2010 17:45:27 -0800
Subject: mesa/tnl_dd: White-space / indentation fixes after previous commit

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/tnl_dd/t_dd_tritmp.h | 296 +++++++++++++++++++++---------------------
 1 file changed, 146 insertions(+), 150 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/tnl_dd/t_dd_tritmp.h b/src/mesa/tnl_dd/t_dd_tritmp.h
index 708f7560ed..2c36d845ab 100644
--- a/src/mesa/tnl_dd/t_dd_tritmp.h
+++ b/src/mesa/tnl_dd/t_dd_tritmp.h
@@ -155,69 +155,68 @@ static void TAG(triangle)( GLcontext *ctx, GLuint e0, GLuint e1, GLuint e2 )
 	    }
 	 }
 
-	 if (DO_TWOSIDE && facing == 1)
-	 {
-	       if (HAVE_BACK_COLORS) {
+	 if (DO_TWOSIDE && facing == 1) {
+	    if (HAVE_BACK_COLORS) {
+	       if (!DO_FLAT) {
+		  VERT_SAVE_RGBA( 0 );
+		  VERT_SAVE_RGBA( 1 );
+		  VERT_COPY_RGBA1( v[0] );
+		  VERT_COPY_RGBA1( v[1] );
+	       }
+	       VERT_SAVE_RGBA( 2 );
+	       VERT_COPY_RGBA1( v[2] );
+	       if (HAVE_SPEC) {
 		  if (!DO_FLAT) {
-		     VERT_SAVE_RGBA( 0 );
-		     VERT_SAVE_RGBA( 1 );
-		     VERT_COPY_RGBA1( v[0] );
-		     VERT_COPY_RGBA1( v[1] );
-		  }
-		  VERT_SAVE_RGBA( 2 );
-		  VERT_COPY_RGBA1( v[2] );
-		  if (HAVE_SPEC) {
-		     if (!DO_FLAT) {
-			VERT_SAVE_SPEC( 0 );
-			VERT_SAVE_SPEC( 1 );
-			VERT_COPY_SPEC1( v[0] );
-			VERT_COPY_SPEC1( v[1] );
-		     }
-		     VERT_SAVE_SPEC( 2 );
-		     VERT_COPY_SPEC1( v[2] );
+		     VERT_SAVE_SPEC( 0 );
+		     VERT_SAVE_SPEC( 1 );
+		     VERT_COPY_SPEC1( v[0] );
+		     VERT_COPY_SPEC1( v[1] );
 		  }
+		  VERT_SAVE_SPEC( 2 );
+		  VERT_COPY_SPEC1( v[2] );
 	       }
-	       else {
-		  GLfloat (*vbcolor)[4] = VB->BackfaceColorPtr->data;
-		  (void) vbcolor;
+	    }
+	    else {
+	       GLfloat (*vbcolor)[4] = VB->BackfaceColorPtr->data;
+	       (void) vbcolor;
 
-		  if (!DO_FLAT) {
-		     VERT_SAVE_RGBA( 0 );
-		     VERT_SAVE_RGBA( 1 );
-		  }
-		  VERT_SAVE_RGBA( 2 );
+	       if (!DO_FLAT) {
+		  VERT_SAVE_RGBA( 0 );
+		  VERT_SAVE_RGBA( 1 );
+	       }
+	       VERT_SAVE_RGBA( 2 );
 
-		  if (VB->BackfaceColorPtr->stride) {
-		     ASSERT(VB->BackfaceColorPtr->stride == 4*sizeof(GLfloat));
+	       if (VB->BackfaceColorPtr->stride) {
+		  ASSERT(VB->BackfaceColorPtr->stride == 4*sizeof(GLfloat));
 
-		     if (!DO_FLAT) {		  
-			VERT_SET_RGBA( v[0], vbcolor[e0] );
-			VERT_SET_RGBA( v[1], vbcolor[e1] );
-		     }
-		     VERT_SET_RGBA( v[2], vbcolor[e2] );
+		  if (!DO_FLAT) {
+		     VERT_SET_RGBA( v[0], vbcolor[e0] );
+		     VERT_SET_RGBA( v[1], vbcolor[e1] );
 		  }
-		  else {
-		     if (!DO_FLAT) {		  
-			VERT_SET_RGBA( v[0], vbcolor[0] );
-			VERT_SET_RGBA( v[1], vbcolor[0] );
-		     }
-		     VERT_SET_RGBA( v[2], vbcolor[0] );
+		  VERT_SET_RGBA( v[2], vbcolor[e2] );
+	       }
+	       else {
+		  if (!DO_FLAT) {
+		     VERT_SET_RGBA( v[0], vbcolor[0] );
+		     VERT_SET_RGBA( v[1], vbcolor[0] );
 		  }
+		  VERT_SET_RGBA( v[2], vbcolor[0] );
+	       }
 
-		  if (HAVE_SPEC && VB->BackfaceSecondaryColorPtr) {
-		     GLfloat (*vbspec)[4] = VB->BackfaceSecondaryColorPtr->data;
-		     ASSERT(VB->BackfaceSecondaryColorPtr->stride == 4*sizeof(GLfloat));
+	       if (HAVE_SPEC && VB->BackfaceSecondaryColorPtr) {
+		  GLfloat (*vbspec)[4] = VB->BackfaceSecondaryColorPtr->data;
+		  ASSERT(VB->BackfaceSecondaryColorPtr->stride == 4*sizeof(GLfloat));
 
-		     if (!DO_FLAT) {
-			VERT_SAVE_SPEC( 0 );
-			VERT_SAVE_SPEC( 1 );
-			VERT_SET_SPEC( v[0], vbspec[e0] );
-			VERT_SET_SPEC( v[1], vbspec[e1] );
-		     }
-		     VERT_SAVE_SPEC( 2 );
-		     VERT_SET_SPEC( v[2], vbspec[e2] );
+		  if (!DO_FLAT) {
+		     VERT_SAVE_SPEC( 0 );
+		     VERT_SAVE_SPEC( 1 );
+		     VERT_SET_SPEC( v[0], vbspec[e0] );
+		     VERT_SET_SPEC( v[1], vbspec[e1] );
 		  }
+		  VERT_SAVE_SPEC( 2 );
+		  VERT_SET_SPEC( v[2], vbspec[e2] );
 	       }
+	    }
 	 }
       }
 
@@ -245,16 +244,16 @@ static void TAG(triangle)( GLcontext *ctx, GLuint e0, GLuint e1, GLuint e2 )
    }
 
    if (DO_FLAT) {
-	 VERT_SAVE_RGBA( 0 );
-	 VERT_SAVE_RGBA( 1 );
-	 VERT_COPY_RGBA( v[0], v[2] );
-	 VERT_COPY_RGBA( v[1], v[2] );
-	 if (HAVE_SPEC && VB->AttribPtr[_TNL_ATTRIB_COLOR1]) {
-	    VERT_SAVE_SPEC( 0 );
-	    VERT_SAVE_SPEC( 1 );
-	    VERT_COPY_SPEC( v[0], v[2] );
-	    VERT_COPY_SPEC( v[1], v[2] );
-	 }
+      VERT_SAVE_RGBA( 0 );
+      VERT_SAVE_RGBA( 1 );
+      VERT_COPY_RGBA( v[0], v[2] );
+      VERT_COPY_RGBA( v[1], v[2] );
+      if (HAVE_SPEC && VB->AttribPtr[_TNL_ATTRIB_COLOR1]) {
+	 VERT_SAVE_SPEC( 0 );
+	 VERT_SAVE_SPEC( 1 );
+	 VERT_COPY_SPEC( v[0], v[2] );
+	 VERT_COPY_SPEC( v[1], v[2] );
+      }
    }
 
    if (mode == GL_POINT) {
@@ -307,20 +306,19 @@ static void TAG(triangle)( GLcontext *ctx, GLuint e0, GLuint e1, GLuint e2 )
       VERT_SET_Z(v[2], z[2]);
    }
 
-   if (DO_TWOSIDE && facing == 1)
-   {
+   if (DO_TWOSIDE && facing == 1) {
+      if (!DO_FLAT) {
+	 VERT_RESTORE_RGBA( 0 );
+	 VERT_RESTORE_RGBA( 1 );
+      }
+      VERT_RESTORE_RGBA( 2 );
+      if (HAVE_SPEC) {
 	 if (!DO_FLAT) {
-	    VERT_RESTORE_RGBA( 0 );
-	    VERT_RESTORE_RGBA( 1 );
-	 }
-	 VERT_RESTORE_RGBA( 2 );
-	 if (HAVE_SPEC) {
-	    if (!DO_FLAT) {
-	       VERT_RESTORE_SPEC( 0 );
-	       VERT_RESTORE_SPEC( 1 );
-	    }
-	    VERT_RESTORE_SPEC( 2 );
+	    VERT_RESTORE_SPEC( 0 );
+	    VERT_RESTORE_SPEC( 1 );
 	 }
+	 VERT_RESTORE_SPEC( 2 );
+      }
    }
 
 
@@ -381,76 +379,75 @@ static void TAG(quadr)( GLcontext *ctx,
 	    }
 	 }
 
-	 if (DO_TWOSIDE && facing == 1)
-	 {
-	       GLfloat (*vbcolor)[4] = VB->BackfaceColorPtr->data;
-	       (void)vbcolor;
-
-	       if (HAVE_BACK_COLORS) {
-                  if (!DO_FLAT) {
-                     VERT_SAVE_RGBA( 0 );
-                     VERT_SAVE_RGBA( 1 );
-                     VERT_SAVE_RGBA( 2 );
-		     VERT_COPY_RGBA1( v[0] );
-		     VERT_COPY_RGBA1( v[1] );
-		     VERT_COPY_RGBA1( v[2] );
+	 if (DO_TWOSIDE && facing == 1) {
+	    GLfloat (*vbcolor)[4] = VB->BackfaceColorPtr->data;
+	    (void)vbcolor;
+
+	    if (HAVE_BACK_COLORS) {
+	       if (!DO_FLAT) {
+		  VERT_SAVE_RGBA( 0 );
+		  VERT_SAVE_RGBA( 1 );
+		  VERT_SAVE_RGBA( 2 );
+		  VERT_COPY_RGBA1( v[0] );
+		  VERT_COPY_RGBA1( v[1] );
+		  VERT_COPY_RGBA1( v[2] );
+	       }
+	       VERT_SAVE_RGBA( 3 );
+	       VERT_COPY_RGBA1( v[3] );
+	       if (HAVE_SPEC) {
+		  if (!DO_FLAT) {
+		     VERT_SAVE_SPEC( 0 );
+		     VERT_SAVE_SPEC( 1 );
+		     VERT_SAVE_SPEC( 2 );
+		     VERT_COPY_SPEC1( v[0] );
+		     VERT_COPY_SPEC1( v[1] );
+		     VERT_COPY_SPEC1( v[2] );
 		  }
-		  VERT_SAVE_RGBA( 3 );
-		  VERT_COPY_RGBA1( v[3] );
-		  if (HAVE_SPEC) {
-                     if (!DO_FLAT) {
-                        VERT_SAVE_SPEC( 0 );
-                        VERT_SAVE_SPEC( 1 );
-                        VERT_SAVE_SPEC( 2 );
-			VERT_COPY_SPEC1( v[0] );
-			VERT_COPY_SPEC1( v[1] );
-			VERT_COPY_SPEC1( v[2] );
-		     }
-		     VERT_SAVE_SPEC( 3 );
-		     VERT_COPY_SPEC1( v[3] );
+		  VERT_SAVE_SPEC( 3 );
+		  VERT_COPY_SPEC1( v[3] );
+	       }
+	    }
+	    else {
+	       if (!DO_FLAT) {
+		  VERT_SAVE_RGBA( 0 );
+		  VERT_SAVE_RGBA( 1 );
+		  VERT_SAVE_RGBA( 2 );
+	       }
+	       VERT_SAVE_RGBA( 3 );
+
+	       if (VB->BackfaceColorPtr->stride) {
+		  if (!DO_FLAT) {
+		     VERT_SET_RGBA( v[0], vbcolor[e0] );
+		     VERT_SET_RGBA( v[1], vbcolor[e1] );
+		     VERT_SET_RGBA( v[2], vbcolor[e2] );
 		  }
+		  VERT_SET_RGBA( v[3], vbcolor[e3] );
 	       }
 	       else {
-	          if (!DO_FLAT) {
-		     VERT_SAVE_RGBA( 0 );
-		     VERT_SAVE_RGBA( 1 );
-		     VERT_SAVE_RGBA( 2 );
-		  }
-	          VERT_SAVE_RGBA( 3 );
-
-		  if (VB->BackfaceColorPtr->stride) {
-		     if (!DO_FLAT) {
-			VERT_SET_RGBA( v[0], vbcolor[e0] );
-			VERT_SET_RGBA( v[1], vbcolor[e1] );
-			VERT_SET_RGBA( v[2], vbcolor[e2] );
-		     }
-		     VERT_SET_RGBA( v[3], vbcolor[e3] );
-		  }
-		  else {
-		     if (!DO_FLAT) {
-			VERT_SET_RGBA( v[0], vbcolor[0] );
-			VERT_SET_RGBA( v[1], vbcolor[0] );
-			VERT_SET_RGBA( v[2], vbcolor[0] );
-		     }
-		     VERT_SET_RGBA( v[3], vbcolor[0] );
+		  if (!DO_FLAT) {
+		     VERT_SET_RGBA( v[0], vbcolor[0] );
+		     VERT_SET_RGBA( v[1], vbcolor[0] );
+		     VERT_SET_RGBA( v[2], vbcolor[0] );
 		  }
+		  VERT_SET_RGBA( v[3], vbcolor[0] );
+	       }
+
+	       if (HAVE_SPEC && VB->BackfaceSecondaryColorPtr) {
+		  GLfloat (*vbspec)[4] = VB->BackfaceSecondaryColorPtr->data;
+		  ASSERT(VB->BackfaceSecondaryColorPtr->stride==4*sizeof(GLfloat));
 
-	          if (HAVE_SPEC && VB->BackfaceSecondaryColorPtr) {
-		     GLfloat (*vbspec)[4] = VB->BackfaceSecondaryColorPtr->data;
-		     ASSERT(VB->BackfaceSecondaryColorPtr->stride==4*sizeof(GLfloat));
-
-		     if (!DO_FLAT) {
-		        VERT_SAVE_SPEC( 0 );
-		        VERT_SAVE_SPEC( 1 );
-		        VERT_SAVE_SPEC( 2 );
-		        VERT_SET_SPEC( v[0], vbspec[e0] );
-		        VERT_SET_SPEC( v[1], vbspec[e1] );
-		        VERT_SET_SPEC( v[2], vbspec[e2] );
-		     }
-		     VERT_SAVE_SPEC( 3 );
-		     VERT_SET_SPEC( v[3], vbspec[e3] );
-	          }
+		  if (!DO_FLAT) {
+		     VERT_SAVE_SPEC( 0 );
+		     VERT_SAVE_SPEC( 1 );
+		     VERT_SAVE_SPEC( 2 );
+		     VERT_SET_SPEC( v[0], vbspec[e0] );
+		     VERT_SET_SPEC( v[1], vbspec[e1] );
+		     VERT_SET_SPEC( v[2], vbspec[e2] );
+		  }
+		  VERT_SAVE_SPEC( 3 );
+		  VERT_SET_SPEC( v[3], vbspec[e3] );
 	       }
+	    }
 	 }
       }
 
@@ -548,22 +545,21 @@ static void TAG(quadr)( GLcontext *ctx,
       VERT_SET_Z(v[3], z[3]);
    }
 
-   if (DO_TWOSIDE && facing == 1)
-   {
+   if (DO_TWOSIDE && facing == 1) {
+      if (!DO_FLAT) {
+	 VERT_RESTORE_RGBA( 0 );
+	 VERT_RESTORE_RGBA( 1 );
+	 VERT_RESTORE_RGBA( 2 );
+      }
+      VERT_RESTORE_RGBA( 3 );
+      if (HAVE_SPEC) {
 	 if (!DO_FLAT) {
-	    VERT_RESTORE_RGBA( 0 );
-	    VERT_RESTORE_RGBA( 1 );
-	    VERT_RESTORE_RGBA( 2 );
-	 }
-	 VERT_RESTORE_RGBA( 3 );
-	 if (HAVE_SPEC) {
-	    if (!DO_FLAT) {
-	       VERT_RESTORE_SPEC( 0 );
-	       VERT_RESTORE_SPEC( 1 );
-	       VERT_RESTORE_SPEC( 2 );
-	    }
-	    VERT_RESTORE_SPEC( 3 );
+	    VERT_RESTORE_SPEC( 0 );
+	    VERT_RESTORE_SPEC( 1 );
+	    VERT_RESTORE_SPEC( 2 );
 	 }
+	 VERT_RESTORE_SPEC( 3 );
+      }
    }
 
 
-- 
cgit v1.2.3


From 889a0f34717e84778de33ab4e6c43d5627d5b4c9 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Fri, 26 Feb 2010 17:54:59 -0800
Subject: mesa/tnl_dd: Remove color-index support from t_dd_unfilled.h

The code removal and the re-indent were done together for this one
because the cause of the affected code blocks is much, much smaller
than in t_dd_tritmp.h.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/tnl_dd/t_dd_unfilled.h | 117 +++++++++++++---------------------------
 1 file changed, 38 insertions(+), 79 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/tnl_dd/t_dd_unfilled.h b/src/mesa/tnl_dd/t_dd_unfilled.h
index e4d82aa080..9c467291a1 100644
--- a/src/mesa/tnl_dd/t_dd_unfilled.h
+++ b/src/mesa/tnl_dd/t_dd_unfilled.h
@@ -25,13 +25,6 @@
  *    Keith Whitwell <keith@tungstengraphics.com>
  */
 
-#if HAVE_RGBA
-#define VERT_SET_IND( v, c )
-#define VERT_COPY_IND( v0, v1 )
-#define VERT_SAVE_IND( idx )
-#define VERT_RESTORE_IND( idx )
-#endif
-
 #if !HAVE_SPEC
 #define VERT_SET_SPEC( v, c )
 #define VERT_COPY_SPEC( v0, v1 )
@@ -53,23 +46,16 @@ static void TAG(unfilled_tri)( GLcontext *ctx,
    v[2] = (VERTEX *)GET_VERTEX(e2);
 
    if (ctx->Light.ShadeModel == GL_FLAT && HAVE_HW_FLATSHADE) {
-      if (HAVE_RGBA) {
-	 VERT_SAVE_RGBA(0);
-	 VERT_SAVE_RGBA(1);
-	 VERT_COPY_RGBA(v[0], v[2]);
-	 VERT_COPY_RGBA(v[1], v[2]);
-
-	 if (HAVE_SPEC) {
-	    VERT_SAVE_SPEC(0);
-	    VERT_SAVE_SPEC(1);
-	    VERT_COPY_SPEC(v[0], v[2]);
-	    VERT_COPY_SPEC(v[1], v[2]);
-	 }
-      } else {
-	 VERT_SAVE_IND(0);
-	 VERT_SAVE_IND(1);
-	 VERT_COPY_IND(v[0], v[2]);
-	 VERT_COPY_IND(v[1], v[2]);
+      VERT_SAVE_RGBA(0);
+      VERT_SAVE_RGBA(1);
+      VERT_COPY_RGBA(v[0], v[2]);
+      VERT_COPY_RGBA(v[1], v[2]);
+
+      if (HAVE_SPEC) {
+	 VERT_SAVE_SPEC(0);
+	 VERT_SAVE_SPEC(1);
+	 VERT_COPY_SPEC(v[0], v[2]);
+	 VERT_COPY_SPEC(v[1], v[2]);
       }
    }
 
@@ -98,17 +84,12 @@ static void TAG(unfilled_tri)( GLcontext *ctx,
    }
 
    if (ctx->Light.ShadeModel == GL_FLAT && HAVE_HW_FLATSHADE) {
-      if (HAVE_RGBA) {
-	 VERT_RESTORE_RGBA(0);
-	 VERT_RESTORE_RGBA(1);
-
-	 if (HAVE_SPEC) {
-	    VERT_RESTORE_SPEC(0);
-	    VERT_RESTORE_SPEC(1);
-	 }
-      } else {
-	 VERT_RESTORE_IND(0);
-	 VERT_RESTORE_IND(1);
+      VERT_RESTORE_RGBA(0);
+      VERT_RESTORE_RGBA(1);
+
+      if (HAVE_SPEC) {
+	 VERT_RESTORE_SPEC(0);
+	 VERT_RESTORE_SPEC(1);
       }
    }
 }
@@ -133,29 +114,20 @@ static void TAG(unfilled_quad)( GLcontext *ctx,
     * support flatshading, this will already have been done:
     */
    if (ctx->Light.ShadeModel == GL_FLAT && HAVE_HW_FLATSHADE) {
-      if (HAVE_RGBA) {
-	 VERT_SAVE_RGBA(0);
-	 VERT_SAVE_RGBA(1);
-	 VERT_SAVE_RGBA(2);
-	 VERT_COPY_RGBA(v[0], v[3]);
-	 VERT_COPY_RGBA(v[1], v[3]);
-	 VERT_COPY_RGBA(v[2], v[3]);
-
-	 if (HAVE_SPEC) {
-	    VERT_SAVE_SPEC(0);
-	    VERT_SAVE_SPEC(1);
-	    VERT_SAVE_SPEC(2);
-	    VERT_COPY_SPEC(v[0], v[3]);
-	    VERT_COPY_SPEC(v[1], v[3]);
-	    VERT_COPY_SPEC(v[2], v[3]);
-	 }
-      } else {
-	 VERT_SAVE_IND(0);
-	 VERT_SAVE_IND(1);
-	 VERT_SAVE_IND(2);
-	 VERT_COPY_IND(v[0], v[3]);
-	 VERT_COPY_IND(v[1], v[3]);
-	 VERT_COPY_IND(v[2], v[3]);
+      VERT_SAVE_RGBA(0);
+      VERT_SAVE_RGBA(1);
+      VERT_SAVE_RGBA(2);
+      VERT_COPY_RGBA(v[0], v[3]);
+      VERT_COPY_RGBA(v[1], v[3]);
+      VERT_COPY_RGBA(v[2], v[3]);
+
+      if (HAVE_SPEC) {
+	 VERT_SAVE_SPEC(0);
+	 VERT_SAVE_SPEC(1);
+	 VERT_SAVE_SPEC(2);
+	 VERT_COPY_SPEC(v[0], v[3]);
+	 VERT_COPY_SPEC(v[1], v[3]);
+	 VERT_COPY_SPEC(v[2], v[3]);
       }
    }
 
@@ -175,32 +147,19 @@ static void TAG(unfilled_quad)( GLcontext *ctx,
    }
 
    if (ctx->Light.ShadeModel == GL_FLAT && HAVE_HW_FLATSHADE) {
-      if (HAVE_RGBA) {
-	 VERT_RESTORE_RGBA(0);
-	 VERT_RESTORE_RGBA(1);
-	 VERT_RESTORE_RGBA(2);
-
-	 if (HAVE_SPEC) {
-	    VERT_RESTORE_SPEC(0);
-	    VERT_RESTORE_SPEC(1);
-	    VERT_RESTORE_SPEC(2);
-	 }
-      } else {
-	 VERT_RESTORE_IND(0);
-	 VERT_RESTORE_IND(1);
-	 VERT_RESTORE_IND(2);
+      VERT_RESTORE_RGBA(0);
+      VERT_RESTORE_RGBA(1);
+      VERT_RESTORE_RGBA(2);
+
+      if (HAVE_SPEC) {
+	 VERT_RESTORE_SPEC(0);
+	 VERT_RESTORE_SPEC(1);
+	 VERT_RESTORE_SPEC(2);
       }
    }
 }
 
 
-#if HAVE_RGBA
-#undef VERT_SET_IND
-#undef VERT_COPY_IND
-#undef VERT_SAVE_IND
-#undef VERT_RESTORE_IND
-#endif
-
 #if !HAVE_SPEC
 #undef VERT_SET_SPEC
 #undef VERT_COPY_SPEC
-- 
cgit v1.2.3


From 0384214923216b4bb7340070d08fcda2cbb79a93 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Fri, 26 Feb 2010 17:58:53 -0800
Subject: Remove stray defines of HAVE_RGBA

Now that color-index support is removed from t_dd_tritmp.h and
t_dd_unfilled.h, drivers no longer need define HAVE_RGBA.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/drivers/dri/i810/i810tris.c       | 1 -
 src/mesa/drivers/dri/i915/intel_tris.c     | 1 -
 src/mesa/drivers/dri/mach64/mach64_tris.c  | 1 -
 src/mesa/drivers/dri/mga/mgatris.c         | 1 -
 src/mesa/drivers/dri/r128/r128_tris.c      | 1 -
 src/mesa/drivers/dri/r200/r200_swtcl.c     | 1 -
 src/mesa/drivers/dri/r300/r300_swtcl.c     | 1 -
 src/mesa/drivers/dri/radeon/radeon_swtcl.c | 1 -
 src/mesa/drivers/dri/savage/savagetris.c   | 1 -
 src/mesa/drivers/dri/sis/sis_tris.c        | 1 -
 src/mesa/drivers/dri/tdfx/tdfx_tris.c      | 1 -
 src/mesa/drivers/dri/unichrome/via_tris.c  | 1 -
 12 files changed, 12 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i810/i810tris.c b/src/mesa/drivers/dri/i810/i810tris.c
index 213ba541ce..1492f711c9 100644
--- a/src/mesa/drivers/dri/i810/i810tris.c
+++ b/src/mesa/drivers/dri/i810/i810tris.c
@@ -218,7 +218,6 @@ static struct {
 #define DO_POINTS    1
 #define DO_FULL_QUAD 1
 
-#define HAVE_RGBA         1
 #define HAVE_SPEC         1
 #define HAVE_BACK_COLORS  0
 #define HAVE_HW_FLATSHADE 1
diff --git a/src/mesa/drivers/dri/i915/intel_tris.c b/src/mesa/drivers/dri/i915/intel_tris.c
index e63cd97db6..fb191fe346 100644
--- a/src/mesa/drivers/dri/i915/intel_tris.c
+++ b/src/mesa/drivers/dri/i915/intel_tris.c
@@ -603,7 +603,6 @@ static struct
 #define DO_POINTS    1
 #define DO_FULL_QUAD 1
 
-#define HAVE_RGBA         1
 #define HAVE_SPEC         1
 #define HAVE_BACK_COLORS  0
 #define HAVE_HW_FLATSHADE 1
diff --git a/src/mesa/drivers/dri/mach64/mach64_tris.c b/src/mesa/drivers/dri/mach64/mach64_tris.c
index c2a0adfef0..a81d21afff 100644
--- a/src/mesa/drivers/dri/mach64/mach64_tris.c
+++ b/src/mesa/drivers/dri/mach64/mach64_tris.c
@@ -1248,7 +1248,6 @@ static struct {
 #define DO_POINTS    1
 #define DO_FULL_QUAD 1
 
-#define HAVE_RGBA   1
 #define HAVE_SPEC   1
 #define HAVE_BACK_COLORS  0
 #define HAVE_HW_FLATSHADE 1
diff --git a/src/mesa/drivers/dri/mga/mgatris.c b/src/mesa/drivers/dri/mga/mgatris.c
index 4c58c3bdb0..07cf682f6e 100644
--- a/src/mesa/drivers/dri/mga/mgatris.c
+++ b/src/mesa/drivers/dri/mga/mgatris.c
@@ -347,7 +347,6 @@ static struct {
 #define DO_POINTS    1
 #define DO_FULL_QUAD 1
 
-#define HAVE_RGBA         1
 #define HAVE_BACK_COLORS  0
 #define HAVE_SPEC         1
 #define HAVE_HW_FLATSHADE 0
diff --git a/src/mesa/drivers/dri/r128/r128_tris.c b/src/mesa/drivers/dri/r128/r128_tris.c
index 86d4717b05..9ea2a9d162 100644
--- a/src/mesa/drivers/dri/r128/r128_tris.c
+++ b/src/mesa/drivers/dri/r128/r128_tris.c
@@ -158,7 +158,6 @@ static struct {
 #define DO_POINTS    1
 #define DO_FULL_QUAD 1
 
-#define HAVE_RGBA   1
 #define HAVE_SPEC   1
 #define HAVE_BACK_COLORS  0
 #define HAVE_HW_FLATSHADE 1
diff --git a/src/mesa/drivers/dri/r200/r200_swtcl.c b/src/mesa/drivers/dri/r200/r200_swtcl.c
index e220e40b01..262fe3cdde 100644
--- a/src/mesa/drivers/dri/r200/r200_swtcl.c
+++ b/src/mesa/drivers/dri/r200/r200_swtcl.c
@@ -420,7 +420,6 @@ static struct {
 #define DO_POINTS    1
 #define DO_FULL_QUAD 1
 
-#define HAVE_RGBA   1
 #define HAVE_SPEC   1
 #define HAVE_BACK_COLORS  0
 #define HAVE_HW_FLATSHADE 1
diff --git a/src/mesa/drivers/dri/r300/r300_swtcl.c b/src/mesa/drivers/dri/r300/r300_swtcl.c
index 93983cee20..4dcc7cb022 100644
--- a/src/mesa/drivers/dri/r300/r300_swtcl.c
+++ b/src/mesa/drivers/dri/r300/r300_swtcl.c
@@ -364,7 +364,6 @@ static struct {
 #define DO_POINTS    1
 #define DO_FULL_QUAD 1
 
-#define HAVE_RGBA   1
 #define HAVE_SPEC   1
 #define HAVE_BACK_COLORS  0
 #define HAVE_HW_FLATSHADE 1
diff --git a/src/mesa/drivers/dri/radeon/radeon_swtcl.c b/src/mesa/drivers/dri/radeon/radeon_swtcl.c
index 5a71b510fa..f2fcb46688 100644
--- a/src/mesa/drivers/dri/radeon/radeon_swtcl.c
+++ b/src/mesa/drivers/dri/radeon/radeon_swtcl.c
@@ -524,7 +524,6 @@ static struct {
 #define DO_POINTS    1
 #define DO_FULL_QUAD 1
 
-#define HAVE_RGBA   1
 #define HAVE_SPEC   1
 #define HAVE_BACK_COLORS  0
 #define HAVE_HW_FLATSHADE 1
diff --git a/src/mesa/drivers/dri/savage/savagetris.c b/src/mesa/drivers/dri/savage/savagetris.c
index a177a7d2b6..0050485e31 100644
--- a/src/mesa/drivers/dri/savage/savagetris.c
+++ b/src/mesa/drivers/dri/savage/savagetris.c
@@ -387,7 +387,6 @@ static struct {
 #define DO_POINTS    1
 #define DO_FULL_QUAD 1
 
-#define HAVE_RGBA   1
 #define HAVE_SPEC   1
 #define HAVE_BACK_COLORS  0
 #define HAVE_HW_FLATSHADE 1
diff --git a/src/mesa/drivers/dri/sis/sis_tris.c b/src/mesa/drivers/dri/sis/sis_tris.c
index e7471f9789..d109a8c41e 100644
--- a/src/mesa/drivers/dri/sis/sis_tris.c
+++ b/src/mesa/drivers/dri/sis/sis_tris.c
@@ -375,7 +375,6 @@ static struct {
 #define DO_POINTS    1
 #define DO_FULL_QUAD 1
 
-#define HAVE_RGBA   1
 #define HAVE_SPEC   1
 #define HAVE_BACK_COLORS  0
 #define HAVE_HW_FLATSHADE 1
diff --git a/src/mesa/drivers/dri/tdfx/tdfx_tris.c b/src/mesa/drivers/dri/tdfx/tdfx_tris.c
index 8824988895..d65833c20b 100644
--- a/src/mesa/drivers/dri/tdfx/tdfx_tris.c
+++ b/src/mesa/drivers/dri/tdfx/tdfx_tris.c
@@ -320,7 +320,6 @@ static struct {
 #define DO_POINTS    1
 #define DO_FULL_QUAD 1
 
-#define HAVE_RGBA   1
 #define HAVE_SPEC   0
 #define HAVE_HW_FLATSHADE 0
 #define HAVE_BACK_COLORS  0
diff --git a/src/mesa/drivers/dri/unichrome/via_tris.c b/src/mesa/drivers/dri/unichrome/via_tris.c
index 01359d51ea..be3c9a770f 100644
--- a/src/mesa/drivers/dri/unichrome/via_tris.c
+++ b/src/mesa/drivers/dri/unichrome/via_tris.c
@@ -257,7 +257,6 @@ static struct {
 #define DO_POINTS    1
 #define DO_FULL_QUAD 1
 
-#define HAVE_RGBA         1
 #define HAVE_SPEC         1
 #define HAVE_BACK_COLORS  0
 #define HAVE_HW_FLATSHADE 1
-- 
cgit v1.2.3


From 3594bf233d16ceb21e97fcdfb57ea45cb0c5e41b Mon Sep 17 00:00:00 2001
From: Alex Deucher <alexdeucher@gmail.com>
Date: Wed, 3 Mar 2010 16:12:22 -0500
Subject: radeon/r200/r300/r600: add check_blit vtbl function

Check if the native blit formats are supported, if not,
attempt to use an alternate format.

Skip 3, >4 bpp as per comments from mcencora on irc.

Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
---
 src/mesa/drivers/dri/r200/r200_blit.c              |  4 +-
 src/mesa/drivers/dri/r200/r200_blit.h              |  2 +
 src/mesa/drivers/dri/r200/r200_context.c           |  1 +
 src/mesa/drivers/dri/r300/r300_blit.c              |  4 +-
 src/mesa/drivers/dri/r300/r300_blit.h              |  4 +-
 src/mesa/drivers/dri/r300/r300_context.c           |  3 +-
 src/mesa/drivers/dri/r600/r600_blit.c              |  4 +-
 src/mesa/drivers/dri/r600/r600_blit.h              | 33 ++++++++++++++++
 src/mesa/drivers/dri/r600/r600_context.c           |  1 +
 src/mesa/drivers/dri/radeon/radeon_blit.c          |  4 +-
 src/mesa/drivers/dri/radeon/radeon_blit.h          |  2 +
 .../drivers/dri/radeon/radeon_common_context.h     |  1 +
 src/mesa/drivers/dri/radeon/radeon_context.c       |  1 +
 src/mesa/drivers/dri/radeon/radeon_tex_copy.c      | 44 +++++++++++++++++++---
 14 files changed, 93 insertions(+), 15 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r200/r200_blit.c b/src/mesa/drivers/dri/r200/r200_blit.c
index 56b08a21bd..b56327dad5 100644
--- a/src/mesa/drivers/dri/r200/r200_blit.c
+++ b/src/mesa/drivers/dri/r200/r200_blit.c
@@ -38,7 +38,7 @@ static inline uint32_t cmdpacket0(struct radeon_screen *rscrn,
 }
 
 /* common formats supported as both textures and render targets */
-static unsigned is_blit_supported(gl_format mesa_format)
+unsigned r200_check_blit(gl_format mesa_format)
 {
     /* XXX others?  BE/LE? */
     switch (mesa_format) {
@@ -337,7 +337,7 @@ unsigned r200_blit(GLcontext *ctx,
 {
     struct r200_context *r200 = R200_CONTEXT(ctx);
 
-    if (!is_blit_supported(dst_mesaformat))
+    if (!r200_check_blit(dst_mesaformat))
         return GL_FALSE;
 
     /* Make sure that colorbuffer has even width - hw limitation */
diff --git a/src/mesa/drivers/dri/r200/r200_blit.h b/src/mesa/drivers/dri/r200/r200_blit.h
index 38487266ae..53206f0b47 100644
--- a/src/mesa/drivers/dri/r200/r200_blit.h
+++ b/src/mesa/drivers/dri/r200/r200_blit.h
@@ -30,6 +30,8 @@
 
 void r200_blit_init(struct r200_context *r200);
 
+unsigned r200_check_blit(gl_format mesa_format);
+
 unsigned r200_blit(GLcontext *ctx,
                    struct radeon_bo *src_bo,
                    intptr_t src_offset,
diff --git a/src/mesa/drivers/dri/r200/r200_context.c b/src/mesa/drivers/dri/r200/r200_context.c
index 6ecd46ecd9..dad2580e08 100644
--- a/src/mesa/drivers/dri/r200/r200_context.c
+++ b/src/mesa/drivers/dri/r200/r200_context.c
@@ -264,6 +264,7 @@ static void r200_init_vtbl(radeonContextPtr radeon)
    radeon->vtbl.fallback = r200Fallback;
    radeon->vtbl.update_scissor = r200_vtbl_update_scissor;
    radeon->vtbl.emit_query_finish = r200_emit_query_finish;
+   radeon->vtbl.check_blit = r200_check_blit;
    radeon->vtbl.blit = r200_blit;
 }
 
diff --git a/src/mesa/drivers/dri/r300/r300_blit.c b/src/mesa/drivers/dri/r300/r300_blit.c
index 35fd06734f..9637a9b7ad 100644
--- a/src/mesa/drivers/dri/r300/r300_blit.c
+++ b/src/mesa/drivers/dri/r300/r300_blit.c
@@ -498,7 +498,7 @@ static void emit_cb_setup(struct r300_context *r300,
     END_BATCH();
 }
 
-static unsigned is_blit_supported(gl_format dst_format)
+unsigned r300_check_blit(gl_format dst_format)
 {
     switch (dst_format) {
         case MESA_FORMAT_RGB565:
@@ -566,7 +566,7 @@ unsigned r300_blit(GLcontext *ctx,
 {
     r300ContextPtr r300 = R300_CONTEXT(ctx);
 
-    if (!is_blit_supported(dst_mesaformat))
+    if (!r300_check_blit(dst_mesaformat))
         return 0;
 
     /* Make sure that colorbuffer has even width - hw limitation */
diff --git a/src/mesa/drivers/dri/r300/r300_blit.h b/src/mesa/drivers/dri/r300/r300_blit.h
index 735acaddd7..39b157a57b 100644
--- a/src/mesa/drivers/dri/r300/r300_blit.h
+++ b/src/mesa/drivers/dri/r300/r300_blit.h
@@ -30,6 +30,8 @@
 
 void r300_blit_init(struct r300_context *r300);
 
+unsigned r300_check_blit(gl_format mesa_format);
+
 unsigned r300_blit(GLcontext *ctx,
                    struct radeon_bo *src_bo,
                    intptr_t src_offset,
@@ -51,4 +53,4 @@ unsigned r300_blit(GLcontext *ctx,
                    unsigned reg_height,
                    unsigned flip_y);
 
-#endif // R300_BLIT_H
\ No newline at end of file
+#endif // R300_BLIT_H
diff --git a/src/mesa/drivers/dri/r300/r300_context.c b/src/mesa/drivers/dri/r300/r300_context.c
index fe2ed22dc2..df4cc11da4 100644
--- a/src/mesa/drivers/dri/r300/r300_context.c
+++ b/src/mesa/drivers/dri/r300/r300_context.c
@@ -320,7 +320,8 @@ static void r300_init_vtbl(radeonContextPtr radeon)
 	} else
 		radeon->vtbl.emit_query_finish = r300_emit_query_finish;
 
-    radeon->vtbl.blit = r300_blit;
+	radeon->vtbl.check_blit = r300_check_blit;
+	radeon->vtbl.blit = r300_blit;
 }
 
 static void r300InitConstValues(GLcontext *ctx, radeonScreenPtr screen)
diff --git a/src/mesa/drivers/dri/r600/r600_blit.c b/src/mesa/drivers/dri/r600/r600_blit.c
index 8eafd42e8f..9d17463cae 100644
--- a/src/mesa/drivers/dri/r600/r600_blit.c
+++ b/src/mesa/drivers/dri/r600/r600_blit.c
@@ -33,7 +33,7 @@
 #include "r600_cmdbuf.h"
 
 /* common formats supported as both textures and render targets */
-static unsigned is_blit_supported(gl_format mesa_format)
+unsigned r600_check_blit(gl_format mesa_format)
 {
     switch (mesa_format) {
     case MESA_FORMAT_RGBA8888:
@@ -1582,7 +1582,7 @@ unsigned r600_blit(GLcontext *ctx,
     context_t *context = R700_CONTEXT(ctx);
     int id = 0;
 
-    if (!is_blit_supported(dst_mesaformat))
+    if (!r600_check_blit(dst_mesaformat))
         return GL_FALSE;
 
     if (src_bo == dst_bo) {
diff --git a/src/mesa/drivers/dri/r600/r600_blit.h b/src/mesa/drivers/dri/r600/r600_blit.h
index f280e23489..d56b21ba9b 100644
--- a/src/mesa/drivers/dri/r600/r600_blit.h
+++ b/src/mesa/drivers/dri/r600/r600_blit.h
@@ -1,3 +1,35 @@
+/*
+ * Copyright (C) 2009 Advanced Micro Devices, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#ifndef R600_BLIT_H
+#define R600_BLIT_H
+
+unsigned r600_check_blit(gl_format mesa_format);
+
 unsigned r600_blit(GLcontext *ctx,
                    struct radeon_bo *src_bo,
                    intptr_t src_offset,
@@ -19,3 +51,4 @@ unsigned r600_blit(GLcontext *ctx,
                    unsigned h,
                    unsigned flip_y);
 
+#endif // R600_BLIT_H
diff --git a/src/mesa/drivers/dri/r600/r600_context.c b/src/mesa/drivers/dri/r600/r600_context.c
index 1a4b014d9f..3d6802e735 100644
--- a/src/mesa/drivers/dri/r600/r600_context.c
+++ b/src/mesa/drivers/dri/r600/r600_context.c
@@ -236,6 +236,7 @@ static void r600_init_vtbl(radeonContextPtr radeon)
 	radeon->vtbl.pre_emit_atoms = r600_vtbl_pre_emit_atoms;
 	radeon->vtbl.fallback = r600_fallback;
 	radeon->vtbl.emit_query_finish = r600_emit_query_finish;
+	radeon->vtbl.check_blit = r600_check_blit;
 	radeon->vtbl.blit = r600_blit;
 }
 
diff --git a/src/mesa/drivers/dri/radeon/radeon_blit.c b/src/mesa/drivers/dri/radeon/radeon_blit.c
index 34b9af4063..e188a122d5 100644
--- a/src/mesa/drivers/dri/radeon/radeon_blit.c
+++ b/src/mesa/drivers/dri/radeon/radeon_blit.c
@@ -38,7 +38,7 @@ static inline uint32_t cmdpacket0(struct radeon_screen *rscrn,
 }
 
 /* common formats supported as both textures and render targets */
-static unsigned is_blit_supported(gl_format mesa_format)
+unsigned r100_check_blit(gl_format mesa_format)
 {
     /* XXX others?  BE/LE? */
     switch (mesa_format) {
@@ -333,7 +333,7 @@ unsigned r100_blit(GLcontext *ctx,
 {
     struct r100_context *r100 = R100_CONTEXT(ctx);
 
-    if (!is_blit_supported(dst_mesaformat))
+    if (!r100_check_blit(dst_mesaformat))
         return GL_FALSE;
 
     /* Make sure that colorbuffer has even width - hw limitation */
diff --git a/src/mesa/drivers/dri/radeon/radeon_blit.h b/src/mesa/drivers/dri/radeon/radeon_blit.h
index d36366ff79..d7d0b5554a 100644
--- a/src/mesa/drivers/dri/radeon/radeon_blit.h
+++ b/src/mesa/drivers/dri/radeon/radeon_blit.h
@@ -30,6 +30,8 @@
 
 void r100_blit_init(struct r100_context *r100);
 
+unsigned r100_check_blit(gl_format mesa_format);
+
 unsigned r100_blit(GLcontext *ctx,
                    struct radeon_bo *src_bo,
                    intptr_t src_offset,
diff --git a/src/mesa/drivers/dri/radeon/radeon_common_context.h b/src/mesa/drivers/dri/radeon/radeon_common_context.h
index e397ee8c22..d1a24e265f 100644
--- a/src/mesa/drivers/dri/radeon/radeon_common_context.h
+++ b/src/mesa/drivers/dri/radeon/radeon_common_context.h
@@ -518,6 +518,7 @@ struct radeon_context {
 	   void (*free_context)(GLcontext *ctx);
 	   void (*emit_query_finish)(radeonContextPtr radeon);
 	   void (*update_scissor)(GLcontext *ctx);
+	   unsigned (*check_blit)(gl_format mesa_format);
 	   unsigned (*blit)(GLcontext *ctx,
                         struct radeon_bo *src_bo,
                         intptr_t src_offset,
diff --git a/src/mesa/drivers/dri/radeon/radeon_context.c b/src/mesa/drivers/dri/radeon/radeon_context.c
index 4625af14ad..878a453bd5 100644
--- a/src/mesa/drivers/dri/radeon/radeon_context.c
+++ b/src/mesa/drivers/dri/radeon/radeon_context.c
@@ -198,6 +198,7 @@ static void r100_init_vtbl(radeonContextPtr radeon)
    radeon->vtbl.fallback = radeonFallback;
    radeon->vtbl.free_context = r100_vtbl_free_context;
    radeon->vtbl.emit_query_finish = r100_emit_query_finish;
+   radeon->vtbl.check_blit = r100_check_blit;
    radeon->vtbl.blit = r100_blit;
 }
 
diff --git a/src/mesa/drivers/dri/radeon/radeon_tex_copy.c b/src/mesa/drivers/dri/radeon/radeon_tex_copy.c
index 18cf182e54..89fe9915a7 100644
--- a/src/mesa/drivers/dri/radeon/radeon_tex_copy.c
+++ b/src/mesa/drivers/dri/radeon/radeon_tex_copy.c
@@ -46,6 +46,12 @@ do_copy_texsubimage(GLcontext *ctx,
 {
     radeonContextPtr radeon = RADEON_CONTEXT(ctx);
     struct radeon_renderbuffer *rrb;
+    unsigned src_bpp;
+    unsigned dst_bpp;
+    gl_format src_mesaformat;
+    gl_format dst_mesaformat;
+    unsigned src_width;
+    unsigned dst_width;
 
     if (_mesa_get_format_bits(timg->base.TexFormat, GL_DEPTH_BITS) > 0) {
         rrb = radeon_get_depthbuffer(radeon);
@@ -76,12 +82,40 @@ do_copy_texsubimage(GLcontext *ctx,
 
     }
 
+    src_mesaformat = rrb->base.Format;
+    dst_mesaformat = timg->base.TexFormat;
+    src_width = rrb->base.Width;
+    dst_width = timg->base.Width;
+    src_bpp = _mesa_get_format_bytes(src_mesaformat);
+    dst_bpp = _mesa_get_format_bytes(dst_mesaformat);
+    if (!radeon->vtbl.check_blit(dst_mesaformat)) {
+	    if (src_bpp != dst_bpp)
+		    return GL_FALSE;
+
+	    switch (dst_bpp) {
+	    case 2:
+		    src_mesaformat = MESA_FORMAT_RGB565;
+		    dst_mesaformat = MESA_FORMAT_RGB565;
+		    break;
+	    case 4:
+		    src_mesaformat = MESA_FORMAT_ARGB8888;
+		    dst_mesaformat = MESA_FORMAT_ARGB8888;
+		    break;
+	    case 1:
+		    src_mesaformat = MESA_FORMAT_A8;
+		    dst_mesaformat = MESA_FORMAT_A8;
+		    break;
+	    default:
+		    return GL_FALSE;
+	    }
+    }
+
     /* blit from src buffer to texture */
-    return radeon->vtbl.blit(ctx, rrb->bo, src_offset, rrb->base.Format, rrb->pitch/rrb->cpp,
-                             rrb->base.Width, rrb->base.Height, x, y,
-                             timg->mt->bo, dst_offset, timg->base.TexFormat,
-                             timg->mt->levels[level].rowstride / _mesa_get_format_bytes(timg->base.TexFormat),
-                             timg->base.Width, timg->base.Height,
+    return radeon->vtbl.blit(ctx, rrb->bo, src_offset, src_mesaformat, rrb->pitch/rrb->cpp,
+                             src_width, rrb->base.Height, x, y,
+                             timg->mt->bo, dst_offset, dst_mesaformat,
+                             timg->mt->levels[level].rowstride / dst_bpp,
+                             dst_width, timg->base.Height,
                              dstx, dsty, width, height, 1);
 }
 
-- 
cgit v1.2.3


From 016fc30839f0fb67bb37d4a7353a7e38749deab5 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 3 Mar 2010 16:02:45 -0800
Subject: Remove support for GCC older than 3.3.0

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 include/GL/gl.h                       |  3 +--
 include/GL/glut.h                     |  2 +-
 src/egl/main/eglcompiler.h            |  5 ++---
 src/gallium/include/pipe/p_compiler.h |  7 +++----
 src/glx/XF86dri.c                     |  2 +-
 src/glx/glxclient.h                   |  2 +-
 src/glx/indirect_vertex_program.c     |  2 +-
 src/glx/pixelstore.c                  |  2 +-
 src/mesa/glapi/glapi.h                |  2 +-
 src/mesa/main/compiler.h              | 10 ++++------
 src/mesa/main/imports.h               |  4 +---
 src/mesa/x86/assyntax.h               |  2 +-
 12 files changed, 18 insertions(+), 25 deletions(-)

(limited to 'src/mesa')

diff --git a/include/GL/gl.h b/include/GL/gl.h
index 3fce3dfc0a..8e5f1383ff 100644
--- a/include/GL/gl.h
+++ b/include/GL/gl.h
@@ -67,8 +67,7 @@
 #elif defined(__CYGWIN__) && defined(USE_OPENGL32) /* use native windows opengl32 */
 #  define GLAPI extern
 #  define GLAPIENTRY __stdcall
-#elif (defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 303) \
-	|| (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
+#elif defined(__GNUC__)	|| (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
 #  define GLAPI __attribute__((visibility("default")))
 #  define GLAPIENTRY
 #endif /* WIN32 && !CYGWIN */
diff --git a/include/GL/glut.h b/include/GL/glut.h
index d9fc938dc7..a282635205 100644
--- a/include/GL/glut.h
+++ b/include/GL/glut.h
@@ -103,7 +103,7 @@ extern "C" {
 #	define GLUTAPI extern
 #endif
 
-#elif defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 303
+#elif defined(__GNUC__)
 
 #  define GLUTAPIENTRY
 #  define GLUTAPIENTRYV
diff --git a/src/egl/main/eglcompiler.h b/src/egl/main/eglcompiler.h
index d844fbb0ef..401a9cf56a 100644
--- a/src/egl/main/eglcompiler.h
+++ b/src/egl/main/eglcompiler.h
@@ -64,8 +64,7 @@
 /**
  * Function visibility
  */
-#if (defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 303) \
-	|| (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
+#if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
 #  define PUBLIC __attribute__((visibility("default")))
 #else
 #  define PUBLIC
@@ -79,7 +78,7 @@
 #ifndef __FUNCTION__
 # if defined(__VMS)
 #  define __FUNCTION__ "VMS$NL:"
-# elif ((!defined __GNUC__) || (__GNUC__ < 2)) && (!defined __xlC__) && \
+# elif (!defined __GNUC__) && (!defined __xlC__) && \
       (!defined(_MSC_VER) || _MSC_VER < 1300)
 #  if (__STDC_VERSION__ >= 199901L) /* C99 */ || \
     (defined(__SUNPRO_C) && defined(__C99FEATURES__))
diff --git a/src/gallium/include/pipe/p_compiler.h b/src/gallium/include/pipe/p_compiler.h
index c7d3507494..b93b38310a 100644
--- a/src/gallium/include/pipe/p_compiler.h
+++ b/src/gallium/include/pipe/p_compiler.h
@@ -106,8 +106,7 @@ typedef unsigned char boolean;
 
 /* Function visibility */
 #ifndef PUBLIC
-#  if (defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 303) \
-	|| (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
+#  if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
 #    define PUBLIC __attribute__((visibility("default")))
 #  else
 #    define PUBLIC
@@ -119,7 +118,7 @@ typedef unsigned char boolean;
  * If we're not using gcc, define __FUNCTION__ as a cpp symbol here.
  */
 #ifndef __FUNCTION__
-# if (!defined(__GNUC__) || (__GNUC__ < 2))
+# if !defined(__GNUC__)
 #  if (__STDC_VERSION__ >= 199901L) /* C99 */ || \
     (defined(__SUNPRO_C) && defined(__C99FEATURES__))
 #   define __FUNCTION__ __func__
@@ -145,7 +144,7 @@ typedef unsigned char boolean;
 
 
 
-#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))
+#if defined(__GNUC__)
 #define PIPE_DEPRECATED  __attribute__((__deprecated__))
 #else
 #define PIPE_DEPRECATED
diff --git a/src/glx/XF86dri.c b/src/glx/XF86dri.c
index 248d96ac5d..fdbdd43000 100644
--- a/src/glx/XF86dri.c
+++ b/src/glx/XF86dri.c
@@ -45,7 +45,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "xf86dristr.h"
 
 
-#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 303
+#if defined(__GNUC__)
 #  define PUBLIC __attribute__((visibility("default")))
 #  define USED __attribute__((used))
 #else
diff --git a/src/glx/glxclient.h b/src/glx/glxclient.h
index 04ce781c43..8e5dc785dd 100644
--- a/src/glx/glxclient.h
+++ b/src/glx/glxclient.h
@@ -69,7 +69,7 @@
  * We also need to define a USED attribute, so the optimizer doesn't
  * inline a static function that we later use in an alias. - ajax
  */
-#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 303
+#if defined(__GNUC__)
 #  define PUBLIC __attribute__((visibility("default")))
 #  define USED __attribute__((used))
 #else
diff --git a/src/glx/indirect_vertex_program.c b/src/glx/indirect_vertex_program.c
index 3313ac008a..d822a7ee56 100644
--- a/src/glx/indirect_vertex_program.c
+++ b/src/glx/indirect_vertex_program.c
@@ -30,7 +30,7 @@
 #include "indirect_vertex_array.h"
 #include <GL/glxproto.h>
 
-#if !defined __GNUC__ || __GNUC__ < 3
+#if !defined(__GNUC__)
 #  define __builtin_expect(x, y) x
 #endif
 
diff --git a/src/glx/pixelstore.c b/src/glx/pixelstore.c
index 8b51b5d8b7..dc193b9f74 100644
--- a/src/glx/pixelstore.c
+++ b/src/glx/pixelstore.c
@@ -31,7 +31,7 @@
 #include "glxclient.h"
 #include "indirect.h"
 
-#if !defined __GNUC__ || __GNUC__ < 3
+#if !defined(__GNUC__)
 #  define __builtin_expect(x, y) x
 #endif
 
diff --git a/src/mesa/glapi/glapi.h b/src/mesa/glapi/glapi.h
index 2eae6d5c43..1ca2e4beff 100644
--- a/src/mesa/glapi/glapi.h
+++ b/src/mesa/glapi/glapi.h
@@ -62,7 +62,7 @@ typedef void (*_glapi_proc)(void); /* generic function pointer */
 #endif
 
 
-#if defined(__GNUC__) && (__GNUC__ >= 3)
+#if defined(__GNUC__)
 #  define likely(x)   __builtin_expect(!!(x), 1)
 #  define unlikely(x) __builtin_expect(!!(x), 0)
 #else
diff --git a/src/mesa/main/compiler.h b/src/mesa/main/compiler.h
index 9cef99f67a..05e69e56a6 100644
--- a/src/mesa/main/compiler.h
+++ b/src/mesa/main/compiler.h
@@ -173,8 +173,7 @@ extern "C" {
  * We also need to define a USED attribute, so the optimizer doesn't 
  * inline a static function that we later use in an alias. - ajax
  */
-#if (defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 303) \
-	|| (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
+#if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)
 #  define PUBLIC __attribute__((visibility("default")))
 #  define USED __attribute__((used))
 #else
@@ -197,7 +196,7 @@ extern "C" {
 /**
  * __builtin_expect macros
  */
-#if (!defined(__GNUC__) || __GNUC__ < 3) && (!defined(__IBMC__) || __IBMC__ < 900)
+#if !defined(__GNUC__)
 #  define __builtin_expect(x, y) x
 #endif
 
@@ -210,7 +209,7 @@ extern "C" {
 #ifndef __FUNCTION__
 # if defined(__VMS)
 #  define __FUNCTION__ "VMS$NL:"
-# elif ((!defined __GNUC__) || (__GNUC__ < 2)) && (!defined __xlC__) && \
+# elif !defined(__GNUC__) && !defined(__xlC__) &&	\
       (!defined(_MSC_VER) || _MSC_VER < 1300)
 #  if (__STDC_VERSION__ >= 199901L) /* C99 */ || \
     (defined(__SUNPRO_C) && defined(__C99FEATURES__))
@@ -322,8 +321,7 @@ static INLINE GLuint CPU_TO_LE32(GLuint x)
  * LONGSTRING macro
  * gcc -pedantic warns about long string literals, LONGSTRING silences that.
  */
-#if !defined(__GNUC__) || (__GNUC__ < 2) || \
-    ((__GNUC__ == 2) && (__GNUC_MINOR__ <= 7))
+#if !defined(__GNUC__)
 # define LONGSTRING
 #else
 # define LONGSTRING __extension__
diff --git a/src/mesa/main/imports.h b/src/mesa/main/imports.h
index ac3a7b5d61..fb4a00eca7 100644
--- a/src/mesa/main/imports.h
+++ b/src/mesa/main/imports.h
@@ -240,9 +240,7 @@ static INLINE int GET_FLOAT_BITS( float x )
 /***
  *** IROUND: return (as an integer) float rounded to nearest integer
  ***/
-#if defined(USE_X86_ASM) && defined(__GNUC__) && defined(__i386__) && \
-			(!(defined(__BEOS__) || defined(__HAIKU__))  || \
-			(__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)))
+#if defined(USE_X86_ASM) && defined(__GNUC__) && defined(__i386__)
 static INLINE int iround(float f)
 {
    int r;
diff --git a/src/mesa/x86/assyntax.h b/src/mesa/x86/assyntax.h
index de1f6a48de..4a41812f6b 100644
--- a/src/mesa/x86/assyntax.h
+++ b/src/mesa/x86/assyntax.h
@@ -1737,7 +1737,7 @@ SECTION _DATA public align=16 class=DATA use32 flat
  */
 #if defined(GNU_ASSEMBLER) && !defined(__DJGPP__) && !defined(__MINGW32__) && !defined(__APPLE__)
 #  define HIDDEN(x) .hidden x
-#elif defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 303 && !defined(__DJGPP__) && !defined(__MINGW32__) && !defined(__APPLE__)
+#elif defined(__GNUC__) && !defined(__DJGPP__) && !defined(__MINGW32__) && !defined(__APPLE__)
 #  pragma GCC visibility push(default)
 #  define HIDDEN(x) .hidden x
 #else
-- 
cgit v1.2.3


From 6e8e4b918d1dac8a0c20e7a5d6f4665a1eaf174f Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 3 Mar 2010 16:03:24 -0800
Subject: Remove support for GCC older than 3.3.0 from generator scripts

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/glapi/gen/glX_proto_send.py | 2 +-
 src/mesa/glapi/gen/gl_XML.py         | 4 ++--
 src/mesa/glapi/gen/gl_x86-64_asm.py  | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/gen/glX_proto_send.py b/src/mesa/glapi/gen/glX_proto_send.py
index 4d484c833a..c52b85bfb4 100644
--- a/src/mesa/glapi/gen/glX_proto_send.py
+++ b/src/mesa/glapi/gen/glX_proto_send.py
@@ -182,7 +182,7 @@ class PrintGlxProtoStubs(glX_proto_common.glx_print_proto):
 		self.printFastcall()
 		self.printNoinline()
 		print ''
-		print '#if !defined __GNUC__ || __GNUC__ < 3'
+		print '#ifndef __GNUC__'
 		print '#  define __builtin_expect(x, y) x'
 		print '#endif'
 		print ''
diff --git a/src/mesa/glapi/gen/gl_XML.py b/src/mesa/glapi/gen/gl_XML.py
index a10a35e513..b769ee2bb5 100644
--- a/src/mesa/glapi/gen/gl_XML.py
+++ b/src/mesa/glapi/gen/gl_XML.py
@@ -184,7 +184,7 @@ class gl_print_base:
 		The name is also added to the file's undef_list.
 		"""
 		self.undef_list.append("PURE")
-		print """#  if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
+		print """#  if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
 #    define PURE __attribute__((pure))
 #  else
 #    define PURE
@@ -224,7 +224,7 @@ class gl_print_base:
 		"""
 
 		self.undef_list.append(S)
-		print """#  if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))) && defined(__ELF__)
+		print """#  if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))) && defined(__ELF__)
 #    define %s  __attribute__((visibility("%s")))
 #  else
 #    define %s
diff --git a/src/mesa/glapi/gen/gl_x86-64_asm.py b/src/mesa/glapi/gen/gl_x86-64_asm.py
index 8ac57ab7eb..e6e78c42f3 100644
--- a/src/mesa/glapi/gen/gl_x86-64_asm.py
+++ b/src/mesa/glapi/gen/gl_x86-64_asm.py
@@ -124,7 +124,7 @@ class PrintGenericStubs(gl_XML.gl_print_base):
 		print ''
 		print '#include "x86/assyntax.h"'
 		print ''
-		print '#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 303'
+		print '#ifdef __GNUC__'
 		print '#  pragma GCC visibility push(default)'
 		print '#  define HIDDEN(x) .hidden x'
 		print '#else'
-- 
cgit v1.2.3


From f7dde2c131d8ec04c00f0dd3d7747019ff72a237 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 3 Mar 2010 16:15:42 -0800
Subject: Remove support for GCC older than 3.3.0 from generated sources

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/glx/indirect.c             | 2 +-
 src/glx/indirect.h             | 2 +-
 src/glx/indirect_size.c        | 4 ++--
 src/glx/indirect_size.h        | 4 ++--
 src/mesa/glapi/glapitemp.h     | 2 +-
 src/mesa/x86-64/glapi_x86-64.S | 2 +-
 6 files changed, 8 insertions(+), 8 deletions(-)

(limited to 'src/mesa')

diff --git a/src/glx/indirect.c b/src/glx/indirect.c
index 4a571a230b..42a225f671 100644
--- a/src/glx/indirect.c
+++ b/src/glx/indirect.c
@@ -53,7 +53,7 @@
 #    define NOINLINE
 #  endif
 
-#if !defined __GNUC__ || __GNUC__ < 3
+#ifndef __GNUC__
 #  define __builtin_expect(x, y) x
 #endif
 
diff --git a/src/glx/indirect.h b/src/glx/indirect.h
index 9e73b33818..7064bfe279 100644
--- a/src/glx/indirect.h
+++ b/src/glx/indirect.h
@@ -37,7 +37,7 @@
  * \author Ian Romanick <idr@us.ibm.com>
  */
 
-#  if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))) && defined(__ELF__)
+#  if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))) && defined(__ELF__)
 #    define HIDDEN  __attribute__((visibility("hidden")))
 #  else
 #    define HIDDEN
diff --git a/src/glx/indirect_size.c b/src/glx/indirect_size.c
index 6356ddd49b..5a8f27ba92 100644
--- a/src/glx/indirect_size.c
+++ b/src/glx/indirect_size.c
@@ -29,7 +29,7 @@
 #include <GL/gl.h>
 #include "indirect_size.h"
 
-#  if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
+#  if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
 #    define PURE __attribute__((pure))
 #  else
 #    define PURE
@@ -41,7 +41,7 @@
 #    define FASTCALL
 #  endif
 
-#  if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))) && defined(__ELF__)
+#  if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))) && defined(__ELF__)
 #    define INTERNAL  __attribute__((visibility("internal")))
 #  else
 #    define INTERNAL
diff --git a/src/glx/indirect_size.h b/src/glx/indirect_size.h
index af0919f964..43f504a319 100644
--- a/src/glx/indirect_size.h
+++ b/src/glx/indirect_size.h
@@ -36,7 +36,7 @@
  * \author Ian Romanick <idr@us.ibm.com>
  */
 
-#  if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
+#  if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
 #    define PURE __attribute__((pure))
 #  else
 #    define PURE
@@ -48,7 +48,7 @@
 #    define FASTCALL
 #  endif
 
-#  if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))) && defined(__ELF__)
+#  if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))) && defined(__ELF__)
 #    define INTERNAL  __attribute__((visibility("internal")))
 #  else
 #    define INTERNAL
diff --git a/src/mesa/glapi/glapitemp.h b/src/mesa/glapi/glapitemp.h
index 2ef4728e09..f9b803e2ab 100644
--- a/src/mesa/glapi/glapitemp.h
+++ b/src/mesa/glapi/glapitemp.h
@@ -27,7 +27,7 @@
  */
 
 
-#  if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))) && defined(__ELF__)
+#  if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))) && defined(__ELF__)
 #    define HIDDEN  __attribute__((visibility("hidden")))
 #  else
 #    define HIDDEN
diff --git a/src/mesa/x86-64/glapi_x86-64.S b/src/mesa/x86-64/glapi_x86-64.S
index bd5a657e19..03a2c999ff 100644
--- a/src/mesa/x86-64/glapi_x86-64.S
+++ b/src/mesa/x86-64/glapi_x86-64.S
@@ -31,7 +31,7 @@
 
 #include "x86/assyntax.h"
 
-#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 303
+#ifdef __GNUC__
 #  pragma GCC visibility push(default)
 #  define HIDDEN(x) .hidden x
 #else
-- 
cgit v1.2.3


From 6d9a9e57dc312a2f9f09a6b826a2de93fab5ae26 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 3 Mar 2010 17:50:11 -0800
Subject: Fix unmatched parenthesis introduce by previous commits

I wasn't careful enough when removing support for GCC versions earlier
than 3.3.0.  I could have sworn that I compile tested before pushing,
but apparently not.  FAIL.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/glx/indirect.h           | 2 +-
 src/glx/indirect_size.c      | 2 +-
 src/glx/indirect_size.h      | 2 +-
 src/mesa/glapi/gen/gl_XML.py | 2 +-
 src/mesa/glapi/glapitemp.h   | 2 +-
 src/mesa/main/compiler.h     | 2 +-
 6 files changed, 6 insertions(+), 6 deletions(-)

(limited to 'src/mesa')

diff --git a/src/glx/indirect.h b/src/glx/indirect.h
index 7064bfe279..b09b61aae7 100644
--- a/src/glx/indirect.h
+++ b/src/glx/indirect.h
@@ -37,7 +37,7 @@
  * \author Ian Romanick <idr@us.ibm.com>
  */
 
-#  if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))) && defined(__ELF__)
+#  if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) && defined(__ELF__)
 #    define HIDDEN  __attribute__((visibility("hidden")))
 #  else
 #    define HIDDEN
diff --git a/src/glx/indirect_size.c b/src/glx/indirect_size.c
index 5a8f27ba92..0c136d26cd 100644
--- a/src/glx/indirect_size.c
+++ b/src/glx/indirect_size.c
@@ -41,7 +41,7 @@
 #    define FASTCALL
 #  endif
 
-#  if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))) && defined(__ELF__)
+#  if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) && defined(__ELF__)
 #    define INTERNAL  __attribute__((visibility("internal")))
 #  else
 #    define INTERNAL
diff --git a/src/glx/indirect_size.h b/src/glx/indirect_size.h
index 43f504a319..79b849b683 100644
--- a/src/glx/indirect_size.h
+++ b/src/glx/indirect_size.h
@@ -48,7 +48,7 @@
 #    define FASTCALL
 #  endif
 
-#  if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))) && defined(__ELF__)
+#  if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) && defined(__ELF__)
 #    define INTERNAL  __attribute__((visibility("internal")))
 #  else
 #    define INTERNAL
diff --git a/src/mesa/glapi/gen/gl_XML.py b/src/mesa/glapi/gen/gl_XML.py
index b769ee2bb5..660c8cfb71 100644
--- a/src/mesa/glapi/gen/gl_XML.py
+++ b/src/mesa/glapi/gen/gl_XML.py
@@ -224,7 +224,7 @@ class gl_print_base:
 		"""
 
 		self.undef_list.append(S)
-		print """#  if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))) && defined(__ELF__)
+		print """#  if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) && defined(__ELF__)
 #    define %s  __attribute__((visibility("%s")))
 #  else
 #    define %s
diff --git a/src/mesa/glapi/glapitemp.h b/src/mesa/glapi/glapitemp.h
index f9b803e2ab..67c691c3fb 100644
--- a/src/mesa/glapi/glapitemp.h
+++ b/src/mesa/glapi/glapitemp.h
@@ -27,7 +27,7 @@
  */
 
 
-#  if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))) && defined(__ELF__)
+#  if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) && defined(__ELF__)
 #    define HIDDEN  __attribute__((visibility("hidden")))
 #  else
 #    define HIDDEN
diff --git a/src/mesa/main/compiler.h b/src/mesa/main/compiler.h
index 05e69e56a6..81704ae2c1 100644
--- a/src/mesa/main/compiler.h
+++ b/src/mesa/main/compiler.h
@@ -173,7 +173,7 @@ extern "C" {
  * We also need to define a USED attribute, so the optimizer doesn't 
  * inline a static function that we later use in an alias. - ajax
  */
-#if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)
+#if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
 #  define PUBLIC __attribute__((visibility("default")))
 #  define USED __attribute__((used))
 #else
-- 
cgit v1.2.3


From c27fed58e4979ec950fa4af56eb8b94b21705ac8 Mon Sep 17 00:00:00 2001
From: Dave Airlie <airlied@redhat.com>
Date: Thu, 4 Mar 2010 15:08:26 +1000
Subject: r300_blit: initialise whole fp structure to 0

at least on the r500 we get a lockup unless I do this, the compiler
seems to fail to compile and we just get a null fp.

Signed-off-by: Dave Airlie <airlied@redhat.com>
---
 src/mesa/drivers/dri/r300/r300_blit.c | 1 +
 1 file changed, 1 insertion(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r300/r300_blit.c b/src/mesa/drivers/dri/r300/r300_blit.c
index 9637a9b7ad..f3e4346e02 100644
--- a/src/mesa/drivers/dri/r300/r300_blit.c
+++ b/src/mesa/drivers/dri/r300/r300_blit.c
@@ -97,6 +97,7 @@ static void create_fragment_program(struct r300_context *r300)
     struct r300_fragment_program_compiler compiler;
     struct rc_instruction *inst;
 
+    memset(&compiler, 0, sizeof(struct r300_fragment_program_compiler));
     rc_init(&compiler.Base);
 
     inst = rc_insert_new_instruction(&compiler.Base, compiler.Base.Program.Instructions.Prev);
-- 
cgit v1.2.3


From 25e439e69f3f5e77062321f6e496391c090e889f Mon Sep 17 00:00:00 2001
From: Dave Airlie <airlied@redhat.com>
Date: Thu, 4 Mar 2010 15:49:57 +1000
Subject: r300: make blit code work on swtcl machines.

Only tested this on my rv530 with R300_NO_TCL=1, but it works there
at least. It would be nice to fix the tex_offset by chaning the vertex
program on tcl to read from offset 6 but this isn't really necessary.

Signed-off-by: Dave Airlie <airlied@redhat.com>
---
 src/mesa/drivers/dri/r300/r300_blit.c | 23 ++++++++++++++++++-----
 1 file changed, 18 insertions(+), 5 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r300/r300_blit.c b/src/mesa/drivers/dri/r300/r300_blit.c
index f3e4346e02..2bc761bc20 100644
--- a/src/mesa/drivers/dri/r300/r300_blit.c
+++ b/src/mesa/drivers/dri/r300/r300_blit.c
@@ -126,7 +126,8 @@ static void create_fragment_program(struct r300_context *r300)
 
 void r300_blit_init(struct r300_context *r300)
 {
-    create_vertex_program(r300);
+    if (r300->options.hw_tcl_enabled)
+	create_vertex_program(r300);
     create_fragment_program(r300);
 }
 
@@ -341,8 +342,14 @@ static void emit_pvs_setup(struct r300_context *r300,
 
 static void emit_vap_setup(struct r300_context *r300)
 {
+    int tex_offset;
     BATCH_LOCALS(&r300->radeon);
 
+    if (r300->options.hw_tcl_enabled)
+	tex_offset = 1;
+    else
+	tex_offset = 6;
+
     BEGIN_BATCH(12);
     OUT_BATCH_REGSEQ(R300_SE_VTE_CNTL, 2);
     OUT_BATCH(R300_VTX_XY_FMT | R300_VTX_Z_FMT);
@@ -351,7 +358,7 @@ static void emit_vap_setup(struct r300_context *r300)
     OUT_BATCH_REGVAL(R300_VAP_PSC_SGN_NORM_CNTL, 0xaaaaaaaa);
     OUT_BATCH_REGVAL(R300_VAP_PROG_STREAM_CNTL_0,
                      ((R300_DATA_TYPE_FLOAT_2 | (0 << R300_DST_VEC_LOC_SHIFT)) << 0) |
-                     (((1 << R300_DST_VEC_LOC_SHIFT) | R300_DATA_TYPE_FLOAT_2 | R300_LAST_VEC) << 16));
+                     (((tex_offset << R300_DST_VEC_LOC_SHIFT) | R300_DATA_TYPE_FLOAT_2 | R300_LAST_VEC) << 16));
     OUT_BATCH_REGVAL(R300_VAP_PROG_STREAM_CNTL_EXT_0,
                     ((((R300_SWIZZLE_SELECT_X << R300_SWIZZLE_SELECT_X_SHIFT) |
                        (R300_SWIZZLE_SELECT_Y << R300_SWIZZLE_SELECT_Y_SHIFT) |
@@ -450,7 +457,7 @@ static void other_stuff(struct r300_context *r300)
 {
     BATCH_LOCALS(&r300->radeon);
 
-    BEGIN_BATCH(15);
+    BEGIN_BATCH(13);
     OUT_BATCH_REGVAL(R300_GA_POLY_MODE,
                      R300_GA_POLY_MODE_FRONT_PTYPE_TRI | R300_GA_POLY_MODE_BACK_PTYPE_TRI);
     OUT_BATCH_REGVAL(R300_SU_CULL_MODE, R300_FRONT_FACE_CCW);
@@ -459,9 +466,13 @@ static void other_stuff(struct r300_context *r300)
     OUT_BATCH_REGSEQ(R300_RB3D_CBLEND, 2);
     OUT_BATCH(0x0);
     OUT_BATCH(0x0);
-    OUT_BATCH_REGVAL(R300_VAP_CLIP_CNTL, R300_CLIP_DISABLE);
     OUT_BATCH_REGVAL(R300_ZB_CNTL, 0);
     END_BATCH();
+    if (r300->options.hw_tcl_enabled) {
+        BEGIN_BATCH(2);
+        OUT_BATCH_REGVAL(R300_VAP_CLIP_CNTL, R300_CLIP_DISABLE);
+        END_BATCH();
+    }
 }
 
 static void emit_cb_setup(struct r300_context *r300,
@@ -634,7 +645,9 @@ unsigned r300_blit(GLcontext *ctx,
         r300_emit_rs_setup(r300);
     }
 
-    emit_pvs_setup(r300, r300->blit.vp_code.body.d, 2);
+    if (r300->options.hw_tcl_enabled)
+	emit_pvs_setup(r300, r300->blit.vp_code.body.d, 2);
+
     emit_vap_setup(r300);
 
     emit_cb_setup(r300, dst_bo, dst_offset, dst_mesaformat, dst_pitch, dst_width, dst_height);
-- 
cgit v1.2.3


From df62b0da92f50b309d79d6552ecdf5a59910c80a Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Thu, 4 Mar 2010 00:41:21 -0800
Subject: mesa: Add asserts to check inputs to memcpy.

---
 src/mesa/main/mipmap.c | 2 ++
 1 file changed, 2 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/main/mipmap.c b/src/mesa/main/mipmap.c
index e2efe81a8f..51f7edfab1 100644
--- a/src/mesa/main/mipmap.c
+++ b/src/mesa/main/mipmap.c
@@ -1325,6 +1325,8 @@ make_2d_stack_mipmap(GLenum datatype, GLuint comps, GLint border,
       if (border > 0) {
          /* fill in dest border */
          /* lower-left border pixel */
+         assert(dstPtr);
+         assert(srcPtr);
          memcpy(dstPtr, srcPtr, bpt);
          /* lower-right border pixel */
          memcpy(dstPtr + (dstWidth - 1) * bpt,
-- 
cgit v1.2.3


From df20c3943ab4e20055f8e731f112aa9fd8d66068 Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Thu, 4 Mar 2010 00:53:52 -0800
Subject: glsl: Add assert to check input to strcmp.

---
 src/mesa/shader/slang/slang_builtin.c | 1 +
 1 file changed, 1 insertion(+)

(limited to 'src/mesa')

diff --git a/src/mesa/shader/slang/slang_builtin.c b/src/mesa/shader/slang/slang_builtin.c
index f0659a8d8b..791e751526 100644
--- a/src/mesa/shader/slang/slang_builtin.c
+++ b/src/mesa/shader/slang/slang_builtin.c
@@ -182,6 +182,7 @@ lookup_statevar(const char *var, GLint index1, GLint index2, const char *field,
          tokens[1] = 0;
       else
          tokens[1] = 1;
+      assert(field);
       if (strcmp(field, "emission") == 0) {
          tokens[2] = STATE_EMISSION;
       }
-- 
cgit v1.2.3


From 3c90777fd7cce57486dc7d98e676ffe9dede55ae Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Thu, 4 Mar 2010 00:58:36 -0800
Subject: glsl: Return NULL on _slan_gen_asm error path on non-debug builds.

Exit the function early on the error path, instead of continuing, to
prevent a null pointer dereference later on.
---
 src/mesa/shader/slang/slang_codegen.c | 1 +
 1 file changed, 1 insertion(+)

(limited to 'src/mesa')

diff --git a/src/mesa/shader/slang/slang_codegen.c b/src/mesa/shader/slang/slang_codegen.c
index 6d1cea28a7..809355c56c 100644
--- a/src/mesa/shader/slang/slang_codegen.c
+++ b/src/mesa/shader/slang/slang_codegen.c
@@ -1894,6 +1894,7 @@ _slang_gen_asm(slang_assemble_ctx *A, slang_operation *oper,
       _mesa_problem(NULL, "undefined __asm function %s\n",
                     (char *) oper->a_id);
       assert(info);
+      return NULL;
    }
    assert(info->NumParams <= 3);
 
-- 
cgit v1.2.3


From 0dd40cc20af78146c1d1d3ad1df0652b7cedc078 Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Thu, 4 Mar 2010 01:10:44 -0800
Subject: glsl: Remove unsigned greater than or equal zero comparison.

---
 src/mesa/shader/slang/slang_codegen.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/shader/slang/slang_codegen.c b/src/mesa/shader/slang/slang_codegen.c
index 809355c56c..96acad1f73 100644
--- a/src/mesa/shader/slang/slang_codegen.c
+++ b/src/mesa/shader/slang/slang_codegen.c
@@ -1754,7 +1754,7 @@ swizzle_to_writemask(slang_assemble_ctx *A, GLuint swizzle,
          /* end */
          break;
       }
-      assert(swz >= 0 && swz <= 3);
+      assert(swz <= 3);
 
       if (swizzle != SWIZZLE_XXXX &&
           swizzle != SWIZZLE_YYYY &&
-- 
cgit v1.2.3


From f9504e75f02586a8561733e0e2711c65efa2979d Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Thu, 4 Mar 2010 01:24:44 -0800
Subject: mesa: Fix unsigned comparison.

---
 src/mesa/main/api_validate.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/main/api_validate.c b/src/mesa/main/api_validate.c
index 326ad6f909..80bc826d21 100644
--- a/src/mesa/main/api_validate.c
+++ b/src/mesa/main/api_validate.c
@@ -147,7 +147,7 @@ check_index_bounds(GLcontext *ctx, GLsizei count, GLenum type,
 
    vbo_get_minmax_index(ctx, &prim, &ib, &min, &max);
 
-   if (min + basevertex < 0 ||
+   if (min < basevertex ||
        max + basevertex > ctx->Array.ArrayObj->_MaxElement) {
       /* the max element is out of bounds of one or more enabled arrays */
       _mesa_warning(ctx, "glDrawElements() index=%u is "
-- 
cgit v1.2.3


From ac610ab830287029b2636522625f56ed09c3870b Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Thu, 4 Mar 2010 01:35:28 -0800
Subject: glsl: Remove unsigned greater than or equal zero comparison.

---
 src/mesa/shader/slang/slang_codegen.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/shader/slang/slang_codegen.c b/src/mesa/shader/slang/slang_codegen.c
index 96acad1f73..ecb2f6d5c1 100644
--- a/src/mesa/shader/slang/slang_codegen.c
+++ b/src/mesa/shader/slang/slang_codegen.c
@@ -4208,7 +4208,7 @@ swizzle_size(GLuint swizzle)
    GLuint size = 0, i;
    for (i = 0; i < 4; i++) {
       GLuint swz = GET_SWZ(swizzle, i);
-      size += (swz >= 0 && swz <= 3);
+      size += (swz <= 3);
    }
    return size;
 }
-- 
cgit v1.2.3


From 34b2cec95c9e7781f4d32deed9980f05ee553d1d Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Thu, 4 Mar 2010 01:51:50 -0800
Subject: Revert "mesa: Fix unsigned comparison."

This reverts commit f9504e75f02586a8561733e0e2711c65efa2979d.

This patch is incorrect.
---
 src/mesa/main/api_validate.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/main/api_validate.c b/src/mesa/main/api_validate.c
index 80bc826d21..326ad6f909 100644
--- a/src/mesa/main/api_validate.c
+++ b/src/mesa/main/api_validate.c
@@ -147,7 +147,7 @@ check_index_bounds(GLcontext *ctx, GLsizei count, GLenum type,
 
    vbo_get_minmax_index(ctx, &prim, &ib, &min, &max);
 
-   if (min < basevertex ||
+   if (min + basevertex < 0 ||
        max + basevertex > ctx->Array.ArrayObj->_MaxElement) {
       /* the max element is out of bounds of one or more enabled arrays */
       _mesa_warning(ctx, "glDrawElements() index=%u is "
-- 
cgit v1.2.3


From c7f7a309af54c76eccb451aa0c4f007656ebe7e1 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Thu, 4 Mar 2010 01:56:20 -0800
Subject: DRI: Put back missing break-statement

The break in the __DRI_ATTRIB_RENDER_TYPE case was accidentally
removed in commit 5cf2c5851bcd29c2d53bb04ab692b4b156f5a74d.  This puts
it back.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/drivers/dri/common/utils.c | 1 +
 1 file changed, 1 insertion(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/common/utils.c b/src/mesa/drivers/dri/common/utils.c
index 9a21f2c9f2..b85b364c57 100644
--- a/src/mesa/drivers/dri/common/utils.c
+++ b/src/mesa/drivers/dri/common/utils.c
@@ -726,6 +726,7 @@ driGetConfigAttribIndex(const __DRIconfig *config,
     switch (attribMap[index].attrib) {
     case __DRI_ATTRIB_RENDER_TYPE:
 	*value = __DRI_ATTRIB_RGBA_BIT;
+	break;
     case __DRI_ATTRIB_CONFIG_CAVEAT:
 	if (config->modes.visualRating == GLX_NON_CONFORMANT_CONFIG)
 	    *value = __DRI_ATTRIB_NON_CONFORMANT_CONFIG;
-- 
cgit v1.2.3


From 41d3fdc380655b701fab2537bdc7e254b6155286 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Wed, 3 Mar 2010 11:49:39 -0800
Subject: i915: Fix up i830 for tiled drawing offsets.

Corresponds to b87406e55f029d29594ae76a4b39a4fe1007fe4f.
---
 src/mesa/drivers/dri/i915/i830_context.h |  3 ++-
 src/mesa/drivers/dri/i915/i830_vtbl.c    | 43 +++++++++++++++++++++++++-------
 2 files changed, 36 insertions(+), 10 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i915/i830_context.h b/src/mesa/drivers/dri/i915/i830_context.h
index b755d48678..d7eb9c2d44 100644
--- a/src/mesa/drivers/dri/i915/i830_context.h
+++ b/src/mesa/drivers/dri/i915/i830_context.h
@@ -34,7 +34,8 @@
 #define I830_FALLBACK_COLORMASK		 0x2000
 #define I830_FALLBACK_STENCIL		 0x4000
 #define I830_FALLBACK_STIPPLE		 0x8000
-#define I830_FALLBACK_LOGICOP		 0x10000
+#define I830_FALLBACK_LOGICOP		 0x20000
+#define I830_FALLBACK_DRAW_OFFSET	 0x200000
 
 #define I830_UPLOAD_CTX              0x1
 #define I830_UPLOAD_BUFFERS          0x2
diff --git a/src/mesa/drivers/dri/i915/i830_vtbl.c b/src/mesa/drivers/dri/i915/i830_vtbl.c
index a8df77c600..be96419ff1 100644
--- a/src/mesa/drivers/dri/i915/i830_vtbl.c
+++ b/src/mesa/drivers/dri/i915/i830_vtbl.c
@@ -496,15 +496,13 @@ i830_emit_state(struct intel_context *intel)
       OUT_BATCH(state->Buffer[I830_DESTREG_CBUFADDR0]);
       OUT_BATCH(state->Buffer[I830_DESTREG_CBUFADDR1]);
       OUT_RELOC(state->draw_region->buffer,
-		I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER,
-                state->draw_region->draw_offset);
+		I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 
       if (state->depth_region) {
          OUT_BATCH(state->Buffer[I830_DESTREG_DBUFADDR0]);
          OUT_BATCH(state->Buffer[I830_DESTREG_DBUFADDR1]);
          OUT_RELOC(state->depth_region->buffer,
-		   I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER,
-                   state->depth_region->draw_offset);
+		   I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
       }
 
       OUT_BATCH(state->Buffer[I830_DESTREG_DV0]);
@@ -598,6 +596,7 @@ i830_set_draw_region(struct intel_context *intel,
    struct intel_renderbuffer *irb = intel_renderbuffer(rb);
    GLuint value;
    struct i830_hw_state *state = &i830->state;
+   uint32_t draw_x, draw_y;
 
    if (state->draw_region != color_regions[0]) {
       intel_region_release(&state->draw_region);
@@ -652,14 +651,40 @@ i830_set_draw_region(struct intel_context *intel,
    }
    state->Buffer[I830_DESTREG_DV1] = value;
 
+   /* We set up the drawing rectangle to be offset into the color
+    * region's location in the miptree.  If it doesn't match with
+    * depth's offsets, we can't render to it.
+    *
+    * (Well, not actually true -- the hw grew a bit to let depth's
+    * offset get forced to 0,0.  We may want to use that if people are
+    * hitting that case.  Also, some configurations may be supportable
+    * by tweaking the start offset of the buffers around, which we
+    * can't do in general due to tiling)
+    */
+   FALLBACK(intel, I830_FALLBACK_DRAW_OFFSET,
+	    (depth_region && color_regions[0]) &&
+	    (depth_region->draw_x != color_regions[0]->draw_x ||
+	     depth_region->draw_y != color_regions[0]->draw_y));
+
+   if (color_regions[0]) {
+      draw_x = color_regions[0]->draw_x;
+      draw_y = color_regions[0]->draw_y;
+   } else if (depth_region) {
+      draw_x = depth_region->draw_x;
+      draw_y = depth_region->draw_y;
+   } else {
+      draw_x = 0;
+      draw_y = 0;
+   }
+
    state->Buffer[I830_DESTREG_DRAWRECT0] = _3DSTATE_DRAWRECT_INFO;
    state->Buffer[I830_DESTREG_DRAWRECT1] = 0;
-   state->Buffer[I830_DESTREG_DRAWRECT2] = 0; /* xmin, ymin */
+   state->Buffer[I830_DESTREG_DRAWRECT2] = (draw_y << 16) | draw_x;
    state->Buffer[I830_DESTREG_DRAWRECT3] =
-      (ctx->DrawBuffer->Width & 0xffff) |
-      (ctx->DrawBuffer->Height << 16);
-   state->Buffer[I830_DESTREG_DRAWRECT4] = 0; /* xoff, yoff */
-   state->Buffer[I830_DESTREG_DRAWRECT5] = 0;
+      ((ctx->DrawBuffer->Width + draw_x) & 0xffff) |
+      ((ctx->DrawBuffer->Height + draw_y) << 16);
+   state->Buffer[I830_DESTREG_DRAWRECT4] = (draw_y << 16) | draw_x;
+   state->Buffer[I830_DESTREG_DRAWRECT5] = MI_NOOP;
 
    I830_STATECHANGE(i830, I830_UPLOAD_BUFFERS);
 }
-- 
cgit v1.2.3


From 8e7a8d65931a650534e0f5c4e0d8118cd6f7636e Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Wed, 3 Mar 2010 11:51:51 -0800
Subject: i915: Enable texture tiling by default.

This now passes piglit testcases, and shows performance improvements
on openarena.  Blit-heavy apps may see degradation, but the
expectation is that the common case of 3D rendering will see
significant wins.

This regresses gen-teximage on my 855, and no piglit tests on my 945.
---
 src/mesa/drivers/dri/intel/intel_screen.c | 11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/intel/intel_screen.c b/src/mesa/drivers/dri/intel/intel_screen.c
index a42af71104..959ccfb8b1 100644
--- a/src/mesa/drivers/dri/intel/intel_screen.c
+++ b/src/mesa/drivers/dri/intel/intel_screen.c
@@ -47,9 +47,6 @@
 #include "i915_drm.h"
 
 #define DRI_CONF_TEXTURE_TILING(def) \
-	DRI_CONF_OPT_BEGIN(texture_tiling, bool, def)		\
-		DRI_CONF_DESC(en, "Enable texture tiling")	\
-	DRI_CONF_OPT_END					\
 
 PUBLIC const char __driConfigOptions[] =
    DRI_CONF_BEGIN
@@ -65,11 +62,9 @@ PUBLIC const char __driConfigOptions[] =
 	 DRI_CONF_DESC_END
       DRI_CONF_OPT_END
 
-#ifdef I915
-     DRI_CONF_TEXTURE_TILING(false)
-#else
-     DRI_CONF_TEXTURE_TILING(true)
-#endif
+      DRI_CONF_OPT_BEGIN(texture_tiling, bool, true)
+	 DRI_CONF_DESC(en, "Enable texture tiling")
+      DRI_CONF_OPT_END
 
       DRI_CONF_OPT_BEGIN(early_z, bool, false)
 	 DRI_CONF_DESC(en, "Enable early Z in classic mode (unstable, 945-only).")
-- 
cgit v1.2.3


From e5c49e49cce6c14bc9e973dea4d69e0b7d36086d Mon Sep 17 00:00:00 2001
From: Chris Wilson <chris@chris-wilson.co.uk>
Date: Thu, 12 Nov 2009 10:12:56 +0000
Subject: APPLE_object_purgeable: xml

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
---
 src/mesa/glapi/gen/APPLE_object_purgeable.xml | 37 +++++++++++++++++++++++++++
 src/mesa/glapi/gen/Makefile                   |  1 +
 src/mesa/glapi/gen/gl_API.xml                 |  1 +
 3 files changed, 39 insertions(+)
 create mode 100644 src/mesa/glapi/gen/APPLE_object_purgeable.xml

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/gen/APPLE_object_purgeable.xml b/src/mesa/glapi/gen/APPLE_object_purgeable.xml
new file mode 100644
index 0000000000..62fa64ad21
--- /dev/null
+++ b/src/mesa/glapi/gen/APPLE_object_purgeable.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<OpenGLAPI>
+<category name="GL_APPLE_object_purgeable" number="371">
+    <enum name="RELEASED_APPLE"               value="0x8A19"/>
+    <enum name="VOLATILE_APPLE"               value="0x8A1A"/>
+    <enum name="RETAINED_APPLE"               value="0x8A1B"/>
+    <enum name="UNDEFINED_APPLE"              value="0x8A1C"/>
+    <enum name="PURGEABLE_APPLE"    count="1" value="0x8A1D">
+       <size name="GetObjectParameterivAPPLE" count="1" mode="get"/>
+    </enum>
+
+    <enum name="BUFFER_OBJECT_APPLE"          value="0x85B3"/>
+
+    <function name="ObjectPurgeableAPPLE" offset="assign">
+        <param name="objectType" type="GLenum"/>
+        <param name="name" type="GLuint"/>
+        <param name="option" type="GLenum"/>
+	<return type="GLenum"/>
+    </function>
+
+    <function name="ObjectUnpurgeableAPPLE" offset="assign">
+        <param name="objectType" type="GLenum"/>
+        <param name="name" type="GLuint"/>
+        <param name="option" type="GLenum"/>
+	<return type="GLenum"/>
+    </function>
+
+    <function name="GetObjectParameterivAPPLE" offset="assign">
+        <param name="objectType" type="GLenum"/>
+        <param name="name" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="value" type="GLint *" output="true"/>
+    </function>
+</category>
+</OpenGLAPI>
diff --git a/src/mesa/glapi/gen/Makefile b/src/mesa/glapi/gen/Makefile
index 8e9c909f31..8aa74ce434 100644
--- a/src/mesa/glapi/gen/Makefile
+++ b/src/mesa/glapi/gen/Makefile
@@ -79,6 +79,7 @@ API_XML = \
 	ARB_seamless_cube_map.xml \
 	ARB_sync.xml \
 	ARB_vertex_array_object.xml \
+	APPLE_object_purgeable.xml \
 	APPLE_vertex_array_object.xml \
 	EXT_draw_buffers2.xml \
 	EXT_framebuffer_object.xml \
diff --git a/src/mesa/glapi/gen/gl_API.xml b/src/mesa/glapi/gen/gl_API.xml
index 0b3d57baa6..4a4d0d5382 100644
--- a/src/mesa/glapi/gen/gl_API.xml
+++ b/src/mesa/glapi/gen/gl_API.xml
@@ -11978,6 +11978,7 @@
     </function>
 </category>
 
+<xi:include href="APPLE_object_purgeable.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
 <xi:include href="APPLE_vertex_array_object.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
 
 <category name="GL_APPLE_ycbcr_422" number="275">
-- 
cgit v1.2.3


From 894d0ab9388543642b6940f09358844736a8bd3a Mon Sep 17 00:00:00 2001
From: Chris Wilson <chris@chris-wilson.co.uk>
Date: Thu, 12 Nov 2009 10:15:49 +0000
Subject: APPLE_object_purgeable: autogenerated files

---
 src/mesa/glapi/glapidispatch.h |   37 +-
 src/mesa/glapi/glapioffsets.h  |   22 +-
 src/mesa/glapi/glapitable.h    |   17 +-
 src/mesa/glapi/glapitemp.h     |   44 +-
 src/mesa/glapi/glprocs.h       |  640 ++---
 src/mesa/main/enums.c          | 6108 ++++++++++++++++++++--------------------
 src/mesa/main/remap_helper.h   | 3040 ++++++++++----------
 src/mesa/sparc/glapi_sparc.S   |   19 +-
 src/mesa/x86-64/glapi_x86-64.S |  195 +-
 src/mesa/x86/glapi_x86.S       |   23 +-
 10 files changed, 5182 insertions(+), 4963 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glapidispatch.h b/src/mesa/glapi/glapidispatch.h
index b7f661c535..7e0f21390f 100644
--- a/src/mesa/glapi/glapidispatch.h
+++ b/src/mesa/glapi/glapidispatch.h
@@ -2455,6 +2455,15 @@
 #define CALL_TextureRangeAPPLE(disp, parameters) (*((disp)->TextureRangeAPPLE)) parameters
 #define GET_TextureRangeAPPLE(disp) ((disp)->TextureRangeAPPLE)
 #define SET_TextureRangeAPPLE(disp, fn) ((disp)->TextureRangeAPPLE = fn)
+#define CALL_GetObjectParameterivAPPLE(disp, parameters) (*((disp)->GetObjectParameterivAPPLE)) parameters
+#define GET_GetObjectParameterivAPPLE(disp) ((disp)->GetObjectParameterivAPPLE)
+#define SET_GetObjectParameterivAPPLE(disp, fn) ((disp)->GetObjectParameterivAPPLE = fn)
+#define CALL_ObjectPurgeableAPPLE(disp, parameters) (*((disp)->ObjectPurgeableAPPLE)) parameters
+#define GET_ObjectPurgeableAPPLE(disp) ((disp)->ObjectPurgeableAPPLE)
+#define SET_ObjectPurgeableAPPLE(disp, fn) ((disp)->ObjectPurgeableAPPLE = fn)
+#define CALL_ObjectUnpurgeableAPPLE(disp, parameters) (*((disp)->ObjectUnpurgeableAPPLE)) parameters
+#define GET_ObjectUnpurgeableAPPLE(disp) ((disp)->ObjectUnpurgeableAPPLE)
+#define SET_ObjectUnpurgeableAPPLE(disp, fn) ((disp)->ObjectUnpurgeableAPPLE = fn)
 #define CALL_StencilFuncSeparateATI(disp, parameters) (*((disp)->StencilFuncSeparateATI)) parameters
 #define GET_StencilFuncSeparateATI(disp) ((disp)->StencilFuncSeparateATI)
 #define SET_StencilFuncSeparateATI(disp, fn) ((disp)->StencilFuncSeparateATI = fn)
@@ -2479,7 +2488,7 @@
 
 #else
 
-#define driDispatchRemapTable_size 397
+#define driDispatchRemapTable_size 400
 extern int driDispatchRemapTable[ driDispatchRemapTable_size ];
 
 #define AttachShader_remap_index 0
@@ -2872,13 +2881,16 @@ extern int driDispatchRemapTable[ driDispatchRemapTable_size ];
 #define ProvokingVertexEXT_remap_index 387
 #define GetTexParameterPointervAPPLE_remap_index 388
 #define TextureRangeAPPLE_remap_index 389
-#define StencilFuncSeparateATI_remap_index 390
-#define ProgramEnvParameters4fvEXT_remap_index 391
-#define ProgramLocalParameters4fvEXT_remap_index 392
-#define GetQueryObjecti64vEXT_remap_index 393
-#define GetQueryObjectui64vEXT_remap_index 394
-#define EGLImageTargetRenderbufferStorageOES_remap_index 395
-#define EGLImageTargetTexture2DOES_remap_index 396
+#define GetObjectParameterivAPPLE_remap_index 390
+#define ObjectPurgeableAPPLE_remap_index 391
+#define ObjectUnpurgeableAPPLE_remap_index 392
+#define StencilFuncSeparateATI_remap_index 393
+#define ProgramEnvParameters4fvEXT_remap_index 394
+#define ProgramLocalParameters4fvEXT_remap_index 395
+#define GetQueryObjecti64vEXT_remap_index 396
+#define GetQueryObjectui64vEXT_remap_index 397
+#define EGLImageTargetRenderbufferStorageOES_remap_index 398
+#define EGLImageTargetTexture2DOES_remap_index 399
 
 #define CALL_AttachShader(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLuint)), driDispatchRemapTable[AttachShader_remap_index], parameters)
 #define GET_AttachShader(disp) GET_by_offset(disp, driDispatchRemapTable[AttachShader_remap_index])
@@ -4050,6 +4062,15 @@ extern int driDispatchRemapTable[ driDispatchRemapTable_size ];
 #define CALL_TextureRangeAPPLE(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizei, GLvoid *)), driDispatchRemapTable[TextureRangeAPPLE_remap_index], parameters)
 #define GET_TextureRangeAPPLE(disp) GET_by_offset(disp, driDispatchRemapTable[TextureRangeAPPLE_remap_index])
 #define SET_TextureRangeAPPLE(disp, fn) SET_by_offset(disp, driDispatchRemapTable[TextureRangeAPPLE_remap_index], fn)
+#define CALL_GetObjectParameterivAPPLE(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLenum, GLint *)), driDispatchRemapTable[GetObjectParameterivAPPLE_remap_index], parameters)
+#define GET_GetObjectParameterivAPPLE(disp) GET_by_offset(disp, driDispatchRemapTable[GetObjectParameterivAPPLE_remap_index])
+#define SET_GetObjectParameterivAPPLE(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetObjectParameterivAPPLE_remap_index], fn)
+#define CALL_ObjectPurgeableAPPLE(disp, parameters) CALL_by_offset(disp, (GLenum (GLAPIENTRYP)(GLenum, GLuint, GLenum)), driDispatchRemapTable[ObjectPurgeableAPPLE_remap_index], parameters)
+#define GET_ObjectPurgeableAPPLE(disp) GET_by_offset(disp, driDispatchRemapTable[ObjectPurgeableAPPLE_remap_index])
+#define SET_ObjectPurgeableAPPLE(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ObjectPurgeableAPPLE_remap_index], fn)
+#define CALL_ObjectUnpurgeableAPPLE(disp, parameters) CALL_by_offset(disp, (GLenum (GLAPIENTRYP)(GLenum, GLuint, GLenum)), driDispatchRemapTable[ObjectUnpurgeableAPPLE_remap_index], parameters)
+#define GET_ObjectUnpurgeableAPPLE(disp) GET_by_offset(disp, driDispatchRemapTable[ObjectUnpurgeableAPPLE_remap_index])
+#define SET_ObjectUnpurgeableAPPLE(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ObjectUnpurgeableAPPLE_remap_index], fn)
 #define CALL_StencilFuncSeparateATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint, GLuint)), driDispatchRemapTable[StencilFuncSeparateATI_remap_index], parameters)
 #define GET_StencilFuncSeparateATI(disp) GET_by_offset(disp, driDispatchRemapTable[StencilFuncSeparateATI_remap_index])
 #define SET_StencilFuncSeparateATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[StencilFuncSeparateATI_remap_index], fn)
diff --git a/src/mesa/glapi/glapioffsets.h b/src/mesa/glapi/glapioffsets.h
index 8e16e22983..6d7bc2a0fa 100644
--- a/src/mesa/glapi/glapioffsets.h
+++ b/src/mesa/glapi/glapioffsets.h
@@ -832,14 +832,17 @@
 #define _gloffset_ProvokingVertexEXT 795
 #define _gloffset_GetTexParameterPointervAPPLE 796
 #define _gloffset_TextureRangeAPPLE 797
-#define _gloffset_StencilFuncSeparateATI 798
-#define _gloffset_ProgramEnvParameters4fvEXT 799
-#define _gloffset_ProgramLocalParameters4fvEXT 800
-#define _gloffset_GetQueryObjecti64vEXT 801
-#define _gloffset_GetQueryObjectui64vEXT 802
-#define _gloffset_EGLImageTargetRenderbufferStorageOES 803
-#define _gloffset_EGLImageTargetTexture2DOES 804
-#define _gloffset_FIRST_DYNAMIC 805
+#define _gloffset_GetObjectParameterivAPPLE 798
+#define _gloffset_ObjectPurgeableAPPLE 799
+#define _gloffset_ObjectUnpurgeableAPPLE 800
+#define _gloffset_StencilFuncSeparateATI 801
+#define _gloffset_ProgramEnvParameters4fvEXT 802
+#define _gloffset_ProgramLocalParameters4fvEXT 803
+#define _gloffset_GetQueryObjecti64vEXT 804
+#define _gloffset_GetQueryObjectui64vEXT 805
+#define _gloffset_EGLImageTargetRenderbufferStorageOES 806
+#define _gloffset_EGLImageTargetTexture2DOES 807
+#define _gloffset_FIRST_DYNAMIC 808
 
 #else
 
@@ -1233,6 +1236,9 @@
 #define _gloffset_ProvokingVertexEXT driDispatchRemapTable[ProvokingVertexEXT_remap_index]
 #define _gloffset_GetTexParameterPointervAPPLE driDispatchRemapTable[GetTexParameterPointervAPPLE_remap_index]
 #define _gloffset_TextureRangeAPPLE driDispatchRemapTable[TextureRangeAPPLE_remap_index]
+#define _gloffset_GetObjectParameterivAPPLE driDispatchRemapTable[GetObjectParameterivAPPLE_remap_index]
+#define _gloffset_ObjectPurgeableAPPLE driDispatchRemapTable[ObjectPurgeableAPPLE_remap_index]
+#define _gloffset_ObjectUnpurgeableAPPLE driDispatchRemapTable[ObjectUnpurgeableAPPLE_remap_index]
 #define _gloffset_StencilFuncSeparateATI driDispatchRemapTable[StencilFuncSeparateATI_remap_index]
 #define _gloffset_ProgramEnvParameters4fvEXT driDispatchRemapTable[ProgramEnvParameters4fvEXT_remap_index]
 #define _gloffset_ProgramLocalParameters4fvEXT driDispatchRemapTable[ProgramLocalParameters4fvEXT_remap_index]
diff --git a/src/mesa/glapi/glapitable.h b/src/mesa/glapi/glapitable.h
index 8aeb450b99..149ff3f3c4 100644
--- a/src/mesa/glapi/glapitable.h
+++ b/src/mesa/glapi/glapitable.h
@@ -838,13 +838,16 @@ struct _glapi_table
    void (GLAPIENTRYP ProvokingVertexEXT)(GLenum mode); /* 795 */
    void (GLAPIENTRYP GetTexParameterPointervAPPLE)(GLenum target, GLenum pname, GLvoid ** params); /* 796 */
    void (GLAPIENTRYP TextureRangeAPPLE)(GLenum target, GLsizei length, GLvoid * pointer); /* 797 */
-   void (GLAPIENTRYP StencilFuncSeparateATI)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); /* 798 */
-   void (GLAPIENTRYP ProgramEnvParameters4fvEXT)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); /* 799 */
-   void (GLAPIENTRYP ProgramLocalParameters4fvEXT)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); /* 800 */
-   void (GLAPIENTRYP GetQueryObjecti64vEXT)(GLuint id, GLenum pname, GLint64EXT * params); /* 801 */
-   void (GLAPIENTRYP GetQueryObjectui64vEXT)(GLuint id, GLenum pname, GLuint64EXT * params); /* 802 */
-   void (GLAPIENTRYP EGLImageTargetRenderbufferStorageOES)(GLenum target, GLvoid * writeOffset); /* 803 */
-   void (GLAPIENTRYP EGLImageTargetTexture2DOES)(GLenum target, GLvoid * writeOffset); /* 804 */
+   void (GLAPIENTRYP GetObjectParameterivAPPLE)(GLenum objectType, GLuint name, GLenum pname, GLint * value); /* 798 */
+   GLenum (GLAPIENTRYP ObjectPurgeableAPPLE)(GLenum objectType, GLuint name, GLenum option); /* 799 */
+   GLenum (GLAPIENTRYP ObjectUnpurgeableAPPLE)(GLenum objectType, GLuint name, GLenum option); /* 800 */
+   void (GLAPIENTRYP StencilFuncSeparateATI)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); /* 801 */
+   void (GLAPIENTRYP ProgramEnvParameters4fvEXT)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); /* 802 */
+   void (GLAPIENTRYP ProgramLocalParameters4fvEXT)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); /* 803 */
+   void (GLAPIENTRYP GetQueryObjecti64vEXT)(GLuint id, GLenum pname, GLint64EXT * params); /* 804 */
+   void (GLAPIENTRYP GetQueryObjectui64vEXT)(GLuint id, GLenum pname, GLuint64EXT * params); /* 805 */
+   void (GLAPIENTRYP EGLImageTargetRenderbufferStorageOES)(GLenum target, GLvoid * writeOffset); /* 806 */
+   void (GLAPIENTRYP EGLImageTargetTexture2DOES)(GLenum target, GLvoid * writeOffset); /* 807 */
 };
 
 #endif /* !defined( _GLAPI_TABLE_H_ ) */
diff --git a/src/mesa/glapi/glapitemp.h b/src/mesa/glapi/glapitemp.h
index 67c691c3fb..ea6b61159d 100644
--- a/src/mesa/glapi/glapitemp.h
+++ b/src/mesa/glapi/glapitemp.h
@@ -5577,37 +5577,52 @@ KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_797)(GLenum target, GLsizei lengt
    DISPATCH(TextureRangeAPPLE, (target, length, pointer), (F, "glTextureRangeAPPLE(0x%x, %d, %p);\n", target, length, (const void *) pointer));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_798)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
+KEYWORD1 void KEYWORD2 NAME(GetObjectParameterivAPPLE)(GLenum objectType, GLuint name, GLenum pname, GLint * value)
+{
+   DISPATCH(GetObjectParameterivAPPLE, (objectType, name, pname, value), (F, "glGetObjectParameterivAPPLE(0x%x, %d, 0x%x, %p);\n", objectType, name, pname, (const void *) value));
+}
+
+KEYWORD1 GLenum KEYWORD2 NAME(ObjectPurgeableAPPLE)(GLenum objectType, GLuint name, GLenum option)
+{
+   RETURN_DISPATCH(ObjectPurgeableAPPLE, (objectType, name, option), (F, "glObjectPurgeableAPPLE(0x%x, %d, 0x%x);\n", objectType, name, option));
+}
+
+KEYWORD1 GLenum KEYWORD2 NAME(ObjectUnpurgeableAPPLE)(GLenum objectType, GLuint name, GLenum option)
+{
+   RETURN_DISPATCH(ObjectUnpurgeableAPPLE, (objectType, name, option), (F, "glObjectUnpurgeableAPPLE(0x%x, %d, 0x%x);\n", objectType, name, option));
+}
+
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_801)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_798)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_801)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask)
 {
    DISPATCH(StencilFuncSeparateATI, (frontfunc, backfunc, ref, mask), (F, "glStencilFuncSeparateATI(0x%x, 0x%x, %d, %d);\n", frontfunc, backfunc, ref, mask));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_799)(GLenum target, GLuint index, GLsizei count, const GLfloat * params);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_802)(GLenum target, GLuint index, GLsizei count, const GLfloat * params);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_799)(GLenum target, GLuint index, GLsizei count, const GLfloat * params)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_802)(GLenum target, GLuint index, GLsizei count, const GLfloat * params)
 {
    DISPATCH(ProgramEnvParameters4fvEXT, (target, index, count, params), (F, "glProgramEnvParameters4fvEXT(0x%x, %d, %d, %p);\n", target, index, count, (const void *) params));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_800)(GLenum target, GLuint index, GLsizei count, const GLfloat * params);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_803)(GLenum target, GLuint index, GLsizei count, const GLfloat * params);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_800)(GLenum target, GLuint index, GLsizei count, const GLfloat * params)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_803)(GLenum target, GLuint index, GLsizei count, const GLfloat * params)
 {
    DISPATCH(ProgramLocalParameters4fvEXT, (target, index, count, params), (F, "glProgramLocalParameters4fvEXT(0x%x, %d, %d, %p);\n", target, index, count, (const void *) params));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_801)(GLuint id, GLenum pname, GLint64EXT * params);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_804)(GLuint id, GLenum pname, GLint64EXT * params);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_801)(GLuint id, GLenum pname, GLint64EXT * params)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_804)(GLuint id, GLenum pname, GLint64EXT * params)
 {
    DISPATCH(GetQueryObjecti64vEXT, (id, pname, params), (F, "glGetQueryObjecti64vEXT(%d, 0x%x, %p);\n", id, pname, (const void *) params));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_802)(GLuint id, GLenum pname, GLuint64EXT * params);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_805)(GLuint id, GLenum pname, GLuint64EXT * params);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_802)(GLuint id, GLenum pname, GLuint64EXT * params)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_805)(GLuint id, GLenum pname, GLuint64EXT * params)
 {
    DISPATCH(GetQueryObjectui64vEXT, (id, pname, params), (F, "glGetQueryObjectui64vEXT(%d, 0x%x, %p);\n", id, pname, (const void *) params));
 }
@@ -6573,11 +6588,14 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
    TABLE_ENTRY(ProvokingVertexEXT),
    TABLE_ENTRY(_dispatch_stub_796),
    TABLE_ENTRY(_dispatch_stub_797),
-   TABLE_ENTRY(_dispatch_stub_798),
-   TABLE_ENTRY(_dispatch_stub_799),
-   TABLE_ENTRY(_dispatch_stub_800),
+   TABLE_ENTRY(GetObjectParameterivAPPLE),
+   TABLE_ENTRY(ObjectPurgeableAPPLE),
+   TABLE_ENTRY(ObjectUnpurgeableAPPLE),
    TABLE_ENTRY(_dispatch_stub_801),
    TABLE_ENTRY(_dispatch_stub_802),
+   TABLE_ENTRY(_dispatch_stub_803),
+   TABLE_ENTRY(_dispatch_stub_804),
+   TABLE_ENTRY(_dispatch_stub_805),
    TABLE_ENTRY(EGLImageTargetRenderbufferStorageOES),
    TABLE_ENTRY(EGLImageTargetTexture2DOES),
    /* A whole bunch of no-op functions.  These might be called
diff --git a/src/mesa/glapi/glprocs.h b/src/mesa/glapi/glprocs.h
index 513fa89726..44861863e6 100644
--- a/src/mesa/glapi/glprocs.h
+++ b/src/mesa/glapi/glprocs.h
@@ -850,6 +850,9 @@ static const char gl_string_table[] =
     "glProvokingVertexEXT\0"
     "glGetTexParameterPointervAPPLE\0"
     "glTextureRangeAPPLE\0"
+    "glGetObjectParameterivAPPLE\0"
+    "glObjectPurgeableAPPLE\0"
+    "glObjectUnpurgeableAPPLE\0"
     "glStencilFuncSeparateATI\0"
     "glProgramEnvParameters4fvEXT\0"
     "glProgramLocalParameters4fvEXT\0"
@@ -1208,11 +1211,11 @@ static const char gl_string_table[] =
 #define gl_dispatch_stub_785 mgl_dispatch_stub_785
 #define gl_dispatch_stub_796 mgl_dispatch_stub_796
 #define gl_dispatch_stub_797 mgl_dispatch_stub_797
-#define gl_dispatch_stub_798 mgl_dispatch_stub_798
-#define gl_dispatch_stub_799 mgl_dispatch_stub_799
-#define gl_dispatch_stub_800 mgl_dispatch_stub_800
 #define gl_dispatch_stub_801 mgl_dispatch_stub_801
 #define gl_dispatch_stub_802 mgl_dispatch_stub_802
+#define gl_dispatch_stub_803 mgl_dispatch_stub_803
+#define gl_dispatch_stub_804 mgl_dispatch_stub_804
+#define gl_dispatch_stub_805 mgl_dispatch_stub_805
 #endif /* USE_MGL_NAMESPACE */
 
 
@@ -1262,11 +1265,11 @@ void GLAPIENTRY gl_dispatch_stub_784(GLenum target, GLenum pname, GLint param);
 void GLAPIENTRY gl_dispatch_stub_785(GLenum target, GLintptr offset, GLsizeiptr size);
 void GLAPIENTRY gl_dispatch_stub_796(GLenum target, GLenum pname, GLvoid ** params);
 void GLAPIENTRY gl_dispatch_stub_797(GLenum target, GLsizei length, GLvoid * pointer);
-void GLAPIENTRY gl_dispatch_stub_798(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
-void GLAPIENTRY gl_dispatch_stub_799(GLenum target, GLuint index, GLsizei count, const GLfloat * params);
-void GLAPIENTRY gl_dispatch_stub_800(GLenum target, GLuint index, GLsizei count, const GLfloat * params);
-void GLAPIENTRY gl_dispatch_stub_801(GLuint id, GLenum pname, GLint64EXT * params);
-void GLAPIENTRY gl_dispatch_stub_802(GLuint id, GLenum pname, GLuint64EXT * params);
+void GLAPIENTRY gl_dispatch_stub_801(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
+void GLAPIENTRY gl_dispatch_stub_802(GLenum target, GLuint index, GLsizei count, const GLfloat * params);
+void GLAPIENTRY gl_dispatch_stub_803(GLenum target, GLuint index, GLsizei count, const GLfloat * params);
+void GLAPIENTRY gl_dispatch_stub_804(GLuint id, GLenum pname, GLint64EXT * params);
+void GLAPIENTRY gl_dispatch_stub_805(GLuint id, GLenum pname, GLuint64EXT * params);
 #endif /* defined(NEED_FUNCTION_POINTER) || defined(GLX_INDIRECT_RENDERING) */
 
 static const glprocs_table_t static_functions[] = {
@@ -2068,315 +2071,318 @@ static const glprocs_table_t static_functions[] = {
     NAME_FUNC_OFFSET(14050, glProvokingVertexEXT, glProvokingVertexEXT, NULL, _gloffset_ProvokingVertexEXT),
     NAME_FUNC_OFFSET(14071, gl_dispatch_stub_796, gl_dispatch_stub_796, NULL, _gloffset_GetTexParameterPointervAPPLE),
     NAME_FUNC_OFFSET(14102, gl_dispatch_stub_797, gl_dispatch_stub_797, NULL, _gloffset_TextureRangeAPPLE),
-    NAME_FUNC_OFFSET(14122, gl_dispatch_stub_798, gl_dispatch_stub_798, NULL, _gloffset_StencilFuncSeparateATI),
-    NAME_FUNC_OFFSET(14147, gl_dispatch_stub_799, gl_dispatch_stub_799, NULL, _gloffset_ProgramEnvParameters4fvEXT),
-    NAME_FUNC_OFFSET(14176, gl_dispatch_stub_800, gl_dispatch_stub_800, NULL, _gloffset_ProgramLocalParameters4fvEXT),
-    NAME_FUNC_OFFSET(14207, gl_dispatch_stub_801, gl_dispatch_stub_801, NULL, _gloffset_GetQueryObjecti64vEXT),
-    NAME_FUNC_OFFSET(14231, gl_dispatch_stub_802, gl_dispatch_stub_802, NULL, _gloffset_GetQueryObjectui64vEXT),
-    NAME_FUNC_OFFSET(14256, glEGLImageTargetRenderbufferStorageOES, glEGLImageTargetRenderbufferStorageOES, NULL, _gloffset_EGLImageTargetRenderbufferStorageOES),
-    NAME_FUNC_OFFSET(14295, glEGLImageTargetTexture2DOES, glEGLImageTargetTexture2DOES, NULL, _gloffset_EGLImageTargetTexture2DOES),
-    NAME_FUNC_OFFSET(14324, glArrayElement, glArrayElement, NULL, _gloffset_ArrayElement),
-    NAME_FUNC_OFFSET(14342, glBindTexture, glBindTexture, NULL, _gloffset_BindTexture),
-    NAME_FUNC_OFFSET(14359, glDrawArrays, glDrawArrays, NULL, _gloffset_DrawArrays),
-    NAME_FUNC_OFFSET(14375, glAreTexturesResident, glAreTexturesResidentEXT, glAreTexturesResidentEXT, _gloffset_AreTexturesResident),
-    NAME_FUNC_OFFSET(14400, glCopyTexImage1D, glCopyTexImage1D, NULL, _gloffset_CopyTexImage1D),
-    NAME_FUNC_OFFSET(14420, glCopyTexImage2D, glCopyTexImage2D, NULL, _gloffset_CopyTexImage2D),
-    NAME_FUNC_OFFSET(14440, glCopyTexSubImage1D, glCopyTexSubImage1D, NULL, _gloffset_CopyTexSubImage1D),
-    NAME_FUNC_OFFSET(14463, glCopyTexSubImage2D, glCopyTexSubImage2D, NULL, _gloffset_CopyTexSubImage2D),
-    NAME_FUNC_OFFSET(14486, glDeleteTextures, glDeleteTexturesEXT, glDeleteTexturesEXT, _gloffset_DeleteTextures),
-    NAME_FUNC_OFFSET(14506, glGenTextures, glGenTexturesEXT, glGenTexturesEXT, _gloffset_GenTextures),
-    NAME_FUNC_OFFSET(14523, glGetPointerv, glGetPointerv, NULL, _gloffset_GetPointerv),
-    NAME_FUNC_OFFSET(14540, glIsTexture, glIsTextureEXT, glIsTextureEXT, _gloffset_IsTexture),
-    NAME_FUNC_OFFSET(14555, glPrioritizeTextures, glPrioritizeTextures, NULL, _gloffset_PrioritizeTextures),
-    NAME_FUNC_OFFSET(14579, glTexSubImage1D, glTexSubImage1D, NULL, _gloffset_TexSubImage1D),
-    NAME_FUNC_OFFSET(14598, glTexSubImage2D, glTexSubImage2D, NULL, _gloffset_TexSubImage2D),
-    NAME_FUNC_OFFSET(14617, glBlendColor, glBlendColor, NULL, _gloffset_BlendColor),
-    NAME_FUNC_OFFSET(14633, glBlendEquation, glBlendEquation, NULL, _gloffset_BlendEquation),
-    NAME_FUNC_OFFSET(14652, glDrawRangeElements, glDrawRangeElements, NULL, _gloffset_DrawRangeElements),
-    NAME_FUNC_OFFSET(14675, glColorTable, glColorTable, NULL, _gloffset_ColorTable),
-    NAME_FUNC_OFFSET(14691, glColorTable, glColorTable, NULL, _gloffset_ColorTable),
-    NAME_FUNC_OFFSET(14707, glColorTableParameterfv, glColorTableParameterfv, NULL, _gloffset_ColorTableParameterfv),
-    NAME_FUNC_OFFSET(14734, glColorTableParameteriv, glColorTableParameteriv, NULL, _gloffset_ColorTableParameteriv),
-    NAME_FUNC_OFFSET(14761, glCopyColorTable, glCopyColorTable, NULL, _gloffset_CopyColorTable),
-    NAME_FUNC_OFFSET(14781, glGetColorTable, glGetColorTableEXT, glGetColorTableEXT, _gloffset_GetColorTable),
-    NAME_FUNC_OFFSET(14800, glGetColorTable, glGetColorTableEXT, glGetColorTableEXT, _gloffset_GetColorTable),
-    NAME_FUNC_OFFSET(14819, glGetColorTableParameterfv, glGetColorTableParameterfvEXT, glGetColorTableParameterfvEXT, _gloffset_GetColorTableParameterfv),
-    NAME_FUNC_OFFSET(14849, glGetColorTableParameterfv, glGetColorTableParameterfvEXT, glGetColorTableParameterfvEXT, _gloffset_GetColorTableParameterfv),
-    NAME_FUNC_OFFSET(14879, glGetColorTableParameteriv, glGetColorTableParameterivEXT, glGetColorTableParameterivEXT, _gloffset_GetColorTableParameteriv),
-    NAME_FUNC_OFFSET(14909, glGetColorTableParameteriv, glGetColorTableParameterivEXT, glGetColorTableParameterivEXT, _gloffset_GetColorTableParameteriv),
-    NAME_FUNC_OFFSET(14939, glColorSubTable, glColorSubTable, NULL, _gloffset_ColorSubTable),
-    NAME_FUNC_OFFSET(14958, glCopyColorSubTable, glCopyColorSubTable, NULL, _gloffset_CopyColorSubTable),
-    NAME_FUNC_OFFSET(14981, glConvolutionFilter1D, glConvolutionFilter1D, NULL, _gloffset_ConvolutionFilter1D),
-    NAME_FUNC_OFFSET(15006, glConvolutionFilter2D, glConvolutionFilter2D, NULL, _gloffset_ConvolutionFilter2D),
-    NAME_FUNC_OFFSET(15031, glConvolutionParameterf, glConvolutionParameterf, NULL, _gloffset_ConvolutionParameterf),
-    NAME_FUNC_OFFSET(15058, glConvolutionParameterfv, glConvolutionParameterfv, NULL, _gloffset_ConvolutionParameterfv),
-    NAME_FUNC_OFFSET(15086, glConvolutionParameteri, glConvolutionParameteri, NULL, _gloffset_ConvolutionParameteri),
-    NAME_FUNC_OFFSET(15113, glConvolutionParameteriv, glConvolutionParameteriv, NULL, _gloffset_ConvolutionParameteriv),
-    NAME_FUNC_OFFSET(15141, glCopyConvolutionFilter1D, glCopyConvolutionFilter1D, NULL, _gloffset_CopyConvolutionFilter1D),
-    NAME_FUNC_OFFSET(15170, glCopyConvolutionFilter2D, glCopyConvolutionFilter2D, NULL, _gloffset_CopyConvolutionFilter2D),
-    NAME_FUNC_OFFSET(15199, glGetConvolutionFilter, gl_dispatch_stub_356, gl_dispatch_stub_356, _gloffset_GetConvolutionFilter),
-    NAME_FUNC_OFFSET(15225, glGetConvolutionParameterfv, gl_dispatch_stub_357, gl_dispatch_stub_357, _gloffset_GetConvolutionParameterfv),
-    NAME_FUNC_OFFSET(15256, glGetConvolutionParameteriv, gl_dispatch_stub_358, gl_dispatch_stub_358, _gloffset_GetConvolutionParameteriv),
-    NAME_FUNC_OFFSET(15287, glGetSeparableFilter, gl_dispatch_stub_359, gl_dispatch_stub_359, _gloffset_GetSeparableFilter),
-    NAME_FUNC_OFFSET(15311, glSeparableFilter2D, glSeparableFilter2D, NULL, _gloffset_SeparableFilter2D),
-    NAME_FUNC_OFFSET(15334, glGetHistogram, gl_dispatch_stub_361, gl_dispatch_stub_361, _gloffset_GetHistogram),
-    NAME_FUNC_OFFSET(15352, glGetHistogramParameterfv, gl_dispatch_stub_362, gl_dispatch_stub_362, _gloffset_GetHistogramParameterfv),
-    NAME_FUNC_OFFSET(15381, glGetHistogramParameteriv, gl_dispatch_stub_363, gl_dispatch_stub_363, _gloffset_GetHistogramParameteriv),
-    NAME_FUNC_OFFSET(15410, glGetMinmax, gl_dispatch_stub_364, gl_dispatch_stub_364, _gloffset_GetMinmax),
-    NAME_FUNC_OFFSET(15425, glGetMinmaxParameterfv, gl_dispatch_stub_365, gl_dispatch_stub_365, _gloffset_GetMinmaxParameterfv),
-    NAME_FUNC_OFFSET(15451, glGetMinmaxParameteriv, gl_dispatch_stub_366, gl_dispatch_stub_366, _gloffset_GetMinmaxParameteriv),
-    NAME_FUNC_OFFSET(15477, glHistogram, glHistogram, NULL, _gloffset_Histogram),
-    NAME_FUNC_OFFSET(15492, glMinmax, glMinmax, NULL, _gloffset_Minmax),
-    NAME_FUNC_OFFSET(15504, glResetHistogram, glResetHistogram, NULL, _gloffset_ResetHistogram),
-    NAME_FUNC_OFFSET(15524, glResetMinmax, glResetMinmax, NULL, _gloffset_ResetMinmax),
-    NAME_FUNC_OFFSET(15541, glTexImage3D, glTexImage3D, NULL, _gloffset_TexImage3D),
-    NAME_FUNC_OFFSET(15557, glTexSubImage3D, glTexSubImage3D, NULL, _gloffset_TexSubImage3D),
-    NAME_FUNC_OFFSET(15576, glCopyTexSubImage3D, glCopyTexSubImage3D, NULL, _gloffset_CopyTexSubImage3D),
-    NAME_FUNC_OFFSET(15599, glActiveTextureARB, glActiveTextureARB, NULL, _gloffset_ActiveTextureARB),
-    NAME_FUNC_OFFSET(15615, glClientActiveTextureARB, glClientActiveTextureARB, NULL, _gloffset_ClientActiveTextureARB),
-    NAME_FUNC_OFFSET(15637, glMultiTexCoord1dARB, glMultiTexCoord1dARB, NULL, _gloffset_MultiTexCoord1dARB),
-    NAME_FUNC_OFFSET(15655, glMultiTexCoord1dvARB, glMultiTexCoord1dvARB, NULL, _gloffset_MultiTexCoord1dvARB),
-    NAME_FUNC_OFFSET(15674, glMultiTexCoord1fARB, glMultiTexCoord1fARB, NULL, _gloffset_MultiTexCoord1fARB),
-    NAME_FUNC_OFFSET(15692, glMultiTexCoord1fvARB, glMultiTexCoord1fvARB, NULL, _gloffset_MultiTexCoord1fvARB),
-    NAME_FUNC_OFFSET(15711, glMultiTexCoord1iARB, glMultiTexCoord1iARB, NULL, _gloffset_MultiTexCoord1iARB),
-    NAME_FUNC_OFFSET(15729, glMultiTexCoord1ivARB, glMultiTexCoord1ivARB, NULL, _gloffset_MultiTexCoord1ivARB),
-    NAME_FUNC_OFFSET(15748, glMultiTexCoord1sARB, glMultiTexCoord1sARB, NULL, _gloffset_MultiTexCoord1sARB),
-    NAME_FUNC_OFFSET(15766, glMultiTexCoord1svARB, glMultiTexCoord1svARB, NULL, _gloffset_MultiTexCoord1svARB),
-    NAME_FUNC_OFFSET(15785, glMultiTexCoord2dARB, glMultiTexCoord2dARB, NULL, _gloffset_MultiTexCoord2dARB),
-    NAME_FUNC_OFFSET(15803, glMultiTexCoord2dvARB, glMultiTexCoord2dvARB, NULL, _gloffset_MultiTexCoord2dvARB),
-    NAME_FUNC_OFFSET(15822, glMultiTexCoord2fARB, glMultiTexCoord2fARB, NULL, _gloffset_MultiTexCoord2fARB),
-    NAME_FUNC_OFFSET(15840, glMultiTexCoord2fvARB, glMultiTexCoord2fvARB, NULL, _gloffset_MultiTexCoord2fvARB),
-    NAME_FUNC_OFFSET(15859, glMultiTexCoord2iARB, glMultiTexCoord2iARB, NULL, _gloffset_MultiTexCoord2iARB),
-    NAME_FUNC_OFFSET(15877, glMultiTexCoord2ivARB, glMultiTexCoord2ivARB, NULL, _gloffset_MultiTexCoord2ivARB),
-    NAME_FUNC_OFFSET(15896, glMultiTexCoord2sARB, glMultiTexCoord2sARB, NULL, _gloffset_MultiTexCoord2sARB),
-    NAME_FUNC_OFFSET(15914, glMultiTexCoord2svARB, glMultiTexCoord2svARB, NULL, _gloffset_MultiTexCoord2svARB),
-    NAME_FUNC_OFFSET(15933, glMultiTexCoord3dARB, glMultiTexCoord3dARB, NULL, _gloffset_MultiTexCoord3dARB),
-    NAME_FUNC_OFFSET(15951, glMultiTexCoord3dvARB, glMultiTexCoord3dvARB, NULL, _gloffset_MultiTexCoord3dvARB),
-    NAME_FUNC_OFFSET(15970, glMultiTexCoord3fARB, glMultiTexCoord3fARB, NULL, _gloffset_MultiTexCoord3fARB),
-    NAME_FUNC_OFFSET(15988, glMultiTexCoord3fvARB, glMultiTexCoord3fvARB, NULL, _gloffset_MultiTexCoord3fvARB),
-    NAME_FUNC_OFFSET(16007, glMultiTexCoord3iARB, glMultiTexCoord3iARB, NULL, _gloffset_MultiTexCoord3iARB),
-    NAME_FUNC_OFFSET(16025, glMultiTexCoord3ivARB, glMultiTexCoord3ivARB, NULL, _gloffset_MultiTexCoord3ivARB),
-    NAME_FUNC_OFFSET(16044, glMultiTexCoord3sARB, glMultiTexCoord3sARB, NULL, _gloffset_MultiTexCoord3sARB),
-    NAME_FUNC_OFFSET(16062, glMultiTexCoord3svARB, glMultiTexCoord3svARB, NULL, _gloffset_MultiTexCoord3svARB),
-    NAME_FUNC_OFFSET(16081, glMultiTexCoord4dARB, glMultiTexCoord4dARB, NULL, _gloffset_MultiTexCoord4dARB),
-    NAME_FUNC_OFFSET(16099, glMultiTexCoord4dvARB, glMultiTexCoord4dvARB, NULL, _gloffset_MultiTexCoord4dvARB),
-    NAME_FUNC_OFFSET(16118, glMultiTexCoord4fARB, glMultiTexCoord4fARB, NULL, _gloffset_MultiTexCoord4fARB),
-    NAME_FUNC_OFFSET(16136, glMultiTexCoord4fvARB, glMultiTexCoord4fvARB, NULL, _gloffset_MultiTexCoord4fvARB),
-    NAME_FUNC_OFFSET(16155, glMultiTexCoord4iARB, glMultiTexCoord4iARB, NULL, _gloffset_MultiTexCoord4iARB),
-    NAME_FUNC_OFFSET(16173, glMultiTexCoord4ivARB, glMultiTexCoord4ivARB, NULL, _gloffset_MultiTexCoord4ivARB),
-    NAME_FUNC_OFFSET(16192, glMultiTexCoord4sARB, glMultiTexCoord4sARB, NULL, _gloffset_MultiTexCoord4sARB),
-    NAME_FUNC_OFFSET(16210, glMultiTexCoord4svARB, glMultiTexCoord4svARB, NULL, _gloffset_MultiTexCoord4svARB),
-    NAME_FUNC_OFFSET(16229, glStencilOpSeparate, glStencilOpSeparate, NULL, _gloffset_StencilOpSeparate),
-    NAME_FUNC_OFFSET(16252, glLoadTransposeMatrixdARB, glLoadTransposeMatrixdARB, NULL, _gloffset_LoadTransposeMatrixdARB),
-    NAME_FUNC_OFFSET(16275, glLoadTransposeMatrixfARB, glLoadTransposeMatrixfARB, NULL, _gloffset_LoadTransposeMatrixfARB),
-    NAME_FUNC_OFFSET(16298, glMultTransposeMatrixdARB, glMultTransposeMatrixdARB, NULL, _gloffset_MultTransposeMatrixdARB),
-    NAME_FUNC_OFFSET(16321, glMultTransposeMatrixfARB, glMultTransposeMatrixfARB, NULL, _gloffset_MultTransposeMatrixfARB),
-    NAME_FUNC_OFFSET(16344, glSampleCoverageARB, glSampleCoverageARB, NULL, _gloffset_SampleCoverageARB),
-    NAME_FUNC_OFFSET(16361, glCompressedTexImage1DARB, glCompressedTexImage1DARB, NULL, _gloffset_CompressedTexImage1DARB),
-    NAME_FUNC_OFFSET(16384, glCompressedTexImage2DARB, glCompressedTexImage2DARB, NULL, _gloffset_CompressedTexImage2DARB),
-    NAME_FUNC_OFFSET(16407, glCompressedTexImage3DARB, glCompressedTexImage3DARB, NULL, _gloffset_CompressedTexImage3DARB),
-    NAME_FUNC_OFFSET(16430, glCompressedTexSubImage1DARB, glCompressedTexSubImage1DARB, NULL, _gloffset_CompressedTexSubImage1DARB),
-    NAME_FUNC_OFFSET(16456, glCompressedTexSubImage2DARB, glCompressedTexSubImage2DARB, NULL, _gloffset_CompressedTexSubImage2DARB),
-    NAME_FUNC_OFFSET(16482, glCompressedTexSubImage3DARB, glCompressedTexSubImage3DARB, NULL, _gloffset_CompressedTexSubImage3DARB),
-    NAME_FUNC_OFFSET(16508, glGetCompressedTexImageARB, glGetCompressedTexImageARB, NULL, _gloffset_GetCompressedTexImageARB),
-    NAME_FUNC_OFFSET(16532, glDisableVertexAttribArrayARB, glDisableVertexAttribArrayARB, NULL, _gloffset_DisableVertexAttribArrayARB),
-    NAME_FUNC_OFFSET(16559, glEnableVertexAttribArrayARB, glEnableVertexAttribArrayARB, NULL, _gloffset_EnableVertexAttribArrayARB),
-    NAME_FUNC_OFFSET(16585, glGetVertexAttribdvARB, glGetVertexAttribdvARB, NULL, _gloffset_GetVertexAttribdvARB),
-    NAME_FUNC_OFFSET(16605, glGetVertexAttribfvARB, glGetVertexAttribfvARB, NULL, _gloffset_GetVertexAttribfvARB),
-    NAME_FUNC_OFFSET(16625, glGetVertexAttribivARB, glGetVertexAttribivARB, NULL, _gloffset_GetVertexAttribivARB),
-    NAME_FUNC_OFFSET(16645, glProgramEnvParameter4dARB, glProgramEnvParameter4dARB, NULL, _gloffset_ProgramEnvParameter4dARB),
-    NAME_FUNC_OFFSET(16668, glProgramEnvParameter4dvARB, glProgramEnvParameter4dvARB, NULL, _gloffset_ProgramEnvParameter4dvARB),
-    NAME_FUNC_OFFSET(16692, glProgramEnvParameter4fARB, glProgramEnvParameter4fARB, NULL, _gloffset_ProgramEnvParameter4fARB),
-    NAME_FUNC_OFFSET(16715, glProgramEnvParameter4fvARB, glProgramEnvParameter4fvARB, NULL, _gloffset_ProgramEnvParameter4fvARB),
-    NAME_FUNC_OFFSET(16739, glVertexAttrib1dARB, glVertexAttrib1dARB, NULL, _gloffset_VertexAttrib1dARB),
-    NAME_FUNC_OFFSET(16756, glVertexAttrib1dvARB, glVertexAttrib1dvARB, NULL, _gloffset_VertexAttrib1dvARB),
-    NAME_FUNC_OFFSET(16774, glVertexAttrib1fARB, glVertexAttrib1fARB, NULL, _gloffset_VertexAttrib1fARB),
-    NAME_FUNC_OFFSET(16791, glVertexAttrib1fvARB, glVertexAttrib1fvARB, NULL, _gloffset_VertexAttrib1fvARB),
-    NAME_FUNC_OFFSET(16809, glVertexAttrib1sARB, glVertexAttrib1sARB, NULL, _gloffset_VertexAttrib1sARB),
-    NAME_FUNC_OFFSET(16826, glVertexAttrib1svARB, glVertexAttrib1svARB, NULL, _gloffset_VertexAttrib1svARB),
-    NAME_FUNC_OFFSET(16844, glVertexAttrib2dARB, glVertexAttrib2dARB, NULL, _gloffset_VertexAttrib2dARB),
-    NAME_FUNC_OFFSET(16861, glVertexAttrib2dvARB, glVertexAttrib2dvARB, NULL, _gloffset_VertexAttrib2dvARB),
-    NAME_FUNC_OFFSET(16879, glVertexAttrib2fARB, glVertexAttrib2fARB, NULL, _gloffset_VertexAttrib2fARB),
-    NAME_FUNC_OFFSET(16896, glVertexAttrib2fvARB, glVertexAttrib2fvARB, NULL, _gloffset_VertexAttrib2fvARB),
-    NAME_FUNC_OFFSET(16914, glVertexAttrib2sARB, glVertexAttrib2sARB, NULL, _gloffset_VertexAttrib2sARB),
-    NAME_FUNC_OFFSET(16931, glVertexAttrib2svARB, glVertexAttrib2svARB, NULL, _gloffset_VertexAttrib2svARB),
-    NAME_FUNC_OFFSET(16949, glVertexAttrib3dARB, glVertexAttrib3dARB, NULL, _gloffset_VertexAttrib3dARB),
-    NAME_FUNC_OFFSET(16966, glVertexAttrib3dvARB, glVertexAttrib3dvARB, NULL, _gloffset_VertexAttrib3dvARB),
-    NAME_FUNC_OFFSET(16984, glVertexAttrib3fARB, glVertexAttrib3fARB, NULL, _gloffset_VertexAttrib3fARB),
-    NAME_FUNC_OFFSET(17001, glVertexAttrib3fvARB, glVertexAttrib3fvARB, NULL, _gloffset_VertexAttrib3fvARB),
-    NAME_FUNC_OFFSET(17019, glVertexAttrib3sARB, glVertexAttrib3sARB, NULL, _gloffset_VertexAttrib3sARB),
-    NAME_FUNC_OFFSET(17036, glVertexAttrib3svARB, glVertexAttrib3svARB, NULL, _gloffset_VertexAttrib3svARB),
-    NAME_FUNC_OFFSET(17054, glVertexAttrib4NbvARB, glVertexAttrib4NbvARB, NULL, _gloffset_VertexAttrib4NbvARB),
-    NAME_FUNC_OFFSET(17073, glVertexAttrib4NivARB, glVertexAttrib4NivARB, NULL, _gloffset_VertexAttrib4NivARB),
-    NAME_FUNC_OFFSET(17092, glVertexAttrib4NsvARB, glVertexAttrib4NsvARB, NULL, _gloffset_VertexAttrib4NsvARB),
-    NAME_FUNC_OFFSET(17111, glVertexAttrib4NubARB, glVertexAttrib4NubARB, NULL, _gloffset_VertexAttrib4NubARB),
-    NAME_FUNC_OFFSET(17130, glVertexAttrib4NubvARB, glVertexAttrib4NubvARB, NULL, _gloffset_VertexAttrib4NubvARB),
-    NAME_FUNC_OFFSET(17150, glVertexAttrib4NuivARB, glVertexAttrib4NuivARB, NULL, _gloffset_VertexAttrib4NuivARB),
-    NAME_FUNC_OFFSET(17170, glVertexAttrib4NusvARB, glVertexAttrib4NusvARB, NULL, _gloffset_VertexAttrib4NusvARB),
-    NAME_FUNC_OFFSET(17190, glVertexAttrib4bvARB, glVertexAttrib4bvARB, NULL, _gloffset_VertexAttrib4bvARB),
-    NAME_FUNC_OFFSET(17208, glVertexAttrib4dARB, glVertexAttrib4dARB, NULL, _gloffset_VertexAttrib4dARB),
-    NAME_FUNC_OFFSET(17225, glVertexAttrib4dvARB, glVertexAttrib4dvARB, NULL, _gloffset_VertexAttrib4dvARB),
-    NAME_FUNC_OFFSET(17243, glVertexAttrib4fARB, glVertexAttrib4fARB, NULL, _gloffset_VertexAttrib4fARB),
-    NAME_FUNC_OFFSET(17260, glVertexAttrib4fvARB, glVertexAttrib4fvARB, NULL, _gloffset_VertexAttrib4fvARB),
-    NAME_FUNC_OFFSET(17278, glVertexAttrib4ivARB, glVertexAttrib4ivARB, NULL, _gloffset_VertexAttrib4ivARB),
-    NAME_FUNC_OFFSET(17296, glVertexAttrib4sARB, glVertexAttrib4sARB, NULL, _gloffset_VertexAttrib4sARB),
-    NAME_FUNC_OFFSET(17313, glVertexAttrib4svARB, glVertexAttrib4svARB, NULL, _gloffset_VertexAttrib4svARB),
-    NAME_FUNC_OFFSET(17331, glVertexAttrib4ubvARB, glVertexAttrib4ubvARB, NULL, _gloffset_VertexAttrib4ubvARB),
-    NAME_FUNC_OFFSET(17350, glVertexAttrib4uivARB, glVertexAttrib4uivARB, NULL, _gloffset_VertexAttrib4uivARB),
-    NAME_FUNC_OFFSET(17369, glVertexAttrib4usvARB, glVertexAttrib4usvARB, NULL, _gloffset_VertexAttrib4usvARB),
-    NAME_FUNC_OFFSET(17388, glVertexAttribPointerARB, glVertexAttribPointerARB, NULL, _gloffset_VertexAttribPointerARB),
-    NAME_FUNC_OFFSET(17410, glBindBufferARB, glBindBufferARB, NULL, _gloffset_BindBufferARB),
-    NAME_FUNC_OFFSET(17423, glBufferDataARB, glBufferDataARB, NULL, _gloffset_BufferDataARB),
-    NAME_FUNC_OFFSET(17436, glBufferSubDataARB, glBufferSubDataARB, NULL, _gloffset_BufferSubDataARB),
-    NAME_FUNC_OFFSET(17452, glDeleteBuffersARB, glDeleteBuffersARB, NULL, _gloffset_DeleteBuffersARB),
-    NAME_FUNC_OFFSET(17468, glGenBuffersARB, glGenBuffersARB, NULL, _gloffset_GenBuffersARB),
-    NAME_FUNC_OFFSET(17481, glGetBufferParameterivARB, glGetBufferParameterivARB, NULL, _gloffset_GetBufferParameterivARB),
-    NAME_FUNC_OFFSET(17504, glGetBufferPointervARB, glGetBufferPointervARB, NULL, _gloffset_GetBufferPointervARB),
-    NAME_FUNC_OFFSET(17524, glGetBufferSubDataARB, glGetBufferSubDataARB, NULL, _gloffset_GetBufferSubDataARB),
-    NAME_FUNC_OFFSET(17543, glIsBufferARB, glIsBufferARB, NULL, _gloffset_IsBufferARB),
-    NAME_FUNC_OFFSET(17554, glMapBufferARB, glMapBufferARB, NULL, _gloffset_MapBufferARB),
-    NAME_FUNC_OFFSET(17566, glUnmapBufferARB, glUnmapBufferARB, NULL, _gloffset_UnmapBufferARB),
-    NAME_FUNC_OFFSET(17580, glBeginQueryARB, glBeginQueryARB, NULL, _gloffset_BeginQueryARB),
-    NAME_FUNC_OFFSET(17593, glDeleteQueriesARB, glDeleteQueriesARB, NULL, _gloffset_DeleteQueriesARB),
-    NAME_FUNC_OFFSET(17609, glEndQueryARB, glEndQueryARB, NULL, _gloffset_EndQueryARB),
-    NAME_FUNC_OFFSET(17620, glGenQueriesARB, glGenQueriesARB, NULL, _gloffset_GenQueriesARB),
-    NAME_FUNC_OFFSET(17633, glGetQueryObjectivARB, glGetQueryObjectivARB, NULL, _gloffset_GetQueryObjectivARB),
-    NAME_FUNC_OFFSET(17652, glGetQueryObjectuivARB, glGetQueryObjectuivARB, NULL, _gloffset_GetQueryObjectuivARB),
-    NAME_FUNC_OFFSET(17672, glGetQueryivARB, glGetQueryivARB, NULL, _gloffset_GetQueryivARB),
-    NAME_FUNC_OFFSET(17685, glIsQueryARB, glIsQueryARB, NULL, _gloffset_IsQueryARB),
-    NAME_FUNC_OFFSET(17695, glCompileShaderARB, glCompileShaderARB, NULL, _gloffset_CompileShaderARB),
-    NAME_FUNC_OFFSET(17711, glGetActiveUniformARB, glGetActiveUniformARB, NULL, _gloffset_GetActiveUniformARB),
-    NAME_FUNC_OFFSET(17730, glGetShaderSourceARB, glGetShaderSourceARB, NULL, _gloffset_GetShaderSourceARB),
-    NAME_FUNC_OFFSET(17748, glGetUniformLocationARB, glGetUniformLocationARB, NULL, _gloffset_GetUniformLocationARB),
-    NAME_FUNC_OFFSET(17769, glGetUniformfvARB, glGetUniformfvARB, NULL, _gloffset_GetUniformfvARB),
-    NAME_FUNC_OFFSET(17784, glGetUniformivARB, glGetUniformivARB, NULL, _gloffset_GetUniformivARB),
-    NAME_FUNC_OFFSET(17799, glLinkProgramARB, glLinkProgramARB, NULL, _gloffset_LinkProgramARB),
-    NAME_FUNC_OFFSET(17813, glShaderSourceARB, glShaderSourceARB, NULL, _gloffset_ShaderSourceARB),
-    NAME_FUNC_OFFSET(17828, glUniform1fARB, glUniform1fARB, NULL, _gloffset_Uniform1fARB),
-    NAME_FUNC_OFFSET(17840, glUniform1fvARB, glUniform1fvARB, NULL, _gloffset_Uniform1fvARB),
-    NAME_FUNC_OFFSET(17853, glUniform1iARB, glUniform1iARB, NULL, _gloffset_Uniform1iARB),
-    NAME_FUNC_OFFSET(17865, glUniform1ivARB, glUniform1ivARB, NULL, _gloffset_Uniform1ivARB),
-    NAME_FUNC_OFFSET(17878, glUniform2fARB, glUniform2fARB, NULL, _gloffset_Uniform2fARB),
-    NAME_FUNC_OFFSET(17890, glUniform2fvARB, glUniform2fvARB, NULL, _gloffset_Uniform2fvARB),
-    NAME_FUNC_OFFSET(17903, glUniform2iARB, glUniform2iARB, NULL, _gloffset_Uniform2iARB),
-    NAME_FUNC_OFFSET(17915, glUniform2ivARB, glUniform2ivARB, NULL, _gloffset_Uniform2ivARB),
-    NAME_FUNC_OFFSET(17928, glUniform3fARB, glUniform3fARB, NULL, _gloffset_Uniform3fARB),
-    NAME_FUNC_OFFSET(17940, glUniform3fvARB, glUniform3fvARB, NULL, _gloffset_Uniform3fvARB),
-    NAME_FUNC_OFFSET(17953, glUniform3iARB, glUniform3iARB, NULL, _gloffset_Uniform3iARB),
-    NAME_FUNC_OFFSET(17965, glUniform3ivARB, glUniform3ivARB, NULL, _gloffset_Uniform3ivARB),
-    NAME_FUNC_OFFSET(17978, glUniform4fARB, glUniform4fARB, NULL, _gloffset_Uniform4fARB),
-    NAME_FUNC_OFFSET(17990, glUniform4fvARB, glUniform4fvARB, NULL, _gloffset_Uniform4fvARB),
-    NAME_FUNC_OFFSET(18003, glUniform4iARB, glUniform4iARB, NULL, _gloffset_Uniform4iARB),
-    NAME_FUNC_OFFSET(18015, glUniform4ivARB, glUniform4ivARB, NULL, _gloffset_Uniform4ivARB),
-    NAME_FUNC_OFFSET(18028, glUniformMatrix2fvARB, glUniformMatrix2fvARB, NULL, _gloffset_UniformMatrix2fvARB),
-    NAME_FUNC_OFFSET(18047, glUniformMatrix3fvARB, glUniformMatrix3fvARB, NULL, _gloffset_UniformMatrix3fvARB),
-    NAME_FUNC_OFFSET(18066, glUniformMatrix4fvARB, glUniformMatrix4fvARB, NULL, _gloffset_UniformMatrix4fvARB),
-    NAME_FUNC_OFFSET(18085, glUseProgramObjectARB, glUseProgramObjectARB, NULL, _gloffset_UseProgramObjectARB),
-    NAME_FUNC_OFFSET(18098, glValidateProgramARB, glValidateProgramARB, NULL, _gloffset_ValidateProgramARB),
-    NAME_FUNC_OFFSET(18116, glBindAttribLocationARB, glBindAttribLocationARB, NULL, _gloffset_BindAttribLocationARB),
-    NAME_FUNC_OFFSET(18137, glGetActiveAttribARB, glGetActiveAttribARB, NULL, _gloffset_GetActiveAttribARB),
-    NAME_FUNC_OFFSET(18155, glGetAttribLocationARB, glGetAttribLocationARB, NULL, _gloffset_GetAttribLocationARB),
-    NAME_FUNC_OFFSET(18175, glDrawBuffersARB, glDrawBuffersARB, NULL, _gloffset_DrawBuffersARB),
-    NAME_FUNC_OFFSET(18189, glDrawBuffersARB, glDrawBuffersARB, NULL, _gloffset_DrawBuffersARB),
-    NAME_FUNC_OFFSET(18206, glRenderbufferStorageMultisample, glRenderbufferStorageMultisample, NULL, _gloffset_RenderbufferStorageMultisample),
-    NAME_FUNC_OFFSET(18242, gl_dispatch_stub_584, gl_dispatch_stub_584, NULL, _gloffset_SampleMaskSGIS),
-    NAME_FUNC_OFFSET(18258, gl_dispatch_stub_585, gl_dispatch_stub_585, NULL, _gloffset_SamplePatternSGIS),
-    NAME_FUNC_OFFSET(18277, glPointParameterfEXT, glPointParameterfEXT, NULL, _gloffset_PointParameterfEXT),
-    NAME_FUNC_OFFSET(18295, glPointParameterfEXT, glPointParameterfEXT, NULL, _gloffset_PointParameterfEXT),
-    NAME_FUNC_OFFSET(18316, glPointParameterfEXT, glPointParameterfEXT, NULL, _gloffset_PointParameterfEXT),
-    NAME_FUNC_OFFSET(18338, glPointParameterfvEXT, glPointParameterfvEXT, NULL, _gloffset_PointParameterfvEXT),
-    NAME_FUNC_OFFSET(18357, glPointParameterfvEXT, glPointParameterfvEXT, NULL, _gloffset_PointParameterfvEXT),
-    NAME_FUNC_OFFSET(18379, glPointParameterfvEXT, glPointParameterfvEXT, NULL, _gloffset_PointParameterfvEXT),
-    NAME_FUNC_OFFSET(18402, glSecondaryColor3bEXT, glSecondaryColor3bEXT, NULL, _gloffset_SecondaryColor3bEXT),
-    NAME_FUNC_OFFSET(18421, glSecondaryColor3bvEXT, glSecondaryColor3bvEXT, NULL, _gloffset_SecondaryColor3bvEXT),
-    NAME_FUNC_OFFSET(18441, glSecondaryColor3dEXT, glSecondaryColor3dEXT, NULL, _gloffset_SecondaryColor3dEXT),
-    NAME_FUNC_OFFSET(18460, glSecondaryColor3dvEXT, glSecondaryColor3dvEXT, NULL, _gloffset_SecondaryColor3dvEXT),
-    NAME_FUNC_OFFSET(18480, glSecondaryColor3fEXT, glSecondaryColor3fEXT, NULL, _gloffset_SecondaryColor3fEXT),
-    NAME_FUNC_OFFSET(18499, glSecondaryColor3fvEXT, glSecondaryColor3fvEXT, NULL, _gloffset_SecondaryColor3fvEXT),
-    NAME_FUNC_OFFSET(18519, glSecondaryColor3iEXT, glSecondaryColor3iEXT, NULL, _gloffset_SecondaryColor3iEXT),
-    NAME_FUNC_OFFSET(18538, glSecondaryColor3ivEXT, glSecondaryColor3ivEXT, NULL, _gloffset_SecondaryColor3ivEXT),
-    NAME_FUNC_OFFSET(18558, glSecondaryColor3sEXT, glSecondaryColor3sEXT, NULL, _gloffset_SecondaryColor3sEXT),
-    NAME_FUNC_OFFSET(18577, glSecondaryColor3svEXT, glSecondaryColor3svEXT, NULL, _gloffset_SecondaryColor3svEXT),
-    NAME_FUNC_OFFSET(18597, glSecondaryColor3ubEXT, glSecondaryColor3ubEXT, NULL, _gloffset_SecondaryColor3ubEXT),
-    NAME_FUNC_OFFSET(18617, glSecondaryColor3ubvEXT, glSecondaryColor3ubvEXT, NULL, _gloffset_SecondaryColor3ubvEXT),
-    NAME_FUNC_OFFSET(18638, glSecondaryColor3uiEXT, glSecondaryColor3uiEXT, NULL, _gloffset_SecondaryColor3uiEXT),
-    NAME_FUNC_OFFSET(18658, glSecondaryColor3uivEXT, glSecondaryColor3uivEXT, NULL, _gloffset_SecondaryColor3uivEXT),
-    NAME_FUNC_OFFSET(18679, glSecondaryColor3usEXT, glSecondaryColor3usEXT, NULL, _gloffset_SecondaryColor3usEXT),
-    NAME_FUNC_OFFSET(18699, glSecondaryColor3usvEXT, glSecondaryColor3usvEXT, NULL, _gloffset_SecondaryColor3usvEXT),
-    NAME_FUNC_OFFSET(18720, glSecondaryColorPointerEXT, glSecondaryColorPointerEXT, NULL, _gloffset_SecondaryColorPointerEXT),
-    NAME_FUNC_OFFSET(18744, glMultiDrawArraysEXT, glMultiDrawArraysEXT, NULL, _gloffset_MultiDrawArraysEXT),
-    NAME_FUNC_OFFSET(18762, glMultiDrawElementsEXT, glMultiDrawElementsEXT, NULL, _gloffset_MultiDrawElementsEXT),
-    NAME_FUNC_OFFSET(18782, glFogCoordPointerEXT, glFogCoordPointerEXT, NULL, _gloffset_FogCoordPointerEXT),
-    NAME_FUNC_OFFSET(18800, glFogCoorddEXT, glFogCoorddEXT, NULL, _gloffset_FogCoorddEXT),
-    NAME_FUNC_OFFSET(18812, glFogCoorddvEXT, glFogCoorddvEXT, NULL, _gloffset_FogCoorddvEXT),
-    NAME_FUNC_OFFSET(18825, glFogCoordfEXT, glFogCoordfEXT, NULL, _gloffset_FogCoordfEXT),
-    NAME_FUNC_OFFSET(18837, glFogCoordfvEXT, glFogCoordfvEXT, NULL, _gloffset_FogCoordfvEXT),
-    NAME_FUNC_OFFSET(18850, glBlendFuncSeparateEXT, glBlendFuncSeparateEXT, NULL, _gloffset_BlendFuncSeparateEXT),
-    NAME_FUNC_OFFSET(18870, glBlendFuncSeparateEXT, glBlendFuncSeparateEXT, NULL, _gloffset_BlendFuncSeparateEXT),
-    NAME_FUNC_OFFSET(18894, glWindowPos2dMESA, glWindowPos2dMESA, NULL, _gloffset_WindowPos2dMESA),
-    NAME_FUNC_OFFSET(18908, glWindowPos2dMESA, glWindowPos2dMESA, NULL, _gloffset_WindowPos2dMESA),
-    NAME_FUNC_OFFSET(18925, glWindowPos2dvMESA, glWindowPos2dvMESA, NULL, _gloffset_WindowPos2dvMESA),
-    NAME_FUNC_OFFSET(18940, glWindowPos2dvMESA, glWindowPos2dvMESA, NULL, _gloffset_WindowPos2dvMESA),
-    NAME_FUNC_OFFSET(18958, glWindowPos2fMESA, glWindowPos2fMESA, NULL, _gloffset_WindowPos2fMESA),
-    NAME_FUNC_OFFSET(18972, glWindowPos2fMESA, glWindowPos2fMESA, NULL, _gloffset_WindowPos2fMESA),
-    NAME_FUNC_OFFSET(18989, glWindowPos2fvMESA, glWindowPos2fvMESA, NULL, _gloffset_WindowPos2fvMESA),
-    NAME_FUNC_OFFSET(19004, glWindowPos2fvMESA, glWindowPos2fvMESA, NULL, _gloffset_WindowPos2fvMESA),
-    NAME_FUNC_OFFSET(19022, glWindowPos2iMESA, glWindowPos2iMESA, NULL, _gloffset_WindowPos2iMESA),
-    NAME_FUNC_OFFSET(19036, glWindowPos2iMESA, glWindowPos2iMESA, NULL, _gloffset_WindowPos2iMESA),
-    NAME_FUNC_OFFSET(19053, glWindowPos2ivMESA, glWindowPos2ivMESA, NULL, _gloffset_WindowPos2ivMESA),
-    NAME_FUNC_OFFSET(19068, glWindowPos2ivMESA, glWindowPos2ivMESA, NULL, _gloffset_WindowPos2ivMESA),
-    NAME_FUNC_OFFSET(19086, glWindowPos2sMESA, glWindowPos2sMESA, NULL, _gloffset_WindowPos2sMESA),
-    NAME_FUNC_OFFSET(19100, glWindowPos2sMESA, glWindowPos2sMESA, NULL, _gloffset_WindowPos2sMESA),
-    NAME_FUNC_OFFSET(19117, glWindowPos2svMESA, glWindowPos2svMESA, NULL, _gloffset_WindowPos2svMESA),
-    NAME_FUNC_OFFSET(19132, glWindowPos2svMESA, glWindowPos2svMESA, NULL, _gloffset_WindowPos2svMESA),
-    NAME_FUNC_OFFSET(19150, glWindowPos3dMESA, glWindowPos3dMESA, NULL, _gloffset_WindowPos3dMESA),
-    NAME_FUNC_OFFSET(19164, glWindowPos3dMESA, glWindowPos3dMESA, NULL, _gloffset_WindowPos3dMESA),
-    NAME_FUNC_OFFSET(19181, glWindowPos3dvMESA, glWindowPos3dvMESA, NULL, _gloffset_WindowPos3dvMESA),
-    NAME_FUNC_OFFSET(19196, glWindowPos3dvMESA, glWindowPos3dvMESA, NULL, _gloffset_WindowPos3dvMESA),
-    NAME_FUNC_OFFSET(19214, glWindowPos3fMESA, glWindowPos3fMESA, NULL, _gloffset_WindowPos3fMESA),
-    NAME_FUNC_OFFSET(19228, glWindowPos3fMESA, glWindowPos3fMESA, NULL, _gloffset_WindowPos3fMESA),
-    NAME_FUNC_OFFSET(19245, glWindowPos3fvMESA, glWindowPos3fvMESA, NULL, _gloffset_WindowPos3fvMESA),
-    NAME_FUNC_OFFSET(19260, glWindowPos3fvMESA, glWindowPos3fvMESA, NULL, _gloffset_WindowPos3fvMESA),
-    NAME_FUNC_OFFSET(19278, glWindowPos3iMESA, glWindowPos3iMESA, NULL, _gloffset_WindowPos3iMESA),
-    NAME_FUNC_OFFSET(19292, glWindowPos3iMESA, glWindowPos3iMESA, NULL, _gloffset_WindowPos3iMESA),
-    NAME_FUNC_OFFSET(19309, glWindowPos3ivMESA, glWindowPos3ivMESA, NULL, _gloffset_WindowPos3ivMESA),
-    NAME_FUNC_OFFSET(19324, glWindowPos3ivMESA, glWindowPos3ivMESA, NULL, _gloffset_WindowPos3ivMESA),
-    NAME_FUNC_OFFSET(19342, glWindowPos3sMESA, glWindowPos3sMESA, NULL, _gloffset_WindowPos3sMESA),
-    NAME_FUNC_OFFSET(19356, glWindowPos3sMESA, glWindowPos3sMESA, NULL, _gloffset_WindowPos3sMESA),
-    NAME_FUNC_OFFSET(19373, glWindowPos3svMESA, glWindowPos3svMESA, NULL, _gloffset_WindowPos3svMESA),
-    NAME_FUNC_OFFSET(19388, glWindowPos3svMESA, glWindowPos3svMESA, NULL, _gloffset_WindowPos3svMESA),
-    NAME_FUNC_OFFSET(19406, glBindProgramNV, glBindProgramNV, NULL, _gloffset_BindProgramNV),
-    NAME_FUNC_OFFSET(19423, glDeleteProgramsNV, glDeleteProgramsNV, NULL, _gloffset_DeleteProgramsNV),
-    NAME_FUNC_OFFSET(19443, glGenProgramsNV, glGenProgramsNV, NULL, _gloffset_GenProgramsNV),
-    NAME_FUNC_OFFSET(19460, glGetVertexAttribPointervNV, glGetVertexAttribPointervNV, NULL, _gloffset_GetVertexAttribPointervNV),
-    NAME_FUNC_OFFSET(19486, glGetVertexAttribPointervNV, glGetVertexAttribPointervNV, NULL, _gloffset_GetVertexAttribPointervNV),
-    NAME_FUNC_OFFSET(19515, glIsProgramNV, glIsProgramNV, NULL, _gloffset_IsProgramNV),
-    NAME_FUNC_OFFSET(19530, glPointParameteriNV, glPointParameteriNV, NULL, _gloffset_PointParameteriNV),
-    NAME_FUNC_OFFSET(19548, glPointParameterivNV, glPointParameterivNV, NULL, _gloffset_PointParameterivNV),
-    NAME_FUNC_OFFSET(19567, gl_dispatch_stub_755, gl_dispatch_stub_755, NULL, _gloffset_DeleteVertexArraysAPPLE),
-    NAME_FUNC_OFFSET(19588, gl_dispatch_stub_757, gl_dispatch_stub_757, NULL, _gloffset_IsVertexArrayAPPLE),
-    NAME_FUNC_OFFSET(19604, gl_dispatch_stub_765, gl_dispatch_stub_765, NULL, _gloffset_BlendEquationSeparateEXT),
-    NAME_FUNC_OFFSET(19628, gl_dispatch_stub_765, gl_dispatch_stub_765, NULL, _gloffset_BlendEquationSeparateEXT),
-    NAME_FUNC_OFFSET(19655, glBindFramebufferEXT, glBindFramebufferEXT, NULL, _gloffset_BindFramebufferEXT),
-    NAME_FUNC_OFFSET(19673, glBindRenderbufferEXT, glBindRenderbufferEXT, NULL, _gloffset_BindRenderbufferEXT),
-    NAME_FUNC_OFFSET(19692, glCheckFramebufferStatusEXT, glCheckFramebufferStatusEXT, NULL, _gloffset_CheckFramebufferStatusEXT),
-    NAME_FUNC_OFFSET(19717, glDeleteFramebuffersEXT, glDeleteFramebuffersEXT, NULL, _gloffset_DeleteFramebuffersEXT),
-    NAME_FUNC_OFFSET(19738, glDeleteRenderbuffersEXT, glDeleteRenderbuffersEXT, NULL, _gloffset_DeleteRenderbuffersEXT),
-    NAME_FUNC_OFFSET(19760, glFramebufferRenderbufferEXT, glFramebufferRenderbufferEXT, NULL, _gloffset_FramebufferRenderbufferEXT),
-    NAME_FUNC_OFFSET(19786, glFramebufferTexture1DEXT, glFramebufferTexture1DEXT, NULL, _gloffset_FramebufferTexture1DEXT),
-    NAME_FUNC_OFFSET(19809, glFramebufferTexture2DEXT, glFramebufferTexture2DEXT, NULL, _gloffset_FramebufferTexture2DEXT),
-    NAME_FUNC_OFFSET(19832, glFramebufferTexture3DEXT, glFramebufferTexture3DEXT, NULL, _gloffset_FramebufferTexture3DEXT),
-    NAME_FUNC_OFFSET(19855, glGenFramebuffersEXT, glGenFramebuffersEXT, NULL, _gloffset_GenFramebuffersEXT),
-    NAME_FUNC_OFFSET(19873, glGenRenderbuffersEXT, glGenRenderbuffersEXT, NULL, _gloffset_GenRenderbuffersEXT),
-    NAME_FUNC_OFFSET(19892, glGenerateMipmapEXT, glGenerateMipmapEXT, NULL, _gloffset_GenerateMipmapEXT),
-    NAME_FUNC_OFFSET(19909, glGetFramebufferAttachmentParameterivEXT, glGetFramebufferAttachmentParameterivEXT, NULL, _gloffset_GetFramebufferAttachmentParameterivEXT),
-    NAME_FUNC_OFFSET(19947, glGetRenderbufferParameterivEXT, glGetRenderbufferParameterivEXT, NULL, _gloffset_GetRenderbufferParameterivEXT),
-    NAME_FUNC_OFFSET(19976, glIsFramebufferEXT, glIsFramebufferEXT, NULL, _gloffset_IsFramebufferEXT),
-    NAME_FUNC_OFFSET(19992, glIsRenderbufferEXT, glIsRenderbufferEXT, NULL, _gloffset_IsRenderbufferEXT),
-    NAME_FUNC_OFFSET(20009, glRenderbufferStorageEXT, glRenderbufferStorageEXT, NULL, _gloffset_RenderbufferStorageEXT),
-    NAME_FUNC_OFFSET(20031, gl_dispatch_stub_783, gl_dispatch_stub_783, NULL, _gloffset_BlitFramebufferEXT),
-    NAME_FUNC_OFFSET(20049, glFramebufferTextureLayerEXT, glFramebufferTextureLayerEXT, NULL, _gloffset_FramebufferTextureLayerEXT),
-    NAME_FUNC_OFFSET(20075, glProvokingVertexEXT, glProvokingVertexEXT, NULL, _gloffset_ProvokingVertexEXT),
+    NAME_FUNC_OFFSET(14122, glGetObjectParameterivAPPLE, glGetObjectParameterivAPPLE, NULL, _gloffset_GetObjectParameterivAPPLE),
+    NAME_FUNC_OFFSET(14150, glObjectPurgeableAPPLE, glObjectPurgeableAPPLE, NULL, _gloffset_ObjectPurgeableAPPLE),
+    NAME_FUNC_OFFSET(14173, glObjectUnpurgeableAPPLE, glObjectUnpurgeableAPPLE, NULL, _gloffset_ObjectUnpurgeableAPPLE),
+    NAME_FUNC_OFFSET(14198, gl_dispatch_stub_801, gl_dispatch_stub_801, NULL, _gloffset_StencilFuncSeparateATI),
+    NAME_FUNC_OFFSET(14223, gl_dispatch_stub_802, gl_dispatch_stub_802, NULL, _gloffset_ProgramEnvParameters4fvEXT),
+    NAME_FUNC_OFFSET(14252, gl_dispatch_stub_803, gl_dispatch_stub_803, NULL, _gloffset_ProgramLocalParameters4fvEXT),
+    NAME_FUNC_OFFSET(14283, gl_dispatch_stub_804, gl_dispatch_stub_804, NULL, _gloffset_GetQueryObjecti64vEXT),
+    NAME_FUNC_OFFSET(14307, gl_dispatch_stub_805, gl_dispatch_stub_805, NULL, _gloffset_GetQueryObjectui64vEXT),
+    NAME_FUNC_OFFSET(14332, glEGLImageTargetRenderbufferStorageOES, glEGLImageTargetRenderbufferStorageOES, NULL, _gloffset_EGLImageTargetRenderbufferStorageOES),
+    NAME_FUNC_OFFSET(14371, glEGLImageTargetTexture2DOES, glEGLImageTargetTexture2DOES, NULL, _gloffset_EGLImageTargetTexture2DOES),
+    NAME_FUNC_OFFSET(14400, glArrayElement, glArrayElement, NULL, _gloffset_ArrayElement),
+    NAME_FUNC_OFFSET(14418, glBindTexture, glBindTexture, NULL, _gloffset_BindTexture),
+    NAME_FUNC_OFFSET(14435, glDrawArrays, glDrawArrays, NULL, _gloffset_DrawArrays),
+    NAME_FUNC_OFFSET(14451, glAreTexturesResident, glAreTexturesResidentEXT, glAreTexturesResidentEXT, _gloffset_AreTexturesResident),
+    NAME_FUNC_OFFSET(14476, glCopyTexImage1D, glCopyTexImage1D, NULL, _gloffset_CopyTexImage1D),
+    NAME_FUNC_OFFSET(14496, glCopyTexImage2D, glCopyTexImage2D, NULL, _gloffset_CopyTexImage2D),
+    NAME_FUNC_OFFSET(14516, glCopyTexSubImage1D, glCopyTexSubImage1D, NULL, _gloffset_CopyTexSubImage1D),
+    NAME_FUNC_OFFSET(14539, glCopyTexSubImage2D, glCopyTexSubImage2D, NULL, _gloffset_CopyTexSubImage2D),
+    NAME_FUNC_OFFSET(14562, glDeleteTextures, glDeleteTexturesEXT, glDeleteTexturesEXT, _gloffset_DeleteTextures),
+    NAME_FUNC_OFFSET(14582, glGenTextures, glGenTexturesEXT, glGenTexturesEXT, _gloffset_GenTextures),
+    NAME_FUNC_OFFSET(14599, glGetPointerv, glGetPointerv, NULL, _gloffset_GetPointerv),
+    NAME_FUNC_OFFSET(14616, glIsTexture, glIsTextureEXT, glIsTextureEXT, _gloffset_IsTexture),
+    NAME_FUNC_OFFSET(14631, glPrioritizeTextures, glPrioritizeTextures, NULL, _gloffset_PrioritizeTextures),
+    NAME_FUNC_OFFSET(14655, glTexSubImage1D, glTexSubImage1D, NULL, _gloffset_TexSubImage1D),
+    NAME_FUNC_OFFSET(14674, glTexSubImage2D, glTexSubImage2D, NULL, _gloffset_TexSubImage2D),
+    NAME_FUNC_OFFSET(14693, glBlendColor, glBlendColor, NULL, _gloffset_BlendColor),
+    NAME_FUNC_OFFSET(14709, glBlendEquation, glBlendEquation, NULL, _gloffset_BlendEquation),
+    NAME_FUNC_OFFSET(14728, glDrawRangeElements, glDrawRangeElements, NULL, _gloffset_DrawRangeElements),
+    NAME_FUNC_OFFSET(14751, glColorTable, glColorTable, NULL, _gloffset_ColorTable),
+    NAME_FUNC_OFFSET(14767, glColorTable, glColorTable, NULL, _gloffset_ColorTable),
+    NAME_FUNC_OFFSET(14783, glColorTableParameterfv, glColorTableParameterfv, NULL, _gloffset_ColorTableParameterfv),
+    NAME_FUNC_OFFSET(14810, glColorTableParameteriv, glColorTableParameteriv, NULL, _gloffset_ColorTableParameteriv),
+    NAME_FUNC_OFFSET(14837, glCopyColorTable, glCopyColorTable, NULL, _gloffset_CopyColorTable),
+    NAME_FUNC_OFFSET(14857, glGetColorTable, glGetColorTableEXT, glGetColorTableEXT, _gloffset_GetColorTable),
+    NAME_FUNC_OFFSET(14876, glGetColorTable, glGetColorTableEXT, glGetColorTableEXT, _gloffset_GetColorTable),
+    NAME_FUNC_OFFSET(14895, glGetColorTableParameterfv, glGetColorTableParameterfvEXT, glGetColorTableParameterfvEXT, _gloffset_GetColorTableParameterfv),
+    NAME_FUNC_OFFSET(14925, glGetColorTableParameterfv, glGetColorTableParameterfvEXT, glGetColorTableParameterfvEXT, _gloffset_GetColorTableParameterfv),
+    NAME_FUNC_OFFSET(14955, glGetColorTableParameteriv, glGetColorTableParameterivEXT, glGetColorTableParameterivEXT, _gloffset_GetColorTableParameteriv),
+    NAME_FUNC_OFFSET(14985, glGetColorTableParameteriv, glGetColorTableParameterivEXT, glGetColorTableParameterivEXT, _gloffset_GetColorTableParameteriv),
+    NAME_FUNC_OFFSET(15015, glColorSubTable, glColorSubTable, NULL, _gloffset_ColorSubTable),
+    NAME_FUNC_OFFSET(15034, glCopyColorSubTable, glCopyColorSubTable, NULL, _gloffset_CopyColorSubTable),
+    NAME_FUNC_OFFSET(15057, glConvolutionFilter1D, glConvolutionFilter1D, NULL, _gloffset_ConvolutionFilter1D),
+    NAME_FUNC_OFFSET(15082, glConvolutionFilter2D, glConvolutionFilter2D, NULL, _gloffset_ConvolutionFilter2D),
+    NAME_FUNC_OFFSET(15107, glConvolutionParameterf, glConvolutionParameterf, NULL, _gloffset_ConvolutionParameterf),
+    NAME_FUNC_OFFSET(15134, glConvolutionParameterfv, glConvolutionParameterfv, NULL, _gloffset_ConvolutionParameterfv),
+    NAME_FUNC_OFFSET(15162, glConvolutionParameteri, glConvolutionParameteri, NULL, _gloffset_ConvolutionParameteri),
+    NAME_FUNC_OFFSET(15189, glConvolutionParameteriv, glConvolutionParameteriv, NULL, _gloffset_ConvolutionParameteriv),
+    NAME_FUNC_OFFSET(15217, glCopyConvolutionFilter1D, glCopyConvolutionFilter1D, NULL, _gloffset_CopyConvolutionFilter1D),
+    NAME_FUNC_OFFSET(15246, glCopyConvolutionFilter2D, glCopyConvolutionFilter2D, NULL, _gloffset_CopyConvolutionFilter2D),
+    NAME_FUNC_OFFSET(15275, glGetConvolutionFilter, gl_dispatch_stub_356, gl_dispatch_stub_356, _gloffset_GetConvolutionFilter),
+    NAME_FUNC_OFFSET(15301, glGetConvolutionParameterfv, gl_dispatch_stub_357, gl_dispatch_stub_357, _gloffset_GetConvolutionParameterfv),
+    NAME_FUNC_OFFSET(15332, glGetConvolutionParameteriv, gl_dispatch_stub_358, gl_dispatch_stub_358, _gloffset_GetConvolutionParameteriv),
+    NAME_FUNC_OFFSET(15363, glGetSeparableFilter, gl_dispatch_stub_359, gl_dispatch_stub_359, _gloffset_GetSeparableFilter),
+    NAME_FUNC_OFFSET(15387, glSeparableFilter2D, glSeparableFilter2D, NULL, _gloffset_SeparableFilter2D),
+    NAME_FUNC_OFFSET(15410, glGetHistogram, gl_dispatch_stub_361, gl_dispatch_stub_361, _gloffset_GetHistogram),
+    NAME_FUNC_OFFSET(15428, glGetHistogramParameterfv, gl_dispatch_stub_362, gl_dispatch_stub_362, _gloffset_GetHistogramParameterfv),
+    NAME_FUNC_OFFSET(15457, glGetHistogramParameteriv, gl_dispatch_stub_363, gl_dispatch_stub_363, _gloffset_GetHistogramParameteriv),
+    NAME_FUNC_OFFSET(15486, glGetMinmax, gl_dispatch_stub_364, gl_dispatch_stub_364, _gloffset_GetMinmax),
+    NAME_FUNC_OFFSET(15501, glGetMinmaxParameterfv, gl_dispatch_stub_365, gl_dispatch_stub_365, _gloffset_GetMinmaxParameterfv),
+    NAME_FUNC_OFFSET(15527, glGetMinmaxParameteriv, gl_dispatch_stub_366, gl_dispatch_stub_366, _gloffset_GetMinmaxParameteriv),
+    NAME_FUNC_OFFSET(15553, glHistogram, glHistogram, NULL, _gloffset_Histogram),
+    NAME_FUNC_OFFSET(15568, glMinmax, glMinmax, NULL, _gloffset_Minmax),
+    NAME_FUNC_OFFSET(15580, glResetHistogram, glResetHistogram, NULL, _gloffset_ResetHistogram),
+    NAME_FUNC_OFFSET(15600, glResetMinmax, glResetMinmax, NULL, _gloffset_ResetMinmax),
+    NAME_FUNC_OFFSET(15617, glTexImage3D, glTexImage3D, NULL, _gloffset_TexImage3D),
+    NAME_FUNC_OFFSET(15633, glTexSubImage3D, glTexSubImage3D, NULL, _gloffset_TexSubImage3D),
+    NAME_FUNC_OFFSET(15652, glCopyTexSubImage3D, glCopyTexSubImage3D, NULL, _gloffset_CopyTexSubImage3D),
+    NAME_FUNC_OFFSET(15675, glActiveTextureARB, glActiveTextureARB, NULL, _gloffset_ActiveTextureARB),
+    NAME_FUNC_OFFSET(15691, glClientActiveTextureARB, glClientActiveTextureARB, NULL, _gloffset_ClientActiveTextureARB),
+    NAME_FUNC_OFFSET(15713, glMultiTexCoord1dARB, glMultiTexCoord1dARB, NULL, _gloffset_MultiTexCoord1dARB),
+    NAME_FUNC_OFFSET(15731, glMultiTexCoord1dvARB, glMultiTexCoord1dvARB, NULL, _gloffset_MultiTexCoord1dvARB),
+    NAME_FUNC_OFFSET(15750, glMultiTexCoord1fARB, glMultiTexCoord1fARB, NULL, _gloffset_MultiTexCoord1fARB),
+    NAME_FUNC_OFFSET(15768, glMultiTexCoord1fvARB, glMultiTexCoord1fvARB, NULL, _gloffset_MultiTexCoord1fvARB),
+    NAME_FUNC_OFFSET(15787, glMultiTexCoord1iARB, glMultiTexCoord1iARB, NULL, _gloffset_MultiTexCoord1iARB),
+    NAME_FUNC_OFFSET(15805, glMultiTexCoord1ivARB, glMultiTexCoord1ivARB, NULL, _gloffset_MultiTexCoord1ivARB),
+    NAME_FUNC_OFFSET(15824, glMultiTexCoord1sARB, glMultiTexCoord1sARB, NULL, _gloffset_MultiTexCoord1sARB),
+    NAME_FUNC_OFFSET(15842, glMultiTexCoord1svARB, glMultiTexCoord1svARB, NULL, _gloffset_MultiTexCoord1svARB),
+    NAME_FUNC_OFFSET(15861, glMultiTexCoord2dARB, glMultiTexCoord2dARB, NULL, _gloffset_MultiTexCoord2dARB),
+    NAME_FUNC_OFFSET(15879, glMultiTexCoord2dvARB, glMultiTexCoord2dvARB, NULL, _gloffset_MultiTexCoord2dvARB),
+    NAME_FUNC_OFFSET(15898, glMultiTexCoord2fARB, glMultiTexCoord2fARB, NULL, _gloffset_MultiTexCoord2fARB),
+    NAME_FUNC_OFFSET(15916, glMultiTexCoord2fvARB, glMultiTexCoord2fvARB, NULL, _gloffset_MultiTexCoord2fvARB),
+    NAME_FUNC_OFFSET(15935, glMultiTexCoord2iARB, glMultiTexCoord2iARB, NULL, _gloffset_MultiTexCoord2iARB),
+    NAME_FUNC_OFFSET(15953, glMultiTexCoord2ivARB, glMultiTexCoord2ivARB, NULL, _gloffset_MultiTexCoord2ivARB),
+    NAME_FUNC_OFFSET(15972, glMultiTexCoord2sARB, glMultiTexCoord2sARB, NULL, _gloffset_MultiTexCoord2sARB),
+    NAME_FUNC_OFFSET(15990, glMultiTexCoord2svARB, glMultiTexCoord2svARB, NULL, _gloffset_MultiTexCoord2svARB),
+    NAME_FUNC_OFFSET(16009, glMultiTexCoord3dARB, glMultiTexCoord3dARB, NULL, _gloffset_MultiTexCoord3dARB),
+    NAME_FUNC_OFFSET(16027, glMultiTexCoord3dvARB, glMultiTexCoord3dvARB, NULL, _gloffset_MultiTexCoord3dvARB),
+    NAME_FUNC_OFFSET(16046, glMultiTexCoord3fARB, glMultiTexCoord3fARB, NULL, _gloffset_MultiTexCoord3fARB),
+    NAME_FUNC_OFFSET(16064, glMultiTexCoord3fvARB, glMultiTexCoord3fvARB, NULL, _gloffset_MultiTexCoord3fvARB),
+    NAME_FUNC_OFFSET(16083, glMultiTexCoord3iARB, glMultiTexCoord3iARB, NULL, _gloffset_MultiTexCoord3iARB),
+    NAME_FUNC_OFFSET(16101, glMultiTexCoord3ivARB, glMultiTexCoord3ivARB, NULL, _gloffset_MultiTexCoord3ivARB),
+    NAME_FUNC_OFFSET(16120, glMultiTexCoord3sARB, glMultiTexCoord3sARB, NULL, _gloffset_MultiTexCoord3sARB),
+    NAME_FUNC_OFFSET(16138, glMultiTexCoord3svARB, glMultiTexCoord3svARB, NULL, _gloffset_MultiTexCoord3svARB),
+    NAME_FUNC_OFFSET(16157, glMultiTexCoord4dARB, glMultiTexCoord4dARB, NULL, _gloffset_MultiTexCoord4dARB),
+    NAME_FUNC_OFFSET(16175, glMultiTexCoord4dvARB, glMultiTexCoord4dvARB, NULL, _gloffset_MultiTexCoord4dvARB),
+    NAME_FUNC_OFFSET(16194, glMultiTexCoord4fARB, glMultiTexCoord4fARB, NULL, _gloffset_MultiTexCoord4fARB),
+    NAME_FUNC_OFFSET(16212, glMultiTexCoord4fvARB, glMultiTexCoord4fvARB, NULL, _gloffset_MultiTexCoord4fvARB),
+    NAME_FUNC_OFFSET(16231, glMultiTexCoord4iARB, glMultiTexCoord4iARB, NULL, _gloffset_MultiTexCoord4iARB),
+    NAME_FUNC_OFFSET(16249, glMultiTexCoord4ivARB, glMultiTexCoord4ivARB, NULL, _gloffset_MultiTexCoord4ivARB),
+    NAME_FUNC_OFFSET(16268, glMultiTexCoord4sARB, glMultiTexCoord4sARB, NULL, _gloffset_MultiTexCoord4sARB),
+    NAME_FUNC_OFFSET(16286, glMultiTexCoord4svARB, glMultiTexCoord4svARB, NULL, _gloffset_MultiTexCoord4svARB),
+    NAME_FUNC_OFFSET(16305, glStencilOpSeparate, glStencilOpSeparate, NULL, _gloffset_StencilOpSeparate),
+    NAME_FUNC_OFFSET(16328, glLoadTransposeMatrixdARB, glLoadTransposeMatrixdARB, NULL, _gloffset_LoadTransposeMatrixdARB),
+    NAME_FUNC_OFFSET(16351, glLoadTransposeMatrixfARB, glLoadTransposeMatrixfARB, NULL, _gloffset_LoadTransposeMatrixfARB),
+    NAME_FUNC_OFFSET(16374, glMultTransposeMatrixdARB, glMultTransposeMatrixdARB, NULL, _gloffset_MultTransposeMatrixdARB),
+    NAME_FUNC_OFFSET(16397, glMultTransposeMatrixfARB, glMultTransposeMatrixfARB, NULL, _gloffset_MultTransposeMatrixfARB),
+    NAME_FUNC_OFFSET(16420, glSampleCoverageARB, glSampleCoverageARB, NULL, _gloffset_SampleCoverageARB),
+    NAME_FUNC_OFFSET(16437, glCompressedTexImage1DARB, glCompressedTexImage1DARB, NULL, _gloffset_CompressedTexImage1DARB),
+    NAME_FUNC_OFFSET(16460, glCompressedTexImage2DARB, glCompressedTexImage2DARB, NULL, _gloffset_CompressedTexImage2DARB),
+    NAME_FUNC_OFFSET(16483, glCompressedTexImage3DARB, glCompressedTexImage3DARB, NULL, _gloffset_CompressedTexImage3DARB),
+    NAME_FUNC_OFFSET(16506, glCompressedTexSubImage1DARB, glCompressedTexSubImage1DARB, NULL, _gloffset_CompressedTexSubImage1DARB),
+    NAME_FUNC_OFFSET(16532, glCompressedTexSubImage2DARB, glCompressedTexSubImage2DARB, NULL, _gloffset_CompressedTexSubImage2DARB),
+    NAME_FUNC_OFFSET(16558, glCompressedTexSubImage3DARB, glCompressedTexSubImage3DARB, NULL, _gloffset_CompressedTexSubImage3DARB),
+    NAME_FUNC_OFFSET(16584, glGetCompressedTexImageARB, glGetCompressedTexImageARB, NULL, _gloffset_GetCompressedTexImageARB),
+    NAME_FUNC_OFFSET(16608, glDisableVertexAttribArrayARB, glDisableVertexAttribArrayARB, NULL, _gloffset_DisableVertexAttribArrayARB),
+    NAME_FUNC_OFFSET(16635, glEnableVertexAttribArrayARB, glEnableVertexAttribArrayARB, NULL, _gloffset_EnableVertexAttribArrayARB),
+    NAME_FUNC_OFFSET(16661, glGetVertexAttribdvARB, glGetVertexAttribdvARB, NULL, _gloffset_GetVertexAttribdvARB),
+    NAME_FUNC_OFFSET(16681, glGetVertexAttribfvARB, glGetVertexAttribfvARB, NULL, _gloffset_GetVertexAttribfvARB),
+    NAME_FUNC_OFFSET(16701, glGetVertexAttribivARB, glGetVertexAttribivARB, NULL, _gloffset_GetVertexAttribivARB),
+    NAME_FUNC_OFFSET(16721, glProgramEnvParameter4dARB, glProgramEnvParameter4dARB, NULL, _gloffset_ProgramEnvParameter4dARB),
+    NAME_FUNC_OFFSET(16744, glProgramEnvParameter4dvARB, glProgramEnvParameter4dvARB, NULL, _gloffset_ProgramEnvParameter4dvARB),
+    NAME_FUNC_OFFSET(16768, glProgramEnvParameter4fARB, glProgramEnvParameter4fARB, NULL, _gloffset_ProgramEnvParameter4fARB),
+    NAME_FUNC_OFFSET(16791, glProgramEnvParameter4fvARB, glProgramEnvParameter4fvARB, NULL, _gloffset_ProgramEnvParameter4fvARB),
+    NAME_FUNC_OFFSET(16815, glVertexAttrib1dARB, glVertexAttrib1dARB, NULL, _gloffset_VertexAttrib1dARB),
+    NAME_FUNC_OFFSET(16832, glVertexAttrib1dvARB, glVertexAttrib1dvARB, NULL, _gloffset_VertexAttrib1dvARB),
+    NAME_FUNC_OFFSET(16850, glVertexAttrib1fARB, glVertexAttrib1fARB, NULL, _gloffset_VertexAttrib1fARB),
+    NAME_FUNC_OFFSET(16867, glVertexAttrib1fvARB, glVertexAttrib1fvARB, NULL, _gloffset_VertexAttrib1fvARB),
+    NAME_FUNC_OFFSET(16885, glVertexAttrib1sARB, glVertexAttrib1sARB, NULL, _gloffset_VertexAttrib1sARB),
+    NAME_FUNC_OFFSET(16902, glVertexAttrib1svARB, glVertexAttrib1svARB, NULL, _gloffset_VertexAttrib1svARB),
+    NAME_FUNC_OFFSET(16920, glVertexAttrib2dARB, glVertexAttrib2dARB, NULL, _gloffset_VertexAttrib2dARB),
+    NAME_FUNC_OFFSET(16937, glVertexAttrib2dvARB, glVertexAttrib2dvARB, NULL, _gloffset_VertexAttrib2dvARB),
+    NAME_FUNC_OFFSET(16955, glVertexAttrib2fARB, glVertexAttrib2fARB, NULL, _gloffset_VertexAttrib2fARB),
+    NAME_FUNC_OFFSET(16972, glVertexAttrib2fvARB, glVertexAttrib2fvARB, NULL, _gloffset_VertexAttrib2fvARB),
+    NAME_FUNC_OFFSET(16990, glVertexAttrib2sARB, glVertexAttrib2sARB, NULL, _gloffset_VertexAttrib2sARB),
+    NAME_FUNC_OFFSET(17007, glVertexAttrib2svARB, glVertexAttrib2svARB, NULL, _gloffset_VertexAttrib2svARB),
+    NAME_FUNC_OFFSET(17025, glVertexAttrib3dARB, glVertexAttrib3dARB, NULL, _gloffset_VertexAttrib3dARB),
+    NAME_FUNC_OFFSET(17042, glVertexAttrib3dvARB, glVertexAttrib3dvARB, NULL, _gloffset_VertexAttrib3dvARB),
+    NAME_FUNC_OFFSET(17060, glVertexAttrib3fARB, glVertexAttrib3fARB, NULL, _gloffset_VertexAttrib3fARB),
+    NAME_FUNC_OFFSET(17077, glVertexAttrib3fvARB, glVertexAttrib3fvARB, NULL, _gloffset_VertexAttrib3fvARB),
+    NAME_FUNC_OFFSET(17095, glVertexAttrib3sARB, glVertexAttrib3sARB, NULL, _gloffset_VertexAttrib3sARB),
+    NAME_FUNC_OFFSET(17112, glVertexAttrib3svARB, glVertexAttrib3svARB, NULL, _gloffset_VertexAttrib3svARB),
+    NAME_FUNC_OFFSET(17130, glVertexAttrib4NbvARB, glVertexAttrib4NbvARB, NULL, _gloffset_VertexAttrib4NbvARB),
+    NAME_FUNC_OFFSET(17149, glVertexAttrib4NivARB, glVertexAttrib4NivARB, NULL, _gloffset_VertexAttrib4NivARB),
+    NAME_FUNC_OFFSET(17168, glVertexAttrib4NsvARB, glVertexAttrib4NsvARB, NULL, _gloffset_VertexAttrib4NsvARB),
+    NAME_FUNC_OFFSET(17187, glVertexAttrib4NubARB, glVertexAttrib4NubARB, NULL, _gloffset_VertexAttrib4NubARB),
+    NAME_FUNC_OFFSET(17206, glVertexAttrib4NubvARB, glVertexAttrib4NubvARB, NULL, _gloffset_VertexAttrib4NubvARB),
+    NAME_FUNC_OFFSET(17226, glVertexAttrib4NuivARB, glVertexAttrib4NuivARB, NULL, _gloffset_VertexAttrib4NuivARB),
+    NAME_FUNC_OFFSET(17246, glVertexAttrib4NusvARB, glVertexAttrib4NusvARB, NULL, _gloffset_VertexAttrib4NusvARB),
+    NAME_FUNC_OFFSET(17266, glVertexAttrib4bvARB, glVertexAttrib4bvARB, NULL, _gloffset_VertexAttrib4bvARB),
+    NAME_FUNC_OFFSET(17284, glVertexAttrib4dARB, glVertexAttrib4dARB, NULL, _gloffset_VertexAttrib4dARB),
+    NAME_FUNC_OFFSET(17301, glVertexAttrib4dvARB, glVertexAttrib4dvARB, NULL, _gloffset_VertexAttrib4dvARB),
+    NAME_FUNC_OFFSET(17319, glVertexAttrib4fARB, glVertexAttrib4fARB, NULL, _gloffset_VertexAttrib4fARB),
+    NAME_FUNC_OFFSET(17336, glVertexAttrib4fvARB, glVertexAttrib4fvARB, NULL, _gloffset_VertexAttrib4fvARB),
+    NAME_FUNC_OFFSET(17354, glVertexAttrib4ivARB, glVertexAttrib4ivARB, NULL, _gloffset_VertexAttrib4ivARB),
+    NAME_FUNC_OFFSET(17372, glVertexAttrib4sARB, glVertexAttrib4sARB, NULL, _gloffset_VertexAttrib4sARB),
+    NAME_FUNC_OFFSET(17389, glVertexAttrib4svARB, glVertexAttrib4svARB, NULL, _gloffset_VertexAttrib4svARB),
+    NAME_FUNC_OFFSET(17407, glVertexAttrib4ubvARB, glVertexAttrib4ubvARB, NULL, _gloffset_VertexAttrib4ubvARB),
+    NAME_FUNC_OFFSET(17426, glVertexAttrib4uivARB, glVertexAttrib4uivARB, NULL, _gloffset_VertexAttrib4uivARB),
+    NAME_FUNC_OFFSET(17445, glVertexAttrib4usvARB, glVertexAttrib4usvARB, NULL, _gloffset_VertexAttrib4usvARB),
+    NAME_FUNC_OFFSET(17464, glVertexAttribPointerARB, glVertexAttribPointerARB, NULL, _gloffset_VertexAttribPointerARB),
+    NAME_FUNC_OFFSET(17486, glBindBufferARB, glBindBufferARB, NULL, _gloffset_BindBufferARB),
+    NAME_FUNC_OFFSET(17499, glBufferDataARB, glBufferDataARB, NULL, _gloffset_BufferDataARB),
+    NAME_FUNC_OFFSET(17512, glBufferSubDataARB, glBufferSubDataARB, NULL, _gloffset_BufferSubDataARB),
+    NAME_FUNC_OFFSET(17528, glDeleteBuffersARB, glDeleteBuffersARB, NULL, _gloffset_DeleteBuffersARB),
+    NAME_FUNC_OFFSET(17544, glGenBuffersARB, glGenBuffersARB, NULL, _gloffset_GenBuffersARB),
+    NAME_FUNC_OFFSET(17557, glGetBufferParameterivARB, glGetBufferParameterivARB, NULL, _gloffset_GetBufferParameterivARB),
+    NAME_FUNC_OFFSET(17580, glGetBufferPointervARB, glGetBufferPointervARB, NULL, _gloffset_GetBufferPointervARB),
+    NAME_FUNC_OFFSET(17600, glGetBufferSubDataARB, glGetBufferSubDataARB, NULL, _gloffset_GetBufferSubDataARB),
+    NAME_FUNC_OFFSET(17619, glIsBufferARB, glIsBufferARB, NULL, _gloffset_IsBufferARB),
+    NAME_FUNC_OFFSET(17630, glMapBufferARB, glMapBufferARB, NULL, _gloffset_MapBufferARB),
+    NAME_FUNC_OFFSET(17642, glUnmapBufferARB, glUnmapBufferARB, NULL, _gloffset_UnmapBufferARB),
+    NAME_FUNC_OFFSET(17656, glBeginQueryARB, glBeginQueryARB, NULL, _gloffset_BeginQueryARB),
+    NAME_FUNC_OFFSET(17669, glDeleteQueriesARB, glDeleteQueriesARB, NULL, _gloffset_DeleteQueriesARB),
+    NAME_FUNC_OFFSET(17685, glEndQueryARB, glEndQueryARB, NULL, _gloffset_EndQueryARB),
+    NAME_FUNC_OFFSET(17696, glGenQueriesARB, glGenQueriesARB, NULL, _gloffset_GenQueriesARB),
+    NAME_FUNC_OFFSET(17709, glGetQueryObjectivARB, glGetQueryObjectivARB, NULL, _gloffset_GetQueryObjectivARB),
+    NAME_FUNC_OFFSET(17728, glGetQueryObjectuivARB, glGetQueryObjectuivARB, NULL, _gloffset_GetQueryObjectuivARB),
+    NAME_FUNC_OFFSET(17748, glGetQueryivARB, glGetQueryivARB, NULL, _gloffset_GetQueryivARB),
+    NAME_FUNC_OFFSET(17761, glIsQueryARB, glIsQueryARB, NULL, _gloffset_IsQueryARB),
+    NAME_FUNC_OFFSET(17771, glCompileShaderARB, glCompileShaderARB, NULL, _gloffset_CompileShaderARB),
+    NAME_FUNC_OFFSET(17787, glGetActiveUniformARB, glGetActiveUniformARB, NULL, _gloffset_GetActiveUniformARB),
+    NAME_FUNC_OFFSET(17806, glGetShaderSourceARB, glGetShaderSourceARB, NULL, _gloffset_GetShaderSourceARB),
+    NAME_FUNC_OFFSET(17824, glGetUniformLocationARB, glGetUniformLocationARB, NULL, _gloffset_GetUniformLocationARB),
+    NAME_FUNC_OFFSET(17845, glGetUniformfvARB, glGetUniformfvARB, NULL, _gloffset_GetUniformfvARB),
+    NAME_FUNC_OFFSET(17860, glGetUniformivARB, glGetUniformivARB, NULL, _gloffset_GetUniformivARB),
+    NAME_FUNC_OFFSET(17875, glLinkProgramARB, glLinkProgramARB, NULL, _gloffset_LinkProgramARB),
+    NAME_FUNC_OFFSET(17889, glShaderSourceARB, glShaderSourceARB, NULL, _gloffset_ShaderSourceARB),
+    NAME_FUNC_OFFSET(17904, glUniform1fARB, glUniform1fARB, NULL, _gloffset_Uniform1fARB),
+    NAME_FUNC_OFFSET(17916, glUniform1fvARB, glUniform1fvARB, NULL, _gloffset_Uniform1fvARB),
+    NAME_FUNC_OFFSET(17929, glUniform1iARB, glUniform1iARB, NULL, _gloffset_Uniform1iARB),
+    NAME_FUNC_OFFSET(17941, glUniform1ivARB, glUniform1ivARB, NULL, _gloffset_Uniform1ivARB),
+    NAME_FUNC_OFFSET(17954, glUniform2fARB, glUniform2fARB, NULL, _gloffset_Uniform2fARB),
+    NAME_FUNC_OFFSET(17966, glUniform2fvARB, glUniform2fvARB, NULL, _gloffset_Uniform2fvARB),
+    NAME_FUNC_OFFSET(17979, glUniform2iARB, glUniform2iARB, NULL, _gloffset_Uniform2iARB),
+    NAME_FUNC_OFFSET(17991, glUniform2ivARB, glUniform2ivARB, NULL, _gloffset_Uniform2ivARB),
+    NAME_FUNC_OFFSET(18004, glUniform3fARB, glUniform3fARB, NULL, _gloffset_Uniform3fARB),
+    NAME_FUNC_OFFSET(18016, glUniform3fvARB, glUniform3fvARB, NULL, _gloffset_Uniform3fvARB),
+    NAME_FUNC_OFFSET(18029, glUniform3iARB, glUniform3iARB, NULL, _gloffset_Uniform3iARB),
+    NAME_FUNC_OFFSET(18041, glUniform3ivARB, glUniform3ivARB, NULL, _gloffset_Uniform3ivARB),
+    NAME_FUNC_OFFSET(18054, glUniform4fARB, glUniform4fARB, NULL, _gloffset_Uniform4fARB),
+    NAME_FUNC_OFFSET(18066, glUniform4fvARB, glUniform4fvARB, NULL, _gloffset_Uniform4fvARB),
+    NAME_FUNC_OFFSET(18079, glUniform4iARB, glUniform4iARB, NULL, _gloffset_Uniform4iARB),
+    NAME_FUNC_OFFSET(18091, glUniform4ivARB, glUniform4ivARB, NULL, _gloffset_Uniform4ivARB),
+    NAME_FUNC_OFFSET(18104, glUniformMatrix2fvARB, glUniformMatrix2fvARB, NULL, _gloffset_UniformMatrix2fvARB),
+    NAME_FUNC_OFFSET(18123, glUniformMatrix3fvARB, glUniformMatrix3fvARB, NULL, _gloffset_UniformMatrix3fvARB),
+    NAME_FUNC_OFFSET(18142, glUniformMatrix4fvARB, glUniformMatrix4fvARB, NULL, _gloffset_UniformMatrix4fvARB),
+    NAME_FUNC_OFFSET(18161, glUseProgramObjectARB, glUseProgramObjectARB, NULL, _gloffset_UseProgramObjectARB),
+    NAME_FUNC_OFFSET(18174, glValidateProgramARB, glValidateProgramARB, NULL, _gloffset_ValidateProgramARB),
+    NAME_FUNC_OFFSET(18192, glBindAttribLocationARB, glBindAttribLocationARB, NULL, _gloffset_BindAttribLocationARB),
+    NAME_FUNC_OFFSET(18213, glGetActiveAttribARB, glGetActiveAttribARB, NULL, _gloffset_GetActiveAttribARB),
+    NAME_FUNC_OFFSET(18231, glGetAttribLocationARB, glGetAttribLocationARB, NULL, _gloffset_GetAttribLocationARB),
+    NAME_FUNC_OFFSET(18251, glDrawBuffersARB, glDrawBuffersARB, NULL, _gloffset_DrawBuffersARB),
+    NAME_FUNC_OFFSET(18265, glDrawBuffersARB, glDrawBuffersARB, NULL, _gloffset_DrawBuffersARB),
+    NAME_FUNC_OFFSET(18282, glRenderbufferStorageMultisample, glRenderbufferStorageMultisample, NULL, _gloffset_RenderbufferStorageMultisample),
+    NAME_FUNC_OFFSET(18318, gl_dispatch_stub_584, gl_dispatch_stub_584, NULL, _gloffset_SampleMaskSGIS),
+    NAME_FUNC_OFFSET(18334, gl_dispatch_stub_585, gl_dispatch_stub_585, NULL, _gloffset_SamplePatternSGIS),
+    NAME_FUNC_OFFSET(18353, glPointParameterfEXT, glPointParameterfEXT, NULL, _gloffset_PointParameterfEXT),
+    NAME_FUNC_OFFSET(18371, glPointParameterfEXT, glPointParameterfEXT, NULL, _gloffset_PointParameterfEXT),
+    NAME_FUNC_OFFSET(18392, glPointParameterfEXT, glPointParameterfEXT, NULL, _gloffset_PointParameterfEXT),
+    NAME_FUNC_OFFSET(18414, glPointParameterfvEXT, glPointParameterfvEXT, NULL, _gloffset_PointParameterfvEXT),
+    NAME_FUNC_OFFSET(18433, glPointParameterfvEXT, glPointParameterfvEXT, NULL, _gloffset_PointParameterfvEXT),
+    NAME_FUNC_OFFSET(18455, glPointParameterfvEXT, glPointParameterfvEXT, NULL, _gloffset_PointParameterfvEXT),
+    NAME_FUNC_OFFSET(18478, glSecondaryColor3bEXT, glSecondaryColor3bEXT, NULL, _gloffset_SecondaryColor3bEXT),
+    NAME_FUNC_OFFSET(18497, glSecondaryColor3bvEXT, glSecondaryColor3bvEXT, NULL, _gloffset_SecondaryColor3bvEXT),
+    NAME_FUNC_OFFSET(18517, glSecondaryColor3dEXT, glSecondaryColor3dEXT, NULL, _gloffset_SecondaryColor3dEXT),
+    NAME_FUNC_OFFSET(18536, glSecondaryColor3dvEXT, glSecondaryColor3dvEXT, NULL, _gloffset_SecondaryColor3dvEXT),
+    NAME_FUNC_OFFSET(18556, glSecondaryColor3fEXT, glSecondaryColor3fEXT, NULL, _gloffset_SecondaryColor3fEXT),
+    NAME_FUNC_OFFSET(18575, glSecondaryColor3fvEXT, glSecondaryColor3fvEXT, NULL, _gloffset_SecondaryColor3fvEXT),
+    NAME_FUNC_OFFSET(18595, glSecondaryColor3iEXT, glSecondaryColor3iEXT, NULL, _gloffset_SecondaryColor3iEXT),
+    NAME_FUNC_OFFSET(18614, glSecondaryColor3ivEXT, glSecondaryColor3ivEXT, NULL, _gloffset_SecondaryColor3ivEXT),
+    NAME_FUNC_OFFSET(18634, glSecondaryColor3sEXT, glSecondaryColor3sEXT, NULL, _gloffset_SecondaryColor3sEXT),
+    NAME_FUNC_OFFSET(18653, glSecondaryColor3svEXT, glSecondaryColor3svEXT, NULL, _gloffset_SecondaryColor3svEXT),
+    NAME_FUNC_OFFSET(18673, glSecondaryColor3ubEXT, glSecondaryColor3ubEXT, NULL, _gloffset_SecondaryColor3ubEXT),
+    NAME_FUNC_OFFSET(18693, glSecondaryColor3ubvEXT, glSecondaryColor3ubvEXT, NULL, _gloffset_SecondaryColor3ubvEXT),
+    NAME_FUNC_OFFSET(18714, glSecondaryColor3uiEXT, glSecondaryColor3uiEXT, NULL, _gloffset_SecondaryColor3uiEXT),
+    NAME_FUNC_OFFSET(18734, glSecondaryColor3uivEXT, glSecondaryColor3uivEXT, NULL, _gloffset_SecondaryColor3uivEXT),
+    NAME_FUNC_OFFSET(18755, glSecondaryColor3usEXT, glSecondaryColor3usEXT, NULL, _gloffset_SecondaryColor3usEXT),
+    NAME_FUNC_OFFSET(18775, glSecondaryColor3usvEXT, glSecondaryColor3usvEXT, NULL, _gloffset_SecondaryColor3usvEXT),
+    NAME_FUNC_OFFSET(18796, glSecondaryColorPointerEXT, glSecondaryColorPointerEXT, NULL, _gloffset_SecondaryColorPointerEXT),
+    NAME_FUNC_OFFSET(18820, glMultiDrawArraysEXT, glMultiDrawArraysEXT, NULL, _gloffset_MultiDrawArraysEXT),
+    NAME_FUNC_OFFSET(18838, glMultiDrawElementsEXT, glMultiDrawElementsEXT, NULL, _gloffset_MultiDrawElementsEXT),
+    NAME_FUNC_OFFSET(18858, glFogCoordPointerEXT, glFogCoordPointerEXT, NULL, _gloffset_FogCoordPointerEXT),
+    NAME_FUNC_OFFSET(18876, glFogCoorddEXT, glFogCoorddEXT, NULL, _gloffset_FogCoorddEXT),
+    NAME_FUNC_OFFSET(18888, glFogCoorddvEXT, glFogCoorddvEXT, NULL, _gloffset_FogCoorddvEXT),
+    NAME_FUNC_OFFSET(18901, glFogCoordfEXT, glFogCoordfEXT, NULL, _gloffset_FogCoordfEXT),
+    NAME_FUNC_OFFSET(18913, glFogCoordfvEXT, glFogCoordfvEXT, NULL, _gloffset_FogCoordfvEXT),
+    NAME_FUNC_OFFSET(18926, glBlendFuncSeparateEXT, glBlendFuncSeparateEXT, NULL, _gloffset_BlendFuncSeparateEXT),
+    NAME_FUNC_OFFSET(18946, glBlendFuncSeparateEXT, glBlendFuncSeparateEXT, NULL, _gloffset_BlendFuncSeparateEXT),
+    NAME_FUNC_OFFSET(18970, glWindowPos2dMESA, glWindowPos2dMESA, NULL, _gloffset_WindowPos2dMESA),
+    NAME_FUNC_OFFSET(18984, glWindowPos2dMESA, glWindowPos2dMESA, NULL, _gloffset_WindowPos2dMESA),
+    NAME_FUNC_OFFSET(19001, glWindowPos2dvMESA, glWindowPos2dvMESA, NULL, _gloffset_WindowPos2dvMESA),
+    NAME_FUNC_OFFSET(19016, glWindowPos2dvMESA, glWindowPos2dvMESA, NULL, _gloffset_WindowPos2dvMESA),
+    NAME_FUNC_OFFSET(19034, glWindowPos2fMESA, glWindowPos2fMESA, NULL, _gloffset_WindowPos2fMESA),
+    NAME_FUNC_OFFSET(19048, glWindowPos2fMESA, glWindowPos2fMESA, NULL, _gloffset_WindowPos2fMESA),
+    NAME_FUNC_OFFSET(19065, glWindowPos2fvMESA, glWindowPos2fvMESA, NULL, _gloffset_WindowPos2fvMESA),
+    NAME_FUNC_OFFSET(19080, glWindowPos2fvMESA, glWindowPos2fvMESA, NULL, _gloffset_WindowPos2fvMESA),
+    NAME_FUNC_OFFSET(19098, glWindowPos2iMESA, glWindowPos2iMESA, NULL, _gloffset_WindowPos2iMESA),
+    NAME_FUNC_OFFSET(19112, glWindowPos2iMESA, glWindowPos2iMESA, NULL, _gloffset_WindowPos2iMESA),
+    NAME_FUNC_OFFSET(19129, glWindowPos2ivMESA, glWindowPos2ivMESA, NULL, _gloffset_WindowPos2ivMESA),
+    NAME_FUNC_OFFSET(19144, glWindowPos2ivMESA, glWindowPos2ivMESA, NULL, _gloffset_WindowPos2ivMESA),
+    NAME_FUNC_OFFSET(19162, glWindowPos2sMESA, glWindowPos2sMESA, NULL, _gloffset_WindowPos2sMESA),
+    NAME_FUNC_OFFSET(19176, glWindowPos2sMESA, glWindowPos2sMESA, NULL, _gloffset_WindowPos2sMESA),
+    NAME_FUNC_OFFSET(19193, glWindowPos2svMESA, glWindowPos2svMESA, NULL, _gloffset_WindowPos2svMESA),
+    NAME_FUNC_OFFSET(19208, glWindowPos2svMESA, glWindowPos2svMESA, NULL, _gloffset_WindowPos2svMESA),
+    NAME_FUNC_OFFSET(19226, glWindowPos3dMESA, glWindowPos3dMESA, NULL, _gloffset_WindowPos3dMESA),
+    NAME_FUNC_OFFSET(19240, glWindowPos3dMESA, glWindowPos3dMESA, NULL, _gloffset_WindowPos3dMESA),
+    NAME_FUNC_OFFSET(19257, glWindowPos3dvMESA, glWindowPos3dvMESA, NULL, _gloffset_WindowPos3dvMESA),
+    NAME_FUNC_OFFSET(19272, glWindowPos3dvMESA, glWindowPos3dvMESA, NULL, _gloffset_WindowPos3dvMESA),
+    NAME_FUNC_OFFSET(19290, glWindowPos3fMESA, glWindowPos3fMESA, NULL, _gloffset_WindowPos3fMESA),
+    NAME_FUNC_OFFSET(19304, glWindowPos3fMESA, glWindowPos3fMESA, NULL, _gloffset_WindowPos3fMESA),
+    NAME_FUNC_OFFSET(19321, glWindowPos3fvMESA, glWindowPos3fvMESA, NULL, _gloffset_WindowPos3fvMESA),
+    NAME_FUNC_OFFSET(19336, glWindowPos3fvMESA, glWindowPos3fvMESA, NULL, _gloffset_WindowPos3fvMESA),
+    NAME_FUNC_OFFSET(19354, glWindowPos3iMESA, glWindowPos3iMESA, NULL, _gloffset_WindowPos3iMESA),
+    NAME_FUNC_OFFSET(19368, glWindowPos3iMESA, glWindowPos3iMESA, NULL, _gloffset_WindowPos3iMESA),
+    NAME_FUNC_OFFSET(19385, glWindowPos3ivMESA, glWindowPos3ivMESA, NULL, _gloffset_WindowPos3ivMESA),
+    NAME_FUNC_OFFSET(19400, glWindowPos3ivMESA, glWindowPos3ivMESA, NULL, _gloffset_WindowPos3ivMESA),
+    NAME_FUNC_OFFSET(19418, glWindowPos3sMESA, glWindowPos3sMESA, NULL, _gloffset_WindowPos3sMESA),
+    NAME_FUNC_OFFSET(19432, glWindowPos3sMESA, glWindowPos3sMESA, NULL, _gloffset_WindowPos3sMESA),
+    NAME_FUNC_OFFSET(19449, glWindowPos3svMESA, glWindowPos3svMESA, NULL, _gloffset_WindowPos3svMESA),
+    NAME_FUNC_OFFSET(19464, glWindowPos3svMESA, glWindowPos3svMESA, NULL, _gloffset_WindowPos3svMESA),
+    NAME_FUNC_OFFSET(19482, glBindProgramNV, glBindProgramNV, NULL, _gloffset_BindProgramNV),
+    NAME_FUNC_OFFSET(19499, glDeleteProgramsNV, glDeleteProgramsNV, NULL, _gloffset_DeleteProgramsNV),
+    NAME_FUNC_OFFSET(19519, glGenProgramsNV, glGenProgramsNV, NULL, _gloffset_GenProgramsNV),
+    NAME_FUNC_OFFSET(19536, glGetVertexAttribPointervNV, glGetVertexAttribPointervNV, NULL, _gloffset_GetVertexAttribPointervNV),
+    NAME_FUNC_OFFSET(19562, glGetVertexAttribPointervNV, glGetVertexAttribPointervNV, NULL, _gloffset_GetVertexAttribPointervNV),
+    NAME_FUNC_OFFSET(19591, glIsProgramNV, glIsProgramNV, NULL, _gloffset_IsProgramNV),
+    NAME_FUNC_OFFSET(19606, glPointParameteriNV, glPointParameteriNV, NULL, _gloffset_PointParameteriNV),
+    NAME_FUNC_OFFSET(19624, glPointParameterivNV, glPointParameterivNV, NULL, _gloffset_PointParameterivNV),
+    NAME_FUNC_OFFSET(19643, gl_dispatch_stub_755, gl_dispatch_stub_755, NULL, _gloffset_DeleteVertexArraysAPPLE),
+    NAME_FUNC_OFFSET(19664, gl_dispatch_stub_757, gl_dispatch_stub_757, NULL, _gloffset_IsVertexArrayAPPLE),
+    NAME_FUNC_OFFSET(19680, gl_dispatch_stub_765, gl_dispatch_stub_765, NULL, _gloffset_BlendEquationSeparateEXT),
+    NAME_FUNC_OFFSET(19704, gl_dispatch_stub_765, gl_dispatch_stub_765, NULL, _gloffset_BlendEquationSeparateEXT),
+    NAME_FUNC_OFFSET(19731, glBindFramebufferEXT, glBindFramebufferEXT, NULL, _gloffset_BindFramebufferEXT),
+    NAME_FUNC_OFFSET(19749, glBindRenderbufferEXT, glBindRenderbufferEXT, NULL, _gloffset_BindRenderbufferEXT),
+    NAME_FUNC_OFFSET(19768, glCheckFramebufferStatusEXT, glCheckFramebufferStatusEXT, NULL, _gloffset_CheckFramebufferStatusEXT),
+    NAME_FUNC_OFFSET(19793, glDeleteFramebuffersEXT, glDeleteFramebuffersEXT, NULL, _gloffset_DeleteFramebuffersEXT),
+    NAME_FUNC_OFFSET(19814, glDeleteRenderbuffersEXT, glDeleteRenderbuffersEXT, NULL, _gloffset_DeleteRenderbuffersEXT),
+    NAME_FUNC_OFFSET(19836, glFramebufferRenderbufferEXT, glFramebufferRenderbufferEXT, NULL, _gloffset_FramebufferRenderbufferEXT),
+    NAME_FUNC_OFFSET(19862, glFramebufferTexture1DEXT, glFramebufferTexture1DEXT, NULL, _gloffset_FramebufferTexture1DEXT),
+    NAME_FUNC_OFFSET(19885, glFramebufferTexture2DEXT, glFramebufferTexture2DEXT, NULL, _gloffset_FramebufferTexture2DEXT),
+    NAME_FUNC_OFFSET(19908, glFramebufferTexture3DEXT, glFramebufferTexture3DEXT, NULL, _gloffset_FramebufferTexture3DEXT),
+    NAME_FUNC_OFFSET(19931, glGenFramebuffersEXT, glGenFramebuffersEXT, NULL, _gloffset_GenFramebuffersEXT),
+    NAME_FUNC_OFFSET(19949, glGenRenderbuffersEXT, glGenRenderbuffersEXT, NULL, _gloffset_GenRenderbuffersEXT),
+    NAME_FUNC_OFFSET(19968, glGenerateMipmapEXT, glGenerateMipmapEXT, NULL, _gloffset_GenerateMipmapEXT),
+    NAME_FUNC_OFFSET(19985, glGetFramebufferAttachmentParameterivEXT, glGetFramebufferAttachmentParameterivEXT, NULL, _gloffset_GetFramebufferAttachmentParameterivEXT),
+    NAME_FUNC_OFFSET(20023, glGetRenderbufferParameterivEXT, glGetRenderbufferParameterivEXT, NULL, _gloffset_GetRenderbufferParameterivEXT),
+    NAME_FUNC_OFFSET(20052, glIsFramebufferEXT, glIsFramebufferEXT, NULL, _gloffset_IsFramebufferEXT),
+    NAME_FUNC_OFFSET(20068, glIsRenderbufferEXT, glIsRenderbufferEXT, NULL, _gloffset_IsRenderbufferEXT),
+    NAME_FUNC_OFFSET(20085, glRenderbufferStorageEXT, glRenderbufferStorageEXT, NULL, _gloffset_RenderbufferStorageEXT),
+    NAME_FUNC_OFFSET(20107, gl_dispatch_stub_783, gl_dispatch_stub_783, NULL, _gloffset_BlitFramebufferEXT),
+    NAME_FUNC_OFFSET(20125, glFramebufferTextureLayerEXT, glFramebufferTextureLayerEXT, NULL, _gloffset_FramebufferTextureLayerEXT),
+    NAME_FUNC_OFFSET(20151, glProvokingVertexEXT, glProvokingVertexEXT, NULL, _gloffset_ProvokingVertexEXT),
     NAME_FUNC_OFFSET(-1, NULL, NULL, NULL, 0)
 };
 
diff --git a/src/mesa/main/enums.c b/src/mesa/main/enums.c
index 140902f677..06d51d4e5c 100644
--- a/src/mesa/main/enums.c
+++ b/src/mesa/main/enums.c
@@ -145,6 +145,7 @@ LONGSTRING static const char enum_string_table[] =
    "GL_BUFFER_MAPPED_ARB\0"
    "GL_BUFFER_MAP_POINTER\0"
    "GL_BUFFER_MAP_POINTER_ARB\0"
+   "GL_BUFFER_OBJECT_APPLE\0"
    "GL_BUFFER_SERIALIZED_MODIFY_APPLE\0"
    "GL_BUFFER_SIZE\0"
    "GL_BUFFER_SIZE_ARB\0"
@@ -1320,6 +1321,7 @@ LONGSTRING static const char enum_string_table[] =
    "GL_PROXY_TEXTURE_CUBE_MAP_ARB\0"
    "GL_PROXY_TEXTURE_RECTANGLE_ARB\0"
    "GL_PROXY_TEXTURE_RECTANGLE_NV\0"
+   "GL_PURGEABLE_APPLE\0"
    "GL_Q\0"
    "GL_QUADRATIC_ATTENUATION\0"
    "GL_QUADS\0"
@@ -1358,6 +1360,7 @@ LONGSTRING static const char enum_string_table[] =
    "GL_REFLECTION_MAP\0"
    "GL_REFLECTION_MAP_ARB\0"
    "GL_REFLECTION_MAP_NV\0"
+   "GL_RELEASED_APPLE\0"
    "GL_RENDER\0"
    "GL_RENDERBUFFER\0"
    "GL_RENDERBUFFER_ALPHA_SIZE\0"
@@ -1385,6 +1388,7 @@ LONGSTRING static const char enum_string_table[] =
    "GL_REPLICATE_BORDER_HP\0"
    "GL_RESCALE_NORMAL\0"
    "GL_RESCALE_NORMAL_EXT\0"
+   "GL_RETAINED_APPLE\0"
    "GL_RETURN\0"
    "GL_RGB\0"
    "GL_RGB10\0"
@@ -1811,6 +1815,7 @@ LONGSTRING static const char enum_string_table[] =
    "GL_TRIANGLE_MESH_SUN\0"
    "GL_TRIANGLE_STRIP\0"
    "GL_TRUE\0"
+   "GL_UNDEFINED_APPLE\0"
    "GL_UNPACK_ALIGNMENT\0"
    "GL_UNPACK_IMAGE_HEIGHT\0"
    "GL_UNPACK_LSB_FIRST\0"
@@ -1903,6 +1908,7 @@ LONGSTRING static const char enum_string_table[] =
    "GL_VERTEX_STATE_PROGRAM_NV\0"
    "GL_VIEWPORT\0"
    "GL_VIEWPORT_BIT\0"
+   "GL_VOLATILE_APPLE\0"
    "GL_WAIT_FAILED\0"
    "GL_WEIGHT_ARRAY_ARB\0"
    "GL_WEIGHT_ARRAY_BUFFER_BINDING\0"
@@ -1923,7 +1929,7 @@ LONGSTRING static const char enum_string_table[] =
    "GL_ZOOM_Y\0"
    ;
 
-static const enum_elt all_enums[1885] =
+static const enum_elt all_enums[1891] =
 {
    {     0, 0x00000600 }, /* GL_2D */
    {     6, 0x00001407 }, /* GL_2_BYTES */
@@ -2034,3136 +2040,3148 @@ static const enum_elt all_enums[1885] =
    {  1755, 0x000088BC }, /* GL_BUFFER_MAPPED_ARB */
    {  1776, 0x000088BD }, /* GL_BUFFER_MAP_POINTER */
    {  1798, 0x000088BD }, /* GL_BUFFER_MAP_POINTER_ARB */
-   {  1824, 0x00008A12 }, /* GL_BUFFER_SERIALIZED_MODIFY_APPLE */
-   {  1858, 0x00008764 }, /* GL_BUFFER_SIZE */
-   {  1873, 0x00008764 }, /* GL_BUFFER_SIZE_ARB */
-   {  1892, 0x00008765 }, /* GL_BUFFER_USAGE */
-   {  1908, 0x00008765 }, /* GL_BUFFER_USAGE_ARB */
-   {  1928, 0x0000877B }, /* GL_BUMP_ENVMAP_ATI */
-   {  1947, 0x00008777 }, /* GL_BUMP_NUM_TEX_UNITS_ATI */
-   {  1973, 0x00008775 }, /* GL_BUMP_ROT_MATRIX_ATI */
-   {  1996, 0x00008776 }, /* GL_BUMP_ROT_MATRIX_SIZE_ATI */
-   {  2024, 0x0000877C }, /* GL_BUMP_TARGET_ATI */
-   {  2043, 0x00008778 }, /* GL_BUMP_TEX_UNITS_ATI */
-   {  2065, 0x00001400 }, /* GL_BYTE */
-   {  2073, 0x00002A24 }, /* GL_C3F_V3F */
-   {  2084, 0x00002A26 }, /* GL_C4F_N3F_V3F */
-   {  2099, 0x00002A22 }, /* GL_C4UB_V2F */
-   {  2111, 0x00002A23 }, /* GL_C4UB_V3F */
-   {  2123, 0x00000901 }, /* GL_CCW */
-   {  2130, 0x00002900 }, /* GL_CLAMP */
-   {  2139, 0x0000812D }, /* GL_CLAMP_TO_BORDER */
-   {  2158, 0x0000812D }, /* GL_CLAMP_TO_BORDER_ARB */
-   {  2181, 0x0000812D }, /* GL_CLAMP_TO_BORDER_SGIS */
-   {  2205, 0x0000812F }, /* GL_CLAMP_TO_EDGE */
-   {  2222, 0x0000812F }, /* GL_CLAMP_TO_EDGE_SGIS */
-   {  2244, 0x00001500 }, /* GL_CLEAR */
-   {  2253, 0x000084E1 }, /* GL_CLIENT_ACTIVE_TEXTURE */
-   {  2278, 0x000084E1 }, /* GL_CLIENT_ACTIVE_TEXTURE_ARB */
-   {  2307, 0xFFFFFFFF }, /* GL_CLIENT_ALL_ATTRIB_BITS */
-   {  2333, 0x00000BB1 }, /* GL_CLIENT_ATTRIB_STACK_DEPTH */
-   {  2362, 0x00000001 }, /* GL_CLIENT_PIXEL_STORE_BIT */
-   {  2388, 0x00000002 }, /* GL_CLIENT_VERTEX_ARRAY_BIT */
-   {  2415, 0x00003000 }, /* GL_CLIP_PLANE0 */
-   {  2430, 0x00003001 }, /* GL_CLIP_PLANE1 */
-   {  2445, 0x00003002 }, /* GL_CLIP_PLANE2 */
-   {  2460, 0x00003003 }, /* GL_CLIP_PLANE3 */
-   {  2475, 0x00003004 }, /* GL_CLIP_PLANE4 */
-   {  2490, 0x00003005 }, /* GL_CLIP_PLANE5 */
-   {  2505, 0x000080F0 }, /* GL_CLIP_VOLUME_CLIPPING_HINT_EXT */
-   {  2538, 0x00000A00 }, /* GL_COEFF */
-   {  2547, 0x00001800 }, /* GL_COLOR */
-   {  2556, 0x00008076 }, /* GL_COLOR_ARRAY */
-   {  2571, 0x00008898 }, /* GL_COLOR_ARRAY_BUFFER_BINDING */
-   {  2601, 0x00008898 }, /* GL_COLOR_ARRAY_BUFFER_BINDING_ARB */
-   {  2635, 0x00008090 }, /* GL_COLOR_ARRAY_POINTER */
-   {  2658, 0x00008081 }, /* GL_COLOR_ARRAY_SIZE */
-   {  2678, 0x00008083 }, /* GL_COLOR_ARRAY_STRIDE */
-   {  2700, 0x00008082 }, /* GL_COLOR_ARRAY_TYPE */
-   {  2720, 0x00008CE0 }, /* GL_COLOR_ATTACHMENT0 */
-   {  2741, 0x00008CE0 }, /* GL_COLOR_ATTACHMENT0_EXT */
-   {  2766, 0x00008CE1 }, /* GL_COLOR_ATTACHMENT1 */
-   {  2787, 0x00008CEA }, /* GL_COLOR_ATTACHMENT10 */
-   {  2809, 0x00008CEA }, /* GL_COLOR_ATTACHMENT10_EXT */
-   {  2835, 0x00008CEB }, /* GL_COLOR_ATTACHMENT11 */
-   {  2857, 0x00008CEB }, /* GL_COLOR_ATTACHMENT11_EXT */
-   {  2883, 0x00008CEC }, /* GL_COLOR_ATTACHMENT12 */
-   {  2905, 0x00008CEC }, /* GL_COLOR_ATTACHMENT12_EXT */
-   {  2931, 0x00008CED }, /* GL_COLOR_ATTACHMENT13 */
-   {  2953, 0x00008CED }, /* GL_COLOR_ATTACHMENT13_EXT */
-   {  2979, 0x00008CEE }, /* GL_COLOR_ATTACHMENT14 */
-   {  3001, 0x00008CEE }, /* GL_COLOR_ATTACHMENT14_EXT */
-   {  3027, 0x00008CEF }, /* GL_COLOR_ATTACHMENT15 */
-   {  3049, 0x00008CEF }, /* GL_COLOR_ATTACHMENT15_EXT */
-   {  3075, 0x00008CE1 }, /* GL_COLOR_ATTACHMENT1_EXT */
-   {  3100, 0x00008CE2 }, /* GL_COLOR_ATTACHMENT2 */
-   {  3121, 0x00008CE2 }, /* GL_COLOR_ATTACHMENT2_EXT */
-   {  3146, 0x00008CE3 }, /* GL_COLOR_ATTACHMENT3 */
-   {  3167, 0x00008CE3 }, /* GL_COLOR_ATTACHMENT3_EXT */
-   {  3192, 0x00008CE4 }, /* GL_COLOR_ATTACHMENT4 */
-   {  3213, 0x00008CE4 }, /* GL_COLOR_ATTACHMENT4_EXT */
-   {  3238, 0x00008CE5 }, /* GL_COLOR_ATTACHMENT5 */
-   {  3259, 0x00008CE5 }, /* GL_COLOR_ATTACHMENT5_EXT */
-   {  3284, 0x00008CE6 }, /* GL_COLOR_ATTACHMENT6 */
-   {  3305, 0x00008CE6 }, /* GL_COLOR_ATTACHMENT6_EXT */
-   {  3330, 0x00008CE7 }, /* GL_COLOR_ATTACHMENT7 */
-   {  3351, 0x00008CE7 }, /* GL_COLOR_ATTACHMENT7_EXT */
-   {  3376, 0x00008CE8 }, /* GL_COLOR_ATTACHMENT8 */
-   {  3397, 0x00008CE8 }, /* GL_COLOR_ATTACHMENT8_EXT */
-   {  3422, 0x00008CE9 }, /* GL_COLOR_ATTACHMENT9 */
-   {  3443, 0x00008CE9 }, /* GL_COLOR_ATTACHMENT9_EXT */
-   {  3468, 0x00004000 }, /* GL_COLOR_BUFFER_BIT */
-   {  3488, 0x00000C22 }, /* GL_COLOR_CLEAR_VALUE */
-   {  3509, 0x00001900 }, /* GL_COLOR_INDEX */
-   {  3524, 0x00001603 }, /* GL_COLOR_INDEXES */
-   {  3541, 0x00000BF2 }, /* GL_COLOR_LOGIC_OP */
-   {  3559, 0x00000B57 }, /* GL_COLOR_MATERIAL */
-   {  3577, 0x00000B55 }, /* GL_COLOR_MATERIAL_FACE */
-   {  3600, 0x00000B56 }, /* GL_COLOR_MATERIAL_PARAMETER */
-   {  3628, 0x000080B1 }, /* GL_COLOR_MATRIX */
-   {  3644, 0x000080B1 }, /* GL_COLOR_MATRIX_SGI */
-   {  3664, 0x000080B2 }, /* GL_COLOR_MATRIX_STACK_DEPTH */
-   {  3692, 0x000080B2 }, /* GL_COLOR_MATRIX_STACK_DEPTH_SGI */
-   {  3724, 0x00008458 }, /* GL_COLOR_SUM */
-   {  3737, 0x00008458 }, /* GL_COLOR_SUM_ARB */
-   {  3754, 0x000080D0 }, /* GL_COLOR_TABLE */
-   {  3769, 0x000080DD }, /* GL_COLOR_TABLE_ALPHA_SIZE */
-   {  3795, 0x000080DD }, /* GL_COLOR_TABLE_ALPHA_SIZE_EXT */
-   {  3825, 0x000080DD }, /* GL_COLOR_TABLE_ALPHA_SIZE_SGI */
-   {  3855, 0x000080D7 }, /* GL_COLOR_TABLE_BIAS */
-   {  3875, 0x000080D7 }, /* GL_COLOR_TABLE_BIAS_SGI */
-   {  3899, 0x000080DC }, /* GL_COLOR_TABLE_BLUE_SIZE */
-   {  3924, 0x000080DC }, /* GL_COLOR_TABLE_BLUE_SIZE_EXT */
-   {  3953, 0x000080DC }, /* GL_COLOR_TABLE_BLUE_SIZE_SGI */
-   {  3982, 0x000080D8 }, /* GL_COLOR_TABLE_FORMAT */
-   {  4004, 0x000080D8 }, /* GL_COLOR_TABLE_FORMAT_EXT */
-   {  4030, 0x000080D8 }, /* GL_COLOR_TABLE_FORMAT_SGI */
-   {  4056, 0x000080DB }, /* GL_COLOR_TABLE_GREEN_SIZE */
-   {  4082, 0x000080DB }, /* GL_COLOR_TABLE_GREEN_SIZE_EXT */
-   {  4112, 0x000080DB }, /* GL_COLOR_TABLE_GREEN_SIZE_SGI */
-   {  4142, 0x000080DF }, /* GL_COLOR_TABLE_INTENSITY_SIZE */
-   {  4172, 0x000080DF }, /* GL_COLOR_TABLE_INTENSITY_SIZE_EXT */
-   {  4206, 0x000080DF }, /* GL_COLOR_TABLE_INTENSITY_SIZE_SGI */
-   {  4240, 0x000080DE }, /* GL_COLOR_TABLE_LUMINANCE_SIZE */
-   {  4270, 0x000080DE }, /* GL_COLOR_TABLE_LUMINANCE_SIZE_EXT */
-   {  4304, 0x000080DE }, /* GL_COLOR_TABLE_LUMINANCE_SIZE_SGI */
-   {  4338, 0x000080DA }, /* GL_COLOR_TABLE_RED_SIZE */
-   {  4362, 0x000080DA }, /* GL_COLOR_TABLE_RED_SIZE_EXT */
-   {  4390, 0x000080DA }, /* GL_COLOR_TABLE_RED_SIZE_SGI */
-   {  4418, 0x000080D6 }, /* GL_COLOR_TABLE_SCALE */
-   {  4439, 0x000080D6 }, /* GL_COLOR_TABLE_SCALE_SGI */
-   {  4464, 0x000080D9 }, /* GL_COLOR_TABLE_WIDTH */
-   {  4485, 0x000080D9 }, /* GL_COLOR_TABLE_WIDTH_EXT */
-   {  4510, 0x000080D9 }, /* GL_COLOR_TABLE_WIDTH_SGI */
-   {  4535, 0x00000C23 }, /* GL_COLOR_WRITEMASK */
-   {  4554, 0x00008570 }, /* GL_COMBINE */
-   {  4565, 0x00008503 }, /* GL_COMBINE4 */
-   {  4577, 0x00008572 }, /* GL_COMBINE_ALPHA */
-   {  4594, 0x00008572 }, /* GL_COMBINE_ALPHA_ARB */
-   {  4615, 0x00008572 }, /* GL_COMBINE_ALPHA_EXT */
-   {  4636, 0x00008570 }, /* GL_COMBINE_ARB */
-   {  4651, 0x00008570 }, /* GL_COMBINE_EXT */
-   {  4666, 0x00008571 }, /* GL_COMBINE_RGB */
-   {  4681, 0x00008571 }, /* GL_COMBINE_RGB_ARB */
-   {  4700, 0x00008571 }, /* GL_COMBINE_RGB_EXT */
-   {  4719, 0x0000884E }, /* GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT */
-   {  4755, 0x0000884E }, /* GL_COMPARE_R_TO_TEXTURE */
-   {  4779, 0x0000884E }, /* GL_COMPARE_R_TO_TEXTURE_ARB */
-   {  4807, 0x00001300 }, /* GL_COMPILE */
-   {  4818, 0x00001301 }, /* GL_COMPILE_AND_EXECUTE */
-   {  4841, 0x00008B81 }, /* GL_COMPILE_STATUS */
-   {  4859, 0x000084E9 }, /* GL_COMPRESSED_ALPHA */
-   {  4879, 0x000084E9 }, /* GL_COMPRESSED_ALPHA_ARB */
-   {  4903, 0x000084EC }, /* GL_COMPRESSED_INTENSITY */
-   {  4927, 0x000084EC }, /* GL_COMPRESSED_INTENSITY_ARB */
-   {  4955, 0x000084EA }, /* GL_COMPRESSED_LUMINANCE */
-   {  4979, 0x000084EB }, /* GL_COMPRESSED_LUMINANCE_ALPHA */
-   {  5009, 0x000084EB }, /* GL_COMPRESSED_LUMINANCE_ALPHA_ARB */
-   {  5043, 0x000084EA }, /* GL_COMPRESSED_LUMINANCE_ARB */
-   {  5071, 0x000084ED }, /* GL_COMPRESSED_RGB */
-   {  5089, 0x000084EE }, /* GL_COMPRESSED_RGBA */
-   {  5108, 0x000084EE }, /* GL_COMPRESSED_RGBA_ARB */
-   {  5131, 0x000086B1 }, /* GL_COMPRESSED_RGBA_FXT1_3DFX */
-   {  5160, 0x000083F1 }, /* GL_COMPRESSED_RGBA_S3TC_DXT1_EXT */
-   {  5193, 0x000083F2 }, /* GL_COMPRESSED_RGBA_S3TC_DXT3_EXT */
-   {  5226, 0x000083F3 }, /* GL_COMPRESSED_RGBA_S3TC_DXT5_EXT */
-   {  5259, 0x000084ED }, /* GL_COMPRESSED_RGB_ARB */
-   {  5281, 0x000086B0 }, /* GL_COMPRESSED_RGB_FXT1_3DFX */
-   {  5309, 0x000083F0 }, /* GL_COMPRESSED_RGB_S3TC_DXT1_EXT */
-   {  5341, 0x00008C4A }, /* GL_COMPRESSED_SLUMINANCE */
-   {  5366, 0x00008C4B }, /* GL_COMPRESSED_SLUMINANCE_ALPHA */
-   {  5397, 0x00008C48 }, /* GL_COMPRESSED_SRGB */
-   {  5416, 0x00008C49 }, /* GL_COMPRESSED_SRGB_ALPHA */
-   {  5441, 0x000086A3 }, /* GL_COMPRESSED_TEXTURE_FORMATS */
-   {  5471, 0x0000911C }, /* GL_CONDITION_SATISFIED */
-   {  5494, 0x00008576 }, /* GL_CONSTANT */
-   {  5506, 0x00008003 }, /* GL_CONSTANT_ALPHA */
-   {  5524, 0x00008003 }, /* GL_CONSTANT_ALPHA_EXT */
-   {  5546, 0x00008576 }, /* GL_CONSTANT_ARB */
-   {  5562, 0x00001207 }, /* GL_CONSTANT_ATTENUATION */
-   {  5586, 0x00008151 }, /* GL_CONSTANT_BORDER_HP */
-   {  5608, 0x00008001 }, /* GL_CONSTANT_COLOR */
-   {  5626, 0x00008001 }, /* GL_CONSTANT_COLOR_EXT */
-   {  5648, 0x00008576 }, /* GL_CONSTANT_EXT */
-   {  5664, 0x00008010 }, /* GL_CONVOLUTION_1D */
-   {  5682, 0x00008011 }, /* GL_CONVOLUTION_2D */
-   {  5700, 0x00008154 }, /* GL_CONVOLUTION_BORDER_COLOR */
-   {  5728, 0x00008154 }, /* GL_CONVOLUTION_BORDER_COLOR_HP */
-   {  5759, 0x00008013 }, /* GL_CONVOLUTION_BORDER_MODE */
-   {  5786, 0x00008013 }, /* GL_CONVOLUTION_BORDER_MODE_EXT */
-   {  5817, 0x00008015 }, /* GL_CONVOLUTION_FILTER_BIAS */
-   {  5844, 0x00008015 }, /* GL_CONVOLUTION_FILTER_BIAS_EXT */
-   {  5875, 0x00008014 }, /* GL_CONVOLUTION_FILTER_SCALE */
-   {  5903, 0x00008014 }, /* GL_CONVOLUTION_FILTER_SCALE_EXT */
-   {  5935, 0x00008017 }, /* GL_CONVOLUTION_FORMAT */
-   {  5957, 0x00008017 }, /* GL_CONVOLUTION_FORMAT_EXT */
-   {  5983, 0x00008019 }, /* GL_CONVOLUTION_HEIGHT */
-   {  6005, 0x00008019 }, /* GL_CONVOLUTION_HEIGHT_EXT */
-   {  6031, 0x00008018 }, /* GL_CONVOLUTION_WIDTH */
-   {  6052, 0x00008018 }, /* GL_CONVOLUTION_WIDTH_EXT */
-   {  6077, 0x00008862 }, /* GL_COORD_REPLACE */
-   {  6094, 0x00008862 }, /* GL_COORD_REPLACE_ARB */
-   {  6115, 0x00008862 }, /* GL_COORD_REPLACE_NV */
-   {  6135, 0x00001503 }, /* GL_COPY */
-   {  6143, 0x0000150C }, /* GL_COPY_INVERTED */
-   {  6160, 0x00000706 }, /* GL_COPY_PIXEL_TOKEN */
-   {  6180, 0x00008F36 }, /* GL_COPY_READ_BUFFER */
-   {  6200, 0x00008F37 }, /* GL_COPY_WRITE_BUFFER */
-   {  6221, 0x00000B44 }, /* GL_CULL_FACE */
-   {  6234, 0x00000B45 }, /* GL_CULL_FACE_MODE */
-   {  6252, 0x000081AA }, /* GL_CULL_VERTEX_EXT */
-   {  6271, 0x000081AC }, /* GL_CULL_VERTEX_EYE_POSITION_EXT */
-   {  6303, 0x000081AB }, /* GL_CULL_VERTEX_OBJECT_POSITION_EXT */
-   {  6338, 0x00008626 }, /* GL_CURRENT_ATTRIB_NV */
-   {  6359, 0x00000001 }, /* GL_CURRENT_BIT */
-   {  6374, 0x00000B00 }, /* GL_CURRENT_COLOR */
-   {  6391, 0x00008453 }, /* GL_CURRENT_FOG_COORD */
-   {  6412, 0x00008453 }, /* GL_CURRENT_FOG_COORDINATE */
-   {  6438, 0x00000B01 }, /* GL_CURRENT_INDEX */
-   {  6455, 0x00008641 }, /* GL_CURRENT_MATRIX_ARB */
-   {  6477, 0x00008845 }, /* GL_CURRENT_MATRIX_INDEX_ARB */
-   {  6505, 0x00008641 }, /* GL_CURRENT_MATRIX_NV */
-   {  6526, 0x00008640 }, /* GL_CURRENT_MATRIX_STACK_DEPTH_ARB */
-   {  6560, 0x00008640 }, /* GL_CURRENT_MATRIX_STACK_DEPTH_NV */
-   {  6593, 0x00000B02 }, /* GL_CURRENT_NORMAL */
-   {  6611, 0x00008843 }, /* GL_CURRENT_PALETTE_MATRIX_ARB */
-   {  6641, 0x00008B8D }, /* GL_CURRENT_PROGRAM */
-   {  6660, 0x00008865 }, /* GL_CURRENT_QUERY */
-   {  6677, 0x00008865 }, /* GL_CURRENT_QUERY_ARB */
-   {  6698, 0x00000B04 }, /* GL_CURRENT_RASTER_COLOR */
-   {  6722, 0x00000B09 }, /* GL_CURRENT_RASTER_DISTANCE */
-   {  6749, 0x00000B05 }, /* GL_CURRENT_RASTER_INDEX */
-   {  6773, 0x00000B07 }, /* GL_CURRENT_RASTER_POSITION */
-   {  6800, 0x00000B08 }, /* GL_CURRENT_RASTER_POSITION_VALID */
-   {  6833, 0x0000845F }, /* GL_CURRENT_RASTER_SECONDARY_COLOR */
-   {  6867, 0x00000B06 }, /* GL_CURRENT_RASTER_TEXTURE_COORDS */
-   {  6900, 0x00008459 }, /* GL_CURRENT_SECONDARY_COLOR */
-   {  6927, 0x00000B03 }, /* GL_CURRENT_TEXTURE_COORDS */
-   {  6953, 0x00008626 }, /* GL_CURRENT_VERTEX_ATTRIB */
-   {  6978, 0x00008626 }, /* GL_CURRENT_VERTEX_ATTRIB_ARB */
-   {  7007, 0x000086A8 }, /* GL_CURRENT_WEIGHT_ARB */
-   {  7029, 0x00000900 }, /* GL_CW */
-   {  7035, 0x0000875B }, /* GL_DEBUG_ASSERT_MESA */
-   {  7056, 0x00008759 }, /* GL_DEBUG_OBJECT_MESA */
-   {  7077, 0x0000875A }, /* GL_DEBUG_PRINT_MESA */
-   {  7097, 0x00002101 }, /* GL_DECAL */
-   {  7106, 0x00001E03 }, /* GL_DECR */
-   {  7114, 0x00008508 }, /* GL_DECR_WRAP */
-   {  7127, 0x00008508 }, /* GL_DECR_WRAP_EXT */
-   {  7144, 0x00008B80 }, /* GL_DELETE_STATUS */
-   {  7161, 0x00001801 }, /* GL_DEPTH */
-   {  7170, 0x000088F0 }, /* GL_DEPTH24_STENCIL8 */
-   {  7190, 0x000088F0 }, /* GL_DEPTH24_STENCIL8_EXT */
-   {  7214, 0x00008D00 }, /* GL_DEPTH_ATTACHMENT */
-   {  7234, 0x00008D00 }, /* GL_DEPTH_ATTACHMENT_EXT */
-   {  7258, 0x00000D1F }, /* GL_DEPTH_BIAS */
-   {  7272, 0x00000D56 }, /* GL_DEPTH_BITS */
-   {  7286, 0x00008891 }, /* GL_DEPTH_BOUNDS_EXT */
-   {  7306, 0x00008890 }, /* GL_DEPTH_BOUNDS_TEST_EXT */
-   {  7331, 0x00000100 }, /* GL_DEPTH_BUFFER_BIT */
-   {  7351, 0x0000864F }, /* GL_DEPTH_CLAMP */
-   {  7366, 0x0000864F }, /* GL_DEPTH_CLAMP_NV */
-   {  7384, 0x00000B73 }, /* GL_DEPTH_CLEAR_VALUE */
-   {  7405, 0x00001902 }, /* GL_DEPTH_COMPONENT */
-   {  7424, 0x000081A5 }, /* GL_DEPTH_COMPONENT16 */
-   {  7445, 0x000081A5 }, /* GL_DEPTH_COMPONENT16_ARB */
-   {  7470, 0x000081A5 }, /* GL_DEPTH_COMPONENT16_SGIX */
-   {  7496, 0x000081A6 }, /* GL_DEPTH_COMPONENT24 */
-   {  7517, 0x000081A6 }, /* GL_DEPTH_COMPONENT24_ARB */
-   {  7542, 0x000081A6 }, /* GL_DEPTH_COMPONENT24_SGIX */
-   {  7568, 0x000081A7 }, /* GL_DEPTH_COMPONENT32 */
-   {  7589, 0x000081A7 }, /* GL_DEPTH_COMPONENT32_ARB */
-   {  7614, 0x000081A7 }, /* GL_DEPTH_COMPONENT32_SGIX */
-   {  7640, 0x00000B74 }, /* GL_DEPTH_FUNC */
-   {  7654, 0x00000B70 }, /* GL_DEPTH_RANGE */
-   {  7669, 0x00000D1E }, /* GL_DEPTH_SCALE */
-   {  7684, 0x000084F9 }, /* GL_DEPTH_STENCIL */
-   {  7701, 0x0000821A }, /* GL_DEPTH_STENCIL_ATTACHMENT */
-   {  7729, 0x000084F9 }, /* GL_DEPTH_STENCIL_EXT */
-   {  7750, 0x000084F9 }, /* GL_DEPTH_STENCIL_NV */
-   {  7770, 0x0000886F }, /* GL_DEPTH_STENCIL_TO_BGRA_NV */
-   {  7798, 0x0000886E }, /* GL_DEPTH_STENCIL_TO_RGBA_NV */
-   {  7826, 0x00000B71 }, /* GL_DEPTH_TEST */
-   {  7840, 0x0000884B }, /* GL_DEPTH_TEXTURE_MODE */
-   {  7862, 0x0000884B }, /* GL_DEPTH_TEXTURE_MODE_ARB */
-   {  7888, 0x00000B72 }, /* GL_DEPTH_WRITEMASK */
-   {  7907, 0x00001201 }, /* GL_DIFFUSE */
-   {  7918, 0x00000BD0 }, /* GL_DITHER */
-   {  7928, 0x00000A02 }, /* GL_DOMAIN */
-   {  7938, 0x00001100 }, /* GL_DONT_CARE */
-   {  7951, 0x000086AE }, /* GL_DOT3_RGB */
-   {  7963, 0x000086AF }, /* GL_DOT3_RGBA */
-   {  7976, 0x000086AF }, /* GL_DOT3_RGBA_ARB */
-   {  7993, 0x00008741 }, /* GL_DOT3_RGBA_EXT */
-   {  8010, 0x000086AE }, /* GL_DOT3_RGB_ARB */
-   {  8026, 0x00008740 }, /* GL_DOT3_RGB_EXT */
-   {  8042, 0x0000140A }, /* GL_DOUBLE */
-   {  8052, 0x00000C32 }, /* GL_DOUBLEBUFFER */
-   {  8068, 0x00000C01 }, /* GL_DRAW_BUFFER */
-   {  8083, 0x00008825 }, /* GL_DRAW_BUFFER0 */
-   {  8099, 0x00008825 }, /* GL_DRAW_BUFFER0_ARB */
-   {  8119, 0x00008825 }, /* GL_DRAW_BUFFER0_ATI */
-   {  8139, 0x00008826 }, /* GL_DRAW_BUFFER1 */
-   {  8155, 0x0000882F }, /* GL_DRAW_BUFFER10 */
-   {  8172, 0x0000882F }, /* GL_DRAW_BUFFER10_ARB */
-   {  8193, 0x0000882F }, /* GL_DRAW_BUFFER10_ATI */
-   {  8214, 0x00008830 }, /* GL_DRAW_BUFFER11 */
-   {  8231, 0x00008830 }, /* GL_DRAW_BUFFER11_ARB */
-   {  8252, 0x00008830 }, /* GL_DRAW_BUFFER11_ATI */
-   {  8273, 0x00008831 }, /* GL_DRAW_BUFFER12 */
-   {  8290, 0x00008831 }, /* GL_DRAW_BUFFER12_ARB */
-   {  8311, 0x00008831 }, /* GL_DRAW_BUFFER12_ATI */
-   {  8332, 0x00008832 }, /* GL_DRAW_BUFFER13 */
-   {  8349, 0x00008832 }, /* GL_DRAW_BUFFER13_ARB */
-   {  8370, 0x00008832 }, /* GL_DRAW_BUFFER13_ATI */
-   {  8391, 0x00008833 }, /* GL_DRAW_BUFFER14 */
-   {  8408, 0x00008833 }, /* GL_DRAW_BUFFER14_ARB */
-   {  8429, 0x00008833 }, /* GL_DRAW_BUFFER14_ATI */
-   {  8450, 0x00008834 }, /* GL_DRAW_BUFFER15 */
-   {  8467, 0x00008834 }, /* GL_DRAW_BUFFER15_ARB */
-   {  8488, 0x00008834 }, /* GL_DRAW_BUFFER15_ATI */
-   {  8509, 0x00008826 }, /* GL_DRAW_BUFFER1_ARB */
-   {  8529, 0x00008826 }, /* GL_DRAW_BUFFER1_ATI */
-   {  8549, 0x00008827 }, /* GL_DRAW_BUFFER2 */
-   {  8565, 0x00008827 }, /* GL_DRAW_BUFFER2_ARB */
-   {  8585, 0x00008827 }, /* GL_DRAW_BUFFER2_ATI */
-   {  8605, 0x00008828 }, /* GL_DRAW_BUFFER3 */
-   {  8621, 0x00008828 }, /* GL_DRAW_BUFFER3_ARB */
-   {  8641, 0x00008828 }, /* GL_DRAW_BUFFER3_ATI */
-   {  8661, 0x00008829 }, /* GL_DRAW_BUFFER4 */
-   {  8677, 0x00008829 }, /* GL_DRAW_BUFFER4_ARB */
-   {  8697, 0x00008829 }, /* GL_DRAW_BUFFER4_ATI */
-   {  8717, 0x0000882A }, /* GL_DRAW_BUFFER5 */
-   {  8733, 0x0000882A }, /* GL_DRAW_BUFFER5_ARB */
-   {  8753, 0x0000882A }, /* GL_DRAW_BUFFER5_ATI */
-   {  8773, 0x0000882B }, /* GL_DRAW_BUFFER6 */
-   {  8789, 0x0000882B }, /* GL_DRAW_BUFFER6_ARB */
-   {  8809, 0x0000882B }, /* GL_DRAW_BUFFER6_ATI */
-   {  8829, 0x0000882C }, /* GL_DRAW_BUFFER7 */
-   {  8845, 0x0000882C }, /* GL_DRAW_BUFFER7_ARB */
-   {  8865, 0x0000882C }, /* GL_DRAW_BUFFER7_ATI */
-   {  8885, 0x0000882D }, /* GL_DRAW_BUFFER8 */
-   {  8901, 0x0000882D }, /* GL_DRAW_BUFFER8_ARB */
-   {  8921, 0x0000882D }, /* GL_DRAW_BUFFER8_ATI */
-   {  8941, 0x0000882E }, /* GL_DRAW_BUFFER9 */
-   {  8957, 0x0000882E }, /* GL_DRAW_BUFFER9_ARB */
-   {  8977, 0x0000882E }, /* GL_DRAW_BUFFER9_ATI */
-   {  8997, 0x00008CA9 }, /* GL_DRAW_FRAMEBUFFER */
-   {  9017, 0x00008CA6 }, /* GL_DRAW_FRAMEBUFFER_BINDING */
-   {  9045, 0x00008CA6 }, /* GL_DRAW_FRAMEBUFFER_BINDING_EXT */
-   {  9077, 0x00008CA9 }, /* GL_DRAW_FRAMEBUFFER_EXT */
-   {  9101, 0x00000705 }, /* GL_DRAW_PIXEL_TOKEN */
-   {  9121, 0x00000304 }, /* GL_DST_ALPHA */
-   {  9134, 0x00000306 }, /* GL_DST_COLOR */
-   {  9147, 0x0000877A }, /* GL_DU8DV8_ATI */
-   {  9161, 0x00008779 }, /* GL_DUDV_ATI */
-   {  9173, 0x000088EA }, /* GL_DYNAMIC_COPY */
-   {  9189, 0x000088EA }, /* GL_DYNAMIC_COPY_ARB */
-   {  9209, 0x000088E8 }, /* GL_DYNAMIC_DRAW */
-   {  9225, 0x000088E8 }, /* GL_DYNAMIC_DRAW_ARB */
-   {  9245, 0x000088E9 }, /* GL_DYNAMIC_READ */
-   {  9261, 0x000088E9 }, /* GL_DYNAMIC_READ_ARB */
-   {  9281, 0x00000B43 }, /* GL_EDGE_FLAG */
-   {  9294, 0x00008079 }, /* GL_EDGE_FLAG_ARRAY */
-   {  9313, 0x0000889B }, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING */
-   {  9347, 0x0000889B }, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB */
-   {  9385, 0x00008093 }, /* GL_EDGE_FLAG_ARRAY_POINTER */
-   {  9412, 0x0000808C }, /* GL_EDGE_FLAG_ARRAY_STRIDE */
-   {  9438, 0x00008893 }, /* GL_ELEMENT_ARRAY_BUFFER */
-   {  9462, 0x00008895 }, /* GL_ELEMENT_ARRAY_BUFFER_BINDING */
-   {  9494, 0x00008895 }, /* GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB */
-   {  9530, 0x00001600 }, /* GL_EMISSION */
-   {  9542, 0x00002000 }, /* GL_ENABLE_BIT */
-   {  9556, 0x00000202 }, /* GL_EQUAL */
-   {  9565, 0x00001509 }, /* GL_EQUIV */
-   {  9574, 0x00010000 }, /* GL_EVAL_BIT */
-   {  9586, 0x00000800 }, /* GL_EXP */
-   {  9593, 0x00000801 }, /* GL_EXP2 */
-   {  9601, 0x00001F03 }, /* GL_EXTENSIONS */
-   {  9615, 0x00002400 }, /* GL_EYE_LINEAR */
-   {  9629, 0x00002502 }, /* GL_EYE_PLANE */
-   {  9642, 0x0000855C }, /* GL_EYE_PLANE_ABSOLUTE_NV */
-   {  9667, 0x0000855B }, /* GL_EYE_RADIAL_NV */
-   {  9684, 0x00000000 }, /* GL_FALSE */
-   {  9693, 0x00001101 }, /* GL_FASTEST */
-   {  9704, 0x00001C01 }, /* GL_FEEDBACK */
-   {  9716, 0x00000DF0 }, /* GL_FEEDBACK_BUFFER_POINTER */
-   {  9743, 0x00000DF1 }, /* GL_FEEDBACK_BUFFER_SIZE */
-   {  9767, 0x00000DF2 }, /* GL_FEEDBACK_BUFFER_TYPE */
-   {  9791, 0x00001B02 }, /* GL_FILL */
-   {  9799, 0x00008E4D }, /* GL_FIRST_VERTEX_CONVENTION */
-   {  9826, 0x00008E4D }, /* GL_FIRST_VERTEX_CONVENTION_EXT */
-   {  9857, 0x00001D00 }, /* GL_FLAT */
-   {  9865, 0x00001406 }, /* GL_FLOAT */
-   {  9874, 0x00008B5A }, /* GL_FLOAT_MAT2 */
-   {  9888, 0x00008B5A }, /* GL_FLOAT_MAT2_ARB */
-   {  9906, 0x00008B65 }, /* GL_FLOAT_MAT2x3 */
-   {  9922, 0x00008B66 }, /* GL_FLOAT_MAT2x4 */
-   {  9938, 0x00008B5B }, /* GL_FLOAT_MAT3 */
-   {  9952, 0x00008B5B }, /* GL_FLOAT_MAT3_ARB */
-   {  9970, 0x00008B67 }, /* GL_FLOAT_MAT3x2 */
-   {  9986, 0x00008B68 }, /* GL_FLOAT_MAT3x4 */
-   { 10002, 0x00008B5C }, /* GL_FLOAT_MAT4 */
-   { 10016, 0x00008B5C }, /* GL_FLOAT_MAT4_ARB */
-   { 10034, 0x00008B69 }, /* GL_FLOAT_MAT4x2 */
-   { 10050, 0x00008B6A }, /* GL_FLOAT_MAT4x3 */
-   { 10066, 0x00008B50 }, /* GL_FLOAT_VEC2 */
-   { 10080, 0x00008B50 }, /* GL_FLOAT_VEC2_ARB */
-   { 10098, 0x00008B51 }, /* GL_FLOAT_VEC3 */
-   { 10112, 0x00008B51 }, /* GL_FLOAT_VEC3_ARB */
-   { 10130, 0x00008B52 }, /* GL_FLOAT_VEC4 */
-   { 10144, 0x00008B52 }, /* GL_FLOAT_VEC4_ARB */
-   { 10162, 0x00000B60 }, /* GL_FOG */
-   { 10169, 0x00000080 }, /* GL_FOG_BIT */
-   { 10180, 0x00000B66 }, /* GL_FOG_COLOR */
-   { 10193, 0x00008451 }, /* GL_FOG_COORD */
-   { 10206, 0x00008451 }, /* GL_FOG_COORDINATE */
-   { 10224, 0x00008457 }, /* GL_FOG_COORDINATE_ARRAY */
-   { 10248, 0x0000889D }, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING */
-   { 10287, 0x0000889D }, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB */
-   { 10330, 0x00008456 }, /* GL_FOG_COORDINATE_ARRAY_POINTER */
-   { 10362, 0x00008455 }, /* GL_FOG_COORDINATE_ARRAY_STRIDE */
-   { 10393, 0x00008454 }, /* GL_FOG_COORDINATE_ARRAY_TYPE */
-   { 10422, 0x00008450 }, /* GL_FOG_COORDINATE_SOURCE */
-   { 10447, 0x00008457 }, /* GL_FOG_COORD_ARRAY */
-   { 10466, 0x0000889D }, /* GL_FOG_COORD_ARRAY_BUFFER_BINDING */
-   { 10500, 0x00008456 }, /* GL_FOG_COORD_ARRAY_POINTER */
-   { 10527, 0x00008455 }, /* GL_FOG_COORD_ARRAY_STRIDE */
-   { 10553, 0x00008454 }, /* GL_FOG_COORD_ARRAY_TYPE */
-   { 10577, 0x00008450 }, /* GL_FOG_COORD_SRC */
-   { 10594, 0x00000B62 }, /* GL_FOG_DENSITY */
-   { 10609, 0x0000855A }, /* GL_FOG_DISTANCE_MODE_NV */
-   { 10633, 0x00000B64 }, /* GL_FOG_END */
-   { 10644, 0x00000C54 }, /* GL_FOG_HINT */
-   { 10656, 0x00000B61 }, /* GL_FOG_INDEX */
-   { 10669, 0x00000B65 }, /* GL_FOG_MODE */
-   { 10681, 0x00008198 }, /* GL_FOG_OFFSET_SGIX */
-   { 10700, 0x00008199 }, /* GL_FOG_OFFSET_VALUE_SGIX */
-   { 10725, 0x00000B63 }, /* GL_FOG_START */
-   { 10738, 0x00008452 }, /* GL_FRAGMENT_DEPTH */
-   { 10756, 0x00008804 }, /* GL_FRAGMENT_PROGRAM_ARB */
-   { 10780, 0x00008B30 }, /* GL_FRAGMENT_SHADER */
-   { 10799, 0x00008B30 }, /* GL_FRAGMENT_SHADER_ARB */
-   { 10822, 0x00008B8B }, /* GL_FRAGMENT_SHADER_DERIVATIVE_HINT */
-   { 10857, 0x00008D40 }, /* GL_FRAMEBUFFER */
-   { 10872, 0x00008215 }, /* GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE */
-   { 10909, 0x00008214 }, /* GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE */
-   { 10945, 0x00008210 }, /* GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING */
-   { 10986, 0x00008211 }, /* GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE */
-   { 11027, 0x00008216 }, /* GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE */
-   { 11064, 0x00008213 }, /* GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE */
-   { 11101, 0x00008CD1 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME */
-   { 11139, 0x00008CD1 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT */
-   { 11181, 0x00008CD0 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE */
-   { 11219, 0x00008CD0 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT */
-   { 11261, 0x00008212 }, /* GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE */
-   { 11296, 0x00008217 }, /* GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE */
-   { 11335, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT */
-   { 11384, 0x00008CD3 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE */
-   { 11432, 0x00008CD3 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT */
-   { 11484, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */
-   { 11524, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT */
-   { 11568, 0x00008CD2 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL */
-   { 11608, 0x00008CD2 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT */
-   { 11652, 0x00008CA6 }, /* GL_FRAMEBUFFER_BINDING */
-   { 11675, 0x00008CA6 }, /* GL_FRAMEBUFFER_BINDING_EXT */
-   { 11702, 0x00008CD5 }, /* GL_FRAMEBUFFER_COMPLETE */
-   { 11726, 0x00008CD5 }, /* GL_FRAMEBUFFER_COMPLETE_EXT */
-   { 11754, 0x00008218 }, /* GL_FRAMEBUFFER_DEFAULT */
-   { 11777, 0x00008D40 }, /* GL_FRAMEBUFFER_EXT */
-   { 11796, 0x00008CD6 }, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT */
-   { 11833, 0x00008CD6 }, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT */
-   { 11874, 0x00008CD9 }, /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT */
-   { 11915, 0x00008CDB }, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER */
-   { 11953, 0x00008CDB }, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT */
-   { 11995, 0x00008CD8 }, /* GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT */
-   { 12046, 0x00008CDA }, /* GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT */
-   { 12084, 0x00008CD7 }, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT */
-   { 12129, 0x00008CD7 }, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT */
-   { 12178, 0x00008D56 }, /* GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE */
-   { 12216, 0x00008D56 }, /* GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT */
-   { 12258, 0x00008CDC }, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER */
-   { 12296, 0x00008CDC }, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT */
-   { 12338, 0x00008CDE }, /* GL_FRAMEBUFFER_STATUS_ERROR_EXT */
-   { 12370, 0x00008219 }, /* GL_FRAMEBUFFER_UNDEFINED */
-   { 12395, 0x00008CDD }, /* GL_FRAMEBUFFER_UNSUPPORTED */
-   { 12422, 0x00008CDD }, /* GL_FRAMEBUFFER_UNSUPPORTED_EXT */
-   { 12453, 0x00000404 }, /* GL_FRONT */
-   { 12462, 0x00000408 }, /* GL_FRONT_AND_BACK */
-   { 12480, 0x00000B46 }, /* GL_FRONT_FACE */
-   { 12494, 0x00000400 }, /* GL_FRONT_LEFT */
-   { 12508, 0x00000401 }, /* GL_FRONT_RIGHT */
-   { 12523, 0x00008006 }, /* GL_FUNC_ADD */
-   { 12535, 0x00008006 }, /* GL_FUNC_ADD_EXT */
-   { 12551, 0x0000800B }, /* GL_FUNC_REVERSE_SUBTRACT */
-   { 12576, 0x0000800B }, /* GL_FUNC_REVERSE_SUBTRACT_EXT */
-   { 12605, 0x0000800A }, /* GL_FUNC_SUBTRACT */
-   { 12622, 0x0000800A }, /* GL_FUNC_SUBTRACT_EXT */
-   { 12643, 0x00008191 }, /* GL_GENERATE_MIPMAP */
-   { 12662, 0x00008192 }, /* GL_GENERATE_MIPMAP_HINT */
-   { 12686, 0x00008192 }, /* GL_GENERATE_MIPMAP_HINT_SGIS */
-   { 12715, 0x00008191 }, /* GL_GENERATE_MIPMAP_SGIS */
-   { 12739, 0x00000206 }, /* GL_GEQUAL */
-   { 12749, 0x00000204 }, /* GL_GREATER */
-   { 12760, 0x00001904 }, /* GL_GREEN */
-   { 12769, 0x00000D19 }, /* GL_GREEN_BIAS */
-   { 12783, 0x00000D53 }, /* GL_GREEN_BITS */
-   { 12797, 0x00000D18 }, /* GL_GREEN_SCALE */
-   { 12812, 0x0000140B }, /* GL_HALF_FLOAT */
-   { 12826, 0x00008000 }, /* GL_HINT_BIT */
-   { 12838, 0x00008024 }, /* GL_HISTOGRAM */
-   { 12851, 0x0000802B }, /* GL_HISTOGRAM_ALPHA_SIZE */
-   { 12875, 0x0000802B }, /* GL_HISTOGRAM_ALPHA_SIZE_EXT */
-   { 12903, 0x0000802A }, /* GL_HISTOGRAM_BLUE_SIZE */
-   { 12926, 0x0000802A }, /* GL_HISTOGRAM_BLUE_SIZE_EXT */
-   { 12953, 0x00008024 }, /* GL_HISTOGRAM_EXT */
-   { 12970, 0x00008027 }, /* GL_HISTOGRAM_FORMAT */
-   { 12990, 0x00008027 }, /* GL_HISTOGRAM_FORMAT_EXT */
-   { 13014, 0x00008029 }, /* GL_HISTOGRAM_GREEN_SIZE */
-   { 13038, 0x00008029 }, /* GL_HISTOGRAM_GREEN_SIZE_EXT */
-   { 13066, 0x0000802C }, /* GL_HISTOGRAM_LUMINANCE_SIZE */
-   { 13094, 0x0000802C }, /* GL_HISTOGRAM_LUMINANCE_SIZE_EXT */
-   { 13126, 0x00008028 }, /* GL_HISTOGRAM_RED_SIZE */
-   { 13148, 0x00008028 }, /* GL_HISTOGRAM_RED_SIZE_EXT */
-   { 13174, 0x0000802D }, /* GL_HISTOGRAM_SINK */
-   { 13192, 0x0000802D }, /* GL_HISTOGRAM_SINK_EXT */
-   { 13214, 0x00008026 }, /* GL_HISTOGRAM_WIDTH */
-   { 13233, 0x00008026 }, /* GL_HISTOGRAM_WIDTH_EXT */
-   { 13256, 0x0000862A }, /* GL_IDENTITY_NV */
-   { 13271, 0x00008150 }, /* GL_IGNORE_BORDER_HP */
-   { 13291, 0x00008B9B }, /* GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES */
-   { 13331, 0x00008B9A }, /* GL_IMPLEMENTATION_COLOR_READ_TYPE_OES */
-   { 13369, 0x00001E02 }, /* GL_INCR */
-   { 13377, 0x00008507 }, /* GL_INCR_WRAP */
-   { 13390, 0x00008507 }, /* GL_INCR_WRAP_EXT */
-   { 13407, 0x00008222 }, /* GL_INDEX */
-   { 13416, 0x00008077 }, /* GL_INDEX_ARRAY */
-   { 13431, 0x00008899 }, /* GL_INDEX_ARRAY_BUFFER_BINDING */
-   { 13461, 0x00008899 }, /* GL_INDEX_ARRAY_BUFFER_BINDING_ARB */
-   { 13495, 0x00008091 }, /* GL_INDEX_ARRAY_POINTER */
-   { 13518, 0x00008086 }, /* GL_INDEX_ARRAY_STRIDE */
-   { 13540, 0x00008085 }, /* GL_INDEX_ARRAY_TYPE */
-   { 13560, 0x00000D51 }, /* GL_INDEX_BITS */
-   { 13574, 0x00000C20 }, /* GL_INDEX_CLEAR_VALUE */
-   { 13595, 0x00000BF1 }, /* GL_INDEX_LOGIC_OP */
-   { 13613, 0x00000C30 }, /* GL_INDEX_MODE */
-   { 13627, 0x00000D13 }, /* GL_INDEX_OFFSET */
-   { 13643, 0x00000D12 }, /* GL_INDEX_SHIFT */
-   { 13658, 0x00000C21 }, /* GL_INDEX_WRITEMASK */
-   { 13677, 0x00008B84 }, /* GL_INFO_LOG_LENGTH */
-   { 13696, 0x00001404 }, /* GL_INT */
-   { 13703, 0x00008049 }, /* GL_INTENSITY */
-   { 13716, 0x0000804C }, /* GL_INTENSITY12 */
-   { 13731, 0x0000804C }, /* GL_INTENSITY12_EXT */
-   { 13750, 0x0000804D }, /* GL_INTENSITY16 */
-   { 13765, 0x0000804D }, /* GL_INTENSITY16_EXT */
-   { 13784, 0x0000804A }, /* GL_INTENSITY4 */
-   { 13798, 0x0000804A }, /* GL_INTENSITY4_EXT */
-   { 13816, 0x0000804B }, /* GL_INTENSITY8 */
-   { 13830, 0x0000804B }, /* GL_INTENSITY8_EXT */
-   { 13848, 0x00008049 }, /* GL_INTENSITY_EXT */
-   { 13865, 0x00008575 }, /* GL_INTERPOLATE */
-   { 13880, 0x00008575 }, /* GL_INTERPOLATE_ARB */
-   { 13899, 0x00008575 }, /* GL_INTERPOLATE_EXT */
-   { 13918, 0x00008B53 }, /* GL_INT_VEC2 */
-   { 13930, 0x00008B53 }, /* GL_INT_VEC2_ARB */
-   { 13946, 0x00008B54 }, /* GL_INT_VEC3 */
-   { 13958, 0x00008B54 }, /* GL_INT_VEC3_ARB */
-   { 13974, 0x00008B55 }, /* GL_INT_VEC4 */
-   { 13986, 0x00008B55 }, /* GL_INT_VEC4_ARB */
-   { 14002, 0x00000500 }, /* GL_INVALID_ENUM */
-   { 14018, 0x00000506 }, /* GL_INVALID_FRAMEBUFFER_OPERATION */
-   { 14051, 0x00000506 }, /* GL_INVALID_FRAMEBUFFER_OPERATION_EXT */
-   { 14088, 0x00000502 }, /* GL_INVALID_OPERATION */
-   { 14109, 0x00000501 }, /* GL_INVALID_VALUE */
-   { 14126, 0x0000862B }, /* GL_INVERSE_NV */
-   { 14140, 0x0000862D }, /* GL_INVERSE_TRANSPOSE_NV */
-   { 14164, 0x0000150A }, /* GL_INVERT */
-   { 14174, 0x00001E00 }, /* GL_KEEP */
-   { 14182, 0x00008E4E }, /* GL_LAST_VERTEX_CONVENTION */
-   { 14208, 0x00008E4E }, /* GL_LAST_VERTEX_CONVENTION_EXT */
-   { 14238, 0x00000406 }, /* GL_LEFT */
-   { 14246, 0x00000203 }, /* GL_LEQUAL */
-   { 14256, 0x00000201 }, /* GL_LESS */
-   { 14264, 0x00004000 }, /* GL_LIGHT0 */
-   { 14274, 0x00004001 }, /* GL_LIGHT1 */
-   { 14284, 0x00004002 }, /* GL_LIGHT2 */
-   { 14294, 0x00004003 }, /* GL_LIGHT3 */
-   { 14304, 0x00004004 }, /* GL_LIGHT4 */
-   { 14314, 0x00004005 }, /* GL_LIGHT5 */
-   { 14324, 0x00004006 }, /* GL_LIGHT6 */
-   { 14334, 0x00004007 }, /* GL_LIGHT7 */
-   { 14344, 0x00000B50 }, /* GL_LIGHTING */
-   { 14356, 0x00000040 }, /* GL_LIGHTING_BIT */
-   { 14372, 0x00000B53 }, /* GL_LIGHT_MODEL_AMBIENT */
-   { 14395, 0x000081F8 }, /* GL_LIGHT_MODEL_COLOR_CONTROL */
-   { 14424, 0x000081F8 }, /* GL_LIGHT_MODEL_COLOR_CONTROL_EXT */
-   { 14457, 0x00000B51 }, /* GL_LIGHT_MODEL_LOCAL_VIEWER */
-   { 14485, 0x00000B52 }, /* GL_LIGHT_MODEL_TWO_SIDE */
-   { 14509, 0x00001B01 }, /* GL_LINE */
-   { 14517, 0x00002601 }, /* GL_LINEAR */
-   { 14527, 0x00001208 }, /* GL_LINEAR_ATTENUATION */
-   { 14549, 0x00008170 }, /* GL_LINEAR_CLIPMAP_LINEAR_SGIX */
-   { 14579, 0x0000844F }, /* GL_LINEAR_CLIPMAP_NEAREST_SGIX */
-   { 14610, 0x00002703 }, /* GL_LINEAR_MIPMAP_LINEAR */
-   { 14634, 0x00002701 }, /* GL_LINEAR_MIPMAP_NEAREST */
-   { 14659, 0x00000001 }, /* GL_LINES */
-   { 14668, 0x00000004 }, /* GL_LINE_BIT */
-   { 14680, 0x00000002 }, /* GL_LINE_LOOP */
-   { 14693, 0x00000707 }, /* GL_LINE_RESET_TOKEN */
-   { 14713, 0x00000B20 }, /* GL_LINE_SMOOTH */
-   { 14728, 0x00000C52 }, /* GL_LINE_SMOOTH_HINT */
-   { 14748, 0x00000B24 }, /* GL_LINE_STIPPLE */
-   { 14764, 0x00000B25 }, /* GL_LINE_STIPPLE_PATTERN */
-   { 14788, 0x00000B26 }, /* GL_LINE_STIPPLE_REPEAT */
-   { 14811, 0x00000003 }, /* GL_LINE_STRIP */
-   { 14825, 0x00000702 }, /* GL_LINE_TOKEN */
-   { 14839, 0x00000B21 }, /* GL_LINE_WIDTH */
-   { 14853, 0x00000B23 }, /* GL_LINE_WIDTH_GRANULARITY */
-   { 14879, 0x00000B22 }, /* GL_LINE_WIDTH_RANGE */
-   { 14899, 0x00008B82 }, /* GL_LINK_STATUS */
-   { 14914, 0x00000B32 }, /* GL_LIST_BASE */
-   { 14927, 0x00020000 }, /* GL_LIST_BIT */
-   { 14939, 0x00000B33 }, /* GL_LIST_INDEX */
-   { 14953, 0x00000B30 }, /* GL_LIST_MODE */
-   { 14966, 0x00000101 }, /* GL_LOAD */
-   { 14974, 0x00000BF1 }, /* GL_LOGIC_OP */
-   { 14986, 0x00000BF0 }, /* GL_LOGIC_OP_MODE */
-   { 15003, 0x00008CA1 }, /* GL_LOWER_LEFT */
-   { 15017, 0x00001909 }, /* GL_LUMINANCE */
-   { 15030, 0x00008041 }, /* GL_LUMINANCE12 */
-   { 15045, 0x00008047 }, /* GL_LUMINANCE12_ALPHA12 */
-   { 15068, 0x00008047 }, /* GL_LUMINANCE12_ALPHA12_EXT */
-   { 15095, 0x00008046 }, /* GL_LUMINANCE12_ALPHA4 */
-   { 15117, 0x00008046 }, /* GL_LUMINANCE12_ALPHA4_EXT */
-   { 15143, 0x00008041 }, /* GL_LUMINANCE12_EXT */
-   { 15162, 0x00008042 }, /* GL_LUMINANCE16 */
-   { 15177, 0x00008048 }, /* GL_LUMINANCE16_ALPHA16 */
-   { 15200, 0x00008048 }, /* GL_LUMINANCE16_ALPHA16_EXT */
-   { 15227, 0x00008042 }, /* GL_LUMINANCE16_EXT */
-   { 15246, 0x0000803F }, /* GL_LUMINANCE4 */
-   { 15260, 0x00008043 }, /* GL_LUMINANCE4_ALPHA4 */
-   { 15281, 0x00008043 }, /* GL_LUMINANCE4_ALPHA4_EXT */
-   { 15306, 0x0000803F }, /* GL_LUMINANCE4_EXT */
-   { 15324, 0x00008044 }, /* GL_LUMINANCE6_ALPHA2 */
-   { 15345, 0x00008044 }, /* GL_LUMINANCE6_ALPHA2_EXT */
-   { 15370, 0x00008040 }, /* GL_LUMINANCE8 */
-   { 15384, 0x00008045 }, /* GL_LUMINANCE8_ALPHA8 */
-   { 15405, 0x00008045 }, /* GL_LUMINANCE8_ALPHA8_EXT */
-   { 15430, 0x00008040 }, /* GL_LUMINANCE8_EXT */
-   { 15448, 0x0000190A }, /* GL_LUMINANCE_ALPHA */
-   { 15467, 0x00000D90 }, /* GL_MAP1_COLOR_4 */
-   { 15483, 0x00000DD0 }, /* GL_MAP1_GRID_DOMAIN */
-   { 15503, 0x00000DD1 }, /* GL_MAP1_GRID_SEGMENTS */
-   { 15525, 0x00000D91 }, /* GL_MAP1_INDEX */
-   { 15539, 0x00000D92 }, /* GL_MAP1_NORMAL */
-   { 15554, 0x00000D93 }, /* GL_MAP1_TEXTURE_COORD_1 */
-   { 15578, 0x00000D94 }, /* GL_MAP1_TEXTURE_COORD_2 */
-   { 15602, 0x00000D95 }, /* GL_MAP1_TEXTURE_COORD_3 */
-   { 15626, 0x00000D96 }, /* GL_MAP1_TEXTURE_COORD_4 */
-   { 15650, 0x00000D97 }, /* GL_MAP1_VERTEX_3 */
-   { 15667, 0x00000D98 }, /* GL_MAP1_VERTEX_4 */
-   { 15684, 0x00008660 }, /* GL_MAP1_VERTEX_ATTRIB0_4_NV */
-   { 15712, 0x0000866A }, /* GL_MAP1_VERTEX_ATTRIB10_4_NV */
-   { 15741, 0x0000866B }, /* GL_MAP1_VERTEX_ATTRIB11_4_NV */
-   { 15770, 0x0000866C }, /* GL_MAP1_VERTEX_ATTRIB12_4_NV */
-   { 15799, 0x0000866D }, /* GL_MAP1_VERTEX_ATTRIB13_4_NV */
-   { 15828, 0x0000866E }, /* GL_MAP1_VERTEX_ATTRIB14_4_NV */
-   { 15857, 0x0000866F }, /* GL_MAP1_VERTEX_ATTRIB15_4_NV */
-   { 15886, 0x00008661 }, /* GL_MAP1_VERTEX_ATTRIB1_4_NV */
-   { 15914, 0x00008662 }, /* GL_MAP1_VERTEX_ATTRIB2_4_NV */
-   { 15942, 0x00008663 }, /* GL_MAP1_VERTEX_ATTRIB3_4_NV */
-   { 15970, 0x00008664 }, /* GL_MAP1_VERTEX_ATTRIB4_4_NV */
-   { 15998, 0x00008665 }, /* GL_MAP1_VERTEX_ATTRIB5_4_NV */
-   { 16026, 0x00008666 }, /* GL_MAP1_VERTEX_ATTRIB6_4_NV */
-   { 16054, 0x00008667 }, /* GL_MAP1_VERTEX_ATTRIB7_4_NV */
-   { 16082, 0x00008668 }, /* GL_MAP1_VERTEX_ATTRIB8_4_NV */
-   { 16110, 0x00008669 }, /* GL_MAP1_VERTEX_ATTRIB9_4_NV */
-   { 16138, 0x00000DB0 }, /* GL_MAP2_COLOR_4 */
-   { 16154, 0x00000DD2 }, /* GL_MAP2_GRID_DOMAIN */
-   { 16174, 0x00000DD3 }, /* GL_MAP2_GRID_SEGMENTS */
-   { 16196, 0x00000DB1 }, /* GL_MAP2_INDEX */
-   { 16210, 0x00000DB2 }, /* GL_MAP2_NORMAL */
-   { 16225, 0x00000DB3 }, /* GL_MAP2_TEXTURE_COORD_1 */
-   { 16249, 0x00000DB4 }, /* GL_MAP2_TEXTURE_COORD_2 */
-   { 16273, 0x00000DB5 }, /* GL_MAP2_TEXTURE_COORD_3 */
-   { 16297, 0x00000DB6 }, /* GL_MAP2_TEXTURE_COORD_4 */
-   { 16321, 0x00000DB7 }, /* GL_MAP2_VERTEX_3 */
-   { 16338, 0x00000DB8 }, /* GL_MAP2_VERTEX_4 */
-   { 16355, 0x00008670 }, /* GL_MAP2_VERTEX_ATTRIB0_4_NV */
-   { 16383, 0x0000867A }, /* GL_MAP2_VERTEX_ATTRIB10_4_NV */
-   { 16412, 0x0000867B }, /* GL_MAP2_VERTEX_ATTRIB11_4_NV */
-   { 16441, 0x0000867C }, /* GL_MAP2_VERTEX_ATTRIB12_4_NV */
-   { 16470, 0x0000867D }, /* GL_MAP2_VERTEX_ATTRIB13_4_NV */
-   { 16499, 0x0000867E }, /* GL_MAP2_VERTEX_ATTRIB14_4_NV */
-   { 16528, 0x0000867F }, /* GL_MAP2_VERTEX_ATTRIB15_4_NV */
-   { 16557, 0x00008671 }, /* GL_MAP2_VERTEX_ATTRIB1_4_NV */
-   { 16585, 0x00008672 }, /* GL_MAP2_VERTEX_ATTRIB2_4_NV */
-   { 16613, 0x00008673 }, /* GL_MAP2_VERTEX_ATTRIB3_4_NV */
-   { 16641, 0x00008674 }, /* GL_MAP2_VERTEX_ATTRIB4_4_NV */
-   { 16669, 0x00008675 }, /* GL_MAP2_VERTEX_ATTRIB5_4_NV */
-   { 16697, 0x00008676 }, /* GL_MAP2_VERTEX_ATTRIB6_4_NV */
-   { 16725, 0x00008677 }, /* GL_MAP2_VERTEX_ATTRIB7_4_NV */
-   { 16753, 0x00008678 }, /* GL_MAP2_VERTEX_ATTRIB8_4_NV */
-   { 16781, 0x00008679 }, /* GL_MAP2_VERTEX_ATTRIB9_4_NV */
-   { 16809, 0x00000D10 }, /* GL_MAP_COLOR */
-   { 16822, 0x00000010 }, /* GL_MAP_FLUSH_EXPLICIT_BIT */
-   { 16848, 0x00000008 }, /* GL_MAP_INVALIDATE_BUFFER_BIT */
-   { 16877, 0x00000004 }, /* GL_MAP_INVALIDATE_RANGE_BIT */
-   { 16905, 0x00000001 }, /* GL_MAP_READ_BIT */
-   { 16921, 0x00000D11 }, /* GL_MAP_STENCIL */
-   { 16936, 0x00000020 }, /* GL_MAP_UNSYNCHRONIZED_BIT */
-   { 16962, 0x00000002 }, /* GL_MAP_WRITE_BIT */
-   { 16979, 0x000088C0 }, /* GL_MATRIX0_ARB */
-   { 16994, 0x00008630 }, /* GL_MATRIX0_NV */
-   { 17008, 0x000088CA }, /* GL_MATRIX10_ARB */
-   { 17024, 0x000088CB }, /* GL_MATRIX11_ARB */
-   { 17040, 0x000088CC }, /* GL_MATRIX12_ARB */
-   { 17056, 0x000088CD }, /* GL_MATRIX13_ARB */
-   { 17072, 0x000088CE }, /* GL_MATRIX14_ARB */
-   { 17088, 0x000088CF }, /* GL_MATRIX15_ARB */
-   { 17104, 0x000088D0 }, /* GL_MATRIX16_ARB */
-   { 17120, 0x000088D1 }, /* GL_MATRIX17_ARB */
-   { 17136, 0x000088D2 }, /* GL_MATRIX18_ARB */
-   { 17152, 0x000088D3 }, /* GL_MATRIX19_ARB */
-   { 17168, 0x000088C1 }, /* GL_MATRIX1_ARB */
-   { 17183, 0x00008631 }, /* GL_MATRIX1_NV */
-   { 17197, 0x000088D4 }, /* GL_MATRIX20_ARB */
-   { 17213, 0x000088D5 }, /* GL_MATRIX21_ARB */
-   { 17229, 0x000088D6 }, /* GL_MATRIX22_ARB */
-   { 17245, 0x000088D7 }, /* GL_MATRIX23_ARB */
-   { 17261, 0x000088D8 }, /* GL_MATRIX24_ARB */
-   { 17277, 0x000088D9 }, /* GL_MATRIX25_ARB */
-   { 17293, 0x000088DA }, /* GL_MATRIX26_ARB */
-   { 17309, 0x000088DB }, /* GL_MATRIX27_ARB */
-   { 17325, 0x000088DC }, /* GL_MATRIX28_ARB */
-   { 17341, 0x000088DD }, /* GL_MATRIX29_ARB */
-   { 17357, 0x000088C2 }, /* GL_MATRIX2_ARB */
-   { 17372, 0x00008632 }, /* GL_MATRIX2_NV */
-   { 17386, 0x000088DE }, /* GL_MATRIX30_ARB */
-   { 17402, 0x000088DF }, /* GL_MATRIX31_ARB */
-   { 17418, 0x000088C3 }, /* GL_MATRIX3_ARB */
-   { 17433, 0x00008633 }, /* GL_MATRIX3_NV */
-   { 17447, 0x000088C4 }, /* GL_MATRIX4_ARB */
-   { 17462, 0x00008634 }, /* GL_MATRIX4_NV */
-   { 17476, 0x000088C5 }, /* GL_MATRIX5_ARB */
-   { 17491, 0x00008635 }, /* GL_MATRIX5_NV */
-   { 17505, 0x000088C6 }, /* GL_MATRIX6_ARB */
-   { 17520, 0x00008636 }, /* GL_MATRIX6_NV */
-   { 17534, 0x000088C7 }, /* GL_MATRIX7_ARB */
-   { 17549, 0x00008637 }, /* GL_MATRIX7_NV */
-   { 17563, 0x000088C8 }, /* GL_MATRIX8_ARB */
-   { 17578, 0x000088C9 }, /* GL_MATRIX9_ARB */
-   { 17593, 0x00008844 }, /* GL_MATRIX_INDEX_ARRAY_ARB */
-   { 17619, 0x00008849 }, /* GL_MATRIX_INDEX_ARRAY_POINTER_ARB */
-   { 17653, 0x00008846 }, /* GL_MATRIX_INDEX_ARRAY_SIZE_ARB */
-   { 17684, 0x00008848 }, /* GL_MATRIX_INDEX_ARRAY_STRIDE_ARB */
-   { 17717, 0x00008847 }, /* GL_MATRIX_INDEX_ARRAY_TYPE_ARB */
-   { 17748, 0x00000BA0 }, /* GL_MATRIX_MODE */
-   { 17763, 0x00008840 }, /* GL_MATRIX_PALETTE_ARB */
-   { 17785, 0x00008008 }, /* GL_MAX */
-   { 17792, 0x00008073 }, /* GL_MAX_3D_TEXTURE_SIZE */
-   { 17815, 0x000088FF }, /* GL_MAX_ARRAY_TEXTURE_LAYERS_EXT */
-   { 17847, 0x00000D35 }, /* GL_MAX_ATTRIB_STACK_DEPTH */
-   { 17873, 0x00000D3B }, /* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH */
-   { 17906, 0x00008177 }, /* GL_MAX_CLIPMAP_DEPTH_SGIX */
-   { 17932, 0x00008178 }, /* GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX */
-   { 17966, 0x00000D32 }, /* GL_MAX_CLIP_PLANES */
-   { 17985, 0x00008CDF }, /* GL_MAX_COLOR_ATTACHMENTS */
-   { 18010, 0x00008CDF }, /* GL_MAX_COLOR_ATTACHMENTS_EXT */
-   { 18039, 0x000080B3 }, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH */
-   { 18071, 0x000080B3 }, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI */
-   { 18107, 0x00008B4D }, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS */
-   { 18143, 0x00008B4D }, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB */
-   { 18183, 0x0000801B }, /* GL_MAX_CONVOLUTION_HEIGHT */
-   { 18209, 0x0000801B }, /* GL_MAX_CONVOLUTION_HEIGHT_EXT */
-   { 18239, 0x0000801A }, /* GL_MAX_CONVOLUTION_WIDTH */
-   { 18264, 0x0000801A }, /* GL_MAX_CONVOLUTION_WIDTH_EXT */
-   { 18293, 0x0000851C }, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE */
-   { 18322, 0x0000851C }, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB */
-   { 18355, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS */
-   { 18375, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS_ARB */
-   { 18399, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS_ATI */
-   { 18423, 0x000080E9 }, /* GL_MAX_ELEMENTS_INDICES */
-   { 18447, 0x000080E8 }, /* GL_MAX_ELEMENTS_VERTICES */
-   { 18472, 0x00000D30 }, /* GL_MAX_EVAL_ORDER */
-   { 18490, 0x00008008 }, /* GL_MAX_EXT */
-   { 18501, 0x00008B49 }, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS */
-   { 18536, 0x00008B49 }, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB */
-   { 18575, 0x00000D31 }, /* GL_MAX_LIGHTS */
-   { 18589, 0x00000B31 }, /* GL_MAX_LIST_NESTING */
-   { 18609, 0x00008841 }, /* GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB */
-   { 18647, 0x00000D36 }, /* GL_MAX_MODELVIEW_STACK_DEPTH */
-   { 18676, 0x00000D37 }, /* GL_MAX_NAME_STACK_DEPTH */
-   { 18700, 0x00008842 }, /* GL_MAX_PALETTE_MATRICES_ARB */
-   { 18728, 0x00000D34 }, /* GL_MAX_PIXEL_MAP_TABLE */
-   { 18751, 0x000088B1 }, /* GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB */
-   { 18788, 0x0000880B }, /* GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB */
-   { 18824, 0x000088AD }, /* GL_MAX_PROGRAM_ATTRIBS_ARB */
-   { 18851, 0x000088F5 }, /* GL_MAX_PROGRAM_CALL_DEPTH_NV */
-   { 18880, 0x000088B5 }, /* GL_MAX_PROGRAM_ENV_PARAMETERS_ARB */
-   { 18914, 0x000088F4 }, /* GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV */
-   { 18950, 0x000088F6 }, /* GL_MAX_PROGRAM_IF_DEPTH_NV */
-   { 18977, 0x000088A1 }, /* GL_MAX_PROGRAM_INSTRUCTIONS_ARB */
-   { 19009, 0x000088B4 }, /* GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB */
-   { 19045, 0x000088F8 }, /* GL_MAX_PROGRAM_LOOP_COUNT_NV */
-   { 19074, 0x000088F7 }, /* GL_MAX_PROGRAM_LOOP_DEPTH_NV */
-   { 19103, 0x0000862F }, /* GL_MAX_PROGRAM_MATRICES_ARB */
-   { 19131, 0x0000862E }, /* GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB */
-   { 19169, 0x000088B3 }, /* GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */
-   { 19213, 0x0000880E }, /* GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */
-   { 19256, 0x000088AF }, /* GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB */
-   { 19290, 0x000088A3 }, /* GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB */
-   { 19329, 0x000088AB }, /* GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB */
-   { 19366, 0x000088A7 }, /* GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB */
-   { 19404, 0x00008810 }, /* GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */
-   { 19447, 0x0000880F }, /* GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */
-   { 19490, 0x000088A9 }, /* GL_MAX_PROGRAM_PARAMETERS_ARB */
-   { 19520, 0x000088A5 }, /* GL_MAX_PROGRAM_TEMPORARIES_ARB */
-   { 19551, 0x0000880D }, /* GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB */
-   { 19587, 0x0000880C }, /* GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB */
-   { 19623, 0x00000D38 }, /* GL_MAX_PROJECTION_STACK_DEPTH */
-   { 19653, 0x000084F8 }, /* GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB */
-   { 19687, 0x000084F8 }, /* GL_MAX_RECTANGLE_TEXTURE_SIZE_NV */
-   { 19720, 0x000084E8 }, /* GL_MAX_RENDERBUFFER_SIZE */
-   { 19745, 0x000084E8 }, /* GL_MAX_RENDERBUFFER_SIZE_EXT */
-   { 19774, 0x00008D57 }, /* GL_MAX_SAMPLES */
-   { 19789, 0x00008D57 }, /* GL_MAX_SAMPLES_EXT */
-   { 19808, 0x00009111 }, /* GL_MAX_SERVER_WAIT_TIMEOUT */
-   { 19835, 0x00008504 }, /* GL_MAX_SHININESS_NV */
-   { 19855, 0x00008505 }, /* GL_MAX_SPOT_EXPONENT_NV */
-   { 19879, 0x00008871 }, /* GL_MAX_TEXTURE_COORDS */
-   { 19901, 0x00008871 }, /* GL_MAX_TEXTURE_COORDS_ARB */
-   { 19927, 0x00008872 }, /* GL_MAX_TEXTURE_IMAGE_UNITS */
-   { 19954, 0x00008872 }, /* GL_MAX_TEXTURE_IMAGE_UNITS_ARB */
-   { 19985, 0x000084FD }, /* GL_MAX_TEXTURE_LOD_BIAS */
-   { 20009, 0x000084FF }, /* GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT */
-   { 20043, 0x00000D33 }, /* GL_MAX_TEXTURE_SIZE */
-   { 20063, 0x00000D39 }, /* GL_MAX_TEXTURE_STACK_DEPTH */
-   { 20090, 0x000084E2 }, /* GL_MAX_TEXTURE_UNITS */
-   { 20111, 0x000084E2 }, /* GL_MAX_TEXTURE_UNITS_ARB */
-   { 20136, 0x0000862F }, /* GL_MAX_TRACK_MATRICES_NV */
-   { 20161, 0x0000862E }, /* GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV */
-   { 20196, 0x00008B4B }, /* GL_MAX_VARYING_FLOATS */
-   { 20218, 0x00008B4B }, /* GL_MAX_VARYING_FLOATS_ARB */
-   { 20244, 0x00008869 }, /* GL_MAX_VERTEX_ATTRIBS */
-   { 20266, 0x00008869 }, /* GL_MAX_VERTEX_ATTRIBS_ARB */
-   { 20292, 0x00008B4C }, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS */
-   { 20326, 0x00008B4C }, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB */
-   { 20364, 0x00008B4A }, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS */
-   { 20397, 0x00008B4A }, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB */
-   { 20434, 0x000086A4 }, /* GL_MAX_VERTEX_UNITS_ARB */
-   { 20458, 0x00000D3A }, /* GL_MAX_VIEWPORT_DIMS */
-   { 20479, 0x00008007 }, /* GL_MIN */
-   { 20486, 0x0000802E }, /* GL_MINMAX */
-   { 20496, 0x0000802E }, /* GL_MINMAX_EXT */
-   { 20510, 0x0000802F }, /* GL_MINMAX_FORMAT */
-   { 20527, 0x0000802F }, /* GL_MINMAX_FORMAT_EXT */
-   { 20548, 0x00008030 }, /* GL_MINMAX_SINK */
-   { 20563, 0x00008030 }, /* GL_MINMAX_SINK_EXT */
-   { 20582, 0x00008007 }, /* GL_MIN_EXT */
-   { 20593, 0x00008370 }, /* GL_MIRRORED_REPEAT */
-   { 20612, 0x00008370 }, /* GL_MIRRORED_REPEAT_ARB */
-   { 20635, 0x00008370 }, /* GL_MIRRORED_REPEAT_IBM */
-   { 20658, 0x00008742 }, /* GL_MIRROR_CLAMP_ATI */
-   { 20678, 0x00008742 }, /* GL_MIRROR_CLAMP_EXT */
-   { 20698, 0x00008912 }, /* GL_MIRROR_CLAMP_TO_BORDER_EXT */
-   { 20728, 0x00008743 }, /* GL_MIRROR_CLAMP_TO_EDGE_ATI */
-   { 20756, 0x00008743 }, /* GL_MIRROR_CLAMP_TO_EDGE_EXT */
-   { 20784, 0x00001700 }, /* GL_MODELVIEW */
-   { 20797, 0x00001700 }, /* GL_MODELVIEW0_ARB */
-   { 20815, 0x0000872A }, /* GL_MODELVIEW10_ARB */
-   { 20834, 0x0000872B }, /* GL_MODELVIEW11_ARB */
-   { 20853, 0x0000872C }, /* GL_MODELVIEW12_ARB */
-   { 20872, 0x0000872D }, /* GL_MODELVIEW13_ARB */
-   { 20891, 0x0000872E }, /* GL_MODELVIEW14_ARB */
-   { 20910, 0x0000872F }, /* GL_MODELVIEW15_ARB */
-   { 20929, 0x00008730 }, /* GL_MODELVIEW16_ARB */
-   { 20948, 0x00008731 }, /* GL_MODELVIEW17_ARB */
-   { 20967, 0x00008732 }, /* GL_MODELVIEW18_ARB */
-   { 20986, 0x00008733 }, /* GL_MODELVIEW19_ARB */
-   { 21005, 0x0000850A }, /* GL_MODELVIEW1_ARB */
-   { 21023, 0x00008734 }, /* GL_MODELVIEW20_ARB */
-   { 21042, 0x00008735 }, /* GL_MODELVIEW21_ARB */
-   { 21061, 0x00008736 }, /* GL_MODELVIEW22_ARB */
-   { 21080, 0x00008737 }, /* GL_MODELVIEW23_ARB */
-   { 21099, 0x00008738 }, /* GL_MODELVIEW24_ARB */
-   { 21118, 0x00008739 }, /* GL_MODELVIEW25_ARB */
-   { 21137, 0x0000873A }, /* GL_MODELVIEW26_ARB */
-   { 21156, 0x0000873B }, /* GL_MODELVIEW27_ARB */
-   { 21175, 0x0000873C }, /* GL_MODELVIEW28_ARB */
-   { 21194, 0x0000873D }, /* GL_MODELVIEW29_ARB */
-   { 21213, 0x00008722 }, /* GL_MODELVIEW2_ARB */
-   { 21231, 0x0000873E }, /* GL_MODELVIEW30_ARB */
-   { 21250, 0x0000873F }, /* GL_MODELVIEW31_ARB */
-   { 21269, 0x00008723 }, /* GL_MODELVIEW3_ARB */
-   { 21287, 0x00008724 }, /* GL_MODELVIEW4_ARB */
-   { 21305, 0x00008725 }, /* GL_MODELVIEW5_ARB */
-   { 21323, 0x00008726 }, /* GL_MODELVIEW6_ARB */
-   { 21341, 0x00008727 }, /* GL_MODELVIEW7_ARB */
-   { 21359, 0x00008728 }, /* GL_MODELVIEW8_ARB */
-   { 21377, 0x00008729 }, /* GL_MODELVIEW9_ARB */
-   { 21395, 0x00000BA6 }, /* GL_MODELVIEW_MATRIX */
-   { 21415, 0x00008629 }, /* GL_MODELVIEW_PROJECTION_NV */
-   { 21442, 0x00000BA3 }, /* GL_MODELVIEW_STACK_DEPTH */
-   { 21467, 0x00002100 }, /* GL_MODULATE */
-   { 21479, 0x00008744 }, /* GL_MODULATE_ADD_ATI */
-   { 21499, 0x00008745 }, /* GL_MODULATE_SIGNED_ADD_ATI */
-   { 21526, 0x00008746 }, /* GL_MODULATE_SUBTRACT_ATI */
-   { 21551, 0x00000103 }, /* GL_MULT */
-   { 21559, 0x0000809D }, /* GL_MULTISAMPLE */
-   { 21574, 0x000086B2 }, /* GL_MULTISAMPLE_3DFX */
-   { 21594, 0x0000809D }, /* GL_MULTISAMPLE_ARB */
-   { 21613, 0x20000000 }, /* GL_MULTISAMPLE_BIT */
-   { 21632, 0x20000000 }, /* GL_MULTISAMPLE_BIT_3DFX */
-   { 21656, 0x20000000 }, /* GL_MULTISAMPLE_BIT_ARB */
-   { 21679, 0x00008534 }, /* GL_MULTISAMPLE_FILTER_HINT_NV */
-   { 21709, 0x00002A25 }, /* GL_N3F_V3F */
-   { 21720, 0x00000D70 }, /* GL_NAME_STACK_DEPTH */
-   { 21740, 0x0000150E }, /* GL_NAND */
-   { 21748, 0x00002600 }, /* GL_NEAREST */
-   { 21759, 0x0000844E }, /* GL_NEAREST_CLIPMAP_LINEAR_SGIX */
-   { 21790, 0x0000844D }, /* GL_NEAREST_CLIPMAP_NEAREST_SGIX */
-   { 21822, 0x00002702 }, /* GL_NEAREST_MIPMAP_LINEAR */
-   { 21847, 0x00002700 }, /* GL_NEAREST_MIPMAP_NEAREST */
-   { 21873, 0x00000200 }, /* GL_NEVER */
-   { 21882, 0x00001102 }, /* GL_NICEST */
-   { 21892, 0x00000000 }, /* GL_NONE */
-   { 21900, 0x00001505 }, /* GL_NOOP */
-   { 21908, 0x00001508 }, /* GL_NOR */
-   { 21915, 0x00000BA1 }, /* GL_NORMALIZE */
-   { 21928, 0x00008075 }, /* GL_NORMAL_ARRAY */
-   { 21944, 0x00008897 }, /* GL_NORMAL_ARRAY_BUFFER_BINDING */
-   { 21975, 0x00008897 }, /* GL_NORMAL_ARRAY_BUFFER_BINDING_ARB */
-   { 22010, 0x0000808F }, /* GL_NORMAL_ARRAY_POINTER */
-   { 22034, 0x0000807F }, /* GL_NORMAL_ARRAY_STRIDE */
-   { 22057, 0x0000807E }, /* GL_NORMAL_ARRAY_TYPE */
-   { 22078, 0x00008511 }, /* GL_NORMAL_MAP */
-   { 22092, 0x00008511 }, /* GL_NORMAL_MAP_ARB */
-   { 22110, 0x00008511 }, /* GL_NORMAL_MAP_NV */
-   { 22127, 0x00000205 }, /* GL_NOTEQUAL */
-   { 22139, 0x00000000 }, /* GL_NO_ERROR */
-   { 22151, 0x000086A2 }, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS */
-   { 22185, 0x000086A2 }, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB */
-   { 22223, 0x00008B89 }, /* GL_OBJECT_ACTIVE_ATTRIBUTES_ARB */
-   { 22255, 0x00008B8A }, /* GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB */
-   { 22297, 0x00008B86 }, /* GL_OBJECT_ACTIVE_UNIFORMS_ARB */
-   { 22327, 0x00008B87 }, /* GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB */
-   { 22367, 0x00008B85 }, /* GL_OBJECT_ATTACHED_OBJECTS_ARB */
-   { 22398, 0x00008B81 }, /* GL_OBJECT_COMPILE_STATUS_ARB */
-   { 22427, 0x00008B80 }, /* GL_OBJECT_DELETE_STATUS_ARB */
-   { 22455, 0x00008B84 }, /* GL_OBJECT_INFO_LOG_LENGTH_ARB */
-   { 22485, 0x00002401 }, /* GL_OBJECT_LINEAR */
-   { 22502, 0x00008B82 }, /* GL_OBJECT_LINK_STATUS_ARB */
-   { 22528, 0x00002501 }, /* GL_OBJECT_PLANE */
-   { 22544, 0x00008B88 }, /* GL_OBJECT_SHADER_SOURCE_LENGTH_ARB */
-   { 22579, 0x00008B4F }, /* GL_OBJECT_SUBTYPE_ARB */
-   { 22601, 0x00009112 }, /* GL_OBJECT_TYPE */
-   { 22616, 0x00008B4E }, /* GL_OBJECT_TYPE_ARB */
-   { 22635, 0x00008B83 }, /* GL_OBJECT_VALIDATE_STATUS_ARB */
-   { 22665, 0x00008165 }, /* GL_OCCLUSION_TEST_HP */
-   { 22686, 0x00008166 }, /* GL_OCCLUSION_TEST_RESULT_HP */
-   { 22714, 0x00000001 }, /* GL_ONE */
-   { 22721, 0x00008004 }, /* GL_ONE_MINUS_CONSTANT_ALPHA */
-   { 22749, 0x00008004 }, /* GL_ONE_MINUS_CONSTANT_ALPHA_EXT */
-   { 22781, 0x00008002 }, /* GL_ONE_MINUS_CONSTANT_COLOR */
-   { 22809, 0x00008002 }, /* GL_ONE_MINUS_CONSTANT_COLOR_EXT */
-   { 22841, 0x00000305 }, /* GL_ONE_MINUS_DST_ALPHA */
-   { 22864, 0x00000307 }, /* GL_ONE_MINUS_DST_COLOR */
-   { 22887, 0x00000303 }, /* GL_ONE_MINUS_SRC_ALPHA */
-   { 22910, 0x00000301 }, /* GL_ONE_MINUS_SRC_COLOR */
-   { 22933, 0x00008598 }, /* GL_OPERAND0_ALPHA */
-   { 22951, 0x00008598 }, /* GL_OPERAND0_ALPHA_ARB */
-   { 22973, 0x00008598 }, /* GL_OPERAND0_ALPHA_EXT */
-   { 22995, 0x00008590 }, /* GL_OPERAND0_RGB */
-   { 23011, 0x00008590 }, /* GL_OPERAND0_RGB_ARB */
-   { 23031, 0x00008590 }, /* GL_OPERAND0_RGB_EXT */
-   { 23051, 0x00008599 }, /* GL_OPERAND1_ALPHA */
-   { 23069, 0x00008599 }, /* GL_OPERAND1_ALPHA_ARB */
-   { 23091, 0x00008599 }, /* GL_OPERAND1_ALPHA_EXT */
-   { 23113, 0x00008591 }, /* GL_OPERAND1_RGB */
-   { 23129, 0x00008591 }, /* GL_OPERAND1_RGB_ARB */
-   { 23149, 0x00008591 }, /* GL_OPERAND1_RGB_EXT */
-   { 23169, 0x0000859A }, /* GL_OPERAND2_ALPHA */
-   { 23187, 0x0000859A }, /* GL_OPERAND2_ALPHA_ARB */
-   { 23209, 0x0000859A }, /* GL_OPERAND2_ALPHA_EXT */
-   { 23231, 0x00008592 }, /* GL_OPERAND2_RGB */
-   { 23247, 0x00008592 }, /* GL_OPERAND2_RGB_ARB */
-   { 23267, 0x00008592 }, /* GL_OPERAND2_RGB_EXT */
-   { 23287, 0x0000859B }, /* GL_OPERAND3_ALPHA_NV */
-   { 23308, 0x00008593 }, /* GL_OPERAND3_RGB_NV */
-   { 23327, 0x00001507 }, /* GL_OR */
-   { 23333, 0x00000A01 }, /* GL_ORDER */
-   { 23342, 0x0000150D }, /* GL_OR_INVERTED */
-   { 23357, 0x0000150B }, /* GL_OR_REVERSE */
-   { 23371, 0x00000505 }, /* GL_OUT_OF_MEMORY */
-   { 23388, 0x00000D05 }, /* GL_PACK_ALIGNMENT */
-   { 23406, 0x0000806C }, /* GL_PACK_IMAGE_HEIGHT */
-   { 23427, 0x00008758 }, /* GL_PACK_INVERT_MESA */
-   { 23447, 0x00000D01 }, /* GL_PACK_LSB_FIRST */
-   { 23465, 0x00000D02 }, /* GL_PACK_ROW_LENGTH */
-   { 23484, 0x0000806B }, /* GL_PACK_SKIP_IMAGES */
-   { 23504, 0x00000D04 }, /* GL_PACK_SKIP_PIXELS */
-   { 23524, 0x00000D03 }, /* GL_PACK_SKIP_ROWS */
-   { 23542, 0x00000D00 }, /* GL_PACK_SWAP_BYTES */
-   { 23561, 0x00008B92 }, /* GL_PALETTE4_R5_G6_B5_OES */
-   { 23586, 0x00008B94 }, /* GL_PALETTE4_RGB5_A1_OES */
-   { 23610, 0x00008B90 }, /* GL_PALETTE4_RGB8_OES */
-   { 23631, 0x00008B93 }, /* GL_PALETTE4_RGBA4_OES */
-   { 23653, 0x00008B91 }, /* GL_PALETTE4_RGBA8_OES */
-   { 23675, 0x00008B97 }, /* GL_PALETTE8_R5_G6_B5_OES */
-   { 23700, 0x00008B99 }, /* GL_PALETTE8_RGB5_A1_OES */
-   { 23724, 0x00008B95 }, /* GL_PALETTE8_RGB8_OES */
-   { 23745, 0x00008B98 }, /* GL_PALETTE8_RGBA4_OES */
-   { 23767, 0x00008B96 }, /* GL_PALETTE8_RGBA8_OES */
-   { 23789, 0x00000700 }, /* GL_PASS_THROUGH_TOKEN */
-   { 23811, 0x00000C50 }, /* GL_PERSPECTIVE_CORRECTION_HINT */
-   { 23842, 0x00000C79 }, /* GL_PIXEL_MAP_A_TO_A */
-   { 23862, 0x00000CB9 }, /* GL_PIXEL_MAP_A_TO_A_SIZE */
-   { 23887, 0x00000C78 }, /* GL_PIXEL_MAP_B_TO_B */
-   { 23907, 0x00000CB8 }, /* GL_PIXEL_MAP_B_TO_B_SIZE */
-   { 23932, 0x00000C77 }, /* GL_PIXEL_MAP_G_TO_G */
-   { 23952, 0x00000CB7 }, /* GL_PIXEL_MAP_G_TO_G_SIZE */
-   { 23977, 0x00000C75 }, /* GL_PIXEL_MAP_I_TO_A */
-   { 23997, 0x00000CB5 }, /* GL_PIXEL_MAP_I_TO_A_SIZE */
-   { 24022, 0x00000C74 }, /* GL_PIXEL_MAP_I_TO_B */
-   { 24042, 0x00000CB4 }, /* GL_PIXEL_MAP_I_TO_B_SIZE */
-   { 24067, 0x00000C73 }, /* GL_PIXEL_MAP_I_TO_G */
-   { 24087, 0x00000CB3 }, /* GL_PIXEL_MAP_I_TO_G_SIZE */
-   { 24112, 0x00000C70 }, /* GL_PIXEL_MAP_I_TO_I */
-   { 24132, 0x00000CB0 }, /* GL_PIXEL_MAP_I_TO_I_SIZE */
-   { 24157, 0x00000C72 }, /* GL_PIXEL_MAP_I_TO_R */
-   { 24177, 0x00000CB2 }, /* GL_PIXEL_MAP_I_TO_R_SIZE */
-   { 24202, 0x00000C76 }, /* GL_PIXEL_MAP_R_TO_R */
-   { 24222, 0x00000CB6 }, /* GL_PIXEL_MAP_R_TO_R_SIZE */
-   { 24247, 0x00000C71 }, /* GL_PIXEL_MAP_S_TO_S */
-   { 24267, 0x00000CB1 }, /* GL_PIXEL_MAP_S_TO_S_SIZE */
-   { 24292, 0x00000020 }, /* GL_PIXEL_MODE_BIT */
-   { 24310, 0x000088EB }, /* GL_PIXEL_PACK_BUFFER */
-   { 24331, 0x000088ED }, /* GL_PIXEL_PACK_BUFFER_BINDING */
-   { 24360, 0x000088ED }, /* GL_PIXEL_PACK_BUFFER_BINDING_EXT */
-   { 24393, 0x000088EB }, /* GL_PIXEL_PACK_BUFFER_EXT */
-   { 24418, 0x000088EC }, /* GL_PIXEL_UNPACK_BUFFER */
-   { 24441, 0x000088EF }, /* GL_PIXEL_UNPACK_BUFFER_BINDING */
-   { 24472, 0x000088EF }, /* GL_PIXEL_UNPACK_BUFFER_BINDING_EXT */
-   { 24507, 0x000088EC }, /* GL_PIXEL_UNPACK_BUFFER_EXT */
-   { 24534, 0x00001B00 }, /* GL_POINT */
-   { 24543, 0x00000000 }, /* GL_POINTS */
-   { 24553, 0x00000002 }, /* GL_POINT_BIT */
-   { 24566, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION */
-   { 24596, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_ARB */
-   { 24630, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_EXT */
-   { 24664, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_SGIS */
-   { 24699, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE */
-   { 24728, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_ARB */
-   { 24761, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_EXT */
-   { 24794, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_SGIS */
-   { 24828, 0x00000B11 }, /* GL_POINT_SIZE */
-   { 24842, 0x00000B13 }, /* GL_POINT_SIZE_GRANULARITY */
-   { 24868, 0x00008127 }, /* GL_POINT_SIZE_MAX */
-   { 24886, 0x00008127 }, /* GL_POINT_SIZE_MAX_ARB */
-   { 24908, 0x00008127 }, /* GL_POINT_SIZE_MAX_EXT */
-   { 24930, 0x00008127 }, /* GL_POINT_SIZE_MAX_SGIS */
-   { 24953, 0x00008126 }, /* GL_POINT_SIZE_MIN */
-   { 24971, 0x00008126 }, /* GL_POINT_SIZE_MIN_ARB */
-   { 24993, 0x00008126 }, /* GL_POINT_SIZE_MIN_EXT */
-   { 25015, 0x00008126 }, /* GL_POINT_SIZE_MIN_SGIS */
-   { 25038, 0x00000B12 }, /* GL_POINT_SIZE_RANGE */
-   { 25058, 0x00000B10 }, /* GL_POINT_SMOOTH */
-   { 25074, 0x00000C51 }, /* GL_POINT_SMOOTH_HINT */
-   { 25095, 0x00008861 }, /* GL_POINT_SPRITE */
-   { 25111, 0x00008861 }, /* GL_POINT_SPRITE_ARB */
-   { 25131, 0x00008CA0 }, /* GL_POINT_SPRITE_COORD_ORIGIN */
-   { 25160, 0x00008861 }, /* GL_POINT_SPRITE_NV */
-   { 25179, 0x00008863 }, /* GL_POINT_SPRITE_R_MODE_NV */
-   { 25205, 0x00000701 }, /* GL_POINT_TOKEN */
-   { 25220, 0x00000009 }, /* GL_POLYGON */
-   { 25231, 0x00000008 }, /* GL_POLYGON_BIT */
-   { 25246, 0x00000B40 }, /* GL_POLYGON_MODE */
-   { 25262, 0x00008039 }, /* GL_POLYGON_OFFSET_BIAS */
-   { 25285, 0x00008038 }, /* GL_POLYGON_OFFSET_FACTOR */
-   { 25310, 0x00008037 }, /* GL_POLYGON_OFFSET_FILL */
-   { 25333, 0x00002A02 }, /* GL_POLYGON_OFFSET_LINE */
-   { 25356, 0x00002A01 }, /* GL_POLYGON_OFFSET_POINT */
-   { 25380, 0x00002A00 }, /* GL_POLYGON_OFFSET_UNITS */
-   { 25404, 0x00000B41 }, /* GL_POLYGON_SMOOTH */
-   { 25422, 0x00000C53 }, /* GL_POLYGON_SMOOTH_HINT */
-   { 25445, 0x00000B42 }, /* GL_POLYGON_STIPPLE */
-   { 25464, 0x00000010 }, /* GL_POLYGON_STIPPLE_BIT */
-   { 25487, 0x00000703 }, /* GL_POLYGON_TOKEN */
-   { 25504, 0x00001203 }, /* GL_POSITION */
-   { 25516, 0x000080BB }, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS */
-   { 25548, 0x000080BB }, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI */
-   { 25584, 0x000080B7 }, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE */
-   { 25617, 0x000080B7 }, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI */
-   { 25654, 0x000080BA }, /* GL_POST_COLOR_MATRIX_BLUE_BIAS */
-   { 25685, 0x000080BA }, /* GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI */
-   { 25720, 0x000080B6 }, /* GL_POST_COLOR_MATRIX_BLUE_SCALE */
-   { 25752, 0x000080B6 }, /* GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI */
-   { 25788, 0x000080D2 }, /* GL_POST_COLOR_MATRIX_COLOR_TABLE */
-   { 25821, 0x000080B9 }, /* GL_POST_COLOR_MATRIX_GREEN_BIAS */
-   { 25853, 0x000080B9 }, /* GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI */
-   { 25889, 0x000080B5 }, /* GL_POST_COLOR_MATRIX_GREEN_SCALE */
-   { 25922, 0x000080B5 }, /* GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI */
-   { 25959, 0x000080B8 }, /* GL_POST_COLOR_MATRIX_RED_BIAS */
-   { 25989, 0x000080B8 }, /* GL_POST_COLOR_MATRIX_RED_BIAS_SGI */
-   { 26023, 0x000080B4 }, /* GL_POST_COLOR_MATRIX_RED_SCALE */
-   { 26054, 0x000080B4 }, /* GL_POST_COLOR_MATRIX_RED_SCALE_SGI */
-   { 26089, 0x00008023 }, /* GL_POST_CONVOLUTION_ALPHA_BIAS */
-   { 26120, 0x00008023 }, /* GL_POST_CONVOLUTION_ALPHA_BIAS_EXT */
-   { 26155, 0x0000801F }, /* GL_POST_CONVOLUTION_ALPHA_SCALE */
-   { 26187, 0x0000801F }, /* GL_POST_CONVOLUTION_ALPHA_SCALE_EXT */
-   { 26223, 0x00008022 }, /* GL_POST_CONVOLUTION_BLUE_BIAS */
-   { 26253, 0x00008022 }, /* GL_POST_CONVOLUTION_BLUE_BIAS_EXT */
-   { 26287, 0x0000801E }, /* GL_POST_CONVOLUTION_BLUE_SCALE */
-   { 26318, 0x0000801E }, /* GL_POST_CONVOLUTION_BLUE_SCALE_EXT */
-   { 26353, 0x000080D1 }, /* GL_POST_CONVOLUTION_COLOR_TABLE */
-   { 26385, 0x00008021 }, /* GL_POST_CONVOLUTION_GREEN_BIAS */
-   { 26416, 0x00008021 }, /* GL_POST_CONVOLUTION_GREEN_BIAS_EXT */
-   { 26451, 0x0000801D }, /* GL_POST_CONVOLUTION_GREEN_SCALE */
-   { 26483, 0x0000801D }, /* GL_POST_CONVOLUTION_GREEN_SCALE_EXT */
-   { 26519, 0x00008020 }, /* GL_POST_CONVOLUTION_RED_BIAS */
-   { 26548, 0x00008020 }, /* GL_POST_CONVOLUTION_RED_BIAS_EXT */
-   { 26581, 0x0000801C }, /* GL_POST_CONVOLUTION_RED_SCALE */
-   { 26611, 0x0000801C }, /* GL_POST_CONVOLUTION_RED_SCALE_EXT */
-   { 26645, 0x0000817B }, /* GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX */
-   { 26684, 0x00008179 }, /* GL_POST_TEXTURE_FILTER_BIAS_SGIX */
-   { 26717, 0x0000817C }, /* GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX */
-   { 26757, 0x0000817A }, /* GL_POST_TEXTURE_FILTER_SCALE_SGIX */
-   { 26791, 0x00008578 }, /* GL_PREVIOUS */
-   { 26803, 0x00008578 }, /* GL_PREVIOUS_ARB */
-   { 26819, 0x00008578 }, /* GL_PREVIOUS_EXT */
-   { 26835, 0x00008577 }, /* GL_PRIMARY_COLOR */
-   { 26852, 0x00008577 }, /* GL_PRIMARY_COLOR_ARB */
-   { 26873, 0x00008577 }, /* GL_PRIMARY_COLOR_EXT */
-   { 26894, 0x000088B0 }, /* GL_PROGRAM_ADDRESS_REGISTERS_ARB */
-   { 26927, 0x00008805 }, /* GL_PROGRAM_ALU_INSTRUCTIONS_ARB */
-   { 26959, 0x000088AC }, /* GL_PROGRAM_ATTRIBS_ARB */
-   { 26982, 0x00008677 }, /* GL_PROGRAM_BINDING_ARB */
-   { 27005, 0x0000864B }, /* GL_PROGRAM_ERROR_POSITION_ARB */
-   { 27035, 0x0000864B }, /* GL_PROGRAM_ERROR_POSITION_NV */
-   { 27064, 0x00008874 }, /* GL_PROGRAM_ERROR_STRING_ARB */
-   { 27092, 0x00008876 }, /* GL_PROGRAM_FORMAT_ARB */
-   { 27114, 0x00008875 }, /* GL_PROGRAM_FORMAT_ASCII_ARB */
-   { 27142, 0x000088A0 }, /* GL_PROGRAM_INSTRUCTIONS_ARB */
-   { 27170, 0x00008627 }, /* GL_PROGRAM_LENGTH_ARB */
-   { 27192, 0x00008627 }, /* GL_PROGRAM_LENGTH_NV */
-   { 27213, 0x000088B2 }, /* GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */
-   { 27253, 0x00008808 }, /* GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */
-   { 27292, 0x000088AE }, /* GL_PROGRAM_NATIVE_ATTRIBS_ARB */
-   { 27322, 0x000088A2 }, /* GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB */
-   { 27357, 0x000088AA }, /* GL_PROGRAM_NATIVE_PARAMETERS_ARB */
-   { 27390, 0x000088A6 }, /* GL_PROGRAM_NATIVE_TEMPORARIES_ARB */
-   { 27424, 0x0000880A }, /* GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */
-   { 27463, 0x00008809 }, /* GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */
-   { 27502, 0x00008B40 }, /* GL_PROGRAM_OBJECT_ARB */
-   { 27524, 0x000088A8 }, /* GL_PROGRAM_PARAMETERS_ARB */
-   { 27550, 0x00008644 }, /* GL_PROGRAM_PARAMETER_NV */
-   { 27574, 0x00008647 }, /* GL_PROGRAM_RESIDENT_NV */
-   { 27597, 0x00008628 }, /* GL_PROGRAM_STRING_ARB */
-   { 27619, 0x00008628 }, /* GL_PROGRAM_STRING_NV */
-   { 27640, 0x00008646 }, /* GL_PROGRAM_TARGET_NV */
-   { 27661, 0x000088A4 }, /* GL_PROGRAM_TEMPORARIES_ARB */
-   { 27688, 0x00008807 }, /* GL_PROGRAM_TEX_INDIRECTIONS_ARB */
-   { 27720, 0x00008806 }, /* GL_PROGRAM_TEX_INSTRUCTIONS_ARB */
-   { 27752, 0x000088B6 }, /* GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB */
-   { 27787, 0x00001701 }, /* GL_PROJECTION */
-   { 27801, 0x00000BA7 }, /* GL_PROJECTION_MATRIX */
-   { 27822, 0x00000BA4 }, /* GL_PROJECTION_STACK_DEPTH */
-   { 27848, 0x00008E4F }, /* GL_PROVOKING_VERTEX */
-   { 27868, 0x00008E4F }, /* GL_PROVOKING_VERTEX_EXT */
-   { 27892, 0x000080D3 }, /* GL_PROXY_COLOR_TABLE */
-   { 27913, 0x00008025 }, /* GL_PROXY_HISTOGRAM */
-   { 27932, 0x00008025 }, /* GL_PROXY_HISTOGRAM_EXT */
-   { 27955, 0x000080D5 }, /* GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE */
-   { 27994, 0x000080D4 }, /* GL_PROXY_POST_CONVOLUTION_COLOR_TABLE */
-   { 28032, 0x00008063 }, /* GL_PROXY_TEXTURE_1D */
-   { 28052, 0x00008C19 }, /* GL_PROXY_TEXTURE_1D_ARRAY_EXT */
-   { 28082, 0x00008063 }, /* GL_PROXY_TEXTURE_1D_EXT */
-   { 28106, 0x00008064 }, /* GL_PROXY_TEXTURE_2D */
-   { 28126, 0x00008C1B }, /* GL_PROXY_TEXTURE_2D_ARRAY_EXT */
-   { 28156, 0x00008064 }, /* GL_PROXY_TEXTURE_2D_EXT */
-   { 28180, 0x00008070 }, /* GL_PROXY_TEXTURE_3D */
-   { 28200, 0x000080BD }, /* GL_PROXY_TEXTURE_COLOR_TABLE_SGI */
-   { 28233, 0x0000851B }, /* GL_PROXY_TEXTURE_CUBE_MAP */
-   { 28259, 0x0000851B }, /* GL_PROXY_TEXTURE_CUBE_MAP_ARB */
-   { 28289, 0x000084F7 }, /* GL_PROXY_TEXTURE_RECTANGLE_ARB */
-   { 28320, 0x000084F7 }, /* GL_PROXY_TEXTURE_RECTANGLE_NV */
-   { 28350, 0x00002003 }, /* GL_Q */
-   { 28355, 0x00001209 }, /* GL_QUADRATIC_ATTENUATION */
-   { 28380, 0x00000007 }, /* GL_QUADS */
-   { 28389, 0x00008E4C }, /* GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION */
-   { 28433, 0x00008E4C }, /* GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT */
-   { 28481, 0x00008614 }, /* GL_QUAD_MESH_SUN */
-   { 28498, 0x00000008 }, /* GL_QUAD_STRIP */
-   { 28512, 0x00008E16 }, /* GL_QUERY_BY_REGION_NO_WAIT_NV */
-   { 28542, 0x00008E15 }, /* GL_QUERY_BY_REGION_WAIT_NV */
-   { 28569, 0x00008864 }, /* GL_QUERY_COUNTER_BITS */
-   { 28591, 0x00008864 }, /* GL_QUERY_COUNTER_BITS_ARB */
-   { 28617, 0x00008E14 }, /* GL_QUERY_NO_WAIT_NV */
-   { 28637, 0x00008866 }, /* GL_QUERY_RESULT */
-   { 28653, 0x00008866 }, /* GL_QUERY_RESULT_ARB */
-   { 28673, 0x00008867 }, /* GL_QUERY_RESULT_AVAILABLE */
-   { 28699, 0x00008867 }, /* GL_QUERY_RESULT_AVAILABLE_ARB */
-   { 28729, 0x00008E13 }, /* GL_QUERY_WAIT_NV */
-   { 28746, 0x00002002 }, /* GL_R */
-   { 28751, 0x00002A10 }, /* GL_R3_G3_B2 */
-   { 28763, 0x00019262 }, /* GL_RASTER_POSITION_UNCLIPPED_IBM */
-   { 28796, 0x00000C02 }, /* GL_READ_BUFFER */
-   { 28811, 0x00008CA8 }, /* GL_READ_FRAMEBUFFER */
-   { 28831, 0x00008CAA }, /* GL_READ_FRAMEBUFFER_BINDING */
-   { 28859, 0x00008CAA }, /* GL_READ_FRAMEBUFFER_BINDING_EXT */
-   { 28891, 0x00008CA8 }, /* GL_READ_FRAMEBUFFER_EXT */
-   { 28915, 0x000088B8 }, /* GL_READ_ONLY */
-   { 28928, 0x000088B8 }, /* GL_READ_ONLY_ARB */
-   { 28945, 0x000088BA }, /* GL_READ_WRITE */
-   { 28959, 0x000088BA }, /* GL_READ_WRITE_ARB */
-   { 28977, 0x00001903 }, /* GL_RED */
-   { 28984, 0x00008016 }, /* GL_REDUCE */
-   { 28994, 0x00008016 }, /* GL_REDUCE_EXT */
-   { 29008, 0x00000D15 }, /* GL_RED_BIAS */
-   { 29020, 0x00000D52 }, /* GL_RED_BITS */
-   { 29032, 0x00000D14 }, /* GL_RED_SCALE */
-   { 29045, 0x00008512 }, /* GL_REFLECTION_MAP */
-   { 29063, 0x00008512 }, /* GL_REFLECTION_MAP_ARB */
-   { 29085, 0x00008512 }, /* GL_REFLECTION_MAP_NV */
-   { 29106, 0x00001C00 }, /* GL_RENDER */
-   { 29116, 0x00008D41 }, /* GL_RENDERBUFFER */
-   { 29132, 0x00008D53 }, /* GL_RENDERBUFFER_ALPHA_SIZE */
-   { 29159, 0x00008CA7 }, /* GL_RENDERBUFFER_BINDING */
-   { 29183, 0x00008CA7 }, /* GL_RENDERBUFFER_BINDING_EXT */
-   { 29211, 0x00008D52 }, /* GL_RENDERBUFFER_BLUE_SIZE */
-   { 29237, 0x00008D54 }, /* GL_RENDERBUFFER_DEPTH_SIZE */
-   { 29264, 0x00008D41 }, /* GL_RENDERBUFFER_EXT */
-   { 29284, 0x00008D51 }, /* GL_RENDERBUFFER_GREEN_SIZE */
-   { 29311, 0x00008D43 }, /* GL_RENDERBUFFER_HEIGHT */
-   { 29334, 0x00008D43 }, /* GL_RENDERBUFFER_HEIGHT_EXT */
-   { 29361, 0x00008D44 }, /* GL_RENDERBUFFER_INTERNAL_FORMAT */
-   { 29393, 0x00008D44 }, /* GL_RENDERBUFFER_INTERNAL_FORMAT_EXT */
-   { 29429, 0x00008D50 }, /* GL_RENDERBUFFER_RED_SIZE */
-   { 29454, 0x00008CAB }, /* GL_RENDERBUFFER_SAMPLES */
-   { 29478, 0x00008CAB }, /* GL_RENDERBUFFER_SAMPLES_EXT */
-   { 29506, 0x00008D55 }, /* GL_RENDERBUFFER_STENCIL_SIZE */
-   { 29535, 0x00008D42 }, /* GL_RENDERBUFFER_WIDTH */
-   { 29557, 0x00008D42 }, /* GL_RENDERBUFFER_WIDTH_EXT */
-   { 29583, 0x00001F01 }, /* GL_RENDERER */
-   { 29595, 0x00000C40 }, /* GL_RENDER_MODE */
-   { 29610, 0x00002901 }, /* GL_REPEAT */
-   { 29620, 0x00001E01 }, /* GL_REPLACE */
-   { 29631, 0x00008062 }, /* GL_REPLACE_EXT */
-   { 29646, 0x00008153 }, /* GL_REPLICATE_BORDER_HP */
-   { 29669, 0x0000803A }, /* GL_RESCALE_NORMAL */
-   { 29687, 0x0000803A }, /* GL_RESCALE_NORMAL_EXT */
-   { 29709, 0x00000102 }, /* GL_RETURN */
-   { 29719, 0x00001907 }, /* GL_RGB */
-   { 29726, 0x00008052 }, /* GL_RGB10 */
-   { 29735, 0x00008059 }, /* GL_RGB10_A2 */
-   { 29747, 0x00008059 }, /* GL_RGB10_A2_EXT */
-   { 29763, 0x00008052 }, /* GL_RGB10_EXT */
-   { 29776, 0x00008053 }, /* GL_RGB12 */
-   { 29785, 0x00008053 }, /* GL_RGB12_EXT */
-   { 29798, 0x00008054 }, /* GL_RGB16 */
-   { 29807, 0x00008054 }, /* GL_RGB16_EXT */
-   { 29820, 0x0000804E }, /* GL_RGB2_EXT */
-   { 29832, 0x0000804F }, /* GL_RGB4 */
-   { 29840, 0x0000804F }, /* GL_RGB4_EXT */
-   { 29852, 0x000083A1 }, /* GL_RGB4_S3TC */
-   { 29865, 0x00008050 }, /* GL_RGB5 */
-   { 29873, 0x00008057 }, /* GL_RGB5_A1 */
-   { 29884, 0x00008057 }, /* GL_RGB5_A1_EXT */
-   { 29899, 0x00008050 }, /* GL_RGB5_EXT */
-   { 29911, 0x00008051 }, /* GL_RGB8 */
-   { 29919, 0x00008051 }, /* GL_RGB8_EXT */
-   { 29931, 0x00001908 }, /* GL_RGBA */
-   { 29939, 0x0000805A }, /* GL_RGBA12 */
-   { 29949, 0x0000805A }, /* GL_RGBA12_EXT */
-   { 29963, 0x0000805B }, /* GL_RGBA16 */
-   { 29973, 0x0000805B }, /* GL_RGBA16_EXT */
-   { 29987, 0x00008055 }, /* GL_RGBA2 */
-   { 29996, 0x00008055 }, /* GL_RGBA2_EXT */
-   { 30009, 0x00008056 }, /* GL_RGBA4 */
-   { 30018, 0x000083A5 }, /* GL_RGBA4_DXT5_S3TC */
-   { 30037, 0x00008056 }, /* GL_RGBA4_EXT */
-   { 30050, 0x000083A3 }, /* GL_RGBA4_S3TC */
-   { 30064, 0x00008058 }, /* GL_RGBA8 */
-   { 30073, 0x00008058 }, /* GL_RGBA8_EXT */
-   { 30086, 0x00008F97 }, /* GL_RGBA8_SNORM */
-   { 30101, 0x000083A4 }, /* GL_RGBA_DXT5_S3TC */
-   { 30119, 0x00000C31 }, /* GL_RGBA_MODE */
-   { 30132, 0x000083A2 }, /* GL_RGBA_S3TC */
-   { 30145, 0x00008F93 }, /* GL_RGBA_SNORM */
-   { 30159, 0x000083A0 }, /* GL_RGB_S3TC */
-   { 30171, 0x00008573 }, /* GL_RGB_SCALE */
-   { 30184, 0x00008573 }, /* GL_RGB_SCALE_ARB */
-   { 30201, 0x00008573 }, /* GL_RGB_SCALE_EXT */
-   { 30218, 0x00000407 }, /* GL_RIGHT */
-   { 30227, 0x00002000 }, /* GL_S */
-   { 30232, 0x00008B5D }, /* GL_SAMPLER_1D */
-   { 30246, 0x00008B61 }, /* GL_SAMPLER_1D_SHADOW */
-   { 30267, 0x00008B5E }, /* GL_SAMPLER_2D */
-   { 30281, 0x00008B62 }, /* GL_SAMPLER_2D_SHADOW */
-   { 30302, 0x00008B5F }, /* GL_SAMPLER_3D */
-   { 30316, 0x00008B60 }, /* GL_SAMPLER_CUBE */
-   { 30332, 0x000080A9 }, /* GL_SAMPLES */
-   { 30343, 0x000086B4 }, /* GL_SAMPLES_3DFX */
-   { 30359, 0x000080A9 }, /* GL_SAMPLES_ARB */
-   { 30374, 0x00008914 }, /* GL_SAMPLES_PASSED */
-   { 30392, 0x00008914 }, /* GL_SAMPLES_PASSED_ARB */
-   { 30414, 0x0000809E }, /* GL_SAMPLE_ALPHA_TO_COVERAGE */
-   { 30442, 0x0000809E }, /* GL_SAMPLE_ALPHA_TO_COVERAGE_ARB */
-   { 30474, 0x0000809F }, /* GL_SAMPLE_ALPHA_TO_ONE */
-   { 30497, 0x0000809F }, /* GL_SAMPLE_ALPHA_TO_ONE_ARB */
-   { 30524, 0x000080A8 }, /* GL_SAMPLE_BUFFERS */
-   { 30542, 0x000086B3 }, /* GL_SAMPLE_BUFFERS_3DFX */
-   { 30565, 0x000080A8 }, /* GL_SAMPLE_BUFFERS_ARB */
-   { 30587, 0x000080A0 }, /* GL_SAMPLE_COVERAGE */
-   { 30606, 0x000080A0 }, /* GL_SAMPLE_COVERAGE_ARB */
-   { 30629, 0x000080AB }, /* GL_SAMPLE_COVERAGE_INVERT */
-   { 30655, 0x000080AB }, /* GL_SAMPLE_COVERAGE_INVERT_ARB */
-   { 30685, 0x000080AA }, /* GL_SAMPLE_COVERAGE_VALUE */
-   { 30710, 0x000080AA }, /* GL_SAMPLE_COVERAGE_VALUE_ARB */
-   { 30739, 0x00080000 }, /* GL_SCISSOR_BIT */
-   { 30754, 0x00000C10 }, /* GL_SCISSOR_BOX */
-   { 30769, 0x00000C11 }, /* GL_SCISSOR_TEST */
-   { 30785, 0x0000845E }, /* GL_SECONDARY_COLOR_ARRAY */
-   { 30810, 0x0000889C }, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING */
-   { 30850, 0x0000889C }, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB */
-   { 30894, 0x0000845D }, /* GL_SECONDARY_COLOR_ARRAY_POINTER */
-   { 30927, 0x0000845A }, /* GL_SECONDARY_COLOR_ARRAY_SIZE */
-   { 30957, 0x0000845C }, /* GL_SECONDARY_COLOR_ARRAY_STRIDE */
-   { 30989, 0x0000845B }, /* GL_SECONDARY_COLOR_ARRAY_TYPE */
-   { 31019, 0x00001C02 }, /* GL_SELECT */
-   { 31029, 0x00000DF3 }, /* GL_SELECTION_BUFFER_POINTER */
-   { 31057, 0x00000DF4 }, /* GL_SELECTION_BUFFER_SIZE */
-   { 31082, 0x00008012 }, /* GL_SEPARABLE_2D */
-   { 31098, 0x000081FA }, /* GL_SEPARATE_SPECULAR_COLOR */
-   { 31125, 0x000081FA }, /* GL_SEPARATE_SPECULAR_COLOR_EXT */
-   { 31156, 0x0000150F }, /* GL_SET */
-   { 31163, 0x00008B48 }, /* GL_SHADER_OBJECT_ARB */
-   { 31184, 0x00008B88 }, /* GL_SHADER_SOURCE_LENGTH */
-   { 31208, 0x00008B4F }, /* GL_SHADER_TYPE */
-   { 31223, 0x00000B54 }, /* GL_SHADE_MODEL */
-   { 31238, 0x00008B8C }, /* GL_SHADING_LANGUAGE_VERSION */
-   { 31266, 0x000080BF }, /* GL_SHADOW_AMBIENT_SGIX */
-   { 31289, 0x000081FB }, /* GL_SHARED_TEXTURE_PALETTE_EXT */
-   { 31319, 0x00001601 }, /* GL_SHININESS */
-   { 31332, 0x00001402 }, /* GL_SHORT */
-   { 31341, 0x00009119 }, /* GL_SIGNALED */
-   { 31353, 0x00008F9C }, /* GL_SIGNED_NORMALIZED */
-   { 31374, 0x000081F9 }, /* GL_SINGLE_COLOR */
-   { 31390, 0x000081F9 }, /* GL_SINGLE_COLOR_EXT */
-   { 31410, 0x000085CC }, /* GL_SLICE_ACCUM_SUN */
-   { 31429, 0x00008C46 }, /* GL_SLUMINANCE */
-   { 31443, 0x00008C47 }, /* GL_SLUMINANCE8 */
-   { 31458, 0x00008C45 }, /* GL_SLUMINANCE8_ALPHA8 */
-   { 31480, 0x00008C44 }, /* GL_SLUMINANCE_ALPHA */
-   { 31500, 0x00001D01 }, /* GL_SMOOTH */
-   { 31510, 0x00000B23 }, /* GL_SMOOTH_LINE_WIDTH_GRANULARITY */
-   { 31543, 0x00000B22 }, /* GL_SMOOTH_LINE_WIDTH_RANGE */
-   { 31570, 0x00000B13 }, /* GL_SMOOTH_POINT_SIZE_GRANULARITY */
-   { 31603, 0x00000B12 }, /* GL_SMOOTH_POINT_SIZE_RANGE */
-   { 31630, 0x00008588 }, /* GL_SOURCE0_ALPHA */
-   { 31647, 0x00008588 }, /* GL_SOURCE0_ALPHA_ARB */
-   { 31668, 0x00008588 }, /* GL_SOURCE0_ALPHA_EXT */
-   { 31689, 0x00008580 }, /* GL_SOURCE0_RGB */
-   { 31704, 0x00008580 }, /* GL_SOURCE0_RGB_ARB */
-   { 31723, 0x00008580 }, /* GL_SOURCE0_RGB_EXT */
-   { 31742, 0x00008589 }, /* GL_SOURCE1_ALPHA */
-   { 31759, 0x00008589 }, /* GL_SOURCE1_ALPHA_ARB */
-   { 31780, 0x00008589 }, /* GL_SOURCE1_ALPHA_EXT */
-   { 31801, 0x00008581 }, /* GL_SOURCE1_RGB */
-   { 31816, 0x00008581 }, /* GL_SOURCE1_RGB_ARB */
-   { 31835, 0x00008581 }, /* GL_SOURCE1_RGB_EXT */
-   { 31854, 0x0000858A }, /* GL_SOURCE2_ALPHA */
-   { 31871, 0x0000858A }, /* GL_SOURCE2_ALPHA_ARB */
-   { 31892, 0x0000858A }, /* GL_SOURCE2_ALPHA_EXT */
-   { 31913, 0x00008582 }, /* GL_SOURCE2_RGB */
-   { 31928, 0x00008582 }, /* GL_SOURCE2_RGB_ARB */
-   { 31947, 0x00008582 }, /* GL_SOURCE2_RGB_EXT */
-   { 31966, 0x0000858B }, /* GL_SOURCE3_ALPHA_NV */
-   { 31986, 0x00008583 }, /* GL_SOURCE3_RGB_NV */
-   { 32004, 0x00001202 }, /* GL_SPECULAR */
-   { 32016, 0x00002402 }, /* GL_SPHERE_MAP */
-   { 32030, 0x00001206 }, /* GL_SPOT_CUTOFF */
-   { 32045, 0x00001204 }, /* GL_SPOT_DIRECTION */
-   { 32063, 0x00001205 }, /* GL_SPOT_EXPONENT */
-   { 32080, 0x00008588 }, /* GL_SRC0_ALPHA */
-   { 32094, 0x00008580 }, /* GL_SRC0_RGB */
-   { 32106, 0x00008589 }, /* GL_SRC1_ALPHA */
-   { 32120, 0x00008581 }, /* GL_SRC1_RGB */
-   { 32132, 0x0000858A }, /* GL_SRC2_ALPHA */
-   { 32146, 0x00008582 }, /* GL_SRC2_RGB */
-   { 32158, 0x00000302 }, /* GL_SRC_ALPHA */
-   { 32171, 0x00000308 }, /* GL_SRC_ALPHA_SATURATE */
-   { 32193, 0x00000300 }, /* GL_SRC_COLOR */
-   { 32206, 0x00008C40 }, /* GL_SRGB */
-   { 32214, 0x00008C41 }, /* GL_SRGB8 */
-   { 32223, 0x00008C43 }, /* GL_SRGB8_ALPHA8 */
-   { 32239, 0x00008C42 }, /* GL_SRGB_ALPHA */
-   { 32253, 0x00000503 }, /* GL_STACK_OVERFLOW */
-   { 32271, 0x00000504 }, /* GL_STACK_UNDERFLOW */
-   { 32290, 0x000088E6 }, /* GL_STATIC_COPY */
-   { 32305, 0x000088E6 }, /* GL_STATIC_COPY_ARB */
-   { 32324, 0x000088E4 }, /* GL_STATIC_DRAW */
-   { 32339, 0x000088E4 }, /* GL_STATIC_DRAW_ARB */
-   { 32358, 0x000088E5 }, /* GL_STATIC_READ */
-   { 32373, 0x000088E5 }, /* GL_STATIC_READ_ARB */
-   { 32392, 0x00001802 }, /* GL_STENCIL */
-   { 32403, 0x00008D20 }, /* GL_STENCIL_ATTACHMENT */
-   { 32425, 0x00008D20 }, /* GL_STENCIL_ATTACHMENT_EXT */
-   { 32451, 0x00008801 }, /* GL_STENCIL_BACK_FAIL */
-   { 32472, 0x00008801 }, /* GL_STENCIL_BACK_FAIL_ATI */
-   { 32497, 0x00008800 }, /* GL_STENCIL_BACK_FUNC */
-   { 32518, 0x00008800 }, /* GL_STENCIL_BACK_FUNC_ATI */
-   { 32543, 0x00008802 }, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL */
-   { 32575, 0x00008802 }, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI */
-   { 32611, 0x00008803 }, /* GL_STENCIL_BACK_PASS_DEPTH_PASS */
-   { 32643, 0x00008803 }, /* GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI */
-   { 32679, 0x00008CA3 }, /* GL_STENCIL_BACK_REF */
-   { 32699, 0x00008CA4 }, /* GL_STENCIL_BACK_VALUE_MASK */
-   { 32726, 0x00008CA5 }, /* GL_STENCIL_BACK_WRITEMASK */
-   { 32752, 0x00000D57 }, /* GL_STENCIL_BITS */
-   { 32768, 0x00000400 }, /* GL_STENCIL_BUFFER_BIT */
-   { 32790, 0x00000B91 }, /* GL_STENCIL_CLEAR_VALUE */
-   { 32813, 0x00000B94 }, /* GL_STENCIL_FAIL */
-   { 32829, 0x00000B92 }, /* GL_STENCIL_FUNC */
-   { 32845, 0x00001901 }, /* GL_STENCIL_INDEX */
-   { 32862, 0x00008D46 }, /* GL_STENCIL_INDEX1 */
-   { 32880, 0x00008D49 }, /* GL_STENCIL_INDEX16 */
-   { 32899, 0x00008D49 }, /* GL_STENCIL_INDEX16_EXT */
-   { 32922, 0x00008D46 }, /* GL_STENCIL_INDEX1_EXT */
-   { 32944, 0x00008D47 }, /* GL_STENCIL_INDEX4 */
-   { 32962, 0x00008D47 }, /* GL_STENCIL_INDEX4_EXT */
-   { 32984, 0x00008D48 }, /* GL_STENCIL_INDEX8 */
-   { 33002, 0x00008D48 }, /* GL_STENCIL_INDEX8_EXT */
-   { 33024, 0x00008D45 }, /* GL_STENCIL_INDEX_EXT */
-   { 33045, 0x00000B95 }, /* GL_STENCIL_PASS_DEPTH_FAIL */
-   { 33072, 0x00000B96 }, /* GL_STENCIL_PASS_DEPTH_PASS */
-   { 33099, 0x00000B97 }, /* GL_STENCIL_REF */
-   { 33114, 0x00000B90 }, /* GL_STENCIL_TEST */
-   { 33130, 0x00008910 }, /* GL_STENCIL_TEST_TWO_SIDE_EXT */
-   { 33159, 0x00000B93 }, /* GL_STENCIL_VALUE_MASK */
-   { 33181, 0x00000B98 }, /* GL_STENCIL_WRITEMASK */
-   { 33202, 0x00000C33 }, /* GL_STEREO */
-   { 33212, 0x000085BE }, /* GL_STORAGE_CACHED_APPLE */
-   { 33236, 0x000085BD }, /* GL_STORAGE_PRIVATE_APPLE */
-   { 33261, 0x000085BF }, /* GL_STORAGE_SHARED_APPLE */
-   { 33285, 0x000088E2 }, /* GL_STREAM_COPY */
-   { 33300, 0x000088E2 }, /* GL_STREAM_COPY_ARB */
-   { 33319, 0x000088E0 }, /* GL_STREAM_DRAW */
-   { 33334, 0x000088E0 }, /* GL_STREAM_DRAW_ARB */
-   { 33353, 0x000088E1 }, /* GL_STREAM_READ */
-   { 33368, 0x000088E1 }, /* GL_STREAM_READ_ARB */
-   { 33387, 0x00000D50 }, /* GL_SUBPIXEL_BITS */
-   { 33404, 0x000084E7 }, /* GL_SUBTRACT */
-   { 33416, 0x000084E7 }, /* GL_SUBTRACT_ARB */
-   { 33432, 0x00009113 }, /* GL_SYNC_CONDITION */
-   { 33450, 0x00009116 }, /* GL_SYNC_FENCE */
-   { 33464, 0x00009115 }, /* GL_SYNC_FLAGS */
-   { 33478, 0x00000001 }, /* GL_SYNC_FLUSH_COMMANDS_BIT */
-   { 33505, 0x00009117 }, /* GL_SYNC_GPU_COMMANDS_COMPLETE */
-   { 33535, 0x00009114 }, /* GL_SYNC_STATUS */
-   { 33550, 0x00002001 }, /* GL_T */
-   { 33555, 0x00002A2A }, /* GL_T2F_C3F_V3F */
-   { 33570, 0x00002A2C }, /* GL_T2F_C4F_N3F_V3F */
-   { 33589, 0x00002A29 }, /* GL_T2F_C4UB_V3F */
-   { 33605, 0x00002A2B }, /* GL_T2F_N3F_V3F */
-   { 33620, 0x00002A27 }, /* GL_T2F_V3F */
-   { 33631, 0x00002A2D }, /* GL_T4F_C4F_N3F_V4F */
-   { 33650, 0x00002A28 }, /* GL_T4F_V4F */
-   { 33661, 0x00008031 }, /* GL_TABLE_TOO_LARGE_EXT */
-   { 33684, 0x00001702 }, /* GL_TEXTURE */
-   { 33695, 0x000084C0 }, /* GL_TEXTURE0 */
-   { 33707, 0x000084C0 }, /* GL_TEXTURE0_ARB */
-   { 33723, 0x000084C1 }, /* GL_TEXTURE1 */
-   { 33735, 0x000084CA }, /* GL_TEXTURE10 */
-   { 33748, 0x000084CA }, /* GL_TEXTURE10_ARB */
-   { 33765, 0x000084CB }, /* GL_TEXTURE11 */
-   { 33778, 0x000084CB }, /* GL_TEXTURE11_ARB */
-   { 33795, 0x000084CC }, /* GL_TEXTURE12 */
-   { 33808, 0x000084CC }, /* GL_TEXTURE12_ARB */
-   { 33825, 0x000084CD }, /* GL_TEXTURE13 */
-   { 33838, 0x000084CD }, /* GL_TEXTURE13_ARB */
-   { 33855, 0x000084CE }, /* GL_TEXTURE14 */
-   { 33868, 0x000084CE }, /* GL_TEXTURE14_ARB */
-   { 33885, 0x000084CF }, /* GL_TEXTURE15 */
-   { 33898, 0x000084CF }, /* GL_TEXTURE15_ARB */
-   { 33915, 0x000084D0 }, /* GL_TEXTURE16 */
-   { 33928, 0x000084D0 }, /* GL_TEXTURE16_ARB */
-   { 33945, 0x000084D1 }, /* GL_TEXTURE17 */
-   { 33958, 0x000084D1 }, /* GL_TEXTURE17_ARB */
-   { 33975, 0x000084D2 }, /* GL_TEXTURE18 */
-   { 33988, 0x000084D2 }, /* GL_TEXTURE18_ARB */
-   { 34005, 0x000084D3 }, /* GL_TEXTURE19 */
-   { 34018, 0x000084D3 }, /* GL_TEXTURE19_ARB */
-   { 34035, 0x000084C1 }, /* GL_TEXTURE1_ARB */
-   { 34051, 0x000084C2 }, /* GL_TEXTURE2 */
-   { 34063, 0x000084D4 }, /* GL_TEXTURE20 */
-   { 34076, 0x000084D4 }, /* GL_TEXTURE20_ARB */
-   { 34093, 0x000084D5 }, /* GL_TEXTURE21 */
-   { 34106, 0x000084D5 }, /* GL_TEXTURE21_ARB */
-   { 34123, 0x000084D6 }, /* GL_TEXTURE22 */
-   { 34136, 0x000084D6 }, /* GL_TEXTURE22_ARB */
-   { 34153, 0x000084D7 }, /* GL_TEXTURE23 */
-   { 34166, 0x000084D7 }, /* GL_TEXTURE23_ARB */
-   { 34183, 0x000084D8 }, /* GL_TEXTURE24 */
-   { 34196, 0x000084D8 }, /* GL_TEXTURE24_ARB */
-   { 34213, 0x000084D9 }, /* GL_TEXTURE25 */
-   { 34226, 0x000084D9 }, /* GL_TEXTURE25_ARB */
-   { 34243, 0x000084DA }, /* GL_TEXTURE26 */
-   { 34256, 0x000084DA }, /* GL_TEXTURE26_ARB */
-   { 34273, 0x000084DB }, /* GL_TEXTURE27 */
-   { 34286, 0x000084DB }, /* GL_TEXTURE27_ARB */
-   { 34303, 0x000084DC }, /* GL_TEXTURE28 */
-   { 34316, 0x000084DC }, /* GL_TEXTURE28_ARB */
-   { 34333, 0x000084DD }, /* GL_TEXTURE29 */
-   { 34346, 0x000084DD }, /* GL_TEXTURE29_ARB */
-   { 34363, 0x000084C2 }, /* GL_TEXTURE2_ARB */
-   { 34379, 0x000084C3 }, /* GL_TEXTURE3 */
-   { 34391, 0x000084DE }, /* GL_TEXTURE30 */
-   { 34404, 0x000084DE }, /* GL_TEXTURE30_ARB */
-   { 34421, 0x000084DF }, /* GL_TEXTURE31 */
-   { 34434, 0x000084DF }, /* GL_TEXTURE31_ARB */
-   { 34451, 0x000084C3 }, /* GL_TEXTURE3_ARB */
-   { 34467, 0x000084C4 }, /* GL_TEXTURE4 */
-   { 34479, 0x000084C4 }, /* GL_TEXTURE4_ARB */
-   { 34495, 0x000084C5 }, /* GL_TEXTURE5 */
-   { 34507, 0x000084C5 }, /* GL_TEXTURE5_ARB */
-   { 34523, 0x000084C6 }, /* GL_TEXTURE6 */
-   { 34535, 0x000084C6 }, /* GL_TEXTURE6_ARB */
-   { 34551, 0x000084C7 }, /* GL_TEXTURE7 */
-   { 34563, 0x000084C7 }, /* GL_TEXTURE7_ARB */
-   { 34579, 0x000084C8 }, /* GL_TEXTURE8 */
-   { 34591, 0x000084C8 }, /* GL_TEXTURE8_ARB */
-   { 34607, 0x000084C9 }, /* GL_TEXTURE9 */
-   { 34619, 0x000084C9 }, /* GL_TEXTURE9_ARB */
-   { 34635, 0x00000DE0 }, /* GL_TEXTURE_1D */
-   { 34649, 0x00008C18 }, /* GL_TEXTURE_1D_ARRAY_EXT */
-   { 34673, 0x00000DE1 }, /* GL_TEXTURE_2D */
-   { 34687, 0x00008C1A }, /* GL_TEXTURE_2D_ARRAY_EXT */
-   { 34711, 0x0000806F }, /* GL_TEXTURE_3D */
-   { 34725, 0x0000805F }, /* GL_TEXTURE_ALPHA_SIZE */
-   { 34747, 0x0000805F }, /* GL_TEXTURE_ALPHA_SIZE_EXT */
-   { 34773, 0x0000813C }, /* GL_TEXTURE_BASE_LEVEL */
-   { 34795, 0x00008068 }, /* GL_TEXTURE_BINDING_1D */
-   { 34817, 0x00008C1C }, /* GL_TEXTURE_BINDING_1D_ARRAY_EXT */
-   { 34849, 0x00008069 }, /* GL_TEXTURE_BINDING_2D */
-   { 34871, 0x00008C1D }, /* GL_TEXTURE_BINDING_2D_ARRAY_EXT */
-   { 34903, 0x0000806A }, /* GL_TEXTURE_BINDING_3D */
-   { 34925, 0x00008514 }, /* GL_TEXTURE_BINDING_CUBE_MAP */
-   { 34953, 0x00008514 }, /* GL_TEXTURE_BINDING_CUBE_MAP_ARB */
-   { 34985, 0x000084F6 }, /* GL_TEXTURE_BINDING_RECTANGLE_ARB */
-   { 35018, 0x000084F6 }, /* GL_TEXTURE_BINDING_RECTANGLE_NV */
-   { 35050, 0x00040000 }, /* GL_TEXTURE_BIT */
-   { 35065, 0x0000805E }, /* GL_TEXTURE_BLUE_SIZE */
-   { 35086, 0x0000805E }, /* GL_TEXTURE_BLUE_SIZE_EXT */
-   { 35111, 0x00001005 }, /* GL_TEXTURE_BORDER */
-   { 35129, 0x00001004 }, /* GL_TEXTURE_BORDER_COLOR */
-   { 35153, 0x00008171 }, /* GL_TEXTURE_CLIPMAP_CENTER_SGIX */
-   { 35184, 0x00008176 }, /* GL_TEXTURE_CLIPMAP_DEPTH_SGIX */
-   { 35214, 0x00008172 }, /* GL_TEXTURE_CLIPMAP_FRAME_SGIX */
-   { 35244, 0x00008175 }, /* GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX */
-   { 35279, 0x00008173 }, /* GL_TEXTURE_CLIPMAP_OFFSET_SGIX */
-   { 35310, 0x00008174 }, /* GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX */
-   { 35348, 0x000080BC }, /* GL_TEXTURE_COLOR_TABLE_SGI */
-   { 35375, 0x000081EF }, /* GL_TEXTURE_COLOR_WRITEMASK_SGIS */
-   { 35407, 0x000080BF }, /* GL_TEXTURE_COMPARE_FAIL_VALUE_ARB */
-   { 35441, 0x0000884D }, /* GL_TEXTURE_COMPARE_FUNC */
-   { 35465, 0x0000884D }, /* GL_TEXTURE_COMPARE_FUNC_ARB */
-   { 35493, 0x0000884C }, /* GL_TEXTURE_COMPARE_MODE */
-   { 35517, 0x0000884C }, /* GL_TEXTURE_COMPARE_MODE_ARB */
-   { 35545, 0x0000819B }, /* GL_TEXTURE_COMPARE_OPERATOR_SGIX */
-   { 35578, 0x0000819A }, /* GL_TEXTURE_COMPARE_SGIX */
-   { 35602, 0x00001003 }, /* GL_TEXTURE_COMPONENTS */
-   { 35624, 0x000086A1 }, /* GL_TEXTURE_COMPRESSED */
-   { 35646, 0x000086A1 }, /* GL_TEXTURE_COMPRESSED_ARB */
-   { 35672, 0x000086A3 }, /* GL_TEXTURE_COMPRESSED_FORMATS_ARB */
-   { 35706, 0x000086A0 }, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE */
-   { 35739, 0x000086A0 }, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB */
-   { 35776, 0x000084EF }, /* GL_TEXTURE_COMPRESSION_HINT */
-   { 35804, 0x000084EF }, /* GL_TEXTURE_COMPRESSION_HINT_ARB */
-   { 35836, 0x00008078 }, /* GL_TEXTURE_COORD_ARRAY */
-   { 35859, 0x0000889A }, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING */
-   { 35897, 0x0000889A }, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB */
-   { 35939, 0x00008092 }, /* GL_TEXTURE_COORD_ARRAY_POINTER */
-   { 35970, 0x00008088 }, /* GL_TEXTURE_COORD_ARRAY_SIZE */
-   { 35998, 0x0000808A }, /* GL_TEXTURE_COORD_ARRAY_STRIDE */
-   { 36028, 0x00008089 }, /* GL_TEXTURE_COORD_ARRAY_TYPE */
-   { 36056, 0x00008513 }, /* GL_TEXTURE_CUBE_MAP */
-   { 36076, 0x00008513 }, /* GL_TEXTURE_CUBE_MAP_ARB */
-   { 36100, 0x00008516 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X */
-   { 36131, 0x00008516 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB */
-   { 36166, 0x00008518 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y */
-   { 36197, 0x00008518 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB */
-   { 36232, 0x0000851A }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z */
-   { 36263, 0x0000851A }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB */
-   { 36298, 0x00008515 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X */
-   { 36329, 0x00008515 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB */
-   { 36364, 0x00008517 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y */
-   { 36395, 0x00008517 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB */
-   { 36430, 0x00008519 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z */
-   { 36461, 0x00008519 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB */
-   { 36496, 0x000088F4 }, /* GL_TEXTURE_CUBE_MAP_SEAMLESS */
-   { 36525, 0x00008071 }, /* GL_TEXTURE_DEPTH */
-   { 36542, 0x0000884A }, /* GL_TEXTURE_DEPTH_SIZE */
-   { 36564, 0x0000884A }, /* GL_TEXTURE_DEPTH_SIZE_ARB */
-   { 36590, 0x00002300 }, /* GL_TEXTURE_ENV */
-   { 36605, 0x00002201 }, /* GL_TEXTURE_ENV_COLOR */
-   { 36626, 0x00002200 }, /* GL_TEXTURE_ENV_MODE */
-   { 36646, 0x00008500 }, /* GL_TEXTURE_FILTER_CONTROL */
-   { 36672, 0x00002500 }, /* GL_TEXTURE_GEN_MODE */
-   { 36692, 0x00000C63 }, /* GL_TEXTURE_GEN_Q */
-   { 36709, 0x00000C62 }, /* GL_TEXTURE_GEN_R */
-   { 36726, 0x00000C60 }, /* GL_TEXTURE_GEN_S */
-   { 36743, 0x00000C61 }, /* GL_TEXTURE_GEN_T */
-   { 36760, 0x0000819D }, /* GL_TEXTURE_GEQUAL_R_SGIX */
-   { 36785, 0x0000805D }, /* GL_TEXTURE_GREEN_SIZE */
-   { 36807, 0x0000805D }, /* GL_TEXTURE_GREEN_SIZE_EXT */
-   { 36833, 0x00001001 }, /* GL_TEXTURE_HEIGHT */
-   { 36851, 0x000080ED }, /* GL_TEXTURE_INDEX_SIZE_EXT */
-   { 36877, 0x00008061 }, /* GL_TEXTURE_INTENSITY_SIZE */
-   { 36903, 0x00008061 }, /* GL_TEXTURE_INTENSITY_SIZE_EXT */
-   { 36933, 0x00001003 }, /* GL_TEXTURE_INTERNAL_FORMAT */
-   { 36960, 0x0000819C }, /* GL_TEXTURE_LEQUAL_R_SGIX */
-   { 36985, 0x00008501 }, /* GL_TEXTURE_LOD_BIAS */
-   { 37005, 0x00008501 }, /* GL_TEXTURE_LOD_BIAS_EXT */
-   { 37029, 0x00008190 }, /* GL_TEXTURE_LOD_BIAS_R_SGIX */
-   { 37056, 0x0000818E }, /* GL_TEXTURE_LOD_BIAS_S_SGIX */
-   { 37083, 0x0000818F }, /* GL_TEXTURE_LOD_BIAS_T_SGIX */
-   { 37110, 0x00008060 }, /* GL_TEXTURE_LUMINANCE_SIZE */
-   { 37136, 0x00008060 }, /* GL_TEXTURE_LUMINANCE_SIZE_EXT */
-   { 37166, 0x00002800 }, /* GL_TEXTURE_MAG_FILTER */
-   { 37188, 0x00000BA8 }, /* GL_TEXTURE_MATRIX */
-   { 37206, 0x000084FE }, /* GL_TEXTURE_MAX_ANISOTROPY_EXT */
-   { 37236, 0x0000836B }, /* GL_TEXTURE_MAX_CLAMP_R_SGIX */
-   { 37264, 0x00008369 }, /* GL_TEXTURE_MAX_CLAMP_S_SGIX */
-   { 37292, 0x0000836A }, /* GL_TEXTURE_MAX_CLAMP_T_SGIX */
-   { 37320, 0x0000813D }, /* GL_TEXTURE_MAX_LEVEL */
-   { 37341, 0x0000813B }, /* GL_TEXTURE_MAX_LOD */
-   { 37360, 0x00002801 }, /* GL_TEXTURE_MIN_FILTER */
-   { 37382, 0x0000813A }, /* GL_TEXTURE_MIN_LOD */
-   { 37401, 0x00008066 }, /* GL_TEXTURE_PRIORITY */
-   { 37421, 0x000085B7 }, /* GL_TEXTURE_RANGE_LENGTH_APPLE */
-   { 37451, 0x000085B8 }, /* GL_TEXTURE_RANGE_POINTER_APPLE */
-   { 37482, 0x000084F5 }, /* GL_TEXTURE_RECTANGLE_ARB */
-   { 37507, 0x000084F5 }, /* GL_TEXTURE_RECTANGLE_NV */
-   { 37531, 0x0000805C }, /* GL_TEXTURE_RED_SIZE */
-   { 37551, 0x0000805C }, /* GL_TEXTURE_RED_SIZE_EXT */
-   { 37575, 0x00008067 }, /* GL_TEXTURE_RESIDENT */
-   { 37595, 0x00000BA5 }, /* GL_TEXTURE_STACK_DEPTH */
-   { 37618, 0x000088F1 }, /* GL_TEXTURE_STENCIL_SIZE */
-   { 37642, 0x000088F1 }, /* GL_TEXTURE_STENCIL_SIZE_EXT */
-   { 37670, 0x000085BC }, /* GL_TEXTURE_STORAGE_HINT_APPLE */
-   { 37700, 0x00008065 }, /* GL_TEXTURE_TOO_LARGE_EXT */
-   { 37725, 0x0000888F }, /* GL_TEXTURE_UNSIGNED_REMAP_MODE_NV */
-   { 37759, 0x00001000 }, /* GL_TEXTURE_WIDTH */
-   { 37776, 0x00008072 }, /* GL_TEXTURE_WRAP_R */
-   { 37794, 0x00002802 }, /* GL_TEXTURE_WRAP_S */
-   { 37812, 0x00002803 }, /* GL_TEXTURE_WRAP_T */
-   { 37830, 0x0000911B }, /* GL_TIMEOUT_EXPIRED */
-   { 37849, 0x000088BF }, /* GL_TIME_ELAPSED_EXT */
-   { 37869, 0x00008648 }, /* GL_TRACK_MATRIX_NV */
-   { 37888, 0x00008649 }, /* GL_TRACK_MATRIX_TRANSFORM_NV */
-   { 37917, 0x00001000 }, /* GL_TRANSFORM_BIT */
-   { 37934, 0x000084E6 }, /* GL_TRANSPOSE_COLOR_MATRIX */
-   { 37960, 0x000084E6 }, /* GL_TRANSPOSE_COLOR_MATRIX_ARB */
-   { 37990, 0x000088B7 }, /* GL_TRANSPOSE_CURRENT_MATRIX_ARB */
-   { 38022, 0x000084E3 }, /* GL_TRANSPOSE_MODELVIEW_MATRIX */
-   { 38052, 0x000084E3 }, /* GL_TRANSPOSE_MODELVIEW_MATRIX_ARB */
-   { 38086, 0x0000862C }, /* GL_TRANSPOSE_NV */
-   { 38102, 0x000084E4 }, /* GL_TRANSPOSE_PROJECTION_MATRIX */
-   { 38133, 0x000084E4 }, /* GL_TRANSPOSE_PROJECTION_MATRIX_ARB */
-   { 38168, 0x000084E5 }, /* GL_TRANSPOSE_TEXTURE_MATRIX */
-   { 38196, 0x000084E5 }, /* GL_TRANSPOSE_TEXTURE_MATRIX_ARB */
-   { 38228, 0x00000004 }, /* GL_TRIANGLES */
-   { 38241, 0x00000006 }, /* GL_TRIANGLE_FAN */
-   { 38257, 0x00008615 }, /* GL_TRIANGLE_MESH_SUN */
-   { 38278, 0x00000005 }, /* GL_TRIANGLE_STRIP */
-   { 38296, 0x00000001 }, /* GL_TRUE */
-   { 38304, 0x00000CF5 }, /* GL_UNPACK_ALIGNMENT */
-   { 38324, 0x0000806E }, /* GL_UNPACK_IMAGE_HEIGHT */
-   { 38347, 0x00000CF1 }, /* GL_UNPACK_LSB_FIRST */
-   { 38367, 0x00000CF2 }, /* GL_UNPACK_ROW_LENGTH */
-   { 38388, 0x0000806D }, /* GL_UNPACK_SKIP_IMAGES */
-   { 38410, 0x00000CF4 }, /* GL_UNPACK_SKIP_PIXELS */
-   { 38432, 0x00000CF3 }, /* GL_UNPACK_SKIP_ROWS */
-   { 38452, 0x00000CF0 }, /* GL_UNPACK_SWAP_BYTES */
-   { 38473, 0x00009118 }, /* GL_UNSIGNALED */
-   { 38487, 0x00001401 }, /* GL_UNSIGNED_BYTE */
-   { 38504, 0x00008362 }, /* GL_UNSIGNED_BYTE_2_3_3_REV */
-   { 38531, 0x00008032 }, /* GL_UNSIGNED_BYTE_3_3_2 */
-   { 38554, 0x00001405 }, /* GL_UNSIGNED_INT */
-   { 38570, 0x00008036 }, /* GL_UNSIGNED_INT_10_10_10_2 */
-   { 38597, 0x000084FA }, /* GL_UNSIGNED_INT_24_8 */
-   { 38618, 0x000084FA }, /* GL_UNSIGNED_INT_24_8_EXT */
-   { 38643, 0x000084FA }, /* GL_UNSIGNED_INT_24_8_NV */
-   { 38667, 0x00008368 }, /* GL_UNSIGNED_INT_2_10_10_10_REV */
-   { 38698, 0x00008035 }, /* GL_UNSIGNED_INT_8_8_8_8 */
-   { 38722, 0x00008367 }, /* GL_UNSIGNED_INT_8_8_8_8_REV */
-   { 38750, 0x00008C17 }, /* GL_UNSIGNED_NORMALIZED */
-   { 38773, 0x00001403 }, /* GL_UNSIGNED_SHORT */
-   { 38791, 0x00008366 }, /* GL_UNSIGNED_SHORT_1_5_5_5_REV */
-   { 38821, 0x00008033 }, /* GL_UNSIGNED_SHORT_4_4_4_4 */
-   { 38847, 0x00008365 }, /* GL_UNSIGNED_SHORT_4_4_4_4_REV */
-   { 38877, 0x00008034 }, /* GL_UNSIGNED_SHORT_5_5_5_1 */
-   { 38903, 0x00008363 }, /* GL_UNSIGNED_SHORT_5_6_5 */
-   { 38927, 0x00008364 }, /* GL_UNSIGNED_SHORT_5_6_5_REV */
-   { 38955, 0x000085BA }, /* GL_UNSIGNED_SHORT_8_8_APPLE */
-   { 38983, 0x000085BA }, /* GL_UNSIGNED_SHORT_8_8_MESA */
-   { 39010, 0x000085BB }, /* GL_UNSIGNED_SHORT_8_8_REV_APPLE */
-   { 39042, 0x000085BB }, /* GL_UNSIGNED_SHORT_8_8_REV_MESA */
-   { 39073, 0x00008CA2 }, /* GL_UPPER_LEFT */
-   { 39087, 0x00002A20 }, /* GL_V2F */
-   { 39094, 0x00002A21 }, /* GL_V3F */
-   { 39101, 0x00008B83 }, /* GL_VALIDATE_STATUS */
-   { 39120, 0x00001F00 }, /* GL_VENDOR */
-   { 39130, 0x00001F02 }, /* GL_VERSION */
-   { 39141, 0x00008074 }, /* GL_VERTEX_ARRAY */
-   { 39157, 0x000085B5 }, /* GL_VERTEX_ARRAY_BINDING */
-   { 39181, 0x000085B5 }, /* GL_VERTEX_ARRAY_BINDING_APPLE */
-   { 39211, 0x00008896 }, /* GL_VERTEX_ARRAY_BUFFER_BINDING */
-   { 39242, 0x00008896 }, /* GL_VERTEX_ARRAY_BUFFER_BINDING_ARB */
-   { 39277, 0x0000808E }, /* GL_VERTEX_ARRAY_POINTER */
-   { 39301, 0x0000807A }, /* GL_VERTEX_ARRAY_SIZE */
-   { 39322, 0x0000807C }, /* GL_VERTEX_ARRAY_STRIDE */
-   { 39345, 0x0000807B }, /* GL_VERTEX_ARRAY_TYPE */
-   { 39366, 0x00008650 }, /* GL_VERTEX_ATTRIB_ARRAY0_NV */
-   { 39393, 0x0000865A }, /* GL_VERTEX_ATTRIB_ARRAY10_NV */
-   { 39421, 0x0000865B }, /* GL_VERTEX_ATTRIB_ARRAY11_NV */
-   { 39449, 0x0000865C }, /* GL_VERTEX_ATTRIB_ARRAY12_NV */
-   { 39477, 0x0000865D }, /* GL_VERTEX_ATTRIB_ARRAY13_NV */
-   { 39505, 0x0000865E }, /* GL_VERTEX_ATTRIB_ARRAY14_NV */
-   { 39533, 0x0000865F }, /* GL_VERTEX_ATTRIB_ARRAY15_NV */
-   { 39561, 0x00008651 }, /* GL_VERTEX_ATTRIB_ARRAY1_NV */
-   { 39588, 0x00008652 }, /* GL_VERTEX_ATTRIB_ARRAY2_NV */
-   { 39615, 0x00008653 }, /* GL_VERTEX_ATTRIB_ARRAY3_NV */
-   { 39642, 0x00008654 }, /* GL_VERTEX_ATTRIB_ARRAY4_NV */
-   { 39669, 0x00008655 }, /* GL_VERTEX_ATTRIB_ARRAY5_NV */
-   { 39696, 0x00008656 }, /* GL_VERTEX_ATTRIB_ARRAY6_NV */
-   { 39723, 0x00008657 }, /* GL_VERTEX_ATTRIB_ARRAY7_NV */
-   { 39750, 0x00008658 }, /* GL_VERTEX_ATTRIB_ARRAY8_NV */
-   { 39777, 0x00008659 }, /* GL_VERTEX_ATTRIB_ARRAY9_NV */
-   { 39804, 0x0000889F }, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING */
-   { 39842, 0x0000889F }, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB */
-   { 39884, 0x00008622 }, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED */
-   { 39915, 0x00008622 }, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB */
-   { 39950, 0x0000886A }, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED */
-   { 39984, 0x0000886A }, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB */
-   { 40022, 0x00008645 }, /* GL_VERTEX_ATTRIB_ARRAY_POINTER */
-   { 40053, 0x00008645 }, /* GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB */
-   { 40088, 0x00008623 }, /* GL_VERTEX_ATTRIB_ARRAY_SIZE */
-   { 40116, 0x00008623 }, /* GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB */
-   { 40148, 0x00008624 }, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE */
-   { 40178, 0x00008624 }, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB */
-   { 40212, 0x00008625 }, /* GL_VERTEX_ATTRIB_ARRAY_TYPE */
-   { 40240, 0x00008625 }, /* GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB */
-   { 40272, 0x000086A7 }, /* GL_VERTEX_BLEND_ARB */
-   { 40292, 0x00008620 }, /* GL_VERTEX_PROGRAM_ARB */
-   { 40314, 0x0000864A }, /* GL_VERTEX_PROGRAM_BINDING_NV */
-   { 40343, 0x00008620 }, /* GL_VERTEX_PROGRAM_NV */
-   { 40364, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE */
-   { 40393, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE_ARB */
-   { 40426, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE_NV */
-   { 40458, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE */
-   { 40485, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE_ARB */
-   { 40516, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE_NV */
-   { 40546, 0x00008B31 }, /* GL_VERTEX_SHADER */
-   { 40563, 0x00008B31 }, /* GL_VERTEX_SHADER_ARB */
-   { 40584, 0x00008621 }, /* GL_VERTEX_STATE_PROGRAM_NV */
-   { 40611, 0x00000BA2 }, /* GL_VIEWPORT */
-   { 40623, 0x00000800 }, /* GL_VIEWPORT_BIT */
-   { 40639, 0x0000911D }, /* GL_WAIT_FAILED */
-   { 40654, 0x000086AD }, /* GL_WEIGHT_ARRAY_ARB */
-   { 40674, 0x0000889E }, /* GL_WEIGHT_ARRAY_BUFFER_BINDING */
-   { 40705, 0x0000889E }, /* GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB */
-   { 40740, 0x000086AC }, /* GL_WEIGHT_ARRAY_POINTER_ARB */
-   { 40768, 0x000086AB }, /* GL_WEIGHT_ARRAY_SIZE_ARB */
-   { 40793, 0x000086AA }, /* GL_WEIGHT_ARRAY_STRIDE_ARB */
-   { 40820, 0x000086A9 }, /* GL_WEIGHT_ARRAY_TYPE_ARB */
-   { 40845, 0x000086A6 }, /* GL_WEIGHT_SUM_UNITY_ARB */
-   { 40869, 0x000081D4 }, /* GL_WRAP_BORDER_SUN */
-   { 40888, 0x000088B9 }, /* GL_WRITE_ONLY */
-   { 40902, 0x000088B9 }, /* GL_WRITE_ONLY_ARB */
-   { 40920, 0x00001506 }, /* GL_XOR */
-   { 40927, 0x000085B9 }, /* GL_YCBCR_422_APPLE */
-   { 40946, 0x00008757 }, /* GL_YCBCR_MESA */
-   { 40960, 0x00000000 }, /* GL_ZERO */
-   { 40968, 0x00000D16 }, /* GL_ZOOM_X */
-   { 40978, 0x00000D17 }, /* GL_ZOOM_Y */
+   {  1824, 0x000085B3 }, /* GL_BUFFER_OBJECT_APPLE */
+   {  1847, 0x00008A12 }, /* GL_BUFFER_SERIALIZED_MODIFY_APPLE */
+   {  1881, 0x00008764 }, /* GL_BUFFER_SIZE */
+   {  1896, 0x00008764 }, /* GL_BUFFER_SIZE_ARB */
+   {  1915, 0x00008765 }, /* GL_BUFFER_USAGE */
+   {  1931, 0x00008765 }, /* GL_BUFFER_USAGE_ARB */
+   {  1951, 0x0000877B }, /* GL_BUMP_ENVMAP_ATI */
+   {  1970, 0x00008777 }, /* GL_BUMP_NUM_TEX_UNITS_ATI */
+   {  1996, 0x00008775 }, /* GL_BUMP_ROT_MATRIX_ATI */
+   {  2019, 0x00008776 }, /* GL_BUMP_ROT_MATRIX_SIZE_ATI */
+   {  2047, 0x0000877C }, /* GL_BUMP_TARGET_ATI */
+   {  2066, 0x00008778 }, /* GL_BUMP_TEX_UNITS_ATI */
+   {  2088, 0x00001400 }, /* GL_BYTE */
+   {  2096, 0x00002A24 }, /* GL_C3F_V3F */
+   {  2107, 0x00002A26 }, /* GL_C4F_N3F_V3F */
+   {  2122, 0x00002A22 }, /* GL_C4UB_V2F */
+   {  2134, 0x00002A23 }, /* GL_C4UB_V3F */
+   {  2146, 0x00000901 }, /* GL_CCW */
+   {  2153, 0x00002900 }, /* GL_CLAMP */
+   {  2162, 0x0000812D }, /* GL_CLAMP_TO_BORDER */
+   {  2181, 0x0000812D }, /* GL_CLAMP_TO_BORDER_ARB */
+   {  2204, 0x0000812D }, /* GL_CLAMP_TO_BORDER_SGIS */
+   {  2228, 0x0000812F }, /* GL_CLAMP_TO_EDGE */
+   {  2245, 0x0000812F }, /* GL_CLAMP_TO_EDGE_SGIS */
+   {  2267, 0x00001500 }, /* GL_CLEAR */
+   {  2276, 0x000084E1 }, /* GL_CLIENT_ACTIVE_TEXTURE */
+   {  2301, 0x000084E1 }, /* GL_CLIENT_ACTIVE_TEXTURE_ARB */
+   {  2330, 0xFFFFFFFF }, /* GL_CLIENT_ALL_ATTRIB_BITS */
+   {  2356, 0x00000BB1 }, /* GL_CLIENT_ATTRIB_STACK_DEPTH */
+   {  2385, 0x00000001 }, /* GL_CLIENT_PIXEL_STORE_BIT */
+   {  2411, 0x00000002 }, /* GL_CLIENT_VERTEX_ARRAY_BIT */
+   {  2438, 0x00003000 }, /* GL_CLIP_PLANE0 */
+   {  2453, 0x00003001 }, /* GL_CLIP_PLANE1 */
+   {  2468, 0x00003002 }, /* GL_CLIP_PLANE2 */
+   {  2483, 0x00003003 }, /* GL_CLIP_PLANE3 */
+   {  2498, 0x00003004 }, /* GL_CLIP_PLANE4 */
+   {  2513, 0x00003005 }, /* GL_CLIP_PLANE5 */
+   {  2528, 0x000080F0 }, /* GL_CLIP_VOLUME_CLIPPING_HINT_EXT */
+   {  2561, 0x00000A00 }, /* GL_COEFF */
+   {  2570, 0x00001800 }, /* GL_COLOR */
+   {  2579, 0x00008076 }, /* GL_COLOR_ARRAY */
+   {  2594, 0x00008898 }, /* GL_COLOR_ARRAY_BUFFER_BINDING */
+   {  2624, 0x00008898 }, /* GL_COLOR_ARRAY_BUFFER_BINDING_ARB */
+   {  2658, 0x00008090 }, /* GL_COLOR_ARRAY_POINTER */
+   {  2681, 0x00008081 }, /* GL_COLOR_ARRAY_SIZE */
+   {  2701, 0x00008083 }, /* GL_COLOR_ARRAY_STRIDE */
+   {  2723, 0x00008082 }, /* GL_COLOR_ARRAY_TYPE */
+   {  2743, 0x00008CE0 }, /* GL_COLOR_ATTACHMENT0 */
+   {  2764, 0x00008CE0 }, /* GL_COLOR_ATTACHMENT0_EXT */
+   {  2789, 0x00008CE1 }, /* GL_COLOR_ATTACHMENT1 */
+   {  2810, 0x00008CEA }, /* GL_COLOR_ATTACHMENT10 */
+   {  2832, 0x00008CEA }, /* GL_COLOR_ATTACHMENT10_EXT */
+   {  2858, 0x00008CEB }, /* GL_COLOR_ATTACHMENT11 */
+   {  2880, 0x00008CEB }, /* GL_COLOR_ATTACHMENT11_EXT */
+   {  2906, 0x00008CEC }, /* GL_COLOR_ATTACHMENT12 */
+   {  2928, 0x00008CEC }, /* GL_COLOR_ATTACHMENT12_EXT */
+   {  2954, 0x00008CED }, /* GL_COLOR_ATTACHMENT13 */
+   {  2976, 0x00008CED }, /* GL_COLOR_ATTACHMENT13_EXT */
+   {  3002, 0x00008CEE }, /* GL_COLOR_ATTACHMENT14 */
+   {  3024, 0x00008CEE }, /* GL_COLOR_ATTACHMENT14_EXT */
+   {  3050, 0x00008CEF }, /* GL_COLOR_ATTACHMENT15 */
+   {  3072, 0x00008CEF }, /* GL_COLOR_ATTACHMENT15_EXT */
+   {  3098, 0x00008CE1 }, /* GL_COLOR_ATTACHMENT1_EXT */
+   {  3123, 0x00008CE2 }, /* GL_COLOR_ATTACHMENT2 */
+   {  3144, 0x00008CE2 }, /* GL_COLOR_ATTACHMENT2_EXT */
+   {  3169, 0x00008CE3 }, /* GL_COLOR_ATTACHMENT3 */
+   {  3190, 0x00008CE3 }, /* GL_COLOR_ATTACHMENT3_EXT */
+   {  3215, 0x00008CE4 }, /* GL_COLOR_ATTACHMENT4 */
+   {  3236, 0x00008CE4 }, /* GL_COLOR_ATTACHMENT4_EXT */
+   {  3261, 0x00008CE5 }, /* GL_COLOR_ATTACHMENT5 */
+   {  3282, 0x00008CE5 }, /* GL_COLOR_ATTACHMENT5_EXT */
+   {  3307, 0x00008CE6 }, /* GL_COLOR_ATTACHMENT6 */
+   {  3328, 0x00008CE6 }, /* GL_COLOR_ATTACHMENT6_EXT */
+   {  3353, 0x00008CE7 }, /* GL_COLOR_ATTACHMENT7 */
+   {  3374, 0x00008CE7 }, /* GL_COLOR_ATTACHMENT7_EXT */
+   {  3399, 0x00008CE8 }, /* GL_COLOR_ATTACHMENT8 */
+   {  3420, 0x00008CE8 }, /* GL_COLOR_ATTACHMENT8_EXT */
+   {  3445, 0x00008CE9 }, /* GL_COLOR_ATTACHMENT9 */
+   {  3466, 0x00008CE9 }, /* GL_COLOR_ATTACHMENT9_EXT */
+   {  3491, 0x00004000 }, /* GL_COLOR_BUFFER_BIT */
+   {  3511, 0x00000C22 }, /* GL_COLOR_CLEAR_VALUE */
+   {  3532, 0x00001900 }, /* GL_COLOR_INDEX */
+   {  3547, 0x00001603 }, /* GL_COLOR_INDEXES */
+   {  3564, 0x00000BF2 }, /* GL_COLOR_LOGIC_OP */
+   {  3582, 0x00000B57 }, /* GL_COLOR_MATERIAL */
+   {  3600, 0x00000B55 }, /* GL_COLOR_MATERIAL_FACE */
+   {  3623, 0x00000B56 }, /* GL_COLOR_MATERIAL_PARAMETER */
+   {  3651, 0x000080B1 }, /* GL_COLOR_MATRIX */
+   {  3667, 0x000080B1 }, /* GL_COLOR_MATRIX_SGI */
+   {  3687, 0x000080B2 }, /* GL_COLOR_MATRIX_STACK_DEPTH */
+   {  3715, 0x000080B2 }, /* GL_COLOR_MATRIX_STACK_DEPTH_SGI */
+   {  3747, 0x00008458 }, /* GL_COLOR_SUM */
+   {  3760, 0x00008458 }, /* GL_COLOR_SUM_ARB */
+   {  3777, 0x000080D0 }, /* GL_COLOR_TABLE */
+   {  3792, 0x000080DD }, /* GL_COLOR_TABLE_ALPHA_SIZE */
+   {  3818, 0x000080DD }, /* GL_COLOR_TABLE_ALPHA_SIZE_EXT */
+   {  3848, 0x000080DD }, /* GL_COLOR_TABLE_ALPHA_SIZE_SGI */
+   {  3878, 0x000080D7 }, /* GL_COLOR_TABLE_BIAS */
+   {  3898, 0x000080D7 }, /* GL_COLOR_TABLE_BIAS_SGI */
+   {  3922, 0x000080DC }, /* GL_COLOR_TABLE_BLUE_SIZE */
+   {  3947, 0x000080DC }, /* GL_COLOR_TABLE_BLUE_SIZE_EXT */
+   {  3976, 0x000080DC }, /* GL_COLOR_TABLE_BLUE_SIZE_SGI */
+   {  4005, 0x000080D8 }, /* GL_COLOR_TABLE_FORMAT */
+   {  4027, 0x000080D8 }, /* GL_COLOR_TABLE_FORMAT_EXT */
+   {  4053, 0x000080D8 }, /* GL_COLOR_TABLE_FORMAT_SGI */
+   {  4079, 0x000080DB }, /* GL_COLOR_TABLE_GREEN_SIZE */
+   {  4105, 0x000080DB }, /* GL_COLOR_TABLE_GREEN_SIZE_EXT */
+   {  4135, 0x000080DB }, /* GL_COLOR_TABLE_GREEN_SIZE_SGI */
+   {  4165, 0x000080DF }, /* GL_COLOR_TABLE_INTENSITY_SIZE */
+   {  4195, 0x000080DF }, /* GL_COLOR_TABLE_INTENSITY_SIZE_EXT */
+   {  4229, 0x000080DF }, /* GL_COLOR_TABLE_INTENSITY_SIZE_SGI */
+   {  4263, 0x000080DE }, /* GL_COLOR_TABLE_LUMINANCE_SIZE */
+   {  4293, 0x000080DE }, /* GL_COLOR_TABLE_LUMINANCE_SIZE_EXT */
+   {  4327, 0x000080DE }, /* GL_COLOR_TABLE_LUMINANCE_SIZE_SGI */
+   {  4361, 0x000080DA }, /* GL_COLOR_TABLE_RED_SIZE */
+   {  4385, 0x000080DA }, /* GL_COLOR_TABLE_RED_SIZE_EXT */
+   {  4413, 0x000080DA }, /* GL_COLOR_TABLE_RED_SIZE_SGI */
+   {  4441, 0x000080D6 }, /* GL_COLOR_TABLE_SCALE */
+   {  4462, 0x000080D6 }, /* GL_COLOR_TABLE_SCALE_SGI */
+   {  4487, 0x000080D9 }, /* GL_COLOR_TABLE_WIDTH */
+   {  4508, 0x000080D9 }, /* GL_COLOR_TABLE_WIDTH_EXT */
+   {  4533, 0x000080D9 }, /* GL_COLOR_TABLE_WIDTH_SGI */
+   {  4558, 0x00000C23 }, /* GL_COLOR_WRITEMASK */
+   {  4577, 0x00008570 }, /* GL_COMBINE */
+   {  4588, 0x00008503 }, /* GL_COMBINE4 */
+   {  4600, 0x00008572 }, /* GL_COMBINE_ALPHA */
+   {  4617, 0x00008572 }, /* GL_COMBINE_ALPHA_ARB */
+   {  4638, 0x00008572 }, /* GL_COMBINE_ALPHA_EXT */
+   {  4659, 0x00008570 }, /* GL_COMBINE_ARB */
+   {  4674, 0x00008570 }, /* GL_COMBINE_EXT */
+   {  4689, 0x00008571 }, /* GL_COMBINE_RGB */
+   {  4704, 0x00008571 }, /* GL_COMBINE_RGB_ARB */
+   {  4723, 0x00008571 }, /* GL_COMBINE_RGB_EXT */
+   {  4742, 0x0000884E }, /* GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT */
+   {  4778, 0x0000884E }, /* GL_COMPARE_R_TO_TEXTURE */
+   {  4802, 0x0000884E }, /* GL_COMPARE_R_TO_TEXTURE_ARB */
+   {  4830, 0x00001300 }, /* GL_COMPILE */
+   {  4841, 0x00001301 }, /* GL_COMPILE_AND_EXECUTE */
+   {  4864, 0x00008B81 }, /* GL_COMPILE_STATUS */
+   {  4882, 0x000084E9 }, /* GL_COMPRESSED_ALPHA */
+   {  4902, 0x000084E9 }, /* GL_COMPRESSED_ALPHA_ARB */
+   {  4926, 0x000084EC }, /* GL_COMPRESSED_INTENSITY */
+   {  4950, 0x000084EC }, /* GL_COMPRESSED_INTENSITY_ARB */
+   {  4978, 0x000084EA }, /* GL_COMPRESSED_LUMINANCE */
+   {  5002, 0x000084EB }, /* GL_COMPRESSED_LUMINANCE_ALPHA */
+   {  5032, 0x000084EB }, /* GL_COMPRESSED_LUMINANCE_ALPHA_ARB */
+   {  5066, 0x000084EA }, /* GL_COMPRESSED_LUMINANCE_ARB */
+   {  5094, 0x000084ED }, /* GL_COMPRESSED_RGB */
+   {  5112, 0x000084EE }, /* GL_COMPRESSED_RGBA */
+   {  5131, 0x000084EE }, /* GL_COMPRESSED_RGBA_ARB */
+   {  5154, 0x000086B1 }, /* GL_COMPRESSED_RGBA_FXT1_3DFX */
+   {  5183, 0x000083F1 }, /* GL_COMPRESSED_RGBA_S3TC_DXT1_EXT */
+   {  5216, 0x000083F2 }, /* GL_COMPRESSED_RGBA_S3TC_DXT3_EXT */
+   {  5249, 0x000083F3 }, /* GL_COMPRESSED_RGBA_S3TC_DXT5_EXT */
+   {  5282, 0x000084ED }, /* GL_COMPRESSED_RGB_ARB */
+   {  5304, 0x000086B0 }, /* GL_COMPRESSED_RGB_FXT1_3DFX */
+   {  5332, 0x000083F0 }, /* GL_COMPRESSED_RGB_S3TC_DXT1_EXT */
+   {  5364, 0x00008C4A }, /* GL_COMPRESSED_SLUMINANCE */
+   {  5389, 0x00008C4B }, /* GL_COMPRESSED_SLUMINANCE_ALPHA */
+   {  5420, 0x00008C48 }, /* GL_COMPRESSED_SRGB */
+   {  5439, 0x00008C49 }, /* GL_COMPRESSED_SRGB_ALPHA */
+   {  5464, 0x000086A3 }, /* GL_COMPRESSED_TEXTURE_FORMATS */
+   {  5494, 0x0000911C }, /* GL_CONDITION_SATISFIED */
+   {  5517, 0x00008576 }, /* GL_CONSTANT */
+   {  5529, 0x00008003 }, /* GL_CONSTANT_ALPHA */
+   {  5547, 0x00008003 }, /* GL_CONSTANT_ALPHA_EXT */
+   {  5569, 0x00008576 }, /* GL_CONSTANT_ARB */
+   {  5585, 0x00001207 }, /* GL_CONSTANT_ATTENUATION */
+   {  5609, 0x00008151 }, /* GL_CONSTANT_BORDER_HP */
+   {  5631, 0x00008001 }, /* GL_CONSTANT_COLOR */
+   {  5649, 0x00008001 }, /* GL_CONSTANT_COLOR_EXT */
+   {  5671, 0x00008576 }, /* GL_CONSTANT_EXT */
+   {  5687, 0x00008010 }, /* GL_CONVOLUTION_1D */
+   {  5705, 0x00008011 }, /* GL_CONVOLUTION_2D */
+   {  5723, 0x00008154 }, /* GL_CONVOLUTION_BORDER_COLOR */
+   {  5751, 0x00008154 }, /* GL_CONVOLUTION_BORDER_COLOR_HP */
+   {  5782, 0x00008013 }, /* GL_CONVOLUTION_BORDER_MODE */
+   {  5809, 0x00008013 }, /* GL_CONVOLUTION_BORDER_MODE_EXT */
+   {  5840, 0x00008015 }, /* GL_CONVOLUTION_FILTER_BIAS */
+   {  5867, 0x00008015 }, /* GL_CONVOLUTION_FILTER_BIAS_EXT */
+   {  5898, 0x00008014 }, /* GL_CONVOLUTION_FILTER_SCALE */
+   {  5926, 0x00008014 }, /* GL_CONVOLUTION_FILTER_SCALE_EXT */
+   {  5958, 0x00008017 }, /* GL_CONVOLUTION_FORMAT */
+   {  5980, 0x00008017 }, /* GL_CONVOLUTION_FORMAT_EXT */
+   {  6006, 0x00008019 }, /* GL_CONVOLUTION_HEIGHT */
+   {  6028, 0x00008019 }, /* GL_CONVOLUTION_HEIGHT_EXT */
+   {  6054, 0x00008018 }, /* GL_CONVOLUTION_WIDTH */
+   {  6075, 0x00008018 }, /* GL_CONVOLUTION_WIDTH_EXT */
+   {  6100, 0x00008862 }, /* GL_COORD_REPLACE */
+   {  6117, 0x00008862 }, /* GL_COORD_REPLACE_ARB */
+   {  6138, 0x00008862 }, /* GL_COORD_REPLACE_NV */
+   {  6158, 0x00001503 }, /* GL_COPY */
+   {  6166, 0x0000150C }, /* GL_COPY_INVERTED */
+   {  6183, 0x00000706 }, /* GL_COPY_PIXEL_TOKEN */
+   {  6203, 0x00008F36 }, /* GL_COPY_READ_BUFFER */
+   {  6223, 0x00008F37 }, /* GL_COPY_WRITE_BUFFER */
+   {  6244, 0x00000B44 }, /* GL_CULL_FACE */
+   {  6257, 0x00000B45 }, /* GL_CULL_FACE_MODE */
+   {  6275, 0x000081AA }, /* GL_CULL_VERTEX_EXT */
+   {  6294, 0x000081AC }, /* GL_CULL_VERTEX_EYE_POSITION_EXT */
+   {  6326, 0x000081AB }, /* GL_CULL_VERTEX_OBJECT_POSITION_EXT */
+   {  6361, 0x00008626 }, /* GL_CURRENT_ATTRIB_NV */
+   {  6382, 0x00000001 }, /* GL_CURRENT_BIT */
+   {  6397, 0x00000B00 }, /* GL_CURRENT_COLOR */
+   {  6414, 0x00008453 }, /* GL_CURRENT_FOG_COORD */
+   {  6435, 0x00008453 }, /* GL_CURRENT_FOG_COORDINATE */
+   {  6461, 0x00000B01 }, /* GL_CURRENT_INDEX */
+   {  6478, 0x00008641 }, /* GL_CURRENT_MATRIX_ARB */
+   {  6500, 0x00008845 }, /* GL_CURRENT_MATRIX_INDEX_ARB */
+   {  6528, 0x00008641 }, /* GL_CURRENT_MATRIX_NV */
+   {  6549, 0x00008640 }, /* GL_CURRENT_MATRIX_STACK_DEPTH_ARB */
+   {  6583, 0x00008640 }, /* GL_CURRENT_MATRIX_STACK_DEPTH_NV */
+   {  6616, 0x00000B02 }, /* GL_CURRENT_NORMAL */
+   {  6634, 0x00008843 }, /* GL_CURRENT_PALETTE_MATRIX_ARB */
+   {  6664, 0x00008B8D }, /* GL_CURRENT_PROGRAM */
+   {  6683, 0x00008865 }, /* GL_CURRENT_QUERY */
+   {  6700, 0x00008865 }, /* GL_CURRENT_QUERY_ARB */
+   {  6721, 0x00000B04 }, /* GL_CURRENT_RASTER_COLOR */
+   {  6745, 0x00000B09 }, /* GL_CURRENT_RASTER_DISTANCE */
+   {  6772, 0x00000B05 }, /* GL_CURRENT_RASTER_INDEX */
+   {  6796, 0x00000B07 }, /* GL_CURRENT_RASTER_POSITION */
+   {  6823, 0x00000B08 }, /* GL_CURRENT_RASTER_POSITION_VALID */
+   {  6856, 0x0000845F }, /* GL_CURRENT_RASTER_SECONDARY_COLOR */
+   {  6890, 0x00000B06 }, /* GL_CURRENT_RASTER_TEXTURE_COORDS */
+   {  6923, 0x00008459 }, /* GL_CURRENT_SECONDARY_COLOR */
+   {  6950, 0x00000B03 }, /* GL_CURRENT_TEXTURE_COORDS */
+   {  6976, 0x00008626 }, /* GL_CURRENT_VERTEX_ATTRIB */
+   {  7001, 0x00008626 }, /* GL_CURRENT_VERTEX_ATTRIB_ARB */
+   {  7030, 0x000086A8 }, /* GL_CURRENT_WEIGHT_ARB */
+   {  7052, 0x00000900 }, /* GL_CW */
+   {  7058, 0x0000875B }, /* GL_DEBUG_ASSERT_MESA */
+   {  7079, 0x00008759 }, /* GL_DEBUG_OBJECT_MESA */
+   {  7100, 0x0000875A }, /* GL_DEBUG_PRINT_MESA */
+   {  7120, 0x00002101 }, /* GL_DECAL */
+   {  7129, 0x00001E03 }, /* GL_DECR */
+   {  7137, 0x00008508 }, /* GL_DECR_WRAP */
+   {  7150, 0x00008508 }, /* GL_DECR_WRAP_EXT */
+   {  7167, 0x00008B80 }, /* GL_DELETE_STATUS */
+   {  7184, 0x00001801 }, /* GL_DEPTH */
+   {  7193, 0x000088F0 }, /* GL_DEPTH24_STENCIL8 */
+   {  7213, 0x000088F0 }, /* GL_DEPTH24_STENCIL8_EXT */
+   {  7237, 0x00008D00 }, /* GL_DEPTH_ATTACHMENT */
+   {  7257, 0x00008D00 }, /* GL_DEPTH_ATTACHMENT_EXT */
+   {  7281, 0x00000D1F }, /* GL_DEPTH_BIAS */
+   {  7295, 0x00000D56 }, /* GL_DEPTH_BITS */
+   {  7309, 0x00008891 }, /* GL_DEPTH_BOUNDS_EXT */
+   {  7329, 0x00008890 }, /* GL_DEPTH_BOUNDS_TEST_EXT */
+   {  7354, 0x00000100 }, /* GL_DEPTH_BUFFER_BIT */
+   {  7374, 0x0000864F }, /* GL_DEPTH_CLAMP */
+   {  7389, 0x0000864F }, /* GL_DEPTH_CLAMP_NV */
+   {  7407, 0x00000B73 }, /* GL_DEPTH_CLEAR_VALUE */
+   {  7428, 0x00001902 }, /* GL_DEPTH_COMPONENT */
+   {  7447, 0x000081A5 }, /* GL_DEPTH_COMPONENT16 */
+   {  7468, 0x000081A5 }, /* GL_DEPTH_COMPONENT16_ARB */
+   {  7493, 0x000081A5 }, /* GL_DEPTH_COMPONENT16_SGIX */
+   {  7519, 0x000081A6 }, /* GL_DEPTH_COMPONENT24 */
+   {  7540, 0x000081A6 }, /* GL_DEPTH_COMPONENT24_ARB */
+   {  7565, 0x000081A6 }, /* GL_DEPTH_COMPONENT24_SGIX */
+   {  7591, 0x000081A7 }, /* GL_DEPTH_COMPONENT32 */
+   {  7612, 0x000081A7 }, /* GL_DEPTH_COMPONENT32_ARB */
+   {  7637, 0x000081A7 }, /* GL_DEPTH_COMPONENT32_SGIX */
+   {  7663, 0x00000B74 }, /* GL_DEPTH_FUNC */
+   {  7677, 0x00000B70 }, /* GL_DEPTH_RANGE */
+   {  7692, 0x00000D1E }, /* GL_DEPTH_SCALE */
+   {  7707, 0x000084F9 }, /* GL_DEPTH_STENCIL */
+   {  7724, 0x0000821A }, /* GL_DEPTH_STENCIL_ATTACHMENT */
+   {  7752, 0x000084F9 }, /* GL_DEPTH_STENCIL_EXT */
+   {  7773, 0x000084F9 }, /* GL_DEPTH_STENCIL_NV */
+   {  7793, 0x0000886F }, /* GL_DEPTH_STENCIL_TO_BGRA_NV */
+   {  7821, 0x0000886E }, /* GL_DEPTH_STENCIL_TO_RGBA_NV */
+   {  7849, 0x00000B71 }, /* GL_DEPTH_TEST */
+   {  7863, 0x0000884B }, /* GL_DEPTH_TEXTURE_MODE */
+   {  7885, 0x0000884B }, /* GL_DEPTH_TEXTURE_MODE_ARB */
+   {  7911, 0x00000B72 }, /* GL_DEPTH_WRITEMASK */
+   {  7930, 0x00001201 }, /* GL_DIFFUSE */
+   {  7941, 0x00000BD0 }, /* GL_DITHER */
+   {  7951, 0x00000A02 }, /* GL_DOMAIN */
+   {  7961, 0x00001100 }, /* GL_DONT_CARE */
+   {  7974, 0x000086AE }, /* GL_DOT3_RGB */
+   {  7986, 0x000086AF }, /* GL_DOT3_RGBA */
+   {  7999, 0x000086AF }, /* GL_DOT3_RGBA_ARB */
+   {  8016, 0x00008741 }, /* GL_DOT3_RGBA_EXT */
+   {  8033, 0x000086AE }, /* GL_DOT3_RGB_ARB */
+   {  8049, 0x00008740 }, /* GL_DOT3_RGB_EXT */
+   {  8065, 0x0000140A }, /* GL_DOUBLE */
+   {  8075, 0x00000C32 }, /* GL_DOUBLEBUFFER */
+   {  8091, 0x00000C01 }, /* GL_DRAW_BUFFER */
+   {  8106, 0x00008825 }, /* GL_DRAW_BUFFER0 */
+   {  8122, 0x00008825 }, /* GL_DRAW_BUFFER0_ARB */
+   {  8142, 0x00008825 }, /* GL_DRAW_BUFFER0_ATI */
+   {  8162, 0x00008826 }, /* GL_DRAW_BUFFER1 */
+   {  8178, 0x0000882F }, /* GL_DRAW_BUFFER10 */
+   {  8195, 0x0000882F }, /* GL_DRAW_BUFFER10_ARB */
+   {  8216, 0x0000882F }, /* GL_DRAW_BUFFER10_ATI */
+   {  8237, 0x00008830 }, /* GL_DRAW_BUFFER11 */
+   {  8254, 0x00008830 }, /* GL_DRAW_BUFFER11_ARB */
+   {  8275, 0x00008830 }, /* GL_DRAW_BUFFER11_ATI */
+   {  8296, 0x00008831 }, /* GL_DRAW_BUFFER12 */
+   {  8313, 0x00008831 }, /* GL_DRAW_BUFFER12_ARB */
+   {  8334, 0x00008831 }, /* GL_DRAW_BUFFER12_ATI */
+   {  8355, 0x00008832 }, /* GL_DRAW_BUFFER13 */
+   {  8372, 0x00008832 }, /* GL_DRAW_BUFFER13_ARB */
+   {  8393, 0x00008832 }, /* GL_DRAW_BUFFER13_ATI */
+   {  8414, 0x00008833 }, /* GL_DRAW_BUFFER14 */
+   {  8431, 0x00008833 }, /* GL_DRAW_BUFFER14_ARB */
+   {  8452, 0x00008833 }, /* GL_DRAW_BUFFER14_ATI */
+   {  8473, 0x00008834 }, /* GL_DRAW_BUFFER15 */
+   {  8490, 0x00008834 }, /* GL_DRAW_BUFFER15_ARB */
+   {  8511, 0x00008834 }, /* GL_DRAW_BUFFER15_ATI */
+   {  8532, 0x00008826 }, /* GL_DRAW_BUFFER1_ARB */
+   {  8552, 0x00008826 }, /* GL_DRAW_BUFFER1_ATI */
+   {  8572, 0x00008827 }, /* GL_DRAW_BUFFER2 */
+   {  8588, 0x00008827 }, /* GL_DRAW_BUFFER2_ARB */
+   {  8608, 0x00008827 }, /* GL_DRAW_BUFFER2_ATI */
+   {  8628, 0x00008828 }, /* GL_DRAW_BUFFER3 */
+   {  8644, 0x00008828 }, /* GL_DRAW_BUFFER3_ARB */
+   {  8664, 0x00008828 }, /* GL_DRAW_BUFFER3_ATI */
+   {  8684, 0x00008829 }, /* GL_DRAW_BUFFER4 */
+   {  8700, 0x00008829 }, /* GL_DRAW_BUFFER4_ARB */
+   {  8720, 0x00008829 }, /* GL_DRAW_BUFFER4_ATI */
+   {  8740, 0x0000882A }, /* GL_DRAW_BUFFER5 */
+   {  8756, 0x0000882A }, /* GL_DRAW_BUFFER5_ARB */
+   {  8776, 0x0000882A }, /* GL_DRAW_BUFFER5_ATI */
+   {  8796, 0x0000882B }, /* GL_DRAW_BUFFER6 */
+   {  8812, 0x0000882B }, /* GL_DRAW_BUFFER6_ARB */
+   {  8832, 0x0000882B }, /* GL_DRAW_BUFFER6_ATI */
+   {  8852, 0x0000882C }, /* GL_DRAW_BUFFER7 */
+   {  8868, 0x0000882C }, /* GL_DRAW_BUFFER7_ARB */
+   {  8888, 0x0000882C }, /* GL_DRAW_BUFFER7_ATI */
+   {  8908, 0x0000882D }, /* GL_DRAW_BUFFER8 */
+   {  8924, 0x0000882D }, /* GL_DRAW_BUFFER8_ARB */
+   {  8944, 0x0000882D }, /* GL_DRAW_BUFFER8_ATI */
+   {  8964, 0x0000882E }, /* GL_DRAW_BUFFER9 */
+   {  8980, 0x0000882E }, /* GL_DRAW_BUFFER9_ARB */
+   {  9000, 0x0000882E }, /* GL_DRAW_BUFFER9_ATI */
+   {  9020, 0x00008CA9 }, /* GL_DRAW_FRAMEBUFFER */
+   {  9040, 0x00008CA6 }, /* GL_DRAW_FRAMEBUFFER_BINDING */
+   {  9068, 0x00008CA6 }, /* GL_DRAW_FRAMEBUFFER_BINDING_EXT */
+   {  9100, 0x00008CA9 }, /* GL_DRAW_FRAMEBUFFER_EXT */
+   {  9124, 0x00000705 }, /* GL_DRAW_PIXEL_TOKEN */
+   {  9144, 0x00000304 }, /* GL_DST_ALPHA */
+   {  9157, 0x00000306 }, /* GL_DST_COLOR */
+   {  9170, 0x0000877A }, /* GL_DU8DV8_ATI */
+   {  9184, 0x00008779 }, /* GL_DUDV_ATI */
+   {  9196, 0x000088EA }, /* GL_DYNAMIC_COPY */
+   {  9212, 0x000088EA }, /* GL_DYNAMIC_COPY_ARB */
+   {  9232, 0x000088E8 }, /* GL_DYNAMIC_DRAW */
+   {  9248, 0x000088E8 }, /* GL_DYNAMIC_DRAW_ARB */
+   {  9268, 0x000088E9 }, /* GL_DYNAMIC_READ */
+   {  9284, 0x000088E9 }, /* GL_DYNAMIC_READ_ARB */
+   {  9304, 0x00000B43 }, /* GL_EDGE_FLAG */
+   {  9317, 0x00008079 }, /* GL_EDGE_FLAG_ARRAY */
+   {  9336, 0x0000889B }, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING */
+   {  9370, 0x0000889B }, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB */
+   {  9408, 0x00008093 }, /* GL_EDGE_FLAG_ARRAY_POINTER */
+   {  9435, 0x0000808C }, /* GL_EDGE_FLAG_ARRAY_STRIDE */
+   {  9461, 0x00008893 }, /* GL_ELEMENT_ARRAY_BUFFER */
+   {  9485, 0x00008895 }, /* GL_ELEMENT_ARRAY_BUFFER_BINDING */
+   {  9517, 0x00008895 }, /* GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB */
+   {  9553, 0x00001600 }, /* GL_EMISSION */
+   {  9565, 0x00002000 }, /* GL_ENABLE_BIT */
+   {  9579, 0x00000202 }, /* GL_EQUAL */
+   {  9588, 0x00001509 }, /* GL_EQUIV */
+   {  9597, 0x00010000 }, /* GL_EVAL_BIT */
+   {  9609, 0x00000800 }, /* GL_EXP */
+   {  9616, 0x00000801 }, /* GL_EXP2 */
+   {  9624, 0x00001F03 }, /* GL_EXTENSIONS */
+   {  9638, 0x00002400 }, /* GL_EYE_LINEAR */
+   {  9652, 0x00002502 }, /* GL_EYE_PLANE */
+   {  9665, 0x0000855C }, /* GL_EYE_PLANE_ABSOLUTE_NV */
+   {  9690, 0x0000855B }, /* GL_EYE_RADIAL_NV */
+   {  9707, 0x00000000 }, /* GL_FALSE */
+   {  9716, 0x00001101 }, /* GL_FASTEST */
+   {  9727, 0x00001C01 }, /* GL_FEEDBACK */
+   {  9739, 0x00000DF0 }, /* GL_FEEDBACK_BUFFER_POINTER */
+   {  9766, 0x00000DF1 }, /* GL_FEEDBACK_BUFFER_SIZE */
+   {  9790, 0x00000DF2 }, /* GL_FEEDBACK_BUFFER_TYPE */
+   {  9814, 0x00001B02 }, /* GL_FILL */
+   {  9822, 0x00008E4D }, /* GL_FIRST_VERTEX_CONVENTION */
+   {  9849, 0x00008E4D }, /* GL_FIRST_VERTEX_CONVENTION_EXT */
+   {  9880, 0x00001D00 }, /* GL_FLAT */
+   {  9888, 0x00001406 }, /* GL_FLOAT */
+   {  9897, 0x00008B5A }, /* GL_FLOAT_MAT2 */
+   {  9911, 0x00008B5A }, /* GL_FLOAT_MAT2_ARB */
+   {  9929, 0x00008B65 }, /* GL_FLOAT_MAT2x3 */
+   {  9945, 0x00008B66 }, /* GL_FLOAT_MAT2x4 */
+   {  9961, 0x00008B5B }, /* GL_FLOAT_MAT3 */
+   {  9975, 0x00008B5B }, /* GL_FLOAT_MAT3_ARB */
+   {  9993, 0x00008B67 }, /* GL_FLOAT_MAT3x2 */
+   { 10009, 0x00008B68 }, /* GL_FLOAT_MAT3x4 */
+   { 10025, 0x00008B5C }, /* GL_FLOAT_MAT4 */
+   { 10039, 0x00008B5C }, /* GL_FLOAT_MAT4_ARB */
+   { 10057, 0x00008B69 }, /* GL_FLOAT_MAT4x2 */
+   { 10073, 0x00008B6A }, /* GL_FLOAT_MAT4x3 */
+   { 10089, 0x00008B50 }, /* GL_FLOAT_VEC2 */
+   { 10103, 0x00008B50 }, /* GL_FLOAT_VEC2_ARB */
+   { 10121, 0x00008B51 }, /* GL_FLOAT_VEC3 */
+   { 10135, 0x00008B51 }, /* GL_FLOAT_VEC3_ARB */
+   { 10153, 0x00008B52 }, /* GL_FLOAT_VEC4 */
+   { 10167, 0x00008B52 }, /* GL_FLOAT_VEC4_ARB */
+   { 10185, 0x00000B60 }, /* GL_FOG */
+   { 10192, 0x00000080 }, /* GL_FOG_BIT */
+   { 10203, 0x00000B66 }, /* GL_FOG_COLOR */
+   { 10216, 0x00008451 }, /* GL_FOG_COORD */
+   { 10229, 0x00008451 }, /* GL_FOG_COORDINATE */
+   { 10247, 0x00008457 }, /* GL_FOG_COORDINATE_ARRAY */
+   { 10271, 0x0000889D }, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING */
+   { 10310, 0x0000889D }, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB */
+   { 10353, 0x00008456 }, /* GL_FOG_COORDINATE_ARRAY_POINTER */
+   { 10385, 0x00008455 }, /* GL_FOG_COORDINATE_ARRAY_STRIDE */
+   { 10416, 0x00008454 }, /* GL_FOG_COORDINATE_ARRAY_TYPE */
+   { 10445, 0x00008450 }, /* GL_FOG_COORDINATE_SOURCE */
+   { 10470, 0x00008457 }, /* GL_FOG_COORD_ARRAY */
+   { 10489, 0x0000889D }, /* GL_FOG_COORD_ARRAY_BUFFER_BINDING */
+   { 10523, 0x00008456 }, /* GL_FOG_COORD_ARRAY_POINTER */
+   { 10550, 0x00008455 }, /* GL_FOG_COORD_ARRAY_STRIDE */
+   { 10576, 0x00008454 }, /* GL_FOG_COORD_ARRAY_TYPE */
+   { 10600, 0x00008450 }, /* GL_FOG_COORD_SRC */
+   { 10617, 0x00000B62 }, /* GL_FOG_DENSITY */
+   { 10632, 0x0000855A }, /* GL_FOG_DISTANCE_MODE_NV */
+   { 10656, 0x00000B64 }, /* GL_FOG_END */
+   { 10667, 0x00000C54 }, /* GL_FOG_HINT */
+   { 10679, 0x00000B61 }, /* GL_FOG_INDEX */
+   { 10692, 0x00000B65 }, /* GL_FOG_MODE */
+   { 10704, 0x00008198 }, /* GL_FOG_OFFSET_SGIX */
+   { 10723, 0x00008199 }, /* GL_FOG_OFFSET_VALUE_SGIX */
+   { 10748, 0x00000B63 }, /* GL_FOG_START */
+   { 10761, 0x00008452 }, /* GL_FRAGMENT_DEPTH */
+   { 10779, 0x00008804 }, /* GL_FRAGMENT_PROGRAM_ARB */
+   { 10803, 0x00008B30 }, /* GL_FRAGMENT_SHADER */
+   { 10822, 0x00008B30 }, /* GL_FRAGMENT_SHADER_ARB */
+   { 10845, 0x00008B8B }, /* GL_FRAGMENT_SHADER_DERIVATIVE_HINT */
+   { 10880, 0x00008D40 }, /* GL_FRAMEBUFFER */
+   { 10895, 0x00008215 }, /* GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE */
+   { 10932, 0x00008214 }, /* GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE */
+   { 10968, 0x00008210 }, /* GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING */
+   { 11009, 0x00008211 }, /* GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE */
+   { 11050, 0x00008216 }, /* GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE */
+   { 11087, 0x00008213 }, /* GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE */
+   { 11124, 0x00008CD1 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME */
+   { 11162, 0x00008CD1 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT */
+   { 11204, 0x00008CD0 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE */
+   { 11242, 0x00008CD0 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT */
+   { 11284, 0x00008212 }, /* GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE */
+   { 11319, 0x00008217 }, /* GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE */
+   { 11358, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT */
+   { 11407, 0x00008CD3 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE */
+   { 11455, 0x00008CD3 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT */
+   { 11507, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */
+   { 11547, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT */
+   { 11591, 0x00008CD2 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL */
+   { 11631, 0x00008CD2 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT */
+   { 11675, 0x00008CA6 }, /* GL_FRAMEBUFFER_BINDING */
+   { 11698, 0x00008CA6 }, /* GL_FRAMEBUFFER_BINDING_EXT */
+   { 11725, 0x00008CD5 }, /* GL_FRAMEBUFFER_COMPLETE */
+   { 11749, 0x00008CD5 }, /* GL_FRAMEBUFFER_COMPLETE_EXT */
+   { 11777, 0x00008218 }, /* GL_FRAMEBUFFER_DEFAULT */
+   { 11800, 0x00008D40 }, /* GL_FRAMEBUFFER_EXT */
+   { 11819, 0x00008CD6 }, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT */
+   { 11856, 0x00008CD6 }, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT */
+   { 11897, 0x00008CD9 }, /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT */
+   { 11938, 0x00008CDB }, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER */
+   { 11976, 0x00008CDB }, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT */
+   { 12018, 0x00008CD8 }, /* GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT */
+   { 12069, 0x00008CDA }, /* GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT */
+   { 12107, 0x00008CD7 }, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT */
+   { 12152, 0x00008CD7 }, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT */
+   { 12201, 0x00008D56 }, /* GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE */
+   { 12239, 0x00008D56 }, /* GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT */
+   { 12281, 0x00008CDC }, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER */
+   { 12319, 0x00008CDC }, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT */
+   { 12361, 0x00008CDE }, /* GL_FRAMEBUFFER_STATUS_ERROR_EXT */
+   { 12393, 0x00008219 }, /* GL_FRAMEBUFFER_UNDEFINED */
+   { 12418, 0x00008CDD }, /* GL_FRAMEBUFFER_UNSUPPORTED */
+   { 12445, 0x00008CDD }, /* GL_FRAMEBUFFER_UNSUPPORTED_EXT */
+   { 12476, 0x00000404 }, /* GL_FRONT */
+   { 12485, 0x00000408 }, /* GL_FRONT_AND_BACK */
+   { 12503, 0x00000B46 }, /* GL_FRONT_FACE */
+   { 12517, 0x00000400 }, /* GL_FRONT_LEFT */
+   { 12531, 0x00000401 }, /* GL_FRONT_RIGHT */
+   { 12546, 0x00008006 }, /* GL_FUNC_ADD */
+   { 12558, 0x00008006 }, /* GL_FUNC_ADD_EXT */
+   { 12574, 0x0000800B }, /* GL_FUNC_REVERSE_SUBTRACT */
+   { 12599, 0x0000800B }, /* GL_FUNC_REVERSE_SUBTRACT_EXT */
+   { 12628, 0x0000800A }, /* GL_FUNC_SUBTRACT */
+   { 12645, 0x0000800A }, /* GL_FUNC_SUBTRACT_EXT */
+   { 12666, 0x00008191 }, /* GL_GENERATE_MIPMAP */
+   { 12685, 0x00008192 }, /* GL_GENERATE_MIPMAP_HINT */
+   { 12709, 0x00008192 }, /* GL_GENERATE_MIPMAP_HINT_SGIS */
+   { 12738, 0x00008191 }, /* GL_GENERATE_MIPMAP_SGIS */
+   { 12762, 0x00000206 }, /* GL_GEQUAL */
+   { 12772, 0x00000204 }, /* GL_GREATER */
+   { 12783, 0x00001904 }, /* GL_GREEN */
+   { 12792, 0x00000D19 }, /* GL_GREEN_BIAS */
+   { 12806, 0x00000D53 }, /* GL_GREEN_BITS */
+   { 12820, 0x00000D18 }, /* GL_GREEN_SCALE */
+   { 12835, 0x0000140B }, /* GL_HALF_FLOAT */
+   { 12849, 0x00008000 }, /* GL_HINT_BIT */
+   { 12861, 0x00008024 }, /* GL_HISTOGRAM */
+   { 12874, 0x0000802B }, /* GL_HISTOGRAM_ALPHA_SIZE */
+   { 12898, 0x0000802B }, /* GL_HISTOGRAM_ALPHA_SIZE_EXT */
+   { 12926, 0x0000802A }, /* GL_HISTOGRAM_BLUE_SIZE */
+   { 12949, 0x0000802A }, /* GL_HISTOGRAM_BLUE_SIZE_EXT */
+   { 12976, 0x00008024 }, /* GL_HISTOGRAM_EXT */
+   { 12993, 0x00008027 }, /* GL_HISTOGRAM_FORMAT */
+   { 13013, 0x00008027 }, /* GL_HISTOGRAM_FORMAT_EXT */
+   { 13037, 0x00008029 }, /* GL_HISTOGRAM_GREEN_SIZE */
+   { 13061, 0x00008029 }, /* GL_HISTOGRAM_GREEN_SIZE_EXT */
+   { 13089, 0x0000802C }, /* GL_HISTOGRAM_LUMINANCE_SIZE */
+   { 13117, 0x0000802C }, /* GL_HISTOGRAM_LUMINANCE_SIZE_EXT */
+   { 13149, 0x00008028 }, /* GL_HISTOGRAM_RED_SIZE */
+   { 13171, 0x00008028 }, /* GL_HISTOGRAM_RED_SIZE_EXT */
+   { 13197, 0x0000802D }, /* GL_HISTOGRAM_SINK */
+   { 13215, 0x0000802D }, /* GL_HISTOGRAM_SINK_EXT */
+   { 13237, 0x00008026 }, /* GL_HISTOGRAM_WIDTH */
+   { 13256, 0x00008026 }, /* GL_HISTOGRAM_WIDTH_EXT */
+   { 13279, 0x0000862A }, /* GL_IDENTITY_NV */
+   { 13294, 0x00008150 }, /* GL_IGNORE_BORDER_HP */
+   { 13314, 0x00008B9B }, /* GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES */
+   { 13354, 0x00008B9A }, /* GL_IMPLEMENTATION_COLOR_READ_TYPE_OES */
+   { 13392, 0x00001E02 }, /* GL_INCR */
+   { 13400, 0x00008507 }, /* GL_INCR_WRAP */
+   { 13413, 0x00008507 }, /* GL_INCR_WRAP_EXT */
+   { 13430, 0x00008222 }, /* GL_INDEX */
+   { 13439, 0x00008077 }, /* GL_INDEX_ARRAY */
+   { 13454, 0x00008899 }, /* GL_INDEX_ARRAY_BUFFER_BINDING */
+   { 13484, 0x00008899 }, /* GL_INDEX_ARRAY_BUFFER_BINDING_ARB */
+   { 13518, 0x00008091 }, /* GL_INDEX_ARRAY_POINTER */
+   { 13541, 0x00008086 }, /* GL_INDEX_ARRAY_STRIDE */
+   { 13563, 0x00008085 }, /* GL_INDEX_ARRAY_TYPE */
+   { 13583, 0x00000D51 }, /* GL_INDEX_BITS */
+   { 13597, 0x00000C20 }, /* GL_INDEX_CLEAR_VALUE */
+   { 13618, 0x00000BF1 }, /* GL_INDEX_LOGIC_OP */
+   { 13636, 0x00000C30 }, /* GL_INDEX_MODE */
+   { 13650, 0x00000D13 }, /* GL_INDEX_OFFSET */
+   { 13666, 0x00000D12 }, /* GL_INDEX_SHIFT */
+   { 13681, 0x00000C21 }, /* GL_INDEX_WRITEMASK */
+   { 13700, 0x00008B84 }, /* GL_INFO_LOG_LENGTH */
+   { 13719, 0x00001404 }, /* GL_INT */
+   { 13726, 0x00008049 }, /* GL_INTENSITY */
+   { 13739, 0x0000804C }, /* GL_INTENSITY12 */
+   { 13754, 0x0000804C }, /* GL_INTENSITY12_EXT */
+   { 13773, 0x0000804D }, /* GL_INTENSITY16 */
+   { 13788, 0x0000804D }, /* GL_INTENSITY16_EXT */
+   { 13807, 0x0000804A }, /* GL_INTENSITY4 */
+   { 13821, 0x0000804A }, /* GL_INTENSITY4_EXT */
+   { 13839, 0x0000804B }, /* GL_INTENSITY8 */
+   { 13853, 0x0000804B }, /* GL_INTENSITY8_EXT */
+   { 13871, 0x00008049 }, /* GL_INTENSITY_EXT */
+   { 13888, 0x00008575 }, /* GL_INTERPOLATE */
+   { 13903, 0x00008575 }, /* GL_INTERPOLATE_ARB */
+   { 13922, 0x00008575 }, /* GL_INTERPOLATE_EXT */
+   { 13941, 0x00008B53 }, /* GL_INT_VEC2 */
+   { 13953, 0x00008B53 }, /* GL_INT_VEC2_ARB */
+   { 13969, 0x00008B54 }, /* GL_INT_VEC3 */
+   { 13981, 0x00008B54 }, /* GL_INT_VEC3_ARB */
+   { 13997, 0x00008B55 }, /* GL_INT_VEC4 */
+   { 14009, 0x00008B55 }, /* GL_INT_VEC4_ARB */
+   { 14025, 0x00000500 }, /* GL_INVALID_ENUM */
+   { 14041, 0x00000506 }, /* GL_INVALID_FRAMEBUFFER_OPERATION */
+   { 14074, 0x00000506 }, /* GL_INVALID_FRAMEBUFFER_OPERATION_EXT */
+   { 14111, 0x00000502 }, /* GL_INVALID_OPERATION */
+   { 14132, 0x00000501 }, /* GL_INVALID_VALUE */
+   { 14149, 0x0000862B }, /* GL_INVERSE_NV */
+   { 14163, 0x0000862D }, /* GL_INVERSE_TRANSPOSE_NV */
+   { 14187, 0x0000150A }, /* GL_INVERT */
+   { 14197, 0x00001E00 }, /* GL_KEEP */
+   { 14205, 0x00008E4E }, /* GL_LAST_VERTEX_CONVENTION */
+   { 14231, 0x00008E4E }, /* GL_LAST_VERTEX_CONVENTION_EXT */
+   { 14261, 0x00000406 }, /* GL_LEFT */
+   { 14269, 0x00000203 }, /* GL_LEQUAL */
+   { 14279, 0x00000201 }, /* GL_LESS */
+   { 14287, 0x00004000 }, /* GL_LIGHT0 */
+   { 14297, 0x00004001 }, /* GL_LIGHT1 */
+   { 14307, 0x00004002 }, /* GL_LIGHT2 */
+   { 14317, 0x00004003 }, /* GL_LIGHT3 */
+   { 14327, 0x00004004 }, /* GL_LIGHT4 */
+   { 14337, 0x00004005 }, /* GL_LIGHT5 */
+   { 14347, 0x00004006 }, /* GL_LIGHT6 */
+   { 14357, 0x00004007 }, /* GL_LIGHT7 */
+   { 14367, 0x00000B50 }, /* GL_LIGHTING */
+   { 14379, 0x00000040 }, /* GL_LIGHTING_BIT */
+   { 14395, 0x00000B53 }, /* GL_LIGHT_MODEL_AMBIENT */
+   { 14418, 0x000081F8 }, /* GL_LIGHT_MODEL_COLOR_CONTROL */
+   { 14447, 0x000081F8 }, /* GL_LIGHT_MODEL_COLOR_CONTROL_EXT */
+   { 14480, 0x00000B51 }, /* GL_LIGHT_MODEL_LOCAL_VIEWER */
+   { 14508, 0x00000B52 }, /* GL_LIGHT_MODEL_TWO_SIDE */
+   { 14532, 0x00001B01 }, /* GL_LINE */
+   { 14540, 0x00002601 }, /* GL_LINEAR */
+   { 14550, 0x00001208 }, /* GL_LINEAR_ATTENUATION */
+   { 14572, 0x00008170 }, /* GL_LINEAR_CLIPMAP_LINEAR_SGIX */
+   { 14602, 0x0000844F }, /* GL_LINEAR_CLIPMAP_NEAREST_SGIX */
+   { 14633, 0x00002703 }, /* GL_LINEAR_MIPMAP_LINEAR */
+   { 14657, 0x00002701 }, /* GL_LINEAR_MIPMAP_NEAREST */
+   { 14682, 0x00000001 }, /* GL_LINES */
+   { 14691, 0x00000004 }, /* GL_LINE_BIT */
+   { 14703, 0x00000002 }, /* GL_LINE_LOOP */
+   { 14716, 0x00000707 }, /* GL_LINE_RESET_TOKEN */
+   { 14736, 0x00000B20 }, /* GL_LINE_SMOOTH */
+   { 14751, 0x00000C52 }, /* GL_LINE_SMOOTH_HINT */
+   { 14771, 0x00000B24 }, /* GL_LINE_STIPPLE */
+   { 14787, 0x00000B25 }, /* GL_LINE_STIPPLE_PATTERN */
+   { 14811, 0x00000B26 }, /* GL_LINE_STIPPLE_REPEAT */
+   { 14834, 0x00000003 }, /* GL_LINE_STRIP */
+   { 14848, 0x00000702 }, /* GL_LINE_TOKEN */
+   { 14862, 0x00000B21 }, /* GL_LINE_WIDTH */
+   { 14876, 0x00000B23 }, /* GL_LINE_WIDTH_GRANULARITY */
+   { 14902, 0x00000B22 }, /* GL_LINE_WIDTH_RANGE */
+   { 14922, 0x00008B82 }, /* GL_LINK_STATUS */
+   { 14937, 0x00000B32 }, /* GL_LIST_BASE */
+   { 14950, 0x00020000 }, /* GL_LIST_BIT */
+   { 14962, 0x00000B33 }, /* GL_LIST_INDEX */
+   { 14976, 0x00000B30 }, /* GL_LIST_MODE */
+   { 14989, 0x00000101 }, /* GL_LOAD */
+   { 14997, 0x00000BF1 }, /* GL_LOGIC_OP */
+   { 15009, 0x00000BF0 }, /* GL_LOGIC_OP_MODE */
+   { 15026, 0x00008CA1 }, /* GL_LOWER_LEFT */
+   { 15040, 0x00001909 }, /* GL_LUMINANCE */
+   { 15053, 0x00008041 }, /* GL_LUMINANCE12 */
+   { 15068, 0x00008047 }, /* GL_LUMINANCE12_ALPHA12 */
+   { 15091, 0x00008047 }, /* GL_LUMINANCE12_ALPHA12_EXT */
+   { 15118, 0x00008046 }, /* GL_LUMINANCE12_ALPHA4 */
+   { 15140, 0x00008046 }, /* GL_LUMINANCE12_ALPHA4_EXT */
+   { 15166, 0x00008041 }, /* GL_LUMINANCE12_EXT */
+   { 15185, 0x00008042 }, /* GL_LUMINANCE16 */
+   { 15200, 0x00008048 }, /* GL_LUMINANCE16_ALPHA16 */
+   { 15223, 0x00008048 }, /* GL_LUMINANCE16_ALPHA16_EXT */
+   { 15250, 0x00008042 }, /* GL_LUMINANCE16_EXT */
+   { 15269, 0x0000803F }, /* GL_LUMINANCE4 */
+   { 15283, 0x00008043 }, /* GL_LUMINANCE4_ALPHA4 */
+   { 15304, 0x00008043 }, /* GL_LUMINANCE4_ALPHA4_EXT */
+   { 15329, 0x0000803F }, /* GL_LUMINANCE4_EXT */
+   { 15347, 0x00008044 }, /* GL_LUMINANCE6_ALPHA2 */
+   { 15368, 0x00008044 }, /* GL_LUMINANCE6_ALPHA2_EXT */
+   { 15393, 0x00008040 }, /* GL_LUMINANCE8 */
+   { 15407, 0x00008045 }, /* GL_LUMINANCE8_ALPHA8 */
+   { 15428, 0x00008045 }, /* GL_LUMINANCE8_ALPHA8_EXT */
+   { 15453, 0x00008040 }, /* GL_LUMINANCE8_EXT */
+   { 15471, 0x0000190A }, /* GL_LUMINANCE_ALPHA */
+   { 15490, 0x00000D90 }, /* GL_MAP1_COLOR_4 */
+   { 15506, 0x00000DD0 }, /* GL_MAP1_GRID_DOMAIN */
+   { 15526, 0x00000DD1 }, /* GL_MAP1_GRID_SEGMENTS */
+   { 15548, 0x00000D91 }, /* GL_MAP1_INDEX */
+   { 15562, 0x00000D92 }, /* GL_MAP1_NORMAL */
+   { 15577, 0x00000D93 }, /* GL_MAP1_TEXTURE_COORD_1 */
+   { 15601, 0x00000D94 }, /* GL_MAP1_TEXTURE_COORD_2 */
+   { 15625, 0x00000D95 }, /* GL_MAP1_TEXTURE_COORD_3 */
+   { 15649, 0x00000D96 }, /* GL_MAP1_TEXTURE_COORD_4 */
+   { 15673, 0x00000D97 }, /* GL_MAP1_VERTEX_3 */
+   { 15690, 0x00000D98 }, /* GL_MAP1_VERTEX_4 */
+   { 15707, 0x00008660 }, /* GL_MAP1_VERTEX_ATTRIB0_4_NV */
+   { 15735, 0x0000866A }, /* GL_MAP1_VERTEX_ATTRIB10_4_NV */
+   { 15764, 0x0000866B }, /* GL_MAP1_VERTEX_ATTRIB11_4_NV */
+   { 15793, 0x0000866C }, /* GL_MAP1_VERTEX_ATTRIB12_4_NV */
+   { 15822, 0x0000866D }, /* GL_MAP1_VERTEX_ATTRIB13_4_NV */
+   { 15851, 0x0000866E }, /* GL_MAP1_VERTEX_ATTRIB14_4_NV */
+   { 15880, 0x0000866F }, /* GL_MAP1_VERTEX_ATTRIB15_4_NV */
+   { 15909, 0x00008661 }, /* GL_MAP1_VERTEX_ATTRIB1_4_NV */
+   { 15937, 0x00008662 }, /* GL_MAP1_VERTEX_ATTRIB2_4_NV */
+   { 15965, 0x00008663 }, /* GL_MAP1_VERTEX_ATTRIB3_4_NV */
+   { 15993, 0x00008664 }, /* GL_MAP1_VERTEX_ATTRIB4_4_NV */
+   { 16021, 0x00008665 }, /* GL_MAP1_VERTEX_ATTRIB5_4_NV */
+   { 16049, 0x00008666 }, /* GL_MAP1_VERTEX_ATTRIB6_4_NV */
+   { 16077, 0x00008667 }, /* GL_MAP1_VERTEX_ATTRIB7_4_NV */
+   { 16105, 0x00008668 }, /* GL_MAP1_VERTEX_ATTRIB8_4_NV */
+   { 16133, 0x00008669 }, /* GL_MAP1_VERTEX_ATTRIB9_4_NV */
+   { 16161, 0x00000DB0 }, /* GL_MAP2_COLOR_4 */
+   { 16177, 0x00000DD2 }, /* GL_MAP2_GRID_DOMAIN */
+   { 16197, 0x00000DD3 }, /* GL_MAP2_GRID_SEGMENTS */
+   { 16219, 0x00000DB1 }, /* GL_MAP2_INDEX */
+   { 16233, 0x00000DB2 }, /* GL_MAP2_NORMAL */
+   { 16248, 0x00000DB3 }, /* GL_MAP2_TEXTURE_COORD_1 */
+   { 16272, 0x00000DB4 }, /* GL_MAP2_TEXTURE_COORD_2 */
+   { 16296, 0x00000DB5 }, /* GL_MAP2_TEXTURE_COORD_3 */
+   { 16320, 0x00000DB6 }, /* GL_MAP2_TEXTURE_COORD_4 */
+   { 16344, 0x00000DB7 }, /* GL_MAP2_VERTEX_3 */
+   { 16361, 0x00000DB8 }, /* GL_MAP2_VERTEX_4 */
+   { 16378, 0x00008670 }, /* GL_MAP2_VERTEX_ATTRIB0_4_NV */
+   { 16406, 0x0000867A }, /* GL_MAP2_VERTEX_ATTRIB10_4_NV */
+   { 16435, 0x0000867B }, /* GL_MAP2_VERTEX_ATTRIB11_4_NV */
+   { 16464, 0x0000867C }, /* GL_MAP2_VERTEX_ATTRIB12_4_NV */
+   { 16493, 0x0000867D }, /* GL_MAP2_VERTEX_ATTRIB13_4_NV */
+   { 16522, 0x0000867E }, /* GL_MAP2_VERTEX_ATTRIB14_4_NV */
+   { 16551, 0x0000867F }, /* GL_MAP2_VERTEX_ATTRIB15_4_NV */
+   { 16580, 0x00008671 }, /* GL_MAP2_VERTEX_ATTRIB1_4_NV */
+   { 16608, 0x00008672 }, /* GL_MAP2_VERTEX_ATTRIB2_4_NV */
+   { 16636, 0x00008673 }, /* GL_MAP2_VERTEX_ATTRIB3_4_NV */
+   { 16664, 0x00008674 }, /* GL_MAP2_VERTEX_ATTRIB4_4_NV */
+   { 16692, 0x00008675 }, /* GL_MAP2_VERTEX_ATTRIB5_4_NV */
+   { 16720, 0x00008676 }, /* GL_MAP2_VERTEX_ATTRIB6_4_NV */
+   { 16748, 0x00008677 }, /* GL_MAP2_VERTEX_ATTRIB7_4_NV */
+   { 16776, 0x00008678 }, /* GL_MAP2_VERTEX_ATTRIB8_4_NV */
+   { 16804, 0x00008679 }, /* GL_MAP2_VERTEX_ATTRIB9_4_NV */
+   { 16832, 0x00000D10 }, /* GL_MAP_COLOR */
+   { 16845, 0x00000010 }, /* GL_MAP_FLUSH_EXPLICIT_BIT */
+   { 16871, 0x00000008 }, /* GL_MAP_INVALIDATE_BUFFER_BIT */
+   { 16900, 0x00000004 }, /* GL_MAP_INVALIDATE_RANGE_BIT */
+   { 16928, 0x00000001 }, /* GL_MAP_READ_BIT */
+   { 16944, 0x00000D11 }, /* GL_MAP_STENCIL */
+   { 16959, 0x00000020 }, /* GL_MAP_UNSYNCHRONIZED_BIT */
+   { 16985, 0x00000002 }, /* GL_MAP_WRITE_BIT */
+   { 17002, 0x000088C0 }, /* GL_MATRIX0_ARB */
+   { 17017, 0x00008630 }, /* GL_MATRIX0_NV */
+   { 17031, 0x000088CA }, /* GL_MATRIX10_ARB */
+   { 17047, 0x000088CB }, /* GL_MATRIX11_ARB */
+   { 17063, 0x000088CC }, /* GL_MATRIX12_ARB */
+   { 17079, 0x000088CD }, /* GL_MATRIX13_ARB */
+   { 17095, 0x000088CE }, /* GL_MATRIX14_ARB */
+   { 17111, 0x000088CF }, /* GL_MATRIX15_ARB */
+   { 17127, 0x000088D0 }, /* GL_MATRIX16_ARB */
+   { 17143, 0x000088D1 }, /* GL_MATRIX17_ARB */
+   { 17159, 0x000088D2 }, /* GL_MATRIX18_ARB */
+   { 17175, 0x000088D3 }, /* GL_MATRIX19_ARB */
+   { 17191, 0x000088C1 }, /* GL_MATRIX1_ARB */
+   { 17206, 0x00008631 }, /* GL_MATRIX1_NV */
+   { 17220, 0x000088D4 }, /* GL_MATRIX20_ARB */
+   { 17236, 0x000088D5 }, /* GL_MATRIX21_ARB */
+   { 17252, 0x000088D6 }, /* GL_MATRIX22_ARB */
+   { 17268, 0x000088D7 }, /* GL_MATRIX23_ARB */
+   { 17284, 0x000088D8 }, /* GL_MATRIX24_ARB */
+   { 17300, 0x000088D9 }, /* GL_MATRIX25_ARB */
+   { 17316, 0x000088DA }, /* GL_MATRIX26_ARB */
+   { 17332, 0x000088DB }, /* GL_MATRIX27_ARB */
+   { 17348, 0x000088DC }, /* GL_MATRIX28_ARB */
+   { 17364, 0x000088DD }, /* GL_MATRIX29_ARB */
+   { 17380, 0x000088C2 }, /* GL_MATRIX2_ARB */
+   { 17395, 0x00008632 }, /* GL_MATRIX2_NV */
+   { 17409, 0x000088DE }, /* GL_MATRIX30_ARB */
+   { 17425, 0x000088DF }, /* GL_MATRIX31_ARB */
+   { 17441, 0x000088C3 }, /* GL_MATRIX3_ARB */
+   { 17456, 0x00008633 }, /* GL_MATRIX3_NV */
+   { 17470, 0x000088C4 }, /* GL_MATRIX4_ARB */
+   { 17485, 0x00008634 }, /* GL_MATRIX4_NV */
+   { 17499, 0x000088C5 }, /* GL_MATRIX5_ARB */
+   { 17514, 0x00008635 }, /* GL_MATRIX5_NV */
+   { 17528, 0x000088C6 }, /* GL_MATRIX6_ARB */
+   { 17543, 0x00008636 }, /* GL_MATRIX6_NV */
+   { 17557, 0x000088C7 }, /* GL_MATRIX7_ARB */
+   { 17572, 0x00008637 }, /* GL_MATRIX7_NV */
+   { 17586, 0x000088C8 }, /* GL_MATRIX8_ARB */
+   { 17601, 0x000088C9 }, /* GL_MATRIX9_ARB */
+   { 17616, 0x00008844 }, /* GL_MATRIX_INDEX_ARRAY_ARB */
+   { 17642, 0x00008849 }, /* GL_MATRIX_INDEX_ARRAY_POINTER_ARB */
+   { 17676, 0x00008846 }, /* GL_MATRIX_INDEX_ARRAY_SIZE_ARB */
+   { 17707, 0x00008848 }, /* GL_MATRIX_INDEX_ARRAY_STRIDE_ARB */
+   { 17740, 0x00008847 }, /* GL_MATRIX_INDEX_ARRAY_TYPE_ARB */
+   { 17771, 0x00000BA0 }, /* GL_MATRIX_MODE */
+   { 17786, 0x00008840 }, /* GL_MATRIX_PALETTE_ARB */
+   { 17808, 0x00008008 }, /* GL_MAX */
+   { 17815, 0x00008073 }, /* GL_MAX_3D_TEXTURE_SIZE */
+   { 17838, 0x000088FF }, /* GL_MAX_ARRAY_TEXTURE_LAYERS_EXT */
+   { 17870, 0x00000D35 }, /* GL_MAX_ATTRIB_STACK_DEPTH */
+   { 17896, 0x00000D3B }, /* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH */
+   { 17929, 0x00008177 }, /* GL_MAX_CLIPMAP_DEPTH_SGIX */
+   { 17955, 0x00008178 }, /* GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX */
+   { 17989, 0x00000D32 }, /* GL_MAX_CLIP_PLANES */
+   { 18008, 0x00008CDF }, /* GL_MAX_COLOR_ATTACHMENTS */
+   { 18033, 0x00008CDF }, /* GL_MAX_COLOR_ATTACHMENTS_EXT */
+   { 18062, 0x000080B3 }, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH */
+   { 18094, 0x000080B3 }, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI */
+   { 18130, 0x00008B4D }, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS */
+   { 18166, 0x00008B4D }, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB */
+   { 18206, 0x0000801B }, /* GL_MAX_CONVOLUTION_HEIGHT */
+   { 18232, 0x0000801B }, /* GL_MAX_CONVOLUTION_HEIGHT_EXT */
+   { 18262, 0x0000801A }, /* GL_MAX_CONVOLUTION_WIDTH */
+   { 18287, 0x0000801A }, /* GL_MAX_CONVOLUTION_WIDTH_EXT */
+   { 18316, 0x0000851C }, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE */
+   { 18345, 0x0000851C }, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB */
+   { 18378, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS */
+   { 18398, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS_ARB */
+   { 18422, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS_ATI */
+   { 18446, 0x000080E9 }, /* GL_MAX_ELEMENTS_INDICES */
+   { 18470, 0x000080E8 }, /* GL_MAX_ELEMENTS_VERTICES */
+   { 18495, 0x00000D30 }, /* GL_MAX_EVAL_ORDER */
+   { 18513, 0x00008008 }, /* GL_MAX_EXT */
+   { 18524, 0x00008B49 }, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS */
+   { 18559, 0x00008B49 }, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB */
+   { 18598, 0x00000D31 }, /* GL_MAX_LIGHTS */
+   { 18612, 0x00000B31 }, /* GL_MAX_LIST_NESTING */
+   { 18632, 0x00008841 }, /* GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB */
+   { 18670, 0x00000D36 }, /* GL_MAX_MODELVIEW_STACK_DEPTH */
+   { 18699, 0x00000D37 }, /* GL_MAX_NAME_STACK_DEPTH */
+   { 18723, 0x00008842 }, /* GL_MAX_PALETTE_MATRICES_ARB */
+   { 18751, 0x00000D34 }, /* GL_MAX_PIXEL_MAP_TABLE */
+   { 18774, 0x000088B1 }, /* GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB */
+   { 18811, 0x0000880B }, /* GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB */
+   { 18847, 0x000088AD }, /* GL_MAX_PROGRAM_ATTRIBS_ARB */
+   { 18874, 0x000088F5 }, /* GL_MAX_PROGRAM_CALL_DEPTH_NV */
+   { 18903, 0x000088B5 }, /* GL_MAX_PROGRAM_ENV_PARAMETERS_ARB */
+   { 18937, 0x000088F4 }, /* GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV */
+   { 18973, 0x000088F6 }, /* GL_MAX_PROGRAM_IF_DEPTH_NV */
+   { 19000, 0x000088A1 }, /* GL_MAX_PROGRAM_INSTRUCTIONS_ARB */
+   { 19032, 0x000088B4 }, /* GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB */
+   { 19068, 0x000088F8 }, /* GL_MAX_PROGRAM_LOOP_COUNT_NV */
+   { 19097, 0x000088F7 }, /* GL_MAX_PROGRAM_LOOP_DEPTH_NV */
+   { 19126, 0x0000862F }, /* GL_MAX_PROGRAM_MATRICES_ARB */
+   { 19154, 0x0000862E }, /* GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB */
+   { 19192, 0x000088B3 }, /* GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */
+   { 19236, 0x0000880E }, /* GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */
+   { 19279, 0x000088AF }, /* GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB */
+   { 19313, 0x000088A3 }, /* GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB */
+   { 19352, 0x000088AB }, /* GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB */
+   { 19389, 0x000088A7 }, /* GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB */
+   { 19427, 0x00008810 }, /* GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */
+   { 19470, 0x0000880F }, /* GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */
+   { 19513, 0x000088A9 }, /* GL_MAX_PROGRAM_PARAMETERS_ARB */
+   { 19543, 0x000088A5 }, /* GL_MAX_PROGRAM_TEMPORARIES_ARB */
+   { 19574, 0x0000880D }, /* GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB */
+   { 19610, 0x0000880C }, /* GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB */
+   { 19646, 0x00000D38 }, /* GL_MAX_PROJECTION_STACK_DEPTH */
+   { 19676, 0x000084F8 }, /* GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB */
+   { 19710, 0x000084F8 }, /* GL_MAX_RECTANGLE_TEXTURE_SIZE_NV */
+   { 19743, 0x000084E8 }, /* GL_MAX_RENDERBUFFER_SIZE */
+   { 19768, 0x000084E8 }, /* GL_MAX_RENDERBUFFER_SIZE_EXT */
+   { 19797, 0x00008D57 }, /* GL_MAX_SAMPLES */
+   { 19812, 0x00008D57 }, /* GL_MAX_SAMPLES_EXT */
+   { 19831, 0x00009111 }, /* GL_MAX_SERVER_WAIT_TIMEOUT */
+   { 19858, 0x00008504 }, /* GL_MAX_SHININESS_NV */
+   { 19878, 0x00008505 }, /* GL_MAX_SPOT_EXPONENT_NV */
+   { 19902, 0x00008871 }, /* GL_MAX_TEXTURE_COORDS */
+   { 19924, 0x00008871 }, /* GL_MAX_TEXTURE_COORDS_ARB */
+   { 19950, 0x00008872 }, /* GL_MAX_TEXTURE_IMAGE_UNITS */
+   { 19977, 0x00008872 }, /* GL_MAX_TEXTURE_IMAGE_UNITS_ARB */
+   { 20008, 0x000084FD }, /* GL_MAX_TEXTURE_LOD_BIAS */
+   { 20032, 0x000084FF }, /* GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT */
+   { 20066, 0x00000D33 }, /* GL_MAX_TEXTURE_SIZE */
+   { 20086, 0x00000D39 }, /* GL_MAX_TEXTURE_STACK_DEPTH */
+   { 20113, 0x000084E2 }, /* GL_MAX_TEXTURE_UNITS */
+   { 20134, 0x000084E2 }, /* GL_MAX_TEXTURE_UNITS_ARB */
+   { 20159, 0x0000862F }, /* GL_MAX_TRACK_MATRICES_NV */
+   { 20184, 0x0000862E }, /* GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV */
+   { 20219, 0x00008B4B }, /* GL_MAX_VARYING_FLOATS */
+   { 20241, 0x00008B4B }, /* GL_MAX_VARYING_FLOATS_ARB */
+   { 20267, 0x00008869 }, /* GL_MAX_VERTEX_ATTRIBS */
+   { 20289, 0x00008869 }, /* GL_MAX_VERTEX_ATTRIBS_ARB */
+   { 20315, 0x00008B4C }, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS */
+   { 20349, 0x00008B4C }, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB */
+   { 20387, 0x00008B4A }, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS */
+   { 20420, 0x00008B4A }, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB */
+   { 20457, 0x000086A4 }, /* GL_MAX_VERTEX_UNITS_ARB */
+   { 20481, 0x00000D3A }, /* GL_MAX_VIEWPORT_DIMS */
+   { 20502, 0x00008007 }, /* GL_MIN */
+   { 20509, 0x0000802E }, /* GL_MINMAX */
+   { 20519, 0x0000802E }, /* GL_MINMAX_EXT */
+   { 20533, 0x0000802F }, /* GL_MINMAX_FORMAT */
+   { 20550, 0x0000802F }, /* GL_MINMAX_FORMAT_EXT */
+   { 20571, 0x00008030 }, /* GL_MINMAX_SINK */
+   { 20586, 0x00008030 }, /* GL_MINMAX_SINK_EXT */
+   { 20605, 0x00008007 }, /* GL_MIN_EXT */
+   { 20616, 0x00008370 }, /* GL_MIRRORED_REPEAT */
+   { 20635, 0x00008370 }, /* GL_MIRRORED_REPEAT_ARB */
+   { 20658, 0x00008370 }, /* GL_MIRRORED_REPEAT_IBM */
+   { 20681, 0x00008742 }, /* GL_MIRROR_CLAMP_ATI */
+   { 20701, 0x00008742 }, /* GL_MIRROR_CLAMP_EXT */
+   { 20721, 0x00008912 }, /* GL_MIRROR_CLAMP_TO_BORDER_EXT */
+   { 20751, 0x00008743 }, /* GL_MIRROR_CLAMP_TO_EDGE_ATI */
+   { 20779, 0x00008743 }, /* GL_MIRROR_CLAMP_TO_EDGE_EXT */
+   { 20807, 0x00001700 }, /* GL_MODELVIEW */
+   { 20820, 0x00001700 }, /* GL_MODELVIEW0_ARB */
+   { 20838, 0x0000872A }, /* GL_MODELVIEW10_ARB */
+   { 20857, 0x0000872B }, /* GL_MODELVIEW11_ARB */
+   { 20876, 0x0000872C }, /* GL_MODELVIEW12_ARB */
+   { 20895, 0x0000872D }, /* GL_MODELVIEW13_ARB */
+   { 20914, 0x0000872E }, /* GL_MODELVIEW14_ARB */
+   { 20933, 0x0000872F }, /* GL_MODELVIEW15_ARB */
+   { 20952, 0x00008730 }, /* GL_MODELVIEW16_ARB */
+   { 20971, 0x00008731 }, /* GL_MODELVIEW17_ARB */
+   { 20990, 0x00008732 }, /* GL_MODELVIEW18_ARB */
+   { 21009, 0x00008733 }, /* GL_MODELVIEW19_ARB */
+   { 21028, 0x0000850A }, /* GL_MODELVIEW1_ARB */
+   { 21046, 0x00008734 }, /* GL_MODELVIEW20_ARB */
+   { 21065, 0x00008735 }, /* GL_MODELVIEW21_ARB */
+   { 21084, 0x00008736 }, /* GL_MODELVIEW22_ARB */
+   { 21103, 0x00008737 }, /* GL_MODELVIEW23_ARB */
+   { 21122, 0x00008738 }, /* GL_MODELVIEW24_ARB */
+   { 21141, 0x00008739 }, /* GL_MODELVIEW25_ARB */
+   { 21160, 0x0000873A }, /* GL_MODELVIEW26_ARB */
+   { 21179, 0x0000873B }, /* GL_MODELVIEW27_ARB */
+   { 21198, 0x0000873C }, /* GL_MODELVIEW28_ARB */
+   { 21217, 0x0000873D }, /* GL_MODELVIEW29_ARB */
+   { 21236, 0x00008722 }, /* GL_MODELVIEW2_ARB */
+   { 21254, 0x0000873E }, /* GL_MODELVIEW30_ARB */
+   { 21273, 0x0000873F }, /* GL_MODELVIEW31_ARB */
+   { 21292, 0x00008723 }, /* GL_MODELVIEW3_ARB */
+   { 21310, 0x00008724 }, /* GL_MODELVIEW4_ARB */
+   { 21328, 0x00008725 }, /* GL_MODELVIEW5_ARB */
+   { 21346, 0x00008726 }, /* GL_MODELVIEW6_ARB */
+   { 21364, 0x00008727 }, /* GL_MODELVIEW7_ARB */
+   { 21382, 0x00008728 }, /* GL_MODELVIEW8_ARB */
+   { 21400, 0x00008729 }, /* GL_MODELVIEW9_ARB */
+   { 21418, 0x00000BA6 }, /* GL_MODELVIEW_MATRIX */
+   { 21438, 0x00008629 }, /* GL_MODELVIEW_PROJECTION_NV */
+   { 21465, 0x00000BA3 }, /* GL_MODELVIEW_STACK_DEPTH */
+   { 21490, 0x00002100 }, /* GL_MODULATE */
+   { 21502, 0x00008744 }, /* GL_MODULATE_ADD_ATI */
+   { 21522, 0x00008745 }, /* GL_MODULATE_SIGNED_ADD_ATI */
+   { 21549, 0x00008746 }, /* GL_MODULATE_SUBTRACT_ATI */
+   { 21574, 0x00000103 }, /* GL_MULT */
+   { 21582, 0x0000809D }, /* GL_MULTISAMPLE */
+   { 21597, 0x000086B2 }, /* GL_MULTISAMPLE_3DFX */
+   { 21617, 0x0000809D }, /* GL_MULTISAMPLE_ARB */
+   { 21636, 0x20000000 }, /* GL_MULTISAMPLE_BIT */
+   { 21655, 0x20000000 }, /* GL_MULTISAMPLE_BIT_3DFX */
+   { 21679, 0x20000000 }, /* GL_MULTISAMPLE_BIT_ARB */
+   { 21702, 0x00008534 }, /* GL_MULTISAMPLE_FILTER_HINT_NV */
+   { 21732, 0x00002A25 }, /* GL_N3F_V3F */
+   { 21743, 0x00000D70 }, /* GL_NAME_STACK_DEPTH */
+   { 21763, 0x0000150E }, /* GL_NAND */
+   { 21771, 0x00002600 }, /* GL_NEAREST */
+   { 21782, 0x0000844E }, /* GL_NEAREST_CLIPMAP_LINEAR_SGIX */
+   { 21813, 0x0000844D }, /* GL_NEAREST_CLIPMAP_NEAREST_SGIX */
+   { 21845, 0x00002702 }, /* GL_NEAREST_MIPMAP_LINEAR */
+   { 21870, 0x00002700 }, /* GL_NEAREST_MIPMAP_NEAREST */
+   { 21896, 0x00000200 }, /* GL_NEVER */
+   { 21905, 0x00001102 }, /* GL_NICEST */
+   { 21915, 0x00000000 }, /* GL_NONE */
+   { 21923, 0x00001505 }, /* GL_NOOP */
+   { 21931, 0x00001508 }, /* GL_NOR */
+   { 21938, 0x00000BA1 }, /* GL_NORMALIZE */
+   { 21951, 0x00008075 }, /* GL_NORMAL_ARRAY */
+   { 21967, 0x00008897 }, /* GL_NORMAL_ARRAY_BUFFER_BINDING */
+   { 21998, 0x00008897 }, /* GL_NORMAL_ARRAY_BUFFER_BINDING_ARB */
+   { 22033, 0x0000808F }, /* GL_NORMAL_ARRAY_POINTER */
+   { 22057, 0x0000807F }, /* GL_NORMAL_ARRAY_STRIDE */
+   { 22080, 0x0000807E }, /* GL_NORMAL_ARRAY_TYPE */
+   { 22101, 0x00008511 }, /* GL_NORMAL_MAP */
+   { 22115, 0x00008511 }, /* GL_NORMAL_MAP_ARB */
+   { 22133, 0x00008511 }, /* GL_NORMAL_MAP_NV */
+   { 22150, 0x00000205 }, /* GL_NOTEQUAL */
+   { 22162, 0x00000000 }, /* GL_NO_ERROR */
+   { 22174, 0x000086A2 }, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS */
+   { 22208, 0x000086A2 }, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB */
+   { 22246, 0x00008B89 }, /* GL_OBJECT_ACTIVE_ATTRIBUTES_ARB */
+   { 22278, 0x00008B8A }, /* GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB */
+   { 22320, 0x00008B86 }, /* GL_OBJECT_ACTIVE_UNIFORMS_ARB */
+   { 22350, 0x00008B87 }, /* GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB */
+   { 22390, 0x00008B85 }, /* GL_OBJECT_ATTACHED_OBJECTS_ARB */
+   { 22421, 0x00008B81 }, /* GL_OBJECT_COMPILE_STATUS_ARB */
+   { 22450, 0x00008B80 }, /* GL_OBJECT_DELETE_STATUS_ARB */
+   { 22478, 0x00008B84 }, /* GL_OBJECT_INFO_LOG_LENGTH_ARB */
+   { 22508, 0x00002401 }, /* GL_OBJECT_LINEAR */
+   { 22525, 0x00008B82 }, /* GL_OBJECT_LINK_STATUS_ARB */
+   { 22551, 0x00002501 }, /* GL_OBJECT_PLANE */
+   { 22567, 0x00008B88 }, /* GL_OBJECT_SHADER_SOURCE_LENGTH_ARB */
+   { 22602, 0x00008B4F }, /* GL_OBJECT_SUBTYPE_ARB */
+   { 22624, 0x00009112 }, /* GL_OBJECT_TYPE */
+   { 22639, 0x00008B4E }, /* GL_OBJECT_TYPE_ARB */
+   { 22658, 0x00008B83 }, /* GL_OBJECT_VALIDATE_STATUS_ARB */
+   { 22688, 0x00008165 }, /* GL_OCCLUSION_TEST_HP */
+   { 22709, 0x00008166 }, /* GL_OCCLUSION_TEST_RESULT_HP */
+   { 22737, 0x00000001 }, /* GL_ONE */
+   { 22744, 0x00008004 }, /* GL_ONE_MINUS_CONSTANT_ALPHA */
+   { 22772, 0x00008004 }, /* GL_ONE_MINUS_CONSTANT_ALPHA_EXT */
+   { 22804, 0x00008002 }, /* GL_ONE_MINUS_CONSTANT_COLOR */
+   { 22832, 0x00008002 }, /* GL_ONE_MINUS_CONSTANT_COLOR_EXT */
+   { 22864, 0x00000305 }, /* GL_ONE_MINUS_DST_ALPHA */
+   { 22887, 0x00000307 }, /* GL_ONE_MINUS_DST_COLOR */
+   { 22910, 0x00000303 }, /* GL_ONE_MINUS_SRC_ALPHA */
+   { 22933, 0x00000301 }, /* GL_ONE_MINUS_SRC_COLOR */
+   { 22956, 0x00008598 }, /* GL_OPERAND0_ALPHA */
+   { 22974, 0x00008598 }, /* GL_OPERAND0_ALPHA_ARB */
+   { 22996, 0x00008598 }, /* GL_OPERAND0_ALPHA_EXT */
+   { 23018, 0x00008590 }, /* GL_OPERAND0_RGB */
+   { 23034, 0x00008590 }, /* GL_OPERAND0_RGB_ARB */
+   { 23054, 0x00008590 }, /* GL_OPERAND0_RGB_EXT */
+   { 23074, 0x00008599 }, /* GL_OPERAND1_ALPHA */
+   { 23092, 0x00008599 }, /* GL_OPERAND1_ALPHA_ARB */
+   { 23114, 0x00008599 }, /* GL_OPERAND1_ALPHA_EXT */
+   { 23136, 0x00008591 }, /* GL_OPERAND1_RGB */
+   { 23152, 0x00008591 }, /* GL_OPERAND1_RGB_ARB */
+   { 23172, 0x00008591 }, /* GL_OPERAND1_RGB_EXT */
+   { 23192, 0x0000859A }, /* GL_OPERAND2_ALPHA */
+   { 23210, 0x0000859A }, /* GL_OPERAND2_ALPHA_ARB */
+   { 23232, 0x0000859A }, /* GL_OPERAND2_ALPHA_EXT */
+   { 23254, 0x00008592 }, /* GL_OPERAND2_RGB */
+   { 23270, 0x00008592 }, /* GL_OPERAND2_RGB_ARB */
+   { 23290, 0x00008592 }, /* GL_OPERAND2_RGB_EXT */
+   { 23310, 0x0000859B }, /* GL_OPERAND3_ALPHA_NV */
+   { 23331, 0x00008593 }, /* GL_OPERAND3_RGB_NV */
+   { 23350, 0x00001507 }, /* GL_OR */
+   { 23356, 0x00000A01 }, /* GL_ORDER */
+   { 23365, 0x0000150D }, /* GL_OR_INVERTED */
+   { 23380, 0x0000150B }, /* GL_OR_REVERSE */
+   { 23394, 0x00000505 }, /* GL_OUT_OF_MEMORY */
+   { 23411, 0x00000D05 }, /* GL_PACK_ALIGNMENT */
+   { 23429, 0x0000806C }, /* GL_PACK_IMAGE_HEIGHT */
+   { 23450, 0x00008758 }, /* GL_PACK_INVERT_MESA */
+   { 23470, 0x00000D01 }, /* GL_PACK_LSB_FIRST */
+   { 23488, 0x00000D02 }, /* GL_PACK_ROW_LENGTH */
+   { 23507, 0x0000806B }, /* GL_PACK_SKIP_IMAGES */
+   { 23527, 0x00000D04 }, /* GL_PACK_SKIP_PIXELS */
+   { 23547, 0x00000D03 }, /* GL_PACK_SKIP_ROWS */
+   { 23565, 0x00000D00 }, /* GL_PACK_SWAP_BYTES */
+   { 23584, 0x00008B92 }, /* GL_PALETTE4_R5_G6_B5_OES */
+   { 23609, 0x00008B94 }, /* GL_PALETTE4_RGB5_A1_OES */
+   { 23633, 0x00008B90 }, /* GL_PALETTE4_RGB8_OES */
+   { 23654, 0x00008B93 }, /* GL_PALETTE4_RGBA4_OES */
+   { 23676, 0x00008B91 }, /* GL_PALETTE4_RGBA8_OES */
+   { 23698, 0x00008B97 }, /* GL_PALETTE8_R5_G6_B5_OES */
+   { 23723, 0x00008B99 }, /* GL_PALETTE8_RGB5_A1_OES */
+   { 23747, 0x00008B95 }, /* GL_PALETTE8_RGB8_OES */
+   { 23768, 0x00008B98 }, /* GL_PALETTE8_RGBA4_OES */
+   { 23790, 0x00008B96 }, /* GL_PALETTE8_RGBA8_OES */
+   { 23812, 0x00000700 }, /* GL_PASS_THROUGH_TOKEN */
+   { 23834, 0x00000C50 }, /* GL_PERSPECTIVE_CORRECTION_HINT */
+   { 23865, 0x00000C79 }, /* GL_PIXEL_MAP_A_TO_A */
+   { 23885, 0x00000CB9 }, /* GL_PIXEL_MAP_A_TO_A_SIZE */
+   { 23910, 0x00000C78 }, /* GL_PIXEL_MAP_B_TO_B */
+   { 23930, 0x00000CB8 }, /* GL_PIXEL_MAP_B_TO_B_SIZE */
+   { 23955, 0x00000C77 }, /* GL_PIXEL_MAP_G_TO_G */
+   { 23975, 0x00000CB7 }, /* GL_PIXEL_MAP_G_TO_G_SIZE */
+   { 24000, 0x00000C75 }, /* GL_PIXEL_MAP_I_TO_A */
+   { 24020, 0x00000CB5 }, /* GL_PIXEL_MAP_I_TO_A_SIZE */
+   { 24045, 0x00000C74 }, /* GL_PIXEL_MAP_I_TO_B */
+   { 24065, 0x00000CB4 }, /* GL_PIXEL_MAP_I_TO_B_SIZE */
+   { 24090, 0x00000C73 }, /* GL_PIXEL_MAP_I_TO_G */
+   { 24110, 0x00000CB3 }, /* GL_PIXEL_MAP_I_TO_G_SIZE */
+   { 24135, 0x00000C70 }, /* GL_PIXEL_MAP_I_TO_I */
+   { 24155, 0x00000CB0 }, /* GL_PIXEL_MAP_I_TO_I_SIZE */
+   { 24180, 0x00000C72 }, /* GL_PIXEL_MAP_I_TO_R */
+   { 24200, 0x00000CB2 }, /* GL_PIXEL_MAP_I_TO_R_SIZE */
+   { 24225, 0x00000C76 }, /* GL_PIXEL_MAP_R_TO_R */
+   { 24245, 0x00000CB6 }, /* GL_PIXEL_MAP_R_TO_R_SIZE */
+   { 24270, 0x00000C71 }, /* GL_PIXEL_MAP_S_TO_S */
+   { 24290, 0x00000CB1 }, /* GL_PIXEL_MAP_S_TO_S_SIZE */
+   { 24315, 0x00000020 }, /* GL_PIXEL_MODE_BIT */
+   { 24333, 0x000088EB }, /* GL_PIXEL_PACK_BUFFER */
+   { 24354, 0x000088ED }, /* GL_PIXEL_PACK_BUFFER_BINDING */
+   { 24383, 0x000088ED }, /* GL_PIXEL_PACK_BUFFER_BINDING_EXT */
+   { 24416, 0x000088EB }, /* GL_PIXEL_PACK_BUFFER_EXT */
+   { 24441, 0x000088EC }, /* GL_PIXEL_UNPACK_BUFFER */
+   { 24464, 0x000088EF }, /* GL_PIXEL_UNPACK_BUFFER_BINDING */
+   { 24495, 0x000088EF }, /* GL_PIXEL_UNPACK_BUFFER_BINDING_EXT */
+   { 24530, 0x000088EC }, /* GL_PIXEL_UNPACK_BUFFER_EXT */
+   { 24557, 0x00001B00 }, /* GL_POINT */
+   { 24566, 0x00000000 }, /* GL_POINTS */
+   { 24576, 0x00000002 }, /* GL_POINT_BIT */
+   { 24589, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION */
+   { 24619, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_ARB */
+   { 24653, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_EXT */
+   { 24687, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_SGIS */
+   { 24722, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE */
+   { 24751, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_ARB */
+   { 24784, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_EXT */
+   { 24817, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_SGIS */
+   { 24851, 0x00000B11 }, /* GL_POINT_SIZE */
+   { 24865, 0x00000B13 }, /* GL_POINT_SIZE_GRANULARITY */
+   { 24891, 0x00008127 }, /* GL_POINT_SIZE_MAX */
+   { 24909, 0x00008127 }, /* GL_POINT_SIZE_MAX_ARB */
+   { 24931, 0x00008127 }, /* GL_POINT_SIZE_MAX_EXT */
+   { 24953, 0x00008127 }, /* GL_POINT_SIZE_MAX_SGIS */
+   { 24976, 0x00008126 }, /* GL_POINT_SIZE_MIN */
+   { 24994, 0x00008126 }, /* GL_POINT_SIZE_MIN_ARB */
+   { 25016, 0x00008126 }, /* GL_POINT_SIZE_MIN_EXT */
+   { 25038, 0x00008126 }, /* GL_POINT_SIZE_MIN_SGIS */
+   { 25061, 0x00000B12 }, /* GL_POINT_SIZE_RANGE */
+   { 25081, 0x00000B10 }, /* GL_POINT_SMOOTH */
+   { 25097, 0x00000C51 }, /* GL_POINT_SMOOTH_HINT */
+   { 25118, 0x00008861 }, /* GL_POINT_SPRITE */
+   { 25134, 0x00008861 }, /* GL_POINT_SPRITE_ARB */
+   { 25154, 0x00008CA0 }, /* GL_POINT_SPRITE_COORD_ORIGIN */
+   { 25183, 0x00008861 }, /* GL_POINT_SPRITE_NV */
+   { 25202, 0x00008863 }, /* GL_POINT_SPRITE_R_MODE_NV */
+   { 25228, 0x00000701 }, /* GL_POINT_TOKEN */
+   { 25243, 0x00000009 }, /* GL_POLYGON */
+   { 25254, 0x00000008 }, /* GL_POLYGON_BIT */
+   { 25269, 0x00000B40 }, /* GL_POLYGON_MODE */
+   { 25285, 0x00008039 }, /* GL_POLYGON_OFFSET_BIAS */
+   { 25308, 0x00008038 }, /* GL_POLYGON_OFFSET_FACTOR */
+   { 25333, 0x00008037 }, /* GL_POLYGON_OFFSET_FILL */
+   { 25356, 0x00002A02 }, /* GL_POLYGON_OFFSET_LINE */
+   { 25379, 0x00002A01 }, /* GL_POLYGON_OFFSET_POINT */
+   { 25403, 0x00002A00 }, /* GL_POLYGON_OFFSET_UNITS */
+   { 25427, 0x00000B41 }, /* GL_POLYGON_SMOOTH */
+   { 25445, 0x00000C53 }, /* GL_POLYGON_SMOOTH_HINT */
+   { 25468, 0x00000B42 }, /* GL_POLYGON_STIPPLE */
+   { 25487, 0x00000010 }, /* GL_POLYGON_STIPPLE_BIT */
+   { 25510, 0x00000703 }, /* GL_POLYGON_TOKEN */
+   { 25527, 0x00001203 }, /* GL_POSITION */
+   { 25539, 0x000080BB }, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS */
+   { 25571, 0x000080BB }, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI */
+   { 25607, 0x000080B7 }, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE */
+   { 25640, 0x000080B7 }, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI */
+   { 25677, 0x000080BA }, /* GL_POST_COLOR_MATRIX_BLUE_BIAS */
+   { 25708, 0x000080BA }, /* GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI */
+   { 25743, 0x000080B6 }, /* GL_POST_COLOR_MATRIX_BLUE_SCALE */
+   { 25775, 0x000080B6 }, /* GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI */
+   { 25811, 0x000080D2 }, /* GL_POST_COLOR_MATRIX_COLOR_TABLE */
+   { 25844, 0x000080B9 }, /* GL_POST_COLOR_MATRIX_GREEN_BIAS */
+   { 25876, 0x000080B9 }, /* GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI */
+   { 25912, 0x000080B5 }, /* GL_POST_COLOR_MATRIX_GREEN_SCALE */
+   { 25945, 0x000080B5 }, /* GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI */
+   { 25982, 0x000080B8 }, /* GL_POST_COLOR_MATRIX_RED_BIAS */
+   { 26012, 0x000080B8 }, /* GL_POST_COLOR_MATRIX_RED_BIAS_SGI */
+   { 26046, 0x000080B4 }, /* GL_POST_COLOR_MATRIX_RED_SCALE */
+   { 26077, 0x000080B4 }, /* GL_POST_COLOR_MATRIX_RED_SCALE_SGI */
+   { 26112, 0x00008023 }, /* GL_POST_CONVOLUTION_ALPHA_BIAS */
+   { 26143, 0x00008023 }, /* GL_POST_CONVOLUTION_ALPHA_BIAS_EXT */
+   { 26178, 0x0000801F }, /* GL_POST_CONVOLUTION_ALPHA_SCALE */
+   { 26210, 0x0000801F }, /* GL_POST_CONVOLUTION_ALPHA_SCALE_EXT */
+   { 26246, 0x00008022 }, /* GL_POST_CONVOLUTION_BLUE_BIAS */
+   { 26276, 0x00008022 }, /* GL_POST_CONVOLUTION_BLUE_BIAS_EXT */
+   { 26310, 0x0000801E }, /* GL_POST_CONVOLUTION_BLUE_SCALE */
+   { 26341, 0x0000801E }, /* GL_POST_CONVOLUTION_BLUE_SCALE_EXT */
+   { 26376, 0x000080D1 }, /* GL_POST_CONVOLUTION_COLOR_TABLE */
+   { 26408, 0x00008021 }, /* GL_POST_CONVOLUTION_GREEN_BIAS */
+   { 26439, 0x00008021 }, /* GL_POST_CONVOLUTION_GREEN_BIAS_EXT */
+   { 26474, 0x0000801D }, /* GL_POST_CONVOLUTION_GREEN_SCALE */
+   { 26506, 0x0000801D }, /* GL_POST_CONVOLUTION_GREEN_SCALE_EXT */
+   { 26542, 0x00008020 }, /* GL_POST_CONVOLUTION_RED_BIAS */
+   { 26571, 0x00008020 }, /* GL_POST_CONVOLUTION_RED_BIAS_EXT */
+   { 26604, 0x0000801C }, /* GL_POST_CONVOLUTION_RED_SCALE */
+   { 26634, 0x0000801C }, /* GL_POST_CONVOLUTION_RED_SCALE_EXT */
+   { 26668, 0x0000817B }, /* GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX */
+   { 26707, 0x00008179 }, /* GL_POST_TEXTURE_FILTER_BIAS_SGIX */
+   { 26740, 0x0000817C }, /* GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX */
+   { 26780, 0x0000817A }, /* GL_POST_TEXTURE_FILTER_SCALE_SGIX */
+   { 26814, 0x00008578 }, /* GL_PREVIOUS */
+   { 26826, 0x00008578 }, /* GL_PREVIOUS_ARB */
+   { 26842, 0x00008578 }, /* GL_PREVIOUS_EXT */
+   { 26858, 0x00008577 }, /* GL_PRIMARY_COLOR */
+   { 26875, 0x00008577 }, /* GL_PRIMARY_COLOR_ARB */
+   { 26896, 0x00008577 }, /* GL_PRIMARY_COLOR_EXT */
+   { 26917, 0x000088B0 }, /* GL_PROGRAM_ADDRESS_REGISTERS_ARB */
+   { 26950, 0x00008805 }, /* GL_PROGRAM_ALU_INSTRUCTIONS_ARB */
+   { 26982, 0x000088AC }, /* GL_PROGRAM_ATTRIBS_ARB */
+   { 27005, 0x00008677 }, /* GL_PROGRAM_BINDING_ARB */
+   { 27028, 0x0000864B }, /* GL_PROGRAM_ERROR_POSITION_ARB */
+   { 27058, 0x0000864B }, /* GL_PROGRAM_ERROR_POSITION_NV */
+   { 27087, 0x00008874 }, /* GL_PROGRAM_ERROR_STRING_ARB */
+   { 27115, 0x00008876 }, /* GL_PROGRAM_FORMAT_ARB */
+   { 27137, 0x00008875 }, /* GL_PROGRAM_FORMAT_ASCII_ARB */
+   { 27165, 0x000088A0 }, /* GL_PROGRAM_INSTRUCTIONS_ARB */
+   { 27193, 0x00008627 }, /* GL_PROGRAM_LENGTH_ARB */
+   { 27215, 0x00008627 }, /* GL_PROGRAM_LENGTH_NV */
+   { 27236, 0x000088B2 }, /* GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */
+   { 27276, 0x00008808 }, /* GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */
+   { 27315, 0x000088AE }, /* GL_PROGRAM_NATIVE_ATTRIBS_ARB */
+   { 27345, 0x000088A2 }, /* GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB */
+   { 27380, 0x000088AA }, /* GL_PROGRAM_NATIVE_PARAMETERS_ARB */
+   { 27413, 0x000088A6 }, /* GL_PROGRAM_NATIVE_TEMPORARIES_ARB */
+   { 27447, 0x0000880A }, /* GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */
+   { 27486, 0x00008809 }, /* GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */
+   { 27525, 0x00008B40 }, /* GL_PROGRAM_OBJECT_ARB */
+   { 27547, 0x000088A8 }, /* GL_PROGRAM_PARAMETERS_ARB */
+   { 27573, 0x00008644 }, /* GL_PROGRAM_PARAMETER_NV */
+   { 27597, 0x00008647 }, /* GL_PROGRAM_RESIDENT_NV */
+   { 27620, 0x00008628 }, /* GL_PROGRAM_STRING_ARB */
+   { 27642, 0x00008628 }, /* GL_PROGRAM_STRING_NV */
+   { 27663, 0x00008646 }, /* GL_PROGRAM_TARGET_NV */
+   { 27684, 0x000088A4 }, /* GL_PROGRAM_TEMPORARIES_ARB */
+   { 27711, 0x00008807 }, /* GL_PROGRAM_TEX_INDIRECTIONS_ARB */
+   { 27743, 0x00008806 }, /* GL_PROGRAM_TEX_INSTRUCTIONS_ARB */
+   { 27775, 0x000088B6 }, /* GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB */
+   { 27810, 0x00001701 }, /* GL_PROJECTION */
+   { 27824, 0x00000BA7 }, /* GL_PROJECTION_MATRIX */
+   { 27845, 0x00000BA4 }, /* GL_PROJECTION_STACK_DEPTH */
+   { 27871, 0x00008E4F }, /* GL_PROVOKING_VERTEX */
+   { 27891, 0x00008E4F }, /* GL_PROVOKING_VERTEX_EXT */
+   { 27915, 0x000080D3 }, /* GL_PROXY_COLOR_TABLE */
+   { 27936, 0x00008025 }, /* GL_PROXY_HISTOGRAM */
+   { 27955, 0x00008025 }, /* GL_PROXY_HISTOGRAM_EXT */
+   { 27978, 0x000080D5 }, /* GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE */
+   { 28017, 0x000080D4 }, /* GL_PROXY_POST_CONVOLUTION_COLOR_TABLE */
+   { 28055, 0x00008063 }, /* GL_PROXY_TEXTURE_1D */
+   { 28075, 0x00008C19 }, /* GL_PROXY_TEXTURE_1D_ARRAY_EXT */
+   { 28105, 0x00008063 }, /* GL_PROXY_TEXTURE_1D_EXT */
+   { 28129, 0x00008064 }, /* GL_PROXY_TEXTURE_2D */
+   { 28149, 0x00008C1B }, /* GL_PROXY_TEXTURE_2D_ARRAY_EXT */
+   { 28179, 0x00008064 }, /* GL_PROXY_TEXTURE_2D_EXT */
+   { 28203, 0x00008070 }, /* GL_PROXY_TEXTURE_3D */
+   { 28223, 0x000080BD }, /* GL_PROXY_TEXTURE_COLOR_TABLE_SGI */
+   { 28256, 0x0000851B }, /* GL_PROXY_TEXTURE_CUBE_MAP */
+   { 28282, 0x0000851B }, /* GL_PROXY_TEXTURE_CUBE_MAP_ARB */
+   { 28312, 0x000084F7 }, /* GL_PROXY_TEXTURE_RECTANGLE_ARB */
+   { 28343, 0x000084F7 }, /* GL_PROXY_TEXTURE_RECTANGLE_NV */
+   { 28373, 0x00008A1D }, /* GL_PURGEABLE_APPLE */
+   { 28392, 0x00002003 }, /* GL_Q */
+   { 28397, 0x00001209 }, /* GL_QUADRATIC_ATTENUATION */
+   { 28422, 0x00000007 }, /* GL_QUADS */
+   { 28431, 0x00008E4C }, /* GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION */
+   { 28475, 0x00008E4C }, /* GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT */
+   { 28523, 0x00008614 }, /* GL_QUAD_MESH_SUN */
+   { 28540, 0x00000008 }, /* GL_QUAD_STRIP */
+   { 28554, 0x00008E16 }, /* GL_QUERY_BY_REGION_NO_WAIT_NV */
+   { 28584, 0x00008E15 }, /* GL_QUERY_BY_REGION_WAIT_NV */
+   { 28611, 0x00008864 }, /* GL_QUERY_COUNTER_BITS */
+   { 28633, 0x00008864 }, /* GL_QUERY_COUNTER_BITS_ARB */
+   { 28659, 0x00008E14 }, /* GL_QUERY_NO_WAIT_NV */
+   { 28679, 0x00008866 }, /* GL_QUERY_RESULT */
+   { 28695, 0x00008866 }, /* GL_QUERY_RESULT_ARB */
+   { 28715, 0x00008867 }, /* GL_QUERY_RESULT_AVAILABLE */
+   { 28741, 0x00008867 }, /* GL_QUERY_RESULT_AVAILABLE_ARB */
+   { 28771, 0x00008E13 }, /* GL_QUERY_WAIT_NV */
+   { 28788, 0x00002002 }, /* GL_R */
+   { 28793, 0x00002A10 }, /* GL_R3_G3_B2 */
+   { 28805, 0x00019262 }, /* GL_RASTER_POSITION_UNCLIPPED_IBM */
+   { 28838, 0x00000C02 }, /* GL_READ_BUFFER */
+   { 28853, 0x00008CA8 }, /* GL_READ_FRAMEBUFFER */
+   { 28873, 0x00008CAA }, /* GL_READ_FRAMEBUFFER_BINDING */
+   { 28901, 0x00008CAA }, /* GL_READ_FRAMEBUFFER_BINDING_EXT */
+   { 28933, 0x00008CA8 }, /* GL_READ_FRAMEBUFFER_EXT */
+   { 28957, 0x000088B8 }, /* GL_READ_ONLY */
+   { 28970, 0x000088B8 }, /* GL_READ_ONLY_ARB */
+   { 28987, 0x000088BA }, /* GL_READ_WRITE */
+   { 29001, 0x000088BA }, /* GL_READ_WRITE_ARB */
+   { 29019, 0x00001903 }, /* GL_RED */
+   { 29026, 0x00008016 }, /* GL_REDUCE */
+   { 29036, 0x00008016 }, /* GL_REDUCE_EXT */
+   { 29050, 0x00000D15 }, /* GL_RED_BIAS */
+   { 29062, 0x00000D52 }, /* GL_RED_BITS */
+   { 29074, 0x00000D14 }, /* GL_RED_SCALE */
+   { 29087, 0x00008512 }, /* GL_REFLECTION_MAP */
+   { 29105, 0x00008512 }, /* GL_REFLECTION_MAP_ARB */
+   { 29127, 0x00008512 }, /* GL_REFLECTION_MAP_NV */
+   { 29148, 0x00008A19 }, /* GL_RELEASED_APPLE */
+   { 29166, 0x00001C00 }, /* GL_RENDER */
+   { 29176, 0x00008D41 }, /* GL_RENDERBUFFER */
+   { 29192, 0x00008D53 }, /* GL_RENDERBUFFER_ALPHA_SIZE */
+   { 29219, 0x00008CA7 }, /* GL_RENDERBUFFER_BINDING */
+   { 29243, 0x00008CA7 }, /* GL_RENDERBUFFER_BINDING_EXT */
+   { 29271, 0x00008D52 }, /* GL_RENDERBUFFER_BLUE_SIZE */
+   { 29297, 0x00008D54 }, /* GL_RENDERBUFFER_DEPTH_SIZE */
+   { 29324, 0x00008D41 }, /* GL_RENDERBUFFER_EXT */
+   { 29344, 0x00008D51 }, /* GL_RENDERBUFFER_GREEN_SIZE */
+   { 29371, 0x00008D43 }, /* GL_RENDERBUFFER_HEIGHT */
+   { 29394, 0x00008D43 }, /* GL_RENDERBUFFER_HEIGHT_EXT */
+   { 29421, 0x00008D44 }, /* GL_RENDERBUFFER_INTERNAL_FORMAT */
+   { 29453, 0x00008D44 }, /* GL_RENDERBUFFER_INTERNAL_FORMAT_EXT */
+   { 29489, 0x00008D50 }, /* GL_RENDERBUFFER_RED_SIZE */
+   { 29514, 0x00008CAB }, /* GL_RENDERBUFFER_SAMPLES */
+   { 29538, 0x00008CAB }, /* GL_RENDERBUFFER_SAMPLES_EXT */
+   { 29566, 0x00008D55 }, /* GL_RENDERBUFFER_STENCIL_SIZE */
+   { 29595, 0x00008D42 }, /* GL_RENDERBUFFER_WIDTH */
+   { 29617, 0x00008D42 }, /* GL_RENDERBUFFER_WIDTH_EXT */
+   { 29643, 0x00001F01 }, /* GL_RENDERER */
+   { 29655, 0x00000C40 }, /* GL_RENDER_MODE */
+   { 29670, 0x00002901 }, /* GL_REPEAT */
+   { 29680, 0x00001E01 }, /* GL_REPLACE */
+   { 29691, 0x00008062 }, /* GL_REPLACE_EXT */
+   { 29706, 0x00008153 }, /* GL_REPLICATE_BORDER_HP */
+   { 29729, 0x0000803A }, /* GL_RESCALE_NORMAL */
+   { 29747, 0x0000803A }, /* GL_RESCALE_NORMAL_EXT */
+   { 29769, 0x00008A1B }, /* GL_RETAINED_APPLE */
+   { 29787, 0x00000102 }, /* GL_RETURN */
+   { 29797, 0x00001907 }, /* GL_RGB */
+   { 29804, 0x00008052 }, /* GL_RGB10 */
+   { 29813, 0x00008059 }, /* GL_RGB10_A2 */
+   { 29825, 0x00008059 }, /* GL_RGB10_A2_EXT */
+   { 29841, 0x00008052 }, /* GL_RGB10_EXT */
+   { 29854, 0x00008053 }, /* GL_RGB12 */
+   { 29863, 0x00008053 }, /* GL_RGB12_EXT */
+   { 29876, 0x00008054 }, /* GL_RGB16 */
+   { 29885, 0x00008054 }, /* GL_RGB16_EXT */
+   { 29898, 0x0000804E }, /* GL_RGB2_EXT */
+   { 29910, 0x0000804F }, /* GL_RGB4 */
+   { 29918, 0x0000804F }, /* GL_RGB4_EXT */
+   { 29930, 0x000083A1 }, /* GL_RGB4_S3TC */
+   { 29943, 0x00008050 }, /* GL_RGB5 */
+   { 29951, 0x00008057 }, /* GL_RGB5_A1 */
+   { 29962, 0x00008057 }, /* GL_RGB5_A1_EXT */
+   { 29977, 0x00008050 }, /* GL_RGB5_EXT */
+   { 29989, 0x00008051 }, /* GL_RGB8 */
+   { 29997, 0x00008051 }, /* GL_RGB8_EXT */
+   { 30009, 0x00001908 }, /* GL_RGBA */
+   { 30017, 0x0000805A }, /* GL_RGBA12 */
+   { 30027, 0x0000805A }, /* GL_RGBA12_EXT */
+   { 30041, 0x0000805B }, /* GL_RGBA16 */
+   { 30051, 0x0000805B }, /* GL_RGBA16_EXT */
+   { 30065, 0x00008055 }, /* GL_RGBA2 */
+   { 30074, 0x00008055 }, /* GL_RGBA2_EXT */
+   { 30087, 0x00008056 }, /* GL_RGBA4 */
+   { 30096, 0x000083A5 }, /* GL_RGBA4_DXT5_S3TC */
+   { 30115, 0x00008056 }, /* GL_RGBA4_EXT */
+   { 30128, 0x000083A3 }, /* GL_RGBA4_S3TC */
+   { 30142, 0x00008058 }, /* GL_RGBA8 */
+   { 30151, 0x00008058 }, /* GL_RGBA8_EXT */
+   { 30164, 0x00008F97 }, /* GL_RGBA8_SNORM */
+   { 30179, 0x000083A4 }, /* GL_RGBA_DXT5_S3TC */
+   { 30197, 0x00000C31 }, /* GL_RGBA_MODE */
+   { 30210, 0x000083A2 }, /* GL_RGBA_S3TC */
+   { 30223, 0x00008F93 }, /* GL_RGBA_SNORM */
+   { 30237, 0x000083A0 }, /* GL_RGB_S3TC */
+   { 30249, 0x00008573 }, /* GL_RGB_SCALE */
+   { 30262, 0x00008573 }, /* GL_RGB_SCALE_ARB */
+   { 30279, 0x00008573 }, /* GL_RGB_SCALE_EXT */
+   { 30296, 0x00000407 }, /* GL_RIGHT */
+   { 30305, 0x00002000 }, /* GL_S */
+   { 30310, 0x00008B5D }, /* GL_SAMPLER_1D */
+   { 30324, 0x00008B61 }, /* GL_SAMPLER_1D_SHADOW */
+   { 30345, 0x00008B5E }, /* GL_SAMPLER_2D */
+   { 30359, 0x00008B62 }, /* GL_SAMPLER_2D_SHADOW */
+   { 30380, 0x00008B5F }, /* GL_SAMPLER_3D */
+   { 30394, 0x00008B60 }, /* GL_SAMPLER_CUBE */
+   { 30410, 0x000080A9 }, /* GL_SAMPLES */
+   { 30421, 0x000086B4 }, /* GL_SAMPLES_3DFX */
+   { 30437, 0x000080A9 }, /* GL_SAMPLES_ARB */
+   { 30452, 0x00008914 }, /* GL_SAMPLES_PASSED */
+   { 30470, 0x00008914 }, /* GL_SAMPLES_PASSED_ARB */
+   { 30492, 0x0000809E }, /* GL_SAMPLE_ALPHA_TO_COVERAGE */
+   { 30520, 0x0000809E }, /* GL_SAMPLE_ALPHA_TO_COVERAGE_ARB */
+   { 30552, 0x0000809F }, /* GL_SAMPLE_ALPHA_TO_ONE */
+   { 30575, 0x0000809F }, /* GL_SAMPLE_ALPHA_TO_ONE_ARB */
+   { 30602, 0x000080A8 }, /* GL_SAMPLE_BUFFERS */
+   { 30620, 0x000086B3 }, /* GL_SAMPLE_BUFFERS_3DFX */
+   { 30643, 0x000080A8 }, /* GL_SAMPLE_BUFFERS_ARB */
+   { 30665, 0x000080A0 }, /* GL_SAMPLE_COVERAGE */
+   { 30684, 0x000080A0 }, /* GL_SAMPLE_COVERAGE_ARB */
+   { 30707, 0x000080AB }, /* GL_SAMPLE_COVERAGE_INVERT */
+   { 30733, 0x000080AB }, /* GL_SAMPLE_COVERAGE_INVERT_ARB */
+   { 30763, 0x000080AA }, /* GL_SAMPLE_COVERAGE_VALUE */
+   { 30788, 0x000080AA }, /* GL_SAMPLE_COVERAGE_VALUE_ARB */
+   { 30817, 0x00080000 }, /* GL_SCISSOR_BIT */
+   { 30832, 0x00000C10 }, /* GL_SCISSOR_BOX */
+   { 30847, 0x00000C11 }, /* GL_SCISSOR_TEST */
+   { 30863, 0x0000845E }, /* GL_SECONDARY_COLOR_ARRAY */
+   { 30888, 0x0000889C }, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING */
+   { 30928, 0x0000889C }, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB */
+   { 30972, 0x0000845D }, /* GL_SECONDARY_COLOR_ARRAY_POINTER */
+   { 31005, 0x0000845A }, /* GL_SECONDARY_COLOR_ARRAY_SIZE */
+   { 31035, 0x0000845C }, /* GL_SECONDARY_COLOR_ARRAY_STRIDE */
+   { 31067, 0x0000845B }, /* GL_SECONDARY_COLOR_ARRAY_TYPE */
+   { 31097, 0x00001C02 }, /* GL_SELECT */
+   { 31107, 0x00000DF3 }, /* GL_SELECTION_BUFFER_POINTER */
+   { 31135, 0x00000DF4 }, /* GL_SELECTION_BUFFER_SIZE */
+   { 31160, 0x00008012 }, /* GL_SEPARABLE_2D */
+   { 31176, 0x000081FA }, /* GL_SEPARATE_SPECULAR_COLOR */
+   { 31203, 0x000081FA }, /* GL_SEPARATE_SPECULAR_COLOR_EXT */
+   { 31234, 0x0000150F }, /* GL_SET */
+   { 31241, 0x00008B48 }, /* GL_SHADER_OBJECT_ARB */
+   { 31262, 0x00008B88 }, /* GL_SHADER_SOURCE_LENGTH */
+   { 31286, 0x00008B4F }, /* GL_SHADER_TYPE */
+   { 31301, 0x00000B54 }, /* GL_SHADE_MODEL */
+   { 31316, 0x00008B8C }, /* GL_SHADING_LANGUAGE_VERSION */
+   { 31344, 0x000080BF }, /* GL_SHADOW_AMBIENT_SGIX */
+   { 31367, 0x000081FB }, /* GL_SHARED_TEXTURE_PALETTE_EXT */
+   { 31397, 0x00001601 }, /* GL_SHININESS */
+   { 31410, 0x00001402 }, /* GL_SHORT */
+   { 31419, 0x00009119 }, /* GL_SIGNALED */
+   { 31431, 0x00008F9C }, /* GL_SIGNED_NORMALIZED */
+   { 31452, 0x000081F9 }, /* GL_SINGLE_COLOR */
+   { 31468, 0x000081F9 }, /* GL_SINGLE_COLOR_EXT */
+   { 31488, 0x000085CC }, /* GL_SLICE_ACCUM_SUN */
+   { 31507, 0x00008C46 }, /* GL_SLUMINANCE */
+   { 31521, 0x00008C47 }, /* GL_SLUMINANCE8 */
+   { 31536, 0x00008C45 }, /* GL_SLUMINANCE8_ALPHA8 */
+   { 31558, 0x00008C44 }, /* GL_SLUMINANCE_ALPHA */
+   { 31578, 0x00001D01 }, /* GL_SMOOTH */
+   { 31588, 0x00000B23 }, /* GL_SMOOTH_LINE_WIDTH_GRANULARITY */
+   { 31621, 0x00000B22 }, /* GL_SMOOTH_LINE_WIDTH_RANGE */
+   { 31648, 0x00000B13 }, /* GL_SMOOTH_POINT_SIZE_GRANULARITY */
+   { 31681, 0x00000B12 }, /* GL_SMOOTH_POINT_SIZE_RANGE */
+   { 31708, 0x00008588 }, /* GL_SOURCE0_ALPHA */
+   { 31725, 0x00008588 }, /* GL_SOURCE0_ALPHA_ARB */
+   { 31746, 0x00008588 }, /* GL_SOURCE0_ALPHA_EXT */
+   { 31767, 0x00008580 }, /* GL_SOURCE0_RGB */
+   { 31782, 0x00008580 }, /* GL_SOURCE0_RGB_ARB */
+   { 31801, 0x00008580 }, /* GL_SOURCE0_RGB_EXT */
+   { 31820, 0x00008589 }, /* GL_SOURCE1_ALPHA */
+   { 31837, 0x00008589 }, /* GL_SOURCE1_ALPHA_ARB */
+   { 31858, 0x00008589 }, /* GL_SOURCE1_ALPHA_EXT */
+   { 31879, 0x00008581 }, /* GL_SOURCE1_RGB */
+   { 31894, 0x00008581 }, /* GL_SOURCE1_RGB_ARB */
+   { 31913, 0x00008581 }, /* GL_SOURCE1_RGB_EXT */
+   { 31932, 0x0000858A }, /* GL_SOURCE2_ALPHA */
+   { 31949, 0x0000858A }, /* GL_SOURCE2_ALPHA_ARB */
+   { 31970, 0x0000858A }, /* GL_SOURCE2_ALPHA_EXT */
+   { 31991, 0x00008582 }, /* GL_SOURCE2_RGB */
+   { 32006, 0x00008582 }, /* GL_SOURCE2_RGB_ARB */
+   { 32025, 0x00008582 }, /* GL_SOURCE2_RGB_EXT */
+   { 32044, 0x0000858B }, /* GL_SOURCE3_ALPHA_NV */
+   { 32064, 0x00008583 }, /* GL_SOURCE3_RGB_NV */
+   { 32082, 0x00001202 }, /* GL_SPECULAR */
+   { 32094, 0x00002402 }, /* GL_SPHERE_MAP */
+   { 32108, 0x00001206 }, /* GL_SPOT_CUTOFF */
+   { 32123, 0x00001204 }, /* GL_SPOT_DIRECTION */
+   { 32141, 0x00001205 }, /* GL_SPOT_EXPONENT */
+   { 32158, 0x00008588 }, /* GL_SRC0_ALPHA */
+   { 32172, 0x00008580 }, /* GL_SRC0_RGB */
+   { 32184, 0x00008589 }, /* GL_SRC1_ALPHA */
+   { 32198, 0x00008581 }, /* GL_SRC1_RGB */
+   { 32210, 0x0000858A }, /* GL_SRC2_ALPHA */
+   { 32224, 0x00008582 }, /* GL_SRC2_RGB */
+   { 32236, 0x00000302 }, /* GL_SRC_ALPHA */
+   { 32249, 0x00000308 }, /* GL_SRC_ALPHA_SATURATE */
+   { 32271, 0x00000300 }, /* GL_SRC_COLOR */
+   { 32284, 0x00008C40 }, /* GL_SRGB */
+   { 32292, 0x00008C41 }, /* GL_SRGB8 */
+   { 32301, 0x00008C43 }, /* GL_SRGB8_ALPHA8 */
+   { 32317, 0x00008C42 }, /* GL_SRGB_ALPHA */
+   { 32331, 0x00000503 }, /* GL_STACK_OVERFLOW */
+   { 32349, 0x00000504 }, /* GL_STACK_UNDERFLOW */
+   { 32368, 0x000088E6 }, /* GL_STATIC_COPY */
+   { 32383, 0x000088E6 }, /* GL_STATIC_COPY_ARB */
+   { 32402, 0x000088E4 }, /* GL_STATIC_DRAW */
+   { 32417, 0x000088E4 }, /* GL_STATIC_DRAW_ARB */
+   { 32436, 0x000088E5 }, /* GL_STATIC_READ */
+   { 32451, 0x000088E5 }, /* GL_STATIC_READ_ARB */
+   { 32470, 0x00001802 }, /* GL_STENCIL */
+   { 32481, 0x00008D20 }, /* GL_STENCIL_ATTACHMENT */
+   { 32503, 0x00008D20 }, /* GL_STENCIL_ATTACHMENT_EXT */
+   { 32529, 0x00008801 }, /* GL_STENCIL_BACK_FAIL */
+   { 32550, 0x00008801 }, /* GL_STENCIL_BACK_FAIL_ATI */
+   { 32575, 0x00008800 }, /* GL_STENCIL_BACK_FUNC */
+   { 32596, 0x00008800 }, /* GL_STENCIL_BACK_FUNC_ATI */
+   { 32621, 0x00008802 }, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL */
+   { 32653, 0x00008802 }, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI */
+   { 32689, 0x00008803 }, /* GL_STENCIL_BACK_PASS_DEPTH_PASS */
+   { 32721, 0x00008803 }, /* GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI */
+   { 32757, 0x00008CA3 }, /* GL_STENCIL_BACK_REF */
+   { 32777, 0x00008CA4 }, /* GL_STENCIL_BACK_VALUE_MASK */
+   { 32804, 0x00008CA5 }, /* GL_STENCIL_BACK_WRITEMASK */
+   { 32830, 0x00000D57 }, /* GL_STENCIL_BITS */
+   { 32846, 0x00000400 }, /* GL_STENCIL_BUFFER_BIT */
+   { 32868, 0x00000B91 }, /* GL_STENCIL_CLEAR_VALUE */
+   { 32891, 0x00000B94 }, /* GL_STENCIL_FAIL */
+   { 32907, 0x00000B92 }, /* GL_STENCIL_FUNC */
+   { 32923, 0x00001901 }, /* GL_STENCIL_INDEX */
+   { 32940, 0x00008D46 }, /* GL_STENCIL_INDEX1 */
+   { 32958, 0x00008D49 }, /* GL_STENCIL_INDEX16 */
+   { 32977, 0x00008D49 }, /* GL_STENCIL_INDEX16_EXT */
+   { 33000, 0x00008D46 }, /* GL_STENCIL_INDEX1_EXT */
+   { 33022, 0x00008D47 }, /* GL_STENCIL_INDEX4 */
+   { 33040, 0x00008D47 }, /* GL_STENCIL_INDEX4_EXT */
+   { 33062, 0x00008D48 }, /* GL_STENCIL_INDEX8 */
+   { 33080, 0x00008D48 }, /* GL_STENCIL_INDEX8_EXT */
+   { 33102, 0x00008D45 }, /* GL_STENCIL_INDEX_EXT */
+   { 33123, 0x00000B95 }, /* GL_STENCIL_PASS_DEPTH_FAIL */
+   { 33150, 0x00000B96 }, /* GL_STENCIL_PASS_DEPTH_PASS */
+   { 33177, 0x00000B97 }, /* GL_STENCIL_REF */
+   { 33192, 0x00000B90 }, /* GL_STENCIL_TEST */
+   { 33208, 0x00008910 }, /* GL_STENCIL_TEST_TWO_SIDE_EXT */
+   { 33237, 0x00000B93 }, /* GL_STENCIL_VALUE_MASK */
+   { 33259, 0x00000B98 }, /* GL_STENCIL_WRITEMASK */
+   { 33280, 0x00000C33 }, /* GL_STEREO */
+   { 33290, 0x000085BE }, /* GL_STORAGE_CACHED_APPLE */
+   { 33314, 0x000085BD }, /* GL_STORAGE_PRIVATE_APPLE */
+   { 33339, 0x000085BF }, /* GL_STORAGE_SHARED_APPLE */
+   { 33363, 0x000088E2 }, /* GL_STREAM_COPY */
+   { 33378, 0x000088E2 }, /* GL_STREAM_COPY_ARB */
+   { 33397, 0x000088E0 }, /* GL_STREAM_DRAW */
+   { 33412, 0x000088E0 }, /* GL_STREAM_DRAW_ARB */
+   { 33431, 0x000088E1 }, /* GL_STREAM_READ */
+   { 33446, 0x000088E1 }, /* GL_STREAM_READ_ARB */
+   { 33465, 0x00000D50 }, /* GL_SUBPIXEL_BITS */
+   { 33482, 0x000084E7 }, /* GL_SUBTRACT */
+   { 33494, 0x000084E7 }, /* GL_SUBTRACT_ARB */
+   { 33510, 0x00009113 }, /* GL_SYNC_CONDITION */
+   { 33528, 0x00009116 }, /* GL_SYNC_FENCE */
+   { 33542, 0x00009115 }, /* GL_SYNC_FLAGS */
+   { 33556, 0x00000001 }, /* GL_SYNC_FLUSH_COMMANDS_BIT */
+   { 33583, 0x00009117 }, /* GL_SYNC_GPU_COMMANDS_COMPLETE */
+   { 33613, 0x00009114 }, /* GL_SYNC_STATUS */
+   { 33628, 0x00002001 }, /* GL_T */
+   { 33633, 0x00002A2A }, /* GL_T2F_C3F_V3F */
+   { 33648, 0x00002A2C }, /* GL_T2F_C4F_N3F_V3F */
+   { 33667, 0x00002A29 }, /* GL_T2F_C4UB_V3F */
+   { 33683, 0x00002A2B }, /* GL_T2F_N3F_V3F */
+   { 33698, 0x00002A27 }, /* GL_T2F_V3F */
+   { 33709, 0x00002A2D }, /* GL_T4F_C4F_N3F_V4F */
+   { 33728, 0x00002A28 }, /* GL_T4F_V4F */
+   { 33739, 0x00008031 }, /* GL_TABLE_TOO_LARGE_EXT */
+   { 33762, 0x00001702 }, /* GL_TEXTURE */
+   { 33773, 0x000084C0 }, /* GL_TEXTURE0 */
+   { 33785, 0x000084C0 }, /* GL_TEXTURE0_ARB */
+   { 33801, 0x000084C1 }, /* GL_TEXTURE1 */
+   { 33813, 0x000084CA }, /* GL_TEXTURE10 */
+   { 33826, 0x000084CA }, /* GL_TEXTURE10_ARB */
+   { 33843, 0x000084CB }, /* GL_TEXTURE11 */
+   { 33856, 0x000084CB }, /* GL_TEXTURE11_ARB */
+   { 33873, 0x000084CC }, /* GL_TEXTURE12 */
+   { 33886, 0x000084CC }, /* GL_TEXTURE12_ARB */
+   { 33903, 0x000084CD }, /* GL_TEXTURE13 */
+   { 33916, 0x000084CD }, /* GL_TEXTURE13_ARB */
+   { 33933, 0x000084CE }, /* GL_TEXTURE14 */
+   { 33946, 0x000084CE }, /* GL_TEXTURE14_ARB */
+   { 33963, 0x000084CF }, /* GL_TEXTURE15 */
+   { 33976, 0x000084CF }, /* GL_TEXTURE15_ARB */
+   { 33993, 0x000084D0 }, /* GL_TEXTURE16 */
+   { 34006, 0x000084D0 }, /* GL_TEXTURE16_ARB */
+   { 34023, 0x000084D1 }, /* GL_TEXTURE17 */
+   { 34036, 0x000084D1 }, /* GL_TEXTURE17_ARB */
+   { 34053, 0x000084D2 }, /* GL_TEXTURE18 */
+   { 34066, 0x000084D2 }, /* GL_TEXTURE18_ARB */
+   { 34083, 0x000084D3 }, /* GL_TEXTURE19 */
+   { 34096, 0x000084D3 }, /* GL_TEXTURE19_ARB */
+   { 34113, 0x000084C1 }, /* GL_TEXTURE1_ARB */
+   { 34129, 0x000084C2 }, /* GL_TEXTURE2 */
+   { 34141, 0x000084D4 }, /* GL_TEXTURE20 */
+   { 34154, 0x000084D4 }, /* GL_TEXTURE20_ARB */
+   { 34171, 0x000084D5 }, /* GL_TEXTURE21 */
+   { 34184, 0x000084D5 }, /* GL_TEXTURE21_ARB */
+   { 34201, 0x000084D6 }, /* GL_TEXTURE22 */
+   { 34214, 0x000084D6 }, /* GL_TEXTURE22_ARB */
+   { 34231, 0x000084D7 }, /* GL_TEXTURE23 */
+   { 34244, 0x000084D7 }, /* GL_TEXTURE23_ARB */
+   { 34261, 0x000084D8 }, /* GL_TEXTURE24 */
+   { 34274, 0x000084D8 }, /* GL_TEXTURE24_ARB */
+   { 34291, 0x000084D9 }, /* GL_TEXTURE25 */
+   { 34304, 0x000084D9 }, /* GL_TEXTURE25_ARB */
+   { 34321, 0x000084DA }, /* GL_TEXTURE26 */
+   { 34334, 0x000084DA }, /* GL_TEXTURE26_ARB */
+   { 34351, 0x000084DB }, /* GL_TEXTURE27 */
+   { 34364, 0x000084DB }, /* GL_TEXTURE27_ARB */
+   { 34381, 0x000084DC }, /* GL_TEXTURE28 */
+   { 34394, 0x000084DC }, /* GL_TEXTURE28_ARB */
+   { 34411, 0x000084DD }, /* GL_TEXTURE29 */
+   { 34424, 0x000084DD }, /* GL_TEXTURE29_ARB */
+   { 34441, 0x000084C2 }, /* GL_TEXTURE2_ARB */
+   { 34457, 0x000084C3 }, /* GL_TEXTURE3 */
+   { 34469, 0x000084DE }, /* GL_TEXTURE30 */
+   { 34482, 0x000084DE }, /* GL_TEXTURE30_ARB */
+   { 34499, 0x000084DF }, /* GL_TEXTURE31 */
+   { 34512, 0x000084DF }, /* GL_TEXTURE31_ARB */
+   { 34529, 0x000084C3 }, /* GL_TEXTURE3_ARB */
+   { 34545, 0x000084C4 }, /* GL_TEXTURE4 */
+   { 34557, 0x000084C4 }, /* GL_TEXTURE4_ARB */
+   { 34573, 0x000084C5 }, /* GL_TEXTURE5 */
+   { 34585, 0x000084C5 }, /* GL_TEXTURE5_ARB */
+   { 34601, 0x000084C6 }, /* GL_TEXTURE6 */
+   { 34613, 0x000084C6 }, /* GL_TEXTURE6_ARB */
+   { 34629, 0x000084C7 }, /* GL_TEXTURE7 */
+   { 34641, 0x000084C7 }, /* GL_TEXTURE7_ARB */
+   { 34657, 0x000084C8 }, /* GL_TEXTURE8 */
+   { 34669, 0x000084C8 }, /* GL_TEXTURE8_ARB */
+   { 34685, 0x000084C9 }, /* GL_TEXTURE9 */
+   { 34697, 0x000084C9 }, /* GL_TEXTURE9_ARB */
+   { 34713, 0x00000DE0 }, /* GL_TEXTURE_1D */
+   { 34727, 0x00008C18 }, /* GL_TEXTURE_1D_ARRAY_EXT */
+   { 34751, 0x00000DE1 }, /* GL_TEXTURE_2D */
+   { 34765, 0x00008C1A }, /* GL_TEXTURE_2D_ARRAY_EXT */
+   { 34789, 0x0000806F }, /* GL_TEXTURE_3D */
+   { 34803, 0x0000805F }, /* GL_TEXTURE_ALPHA_SIZE */
+   { 34825, 0x0000805F }, /* GL_TEXTURE_ALPHA_SIZE_EXT */
+   { 34851, 0x0000813C }, /* GL_TEXTURE_BASE_LEVEL */
+   { 34873, 0x00008068 }, /* GL_TEXTURE_BINDING_1D */
+   { 34895, 0x00008C1C }, /* GL_TEXTURE_BINDING_1D_ARRAY_EXT */
+   { 34927, 0x00008069 }, /* GL_TEXTURE_BINDING_2D */
+   { 34949, 0x00008C1D }, /* GL_TEXTURE_BINDING_2D_ARRAY_EXT */
+   { 34981, 0x0000806A }, /* GL_TEXTURE_BINDING_3D */
+   { 35003, 0x00008514 }, /* GL_TEXTURE_BINDING_CUBE_MAP */
+   { 35031, 0x00008514 }, /* GL_TEXTURE_BINDING_CUBE_MAP_ARB */
+   { 35063, 0x000084F6 }, /* GL_TEXTURE_BINDING_RECTANGLE_ARB */
+   { 35096, 0x000084F6 }, /* GL_TEXTURE_BINDING_RECTANGLE_NV */
+   { 35128, 0x00040000 }, /* GL_TEXTURE_BIT */
+   { 35143, 0x0000805E }, /* GL_TEXTURE_BLUE_SIZE */
+   { 35164, 0x0000805E }, /* GL_TEXTURE_BLUE_SIZE_EXT */
+   { 35189, 0x00001005 }, /* GL_TEXTURE_BORDER */
+   { 35207, 0x00001004 }, /* GL_TEXTURE_BORDER_COLOR */
+   { 35231, 0x00008171 }, /* GL_TEXTURE_CLIPMAP_CENTER_SGIX */
+   { 35262, 0x00008176 }, /* GL_TEXTURE_CLIPMAP_DEPTH_SGIX */
+   { 35292, 0x00008172 }, /* GL_TEXTURE_CLIPMAP_FRAME_SGIX */
+   { 35322, 0x00008175 }, /* GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX */
+   { 35357, 0x00008173 }, /* GL_TEXTURE_CLIPMAP_OFFSET_SGIX */
+   { 35388, 0x00008174 }, /* GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX */
+   { 35426, 0x000080BC }, /* GL_TEXTURE_COLOR_TABLE_SGI */
+   { 35453, 0x000081EF }, /* GL_TEXTURE_COLOR_WRITEMASK_SGIS */
+   { 35485, 0x000080BF }, /* GL_TEXTURE_COMPARE_FAIL_VALUE_ARB */
+   { 35519, 0x0000884D }, /* GL_TEXTURE_COMPARE_FUNC */
+   { 35543, 0x0000884D }, /* GL_TEXTURE_COMPARE_FUNC_ARB */
+   { 35571, 0x0000884C }, /* GL_TEXTURE_COMPARE_MODE */
+   { 35595, 0x0000884C }, /* GL_TEXTURE_COMPARE_MODE_ARB */
+   { 35623, 0x0000819B }, /* GL_TEXTURE_COMPARE_OPERATOR_SGIX */
+   { 35656, 0x0000819A }, /* GL_TEXTURE_COMPARE_SGIX */
+   { 35680, 0x00001003 }, /* GL_TEXTURE_COMPONENTS */
+   { 35702, 0x000086A1 }, /* GL_TEXTURE_COMPRESSED */
+   { 35724, 0x000086A1 }, /* GL_TEXTURE_COMPRESSED_ARB */
+   { 35750, 0x000086A3 }, /* GL_TEXTURE_COMPRESSED_FORMATS_ARB */
+   { 35784, 0x000086A0 }, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE */
+   { 35817, 0x000086A0 }, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB */
+   { 35854, 0x000084EF }, /* GL_TEXTURE_COMPRESSION_HINT */
+   { 35882, 0x000084EF }, /* GL_TEXTURE_COMPRESSION_HINT_ARB */
+   { 35914, 0x00008078 }, /* GL_TEXTURE_COORD_ARRAY */
+   { 35937, 0x0000889A }, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING */
+   { 35975, 0x0000889A }, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB */
+   { 36017, 0x00008092 }, /* GL_TEXTURE_COORD_ARRAY_POINTER */
+   { 36048, 0x00008088 }, /* GL_TEXTURE_COORD_ARRAY_SIZE */
+   { 36076, 0x0000808A }, /* GL_TEXTURE_COORD_ARRAY_STRIDE */
+   { 36106, 0x00008089 }, /* GL_TEXTURE_COORD_ARRAY_TYPE */
+   { 36134, 0x00008513 }, /* GL_TEXTURE_CUBE_MAP */
+   { 36154, 0x00008513 }, /* GL_TEXTURE_CUBE_MAP_ARB */
+   { 36178, 0x00008516 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X */
+   { 36209, 0x00008516 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB */
+   { 36244, 0x00008518 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y */
+   { 36275, 0x00008518 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB */
+   { 36310, 0x0000851A }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z */
+   { 36341, 0x0000851A }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB */
+   { 36376, 0x00008515 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X */
+   { 36407, 0x00008515 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB */
+   { 36442, 0x00008517 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y */
+   { 36473, 0x00008517 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB */
+   { 36508, 0x00008519 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z */
+   { 36539, 0x00008519 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB */
+   { 36574, 0x000088F4 }, /* GL_TEXTURE_CUBE_MAP_SEAMLESS */
+   { 36603, 0x00008071 }, /* GL_TEXTURE_DEPTH */
+   { 36620, 0x0000884A }, /* GL_TEXTURE_DEPTH_SIZE */
+   { 36642, 0x0000884A }, /* GL_TEXTURE_DEPTH_SIZE_ARB */
+   { 36668, 0x00002300 }, /* GL_TEXTURE_ENV */
+   { 36683, 0x00002201 }, /* GL_TEXTURE_ENV_COLOR */
+   { 36704, 0x00002200 }, /* GL_TEXTURE_ENV_MODE */
+   { 36724, 0x00008500 }, /* GL_TEXTURE_FILTER_CONTROL */
+   { 36750, 0x00002500 }, /* GL_TEXTURE_GEN_MODE */
+   { 36770, 0x00000C63 }, /* GL_TEXTURE_GEN_Q */
+   { 36787, 0x00000C62 }, /* GL_TEXTURE_GEN_R */
+   { 36804, 0x00000C60 }, /* GL_TEXTURE_GEN_S */
+   { 36821, 0x00000C61 }, /* GL_TEXTURE_GEN_T */
+   { 36838, 0x0000819D }, /* GL_TEXTURE_GEQUAL_R_SGIX */
+   { 36863, 0x0000805D }, /* GL_TEXTURE_GREEN_SIZE */
+   { 36885, 0x0000805D }, /* GL_TEXTURE_GREEN_SIZE_EXT */
+   { 36911, 0x00001001 }, /* GL_TEXTURE_HEIGHT */
+   { 36929, 0x000080ED }, /* GL_TEXTURE_INDEX_SIZE_EXT */
+   { 36955, 0x00008061 }, /* GL_TEXTURE_INTENSITY_SIZE */
+   { 36981, 0x00008061 }, /* GL_TEXTURE_INTENSITY_SIZE_EXT */
+   { 37011, 0x00001003 }, /* GL_TEXTURE_INTERNAL_FORMAT */
+   { 37038, 0x0000819C }, /* GL_TEXTURE_LEQUAL_R_SGIX */
+   { 37063, 0x00008501 }, /* GL_TEXTURE_LOD_BIAS */
+   { 37083, 0x00008501 }, /* GL_TEXTURE_LOD_BIAS_EXT */
+   { 37107, 0x00008190 }, /* GL_TEXTURE_LOD_BIAS_R_SGIX */
+   { 37134, 0x0000818E }, /* GL_TEXTURE_LOD_BIAS_S_SGIX */
+   { 37161, 0x0000818F }, /* GL_TEXTURE_LOD_BIAS_T_SGIX */
+   { 37188, 0x00008060 }, /* GL_TEXTURE_LUMINANCE_SIZE */
+   { 37214, 0x00008060 }, /* GL_TEXTURE_LUMINANCE_SIZE_EXT */
+   { 37244, 0x00002800 }, /* GL_TEXTURE_MAG_FILTER */
+   { 37266, 0x00000BA8 }, /* GL_TEXTURE_MATRIX */
+   { 37284, 0x000084FE }, /* GL_TEXTURE_MAX_ANISOTROPY_EXT */
+   { 37314, 0x0000836B }, /* GL_TEXTURE_MAX_CLAMP_R_SGIX */
+   { 37342, 0x00008369 }, /* GL_TEXTURE_MAX_CLAMP_S_SGIX */
+   { 37370, 0x0000836A }, /* GL_TEXTURE_MAX_CLAMP_T_SGIX */
+   { 37398, 0x0000813D }, /* GL_TEXTURE_MAX_LEVEL */
+   { 37419, 0x0000813B }, /* GL_TEXTURE_MAX_LOD */
+   { 37438, 0x00002801 }, /* GL_TEXTURE_MIN_FILTER */
+   { 37460, 0x0000813A }, /* GL_TEXTURE_MIN_LOD */
+   { 37479, 0x00008066 }, /* GL_TEXTURE_PRIORITY */
+   { 37499, 0x000085B7 }, /* GL_TEXTURE_RANGE_LENGTH_APPLE */
+   { 37529, 0x000085B8 }, /* GL_TEXTURE_RANGE_POINTER_APPLE */
+   { 37560, 0x000084F5 }, /* GL_TEXTURE_RECTANGLE_ARB */
+   { 37585, 0x000084F5 }, /* GL_TEXTURE_RECTANGLE_NV */
+   { 37609, 0x0000805C }, /* GL_TEXTURE_RED_SIZE */
+   { 37629, 0x0000805C }, /* GL_TEXTURE_RED_SIZE_EXT */
+   { 37653, 0x00008067 }, /* GL_TEXTURE_RESIDENT */
+   { 37673, 0x00000BA5 }, /* GL_TEXTURE_STACK_DEPTH */
+   { 37696, 0x000088F1 }, /* GL_TEXTURE_STENCIL_SIZE */
+   { 37720, 0x000088F1 }, /* GL_TEXTURE_STENCIL_SIZE_EXT */
+   { 37748, 0x000085BC }, /* GL_TEXTURE_STORAGE_HINT_APPLE */
+   { 37778, 0x00008065 }, /* GL_TEXTURE_TOO_LARGE_EXT */
+   { 37803, 0x0000888F }, /* GL_TEXTURE_UNSIGNED_REMAP_MODE_NV */
+   { 37837, 0x00001000 }, /* GL_TEXTURE_WIDTH */
+   { 37854, 0x00008072 }, /* GL_TEXTURE_WRAP_R */
+   { 37872, 0x00002802 }, /* GL_TEXTURE_WRAP_S */
+   { 37890, 0x00002803 }, /* GL_TEXTURE_WRAP_T */
+   { 37908, 0x0000911B }, /* GL_TIMEOUT_EXPIRED */
+   { 37927, 0x000088BF }, /* GL_TIME_ELAPSED_EXT */
+   { 37947, 0x00008648 }, /* GL_TRACK_MATRIX_NV */
+   { 37966, 0x00008649 }, /* GL_TRACK_MATRIX_TRANSFORM_NV */
+   { 37995, 0x00001000 }, /* GL_TRANSFORM_BIT */
+   { 38012, 0x000084E6 }, /* GL_TRANSPOSE_COLOR_MATRIX */
+   { 38038, 0x000084E6 }, /* GL_TRANSPOSE_COLOR_MATRIX_ARB */
+   { 38068, 0x000088B7 }, /* GL_TRANSPOSE_CURRENT_MATRIX_ARB */
+   { 38100, 0x000084E3 }, /* GL_TRANSPOSE_MODELVIEW_MATRIX */
+   { 38130, 0x000084E3 }, /* GL_TRANSPOSE_MODELVIEW_MATRIX_ARB */
+   { 38164, 0x0000862C }, /* GL_TRANSPOSE_NV */
+   { 38180, 0x000084E4 }, /* GL_TRANSPOSE_PROJECTION_MATRIX */
+   { 38211, 0x000084E4 }, /* GL_TRANSPOSE_PROJECTION_MATRIX_ARB */
+   { 38246, 0x000084E5 }, /* GL_TRANSPOSE_TEXTURE_MATRIX */
+   { 38274, 0x000084E5 }, /* GL_TRANSPOSE_TEXTURE_MATRIX_ARB */
+   { 38306, 0x00000004 }, /* GL_TRIANGLES */
+   { 38319, 0x00000006 }, /* GL_TRIANGLE_FAN */
+   { 38335, 0x00008615 }, /* GL_TRIANGLE_MESH_SUN */
+   { 38356, 0x00000005 }, /* GL_TRIANGLE_STRIP */
+   { 38374, 0x00000001 }, /* GL_TRUE */
+   { 38382, 0x00008A1C }, /* GL_UNDEFINED_APPLE */
+   { 38401, 0x00000CF5 }, /* GL_UNPACK_ALIGNMENT */
+   { 38421, 0x0000806E }, /* GL_UNPACK_IMAGE_HEIGHT */
+   { 38444, 0x00000CF1 }, /* GL_UNPACK_LSB_FIRST */
+   { 38464, 0x00000CF2 }, /* GL_UNPACK_ROW_LENGTH */
+   { 38485, 0x0000806D }, /* GL_UNPACK_SKIP_IMAGES */
+   { 38507, 0x00000CF4 }, /* GL_UNPACK_SKIP_PIXELS */
+   { 38529, 0x00000CF3 }, /* GL_UNPACK_SKIP_ROWS */
+   { 38549, 0x00000CF0 }, /* GL_UNPACK_SWAP_BYTES */
+   { 38570, 0x00009118 }, /* GL_UNSIGNALED */
+   { 38584, 0x00001401 }, /* GL_UNSIGNED_BYTE */
+   { 38601, 0x00008362 }, /* GL_UNSIGNED_BYTE_2_3_3_REV */
+   { 38628, 0x00008032 }, /* GL_UNSIGNED_BYTE_3_3_2 */
+   { 38651, 0x00001405 }, /* GL_UNSIGNED_INT */
+   { 38667, 0x00008036 }, /* GL_UNSIGNED_INT_10_10_10_2 */
+   { 38694, 0x000084FA }, /* GL_UNSIGNED_INT_24_8 */
+   { 38715, 0x000084FA }, /* GL_UNSIGNED_INT_24_8_EXT */
+   { 38740, 0x000084FA }, /* GL_UNSIGNED_INT_24_8_NV */
+   { 38764, 0x00008368 }, /* GL_UNSIGNED_INT_2_10_10_10_REV */
+   { 38795, 0x00008035 }, /* GL_UNSIGNED_INT_8_8_8_8 */
+   { 38819, 0x00008367 }, /* GL_UNSIGNED_INT_8_8_8_8_REV */
+   { 38847, 0x00008C17 }, /* GL_UNSIGNED_NORMALIZED */
+   { 38870, 0x00001403 }, /* GL_UNSIGNED_SHORT */
+   { 38888, 0x00008366 }, /* GL_UNSIGNED_SHORT_1_5_5_5_REV */
+   { 38918, 0x00008033 }, /* GL_UNSIGNED_SHORT_4_4_4_4 */
+   { 38944, 0x00008365 }, /* GL_UNSIGNED_SHORT_4_4_4_4_REV */
+   { 38974, 0x00008034 }, /* GL_UNSIGNED_SHORT_5_5_5_1 */
+   { 39000, 0x00008363 }, /* GL_UNSIGNED_SHORT_5_6_5 */
+   { 39024, 0x00008364 }, /* GL_UNSIGNED_SHORT_5_6_5_REV */
+   { 39052, 0x000085BA }, /* GL_UNSIGNED_SHORT_8_8_APPLE */
+   { 39080, 0x000085BA }, /* GL_UNSIGNED_SHORT_8_8_MESA */
+   { 39107, 0x000085BB }, /* GL_UNSIGNED_SHORT_8_8_REV_APPLE */
+   { 39139, 0x000085BB }, /* GL_UNSIGNED_SHORT_8_8_REV_MESA */
+   { 39170, 0x00008CA2 }, /* GL_UPPER_LEFT */
+   { 39184, 0x00002A20 }, /* GL_V2F */
+   { 39191, 0x00002A21 }, /* GL_V3F */
+   { 39198, 0x00008B83 }, /* GL_VALIDATE_STATUS */
+   { 39217, 0x00001F00 }, /* GL_VENDOR */
+   { 39227, 0x00001F02 }, /* GL_VERSION */
+   { 39238, 0x00008074 }, /* GL_VERTEX_ARRAY */
+   { 39254, 0x000085B5 }, /* GL_VERTEX_ARRAY_BINDING */
+   { 39278, 0x000085B5 }, /* GL_VERTEX_ARRAY_BINDING_APPLE */
+   { 39308, 0x00008896 }, /* GL_VERTEX_ARRAY_BUFFER_BINDING */
+   { 39339, 0x00008896 }, /* GL_VERTEX_ARRAY_BUFFER_BINDING_ARB */
+   { 39374, 0x0000808E }, /* GL_VERTEX_ARRAY_POINTER */
+   { 39398, 0x0000807A }, /* GL_VERTEX_ARRAY_SIZE */
+   { 39419, 0x0000807C }, /* GL_VERTEX_ARRAY_STRIDE */
+   { 39442, 0x0000807B }, /* GL_VERTEX_ARRAY_TYPE */
+   { 39463, 0x00008650 }, /* GL_VERTEX_ATTRIB_ARRAY0_NV */
+   { 39490, 0x0000865A }, /* GL_VERTEX_ATTRIB_ARRAY10_NV */
+   { 39518, 0x0000865B }, /* GL_VERTEX_ATTRIB_ARRAY11_NV */
+   { 39546, 0x0000865C }, /* GL_VERTEX_ATTRIB_ARRAY12_NV */
+   { 39574, 0x0000865D }, /* GL_VERTEX_ATTRIB_ARRAY13_NV */
+   { 39602, 0x0000865E }, /* GL_VERTEX_ATTRIB_ARRAY14_NV */
+   { 39630, 0x0000865F }, /* GL_VERTEX_ATTRIB_ARRAY15_NV */
+   { 39658, 0x00008651 }, /* GL_VERTEX_ATTRIB_ARRAY1_NV */
+   { 39685, 0x00008652 }, /* GL_VERTEX_ATTRIB_ARRAY2_NV */
+   { 39712, 0x00008653 }, /* GL_VERTEX_ATTRIB_ARRAY3_NV */
+   { 39739, 0x00008654 }, /* GL_VERTEX_ATTRIB_ARRAY4_NV */
+   { 39766, 0x00008655 }, /* GL_VERTEX_ATTRIB_ARRAY5_NV */
+   { 39793, 0x00008656 }, /* GL_VERTEX_ATTRIB_ARRAY6_NV */
+   { 39820, 0x00008657 }, /* GL_VERTEX_ATTRIB_ARRAY7_NV */
+   { 39847, 0x00008658 }, /* GL_VERTEX_ATTRIB_ARRAY8_NV */
+   { 39874, 0x00008659 }, /* GL_VERTEX_ATTRIB_ARRAY9_NV */
+   { 39901, 0x0000889F }, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING */
+   { 39939, 0x0000889F }, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB */
+   { 39981, 0x00008622 }, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED */
+   { 40012, 0x00008622 }, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB */
+   { 40047, 0x0000886A }, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED */
+   { 40081, 0x0000886A }, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB */
+   { 40119, 0x00008645 }, /* GL_VERTEX_ATTRIB_ARRAY_POINTER */
+   { 40150, 0x00008645 }, /* GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB */
+   { 40185, 0x00008623 }, /* GL_VERTEX_ATTRIB_ARRAY_SIZE */
+   { 40213, 0x00008623 }, /* GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB */
+   { 40245, 0x00008624 }, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE */
+   { 40275, 0x00008624 }, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB */
+   { 40309, 0x00008625 }, /* GL_VERTEX_ATTRIB_ARRAY_TYPE */
+   { 40337, 0x00008625 }, /* GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB */
+   { 40369, 0x000086A7 }, /* GL_VERTEX_BLEND_ARB */
+   { 40389, 0x00008620 }, /* GL_VERTEX_PROGRAM_ARB */
+   { 40411, 0x0000864A }, /* GL_VERTEX_PROGRAM_BINDING_NV */
+   { 40440, 0x00008620 }, /* GL_VERTEX_PROGRAM_NV */
+   { 40461, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE */
+   { 40490, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE_ARB */
+   { 40523, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE_NV */
+   { 40555, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE */
+   { 40582, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE_ARB */
+   { 40613, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE_NV */
+   { 40643, 0x00008B31 }, /* GL_VERTEX_SHADER */
+   { 40660, 0x00008B31 }, /* GL_VERTEX_SHADER_ARB */
+   { 40681, 0x00008621 }, /* GL_VERTEX_STATE_PROGRAM_NV */
+   { 40708, 0x00000BA2 }, /* GL_VIEWPORT */
+   { 40720, 0x00000800 }, /* GL_VIEWPORT_BIT */
+   { 40736, 0x00008A1A }, /* GL_VOLATILE_APPLE */
+   { 40754, 0x0000911D }, /* GL_WAIT_FAILED */
+   { 40769, 0x000086AD }, /* GL_WEIGHT_ARRAY_ARB */
+   { 40789, 0x0000889E }, /* GL_WEIGHT_ARRAY_BUFFER_BINDING */
+   { 40820, 0x0000889E }, /* GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB */
+   { 40855, 0x000086AC }, /* GL_WEIGHT_ARRAY_POINTER_ARB */
+   { 40883, 0x000086AB }, /* GL_WEIGHT_ARRAY_SIZE_ARB */
+   { 40908, 0x000086AA }, /* GL_WEIGHT_ARRAY_STRIDE_ARB */
+   { 40935, 0x000086A9 }, /* GL_WEIGHT_ARRAY_TYPE_ARB */
+   { 40960, 0x000086A6 }, /* GL_WEIGHT_SUM_UNITY_ARB */
+   { 40984, 0x000081D4 }, /* GL_WRAP_BORDER_SUN */
+   { 41003, 0x000088B9 }, /* GL_WRITE_ONLY */
+   { 41017, 0x000088B9 }, /* GL_WRITE_ONLY_ARB */
+   { 41035, 0x00001506 }, /* GL_XOR */
+   { 41042, 0x000085B9 }, /* GL_YCBCR_422_APPLE */
+   { 41061, 0x00008757 }, /* GL_YCBCR_MESA */
+   { 41075, 0x00000000 }, /* GL_ZERO */
+   { 41083, 0x00000D16 }, /* GL_ZOOM_X */
+   { 41093, 0x00000D17 }, /* GL_ZOOM_Y */
 };
 
-static const unsigned reduced_enums[1351] =
+static const unsigned reduced_enums[1357] =
 {
-       479, /* GL_FALSE */
-       702, /* GL_LINES */
-       704, /* GL_LINE_LOOP */
-       711, /* GL_LINE_STRIP */
-      1770, /* GL_TRIANGLES */
-      1773, /* GL_TRIANGLE_STRIP */
-      1771, /* GL_TRIANGLE_FAN */
-      1286, /* GL_QUADS */
-      1290, /* GL_QUAD_STRIP */
-      1172, /* GL_POLYGON */
-      1184, /* GL_POLYGON_STIPPLE_BIT */
-      1133, /* GL_PIXEL_MODE_BIT */
-       689, /* GL_LIGHTING_BIT */
-       509, /* GL_FOG_BIT */
+       480, /* GL_FALSE */
+       703, /* GL_LINES */
+       705, /* GL_LINE_LOOP */
+       712, /* GL_LINE_STRIP */
+      1774, /* GL_TRIANGLES */
+      1777, /* GL_TRIANGLE_STRIP */
+      1775, /* GL_TRIANGLE_FAN */
+      1288, /* GL_QUADS */
+      1292, /* GL_QUAD_STRIP */
+      1173, /* GL_POLYGON */
+      1185, /* GL_POLYGON_STIPPLE_BIT */
+      1134, /* GL_PIXEL_MODE_BIT */
+       690, /* GL_LIGHTING_BIT */
+       510, /* GL_FOG_BIT */
          8, /* GL_ACCUM */
-       721, /* GL_LOAD */
-      1349, /* GL_RETURN */
-      1005, /* GL_MULT */
+       722, /* GL_LOAD */
+      1353, /* GL_RETURN */
+      1006, /* GL_MULT */
         23, /* GL_ADD */
-      1021, /* GL_NEVER */
-       679, /* GL_LESS */
-       469, /* GL_EQUAL */
-       678, /* GL_LEQUAL */
-       599, /* GL_GREATER */
-      1036, /* GL_NOTEQUAL */
-       598, /* GL_GEQUAL */
+      1022, /* GL_NEVER */
+       680, /* GL_LESS */
+       470, /* GL_EQUAL */
+       679, /* GL_LEQUAL */
+       600, /* GL_GREATER */
+      1037, /* GL_NOTEQUAL */
+       599, /* GL_GEQUAL */
         47, /* GL_ALWAYS */
-      1490, /* GL_SRC_COLOR */
-      1066, /* GL_ONE_MINUS_SRC_COLOR */
-      1488, /* GL_SRC_ALPHA */
-      1065, /* GL_ONE_MINUS_SRC_ALPHA */
-       448, /* GL_DST_ALPHA */
-      1063, /* GL_ONE_MINUS_DST_ALPHA */
-       449, /* GL_DST_COLOR */
-      1064, /* GL_ONE_MINUS_DST_COLOR */
-      1489, /* GL_SRC_ALPHA_SATURATE */
-       586, /* GL_FRONT_LEFT */
-       587, /* GL_FRONT_RIGHT */
+      1494, /* GL_SRC_COLOR */
+      1067, /* GL_ONE_MINUS_SRC_COLOR */
+      1492, /* GL_SRC_ALPHA */
+      1066, /* GL_ONE_MINUS_SRC_ALPHA */
+       449, /* GL_DST_ALPHA */
+      1064, /* GL_ONE_MINUS_DST_ALPHA */
+       450, /* GL_DST_COLOR */
+      1065, /* GL_ONE_MINUS_DST_COLOR */
+      1493, /* GL_SRC_ALPHA_SATURATE */
+       587, /* GL_FRONT_LEFT */
+       588, /* GL_FRONT_RIGHT */
         69, /* GL_BACK_LEFT */
         70, /* GL_BACK_RIGHT */
-       583, /* GL_FRONT */
+       584, /* GL_FRONT */
         68, /* GL_BACK */
-       677, /* GL_LEFT */
-      1391, /* GL_RIGHT */
-       584, /* GL_FRONT_AND_BACK */
+       678, /* GL_LEFT */
+      1395, /* GL_RIGHT */
+       585, /* GL_FRONT_AND_BACK */
         63, /* GL_AUX0 */
         64, /* GL_AUX1 */
         65, /* GL_AUX2 */
         66, /* GL_AUX3 */
-       666, /* GL_INVALID_ENUM */
-       670, /* GL_INVALID_VALUE */
-       669, /* GL_INVALID_OPERATION */
-      1495, /* GL_STACK_OVERFLOW */
-      1496, /* GL_STACK_UNDERFLOW */
-      1091, /* GL_OUT_OF_MEMORY */
-       667, /* GL_INVALID_FRAMEBUFFER_OPERATION */
+       667, /* GL_INVALID_ENUM */
+       671, /* GL_INVALID_VALUE */
+       670, /* GL_INVALID_OPERATION */
+      1499, /* GL_STACK_OVERFLOW */
+      1500, /* GL_STACK_UNDERFLOW */
+      1092, /* GL_OUT_OF_MEMORY */
+       668, /* GL_INVALID_FRAMEBUFFER_OPERATION */
          0, /* GL_2D */
          2, /* GL_3D */
          3, /* GL_3D_COLOR */
          4, /* GL_3D_COLOR_TEXTURE */
          6, /* GL_4D_COLOR_TEXTURE */
-      1111, /* GL_PASS_THROUGH_TOKEN */
-      1171, /* GL_POINT_TOKEN */
-       712, /* GL_LINE_TOKEN */
-      1185, /* GL_POLYGON_TOKEN */
+      1112, /* GL_PASS_THROUGH_TOKEN */
+      1172, /* GL_POINT_TOKEN */
+       713, /* GL_LINE_TOKEN */
+      1186, /* GL_POLYGON_TOKEN */
         74, /* GL_BITMAP_TOKEN */
-       447, /* GL_DRAW_PIXEL_TOKEN */
-       301, /* GL_COPY_PIXEL_TOKEN */
-       705, /* GL_LINE_RESET_TOKEN */
-       472, /* GL_EXP */
-       473, /* GL_EXP2 */
-       337, /* GL_CW */
-       125, /* GL_CCW */
-       146, /* GL_COEFF */
-      1088, /* GL_ORDER */
-       384, /* GL_DOMAIN */
-       311, /* GL_CURRENT_COLOR */
-       314, /* GL_CURRENT_INDEX */
-       320, /* GL_CURRENT_NORMAL */
-       333, /* GL_CURRENT_TEXTURE_COORDS */
-       325, /* GL_CURRENT_RASTER_COLOR */
-       327, /* GL_CURRENT_RASTER_INDEX */
-       331, /* GL_CURRENT_RASTER_TEXTURE_COORDS */
-       328, /* GL_CURRENT_RASTER_POSITION */
-       329, /* GL_CURRENT_RASTER_POSITION_VALID */
-       326, /* GL_CURRENT_RASTER_DISTANCE */
-      1164, /* GL_POINT_SMOOTH */
-      1153, /* GL_POINT_SIZE */
-      1163, /* GL_POINT_SIZE_RANGE */
-      1154, /* GL_POINT_SIZE_GRANULARITY */
-       706, /* GL_LINE_SMOOTH */
-       713, /* GL_LINE_WIDTH */
-       715, /* GL_LINE_WIDTH_RANGE */
-       714, /* GL_LINE_WIDTH_GRANULARITY */
-       708, /* GL_LINE_STIPPLE */
-       709, /* GL_LINE_STIPPLE_PATTERN */
-       710, /* GL_LINE_STIPPLE_REPEAT */
-       720, /* GL_LIST_MODE */
-       886, /* GL_MAX_LIST_NESTING */
-       717, /* GL_LIST_BASE */
-       719, /* GL_LIST_INDEX */
-      1174, /* GL_POLYGON_MODE */
-      1181, /* GL_POLYGON_SMOOTH */
-      1183, /* GL_POLYGON_STIPPLE */
-       458, /* GL_EDGE_FLAG */
-       304, /* GL_CULL_FACE */
-       305, /* GL_CULL_FACE_MODE */
-       585, /* GL_FRONT_FACE */
-       688, /* GL_LIGHTING */
-       693, /* GL_LIGHT_MODEL_LOCAL_VIEWER */
-       694, /* GL_LIGHT_MODEL_TWO_SIDE */
-       690, /* GL_LIGHT_MODEL_AMBIENT */
-      1437, /* GL_SHADE_MODEL */
-       193, /* GL_COLOR_MATERIAL_FACE */
-       194, /* GL_COLOR_MATERIAL_PARAMETER */
-       192, /* GL_COLOR_MATERIAL */
-       508, /* GL_FOG */
-       530, /* GL_FOG_INDEX */
-       526, /* GL_FOG_DENSITY */
-       534, /* GL_FOG_START */
-       528, /* GL_FOG_END */
-       531, /* GL_FOG_MODE */
-       510, /* GL_FOG_COLOR */
-       370, /* GL_DEPTH_RANGE */
-       378, /* GL_DEPTH_TEST */
-       381, /* GL_DEPTH_WRITEMASK */
-       358, /* GL_DEPTH_CLEAR_VALUE */
-       369, /* GL_DEPTH_FUNC */
+       448, /* GL_DRAW_PIXEL_TOKEN */
+       302, /* GL_COPY_PIXEL_TOKEN */
+       706, /* GL_LINE_RESET_TOKEN */
+       473, /* GL_EXP */
+       474, /* GL_EXP2 */
+       338, /* GL_CW */
+       126, /* GL_CCW */
+       147, /* GL_COEFF */
+      1089, /* GL_ORDER */
+       385, /* GL_DOMAIN */
+       312, /* GL_CURRENT_COLOR */
+       315, /* GL_CURRENT_INDEX */
+       321, /* GL_CURRENT_NORMAL */
+       334, /* GL_CURRENT_TEXTURE_COORDS */
+       326, /* GL_CURRENT_RASTER_COLOR */
+       328, /* GL_CURRENT_RASTER_INDEX */
+       332, /* GL_CURRENT_RASTER_TEXTURE_COORDS */
+       329, /* GL_CURRENT_RASTER_POSITION */
+       330, /* GL_CURRENT_RASTER_POSITION_VALID */
+       327, /* GL_CURRENT_RASTER_DISTANCE */
+      1165, /* GL_POINT_SMOOTH */
+      1154, /* GL_POINT_SIZE */
+      1164, /* GL_POINT_SIZE_RANGE */
+      1155, /* GL_POINT_SIZE_GRANULARITY */
+       707, /* GL_LINE_SMOOTH */
+       714, /* GL_LINE_WIDTH */
+       716, /* GL_LINE_WIDTH_RANGE */
+       715, /* GL_LINE_WIDTH_GRANULARITY */
+       709, /* GL_LINE_STIPPLE */
+       710, /* GL_LINE_STIPPLE_PATTERN */
+       711, /* GL_LINE_STIPPLE_REPEAT */
+       721, /* GL_LIST_MODE */
+       887, /* GL_MAX_LIST_NESTING */
+       718, /* GL_LIST_BASE */
+       720, /* GL_LIST_INDEX */
+      1175, /* GL_POLYGON_MODE */
+      1182, /* GL_POLYGON_SMOOTH */
+      1184, /* GL_POLYGON_STIPPLE */
+       459, /* GL_EDGE_FLAG */
+       305, /* GL_CULL_FACE */
+       306, /* GL_CULL_FACE_MODE */
+       586, /* GL_FRONT_FACE */
+       689, /* GL_LIGHTING */
+       694, /* GL_LIGHT_MODEL_LOCAL_VIEWER */
+       695, /* GL_LIGHT_MODEL_TWO_SIDE */
+       691, /* GL_LIGHT_MODEL_AMBIENT */
+      1441, /* GL_SHADE_MODEL */
+       194, /* GL_COLOR_MATERIAL_FACE */
+       195, /* GL_COLOR_MATERIAL_PARAMETER */
+       193, /* GL_COLOR_MATERIAL */
+       509, /* GL_FOG */
+       531, /* GL_FOG_INDEX */
+       527, /* GL_FOG_DENSITY */
+       535, /* GL_FOG_START */
+       529, /* GL_FOG_END */
+       532, /* GL_FOG_MODE */
+       511, /* GL_FOG_COLOR */
+       371, /* GL_DEPTH_RANGE */
+       379, /* GL_DEPTH_TEST */
+       382, /* GL_DEPTH_WRITEMASK */
+       359, /* GL_DEPTH_CLEAR_VALUE */
+       370, /* GL_DEPTH_FUNC */
         12, /* GL_ACCUM_CLEAR_VALUE */
-      1535, /* GL_STENCIL_TEST */
-      1519, /* GL_STENCIL_CLEAR_VALUE */
-      1521, /* GL_STENCIL_FUNC */
-      1537, /* GL_STENCIL_VALUE_MASK */
-      1520, /* GL_STENCIL_FAIL */
-      1532, /* GL_STENCIL_PASS_DEPTH_FAIL */
-      1533, /* GL_STENCIL_PASS_DEPTH_PASS */
-      1534, /* GL_STENCIL_REF */
-      1538, /* GL_STENCIL_WRITEMASK */
-       854, /* GL_MATRIX_MODE */
-      1026, /* GL_NORMALIZE */
-      1865, /* GL_VIEWPORT */
-      1000, /* GL_MODELVIEW_STACK_DEPTH */
-      1264, /* GL_PROJECTION_STACK_DEPTH */
-      1745, /* GL_TEXTURE_STACK_DEPTH */
-       998, /* GL_MODELVIEW_MATRIX */
-      1263, /* GL_PROJECTION_MATRIX */
-      1728, /* GL_TEXTURE_MATRIX */
+      1539, /* GL_STENCIL_TEST */
+      1523, /* GL_STENCIL_CLEAR_VALUE */
+      1525, /* GL_STENCIL_FUNC */
+      1541, /* GL_STENCIL_VALUE_MASK */
+      1524, /* GL_STENCIL_FAIL */
+      1536, /* GL_STENCIL_PASS_DEPTH_FAIL */
+      1537, /* GL_STENCIL_PASS_DEPTH_PASS */
+      1538, /* GL_STENCIL_REF */
+      1542, /* GL_STENCIL_WRITEMASK */
+       855, /* GL_MATRIX_MODE */
+      1027, /* GL_NORMALIZE */
+      1870, /* GL_VIEWPORT */
+      1001, /* GL_MODELVIEW_STACK_DEPTH */
+      1265, /* GL_PROJECTION_STACK_DEPTH */
+      1749, /* GL_TEXTURE_STACK_DEPTH */
+       999, /* GL_MODELVIEW_MATRIX */
+      1264, /* GL_PROJECTION_MATRIX */
+      1732, /* GL_TEXTURE_MATRIX */
         61, /* GL_ATTRIB_STACK_DEPTH */
-       136, /* GL_CLIENT_ATTRIB_STACK_DEPTH */
+       137, /* GL_CLIENT_ATTRIB_STACK_DEPTH */
         43, /* GL_ALPHA_TEST */
         44, /* GL_ALPHA_TEST_FUNC */
         45, /* GL_ALPHA_TEST_REF */
-       383, /* GL_DITHER */
+       384, /* GL_DITHER */
         78, /* GL_BLEND_DST */
         87, /* GL_BLEND_SRC */
         75, /* GL_BLEND */
-       723, /* GL_LOGIC_OP_MODE */
-       640, /* GL_INDEX_LOGIC_OP */
-       191, /* GL_COLOR_LOGIC_OP */
+       724, /* GL_LOGIC_OP_MODE */
+       641, /* GL_INDEX_LOGIC_OP */
+       192, /* GL_COLOR_LOGIC_OP */
         67, /* GL_AUX_BUFFERS */
-       394, /* GL_DRAW_BUFFER */
-      1304, /* GL_READ_BUFFER */
-      1418, /* GL_SCISSOR_BOX */
-      1419, /* GL_SCISSOR_TEST */
-       639, /* GL_INDEX_CLEAR_VALUE */
-       644, /* GL_INDEX_WRITEMASK */
-       188, /* GL_COLOR_CLEAR_VALUE */
-       230, /* GL_COLOR_WRITEMASK */
-       641, /* GL_INDEX_MODE */
-      1384, /* GL_RGBA_MODE */
-       393, /* GL_DOUBLEBUFFER */
-      1539, /* GL_STEREO */
-      1342, /* GL_RENDER_MODE */
-      1112, /* GL_PERSPECTIVE_CORRECTION_HINT */
-      1165, /* GL_POINT_SMOOTH_HINT */
-       707, /* GL_LINE_SMOOTH_HINT */
-      1182, /* GL_POLYGON_SMOOTH_HINT */
-       529, /* GL_FOG_HINT */
-      1709, /* GL_TEXTURE_GEN_S */
-      1710, /* GL_TEXTURE_GEN_T */
-      1708, /* GL_TEXTURE_GEN_R */
-      1707, /* GL_TEXTURE_GEN_Q */
-      1125, /* GL_PIXEL_MAP_I_TO_I */
-      1131, /* GL_PIXEL_MAP_S_TO_S */
-      1127, /* GL_PIXEL_MAP_I_TO_R */
-      1123, /* GL_PIXEL_MAP_I_TO_G */
-      1121, /* GL_PIXEL_MAP_I_TO_B */
-      1119, /* GL_PIXEL_MAP_I_TO_A */
-      1129, /* GL_PIXEL_MAP_R_TO_R */
-      1117, /* GL_PIXEL_MAP_G_TO_G */
-      1115, /* GL_PIXEL_MAP_B_TO_B */
-      1113, /* GL_PIXEL_MAP_A_TO_A */
-      1126, /* GL_PIXEL_MAP_I_TO_I_SIZE */
-      1132, /* GL_PIXEL_MAP_S_TO_S_SIZE */
-      1128, /* GL_PIXEL_MAP_I_TO_R_SIZE */
-      1124, /* GL_PIXEL_MAP_I_TO_G_SIZE */
-      1122, /* GL_PIXEL_MAP_I_TO_B_SIZE */
-      1120, /* GL_PIXEL_MAP_I_TO_A_SIZE */
-      1130, /* GL_PIXEL_MAP_R_TO_R_SIZE */
-      1118, /* GL_PIXEL_MAP_G_TO_G_SIZE */
-      1116, /* GL_PIXEL_MAP_B_TO_B_SIZE */
-      1114, /* GL_PIXEL_MAP_A_TO_A_SIZE */
-      1782, /* GL_UNPACK_SWAP_BYTES */
-      1777, /* GL_UNPACK_LSB_FIRST */
-      1778, /* GL_UNPACK_ROW_LENGTH */
-      1781, /* GL_UNPACK_SKIP_ROWS */
-      1780, /* GL_UNPACK_SKIP_PIXELS */
-      1775, /* GL_UNPACK_ALIGNMENT */
-      1100, /* GL_PACK_SWAP_BYTES */
-      1095, /* GL_PACK_LSB_FIRST */
-      1096, /* GL_PACK_ROW_LENGTH */
-      1099, /* GL_PACK_SKIP_ROWS */
-      1098, /* GL_PACK_SKIP_PIXELS */
-      1092, /* GL_PACK_ALIGNMENT */
-       801, /* GL_MAP_COLOR */
-       806, /* GL_MAP_STENCIL */
-       643, /* GL_INDEX_SHIFT */
-       642, /* GL_INDEX_OFFSET */
-      1318, /* GL_RED_SCALE */
-      1316, /* GL_RED_BIAS */
-      1883, /* GL_ZOOM_X */
-      1884, /* GL_ZOOM_Y */
-       603, /* GL_GREEN_SCALE */
-       601, /* GL_GREEN_BIAS */
+       395, /* GL_DRAW_BUFFER */
+      1306, /* GL_READ_BUFFER */
+      1422, /* GL_SCISSOR_BOX */
+      1423, /* GL_SCISSOR_TEST */
+       640, /* GL_INDEX_CLEAR_VALUE */
+       645, /* GL_INDEX_WRITEMASK */
+       189, /* GL_COLOR_CLEAR_VALUE */
+       231, /* GL_COLOR_WRITEMASK */
+       642, /* GL_INDEX_MODE */
+      1388, /* GL_RGBA_MODE */
+       394, /* GL_DOUBLEBUFFER */
+      1543, /* GL_STEREO */
+      1345, /* GL_RENDER_MODE */
+      1113, /* GL_PERSPECTIVE_CORRECTION_HINT */
+      1166, /* GL_POINT_SMOOTH_HINT */
+       708, /* GL_LINE_SMOOTH_HINT */
+      1183, /* GL_POLYGON_SMOOTH_HINT */
+       530, /* GL_FOG_HINT */
+      1713, /* GL_TEXTURE_GEN_S */
+      1714, /* GL_TEXTURE_GEN_T */
+      1712, /* GL_TEXTURE_GEN_R */
+      1711, /* GL_TEXTURE_GEN_Q */
+      1126, /* GL_PIXEL_MAP_I_TO_I */
+      1132, /* GL_PIXEL_MAP_S_TO_S */
+      1128, /* GL_PIXEL_MAP_I_TO_R */
+      1124, /* GL_PIXEL_MAP_I_TO_G */
+      1122, /* GL_PIXEL_MAP_I_TO_B */
+      1120, /* GL_PIXEL_MAP_I_TO_A */
+      1130, /* GL_PIXEL_MAP_R_TO_R */
+      1118, /* GL_PIXEL_MAP_G_TO_G */
+      1116, /* GL_PIXEL_MAP_B_TO_B */
+      1114, /* GL_PIXEL_MAP_A_TO_A */
+      1127, /* GL_PIXEL_MAP_I_TO_I_SIZE */
+      1133, /* GL_PIXEL_MAP_S_TO_S_SIZE */
+      1129, /* GL_PIXEL_MAP_I_TO_R_SIZE */
+      1125, /* GL_PIXEL_MAP_I_TO_G_SIZE */
+      1123, /* GL_PIXEL_MAP_I_TO_B_SIZE */
+      1121, /* GL_PIXEL_MAP_I_TO_A_SIZE */
+      1131, /* GL_PIXEL_MAP_R_TO_R_SIZE */
+      1119, /* GL_PIXEL_MAP_G_TO_G_SIZE */
+      1117, /* GL_PIXEL_MAP_B_TO_B_SIZE */
+      1115, /* GL_PIXEL_MAP_A_TO_A_SIZE */
+      1787, /* GL_UNPACK_SWAP_BYTES */
+      1782, /* GL_UNPACK_LSB_FIRST */
+      1783, /* GL_UNPACK_ROW_LENGTH */
+      1786, /* GL_UNPACK_SKIP_ROWS */
+      1785, /* GL_UNPACK_SKIP_PIXELS */
+      1780, /* GL_UNPACK_ALIGNMENT */
+      1101, /* GL_PACK_SWAP_BYTES */
+      1096, /* GL_PACK_LSB_FIRST */
+      1097, /* GL_PACK_ROW_LENGTH */
+      1100, /* GL_PACK_SKIP_ROWS */
+      1099, /* GL_PACK_SKIP_PIXELS */
+      1093, /* GL_PACK_ALIGNMENT */
+       802, /* GL_MAP_COLOR */
+       807, /* GL_MAP_STENCIL */
+       644, /* GL_INDEX_SHIFT */
+       643, /* GL_INDEX_OFFSET */
+      1320, /* GL_RED_SCALE */
+      1318, /* GL_RED_BIAS */
+      1889, /* GL_ZOOM_X */
+      1890, /* GL_ZOOM_Y */
+       604, /* GL_GREEN_SCALE */
+       602, /* GL_GREEN_BIAS */
         93, /* GL_BLUE_SCALE */
         91, /* GL_BLUE_BIAS */
         42, /* GL_ALPHA_SCALE */
         40, /* GL_ALPHA_BIAS */
-       371, /* GL_DEPTH_SCALE */
-       351, /* GL_DEPTH_BIAS */
-       881, /* GL_MAX_EVAL_ORDER */
-       885, /* GL_MAX_LIGHTS */
-       863, /* GL_MAX_CLIP_PLANES */
-       933, /* GL_MAX_TEXTURE_SIZE */
-       891, /* GL_MAX_PIXEL_MAP_TABLE */
-       859, /* GL_MAX_ATTRIB_STACK_DEPTH */
-       888, /* GL_MAX_MODELVIEW_STACK_DEPTH */
-       889, /* GL_MAX_NAME_STACK_DEPTH */
-       917, /* GL_MAX_PROJECTION_STACK_DEPTH */
-       934, /* GL_MAX_TEXTURE_STACK_DEPTH */
-       948, /* GL_MAX_VIEWPORT_DIMS */
-       860, /* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH */
-      1549, /* GL_SUBPIXEL_BITS */
-       638, /* GL_INDEX_BITS */
-      1317, /* GL_RED_BITS */
-       602, /* GL_GREEN_BITS */
+       372, /* GL_DEPTH_SCALE */
+       352, /* GL_DEPTH_BIAS */
+       882, /* GL_MAX_EVAL_ORDER */
+       886, /* GL_MAX_LIGHTS */
+       864, /* GL_MAX_CLIP_PLANES */
+       934, /* GL_MAX_TEXTURE_SIZE */
+       892, /* GL_MAX_PIXEL_MAP_TABLE */
+       860, /* GL_MAX_ATTRIB_STACK_DEPTH */
+       889, /* GL_MAX_MODELVIEW_STACK_DEPTH */
+       890, /* GL_MAX_NAME_STACK_DEPTH */
+       918, /* GL_MAX_PROJECTION_STACK_DEPTH */
+       935, /* GL_MAX_TEXTURE_STACK_DEPTH */
+       949, /* GL_MAX_VIEWPORT_DIMS */
+       861, /* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH */
+      1553, /* GL_SUBPIXEL_BITS */
+       639, /* GL_INDEX_BITS */
+      1319, /* GL_RED_BITS */
+       603, /* GL_GREEN_BITS */
         92, /* GL_BLUE_BITS */
         41, /* GL_ALPHA_BITS */
-       352, /* GL_DEPTH_BITS */
-      1517, /* GL_STENCIL_BITS */
+       353, /* GL_DEPTH_BITS */
+      1521, /* GL_STENCIL_BITS */
         14, /* GL_ACCUM_RED_BITS */
         13, /* GL_ACCUM_GREEN_BITS */
         10, /* GL_ACCUM_BLUE_BITS */
          9, /* GL_ACCUM_ALPHA_BITS */
-      1014, /* GL_NAME_STACK_DEPTH */
+      1015, /* GL_NAME_STACK_DEPTH */
         62, /* GL_AUTO_NORMAL */
-       747, /* GL_MAP1_COLOR_4 */
-       750, /* GL_MAP1_INDEX */
-       751, /* GL_MAP1_NORMAL */
-       752, /* GL_MAP1_TEXTURE_COORD_1 */
-       753, /* GL_MAP1_TEXTURE_COORD_2 */
-       754, /* GL_MAP1_TEXTURE_COORD_3 */
-       755, /* GL_MAP1_TEXTURE_COORD_4 */
-       756, /* GL_MAP1_VERTEX_3 */
-       757, /* GL_MAP1_VERTEX_4 */
-       774, /* GL_MAP2_COLOR_4 */
-       777, /* GL_MAP2_INDEX */
-       778, /* GL_MAP2_NORMAL */
-       779, /* GL_MAP2_TEXTURE_COORD_1 */
-       780, /* GL_MAP2_TEXTURE_COORD_2 */
-       781, /* GL_MAP2_TEXTURE_COORD_3 */
-       782, /* GL_MAP2_TEXTURE_COORD_4 */
-       783, /* GL_MAP2_VERTEX_3 */
-       784, /* GL_MAP2_VERTEX_4 */
-       748, /* GL_MAP1_GRID_DOMAIN */
-       749, /* GL_MAP1_GRID_SEGMENTS */
-       775, /* GL_MAP2_GRID_DOMAIN */
-       776, /* GL_MAP2_GRID_SEGMENTS */
-      1632, /* GL_TEXTURE_1D */
-      1634, /* GL_TEXTURE_2D */
-       482, /* GL_FEEDBACK_BUFFER_POINTER */
-       483, /* GL_FEEDBACK_BUFFER_SIZE */
-       484, /* GL_FEEDBACK_BUFFER_TYPE */
-      1428, /* GL_SELECTION_BUFFER_POINTER */
-      1429, /* GL_SELECTION_BUFFER_SIZE */
-      1751, /* GL_TEXTURE_WIDTH */
-      1714, /* GL_TEXTURE_HEIGHT */
-      1669, /* GL_TEXTURE_COMPONENTS */
-      1653, /* GL_TEXTURE_BORDER_COLOR */
-      1652, /* GL_TEXTURE_BORDER */
-       385, /* GL_DONT_CARE */
-       480, /* GL_FASTEST */
-      1022, /* GL_NICEST */
+       748, /* GL_MAP1_COLOR_4 */
+       751, /* GL_MAP1_INDEX */
+       752, /* GL_MAP1_NORMAL */
+       753, /* GL_MAP1_TEXTURE_COORD_1 */
+       754, /* GL_MAP1_TEXTURE_COORD_2 */
+       755, /* GL_MAP1_TEXTURE_COORD_3 */
+       756, /* GL_MAP1_TEXTURE_COORD_4 */
+       757, /* GL_MAP1_VERTEX_3 */
+       758, /* GL_MAP1_VERTEX_4 */
+       775, /* GL_MAP2_COLOR_4 */
+       778, /* GL_MAP2_INDEX */
+       779, /* GL_MAP2_NORMAL */
+       780, /* GL_MAP2_TEXTURE_COORD_1 */
+       781, /* GL_MAP2_TEXTURE_COORD_2 */
+       782, /* GL_MAP2_TEXTURE_COORD_3 */
+       783, /* GL_MAP2_TEXTURE_COORD_4 */
+       784, /* GL_MAP2_VERTEX_3 */
+       785, /* GL_MAP2_VERTEX_4 */
+       749, /* GL_MAP1_GRID_DOMAIN */
+       750, /* GL_MAP1_GRID_SEGMENTS */
+       776, /* GL_MAP2_GRID_DOMAIN */
+       777, /* GL_MAP2_GRID_SEGMENTS */
+      1636, /* GL_TEXTURE_1D */
+      1638, /* GL_TEXTURE_2D */
+       483, /* GL_FEEDBACK_BUFFER_POINTER */
+       484, /* GL_FEEDBACK_BUFFER_SIZE */
+       485, /* GL_FEEDBACK_BUFFER_TYPE */
+      1432, /* GL_SELECTION_BUFFER_POINTER */
+      1433, /* GL_SELECTION_BUFFER_SIZE */
+      1755, /* GL_TEXTURE_WIDTH */
+      1718, /* GL_TEXTURE_HEIGHT */
+      1673, /* GL_TEXTURE_COMPONENTS */
+      1657, /* GL_TEXTURE_BORDER_COLOR */
+      1656, /* GL_TEXTURE_BORDER */
+       386, /* GL_DONT_CARE */
+       481, /* GL_FASTEST */
+      1023, /* GL_NICEST */
         48, /* GL_AMBIENT */
-       382, /* GL_DIFFUSE */
-      1477, /* GL_SPECULAR */
-      1186, /* GL_POSITION */
-      1480, /* GL_SPOT_DIRECTION */
-      1481, /* GL_SPOT_EXPONENT */
-      1479, /* GL_SPOT_CUTOFF */
-       275, /* GL_CONSTANT_ATTENUATION */
-       697, /* GL_LINEAR_ATTENUATION */
-      1285, /* GL_QUADRATIC_ATTENUATION */
-       244, /* GL_COMPILE */
-       245, /* GL_COMPILE_AND_EXECUTE */
-       120, /* GL_BYTE */
-      1784, /* GL_UNSIGNED_BYTE */
-      1442, /* GL_SHORT */
-      1796, /* GL_UNSIGNED_SHORT */
-       646, /* GL_INT */
-      1787, /* GL_UNSIGNED_INT */
-       489, /* GL_FLOAT */
+       383, /* GL_DIFFUSE */
+      1481, /* GL_SPECULAR */
+      1187, /* GL_POSITION */
+      1484, /* GL_SPOT_DIRECTION */
+      1485, /* GL_SPOT_EXPONENT */
+      1483, /* GL_SPOT_CUTOFF */
+       276, /* GL_CONSTANT_ATTENUATION */
+       698, /* GL_LINEAR_ATTENUATION */
+      1287, /* GL_QUADRATIC_ATTENUATION */
+       245, /* GL_COMPILE */
+       246, /* GL_COMPILE_AND_EXECUTE */
+       121, /* GL_BYTE */
+      1789, /* GL_UNSIGNED_BYTE */
+      1446, /* GL_SHORT */
+      1801, /* GL_UNSIGNED_SHORT */
+       647, /* GL_INT */
+      1792, /* GL_UNSIGNED_INT */
+       490, /* GL_FLOAT */
          1, /* GL_2_BYTES */
          5, /* GL_3_BYTES */
          7, /* GL_4_BYTES */
-       392, /* GL_DOUBLE */
-       604, /* GL_HALF_FLOAT */
-       132, /* GL_CLEAR */
+       393, /* GL_DOUBLE */
+       605, /* GL_HALF_FLOAT */
+       133, /* GL_CLEAR */
         50, /* GL_AND */
         52, /* GL_AND_REVERSE */
-       299, /* GL_COPY */
+       300, /* GL_COPY */
         51, /* GL_AND_INVERTED */
-      1024, /* GL_NOOP */
-      1879, /* GL_XOR */
-      1087, /* GL_OR */
-      1025, /* GL_NOR */
-       470, /* GL_EQUIV */
-       673, /* GL_INVERT */
-      1090, /* GL_OR_REVERSE */
-       300, /* GL_COPY_INVERTED */
-      1089, /* GL_OR_INVERTED */
-      1015, /* GL_NAND */
-      1433, /* GL_SET */
-       467, /* GL_EMISSION */
-      1441, /* GL_SHININESS */
+      1025, /* GL_NOOP */
+      1885, /* GL_XOR */
+      1088, /* GL_OR */
+      1026, /* GL_NOR */
+       471, /* GL_EQUIV */
+       674, /* GL_INVERT */
+      1091, /* GL_OR_REVERSE */
+       301, /* GL_COPY_INVERTED */
+      1090, /* GL_OR_INVERTED */
+      1016, /* GL_NAND */
+      1437, /* GL_SET */
+       468, /* GL_EMISSION */
+      1445, /* GL_SHININESS */
         49, /* GL_AMBIENT_AND_DIFFUSE */
-       190, /* GL_COLOR_INDEXES */
-       965, /* GL_MODELVIEW */
-      1262, /* GL_PROJECTION */
-      1567, /* GL_TEXTURE */
-       147, /* GL_COLOR */
-       346, /* GL_DEPTH */
-      1503, /* GL_STENCIL */
-       189, /* GL_COLOR_INDEX */
-      1522, /* GL_STENCIL_INDEX */
-       359, /* GL_DEPTH_COMPONENT */
-      1313, /* GL_RED */
-       600, /* GL_GREEN */
+       191, /* GL_COLOR_INDEXES */
+       966, /* GL_MODELVIEW */
+      1263, /* GL_PROJECTION */
+      1571, /* GL_TEXTURE */
+       148, /* GL_COLOR */
+       347, /* GL_DEPTH */
+      1507, /* GL_STENCIL */
+       190, /* GL_COLOR_INDEX */
+      1526, /* GL_STENCIL_INDEX */
+       360, /* GL_DEPTH_COMPONENT */
+      1315, /* GL_RED */
+       601, /* GL_GREEN */
         90, /* GL_BLUE */
         31, /* GL_ALPHA */
-      1350, /* GL_RGB */
-      1369, /* GL_RGBA */
-       725, /* GL_LUMINANCE */
-       746, /* GL_LUMINANCE_ALPHA */
+      1354, /* GL_RGB */
+      1373, /* GL_RGBA */
+       726, /* GL_LUMINANCE */
+       747, /* GL_LUMINANCE_ALPHA */
         73, /* GL_BITMAP */
-      1142, /* GL_POINT */
-       695, /* GL_LINE */
-       485, /* GL_FILL */
-      1322, /* GL_RENDER */
-       481, /* GL_FEEDBACK */
-      1427, /* GL_SELECT */
-       488, /* GL_FLAT */
-      1452, /* GL_SMOOTH */
-       674, /* GL_KEEP */
-      1344, /* GL_REPLACE */
-       628, /* GL_INCR */
-       342, /* GL_DECR */
-      1811, /* GL_VENDOR */
-      1341, /* GL_RENDERER */
-      1812, /* GL_VERSION */
-       474, /* GL_EXTENSIONS */
-      1392, /* GL_S */
-      1558, /* GL_T */
-      1301, /* GL_R */
-      1284, /* GL_Q */
-      1001, /* GL_MODULATE */
-       341, /* GL_DECAL */
-      1704, /* GL_TEXTURE_ENV_MODE */
-      1703, /* GL_TEXTURE_ENV_COLOR */
-      1702, /* GL_TEXTURE_ENV */
-       475, /* GL_EYE_LINEAR */
-      1048, /* GL_OBJECT_LINEAR */
-      1478, /* GL_SPHERE_MAP */
-      1706, /* GL_TEXTURE_GEN_MODE */
-      1050, /* GL_OBJECT_PLANE */
-       476, /* GL_EYE_PLANE */
-      1016, /* GL_NEAREST */
-       696, /* GL_LINEAR */
-      1020, /* GL_NEAREST_MIPMAP_NEAREST */
-       701, /* GL_LINEAR_MIPMAP_NEAREST */
-      1019, /* GL_NEAREST_MIPMAP_LINEAR */
-       700, /* GL_LINEAR_MIPMAP_LINEAR */
-      1727, /* GL_TEXTURE_MAG_FILTER */
-      1735, /* GL_TEXTURE_MIN_FILTER */
-      1753, /* GL_TEXTURE_WRAP_S */
-      1754, /* GL_TEXTURE_WRAP_T */
-       126, /* GL_CLAMP */
-      1343, /* GL_REPEAT */
-      1180, /* GL_POLYGON_OFFSET_UNITS */
-      1179, /* GL_POLYGON_OFFSET_POINT */
-      1178, /* GL_POLYGON_OFFSET_LINE */
-      1302, /* GL_R3_G3_B2 */
-      1808, /* GL_V2F */
-      1809, /* GL_V3F */
-       123, /* GL_C4UB_V2F */
-       124, /* GL_C4UB_V3F */
-       121, /* GL_C3F_V3F */
-      1013, /* GL_N3F_V3F */
-       122, /* GL_C4F_N3F_V3F */
-      1563, /* GL_T2F_V3F */
-      1565, /* GL_T4F_V4F */
-      1561, /* GL_T2F_C4UB_V3F */
-      1559, /* GL_T2F_C3F_V3F */
-      1562, /* GL_T2F_N3F_V3F */
-      1560, /* GL_T2F_C4F_N3F_V3F */
-      1564, /* GL_T4F_C4F_N3F_V4F */
-       139, /* GL_CLIP_PLANE0 */
-       140, /* GL_CLIP_PLANE1 */
-       141, /* GL_CLIP_PLANE2 */
-       142, /* GL_CLIP_PLANE3 */
-       143, /* GL_CLIP_PLANE4 */
-       144, /* GL_CLIP_PLANE5 */
-       680, /* GL_LIGHT0 */
-       681, /* GL_LIGHT1 */
-       682, /* GL_LIGHT2 */
-       683, /* GL_LIGHT3 */
-       684, /* GL_LIGHT4 */
-       685, /* GL_LIGHT5 */
-       686, /* GL_LIGHT6 */
-       687, /* GL_LIGHT7 */
-       605, /* GL_HINT_BIT */
-       277, /* GL_CONSTANT_COLOR */
-      1061, /* GL_ONE_MINUS_CONSTANT_COLOR */
-       272, /* GL_CONSTANT_ALPHA */
-      1059, /* GL_ONE_MINUS_CONSTANT_ALPHA */
+      1143, /* GL_POINT */
+       696, /* GL_LINE */
+       486, /* GL_FILL */
+      1325, /* GL_RENDER */
+       482, /* GL_FEEDBACK */
+      1431, /* GL_SELECT */
+       489, /* GL_FLAT */
+      1456, /* GL_SMOOTH */
+       675, /* GL_KEEP */
+      1347, /* GL_REPLACE */
+       629, /* GL_INCR */
+       343, /* GL_DECR */
+      1816, /* GL_VENDOR */
+      1344, /* GL_RENDERER */
+      1817, /* GL_VERSION */
+       475, /* GL_EXTENSIONS */
+      1396, /* GL_S */
+      1562, /* GL_T */
+      1303, /* GL_R */
+      1286, /* GL_Q */
+      1002, /* GL_MODULATE */
+       342, /* GL_DECAL */
+      1708, /* GL_TEXTURE_ENV_MODE */
+      1707, /* GL_TEXTURE_ENV_COLOR */
+      1706, /* GL_TEXTURE_ENV */
+       476, /* GL_EYE_LINEAR */
+      1049, /* GL_OBJECT_LINEAR */
+      1482, /* GL_SPHERE_MAP */
+      1710, /* GL_TEXTURE_GEN_MODE */
+      1051, /* GL_OBJECT_PLANE */
+       477, /* GL_EYE_PLANE */
+      1017, /* GL_NEAREST */
+       697, /* GL_LINEAR */
+      1021, /* GL_NEAREST_MIPMAP_NEAREST */
+       702, /* GL_LINEAR_MIPMAP_NEAREST */
+      1020, /* GL_NEAREST_MIPMAP_LINEAR */
+       701, /* GL_LINEAR_MIPMAP_LINEAR */
+      1731, /* GL_TEXTURE_MAG_FILTER */
+      1739, /* GL_TEXTURE_MIN_FILTER */
+      1757, /* GL_TEXTURE_WRAP_S */
+      1758, /* GL_TEXTURE_WRAP_T */
+       127, /* GL_CLAMP */
+      1346, /* GL_REPEAT */
+      1181, /* GL_POLYGON_OFFSET_UNITS */
+      1180, /* GL_POLYGON_OFFSET_POINT */
+      1179, /* GL_POLYGON_OFFSET_LINE */
+      1304, /* GL_R3_G3_B2 */
+      1813, /* GL_V2F */
+      1814, /* GL_V3F */
+       124, /* GL_C4UB_V2F */
+       125, /* GL_C4UB_V3F */
+       122, /* GL_C3F_V3F */
+      1014, /* GL_N3F_V3F */
+       123, /* GL_C4F_N3F_V3F */
+      1567, /* GL_T2F_V3F */
+      1569, /* GL_T4F_V4F */
+      1565, /* GL_T2F_C4UB_V3F */
+      1563, /* GL_T2F_C3F_V3F */
+      1566, /* GL_T2F_N3F_V3F */
+      1564, /* GL_T2F_C4F_N3F_V3F */
+      1568, /* GL_T4F_C4F_N3F_V4F */
+       140, /* GL_CLIP_PLANE0 */
+       141, /* GL_CLIP_PLANE1 */
+       142, /* GL_CLIP_PLANE2 */
+       143, /* GL_CLIP_PLANE3 */
+       144, /* GL_CLIP_PLANE4 */
+       145, /* GL_CLIP_PLANE5 */
+       681, /* GL_LIGHT0 */
+       682, /* GL_LIGHT1 */
+       683, /* GL_LIGHT2 */
+       684, /* GL_LIGHT3 */
+       685, /* GL_LIGHT4 */
+       686, /* GL_LIGHT5 */
+       687, /* GL_LIGHT6 */
+       688, /* GL_LIGHT7 */
+       606, /* GL_HINT_BIT */
+       278, /* GL_CONSTANT_COLOR */
+      1062, /* GL_ONE_MINUS_CONSTANT_COLOR */
+       273, /* GL_CONSTANT_ALPHA */
+      1060, /* GL_ONE_MINUS_CONSTANT_ALPHA */
         76, /* GL_BLEND_COLOR */
-       588, /* GL_FUNC_ADD */
-       949, /* GL_MIN */
-       856, /* GL_MAX */
+       589, /* GL_FUNC_ADD */
+       950, /* GL_MIN */
+       857, /* GL_MAX */
         81, /* GL_BLEND_EQUATION */
-       592, /* GL_FUNC_SUBTRACT */
-       590, /* GL_FUNC_REVERSE_SUBTRACT */
-       280, /* GL_CONVOLUTION_1D */
-       281, /* GL_CONVOLUTION_2D */
-      1430, /* GL_SEPARABLE_2D */
-       284, /* GL_CONVOLUTION_BORDER_MODE */
-       288, /* GL_CONVOLUTION_FILTER_SCALE */
-       286, /* GL_CONVOLUTION_FILTER_BIAS */
-      1314, /* GL_REDUCE */
-       290, /* GL_CONVOLUTION_FORMAT */
-       294, /* GL_CONVOLUTION_WIDTH */
-       292, /* GL_CONVOLUTION_HEIGHT */
-       872, /* GL_MAX_CONVOLUTION_WIDTH */
-       870, /* GL_MAX_CONVOLUTION_HEIGHT */
-      1219, /* GL_POST_CONVOLUTION_RED_SCALE */
-      1215, /* GL_POST_CONVOLUTION_GREEN_SCALE */
-      1210, /* GL_POST_CONVOLUTION_BLUE_SCALE */
-      1206, /* GL_POST_CONVOLUTION_ALPHA_SCALE */
-      1217, /* GL_POST_CONVOLUTION_RED_BIAS */
-      1213, /* GL_POST_CONVOLUTION_GREEN_BIAS */
-      1208, /* GL_POST_CONVOLUTION_BLUE_BIAS */
-      1204, /* GL_POST_CONVOLUTION_ALPHA_BIAS */
-       606, /* GL_HISTOGRAM */
-      1268, /* GL_PROXY_HISTOGRAM */
-       622, /* GL_HISTOGRAM_WIDTH */
-       612, /* GL_HISTOGRAM_FORMAT */
-       618, /* GL_HISTOGRAM_RED_SIZE */
-       614, /* GL_HISTOGRAM_GREEN_SIZE */
-       609, /* GL_HISTOGRAM_BLUE_SIZE */
-       607, /* GL_HISTOGRAM_ALPHA_SIZE */
-       616, /* GL_HISTOGRAM_LUMINANCE_SIZE */
-       620, /* GL_HISTOGRAM_SINK */
-       950, /* GL_MINMAX */
-       952, /* GL_MINMAX_FORMAT */
-       954, /* GL_MINMAX_SINK */
-      1566, /* GL_TABLE_TOO_LARGE_EXT */
-      1786, /* GL_UNSIGNED_BYTE_3_3_2 */
-      1798, /* GL_UNSIGNED_SHORT_4_4_4_4 */
-      1800, /* GL_UNSIGNED_SHORT_5_5_5_1 */
-      1793, /* GL_UNSIGNED_INT_8_8_8_8 */
-      1788, /* GL_UNSIGNED_INT_10_10_10_2 */
-      1177, /* GL_POLYGON_OFFSET_FILL */
-      1176, /* GL_POLYGON_OFFSET_FACTOR */
-      1175, /* GL_POLYGON_OFFSET_BIAS */
-      1347, /* GL_RESCALE_NORMAL */
+       593, /* GL_FUNC_SUBTRACT */
+       591, /* GL_FUNC_REVERSE_SUBTRACT */
+       281, /* GL_CONVOLUTION_1D */
+       282, /* GL_CONVOLUTION_2D */
+      1434, /* GL_SEPARABLE_2D */
+       285, /* GL_CONVOLUTION_BORDER_MODE */
+       289, /* GL_CONVOLUTION_FILTER_SCALE */
+       287, /* GL_CONVOLUTION_FILTER_BIAS */
+      1316, /* GL_REDUCE */
+       291, /* GL_CONVOLUTION_FORMAT */
+       295, /* GL_CONVOLUTION_WIDTH */
+       293, /* GL_CONVOLUTION_HEIGHT */
+       873, /* GL_MAX_CONVOLUTION_WIDTH */
+       871, /* GL_MAX_CONVOLUTION_HEIGHT */
+      1220, /* GL_POST_CONVOLUTION_RED_SCALE */
+      1216, /* GL_POST_CONVOLUTION_GREEN_SCALE */
+      1211, /* GL_POST_CONVOLUTION_BLUE_SCALE */
+      1207, /* GL_POST_CONVOLUTION_ALPHA_SCALE */
+      1218, /* GL_POST_CONVOLUTION_RED_BIAS */
+      1214, /* GL_POST_CONVOLUTION_GREEN_BIAS */
+      1209, /* GL_POST_CONVOLUTION_BLUE_BIAS */
+      1205, /* GL_POST_CONVOLUTION_ALPHA_BIAS */
+       607, /* GL_HISTOGRAM */
+      1269, /* GL_PROXY_HISTOGRAM */
+       623, /* GL_HISTOGRAM_WIDTH */
+       613, /* GL_HISTOGRAM_FORMAT */
+       619, /* GL_HISTOGRAM_RED_SIZE */
+       615, /* GL_HISTOGRAM_GREEN_SIZE */
+       610, /* GL_HISTOGRAM_BLUE_SIZE */
+       608, /* GL_HISTOGRAM_ALPHA_SIZE */
+       617, /* GL_HISTOGRAM_LUMINANCE_SIZE */
+       621, /* GL_HISTOGRAM_SINK */
+       951, /* GL_MINMAX */
+       953, /* GL_MINMAX_FORMAT */
+       955, /* GL_MINMAX_SINK */
+      1570, /* GL_TABLE_TOO_LARGE_EXT */
+      1791, /* GL_UNSIGNED_BYTE_3_3_2 */
+      1803, /* GL_UNSIGNED_SHORT_4_4_4_4 */
+      1805, /* GL_UNSIGNED_SHORT_5_5_5_1 */
+      1798, /* GL_UNSIGNED_INT_8_8_8_8 */
+      1793, /* GL_UNSIGNED_INT_10_10_10_2 */
+      1178, /* GL_POLYGON_OFFSET_FILL */
+      1177, /* GL_POLYGON_OFFSET_FACTOR */
+      1176, /* GL_POLYGON_OFFSET_BIAS */
+      1350, /* GL_RESCALE_NORMAL */
         36, /* GL_ALPHA4 */
         38, /* GL_ALPHA8 */
         32, /* GL_ALPHA12 */
         34, /* GL_ALPHA16 */
-       736, /* GL_LUMINANCE4 */
-       742, /* GL_LUMINANCE8 */
-       726, /* GL_LUMINANCE12 */
-       732, /* GL_LUMINANCE16 */
-       737, /* GL_LUMINANCE4_ALPHA4 */
-       740, /* GL_LUMINANCE6_ALPHA2 */
-       743, /* GL_LUMINANCE8_ALPHA8 */
-       729, /* GL_LUMINANCE12_ALPHA4 */
-       727, /* GL_LUMINANCE12_ALPHA12 */
-       733, /* GL_LUMINANCE16_ALPHA16 */
-       647, /* GL_INTENSITY */
-       652, /* GL_INTENSITY4 */
-       654, /* GL_INTENSITY8 */
-       648, /* GL_INTENSITY12 */
-       650, /* GL_INTENSITY16 */
-      1359, /* GL_RGB2_EXT */
-      1360, /* GL_RGB4 */
-      1363, /* GL_RGB5 */
-      1367, /* GL_RGB8 */
-      1351, /* GL_RGB10 */
-      1355, /* GL_RGB12 */
-      1357, /* GL_RGB16 */
-      1374, /* GL_RGBA2 */
-      1376, /* GL_RGBA4 */
-      1364, /* GL_RGB5_A1 */
-      1380, /* GL_RGBA8 */
-      1352, /* GL_RGB10_A2 */
-      1370, /* GL_RGBA12 */
-      1372, /* GL_RGBA16 */
-      1742, /* GL_TEXTURE_RED_SIZE */
-      1712, /* GL_TEXTURE_GREEN_SIZE */
-      1650, /* GL_TEXTURE_BLUE_SIZE */
-      1637, /* GL_TEXTURE_ALPHA_SIZE */
-      1725, /* GL_TEXTURE_LUMINANCE_SIZE */
-      1716, /* GL_TEXTURE_INTENSITY_SIZE */
-      1345, /* GL_REPLACE_EXT */
-      1272, /* GL_PROXY_TEXTURE_1D */
-      1275, /* GL_PROXY_TEXTURE_2D */
-      1749, /* GL_TEXTURE_TOO_LARGE_EXT */
-      1737, /* GL_TEXTURE_PRIORITY */
-      1744, /* GL_TEXTURE_RESIDENT */
-      1640, /* GL_TEXTURE_BINDING_1D */
-      1642, /* GL_TEXTURE_BINDING_2D */
-      1644, /* GL_TEXTURE_BINDING_3D */
-      1097, /* GL_PACK_SKIP_IMAGES */
-      1093, /* GL_PACK_IMAGE_HEIGHT */
-      1779, /* GL_UNPACK_SKIP_IMAGES */
-      1776, /* GL_UNPACK_IMAGE_HEIGHT */
-      1636, /* GL_TEXTURE_3D */
-      1278, /* GL_PROXY_TEXTURE_3D */
-      1699, /* GL_TEXTURE_DEPTH */
-      1752, /* GL_TEXTURE_WRAP_R */
-       857, /* GL_MAX_3D_TEXTURE_SIZE */
-      1813, /* GL_VERTEX_ARRAY */
-      1027, /* GL_NORMAL_ARRAY */
-       148, /* GL_COLOR_ARRAY */
-       632, /* GL_INDEX_ARRAY */
-      1677, /* GL_TEXTURE_COORD_ARRAY */
-       459, /* GL_EDGE_FLAG_ARRAY */
-      1819, /* GL_VERTEX_ARRAY_SIZE */
-      1821, /* GL_VERTEX_ARRAY_TYPE */
-      1820, /* GL_VERTEX_ARRAY_STRIDE */
-      1032, /* GL_NORMAL_ARRAY_TYPE */
-      1031, /* GL_NORMAL_ARRAY_STRIDE */
-       152, /* GL_COLOR_ARRAY_SIZE */
-       154, /* GL_COLOR_ARRAY_TYPE */
-       153, /* GL_COLOR_ARRAY_STRIDE */
-       637, /* GL_INDEX_ARRAY_TYPE */
-       636, /* GL_INDEX_ARRAY_STRIDE */
-      1681, /* GL_TEXTURE_COORD_ARRAY_SIZE */
-      1683, /* GL_TEXTURE_COORD_ARRAY_TYPE */
-      1682, /* GL_TEXTURE_COORD_ARRAY_STRIDE */
-       463, /* GL_EDGE_FLAG_ARRAY_STRIDE */
-      1818, /* GL_VERTEX_ARRAY_POINTER */
-      1030, /* GL_NORMAL_ARRAY_POINTER */
-       151, /* GL_COLOR_ARRAY_POINTER */
-       635, /* GL_INDEX_ARRAY_POINTER */
-      1680, /* GL_TEXTURE_COORD_ARRAY_POINTER */
-       462, /* GL_EDGE_FLAG_ARRAY_POINTER */
-      1006, /* GL_MULTISAMPLE */
-      1404, /* GL_SAMPLE_ALPHA_TO_COVERAGE */
-      1406, /* GL_SAMPLE_ALPHA_TO_ONE */
-      1411, /* GL_SAMPLE_COVERAGE */
-      1408, /* GL_SAMPLE_BUFFERS */
-      1399, /* GL_SAMPLES */
-      1415, /* GL_SAMPLE_COVERAGE_VALUE */
-      1413, /* GL_SAMPLE_COVERAGE_INVERT */
-       195, /* GL_COLOR_MATRIX */
-       197, /* GL_COLOR_MATRIX_STACK_DEPTH */
-       866, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH */
-      1202, /* GL_POST_COLOR_MATRIX_RED_SCALE */
-      1198, /* GL_POST_COLOR_MATRIX_GREEN_SCALE */
-      1193, /* GL_POST_COLOR_MATRIX_BLUE_SCALE */
-      1189, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE */
-      1200, /* GL_POST_COLOR_MATRIX_RED_BIAS */
-      1196, /* GL_POST_COLOR_MATRIX_GREEN_BIAS */
-      1191, /* GL_POST_COLOR_MATRIX_BLUE_BIAS */
-      1187, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS */
-      1660, /* GL_TEXTURE_COLOR_TABLE_SGI */
-      1279, /* GL_PROXY_TEXTURE_COLOR_TABLE_SGI */
-      1662, /* GL_TEXTURE_COMPARE_FAIL_VALUE_ARB */
+       737, /* GL_LUMINANCE4 */
+       743, /* GL_LUMINANCE8 */
+       727, /* GL_LUMINANCE12 */
+       733, /* GL_LUMINANCE16 */
+       738, /* GL_LUMINANCE4_ALPHA4 */
+       741, /* GL_LUMINANCE6_ALPHA2 */
+       744, /* GL_LUMINANCE8_ALPHA8 */
+       730, /* GL_LUMINANCE12_ALPHA4 */
+       728, /* GL_LUMINANCE12_ALPHA12 */
+       734, /* GL_LUMINANCE16_ALPHA16 */
+       648, /* GL_INTENSITY */
+       653, /* GL_INTENSITY4 */
+       655, /* GL_INTENSITY8 */
+       649, /* GL_INTENSITY12 */
+       651, /* GL_INTENSITY16 */
+      1363, /* GL_RGB2_EXT */
+      1364, /* GL_RGB4 */
+      1367, /* GL_RGB5 */
+      1371, /* GL_RGB8 */
+      1355, /* GL_RGB10 */
+      1359, /* GL_RGB12 */
+      1361, /* GL_RGB16 */
+      1378, /* GL_RGBA2 */
+      1380, /* GL_RGBA4 */
+      1368, /* GL_RGB5_A1 */
+      1384, /* GL_RGBA8 */
+      1356, /* GL_RGB10_A2 */
+      1374, /* GL_RGBA12 */
+      1376, /* GL_RGBA16 */
+      1746, /* GL_TEXTURE_RED_SIZE */
+      1716, /* GL_TEXTURE_GREEN_SIZE */
+      1654, /* GL_TEXTURE_BLUE_SIZE */
+      1641, /* GL_TEXTURE_ALPHA_SIZE */
+      1729, /* GL_TEXTURE_LUMINANCE_SIZE */
+      1720, /* GL_TEXTURE_INTENSITY_SIZE */
+      1348, /* GL_REPLACE_EXT */
+      1273, /* GL_PROXY_TEXTURE_1D */
+      1276, /* GL_PROXY_TEXTURE_2D */
+      1753, /* GL_TEXTURE_TOO_LARGE_EXT */
+      1741, /* GL_TEXTURE_PRIORITY */
+      1748, /* GL_TEXTURE_RESIDENT */
+      1644, /* GL_TEXTURE_BINDING_1D */
+      1646, /* GL_TEXTURE_BINDING_2D */
+      1648, /* GL_TEXTURE_BINDING_3D */
+      1098, /* GL_PACK_SKIP_IMAGES */
+      1094, /* GL_PACK_IMAGE_HEIGHT */
+      1784, /* GL_UNPACK_SKIP_IMAGES */
+      1781, /* GL_UNPACK_IMAGE_HEIGHT */
+      1640, /* GL_TEXTURE_3D */
+      1279, /* GL_PROXY_TEXTURE_3D */
+      1703, /* GL_TEXTURE_DEPTH */
+      1756, /* GL_TEXTURE_WRAP_R */
+       858, /* GL_MAX_3D_TEXTURE_SIZE */
+      1818, /* GL_VERTEX_ARRAY */
+      1028, /* GL_NORMAL_ARRAY */
+       149, /* GL_COLOR_ARRAY */
+       633, /* GL_INDEX_ARRAY */
+      1681, /* GL_TEXTURE_COORD_ARRAY */
+       460, /* GL_EDGE_FLAG_ARRAY */
+      1824, /* GL_VERTEX_ARRAY_SIZE */
+      1826, /* GL_VERTEX_ARRAY_TYPE */
+      1825, /* GL_VERTEX_ARRAY_STRIDE */
+      1033, /* GL_NORMAL_ARRAY_TYPE */
+      1032, /* GL_NORMAL_ARRAY_STRIDE */
+       153, /* GL_COLOR_ARRAY_SIZE */
+       155, /* GL_COLOR_ARRAY_TYPE */
+       154, /* GL_COLOR_ARRAY_STRIDE */
+       638, /* GL_INDEX_ARRAY_TYPE */
+       637, /* GL_INDEX_ARRAY_STRIDE */
+      1685, /* GL_TEXTURE_COORD_ARRAY_SIZE */
+      1687, /* GL_TEXTURE_COORD_ARRAY_TYPE */
+      1686, /* GL_TEXTURE_COORD_ARRAY_STRIDE */
+       464, /* GL_EDGE_FLAG_ARRAY_STRIDE */
+      1823, /* GL_VERTEX_ARRAY_POINTER */
+      1031, /* GL_NORMAL_ARRAY_POINTER */
+       152, /* GL_COLOR_ARRAY_POINTER */
+       636, /* GL_INDEX_ARRAY_POINTER */
+      1684, /* GL_TEXTURE_COORD_ARRAY_POINTER */
+       463, /* GL_EDGE_FLAG_ARRAY_POINTER */
+      1007, /* GL_MULTISAMPLE */
+      1408, /* GL_SAMPLE_ALPHA_TO_COVERAGE */
+      1410, /* GL_SAMPLE_ALPHA_TO_ONE */
+      1415, /* GL_SAMPLE_COVERAGE */
+      1412, /* GL_SAMPLE_BUFFERS */
+      1403, /* GL_SAMPLES */
+      1419, /* GL_SAMPLE_COVERAGE_VALUE */
+      1417, /* GL_SAMPLE_COVERAGE_INVERT */
+       196, /* GL_COLOR_MATRIX */
+       198, /* GL_COLOR_MATRIX_STACK_DEPTH */
+       867, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH */
+      1203, /* GL_POST_COLOR_MATRIX_RED_SCALE */
+      1199, /* GL_POST_COLOR_MATRIX_GREEN_SCALE */
+      1194, /* GL_POST_COLOR_MATRIX_BLUE_SCALE */
+      1190, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE */
+      1201, /* GL_POST_COLOR_MATRIX_RED_BIAS */
+      1197, /* GL_POST_COLOR_MATRIX_GREEN_BIAS */
+      1192, /* GL_POST_COLOR_MATRIX_BLUE_BIAS */
+      1188, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS */
+      1664, /* GL_TEXTURE_COLOR_TABLE_SGI */
+      1280, /* GL_PROXY_TEXTURE_COLOR_TABLE_SGI */
+      1666, /* GL_TEXTURE_COMPARE_FAIL_VALUE_ARB */
         80, /* GL_BLEND_DST_RGB */
         89, /* GL_BLEND_SRC_RGB */
         79, /* GL_BLEND_DST_ALPHA */
         88, /* GL_BLEND_SRC_ALPHA */
-       201, /* GL_COLOR_TABLE */
-      1212, /* GL_POST_CONVOLUTION_COLOR_TABLE */
-      1195, /* GL_POST_COLOR_MATRIX_COLOR_TABLE */
-      1267, /* GL_PROXY_COLOR_TABLE */
-      1271, /* GL_PROXY_POST_CONVOLUTION_COLOR_TABLE */
-      1270, /* GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE */
-       225, /* GL_COLOR_TABLE_SCALE */
-       205, /* GL_COLOR_TABLE_BIAS */
-       210, /* GL_COLOR_TABLE_FORMAT */
-       227, /* GL_COLOR_TABLE_WIDTH */
-       222, /* GL_COLOR_TABLE_RED_SIZE */
-       213, /* GL_COLOR_TABLE_GREEN_SIZE */
-       207, /* GL_COLOR_TABLE_BLUE_SIZE */
-       202, /* GL_COLOR_TABLE_ALPHA_SIZE */
-       219, /* GL_COLOR_TABLE_LUMINANCE_SIZE */
-       216, /* GL_COLOR_TABLE_INTENSITY_SIZE */
+       202, /* GL_COLOR_TABLE */
+      1213, /* GL_POST_CONVOLUTION_COLOR_TABLE */
+      1196, /* GL_POST_COLOR_MATRIX_COLOR_TABLE */
+      1268, /* GL_PROXY_COLOR_TABLE */
+      1272, /* GL_PROXY_POST_CONVOLUTION_COLOR_TABLE */
+      1271, /* GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE */
+       226, /* GL_COLOR_TABLE_SCALE */
+       206, /* GL_COLOR_TABLE_BIAS */
+       211, /* GL_COLOR_TABLE_FORMAT */
+       228, /* GL_COLOR_TABLE_WIDTH */
+       223, /* GL_COLOR_TABLE_RED_SIZE */
+       214, /* GL_COLOR_TABLE_GREEN_SIZE */
+       208, /* GL_COLOR_TABLE_BLUE_SIZE */
+       203, /* GL_COLOR_TABLE_ALPHA_SIZE */
+       220, /* GL_COLOR_TABLE_LUMINANCE_SIZE */
+       217, /* GL_COLOR_TABLE_INTENSITY_SIZE */
         71, /* GL_BGR */
         72, /* GL_BGRA */
-       880, /* GL_MAX_ELEMENTS_VERTICES */
-       879, /* GL_MAX_ELEMENTS_INDICES */
-      1715, /* GL_TEXTURE_INDEX_SIZE_EXT */
-       145, /* GL_CLIP_VOLUME_CLIPPING_HINT_EXT */
-      1159, /* GL_POINT_SIZE_MIN */
-      1155, /* GL_POINT_SIZE_MAX */
-      1149, /* GL_POINT_FADE_THRESHOLD_SIZE */
-      1145, /* GL_POINT_DISTANCE_ATTENUATION */
-       127, /* GL_CLAMP_TO_BORDER */
-       130, /* GL_CLAMP_TO_EDGE */
-      1736, /* GL_TEXTURE_MIN_LOD */
-      1734, /* GL_TEXTURE_MAX_LOD */
-      1639, /* GL_TEXTURE_BASE_LEVEL */
-      1733, /* GL_TEXTURE_MAX_LEVEL */
-       625, /* GL_IGNORE_BORDER_HP */
-       276, /* GL_CONSTANT_BORDER_HP */
-      1346, /* GL_REPLICATE_BORDER_HP */
-       282, /* GL_CONVOLUTION_BORDER_COLOR */
-      1056, /* GL_OCCLUSION_TEST_HP */
-      1057, /* GL_OCCLUSION_TEST_RESULT_HP */
-       698, /* GL_LINEAR_CLIPMAP_LINEAR_SGIX */
-      1654, /* GL_TEXTURE_CLIPMAP_CENTER_SGIX */
-      1656, /* GL_TEXTURE_CLIPMAP_FRAME_SGIX */
-      1658, /* GL_TEXTURE_CLIPMAP_OFFSET_SGIX */
-      1659, /* GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX */
-      1657, /* GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX */
-      1655, /* GL_TEXTURE_CLIPMAP_DEPTH_SGIX */
-       861, /* GL_MAX_CLIPMAP_DEPTH_SGIX */
-       862, /* GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX */
-      1222, /* GL_POST_TEXTURE_FILTER_BIAS_SGIX */
-      1224, /* GL_POST_TEXTURE_FILTER_SCALE_SGIX */
-      1221, /* GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX */
-      1223, /* GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX */
-      1723, /* GL_TEXTURE_LOD_BIAS_S_SGIX */
-      1724, /* GL_TEXTURE_LOD_BIAS_T_SGIX */
-      1722, /* GL_TEXTURE_LOD_BIAS_R_SGIX */
-       594, /* GL_GENERATE_MIPMAP */
-       595, /* GL_GENERATE_MIPMAP_HINT */
-       532, /* GL_FOG_OFFSET_SGIX */
-       533, /* GL_FOG_OFFSET_VALUE_SGIX */
-      1668, /* GL_TEXTURE_COMPARE_SGIX */
-      1667, /* GL_TEXTURE_COMPARE_OPERATOR_SGIX */
-      1719, /* GL_TEXTURE_LEQUAL_R_SGIX */
-      1711, /* GL_TEXTURE_GEQUAL_R_SGIX */
-       360, /* GL_DEPTH_COMPONENT16 */
-       363, /* GL_DEPTH_COMPONENT24 */
-       366, /* GL_DEPTH_COMPONENT32 */
-       306, /* GL_CULL_VERTEX_EXT */
-       308, /* GL_CULL_VERTEX_OBJECT_POSITION_EXT */
-       307, /* GL_CULL_VERTEX_EYE_POSITION_EXT */
-      1876, /* GL_WRAP_BORDER_SUN */
-      1661, /* GL_TEXTURE_COLOR_WRITEMASK_SGIS */
-       691, /* GL_LIGHT_MODEL_COLOR_CONTROL */
-      1445, /* GL_SINGLE_COLOR */
-      1431, /* GL_SEPARATE_SPECULAR_COLOR */
-      1440, /* GL_SHARED_TEXTURE_PALETTE_EXT */
-       543, /* GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING */
-       544, /* GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE */
-       551, /* GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE */
-       546, /* GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE */
-       542, /* GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE */
-       541, /* GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE */
-       545, /* GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE */
-       552, /* GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE */
-       564, /* GL_FRAMEBUFFER_DEFAULT */
-       580, /* GL_FRAMEBUFFER_UNDEFINED */
-       373, /* GL_DEPTH_STENCIL_ATTACHMENT */
-       631, /* GL_INDEX */
-      1785, /* GL_UNSIGNED_BYTE_2_3_3_REV */
-      1801, /* GL_UNSIGNED_SHORT_5_6_5 */
-      1802, /* GL_UNSIGNED_SHORT_5_6_5_REV */
-      1799, /* GL_UNSIGNED_SHORT_4_4_4_4_REV */
-      1797, /* GL_UNSIGNED_SHORT_1_5_5_5_REV */
-      1794, /* GL_UNSIGNED_INT_8_8_8_8_REV */
-      1792, /* GL_UNSIGNED_INT_2_10_10_10_REV */
-      1731, /* GL_TEXTURE_MAX_CLAMP_S_SGIX */
-      1732, /* GL_TEXTURE_MAX_CLAMP_T_SGIX */
-      1730, /* GL_TEXTURE_MAX_CLAMP_R_SGIX */
-       957, /* GL_MIRRORED_REPEAT */
-      1387, /* GL_RGB_S3TC */
-      1362, /* GL_RGB4_S3TC */
-      1385, /* GL_RGBA_S3TC */
-      1379, /* GL_RGBA4_S3TC */
-      1383, /* GL_RGBA_DXT5_S3TC */
-      1377, /* GL_RGBA4_DXT5_S3TC */
-       264, /* GL_COMPRESSED_RGB_S3TC_DXT1_EXT */
-       259, /* GL_COMPRESSED_RGBA_S3TC_DXT1_EXT */
-       260, /* GL_COMPRESSED_RGBA_S3TC_DXT3_EXT */
-       261, /* GL_COMPRESSED_RGBA_S3TC_DXT5_EXT */
-      1018, /* GL_NEAREST_CLIPMAP_NEAREST_SGIX */
-      1017, /* GL_NEAREST_CLIPMAP_LINEAR_SGIX */
-       699, /* GL_LINEAR_CLIPMAP_NEAREST_SGIX */
-       519, /* GL_FOG_COORDINATE_SOURCE */
-       511, /* GL_FOG_COORD */
-       535, /* GL_FRAGMENT_DEPTH */
-       312, /* GL_CURRENT_FOG_COORD */
-       518, /* GL_FOG_COORDINATE_ARRAY_TYPE */
-       517, /* GL_FOG_COORDINATE_ARRAY_STRIDE */
-       516, /* GL_FOG_COORDINATE_ARRAY_POINTER */
-       513, /* GL_FOG_COORDINATE_ARRAY */
-       199, /* GL_COLOR_SUM */
-       332, /* GL_CURRENT_SECONDARY_COLOR */
-      1424, /* GL_SECONDARY_COLOR_ARRAY_SIZE */
-      1426, /* GL_SECONDARY_COLOR_ARRAY_TYPE */
-      1425, /* GL_SECONDARY_COLOR_ARRAY_STRIDE */
-      1423, /* GL_SECONDARY_COLOR_ARRAY_POINTER */
-      1420, /* GL_SECONDARY_COLOR_ARRAY */
-       330, /* GL_CURRENT_RASTER_SECONDARY_COLOR */
+       881, /* GL_MAX_ELEMENTS_VERTICES */
+       880, /* GL_MAX_ELEMENTS_INDICES */
+      1719, /* GL_TEXTURE_INDEX_SIZE_EXT */
+       146, /* GL_CLIP_VOLUME_CLIPPING_HINT_EXT */
+      1160, /* GL_POINT_SIZE_MIN */
+      1156, /* GL_POINT_SIZE_MAX */
+      1150, /* GL_POINT_FADE_THRESHOLD_SIZE */
+      1146, /* GL_POINT_DISTANCE_ATTENUATION */
+       128, /* GL_CLAMP_TO_BORDER */
+       131, /* GL_CLAMP_TO_EDGE */
+      1740, /* GL_TEXTURE_MIN_LOD */
+      1738, /* GL_TEXTURE_MAX_LOD */
+      1643, /* GL_TEXTURE_BASE_LEVEL */
+      1737, /* GL_TEXTURE_MAX_LEVEL */
+       626, /* GL_IGNORE_BORDER_HP */
+       277, /* GL_CONSTANT_BORDER_HP */
+      1349, /* GL_REPLICATE_BORDER_HP */
+       283, /* GL_CONVOLUTION_BORDER_COLOR */
+      1057, /* GL_OCCLUSION_TEST_HP */
+      1058, /* GL_OCCLUSION_TEST_RESULT_HP */
+       699, /* GL_LINEAR_CLIPMAP_LINEAR_SGIX */
+      1658, /* GL_TEXTURE_CLIPMAP_CENTER_SGIX */
+      1660, /* GL_TEXTURE_CLIPMAP_FRAME_SGIX */
+      1662, /* GL_TEXTURE_CLIPMAP_OFFSET_SGIX */
+      1663, /* GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX */
+      1661, /* GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX */
+      1659, /* GL_TEXTURE_CLIPMAP_DEPTH_SGIX */
+       862, /* GL_MAX_CLIPMAP_DEPTH_SGIX */
+       863, /* GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX */
+      1223, /* GL_POST_TEXTURE_FILTER_BIAS_SGIX */
+      1225, /* GL_POST_TEXTURE_FILTER_SCALE_SGIX */
+      1222, /* GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX */
+      1224, /* GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX */
+      1727, /* GL_TEXTURE_LOD_BIAS_S_SGIX */
+      1728, /* GL_TEXTURE_LOD_BIAS_T_SGIX */
+      1726, /* GL_TEXTURE_LOD_BIAS_R_SGIX */
+       595, /* GL_GENERATE_MIPMAP */
+       596, /* GL_GENERATE_MIPMAP_HINT */
+       533, /* GL_FOG_OFFSET_SGIX */
+       534, /* GL_FOG_OFFSET_VALUE_SGIX */
+      1672, /* GL_TEXTURE_COMPARE_SGIX */
+      1671, /* GL_TEXTURE_COMPARE_OPERATOR_SGIX */
+      1723, /* GL_TEXTURE_LEQUAL_R_SGIX */
+      1715, /* GL_TEXTURE_GEQUAL_R_SGIX */
+       361, /* GL_DEPTH_COMPONENT16 */
+       364, /* GL_DEPTH_COMPONENT24 */
+       367, /* GL_DEPTH_COMPONENT32 */
+       307, /* GL_CULL_VERTEX_EXT */
+       309, /* GL_CULL_VERTEX_OBJECT_POSITION_EXT */
+       308, /* GL_CULL_VERTEX_EYE_POSITION_EXT */
+      1882, /* GL_WRAP_BORDER_SUN */
+      1665, /* GL_TEXTURE_COLOR_WRITEMASK_SGIS */
+       692, /* GL_LIGHT_MODEL_COLOR_CONTROL */
+      1449, /* GL_SINGLE_COLOR */
+      1435, /* GL_SEPARATE_SPECULAR_COLOR */
+      1444, /* GL_SHARED_TEXTURE_PALETTE_EXT */
+       544, /* GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING */
+       545, /* GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE */
+       552, /* GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE */
+       547, /* GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE */
+       543, /* GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE */
+       542, /* GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE */
+       546, /* GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE */
+       553, /* GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE */
+       565, /* GL_FRAMEBUFFER_DEFAULT */
+       581, /* GL_FRAMEBUFFER_UNDEFINED */
+       374, /* GL_DEPTH_STENCIL_ATTACHMENT */
+       632, /* GL_INDEX */
+      1790, /* GL_UNSIGNED_BYTE_2_3_3_REV */
+      1806, /* GL_UNSIGNED_SHORT_5_6_5 */
+      1807, /* GL_UNSIGNED_SHORT_5_6_5_REV */
+      1804, /* GL_UNSIGNED_SHORT_4_4_4_4_REV */
+      1802, /* GL_UNSIGNED_SHORT_1_5_5_5_REV */
+      1799, /* GL_UNSIGNED_INT_8_8_8_8_REV */
+      1797, /* GL_UNSIGNED_INT_2_10_10_10_REV */
+      1735, /* GL_TEXTURE_MAX_CLAMP_S_SGIX */
+      1736, /* GL_TEXTURE_MAX_CLAMP_T_SGIX */
+      1734, /* GL_TEXTURE_MAX_CLAMP_R_SGIX */
+       958, /* GL_MIRRORED_REPEAT */
+      1391, /* GL_RGB_S3TC */
+      1366, /* GL_RGB4_S3TC */
+      1389, /* GL_RGBA_S3TC */
+      1383, /* GL_RGBA4_S3TC */
+      1387, /* GL_RGBA_DXT5_S3TC */
+      1381, /* GL_RGBA4_DXT5_S3TC */
+       265, /* GL_COMPRESSED_RGB_S3TC_DXT1_EXT */
+       260, /* GL_COMPRESSED_RGBA_S3TC_DXT1_EXT */
+       261, /* GL_COMPRESSED_RGBA_S3TC_DXT3_EXT */
+       262, /* GL_COMPRESSED_RGBA_S3TC_DXT5_EXT */
+      1019, /* GL_NEAREST_CLIPMAP_NEAREST_SGIX */
+      1018, /* GL_NEAREST_CLIPMAP_LINEAR_SGIX */
+       700, /* GL_LINEAR_CLIPMAP_NEAREST_SGIX */
+       520, /* GL_FOG_COORDINATE_SOURCE */
+       512, /* GL_FOG_COORD */
+       536, /* GL_FRAGMENT_DEPTH */
+       313, /* GL_CURRENT_FOG_COORD */
+       519, /* GL_FOG_COORDINATE_ARRAY_TYPE */
+       518, /* GL_FOG_COORDINATE_ARRAY_STRIDE */
+       517, /* GL_FOG_COORDINATE_ARRAY_POINTER */
+       514, /* GL_FOG_COORDINATE_ARRAY */
+       200, /* GL_COLOR_SUM */
+       333, /* GL_CURRENT_SECONDARY_COLOR */
+      1428, /* GL_SECONDARY_COLOR_ARRAY_SIZE */
+      1430, /* GL_SECONDARY_COLOR_ARRAY_TYPE */
+      1429, /* GL_SECONDARY_COLOR_ARRAY_STRIDE */
+      1427, /* GL_SECONDARY_COLOR_ARRAY_POINTER */
+      1424, /* GL_SECONDARY_COLOR_ARRAY */
+       331, /* GL_CURRENT_RASTER_SECONDARY_COLOR */
         28, /* GL_ALIASED_POINT_SIZE_RANGE */
         27, /* GL_ALIASED_LINE_WIDTH_RANGE */
-      1568, /* GL_TEXTURE0 */
-      1570, /* GL_TEXTURE1 */
-      1592, /* GL_TEXTURE2 */
-      1614, /* GL_TEXTURE3 */
-      1620, /* GL_TEXTURE4 */
-      1622, /* GL_TEXTURE5 */
-      1624, /* GL_TEXTURE6 */
-      1626, /* GL_TEXTURE7 */
-      1628, /* GL_TEXTURE8 */
-      1630, /* GL_TEXTURE9 */
-      1571, /* GL_TEXTURE10 */
-      1573, /* GL_TEXTURE11 */
-      1575, /* GL_TEXTURE12 */
-      1577, /* GL_TEXTURE13 */
-      1579, /* GL_TEXTURE14 */
-      1581, /* GL_TEXTURE15 */
-      1583, /* GL_TEXTURE16 */
-      1585, /* GL_TEXTURE17 */
-      1587, /* GL_TEXTURE18 */
-      1589, /* GL_TEXTURE19 */
-      1593, /* GL_TEXTURE20 */
-      1595, /* GL_TEXTURE21 */
-      1597, /* GL_TEXTURE22 */
-      1599, /* GL_TEXTURE23 */
-      1601, /* GL_TEXTURE24 */
-      1603, /* GL_TEXTURE25 */
-      1605, /* GL_TEXTURE26 */
-      1607, /* GL_TEXTURE27 */
-      1609, /* GL_TEXTURE28 */
-      1611, /* GL_TEXTURE29 */
-      1615, /* GL_TEXTURE30 */
-      1617, /* GL_TEXTURE31 */
+      1572, /* GL_TEXTURE0 */
+      1574, /* GL_TEXTURE1 */
+      1596, /* GL_TEXTURE2 */
+      1618, /* GL_TEXTURE3 */
+      1624, /* GL_TEXTURE4 */
+      1626, /* GL_TEXTURE5 */
+      1628, /* GL_TEXTURE6 */
+      1630, /* GL_TEXTURE7 */
+      1632, /* GL_TEXTURE8 */
+      1634, /* GL_TEXTURE9 */
+      1575, /* GL_TEXTURE10 */
+      1577, /* GL_TEXTURE11 */
+      1579, /* GL_TEXTURE12 */
+      1581, /* GL_TEXTURE13 */
+      1583, /* GL_TEXTURE14 */
+      1585, /* GL_TEXTURE15 */
+      1587, /* GL_TEXTURE16 */
+      1589, /* GL_TEXTURE17 */
+      1591, /* GL_TEXTURE18 */
+      1593, /* GL_TEXTURE19 */
+      1597, /* GL_TEXTURE20 */
+      1599, /* GL_TEXTURE21 */
+      1601, /* GL_TEXTURE22 */
+      1603, /* GL_TEXTURE23 */
+      1605, /* GL_TEXTURE24 */
+      1607, /* GL_TEXTURE25 */
+      1609, /* GL_TEXTURE26 */
+      1611, /* GL_TEXTURE27 */
+      1613, /* GL_TEXTURE28 */
+      1615, /* GL_TEXTURE29 */
+      1619, /* GL_TEXTURE30 */
+      1621, /* GL_TEXTURE31 */
         18, /* GL_ACTIVE_TEXTURE */
-       133, /* GL_CLIENT_ACTIVE_TEXTURE */
-       935, /* GL_MAX_TEXTURE_UNITS */
-      1763, /* GL_TRANSPOSE_MODELVIEW_MATRIX */
-      1766, /* GL_TRANSPOSE_PROJECTION_MATRIX */
-      1768, /* GL_TRANSPOSE_TEXTURE_MATRIX */
-      1760, /* GL_TRANSPOSE_COLOR_MATRIX */
-      1550, /* GL_SUBTRACT */
-       920, /* GL_MAX_RENDERBUFFER_SIZE */
-       247, /* GL_COMPRESSED_ALPHA */
-       251, /* GL_COMPRESSED_LUMINANCE */
-       252, /* GL_COMPRESSED_LUMINANCE_ALPHA */
-       249, /* GL_COMPRESSED_INTENSITY */
-       255, /* GL_COMPRESSED_RGB */
-       256, /* GL_COMPRESSED_RGBA */
-      1675, /* GL_TEXTURE_COMPRESSION_HINT */
-      1740, /* GL_TEXTURE_RECTANGLE_ARB */
-      1647, /* GL_TEXTURE_BINDING_RECTANGLE_ARB */
-      1282, /* GL_PROXY_TEXTURE_RECTANGLE_ARB */
-       918, /* GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB */
-       372, /* GL_DEPTH_STENCIL */
-      1789, /* GL_UNSIGNED_INT_24_8 */
-       931, /* GL_MAX_TEXTURE_LOD_BIAS */
-      1729, /* GL_TEXTURE_MAX_ANISOTROPY_EXT */
-       932, /* GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT */
-      1705, /* GL_TEXTURE_FILTER_CONTROL */
-      1720, /* GL_TEXTURE_LOD_BIAS */
-       232, /* GL_COMBINE4 */
-       925, /* GL_MAX_SHININESS_NV */
-       926, /* GL_MAX_SPOT_EXPONENT_NV */
-       629, /* GL_INCR_WRAP */
-       343, /* GL_DECR_WRAP */
-       977, /* GL_MODELVIEW1_ARB */
-      1033, /* GL_NORMAL_MAP */
-      1319, /* GL_REFLECTION_MAP */
-      1684, /* GL_TEXTURE_CUBE_MAP */
-      1645, /* GL_TEXTURE_BINDING_CUBE_MAP */
-      1692, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X */
-      1686, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X */
-      1694, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y */
-      1688, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y */
-      1696, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z */
-      1690, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z */
-      1280, /* GL_PROXY_TEXTURE_CUBE_MAP */
-       874, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE */
-      1012, /* GL_MULTISAMPLE_FILTER_HINT_NV */
-       527, /* GL_FOG_DISTANCE_MODE_NV */
-       478, /* GL_EYE_RADIAL_NV */
-       477, /* GL_EYE_PLANE_ABSOLUTE_NV */
-       231, /* GL_COMBINE */
-       238, /* GL_COMBINE_RGB */
-       233, /* GL_COMBINE_ALPHA */
-      1388, /* GL_RGB_SCALE */
+       134, /* GL_CLIENT_ACTIVE_TEXTURE */
+       936, /* GL_MAX_TEXTURE_UNITS */
+      1767, /* GL_TRANSPOSE_MODELVIEW_MATRIX */
+      1770, /* GL_TRANSPOSE_PROJECTION_MATRIX */
+      1772, /* GL_TRANSPOSE_TEXTURE_MATRIX */
+      1764, /* GL_TRANSPOSE_COLOR_MATRIX */
+      1554, /* GL_SUBTRACT */
+       921, /* GL_MAX_RENDERBUFFER_SIZE */
+       248, /* GL_COMPRESSED_ALPHA */
+       252, /* GL_COMPRESSED_LUMINANCE */
+       253, /* GL_COMPRESSED_LUMINANCE_ALPHA */
+       250, /* GL_COMPRESSED_INTENSITY */
+       256, /* GL_COMPRESSED_RGB */
+       257, /* GL_COMPRESSED_RGBA */
+      1679, /* GL_TEXTURE_COMPRESSION_HINT */
+      1744, /* GL_TEXTURE_RECTANGLE_ARB */
+      1651, /* GL_TEXTURE_BINDING_RECTANGLE_ARB */
+      1283, /* GL_PROXY_TEXTURE_RECTANGLE_ARB */
+       919, /* GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB */
+       373, /* GL_DEPTH_STENCIL */
+      1794, /* GL_UNSIGNED_INT_24_8 */
+       932, /* GL_MAX_TEXTURE_LOD_BIAS */
+      1733, /* GL_TEXTURE_MAX_ANISOTROPY_EXT */
+       933, /* GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT */
+      1709, /* GL_TEXTURE_FILTER_CONTROL */
+      1724, /* GL_TEXTURE_LOD_BIAS */
+       233, /* GL_COMBINE4 */
+       926, /* GL_MAX_SHININESS_NV */
+       927, /* GL_MAX_SPOT_EXPONENT_NV */
+       630, /* GL_INCR_WRAP */
+       344, /* GL_DECR_WRAP */
+       978, /* GL_MODELVIEW1_ARB */
+      1034, /* GL_NORMAL_MAP */
+      1321, /* GL_REFLECTION_MAP */
+      1688, /* GL_TEXTURE_CUBE_MAP */
+      1649, /* GL_TEXTURE_BINDING_CUBE_MAP */
+      1696, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X */
+      1690, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X */
+      1698, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y */
+      1692, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y */
+      1700, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z */
+      1694, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z */
+      1281, /* GL_PROXY_TEXTURE_CUBE_MAP */
+       875, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE */
+      1013, /* GL_MULTISAMPLE_FILTER_HINT_NV */
+       528, /* GL_FOG_DISTANCE_MODE_NV */
+       479, /* GL_EYE_RADIAL_NV */
+       478, /* GL_EYE_PLANE_ABSOLUTE_NV */
+       232, /* GL_COMBINE */
+       239, /* GL_COMBINE_RGB */
+       234, /* GL_COMBINE_ALPHA */
+      1392, /* GL_RGB_SCALE */
         24, /* GL_ADD_SIGNED */
-       657, /* GL_INTERPOLATE */
-       271, /* GL_CONSTANT */
-      1228, /* GL_PRIMARY_COLOR */
-      1225, /* GL_PREVIOUS */
-      1460, /* GL_SOURCE0_RGB */
-      1466, /* GL_SOURCE1_RGB */
-      1472, /* GL_SOURCE2_RGB */
-      1476, /* GL_SOURCE3_RGB_NV */
-      1457, /* GL_SOURCE0_ALPHA */
-      1463, /* GL_SOURCE1_ALPHA */
-      1469, /* GL_SOURCE2_ALPHA */
-      1475, /* GL_SOURCE3_ALPHA_NV */
-      1070, /* GL_OPERAND0_RGB */
-      1076, /* GL_OPERAND1_RGB */
-      1082, /* GL_OPERAND2_RGB */
-      1086, /* GL_OPERAND3_RGB_NV */
-      1067, /* GL_OPERAND0_ALPHA */
-      1073, /* GL_OPERAND1_ALPHA */
-      1079, /* GL_OPERAND2_ALPHA */
-      1085, /* GL_OPERAND3_ALPHA_NV */
-      1814, /* GL_VERTEX_ARRAY_BINDING */
-      1738, /* GL_TEXTURE_RANGE_LENGTH_APPLE */
-      1739, /* GL_TEXTURE_RANGE_POINTER_APPLE */
-      1880, /* GL_YCBCR_422_APPLE */
-      1803, /* GL_UNSIGNED_SHORT_8_8_APPLE */
-      1805, /* GL_UNSIGNED_SHORT_8_8_REV_APPLE */
-      1748, /* GL_TEXTURE_STORAGE_HINT_APPLE */
-      1541, /* GL_STORAGE_PRIVATE_APPLE */
-      1540, /* GL_STORAGE_CACHED_APPLE */
-      1542, /* GL_STORAGE_SHARED_APPLE */
-      1447, /* GL_SLICE_ACCUM_SUN */
-      1289, /* GL_QUAD_MESH_SUN */
-      1772, /* GL_TRIANGLE_MESH_SUN */
-      1853, /* GL_VERTEX_PROGRAM_ARB */
-      1864, /* GL_VERTEX_STATE_PROGRAM_NV */
-      1840, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED */
-      1846, /* GL_VERTEX_ATTRIB_ARRAY_SIZE */
-      1848, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE */
-      1850, /* GL_VERTEX_ATTRIB_ARRAY_TYPE */
-       334, /* GL_CURRENT_VERTEX_ATTRIB */
-      1241, /* GL_PROGRAM_LENGTH_ARB */
-      1255, /* GL_PROGRAM_STRING_ARB */
-       999, /* GL_MODELVIEW_PROJECTION_NV */
-       624, /* GL_IDENTITY_NV */
-       671, /* GL_INVERSE_NV */
-      1765, /* GL_TRANSPOSE_NV */
-       672, /* GL_INVERSE_TRANSPOSE_NV */
-       904, /* GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB */
-       903, /* GL_MAX_PROGRAM_MATRICES_ARB */
-       810, /* GL_MATRIX0_NV */
-       822, /* GL_MATRIX1_NV */
-       834, /* GL_MATRIX2_NV */
-       838, /* GL_MATRIX3_NV */
-       840, /* GL_MATRIX4_NV */
-       842, /* GL_MATRIX5_NV */
-       844, /* GL_MATRIX6_NV */
-       846, /* GL_MATRIX7_NV */
-       318, /* GL_CURRENT_MATRIX_STACK_DEPTH_ARB */
-       315, /* GL_CURRENT_MATRIX_ARB */
-      1856, /* GL_VERTEX_PROGRAM_POINT_SIZE */
-      1859, /* GL_VERTEX_PROGRAM_TWO_SIDE */
-      1253, /* GL_PROGRAM_PARAMETER_NV */
-      1844, /* GL_VERTEX_ATTRIB_ARRAY_POINTER */
-      1257, /* GL_PROGRAM_TARGET_NV */
-      1254, /* GL_PROGRAM_RESIDENT_NV */
-      1757, /* GL_TRACK_MATRIX_NV */
-      1758, /* GL_TRACK_MATRIX_TRANSFORM_NV */
-      1854, /* GL_VERTEX_PROGRAM_BINDING_NV */
-      1235, /* GL_PROGRAM_ERROR_POSITION_ARB */
-       356, /* GL_DEPTH_CLAMP */
-      1822, /* GL_VERTEX_ATTRIB_ARRAY0_NV */
-      1829, /* GL_VERTEX_ATTRIB_ARRAY1_NV */
-      1830, /* GL_VERTEX_ATTRIB_ARRAY2_NV */
-      1831, /* GL_VERTEX_ATTRIB_ARRAY3_NV */
-      1832, /* GL_VERTEX_ATTRIB_ARRAY4_NV */
-      1833, /* GL_VERTEX_ATTRIB_ARRAY5_NV */
-      1834, /* GL_VERTEX_ATTRIB_ARRAY6_NV */
-      1835, /* GL_VERTEX_ATTRIB_ARRAY7_NV */
-      1836, /* GL_VERTEX_ATTRIB_ARRAY8_NV */
-      1837, /* GL_VERTEX_ATTRIB_ARRAY9_NV */
-      1823, /* GL_VERTEX_ATTRIB_ARRAY10_NV */
-      1824, /* GL_VERTEX_ATTRIB_ARRAY11_NV */
-      1825, /* GL_VERTEX_ATTRIB_ARRAY12_NV */
-      1826, /* GL_VERTEX_ATTRIB_ARRAY13_NV */
-      1827, /* GL_VERTEX_ATTRIB_ARRAY14_NV */
-      1828, /* GL_VERTEX_ATTRIB_ARRAY15_NV */
-       758, /* GL_MAP1_VERTEX_ATTRIB0_4_NV */
-       765, /* GL_MAP1_VERTEX_ATTRIB1_4_NV */
-       766, /* GL_MAP1_VERTEX_ATTRIB2_4_NV */
-       767, /* GL_MAP1_VERTEX_ATTRIB3_4_NV */
-       768, /* GL_MAP1_VERTEX_ATTRIB4_4_NV */
-       769, /* GL_MAP1_VERTEX_ATTRIB5_4_NV */
-       770, /* GL_MAP1_VERTEX_ATTRIB6_4_NV */
-       771, /* GL_MAP1_VERTEX_ATTRIB7_4_NV */
-       772, /* GL_MAP1_VERTEX_ATTRIB8_4_NV */
-       773, /* GL_MAP1_VERTEX_ATTRIB9_4_NV */
-       759, /* GL_MAP1_VERTEX_ATTRIB10_4_NV */
-       760, /* GL_MAP1_VERTEX_ATTRIB11_4_NV */
-       761, /* GL_MAP1_VERTEX_ATTRIB12_4_NV */
-       762, /* GL_MAP1_VERTEX_ATTRIB13_4_NV */
-       763, /* GL_MAP1_VERTEX_ATTRIB14_4_NV */
-       764, /* GL_MAP1_VERTEX_ATTRIB15_4_NV */
-       785, /* GL_MAP2_VERTEX_ATTRIB0_4_NV */
-       792, /* GL_MAP2_VERTEX_ATTRIB1_4_NV */
-       793, /* GL_MAP2_VERTEX_ATTRIB2_4_NV */
-       794, /* GL_MAP2_VERTEX_ATTRIB3_4_NV */
-       795, /* GL_MAP2_VERTEX_ATTRIB4_4_NV */
-       796, /* GL_MAP2_VERTEX_ATTRIB5_4_NV */
-       797, /* GL_MAP2_VERTEX_ATTRIB6_4_NV */
-      1234, /* GL_PROGRAM_BINDING_ARB */
-       799, /* GL_MAP2_VERTEX_ATTRIB8_4_NV */
-       800, /* GL_MAP2_VERTEX_ATTRIB9_4_NV */
-       786, /* GL_MAP2_VERTEX_ATTRIB10_4_NV */
-       787, /* GL_MAP2_VERTEX_ATTRIB11_4_NV */
-       788, /* GL_MAP2_VERTEX_ATTRIB12_4_NV */
-       789, /* GL_MAP2_VERTEX_ATTRIB13_4_NV */
-       790, /* GL_MAP2_VERTEX_ATTRIB14_4_NV */
-       791, /* GL_MAP2_VERTEX_ATTRIB15_4_NV */
-      1673, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE */
-      1670, /* GL_TEXTURE_COMPRESSED */
-      1038, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS */
-       269, /* GL_COMPRESSED_TEXTURE_FORMATS */
-       947, /* GL_MAX_VERTEX_UNITS_ARB */
+       658, /* GL_INTERPOLATE */
+       272, /* GL_CONSTANT */
+      1229, /* GL_PRIMARY_COLOR */
+      1226, /* GL_PREVIOUS */
+      1464, /* GL_SOURCE0_RGB */
+      1470, /* GL_SOURCE1_RGB */
+      1476, /* GL_SOURCE2_RGB */
+      1480, /* GL_SOURCE3_RGB_NV */
+      1461, /* GL_SOURCE0_ALPHA */
+      1467, /* GL_SOURCE1_ALPHA */
+      1473, /* GL_SOURCE2_ALPHA */
+      1479, /* GL_SOURCE3_ALPHA_NV */
+      1071, /* GL_OPERAND0_RGB */
+      1077, /* GL_OPERAND1_RGB */
+      1083, /* GL_OPERAND2_RGB */
+      1087, /* GL_OPERAND3_RGB_NV */
+      1068, /* GL_OPERAND0_ALPHA */
+      1074, /* GL_OPERAND1_ALPHA */
+      1080, /* GL_OPERAND2_ALPHA */
+      1086, /* GL_OPERAND3_ALPHA_NV */
+       109, /* GL_BUFFER_OBJECT_APPLE */
+      1819, /* GL_VERTEX_ARRAY_BINDING */
+      1742, /* GL_TEXTURE_RANGE_LENGTH_APPLE */
+      1743, /* GL_TEXTURE_RANGE_POINTER_APPLE */
+      1886, /* GL_YCBCR_422_APPLE */
+      1808, /* GL_UNSIGNED_SHORT_8_8_APPLE */
+      1810, /* GL_UNSIGNED_SHORT_8_8_REV_APPLE */
+      1752, /* GL_TEXTURE_STORAGE_HINT_APPLE */
+      1545, /* GL_STORAGE_PRIVATE_APPLE */
+      1544, /* GL_STORAGE_CACHED_APPLE */
+      1546, /* GL_STORAGE_SHARED_APPLE */
+      1451, /* GL_SLICE_ACCUM_SUN */
+      1291, /* GL_QUAD_MESH_SUN */
+      1776, /* GL_TRIANGLE_MESH_SUN */
+      1858, /* GL_VERTEX_PROGRAM_ARB */
+      1869, /* GL_VERTEX_STATE_PROGRAM_NV */
+      1845, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED */
+      1851, /* GL_VERTEX_ATTRIB_ARRAY_SIZE */
+      1853, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE */
+      1855, /* GL_VERTEX_ATTRIB_ARRAY_TYPE */
+       335, /* GL_CURRENT_VERTEX_ATTRIB */
+      1242, /* GL_PROGRAM_LENGTH_ARB */
+      1256, /* GL_PROGRAM_STRING_ARB */
+      1000, /* GL_MODELVIEW_PROJECTION_NV */
+       625, /* GL_IDENTITY_NV */
+       672, /* GL_INVERSE_NV */
+      1769, /* GL_TRANSPOSE_NV */
+       673, /* GL_INVERSE_TRANSPOSE_NV */
+       905, /* GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB */
+       904, /* GL_MAX_PROGRAM_MATRICES_ARB */
+       811, /* GL_MATRIX0_NV */
+       823, /* GL_MATRIX1_NV */
+       835, /* GL_MATRIX2_NV */
+       839, /* GL_MATRIX3_NV */
+       841, /* GL_MATRIX4_NV */
+       843, /* GL_MATRIX5_NV */
+       845, /* GL_MATRIX6_NV */
+       847, /* GL_MATRIX7_NV */
+       319, /* GL_CURRENT_MATRIX_STACK_DEPTH_ARB */
+       316, /* GL_CURRENT_MATRIX_ARB */
+      1861, /* GL_VERTEX_PROGRAM_POINT_SIZE */
+      1864, /* GL_VERTEX_PROGRAM_TWO_SIDE */
+      1254, /* GL_PROGRAM_PARAMETER_NV */
+      1849, /* GL_VERTEX_ATTRIB_ARRAY_POINTER */
+      1258, /* GL_PROGRAM_TARGET_NV */
+      1255, /* GL_PROGRAM_RESIDENT_NV */
+      1761, /* GL_TRACK_MATRIX_NV */
+      1762, /* GL_TRACK_MATRIX_TRANSFORM_NV */
+      1859, /* GL_VERTEX_PROGRAM_BINDING_NV */
+      1236, /* GL_PROGRAM_ERROR_POSITION_ARB */
+       357, /* GL_DEPTH_CLAMP */
+      1827, /* GL_VERTEX_ATTRIB_ARRAY0_NV */
+      1834, /* GL_VERTEX_ATTRIB_ARRAY1_NV */
+      1835, /* GL_VERTEX_ATTRIB_ARRAY2_NV */
+      1836, /* GL_VERTEX_ATTRIB_ARRAY3_NV */
+      1837, /* GL_VERTEX_ATTRIB_ARRAY4_NV */
+      1838, /* GL_VERTEX_ATTRIB_ARRAY5_NV */
+      1839, /* GL_VERTEX_ATTRIB_ARRAY6_NV */
+      1840, /* GL_VERTEX_ATTRIB_ARRAY7_NV */
+      1841, /* GL_VERTEX_ATTRIB_ARRAY8_NV */
+      1842, /* GL_VERTEX_ATTRIB_ARRAY9_NV */
+      1828, /* GL_VERTEX_ATTRIB_ARRAY10_NV */
+      1829, /* GL_VERTEX_ATTRIB_ARRAY11_NV */
+      1830, /* GL_VERTEX_ATTRIB_ARRAY12_NV */
+      1831, /* GL_VERTEX_ATTRIB_ARRAY13_NV */
+      1832, /* GL_VERTEX_ATTRIB_ARRAY14_NV */
+      1833, /* GL_VERTEX_ATTRIB_ARRAY15_NV */
+       759, /* GL_MAP1_VERTEX_ATTRIB0_4_NV */
+       766, /* GL_MAP1_VERTEX_ATTRIB1_4_NV */
+       767, /* GL_MAP1_VERTEX_ATTRIB2_4_NV */
+       768, /* GL_MAP1_VERTEX_ATTRIB3_4_NV */
+       769, /* GL_MAP1_VERTEX_ATTRIB4_4_NV */
+       770, /* GL_MAP1_VERTEX_ATTRIB5_4_NV */
+       771, /* GL_MAP1_VERTEX_ATTRIB6_4_NV */
+       772, /* GL_MAP1_VERTEX_ATTRIB7_4_NV */
+       773, /* GL_MAP1_VERTEX_ATTRIB8_4_NV */
+       774, /* GL_MAP1_VERTEX_ATTRIB9_4_NV */
+       760, /* GL_MAP1_VERTEX_ATTRIB10_4_NV */
+       761, /* GL_MAP1_VERTEX_ATTRIB11_4_NV */
+       762, /* GL_MAP1_VERTEX_ATTRIB12_4_NV */
+       763, /* GL_MAP1_VERTEX_ATTRIB13_4_NV */
+       764, /* GL_MAP1_VERTEX_ATTRIB14_4_NV */
+       765, /* GL_MAP1_VERTEX_ATTRIB15_4_NV */
+       786, /* GL_MAP2_VERTEX_ATTRIB0_4_NV */
+       793, /* GL_MAP2_VERTEX_ATTRIB1_4_NV */
+       794, /* GL_MAP2_VERTEX_ATTRIB2_4_NV */
+       795, /* GL_MAP2_VERTEX_ATTRIB3_4_NV */
+       796, /* GL_MAP2_VERTEX_ATTRIB4_4_NV */
+       797, /* GL_MAP2_VERTEX_ATTRIB5_4_NV */
+       798, /* GL_MAP2_VERTEX_ATTRIB6_4_NV */
+      1235, /* GL_PROGRAM_BINDING_ARB */
+       800, /* GL_MAP2_VERTEX_ATTRIB8_4_NV */
+       801, /* GL_MAP2_VERTEX_ATTRIB9_4_NV */
+       787, /* GL_MAP2_VERTEX_ATTRIB10_4_NV */
+       788, /* GL_MAP2_VERTEX_ATTRIB11_4_NV */
+       789, /* GL_MAP2_VERTEX_ATTRIB12_4_NV */
+       790, /* GL_MAP2_VERTEX_ATTRIB13_4_NV */
+       791, /* GL_MAP2_VERTEX_ATTRIB14_4_NV */
+       792, /* GL_MAP2_VERTEX_ATTRIB15_4_NV */
+      1677, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE */
+      1674, /* GL_TEXTURE_COMPRESSED */
+      1039, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS */
+       270, /* GL_COMPRESSED_TEXTURE_FORMATS */
+       948, /* GL_MAX_VERTEX_UNITS_ARB */
         22, /* GL_ACTIVE_VERTEX_UNITS_ARB */
-      1875, /* GL_WEIGHT_SUM_UNITY_ARB */
-      1852, /* GL_VERTEX_BLEND_ARB */
-       336, /* GL_CURRENT_WEIGHT_ARB */
-      1874, /* GL_WEIGHT_ARRAY_TYPE_ARB */
-      1873, /* GL_WEIGHT_ARRAY_STRIDE_ARB */
-      1872, /* GL_WEIGHT_ARRAY_SIZE_ARB */
-      1871, /* GL_WEIGHT_ARRAY_POINTER_ARB */
-      1868, /* GL_WEIGHT_ARRAY_ARB */
-       386, /* GL_DOT3_RGB */
-       387, /* GL_DOT3_RGBA */
-       263, /* GL_COMPRESSED_RGB_FXT1_3DFX */
-       258, /* GL_COMPRESSED_RGBA_FXT1_3DFX */
-      1007, /* GL_MULTISAMPLE_3DFX */
-      1409, /* GL_SAMPLE_BUFFERS_3DFX */
-      1400, /* GL_SAMPLES_3DFX */
-       988, /* GL_MODELVIEW2_ARB */
-       991, /* GL_MODELVIEW3_ARB */
-       992, /* GL_MODELVIEW4_ARB */
-       993, /* GL_MODELVIEW5_ARB */
-       994, /* GL_MODELVIEW6_ARB */
-       995, /* GL_MODELVIEW7_ARB */
-       996, /* GL_MODELVIEW8_ARB */
-       997, /* GL_MODELVIEW9_ARB */
-       967, /* GL_MODELVIEW10_ARB */
-       968, /* GL_MODELVIEW11_ARB */
-       969, /* GL_MODELVIEW12_ARB */
-       970, /* GL_MODELVIEW13_ARB */
-       971, /* GL_MODELVIEW14_ARB */
-       972, /* GL_MODELVIEW15_ARB */
-       973, /* GL_MODELVIEW16_ARB */
-       974, /* GL_MODELVIEW17_ARB */
-       975, /* GL_MODELVIEW18_ARB */
-       976, /* GL_MODELVIEW19_ARB */
-       978, /* GL_MODELVIEW20_ARB */
-       979, /* GL_MODELVIEW21_ARB */
-       980, /* GL_MODELVIEW22_ARB */
-       981, /* GL_MODELVIEW23_ARB */
-       982, /* GL_MODELVIEW24_ARB */
-       983, /* GL_MODELVIEW25_ARB */
-       984, /* GL_MODELVIEW26_ARB */
-       985, /* GL_MODELVIEW27_ARB */
-       986, /* GL_MODELVIEW28_ARB */
-       987, /* GL_MODELVIEW29_ARB */
-       989, /* GL_MODELVIEW30_ARB */
-       990, /* GL_MODELVIEW31_ARB */
-       391, /* GL_DOT3_RGB_EXT */
-       389, /* GL_DOT3_RGBA_EXT */
-       961, /* GL_MIRROR_CLAMP_EXT */
-       964, /* GL_MIRROR_CLAMP_TO_EDGE_EXT */
-      1002, /* GL_MODULATE_ADD_ATI */
-      1003, /* GL_MODULATE_SIGNED_ADD_ATI */
-      1004, /* GL_MODULATE_SUBTRACT_ATI */
-      1881, /* GL_YCBCR_MESA */
-      1094, /* GL_PACK_INVERT_MESA */
-       339, /* GL_DEBUG_OBJECT_MESA */
-       340, /* GL_DEBUG_PRINT_MESA */
-       338, /* GL_DEBUG_ASSERT_MESA */
-       110, /* GL_BUFFER_SIZE */
-       112, /* GL_BUFFER_USAGE */
-       116, /* GL_BUMP_ROT_MATRIX_ATI */
-       117, /* GL_BUMP_ROT_MATRIX_SIZE_ATI */
-       115, /* GL_BUMP_NUM_TEX_UNITS_ATI */
-       119, /* GL_BUMP_TEX_UNITS_ATI */
-       451, /* GL_DUDV_ATI */
-       450, /* GL_DU8DV8_ATI */
-       114, /* GL_BUMP_ENVMAP_ATI */
-       118, /* GL_BUMP_TARGET_ATI */
-      1508, /* GL_STENCIL_BACK_FUNC */
-      1506, /* GL_STENCIL_BACK_FAIL */
-      1510, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL */
-      1512, /* GL_STENCIL_BACK_PASS_DEPTH_PASS */
-       536, /* GL_FRAGMENT_PROGRAM_ARB */
-      1232, /* GL_PROGRAM_ALU_INSTRUCTIONS_ARB */
-      1260, /* GL_PROGRAM_TEX_INSTRUCTIONS_ARB */
-      1259, /* GL_PROGRAM_TEX_INDIRECTIONS_ARB */
-      1244, /* GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */
-      1250, /* GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */
-      1249, /* GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */
-       893, /* GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB */
-       916, /* GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB */
-       915, /* GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB */
-       906, /* GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */
-       912, /* GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */
-       911, /* GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */
-       876, /* GL_MAX_DRAW_BUFFERS */
-       395, /* GL_DRAW_BUFFER0 */
-       398, /* GL_DRAW_BUFFER1 */
-       419, /* GL_DRAW_BUFFER2 */
-       422, /* GL_DRAW_BUFFER3 */
-       425, /* GL_DRAW_BUFFER4 */
-       428, /* GL_DRAW_BUFFER5 */
-       431, /* GL_DRAW_BUFFER6 */
-       434, /* GL_DRAW_BUFFER7 */
-       437, /* GL_DRAW_BUFFER8 */
-       440, /* GL_DRAW_BUFFER9 */
-       399, /* GL_DRAW_BUFFER10 */
-       402, /* GL_DRAW_BUFFER11 */
-       405, /* GL_DRAW_BUFFER12 */
-       408, /* GL_DRAW_BUFFER13 */
-       411, /* GL_DRAW_BUFFER14 */
-       414, /* GL_DRAW_BUFFER15 */
+      1881, /* GL_WEIGHT_SUM_UNITY_ARB */
+      1857, /* GL_VERTEX_BLEND_ARB */
+       337, /* GL_CURRENT_WEIGHT_ARB */
+      1880, /* GL_WEIGHT_ARRAY_TYPE_ARB */
+      1879, /* GL_WEIGHT_ARRAY_STRIDE_ARB */
+      1878, /* GL_WEIGHT_ARRAY_SIZE_ARB */
+      1877, /* GL_WEIGHT_ARRAY_POINTER_ARB */
+      1874, /* GL_WEIGHT_ARRAY_ARB */
+       387, /* GL_DOT3_RGB */
+       388, /* GL_DOT3_RGBA */
+       264, /* GL_COMPRESSED_RGB_FXT1_3DFX */
+       259, /* GL_COMPRESSED_RGBA_FXT1_3DFX */
+      1008, /* GL_MULTISAMPLE_3DFX */
+      1413, /* GL_SAMPLE_BUFFERS_3DFX */
+      1404, /* GL_SAMPLES_3DFX */
+       989, /* GL_MODELVIEW2_ARB */
+       992, /* GL_MODELVIEW3_ARB */
+       993, /* GL_MODELVIEW4_ARB */
+       994, /* GL_MODELVIEW5_ARB */
+       995, /* GL_MODELVIEW6_ARB */
+       996, /* GL_MODELVIEW7_ARB */
+       997, /* GL_MODELVIEW8_ARB */
+       998, /* GL_MODELVIEW9_ARB */
+       968, /* GL_MODELVIEW10_ARB */
+       969, /* GL_MODELVIEW11_ARB */
+       970, /* GL_MODELVIEW12_ARB */
+       971, /* GL_MODELVIEW13_ARB */
+       972, /* GL_MODELVIEW14_ARB */
+       973, /* GL_MODELVIEW15_ARB */
+       974, /* GL_MODELVIEW16_ARB */
+       975, /* GL_MODELVIEW17_ARB */
+       976, /* GL_MODELVIEW18_ARB */
+       977, /* GL_MODELVIEW19_ARB */
+       979, /* GL_MODELVIEW20_ARB */
+       980, /* GL_MODELVIEW21_ARB */
+       981, /* GL_MODELVIEW22_ARB */
+       982, /* GL_MODELVIEW23_ARB */
+       983, /* GL_MODELVIEW24_ARB */
+       984, /* GL_MODELVIEW25_ARB */
+       985, /* GL_MODELVIEW26_ARB */
+       986, /* GL_MODELVIEW27_ARB */
+       987, /* GL_MODELVIEW28_ARB */
+       988, /* GL_MODELVIEW29_ARB */
+       990, /* GL_MODELVIEW30_ARB */
+       991, /* GL_MODELVIEW31_ARB */
+       392, /* GL_DOT3_RGB_EXT */
+       390, /* GL_DOT3_RGBA_EXT */
+       962, /* GL_MIRROR_CLAMP_EXT */
+       965, /* GL_MIRROR_CLAMP_TO_EDGE_EXT */
+      1003, /* GL_MODULATE_ADD_ATI */
+      1004, /* GL_MODULATE_SIGNED_ADD_ATI */
+      1005, /* GL_MODULATE_SUBTRACT_ATI */
+      1887, /* GL_YCBCR_MESA */
+      1095, /* GL_PACK_INVERT_MESA */
+       340, /* GL_DEBUG_OBJECT_MESA */
+       341, /* GL_DEBUG_PRINT_MESA */
+       339, /* GL_DEBUG_ASSERT_MESA */
+       111, /* GL_BUFFER_SIZE */
+       113, /* GL_BUFFER_USAGE */
+       117, /* GL_BUMP_ROT_MATRIX_ATI */
+       118, /* GL_BUMP_ROT_MATRIX_SIZE_ATI */
+       116, /* GL_BUMP_NUM_TEX_UNITS_ATI */
+       120, /* GL_BUMP_TEX_UNITS_ATI */
+       452, /* GL_DUDV_ATI */
+       451, /* GL_DU8DV8_ATI */
+       115, /* GL_BUMP_ENVMAP_ATI */
+       119, /* GL_BUMP_TARGET_ATI */
+      1512, /* GL_STENCIL_BACK_FUNC */
+      1510, /* GL_STENCIL_BACK_FAIL */
+      1514, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL */
+      1516, /* GL_STENCIL_BACK_PASS_DEPTH_PASS */
+       537, /* GL_FRAGMENT_PROGRAM_ARB */
+      1233, /* GL_PROGRAM_ALU_INSTRUCTIONS_ARB */
+      1261, /* GL_PROGRAM_TEX_INSTRUCTIONS_ARB */
+      1260, /* GL_PROGRAM_TEX_INDIRECTIONS_ARB */
+      1245, /* GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */
+      1251, /* GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */
+      1250, /* GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */
+       894, /* GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB */
+       917, /* GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB */
+       916, /* GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB */
+       907, /* GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */
+       913, /* GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */
+       912, /* GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */
+       877, /* GL_MAX_DRAW_BUFFERS */
+       396, /* GL_DRAW_BUFFER0 */
+       399, /* GL_DRAW_BUFFER1 */
+       420, /* GL_DRAW_BUFFER2 */
+       423, /* GL_DRAW_BUFFER3 */
+       426, /* GL_DRAW_BUFFER4 */
+       429, /* GL_DRAW_BUFFER5 */
+       432, /* GL_DRAW_BUFFER6 */
+       435, /* GL_DRAW_BUFFER7 */
+       438, /* GL_DRAW_BUFFER8 */
+       441, /* GL_DRAW_BUFFER9 */
+       400, /* GL_DRAW_BUFFER10 */
+       403, /* GL_DRAW_BUFFER11 */
+       406, /* GL_DRAW_BUFFER12 */
+       409, /* GL_DRAW_BUFFER13 */
+       412, /* GL_DRAW_BUFFER14 */
+       415, /* GL_DRAW_BUFFER15 */
         82, /* GL_BLEND_EQUATION_ALPHA */
-       855, /* GL_MATRIX_PALETTE_ARB */
-       887, /* GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB */
-       890, /* GL_MAX_PALETTE_MATRICES_ARB */
-       321, /* GL_CURRENT_PALETTE_MATRIX_ARB */
-       849, /* GL_MATRIX_INDEX_ARRAY_ARB */
-       316, /* GL_CURRENT_MATRIX_INDEX_ARB */
-       851, /* GL_MATRIX_INDEX_ARRAY_SIZE_ARB */
-       853, /* GL_MATRIX_INDEX_ARRAY_TYPE_ARB */
-       852, /* GL_MATRIX_INDEX_ARRAY_STRIDE_ARB */
-       850, /* GL_MATRIX_INDEX_ARRAY_POINTER_ARB */
-      1700, /* GL_TEXTURE_DEPTH_SIZE */
-       379, /* GL_DEPTH_TEXTURE_MODE */
-      1665, /* GL_TEXTURE_COMPARE_MODE */
-      1663, /* GL_TEXTURE_COMPARE_FUNC */
-       242, /* GL_COMPARE_R_TO_TEXTURE */
-      1166, /* GL_POINT_SPRITE */
-       296, /* GL_COORD_REPLACE */
-      1170, /* GL_POINT_SPRITE_R_MODE_NV */
-      1293, /* GL_QUERY_COUNTER_BITS */
-       323, /* GL_CURRENT_QUERY */
-      1296, /* GL_QUERY_RESULT */
-      1298, /* GL_QUERY_RESULT_AVAILABLE */
-       941, /* GL_MAX_VERTEX_ATTRIBS */
-      1842, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED */
-       377, /* GL_DEPTH_STENCIL_TO_RGBA_NV */
-       376, /* GL_DEPTH_STENCIL_TO_BGRA_NV */
-       927, /* GL_MAX_TEXTURE_COORDS */
-       929, /* GL_MAX_TEXTURE_IMAGE_UNITS */
-      1237, /* GL_PROGRAM_ERROR_STRING_ARB */
-      1239, /* GL_PROGRAM_FORMAT_ASCII_ARB */
-      1238, /* GL_PROGRAM_FORMAT_ARB */
-      1750, /* GL_TEXTURE_UNSIGNED_REMAP_MODE_NV */
-       354, /* GL_DEPTH_BOUNDS_TEST_EXT */
-       353, /* GL_DEPTH_BOUNDS_EXT */
+       856, /* GL_MATRIX_PALETTE_ARB */
+       888, /* GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB */
+       891, /* GL_MAX_PALETTE_MATRICES_ARB */
+       322, /* GL_CURRENT_PALETTE_MATRIX_ARB */
+       850, /* GL_MATRIX_INDEX_ARRAY_ARB */
+       317, /* GL_CURRENT_MATRIX_INDEX_ARB */
+       852, /* GL_MATRIX_INDEX_ARRAY_SIZE_ARB */
+       854, /* GL_MATRIX_INDEX_ARRAY_TYPE_ARB */
+       853, /* GL_MATRIX_INDEX_ARRAY_STRIDE_ARB */
+       851, /* GL_MATRIX_INDEX_ARRAY_POINTER_ARB */
+      1704, /* GL_TEXTURE_DEPTH_SIZE */
+       380, /* GL_DEPTH_TEXTURE_MODE */
+      1669, /* GL_TEXTURE_COMPARE_MODE */
+      1667, /* GL_TEXTURE_COMPARE_FUNC */
+       243, /* GL_COMPARE_R_TO_TEXTURE */
+      1167, /* GL_POINT_SPRITE */
+       297, /* GL_COORD_REPLACE */
+      1171, /* GL_POINT_SPRITE_R_MODE_NV */
+      1295, /* GL_QUERY_COUNTER_BITS */
+       324, /* GL_CURRENT_QUERY */
+      1298, /* GL_QUERY_RESULT */
+      1300, /* GL_QUERY_RESULT_AVAILABLE */
+       942, /* GL_MAX_VERTEX_ATTRIBS */
+      1847, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED */
+       378, /* GL_DEPTH_STENCIL_TO_RGBA_NV */
+       377, /* GL_DEPTH_STENCIL_TO_BGRA_NV */
+       928, /* GL_MAX_TEXTURE_COORDS */
+       930, /* GL_MAX_TEXTURE_IMAGE_UNITS */
+      1238, /* GL_PROGRAM_ERROR_STRING_ARB */
+      1240, /* GL_PROGRAM_FORMAT_ASCII_ARB */
+      1239, /* GL_PROGRAM_FORMAT_ARB */
+      1754, /* GL_TEXTURE_UNSIGNED_REMAP_MODE_NV */
+       355, /* GL_DEPTH_BOUNDS_TEST_EXT */
+       354, /* GL_DEPTH_BOUNDS_EXT */
         53, /* GL_ARRAY_BUFFER */
-       464, /* GL_ELEMENT_ARRAY_BUFFER */
+       465, /* GL_ELEMENT_ARRAY_BUFFER */
         54, /* GL_ARRAY_BUFFER_BINDING */
-       465, /* GL_ELEMENT_ARRAY_BUFFER_BINDING */
-      1816, /* GL_VERTEX_ARRAY_BUFFER_BINDING */
-      1028, /* GL_NORMAL_ARRAY_BUFFER_BINDING */
-       149, /* GL_COLOR_ARRAY_BUFFER_BINDING */
-       633, /* GL_INDEX_ARRAY_BUFFER_BINDING */
-      1678, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING */
-       460, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING */
-      1421, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING */
-       514, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING */
-      1869, /* GL_WEIGHT_ARRAY_BUFFER_BINDING */
-      1838, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING */
-      1240, /* GL_PROGRAM_INSTRUCTIONS_ARB */
-       899, /* GL_MAX_PROGRAM_INSTRUCTIONS_ARB */
-      1246, /* GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB */
-       908, /* GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB */
-      1258, /* GL_PROGRAM_TEMPORARIES_ARB */
-       914, /* GL_MAX_PROGRAM_TEMPORARIES_ARB */
-      1248, /* GL_PROGRAM_NATIVE_TEMPORARIES_ARB */
-       910, /* GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB */
-      1252, /* GL_PROGRAM_PARAMETERS_ARB */
-       913, /* GL_MAX_PROGRAM_PARAMETERS_ARB */
-      1247, /* GL_PROGRAM_NATIVE_PARAMETERS_ARB */
-       909, /* GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB */
-      1233, /* GL_PROGRAM_ATTRIBS_ARB */
-       894, /* GL_MAX_PROGRAM_ATTRIBS_ARB */
-      1245, /* GL_PROGRAM_NATIVE_ATTRIBS_ARB */
-       907, /* GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB */
-      1231, /* GL_PROGRAM_ADDRESS_REGISTERS_ARB */
-       892, /* GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB */
-      1243, /* GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */
-       905, /* GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */
-       900, /* GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB */
-       896, /* GL_MAX_PROGRAM_ENV_PARAMETERS_ARB */
-      1261, /* GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB */
-      1762, /* GL_TRANSPOSE_CURRENT_MATRIX_ARB */
-      1309, /* GL_READ_ONLY */
-      1877, /* GL_WRITE_ONLY */
-      1311, /* GL_READ_WRITE */
+       466, /* GL_ELEMENT_ARRAY_BUFFER_BINDING */
+      1821, /* GL_VERTEX_ARRAY_BUFFER_BINDING */
+      1029, /* GL_NORMAL_ARRAY_BUFFER_BINDING */
+       150, /* GL_COLOR_ARRAY_BUFFER_BINDING */
+       634, /* GL_INDEX_ARRAY_BUFFER_BINDING */
+      1682, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING */
+       461, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING */
+      1425, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING */
+       515, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING */
+      1875, /* GL_WEIGHT_ARRAY_BUFFER_BINDING */
+      1843, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING */
+      1241, /* GL_PROGRAM_INSTRUCTIONS_ARB */
+       900, /* GL_MAX_PROGRAM_INSTRUCTIONS_ARB */
+      1247, /* GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB */
+       909, /* GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB */
+      1259, /* GL_PROGRAM_TEMPORARIES_ARB */
+       915, /* GL_MAX_PROGRAM_TEMPORARIES_ARB */
+      1249, /* GL_PROGRAM_NATIVE_TEMPORARIES_ARB */
+       911, /* GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB */
+      1253, /* GL_PROGRAM_PARAMETERS_ARB */
+       914, /* GL_MAX_PROGRAM_PARAMETERS_ARB */
+      1248, /* GL_PROGRAM_NATIVE_PARAMETERS_ARB */
+       910, /* GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB */
+      1234, /* GL_PROGRAM_ATTRIBS_ARB */
+       895, /* GL_MAX_PROGRAM_ATTRIBS_ARB */
+      1246, /* GL_PROGRAM_NATIVE_ATTRIBS_ARB */
+       908, /* GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB */
+      1232, /* GL_PROGRAM_ADDRESS_REGISTERS_ARB */
+       893, /* GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB */
+      1244, /* GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */
+       906, /* GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */
+       901, /* GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB */
+       897, /* GL_MAX_PROGRAM_ENV_PARAMETERS_ARB */
+      1262, /* GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB */
+      1766, /* GL_TRANSPOSE_CURRENT_MATRIX_ARB */
+      1311, /* GL_READ_ONLY */
+      1883, /* GL_WRITE_ONLY */
+      1313, /* GL_READ_WRITE */
        102, /* GL_BUFFER_ACCESS */
        105, /* GL_BUFFER_MAPPED */
        107, /* GL_BUFFER_MAP_POINTER */
-      1756, /* GL_TIME_ELAPSED_EXT */
-       809, /* GL_MATRIX0_ARB */
-       821, /* GL_MATRIX1_ARB */
-       833, /* GL_MATRIX2_ARB */
-       837, /* GL_MATRIX3_ARB */
-       839, /* GL_MATRIX4_ARB */
-       841, /* GL_MATRIX5_ARB */
-       843, /* GL_MATRIX6_ARB */
-       845, /* GL_MATRIX7_ARB */
-       847, /* GL_MATRIX8_ARB */
-       848, /* GL_MATRIX9_ARB */
-       811, /* GL_MATRIX10_ARB */
-       812, /* GL_MATRIX11_ARB */
-       813, /* GL_MATRIX12_ARB */
-       814, /* GL_MATRIX13_ARB */
-       815, /* GL_MATRIX14_ARB */
-       816, /* GL_MATRIX15_ARB */
-       817, /* GL_MATRIX16_ARB */
-       818, /* GL_MATRIX17_ARB */
-       819, /* GL_MATRIX18_ARB */
-       820, /* GL_MATRIX19_ARB */
-       823, /* GL_MATRIX20_ARB */
-       824, /* GL_MATRIX21_ARB */
-       825, /* GL_MATRIX22_ARB */
-       826, /* GL_MATRIX23_ARB */
-       827, /* GL_MATRIX24_ARB */
-       828, /* GL_MATRIX25_ARB */
-       829, /* GL_MATRIX26_ARB */
-       830, /* GL_MATRIX27_ARB */
-       831, /* GL_MATRIX28_ARB */
-       832, /* GL_MATRIX29_ARB */
-       835, /* GL_MATRIX30_ARB */
-       836, /* GL_MATRIX31_ARB */
-      1545, /* GL_STREAM_DRAW */
-      1547, /* GL_STREAM_READ */
-      1543, /* GL_STREAM_COPY */
-      1499, /* GL_STATIC_DRAW */
-      1501, /* GL_STATIC_READ */
-      1497, /* GL_STATIC_COPY */
-       454, /* GL_DYNAMIC_DRAW */
-       456, /* GL_DYNAMIC_READ */
-       452, /* GL_DYNAMIC_COPY */
-      1134, /* GL_PIXEL_PACK_BUFFER */
-      1138, /* GL_PIXEL_UNPACK_BUFFER */
-      1135, /* GL_PIXEL_PACK_BUFFER_BINDING */
-      1139, /* GL_PIXEL_UNPACK_BUFFER_BINDING */
-       347, /* GL_DEPTH24_STENCIL8 */
-      1746, /* GL_TEXTURE_STENCIL_SIZE */
-      1698, /* GL_TEXTURE_CUBE_MAP_SEAMLESS */
-       895, /* GL_MAX_PROGRAM_CALL_DEPTH_NV */
-       898, /* GL_MAX_PROGRAM_IF_DEPTH_NV */
-       902, /* GL_MAX_PROGRAM_LOOP_DEPTH_NV */
-       901, /* GL_MAX_PROGRAM_LOOP_COUNT_NV */
-       858, /* GL_MAX_ARRAY_TEXTURE_LAYERS_EXT */
-      1536, /* GL_STENCIL_TEST_TWO_SIDE_EXT */
+      1760, /* GL_TIME_ELAPSED_EXT */
+       810, /* GL_MATRIX0_ARB */
+       822, /* GL_MATRIX1_ARB */
+       834, /* GL_MATRIX2_ARB */
+       838, /* GL_MATRIX3_ARB */
+       840, /* GL_MATRIX4_ARB */
+       842, /* GL_MATRIX5_ARB */
+       844, /* GL_MATRIX6_ARB */
+       846, /* GL_MATRIX7_ARB */
+       848, /* GL_MATRIX8_ARB */
+       849, /* GL_MATRIX9_ARB */
+       812, /* GL_MATRIX10_ARB */
+       813, /* GL_MATRIX11_ARB */
+       814, /* GL_MATRIX12_ARB */
+       815, /* GL_MATRIX13_ARB */
+       816, /* GL_MATRIX14_ARB */
+       817, /* GL_MATRIX15_ARB */
+       818, /* GL_MATRIX16_ARB */
+       819, /* GL_MATRIX17_ARB */
+       820, /* GL_MATRIX18_ARB */
+       821, /* GL_MATRIX19_ARB */
+       824, /* GL_MATRIX20_ARB */
+       825, /* GL_MATRIX21_ARB */
+       826, /* GL_MATRIX22_ARB */
+       827, /* GL_MATRIX23_ARB */
+       828, /* GL_MATRIX24_ARB */
+       829, /* GL_MATRIX25_ARB */
+       830, /* GL_MATRIX26_ARB */
+       831, /* GL_MATRIX27_ARB */
+       832, /* GL_MATRIX28_ARB */
+       833, /* GL_MATRIX29_ARB */
+       836, /* GL_MATRIX30_ARB */
+       837, /* GL_MATRIX31_ARB */
+      1549, /* GL_STREAM_DRAW */
+      1551, /* GL_STREAM_READ */
+      1547, /* GL_STREAM_COPY */
+      1503, /* GL_STATIC_DRAW */
+      1505, /* GL_STATIC_READ */
+      1501, /* GL_STATIC_COPY */
+       455, /* GL_DYNAMIC_DRAW */
+       457, /* GL_DYNAMIC_READ */
+       453, /* GL_DYNAMIC_COPY */
+      1135, /* GL_PIXEL_PACK_BUFFER */
+      1139, /* GL_PIXEL_UNPACK_BUFFER */
+      1136, /* GL_PIXEL_PACK_BUFFER_BINDING */
+      1140, /* GL_PIXEL_UNPACK_BUFFER_BINDING */
+       348, /* GL_DEPTH24_STENCIL8 */
+      1750, /* GL_TEXTURE_STENCIL_SIZE */
+      1702, /* GL_TEXTURE_CUBE_MAP_SEAMLESS */
+       896, /* GL_MAX_PROGRAM_CALL_DEPTH_NV */
+       899, /* GL_MAX_PROGRAM_IF_DEPTH_NV */
+       903, /* GL_MAX_PROGRAM_LOOP_DEPTH_NV */
+       902, /* GL_MAX_PROGRAM_LOOP_COUNT_NV */
+       859, /* GL_MAX_ARRAY_TEXTURE_LAYERS_EXT */
+      1540, /* GL_STENCIL_TEST_TWO_SIDE_EXT */
         17, /* GL_ACTIVE_STENCIL_FACE_EXT */
-       962, /* GL_MIRROR_CLAMP_TO_BORDER_EXT */
-      1402, /* GL_SAMPLES_PASSED */
-       109, /* GL_BUFFER_SERIALIZED_MODIFY_APPLE */
+       963, /* GL_MIRROR_CLAMP_TO_BORDER_EXT */
+      1406, /* GL_SAMPLES_PASSED */
+       110, /* GL_BUFFER_SERIALIZED_MODIFY_APPLE */
        104, /* GL_BUFFER_FLUSHING_UNMAP_APPLE */
-       537, /* GL_FRAGMENT_SHADER */
-      1862, /* GL_VERTEX_SHADER */
-      1251, /* GL_PROGRAM_OBJECT_ARB */
-      1434, /* GL_SHADER_OBJECT_ARB */
-       883, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS */
-       945, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS */
-       939, /* GL_MAX_VARYING_FLOATS */
-       943, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS */
-       868, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS */
-      1054, /* GL_OBJECT_TYPE_ARB */
-      1436, /* GL_SHADER_TYPE */
-       502, /* GL_FLOAT_VEC2 */
-       504, /* GL_FLOAT_VEC3 */
-       506, /* GL_FLOAT_VEC4 */
-       660, /* GL_INT_VEC2 */
-       662, /* GL_INT_VEC3 */
-       664, /* GL_INT_VEC4 */
+      1324, /* GL_RELEASED_APPLE */
+      1872, /* GL_VOLATILE_APPLE */
+      1352, /* GL_RETAINED_APPLE */
+      1779, /* GL_UNDEFINED_APPLE */
+      1285, /* GL_PURGEABLE_APPLE */
+       538, /* GL_FRAGMENT_SHADER */
+      1867, /* GL_VERTEX_SHADER */
+      1252, /* GL_PROGRAM_OBJECT_ARB */
+      1438, /* GL_SHADER_OBJECT_ARB */
+       884, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS */
+       946, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS */
+       940, /* GL_MAX_VARYING_FLOATS */
+       944, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS */
+       869, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS */
+      1055, /* GL_OBJECT_TYPE_ARB */
+      1440, /* GL_SHADER_TYPE */
+       503, /* GL_FLOAT_VEC2 */
+       505, /* GL_FLOAT_VEC3 */
+       507, /* GL_FLOAT_VEC4 */
+       661, /* GL_INT_VEC2 */
+       663, /* GL_INT_VEC3 */
+       665, /* GL_INT_VEC4 */
         94, /* GL_BOOL */
         96, /* GL_BOOL_VEC2 */
         98, /* GL_BOOL_VEC3 */
        100, /* GL_BOOL_VEC4 */
-       490, /* GL_FLOAT_MAT2 */
-       494, /* GL_FLOAT_MAT3 */
-       498, /* GL_FLOAT_MAT4 */
-      1393, /* GL_SAMPLER_1D */
-      1395, /* GL_SAMPLER_2D */
-      1397, /* GL_SAMPLER_3D */
-      1398, /* GL_SAMPLER_CUBE */
-      1394, /* GL_SAMPLER_1D_SHADOW */
-      1396, /* GL_SAMPLER_2D_SHADOW */
-       492, /* GL_FLOAT_MAT2x3 */
-       493, /* GL_FLOAT_MAT2x4 */
-       496, /* GL_FLOAT_MAT3x2 */
-       497, /* GL_FLOAT_MAT3x4 */
-       500, /* GL_FLOAT_MAT4x2 */
-       501, /* GL_FLOAT_MAT4x3 */
-       345, /* GL_DELETE_STATUS */
-       246, /* GL_COMPILE_STATUS */
-       716, /* GL_LINK_STATUS */
-      1810, /* GL_VALIDATE_STATUS */
-       645, /* GL_INFO_LOG_LENGTH */
+       491, /* GL_FLOAT_MAT2 */
+       495, /* GL_FLOAT_MAT3 */
+       499, /* GL_FLOAT_MAT4 */
+      1397, /* GL_SAMPLER_1D */
+      1399, /* GL_SAMPLER_2D */
+      1401, /* GL_SAMPLER_3D */
+      1402, /* GL_SAMPLER_CUBE */
+      1398, /* GL_SAMPLER_1D_SHADOW */
+      1400, /* GL_SAMPLER_2D_SHADOW */
+       493, /* GL_FLOAT_MAT2x3 */
+       494, /* GL_FLOAT_MAT2x4 */
+       497, /* GL_FLOAT_MAT3x2 */
+       498, /* GL_FLOAT_MAT3x4 */
+       501, /* GL_FLOAT_MAT4x2 */
+       502, /* GL_FLOAT_MAT4x3 */
+       346, /* GL_DELETE_STATUS */
+       247, /* GL_COMPILE_STATUS */
+       717, /* GL_LINK_STATUS */
+      1815, /* GL_VALIDATE_STATUS */
+       646, /* GL_INFO_LOG_LENGTH */
         56, /* GL_ATTACHED_SHADERS */
         20, /* GL_ACTIVE_UNIFORMS */
         21, /* GL_ACTIVE_UNIFORM_MAX_LENGTH */
-      1435, /* GL_SHADER_SOURCE_LENGTH */
+      1439, /* GL_SHADER_SOURCE_LENGTH */
         15, /* GL_ACTIVE_ATTRIBUTES */
         16, /* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH */
-       539, /* GL_FRAGMENT_SHADER_DERIVATIVE_HINT */
-      1438, /* GL_SHADING_LANGUAGE_VERSION */
-       322, /* GL_CURRENT_PROGRAM */
-      1103, /* GL_PALETTE4_RGB8_OES */
-      1105, /* GL_PALETTE4_RGBA8_OES */
-      1101, /* GL_PALETTE4_R5_G6_B5_OES */
-      1104, /* GL_PALETTE4_RGBA4_OES */
-      1102, /* GL_PALETTE4_RGB5_A1_OES */
-      1108, /* GL_PALETTE8_RGB8_OES */
-      1110, /* GL_PALETTE8_RGBA8_OES */
-      1106, /* GL_PALETTE8_R5_G6_B5_OES */
-      1109, /* GL_PALETTE8_RGBA4_OES */
-      1107, /* GL_PALETTE8_RGB5_A1_OES */
-       627, /* GL_IMPLEMENTATION_COLOR_READ_TYPE_OES */
-       626, /* GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES */
-      1795, /* GL_UNSIGNED_NORMALIZED */
-      1633, /* GL_TEXTURE_1D_ARRAY_EXT */
-      1273, /* GL_PROXY_TEXTURE_1D_ARRAY_EXT */
-      1635, /* GL_TEXTURE_2D_ARRAY_EXT */
-      1276, /* GL_PROXY_TEXTURE_2D_ARRAY_EXT */
-      1641, /* GL_TEXTURE_BINDING_1D_ARRAY_EXT */
-      1643, /* GL_TEXTURE_BINDING_2D_ARRAY_EXT */
-      1491, /* GL_SRGB */
-      1492, /* GL_SRGB8 */
-      1494, /* GL_SRGB_ALPHA */
-      1493, /* GL_SRGB8_ALPHA8 */
-      1451, /* GL_SLUMINANCE_ALPHA */
-      1450, /* GL_SLUMINANCE8_ALPHA8 */
-      1448, /* GL_SLUMINANCE */
-      1449, /* GL_SLUMINANCE8 */
-       267, /* GL_COMPRESSED_SRGB */
-       268, /* GL_COMPRESSED_SRGB_ALPHA */
-       265, /* GL_COMPRESSED_SLUMINANCE */
-       266, /* GL_COMPRESSED_SLUMINANCE_ALPHA */
-      1168, /* GL_POINT_SPRITE_COORD_ORIGIN */
-       724, /* GL_LOWER_LEFT */
-      1807, /* GL_UPPER_LEFT */
-      1514, /* GL_STENCIL_BACK_REF */
-      1515, /* GL_STENCIL_BACK_VALUE_MASK */
-      1516, /* GL_STENCIL_BACK_WRITEMASK */
-       444, /* GL_DRAW_FRAMEBUFFER_BINDING */
-      1325, /* GL_RENDERBUFFER_BINDING */
-      1305, /* GL_READ_FRAMEBUFFER */
-       443, /* GL_DRAW_FRAMEBUFFER */
-      1306, /* GL_READ_FRAMEBUFFER_BINDING */
-      1336, /* GL_RENDERBUFFER_SAMPLES */
-       549, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE */
-       547, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME */
-       558, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL */
-       554, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE */
-       556, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */
-       562, /* GL_FRAMEBUFFER_COMPLETE */
-       566, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT */
-       573, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT */
-       571, /* GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT */
-       568, /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT */
-       572, /* GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT */
-       569, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER */
-       577, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER */
-       581, /* GL_FRAMEBUFFER_UNSUPPORTED */
-       579, /* GL_FRAMEBUFFER_STATUS_ERROR_EXT */
-       864, /* GL_MAX_COLOR_ATTACHMENTS */
-       155, /* GL_COLOR_ATTACHMENT0 */
-       157, /* GL_COLOR_ATTACHMENT1 */
-       171, /* GL_COLOR_ATTACHMENT2 */
-       173, /* GL_COLOR_ATTACHMENT3 */
-       175, /* GL_COLOR_ATTACHMENT4 */
-       177, /* GL_COLOR_ATTACHMENT5 */
-       179, /* GL_COLOR_ATTACHMENT6 */
-       181, /* GL_COLOR_ATTACHMENT7 */
-       183, /* GL_COLOR_ATTACHMENT8 */
-       185, /* GL_COLOR_ATTACHMENT9 */
-       158, /* GL_COLOR_ATTACHMENT10 */
-       160, /* GL_COLOR_ATTACHMENT11 */
-       162, /* GL_COLOR_ATTACHMENT12 */
-       164, /* GL_COLOR_ATTACHMENT13 */
-       166, /* GL_COLOR_ATTACHMENT14 */
-       168, /* GL_COLOR_ATTACHMENT15 */
-       349, /* GL_DEPTH_ATTACHMENT */
-      1504, /* GL_STENCIL_ATTACHMENT */
-       540, /* GL_FRAMEBUFFER */
-      1323, /* GL_RENDERBUFFER */
-      1339, /* GL_RENDERBUFFER_WIDTH */
-      1331, /* GL_RENDERBUFFER_HEIGHT */
-      1333, /* GL_RENDERBUFFER_INTERNAL_FORMAT */
-      1531, /* GL_STENCIL_INDEX_EXT */
-      1523, /* GL_STENCIL_INDEX1 */
-      1527, /* GL_STENCIL_INDEX4 */
-      1529, /* GL_STENCIL_INDEX8 */
-      1524, /* GL_STENCIL_INDEX16 */
-      1335, /* GL_RENDERBUFFER_RED_SIZE */
-      1330, /* GL_RENDERBUFFER_GREEN_SIZE */
-      1327, /* GL_RENDERBUFFER_BLUE_SIZE */
-      1324, /* GL_RENDERBUFFER_ALPHA_SIZE */
-      1328, /* GL_RENDERBUFFER_DEPTH_SIZE */
-      1338, /* GL_RENDERBUFFER_STENCIL_SIZE */
-       575, /* GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE */
-       922, /* GL_MAX_SAMPLES */
-      1300, /* GL_QUERY_WAIT_NV */
-      1295, /* GL_QUERY_NO_WAIT_NV */
-      1292, /* GL_QUERY_BY_REGION_WAIT_NV */
-      1291, /* GL_QUERY_BY_REGION_NO_WAIT_NV */
-      1287, /* GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION */
-       486, /* GL_FIRST_VERTEX_CONVENTION */
-       675, /* GL_LAST_VERTEX_CONVENTION */
-      1265, /* GL_PROVOKING_VERTEX */
-       302, /* GL_COPY_READ_BUFFER */
-       303, /* GL_COPY_WRITE_BUFFER */
-      1386, /* GL_RGBA_SNORM */
-      1382, /* GL_RGBA8_SNORM */
-      1444, /* GL_SIGNED_NORMALIZED */
-       924, /* GL_MAX_SERVER_WAIT_TIMEOUT */
-      1053, /* GL_OBJECT_TYPE */
-      1552, /* GL_SYNC_CONDITION */
-      1557, /* GL_SYNC_STATUS */
-      1554, /* GL_SYNC_FLAGS */
-      1553, /* GL_SYNC_FENCE */
-      1556, /* GL_SYNC_GPU_COMMANDS_COMPLETE */
-      1783, /* GL_UNSIGNALED */
-      1443, /* GL_SIGNALED */
+       540, /* GL_FRAGMENT_SHADER_DERIVATIVE_HINT */
+      1442, /* GL_SHADING_LANGUAGE_VERSION */
+       323, /* GL_CURRENT_PROGRAM */
+      1104, /* GL_PALETTE4_RGB8_OES */
+      1106, /* GL_PALETTE4_RGBA8_OES */
+      1102, /* GL_PALETTE4_R5_G6_B5_OES */
+      1105, /* GL_PALETTE4_RGBA4_OES */
+      1103, /* GL_PALETTE4_RGB5_A1_OES */
+      1109, /* GL_PALETTE8_RGB8_OES */
+      1111, /* GL_PALETTE8_RGBA8_OES */
+      1107, /* GL_PALETTE8_R5_G6_B5_OES */
+      1110, /* GL_PALETTE8_RGBA4_OES */
+      1108, /* GL_PALETTE8_RGB5_A1_OES */
+       628, /* GL_IMPLEMENTATION_COLOR_READ_TYPE_OES */
+       627, /* GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES */
+      1800, /* GL_UNSIGNED_NORMALIZED */
+      1637, /* GL_TEXTURE_1D_ARRAY_EXT */
+      1274, /* GL_PROXY_TEXTURE_1D_ARRAY_EXT */
+      1639, /* GL_TEXTURE_2D_ARRAY_EXT */
+      1277, /* GL_PROXY_TEXTURE_2D_ARRAY_EXT */
+      1645, /* GL_TEXTURE_BINDING_1D_ARRAY_EXT */
+      1647, /* GL_TEXTURE_BINDING_2D_ARRAY_EXT */
+      1495, /* GL_SRGB */
+      1496, /* GL_SRGB8 */
+      1498, /* GL_SRGB_ALPHA */
+      1497, /* GL_SRGB8_ALPHA8 */
+      1455, /* GL_SLUMINANCE_ALPHA */
+      1454, /* GL_SLUMINANCE8_ALPHA8 */
+      1452, /* GL_SLUMINANCE */
+      1453, /* GL_SLUMINANCE8 */
+       268, /* GL_COMPRESSED_SRGB */
+       269, /* GL_COMPRESSED_SRGB_ALPHA */
+       266, /* GL_COMPRESSED_SLUMINANCE */
+       267, /* GL_COMPRESSED_SLUMINANCE_ALPHA */
+      1169, /* GL_POINT_SPRITE_COORD_ORIGIN */
+       725, /* GL_LOWER_LEFT */
+      1812, /* GL_UPPER_LEFT */
+      1518, /* GL_STENCIL_BACK_REF */
+      1519, /* GL_STENCIL_BACK_VALUE_MASK */
+      1520, /* GL_STENCIL_BACK_WRITEMASK */
+       445, /* GL_DRAW_FRAMEBUFFER_BINDING */
+      1328, /* GL_RENDERBUFFER_BINDING */
+      1307, /* GL_READ_FRAMEBUFFER */
+       444, /* GL_DRAW_FRAMEBUFFER */
+      1308, /* GL_READ_FRAMEBUFFER_BINDING */
+      1339, /* GL_RENDERBUFFER_SAMPLES */
+       550, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE */
+       548, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME */
+       559, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL */
+       555, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE */
+       557, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */
+       563, /* GL_FRAMEBUFFER_COMPLETE */
+       567, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT */
+       574, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT */
+       572, /* GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT */
+       569, /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT */
+       573, /* GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT */
+       570, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER */
+       578, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER */
+       582, /* GL_FRAMEBUFFER_UNSUPPORTED */
+       580, /* GL_FRAMEBUFFER_STATUS_ERROR_EXT */
+       865, /* GL_MAX_COLOR_ATTACHMENTS */
+       156, /* GL_COLOR_ATTACHMENT0 */
+       158, /* GL_COLOR_ATTACHMENT1 */
+       172, /* GL_COLOR_ATTACHMENT2 */
+       174, /* GL_COLOR_ATTACHMENT3 */
+       176, /* GL_COLOR_ATTACHMENT4 */
+       178, /* GL_COLOR_ATTACHMENT5 */
+       180, /* GL_COLOR_ATTACHMENT6 */
+       182, /* GL_COLOR_ATTACHMENT7 */
+       184, /* GL_COLOR_ATTACHMENT8 */
+       186, /* GL_COLOR_ATTACHMENT9 */
+       159, /* GL_COLOR_ATTACHMENT10 */
+       161, /* GL_COLOR_ATTACHMENT11 */
+       163, /* GL_COLOR_ATTACHMENT12 */
+       165, /* GL_COLOR_ATTACHMENT13 */
+       167, /* GL_COLOR_ATTACHMENT14 */
+       169, /* GL_COLOR_ATTACHMENT15 */
+       350, /* GL_DEPTH_ATTACHMENT */
+      1508, /* GL_STENCIL_ATTACHMENT */
+       541, /* GL_FRAMEBUFFER */
+      1326, /* GL_RENDERBUFFER */
+      1342, /* GL_RENDERBUFFER_WIDTH */
+      1334, /* GL_RENDERBUFFER_HEIGHT */
+      1336, /* GL_RENDERBUFFER_INTERNAL_FORMAT */
+      1535, /* GL_STENCIL_INDEX_EXT */
+      1527, /* GL_STENCIL_INDEX1 */
+      1531, /* GL_STENCIL_INDEX4 */
+      1533, /* GL_STENCIL_INDEX8 */
+      1528, /* GL_STENCIL_INDEX16 */
+      1338, /* GL_RENDERBUFFER_RED_SIZE */
+      1333, /* GL_RENDERBUFFER_GREEN_SIZE */
+      1330, /* GL_RENDERBUFFER_BLUE_SIZE */
+      1327, /* GL_RENDERBUFFER_ALPHA_SIZE */
+      1331, /* GL_RENDERBUFFER_DEPTH_SIZE */
+      1341, /* GL_RENDERBUFFER_STENCIL_SIZE */
+       576, /* GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE */
+       923, /* GL_MAX_SAMPLES */
+      1302, /* GL_QUERY_WAIT_NV */
+      1297, /* GL_QUERY_NO_WAIT_NV */
+      1294, /* GL_QUERY_BY_REGION_WAIT_NV */
+      1293, /* GL_QUERY_BY_REGION_NO_WAIT_NV */
+      1289, /* GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION */
+       487, /* GL_FIRST_VERTEX_CONVENTION */
+       676, /* GL_LAST_VERTEX_CONVENTION */
+      1266, /* GL_PROVOKING_VERTEX */
+       303, /* GL_COPY_READ_BUFFER */
+       304, /* GL_COPY_WRITE_BUFFER */
+      1390, /* GL_RGBA_SNORM */
+      1386, /* GL_RGBA8_SNORM */
+      1448, /* GL_SIGNED_NORMALIZED */
+       925, /* GL_MAX_SERVER_WAIT_TIMEOUT */
+      1054, /* GL_OBJECT_TYPE */
+      1556, /* GL_SYNC_CONDITION */
+      1561, /* GL_SYNC_STATUS */
+      1558, /* GL_SYNC_FLAGS */
+      1557, /* GL_SYNC_FENCE */
+      1560, /* GL_SYNC_GPU_COMMANDS_COMPLETE */
+      1788, /* GL_UNSIGNALED */
+      1447, /* GL_SIGNALED */
         46, /* GL_ALREADY_SIGNALED */
-      1755, /* GL_TIMEOUT_EXPIRED */
-       270, /* GL_CONDITION_SATISFIED */
-      1867, /* GL_WAIT_FAILED */
-       471, /* GL_EVAL_BIT */
-      1303, /* GL_RASTER_POSITION_UNCLIPPED_IBM */
-       718, /* GL_LIST_BIT */
-      1649, /* GL_TEXTURE_BIT */
-      1417, /* GL_SCISSOR_BIT */
+      1759, /* GL_TIMEOUT_EXPIRED */
+       271, /* GL_CONDITION_SATISFIED */
+      1873, /* GL_WAIT_FAILED */
+       472, /* GL_EVAL_BIT */
+      1305, /* GL_RASTER_POSITION_UNCLIPPED_IBM */
+       719, /* GL_LIST_BIT */
+      1653, /* GL_TEXTURE_BIT */
+      1421, /* GL_SCISSOR_BIT */
         29, /* GL_ALL_ATTRIB_BITS */
-      1009, /* GL_MULTISAMPLE_BIT */
+      1010, /* GL_MULTISAMPLE_BIT */
         30, /* GL_ALL_CLIENT_ATTRIB_BITS */
 };
 
diff --git a/src/mesa/main/remap_helper.h b/src/mesa/main/remap_helper.h
index 0a5b629688..ee898efa5f 100644
--- a/src/mesa/main/remap_helper.h
+++ b/src/mesa/main/remap_helper.h
@@ -733,3634 +733,3646 @@ static const char _mesa_function_pool[] =
    "glMultTransposeMatrixd\0"
    "glMultTransposeMatrixdARB\0"
    "\0"
-   /* _mesa_function_pool[4900]: AlphaFunc (offset 240) */
+   /* _mesa_function_pool[4900]: ObjectUnpurgeableAPPLE (will be remapped) */
+   "iii\0"
+   "glObjectUnpurgeableAPPLE\0"
+   "\0"
+   /* _mesa_function_pool[4930]: AlphaFunc (offset 240) */
    "if\0"
    "glAlphaFunc\0"
    "\0"
-   /* _mesa_function_pool[4916]: WindowPos2svMESA (will be remapped) */
+   /* _mesa_function_pool[4946]: WindowPos2svMESA (will be remapped) */
    "p\0"
    "glWindowPos2sv\0"
    "glWindowPos2svARB\0"
    "glWindowPos2svMESA\0"
    "\0"
-   /* _mesa_function_pool[4971]: EdgeFlag (offset 41) */
+   /* _mesa_function_pool[5001]: EdgeFlag (offset 41) */
    "i\0"
    "glEdgeFlag\0"
    "\0"
-   /* _mesa_function_pool[4985]: TexCoord2iv (offset 107) */
+   /* _mesa_function_pool[5015]: TexCoord2iv (offset 107) */
    "p\0"
    "glTexCoord2iv\0"
    "\0"
-   /* _mesa_function_pool[5002]: CompressedTexImage1DARB (will be remapped) */
+   /* _mesa_function_pool[5032]: CompressedTexImage1DARB (will be remapped) */
    "iiiiiip\0"
    "glCompressedTexImage1D\0"
    "glCompressedTexImage1DARB\0"
    "\0"
-   /* _mesa_function_pool[5060]: Rotated (offset 299) */
+   /* _mesa_function_pool[5090]: Rotated (offset 299) */
    "dddd\0"
    "glRotated\0"
    "\0"
-   /* _mesa_function_pool[5076]: VertexAttrib2sNV (will be remapped) */
+   /* _mesa_function_pool[5106]: VertexAttrib2sNV (will be remapped) */
    "iii\0"
    "glVertexAttrib2sNV\0"
    "\0"
-   /* _mesa_function_pool[5100]: ReadPixels (offset 256) */
+   /* _mesa_function_pool[5130]: ReadPixels (offset 256) */
    "iiiiiip\0"
    "glReadPixels\0"
    "\0"
-   /* _mesa_function_pool[5122]: EdgeFlagv (offset 42) */
+   /* _mesa_function_pool[5152]: EdgeFlagv (offset 42) */
    "p\0"
    "glEdgeFlagv\0"
    "\0"
-   /* _mesa_function_pool[5137]: NormalPointerListIBM (dynamic) */
+   /* _mesa_function_pool[5167]: NormalPointerListIBM (dynamic) */
    "iipi\0"
    "glNormalPointerListIBM\0"
    "\0"
-   /* _mesa_function_pool[5166]: IndexPointerEXT (will be remapped) */
+   /* _mesa_function_pool[5196]: IndexPointerEXT (will be remapped) */
    "iiip\0"
    "glIndexPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[5190]: Color4iv (offset 32) */
+   /* _mesa_function_pool[5220]: Color4iv (offset 32) */
    "p\0"
    "glColor4iv\0"
    "\0"
-   /* _mesa_function_pool[5204]: TexParameterf (offset 178) */
+   /* _mesa_function_pool[5234]: TexParameterf (offset 178) */
    "iif\0"
    "glTexParameterf\0"
    "\0"
-   /* _mesa_function_pool[5225]: TexParameteri (offset 180) */
+   /* _mesa_function_pool[5255]: TexParameteri (offset 180) */
    "iii\0"
    "glTexParameteri\0"
    "\0"
-   /* _mesa_function_pool[5246]: NormalPointerEXT (will be remapped) */
+   /* _mesa_function_pool[5276]: NormalPointerEXT (will be remapped) */
    "iiip\0"
    "glNormalPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[5271]: MultiTexCoord3dARB (offset 392) */
+   /* _mesa_function_pool[5301]: MultiTexCoord3dARB (offset 392) */
    "iddd\0"
    "glMultiTexCoord3d\0"
    "glMultiTexCoord3dARB\0"
    "\0"
-   /* _mesa_function_pool[5316]: MultiTexCoord2iARB (offset 388) */
+   /* _mesa_function_pool[5346]: MultiTexCoord2iARB (offset 388) */
    "iii\0"
    "glMultiTexCoord2i\0"
    "glMultiTexCoord2iARB\0"
    "\0"
-   /* _mesa_function_pool[5360]: DrawPixels (offset 257) */
+   /* _mesa_function_pool[5390]: DrawPixels (offset 257) */
    "iiiip\0"
    "glDrawPixels\0"
    "\0"
-   /* _mesa_function_pool[5380]: ReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[5410]: ReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (dynamic) */
    "iffffffff\0"
    "glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[5440]: MultiTexCoord2svARB (offset 391) */
+   /* _mesa_function_pool[5470]: MultiTexCoord2svARB (offset 391) */
    "ip\0"
    "glMultiTexCoord2sv\0"
    "glMultiTexCoord2svARB\0"
    "\0"
-   /* _mesa_function_pool[5485]: ReplacementCodeubvSUN (dynamic) */
+   /* _mesa_function_pool[5515]: ReplacementCodeubvSUN (dynamic) */
    "p\0"
    "glReplacementCodeubvSUN\0"
    "\0"
-   /* _mesa_function_pool[5512]: Uniform3iARB (will be remapped) */
+   /* _mesa_function_pool[5542]: Uniform3iARB (will be remapped) */
    "iiii\0"
    "glUniform3i\0"
    "glUniform3iARB\0"
    "\0"
-   /* _mesa_function_pool[5545]: GetFragmentMaterialfvSGIX (dynamic) */
+   /* _mesa_function_pool[5575]: GetFragmentMaterialfvSGIX (dynamic) */
    "iip\0"
    "glGetFragmentMaterialfvSGIX\0"
    "\0"
-   /* _mesa_function_pool[5578]: GetShaderInfoLog (will be remapped) */
+   /* _mesa_function_pool[5608]: GetShaderInfoLog (will be remapped) */
    "iipp\0"
    "glGetShaderInfoLog\0"
    "\0"
-   /* _mesa_function_pool[5603]: WeightivARB (dynamic) */
+   /* _mesa_function_pool[5633]: WeightivARB (dynamic) */
    "ip\0"
    "glWeightivARB\0"
    "\0"
-   /* _mesa_function_pool[5621]: PollInstrumentsSGIX (dynamic) */
+   /* _mesa_function_pool[5651]: PollInstrumentsSGIX (dynamic) */
    "p\0"
    "glPollInstrumentsSGIX\0"
    "\0"
-   /* _mesa_function_pool[5646]: GlobalAlphaFactordSUN (dynamic) */
+   /* _mesa_function_pool[5676]: GlobalAlphaFactordSUN (dynamic) */
    "d\0"
    "glGlobalAlphaFactordSUN\0"
    "\0"
-   /* _mesa_function_pool[5673]: GetFinalCombinerInputParameterfvNV (will be remapped) */
+   /* _mesa_function_pool[5703]: GetFinalCombinerInputParameterfvNV (will be remapped) */
    "iip\0"
    "glGetFinalCombinerInputParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[5715]: GenerateMipmapEXT (will be remapped) */
+   /* _mesa_function_pool[5745]: GenerateMipmapEXT (will be remapped) */
    "i\0"
    "glGenerateMipmap\0"
    "glGenerateMipmapEXT\0"
    "\0"
-   /* _mesa_function_pool[5755]: GenLists (offset 5) */
+   /* _mesa_function_pool[5785]: GenLists (offset 5) */
    "i\0"
    "glGenLists\0"
    "\0"
-   /* _mesa_function_pool[5769]: SetFragmentShaderConstantATI (will be remapped) */
+   /* _mesa_function_pool[5799]: SetFragmentShaderConstantATI (will be remapped) */
    "ip\0"
    "glSetFragmentShaderConstantATI\0"
    "\0"
-   /* _mesa_function_pool[5804]: GetMapAttribParameterivNV (dynamic) */
+   /* _mesa_function_pool[5834]: GetMapAttribParameterivNV (dynamic) */
    "iiip\0"
    "glGetMapAttribParameterivNV\0"
    "\0"
-   /* _mesa_function_pool[5838]: CreateShaderObjectARB (will be remapped) */
+   /* _mesa_function_pool[5868]: CreateShaderObjectARB (will be remapped) */
    "i\0"
    "glCreateShaderObjectARB\0"
    "\0"
-   /* _mesa_function_pool[5865]: GetSharpenTexFuncSGIS (dynamic) */
+   /* _mesa_function_pool[5895]: GetSharpenTexFuncSGIS (dynamic) */
    "ip\0"
    "glGetSharpenTexFuncSGIS\0"
    "\0"
-   /* _mesa_function_pool[5893]: BufferDataARB (will be remapped) */
+   /* _mesa_function_pool[5923]: BufferDataARB (will be remapped) */
    "iipi\0"
    "glBufferData\0"
    "glBufferDataARB\0"
    "\0"
-   /* _mesa_function_pool[5928]: FlushVertexArrayRangeNV (will be remapped) */
+   /* _mesa_function_pool[5958]: FlushVertexArrayRangeNV (will be remapped) */
    "\0"
    "glFlushVertexArrayRangeNV\0"
    "\0"
-   /* _mesa_function_pool[5956]: MapGrid2d (offset 226) */
+   /* _mesa_function_pool[5986]: MapGrid2d (offset 226) */
    "iddidd\0"
    "glMapGrid2d\0"
    "\0"
-   /* _mesa_function_pool[5976]: MapGrid2f (offset 227) */
+   /* _mesa_function_pool[6006]: MapGrid2f (offset 227) */
    "iffiff\0"
    "glMapGrid2f\0"
    "\0"
-   /* _mesa_function_pool[5996]: SampleMapATI (will be remapped) */
+   /* _mesa_function_pool[6026]: SampleMapATI (will be remapped) */
    "iii\0"
    "glSampleMapATI\0"
    "\0"
-   /* _mesa_function_pool[6016]: VertexPointerEXT (will be remapped) */
+   /* _mesa_function_pool[6046]: VertexPointerEXT (will be remapped) */
    "iiiip\0"
    "glVertexPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[6042]: GetTexFilterFuncSGIS (dynamic) */
+   /* _mesa_function_pool[6072]: GetTexFilterFuncSGIS (dynamic) */
    "iip\0"
    "glGetTexFilterFuncSGIS\0"
    "\0"
-   /* _mesa_function_pool[6070]: Scissor (offset 176) */
+   /* _mesa_function_pool[6100]: Scissor (offset 176) */
    "iiii\0"
    "glScissor\0"
    "\0"
-   /* _mesa_function_pool[6086]: Fogf (offset 153) */
+   /* _mesa_function_pool[6116]: Fogf (offset 153) */
    "if\0"
    "glFogf\0"
    "\0"
-   /* _mesa_function_pool[6097]: GetCombinerOutputParameterfvNV (will be remapped) */
+   /* _mesa_function_pool[6127]: GetCombinerOutputParameterfvNV (will be remapped) */
    "iiip\0"
    "glGetCombinerOutputParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[6136]: TexSubImage1D (offset 332) */
+   /* _mesa_function_pool[6166]: TexSubImage1D (offset 332) */
    "iiiiiip\0"
    "glTexSubImage1D\0"
    "glTexSubImage1DEXT\0"
    "\0"
-   /* _mesa_function_pool[6180]: VertexAttrib1sARB (will be remapped) */
+   /* _mesa_function_pool[6210]: VertexAttrib1sARB (will be remapped) */
    "ii\0"
    "glVertexAttrib1s\0"
    "glVertexAttrib1sARB\0"
    "\0"
-   /* _mesa_function_pool[6221]: FenceSync (will be remapped) */
+   /* _mesa_function_pool[6251]: FenceSync (will be remapped) */
    "ii\0"
    "glFenceSync\0"
    "\0"
-   /* _mesa_function_pool[6237]: Color4usv (offset 40) */
+   /* _mesa_function_pool[6267]: Color4usv (offset 40) */
    "p\0"
    "glColor4usv\0"
    "\0"
-   /* _mesa_function_pool[6252]: Fogi (offset 155) */
+   /* _mesa_function_pool[6282]: Fogi (offset 155) */
    "ii\0"
    "glFogi\0"
    "\0"
-   /* _mesa_function_pool[6263]: DepthRange (offset 288) */
+   /* _mesa_function_pool[6293]: DepthRange (offset 288) */
    "dd\0"
    "glDepthRange\0"
    "\0"
-   /* _mesa_function_pool[6280]: RasterPos3iv (offset 75) */
+   /* _mesa_function_pool[6310]: RasterPos3iv (offset 75) */
    "p\0"
    "glRasterPos3iv\0"
    "\0"
-   /* _mesa_function_pool[6298]: FinalCombinerInputNV (will be remapped) */
+   /* _mesa_function_pool[6328]: FinalCombinerInputNV (will be remapped) */
    "iiii\0"
    "glFinalCombinerInputNV\0"
    "\0"
-   /* _mesa_function_pool[6327]: TexCoord2i (offset 106) */
+   /* _mesa_function_pool[6357]: TexCoord2i (offset 106) */
    "ii\0"
    "glTexCoord2i\0"
    "\0"
-   /* _mesa_function_pool[6344]: PixelMapfv (offset 251) */
+   /* _mesa_function_pool[6374]: PixelMapfv (offset 251) */
    "iip\0"
    "glPixelMapfv\0"
    "\0"
-   /* _mesa_function_pool[6362]: Color4ui (offset 37) */
+   /* _mesa_function_pool[6392]: Color4ui (offset 37) */
    "iiii\0"
    "glColor4ui\0"
    "\0"
-   /* _mesa_function_pool[6379]: RasterPos3s (offset 76) */
+   /* _mesa_function_pool[6409]: RasterPos3s (offset 76) */
    "iii\0"
    "glRasterPos3s\0"
    "\0"
-   /* _mesa_function_pool[6398]: Color3usv (offset 24) */
+   /* _mesa_function_pool[6428]: Color3usv (offset 24) */
    "p\0"
    "glColor3usv\0"
    "\0"
-   /* _mesa_function_pool[6413]: FlushRasterSGIX (dynamic) */
+   /* _mesa_function_pool[6443]: FlushRasterSGIX (dynamic) */
    "\0"
    "glFlushRasterSGIX\0"
    "\0"
-   /* _mesa_function_pool[6433]: TexCoord2f (offset 104) */
+   /* _mesa_function_pool[6463]: TexCoord2f (offset 104) */
    "ff\0"
    "glTexCoord2f\0"
    "\0"
-   /* _mesa_function_pool[6450]: ReplacementCodeuiTexCoord2fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[6480]: ReplacementCodeuiTexCoord2fVertex3fSUN (dynamic) */
    "ifffff\0"
    "glReplacementCodeuiTexCoord2fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[6499]: TexCoord2d (offset 102) */
+   /* _mesa_function_pool[6529]: TexCoord2d (offset 102) */
    "dd\0"
    "glTexCoord2d\0"
    "\0"
-   /* _mesa_function_pool[6516]: RasterPos3d (offset 70) */
+   /* _mesa_function_pool[6546]: RasterPos3d (offset 70) */
    "ddd\0"
    "glRasterPos3d\0"
    "\0"
-   /* _mesa_function_pool[6535]: RasterPos3f (offset 72) */
+   /* _mesa_function_pool[6565]: RasterPos3f (offset 72) */
    "fff\0"
    "glRasterPos3f\0"
    "\0"
-   /* _mesa_function_pool[6554]: Uniform1fARB (will be remapped) */
+   /* _mesa_function_pool[6584]: Uniform1fARB (will be remapped) */
    "if\0"
    "glUniform1f\0"
    "glUniform1fARB\0"
    "\0"
-   /* _mesa_function_pool[6585]: AreTexturesResident (offset 322) */
+   /* _mesa_function_pool[6615]: AreTexturesResident (offset 322) */
    "ipp\0"
    "glAreTexturesResident\0"
    "glAreTexturesResidentEXT\0"
    "\0"
-   /* _mesa_function_pool[6637]: TexCoord2s (offset 108) */
+   /* _mesa_function_pool[6667]: TexCoord2s (offset 108) */
    "ii\0"
    "glTexCoord2s\0"
    "\0"
-   /* _mesa_function_pool[6654]: StencilOpSeparate (will be remapped) */
+   /* _mesa_function_pool[6684]: StencilOpSeparate (will be remapped) */
    "iiii\0"
    "glStencilOpSeparate\0"
    "glStencilOpSeparateATI\0"
    "\0"
-   /* _mesa_function_pool[6703]: ColorTableParameteriv (offset 341) */
+   /* _mesa_function_pool[6733]: ColorTableParameteriv (offset 341) */
    "iip\0"
    "glColorTableParameteriv\0"
    "glColorTableParameterivSGI\0"
    "\0"
-   /* _mesa_function_pool[6759]: FogCoordPointerListIBM (dynamic) */
+   /* _mesa_function_pool[6789]: FogCoordPointerListIBM (dynamic) */
    "iipi\0"
    "glFogCoordPointerListIBM\0"
    "\0"
-   /* _mesa_function_pool[6790]: WindowPos3dMESA (will be remapped) */
+   /* _mesa_function_pool[6820]: WindowPos3dMESA (will be remapped) */
    "ddd\0"
    "glWindowPos3d\0"
    "glWindowPos3dARB\0"
    "glWindowPos3dMESA\0"
    "\0"
-   /* _mesa_function_pool[6844]: Color4us (offset 39) */
+   /* _mesa_function_pool[6874]: Color4us (offset 39) */
    "iiii\0"
    "glColor4us\0"
    "\0"
-   /* _mesa_function_pool[6861]: PointParameterfvEXT (will be remapped) */
+   /* _mesa_function_pool[6891]: PointParameterfvEXT (will be remapped) */
    "ip\0"
    "glPointParameterfv\0"
    "glPointParameterfvARB\0"
    "glPointParameterfvEXT\0"
    "glPointParameterfvSGIS\0"
    "\0"
-   /* _mesa_function_pool[6951]: Color3bv (offset 10) */
+   /* _mesa_function_pool[6981]: Color3bv (offset 10) */
    "p\0"
    "glColor3bv\0"
    "\0"
-   /* _mesa_function_pool[6965]: WindowPos2fvMESA (will be remapped) */
+   /* _mesa_function_pool[6995]: WindowPos2fvMESA (will be remapped) */
    "p\0"
    "glWindowPos2fv\0"
    "glWindowPos2fvARB\0"
    "glWindowPos2fvMESA\0"
    "\0"
-   /* _mesa_function_pool[7020]: SecondaryColor3bvEXT (will be remapped) */
+   /* _mesa_function_pool[7050]: SecondaryColor3bvEXT (will be remapped) */
    "p\0"
    "glSecondaryColor3bv\0"
    "glSecondaryColor3bvEXT\0"
    "\0"
-   /* _mesa_function_pool[7066]: VertexPointerListIBM (dynamic) */
+   /* _mesa_function_pool[7096]: VertexPointerListIBM (dynamic) */
    "iiipi\0"
    "glVertexPointerListIBM\0"
    "\0"
-   /* _mesa_function_pool[7096]: GetProgramLocalParameterfvARB (will be remapped) */
+   /* _mesa_function_pool[7126]: GetProgramLocalParameterfvARB (will be remapped) */
    "iip\0"
    "glGetProgramLocalParameterfvARB\0"
    "\0"
-   /* _mesa_function_pool[7133]: FragmentMaterialfSGIX (dynamic) */
+   /* _mesa_function_pool[7163]: FragmentMaterialfSGIX (dynamic) */
    "iif\0"
    "glFragmentMaterialfSGIX\0"
    "\0"
-   /* _mesa_function_pool[7162]: TexCoord2fNormal3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[7192]: TexCoord2fNormal3fVertex3fSUN (dynamic) */
    "ffffffff\0"
    "glTexCoord2fNormal3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[7204]: RenderbufferStorageEXT (will be remapped) */
+   /* _mesa_function_pool[7234]: RenderbufferStorageEXT (will be remapped) */
    "iiii\0"
    "glRenderbufferStorage\0"
    "glRenderbufferStorageEXT\0"
    "\0"
-   /* _mesa_function_pool[7257]: IsFenceNV (will be remapped) */
+   /* _mesa_function_pool[7287]: IsFenceNV (will be remapped) */
    "i\0"
    "glIsFenceNV\0"
    "\0"
-   /* _mesa_function_pool[7272]: AttachObjectARB (will be remapped) */
+   /* _mesa_function_pool[7302]: AttachObjectARB (will be remapped) */
    "ii\0"
    "glAttachObjectARB\0"
    "\0"
-   /* _mesa_function_pool[7294]: GetFragmentLightivSGIX (dynamic) */
+   /* _mesa_function_pool[7324]: GetFragmentLightivSGIX (dynamic) */
    "iip\0"
    "glGetFragmentLightivSGIX\0"
    "\0"
-   /* _mesa_function_pool[7324]: UniformMatrix2fvARB (will be remapped) */
+   /* _mesa_function_pool[7354]: UniformMatrix2fvARB (will be remapped) */
    "iiip\0"
    "glUniformMatrix2fv\0"
    "glUniformMatrix2fvARB\0"
    "\0"
-   /* _mesa_function_pool[7371]: MultiTexCoord2fARB (offset 386) */
+   /* _mesa_function_pool[7401]: MultiTexCoord2fARB (offset 386) */
    "iff\0"
    "glMultiTexCoord2f\0"
    "glMultiTexCoord2fARB\0"
    "\0"
-   /* _mesa_function_pool[7415]: ColorTable (offset 339) */
+   /* _mesa_function_pool[7445]: ColorTable (offset 339) */
    "iiiiip\0"
    "glColorTable\0"
    "glColorTableSGI\0"
    "glColorTableEXT\0"
    "\0"
-   /* _mesa_function_pool[7468]: IndexPointer (offset 314) */
+   /* _mesa_function_pool[7498]: IndexPointer (offset 314) */
    "iip\0"
    "glIndexPointer\0"
    "\0"
-   /* _mesa_function_pool[7488]: Accum (offset 213) */
+   /* _mesa_function_pool[7518]: Accum (offset 213) */
    "if\0"
    "glAccum\0"
    "\0"
-   /* _mesa_function_pool[7500]: GetTexImage (offset 281) */
+   /* _mesa_function_pool[7530]: GetTexImage (offset 281) */
    "iiiip\0"
    "glGetTexImage\0"
    "\0"
-   /* _mesa_function_pool[7521]: MapControlPointsNV (dynamic) */
+   /* _mesa_function_pool[7551]: MapControlPointsNV (dynamic) */
    "iiiiiiiip\0"
    "glMapControlPointsNV\0"
    "\0"
-   /* _mesa_function_pool[7553]: ConvolutionFilter2D (offset 349) */
+   /* _mesa_function_pool[7583]: ConvolutionFilter2D (offset 349) */
    "iiiiiip\0"
    "glConvolutionFilter2D\0"
    "glConvolutionFilter2DEXT\0"
    "\0"
-   /* _mesa_function_pool[7609]: Finish (offset 216) */
+   /* _mesa_function_pool[7639]: Finish (offset 216) */
    "\0"
    "glFinish\0"
    "\0"
-   /* _mesa_function_pool[7620]: MapParameterfvNV (dynamic) */
+   /* _mesa_function_pool[7650]: MapParameterfvNV (dynamic) */
    "iip\0"
    "glMapParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[7644]: ClearStencil (offset 207) */
+   /* _mesa_function_pool[7674]: ClearStencil (offset 207) */
    "i\0"
    "glClearStencil\0"
    "\0"
-   /* _mesa_function_pool[7662]: VertexAttrib3dvARB (will be remapped) */
+   /* _mesa_function_pool[7692]: VertexAttrib3dvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib3dv\0"
    "glVertexAttrib3dvARB\0"
    "\0"
-   /* _mesa_function_pool[7705]: HintPGI (dynamic) */
+   /* _mesa_function_pool[7735]: HintPGI (dynamic) */
    "ii\0"
    "glHintPGI\0"
    "\0"
-   /* _mesa_function_pool[7719]: ConvolutionParameteriv (offset 353) */
+   /* _mesa_function_pool[7749]: ConvolutionParameteriv (offset 353) */
    "iip\0"
    "glConvolutionParameteriv\0"
    "glConvolutionParameterivEXT\0"
    "\0"
-   /* _mesa_function_pool[7777]: Color4s (offset 33) */
+   /* _mesa_function_pool[7807]: Color4s (offset 33) */
    "iiii\0"
    "glColor4s\0"
    "\0"
-   /* _mesa_function_pool[7793]: InterleavedArrays (offset 317) */
+   /* _mesa_function_pool[7823]: InterleavedArrays (offset 317) */
    "iip\0"
    "glInterleavedArrays\0"
    "\0"
-   /* _mesa_function_pool[7818]: RasterPos2fv (offset 65) */
+   /* _mesa_function_pool[7848]: RasterPos2fv (offset 65) */
    "p\0"
    "glRasterPos2fv\0"
    "\0"
-   /* _mesa_function_pool[7836]: TexCoord1fv (offset 97) */
+   /* _mesa_function_pool[7866]: TexCoord1fv (offset 97) */
    "p\0"
    "glTexCoord1fv\0"
    "\0"
-   /* _mesa_function_pool[7853]: Vertex2d (offset 126) */
+   /* _mesa_function_pool[7883]: Vertex2d (offset 126) */
    "dd\0"
    "glVertex2d\0"
    "\0"
-   /* _mesa_function_pool[7868]: CullParameterdvEXT (will be remapped) */
+   /* _mesa_function_pool[7898]: CullParameterdvEXT (will be remapped) */
    "ip\0"
    "glCullParameterdvEXT\0"
    "\0"
-   /* _mesa_function_pool[7893]: ProgramNamedParameter4fNV (will be remapped) */
+   /* _mesa_function_pool[7923]: ProgramNamedParameter4fNV (will be remapped) */
    "iipffff\0"
    "glProgramNamedParameter4fNV\0"
    "\0"
-   /* _mesa_function_pool[7930]: Color3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[7960]: Color3fVertex3fSUN (dynamic) */
    "ffffff\0"
    "glColor3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[7959]: ProgramEnvParameter4fvARB (will be remapped) */
+   /* _mesa_function_pool[7989]: ProgramEnvParameter4fvARB (will be remapped) */
    "iip\0"
    "glProgramEnvParameter4fvARB\0"
    "glProgramParameter4fvNV\0"
    "\0"
-   /* _mesa_function_pool[8016]: Color4i (offset 31) */
+   /* _mesa_function_pool[8046]: Color4i (offset 31) */
    "iiii\0"
    "glColor4i\0"
    "\0"
-   /* _mesa_function_pool[8032]: Color4f (offset 29) */
+   /* _mesa_function_pool[8062]: Color4f (offset 29) */
    "ffff\0"
    "glColor4f\0"
    "\0"
-   /* _mesa_function_pool[8048]: RasterPos4fv (offset 81) */
+   /* _mesa_function_pool[8078]: RasterPos4fv (offset 81) */
    "p\0"
    "glRasterPos4fv\0"
    "\0"
-   /* _mesa_function_pool[8066]: Color4d (offset 27) */
+   /* _mesa_function_pool[8096]: Color4d (offset 27) */
    "dddd\0"
    "glColor4d\0"
    "\0"
-   /* _mesa_function_pool[8082]: ClearIndex (offset 205) */
+   /* _mesa_function_pool[8112]: ClearIndex (offset 205) */
    "f\0"
    "glClearIndex\0"
    "\0"
-   /* _mesa_function_pool[8098]: Color4b (offset 25) */
+   /* _mesa_function_pool[8128]: Color4b (offset 25) */
    "iiii\0"
    "glColor4b\0"
    "\0"
-   /* _mesa_function_pool[8114]: LoadMatrixd (offset 292) */
+   /* _mesa_function_pool[8144]: LoadMatrixd (offset 292) */
    "p\0"
    "glLoadMatrixd\0"
    "\0"
-   /* _mesa_function_pool[8131]: FragmentLightModeliSGIX (dynamic) */
+   /* _mesa_function_pool[8161]: FragmentLightModeliSGIX (dynamic) */
    "ii\0"
    "glFragmentLightModeliSGIX\0"
    "\0"
-   /* _mesa_function_pool[8161]: RasterPos2dv (offset 63) */
+   /* _mesa_function_pool[8191]: RasterPos2dv (offset 63) */
    "p\0"
    "glRasterPos2dv\0"
    "\0"
-   /* _mesa_function_pool[8179]: ConvolutionParameterfv (offset 351) */
+   /* _mesa_function_pool[8209]: ConvolutionParameterfv (offset 351) */
    "iip\0"
    "glConvolutionParameterfv\0"
    "glConvolutionParameterfvEXT\0"
    "\0"
-   /* _mesa_function_pool[8237]: TbufferMask3DFX (dynamic) */
+   /* _mesa_function_pool[8267]: TbufferMask3DFX (dynamic) */
    "i\0"
    "glTbufferMask3DFX\0"
    "\0"
-   /* _mesa_function_pool[8258]: GetTexGendv (offset 278) */
+   /* _mesa_function_pool[8288]: GetTexGendv (offset 278) */
    "iip\0"
    "glGetTexGendv\0"
    "\0"
-   /* _mesa_function_pool[8277]: ColorMaskIndexedEXT (will be remapped) */
+   /* _mesa_function_pool[8307]: ColorMaskIndexedEXT (will be remapped) */
    "iiiii\0"
    "glColorMaskIndexedEXT\0"
    "\0"
-   /* _mesa_function_pool[8306]: LoadProgramNV (will be remapped) */
+   /* _mesa_function_pool[8336]: LoadProgramNV (will be remapped) */
    "iiip\0"
    "glLoadProgramNV\0"
    "\0"
-   /* _mesa_function_pool[8328]: WaitSync (will be remapped) */
+   /* _mesa_function_pool[8358]: WaitSync (will be remapped) */
    "iii\0"
    "glWaitSync\0"
    "\0"
-   /* _mesa_function_pool[8344]: EndList (offset 1) */
+   /* _mesa_function_pool[8374]: EndList (offset 1) */
    "\0"
    "glEndList\0"
    "\0"
-   /* _mesa_function_pool[8356]: VertexAttrib4fvNV (will be remapped) */
+   /* _mesa_function_pool[8386]: VertexAttrib4fvNV (will be remapped) */
    "ip\0"
    "glVertexAttrib4fvNV\0"
    "\0"
-   /* _mesa_function_pool[8380]: GetAttachedObjectsARB (will be remapped) */
+   /* _mesa_function_pool[8410]: GetAttachedObjectsARB (will be remapped) */
    "iipp\0"
    "glGetAttachedObjectsARB\0"
    "\0"
-   /* _mesa_function_pool[8410]: Uniform3fvARB (will be remapped) */
+   /* _mesa_function_pool[8440]: Uniform3fvARB (will be remapped) */
    "iip\0"
    "glUniform3fv\0"
    "glUniform3fvARB\0"
    "\0"
-   /* _mesa_function_pool[8444]: EvalCoord1fv (offset 231) */
+   /* _mesa_function_pool[8474]: EvalCoord1fv (offset 231) */
    "p\0"
    "glEvalCoord1fv\0"
    "\0"
-   /* _mesa_function_pool[8462]: DrawRangeElements (offset 338) */
+   /* _mesa_function_pool[8492]: DrawRangeElements (offset 338) */
    "iiiiip\0"
    "glDrawRangeElements\0"
    "glDrawRangeElementsEXT\0"
    "\0"
-   /* _mesa_function_pool[8513]: EvalMesh2 (offset 238) */
+   /* _mesa_function_pool[8543]: EvalMesh2 (offset 238) */
    "iiiii\0"
    "glEvalMesh2\0"
    "\0"
-   /* _mesa_function_pool[8532]: Vertex4fv (offset 145) */
+   /* _mesa_function_pool[8562]: Vertex4fv (offset 145) */
    "p\0"
    "glVertex4fv\0"
    "\0"
-   /* _mesa_function_pool[8547]: SpriteParameterfvSGIX (dynamic) */
+   /* _mesa_function_pool[8577]: SpriteParameterfvSGIX (dynamic) */
    "ip\0"
    "glSpriteParameterfvSGIX\0"
    "\0"
-   /* _mesa_function_pool[8575]: CheckFramebufferStatusEXT (will be remapped) */
+   /* _mesa_function_pool[8605]: CheckFramebufferStatusEXT (will be remapped) */
    "i\0"
    "glCheckFramebufferStatus\0"
    "glCheckFramebufferStatusEXT\0"
    "\0"
-   /* _mesa_function_pool[8631]: GlobalAlphaFactoruiSUN (dynamic) */
+   /* _mesa_function_pool[8661]: GlobalAlphaFactoruiSUN (dynamic) */
    "i\0"
    "glGlobalAlphaFactoruiSUN\0"
    "\0"
-   /* _mesa_function_pool[8659]: GetHandleARB (will be remapped) */
+   /* _mesa_function_pool[8689]: GetHandleARB (will be remapped) */
    "i\0"
    "glGetHandleARB\0"
    "\0"
-   /* _mesa_function_pool[8677]: GetVertexAttribivARB (will be remapped) */
+   /* _mesa_function_pool[8707]: GetVertexAttribivARB (will be remapped) */
    "iip\0"
    "glGetVertexAttribiv\0"
    "glGetVertexAttribivARB\0"
    "\0"
-   /* _mesa_function_pool[8725]: GetCombinerInputParameterfvNV (will be remapped) */
+   /* _mesa_function_pool[8755]: GetCombinerInputParameterfvNV (will be remapped) */
    "iiiip\0"
    "glGetCombinerInputParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[8764]: CreateProgram (will be remapped) */
+   /* _mesa_function_pool[8794]: CreateProgram (will be remapped) */
    "\0"
    "glCreateProgram\0"
    "\0"
-   /* _mesa_function_pool[8782]: LoadTransposeMatrixdARB (will be remapped) */
+   /* _mesa_function_pool[8812]: LoadTransposeMatrixdARB (will be remapped) */
    "p\0"
    "glLoadTransposeMatrixd\0"
    "glLoadTransposeMatrixdARB\0"
    "\0"
-   /* _mesa_function_pool[8834]: GetMinmax (offset 364) */
+   /* _mesa_function_pool[8864]: GetMinmax (offset 364) */
    "iiiip\0"
    "glGetMinmax\0"
    "glGetMinmaxEXT\0"
    "\0"
-   /* _mesa_function_pool[8868]: StencilFuncSeparate (will be remapped) */
+   /* _mesa_function_pool[8898]: StencilFuncSeparate (will be remapped) */
    "iiii\0"
    "glStencilFuncSeparate\0"
    "\0"
-   /* _mesa_function_pool[8896]: SecondaryColor3sEXT (will be remapped) */
+   /* _mesa_function_pool[8926]: SecondaryColor3sEXT (will be remapped) */
    "iii\0"
    "glSecondaryColor3s\0"
    "glSecondaryColor3sEXT\0"
    "\0"
-   /* _mesa_function_pool[8942]: Color3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[8972]: Color3fVertex3fvSUN (dynamic) */
    "pp\0"
    "glColor3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[8968]: Normal3fv (offset 57) */
+   /* _mesa_function_pool[8998]: Normal3fv (offset 57) */
    "p\0"
    "glNormal3fv\0"
    "\0"
-   /* _mesa_function_pool[8983]: GlobalAlphaFactorbSUN (dynamic) */
+   /* _mesa_function_pool[9013]: GlobalAlphaFactorbSUN (dynamic) */
    "i\0"
    "glGlobalAlphaFactorbSUN\0"
    "\0"
-   /* _mesa_function_pool[9010]: Color3us (offset 23) */
+   /* _mesa_function_pool[9040]: Color3us (offset 23) */
    "iii\0"
    "glColor3us\0"
    "\0"
-   /* _mesa_function_pool[9026]: ImageTransformParameterfvHP (dynamic) */
+   /* _mesa_function_pool[9056]: ImageTransformParameterfvHP (dynamic) */
    "iip\0"
    "glImageTransformParameterfvHP\0"
    "\0"
-   /* _mesa_function_pool[9061]: VertexAttrib4ivARB (will be remapped) */
+   /* _mesa_function_pool[9091]: VertexAttrib4ivARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4iv\0"
    "glVertexAttrib4ivARB\0"
    "\0"
-   /* _mesa_function_pool[9104]: End (offset 43) */
+   /* _mesa_function_pool[9134]: End (offset 43) */
    "\0"
    "glEnd\0"
    "\0"
-   /* _mesa_function_pool[9112]: VertexAttrib3fNV (will be remapped) */
+   /* _mesa_function_pool[9142]: VertexAttrib3fNV (will be remapped) */
    "ifff\0"
    "glVertexAttrib3fNV\0"
    "\0"
-   /* _mesa_function_pool[9137]: VertexAttribs2dvNV (will be remapped) */
+   /* _mesa_function_pool[9167]: VertexAttribs2dvNV (will be remapped) */
    "iip\0"
    "glVertexAttribs2dvNV\0"
    "\0"
-   /* _mesa_function_pool[9163]: GetQueryObjectui64vEXT (will be remapped) */
+   /* _mesa_function_pool[9193]: GetQueryObjectui64vEXT (will be remapped) */
    "iip\0"
    "glGetQueryObjectui64vEXT\0"
    "\0"
-   /* _mesa_function_pool[9193]: MultiTexCoord3fvARB (offset 395) */
+   /* _mesa_function_pool[9223]: MultiTexCoord3fvARB (offset 395) */
    "ip\0"
    "glMultiTexCoord3fv\0"
    "glMultiTexCoord3fvARB\0"
    "\0"
-   /* _mesa_function_pool[9238]: SecondaryColor3dEXT (will be remapped) */
+   /* _mesa_function_pool[9268]: SecondaryColor3dEXT (will be remapped) */
    "ddd\0"
    "glSecondaryColor3d\0"
    "glSecondaryColor3dEXT\0"
    "\0"
-   /* _mesa_function_pool[9284]: Color3ub (offset 19) */
+   /* _mesa_function_pool[9314]: Color3ub (offset 19) */
    "iii\0"
    "glColor3ub\0"
    "\0"
-   /* _mesa_function_pool[9300]: GetProgramParameterfvNV (will be remapped) */
+   /* _mesa_function_pool[9330]: GetProgramParameterfvNV (will be remapped) */
    "iiip\0"
    "glGetProgramParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[9332]: TangentPointerEXT (dynamic) */
+   /* _mesa_function_pool[9362]: TangentPointerEXT (dynamic) */
    "iip\0"
    "glTangentPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[9357]: Color4fNormal3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[9387]: Color4fNormal3fVertex3fvSUN (dynamic) */
    "ppp\0"
    "glColor4fNormal3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[9392]: GetInstrumentsSGIX (dynamic) */
+   /* _mesa_function_pool[9422]: GetInstrumentsSGIX (dynamic) */
    "\0"
    "glGetInstrumentsSGIX\0"
    "\0"
-   /* _mesa_function_pool[9415]: Color3ui (offset 21) */
+   /* _mesa_function_pool[9445]: Color3ui (offset 21) */
    "iii\0"
    "glColor3ui\0"
    "\0"
-   /* _mesa_function_pool[9431]: EvalMapsNV (dynamic) */
+   /* _mesa_function_pool[9461]: EvalMapsNV (dynamic) */
    "ii\0"
    "glEvalMapsNV\0"
    "\0"
-   /* _mesa_function_pool[9448]: TexSubImage2D (offset 333) */
+   /* _mesa_function_pool[9478]: TexSubImage2D (offset 333) */
    "iiiiiiiip\0"
    "glTexSubImage2D\0"
    "glTexSubImage2DEXT\0"
    "\0"
-   /* _mesa_function_pool[9494]: FragmentLightivSGIX (dynamic) */
+   /* _mesa_function_pool[9524]: FragmentLightivSGIX (dynamic) */
    "iip\0"
    "glFragmentLightivSGIX\0"
    "\0"
-   /* _mesa_function_pool[9521]: GetTexParameterPointervAPPLE (will be remapped) */
+   /* _mesa_function_pool[9551]: GetTexParameterPointervAPPLE (will be remapped) */
    "iip\0"
    "glGetTexParameterPointervAPPLE\0"
    "\0"
-   /* _mesa_function_pool[9557]: TexGenfv (offset 191) */
+   /* _mesa_function_pool[9587]: TexGenfv (offset 191) */
    "iip\0"
    "glTexGenfv\0"
    "\0"
-   /* _mesa_function_pool[9573]: PixelTransformParameterfvEXT (dynamic) */
+   /* _mesa_function_pool[9603]: PixelTransformParameterfvEXT (dynamic) */
    "iip\0"
    "glPixelTransformParameterfvEXT\0"
    "\0"
-   /* _mesa_function_pool[9609]: VertexAttrib4bvARB (will be remapped) */
+   /* _mesa_function_pool[9639]: VertexAttrib4bvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4bv\0"
    "glVertexAttrib4bvARB\0"
    "\0"
-   /* _mesa_function_pool[9652]: AlphaFragmentOp2ATI (will be remapped) */
+   /* _mesa_function_pool[9682]: AlphaFragmentOp2ATI (will be remapped) */
    "iiiiiiiii\0"
    "glAlphaFragmentOp2ATI\0"
    "\0"
-   /* _mesa_function_pool[9685]: GetIntegerIndexedvEXT (will be remapped) */
+   /* _mesa_function_pool[9715]: GetIntegerIndexedvEXT (will be remapped) */
    "iip\0"
    "glGetIntegerIndexedvEXT\0"
    "\0"
-   /* _mesa_function_pool[9714]: MultiTexCoord4sARB (offset 406) */
+   /* _mesa_function_pool[9744]: MultiTexCoord4sARB (offset 406) */
    "iiiii\0"
    "glMultiTexCoord4s\0"
    "glMultiTexCoord4sARB\0"
    "\0"
-   /* _mesa_function_pool[9760]: GetFragmentMaterialivSGIX (dynamic) */
+   /* _mesa_function_pool[9790]: GetFragmentMaterialivSGIX (dynamic) */
    "iip\0"
    "glGetFragmentMaterialivSGIX\0"
    "\0"
-   /* _mesa_function_pool[9793]: WindowPos4dMESA (will be remapped) */
+   /* _mesa_function_pool[9823]: WindowPos4dMESA (will be remapped) */
    "dddd\0"
    "glWindowPos4dMESA\0"
    "\0"
-   /* _mesa_function_pool[9817]: WeightPointerARB (dynamic) */
+   /* _mesa_function_pool[9847]: WeightPointerARB (dynamic) */
    "iiip\0"
    "glWeightPointerARB\0"
    "\0"
-   /* _mesa_function_pool[9842]: WindowPos2dMESA (will be remapped) */
+   /* _mesa_function_pool[9872]: WindowPos2dMESA (will be remapped) */
    "dd\0"
    "glWindowPos2d\0"
    "glWindowPos2dARB\0"
    "glWindowPos2dMESA\0"
    "\0"
-   /* _mesa_function_pool[9895]: FramebufferTexture3DEXT (will be remapped) */
+   /* _mesa_function_pool[9925]: FramebufferTexture3DEXT (will be remapped) */
    "iiiiii\0"
    "glFramebufferTexture3D\0"
    "glFramebufferTexture3DEXT\0"
    "\0"
-   /* _mesa_function_pool[9952]: BlendEquation (offset 337) */
+   /* _mesa_function_pool[9982]: BlendEquation (offset 337) */
    "i\0"
    "glBlendEquation\0"
    "glBlendEquationEXT\0"
    "\0"
-   /* _mesa_function_pool[9990]: VertexAttrib3dNV (will be remapped) */
+   /* _mesa_function_pool[10020]: VertexAttrib3dNV (will be remapped) */
    "iddd\0"
    "glVertexAttrib3dNV\0"
    "\0"
-   /* _mesa_function_pool[10015]: VertexAttrib3dARB (will be remapped) */
+   /* _mesa_function_pool[10045]: VertexAttrib3dARB (will be remapped) */
    "iddd\0"
    "glVertexAttrib3d\0"
    "glVertexAttrib3dARB\0"
    "\0"
-   /* _mesa_function_pool[10058]: ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[10088]: ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (dynamic) */
    "ppppp\0"
    "glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[10122]: VertexAttrib4fARB (will be remapped) */
+   /* _mesa_function_pool[10152]: VertexAttrib4fARB (will be remapped) */
    "iffff\0"
    "glVertexAttrib4f\0"
    "glVertexAttrib4fARB\0"
    "\0"
-   /* _mesa_function_pool[10166]: GetError (offset 261) */
+   /* _mesa_function_pool[10196]: GetError (offset 261) */
    "\0"
    "glGetError\0"
    "\0"
-   /* _mesa_function_pool[10179]: IndexFuncEXT (dynamic) */
+   /* _mesa_function_pool[10209]: IndexFuncEXT (dynamic) */
    "if\0"
    "glIndexFuncEXT\0"
    "\0"
-   /* _mesa_function_pool[10198]: TexCoord3dv (offset 111) */
+   /* _mesa_function_pool[10228]: TexCoord3dv (offset 111) */
    "p\0"
    "glTexCoord3dv\0"
    "\0"
-   /* _mesa_function_pool[10215]: Indexdv (offset 45) */
+   /* _mesa_function_pool[10245]: Indexdv (offset 45) */
    "p\0"
    "glIndexdv\0"
    "\0"
-   /* _mesa_function_pool[10228]: FramebufferTexture2DEXT (will be remapped) */
+   /* _mesa_function_pool[10258]: FramebufferTexture2DEXT (will be remapped) */
    "iiiii\0"
    "glFramebufferTexture2D\0"
    "glFramebufferTexture2DEXT\0"
    "\0"
-   /* _mesa_function_pool[10284]: Normal3s (offset 60) */
+   /* _mesa_function_pool[10314]: Normal3s (offset 60) */
    "iii\0"
    "glNormal3s\0"
    "\0"
-   /* _mesa_function_pool[10300]: PushName (offset 201) */
+   /* _mesa_function_pool[10330]: GetObjectParameterivAPPLE (will be remapped) */
+   "iiip\0"
+   "glGetObjectParameterivAPPLE\0"
+   "\0"
+   /* _mesa_function_pool[10364]: PushName (offset 201) */
    "i\0"
    "glPushName\0"
    "\0"
-   /* _mesa_function_pool[10314]: MultiTexCoord2dvARB (offset 385) */
+   /* _mesa_function_pool[10378]: MultiTexCoord2dvARB (offset 385) */
    "ip\0"
    "glMultiTexCoord2dv\0"
    "glMultiTexCoord2dvARB\0"
    "\0"
-   /* _mesa_function_pool[10359]: CullParameterfvEXT (will be remapped) */
+   /* _mesa_function_pool[10423]: CullParameterfvEXT (will be remapped) */
    "ip\0"
    "glCullParameterfvEXT\0"
    "\0"
-   /* _mesa_function_pool[10384]: Normal3i (offset 58) */
+   /* _mesa_function_pool[10448]: Normal3i (offset 58) */
    "iii\0"
    "glNormal3i\0"
    "\0"
-   /* _mesa_function_pool[10400]: ProgramNamedParameter4fvNV (will be remapped) */
+   /* _mesa_function_pool[10464]: ProgramNamedParameter4fvNV (will be remapped) */
    "iipp\0"
    "glProgramNamedParameter4fvNV\0"
    "\0"
-   /* _mesa_function_pool[10435]: SecondaryColorPointerEXT (will be remapped) */
+   /* _mesa_function_pool[10499]: SecondaryColorPointerEXT (will be remapped) */
    "iiip\0"
    "glSecondaryColorPointer\0"
    "glSecondaryColorPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[10492]: VertexAttrib4fvARB (will be remapped) */
+   /* _mesa_function_pool[10556]: VertexAttrib4fvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4fv\0"
    "glVertexAttrib4fvARB\0"
    "\0"
-   /* _mesa_function_pool[10535]: ColorPointerListIBM (dynamic) */
+   /* _mesa_function_pool[10599]: ColorPointerListIBM (dynamic) */
    "iiipi\0"
    "glColorPointerListIBM\0"
    "\0"
-   /* _mesa_function_pool[10564]: GetActiveUniformARB (will be remapped) */
+   /* _mesa_function_pool[10628]: GetActiveUniformARB (will be remapped) */
    "iiipppp\0"
    "glGetActiveUniform\0"
    "glGetActiveUniformARB\0"
    "\0"
-   /* _mesa_function_pool[10614]: ImageTransformParameteriHP (dynamic) */
+   /* _mesa_function_pool[10678]: ImageTransformParameteriHP (dynamic) */
    "iii\0"
    "glImageTransformParameteriHP\0"
    "\0"
-   /* _mesa_function_pool[10648]: Normal3b (offset 52) */
+   /* _mesa_function_pool[10712]: Normal3b (offset 52) */
    "iii\0"
    "glNormal3b\0"
    "\0"
-   /* _mesa_function_pool[10664]: Normal3d (offset 54) */
+   /* _mesa_function_pool[10728]: Normal3d (offset 54) */
    "ddd\0"
    "glNormal3d\0"
    "\0"
-   /* _mesa_function_pool[10680]: Normal3f (offset 56) */
+   /* _mesa_function_pool[10744]: Normal3f (offset 56) */
    "fff\0"
    "glNormal3f\0"
    "\0"
-   /* _mesa_function_pool[10696]: MultiTexCoord1svARB (offset 383) */
+   /* _mesa_function_pool[10760]: MultiTexCoord1svARB (offset 383) */
    "ip\0"
    "glMultiTexCoord1sv\0"
    "glMultiTexCoord1svARB\0"
    "\0"
-   /* _mesa_function_pool[10741]: Indexi (offset 48) */
+   /* _mesa_function_pool[10805]: Indexi (offset 48) */
    "i\0"
    "glIndexi\0"
    "\0"
-   /* _mesa_function_pool[10753]: EGLImageTargetTexture2DOES (will be remapped) */
+   /* _mesa_function_pool[10817]: EGLImageTargetTexture2DOES (will be remapped) */
    "ip\0"
    "glEGLImageTargetTexture2DOES\0"
    "\0"
-   /* _mesa_function_pool[10786]: EndQueryARB (will be remapped) */
+   /* _mesa_function_pool[10850]: EndQueryARB (will be remapped) */
    "i\0"
    "glEndQuery\0"
    "glEndQueryARB\0"
    "\0"
-   /* _mesa_function_pool[10814]: DeleteFencesNV (will be remapped) */
+   /* _mesa_function_pool[10878]: DeleteFencesNV (will be remapped) */
    "ip\0"
    "glDeleteFencesNV\0"
    "\0"
-   /* _mesa_function_pool[10835]: DeformationMap3dSGIX (dynamic) */
-   "iddiiddiiddiip\0"
-   "glDeformationMap3dSGIX\0"
-   "\0"
-   /* _mesa_function_pool[10874]: DepthMask (offset 211) */
+   /* _mesa_function_pool[10899]: DepthMask (offset 211) */
    "i\0"
    "glDepthMask\0"
    "\0"
-   /* _mesa_function_pool[10889]: IsShader (will be remapped) */
+   /* _mesa_function_pool[10914]: IsShader (will be remapped) */
    "i\0"
    "glIsShader\0"
    "\0"
-   /* _mesa_function_pool[10903]: Indexf (offset 46) */
+   /* _mesa_function_pool[10928]: Indexf (offset 46) */
    "f\0"
    "glIndexf\0"
    "\0"
-   /* _mesa_function_pool[10915]: GetImageTransformParameterivHP (dynamic) */
+   /* _mesa_function_pool[10940]: GetImageTransformParameterivHP (dynamic) */
    "iip\0"
    "glGetImageTransformParameterivHP\0"
    "\0"
-   /* _mesa_function_pool[10953]: Indexd (offset 44) */
+   /* _mesa_function_pool[10978]: Indexd (offset 44) */
    "d\0"
    "glIndexd\0"
    "\0"
-   /* _mesa_function_pool[10965]: GetMaterialiv (offset 270) */
+   /* _mesa_function_pool[10990]: GetMaterialiv (offset 270) */
    "iip\0"
    "glGetMaterialiv\0"
    "\0"
-   /* _mesa_function_pool[10986]: StencilOp (offset 244) */
+   /* _mesa_function_pool[11011]: StencilOp (offset 244) */
    "iii\0"
    "glStencilOp\0"
    "\0"
-   /* _mesa_function_pool[11003]: WindowPos4ivMESA (will be remapped) */
+   /* _mesa_function_pool[11028]: WindowPos4ivMESA (will be remapped) */
    "p\0"
    "glWindowPos4ivMESA\0"
    "\0"
-   /* _mesa_function_pool[11025]: MultiTexCoord3svARB (offset 399) */
+   /* _mesa_function_pool[11050]: MultiTexCoord3svARB (offset 399) */
    "ip\0"
    "glMultiTexCoord3sv\0"
    "glMultiTexCoord3svARB\0"
    "\0"
-   /* _mesa_function_pool[11070]: TexEnvfv (offset 185) */
+   /* _mesa_function_pool[11095]: TexEnvfv (offset 185) */
    "iip\0"
    "glTexEnvfv\0"
    "\0"
-   /* _mesa_function_pool[11086]: MultiTexCoord4iARB (offset 404) */
+   /* _mesa_function_pool[11111]: MultiTexCoord4iARB (offset 404) */
    "iiiii\0"
    "glMultiTexCoord4i\0"
    "glMultiTexCoord4iARB\0"
    "\0"
-   /* _mesa_function_pool[11132]: Indexs (offset 50) */
+   /* _mesa_function_pool[11157]: Indexs (offset 50) */
    "i\0"
    "glIndexs\0"
    "\0"
-   /* _mesa_function_pool[11144]: Binormal3ivEXT (dynamic) */
+   /* _mesa_function_pool[11169]: Binormal3ivEXT (dynamic) */
    "p\0"
    "glBinormal3ivEXT\0"
    "\0"
-   /* _mesa_function_pool[11164]: ResizeBuffersMESA (will be remapped) */
+   /* _mesa_function_pool[11189]: ResizeBuffersMESA (will be remapped) */
    "\0"
    "glResizeBuffersMESA\0"
    "\0"
-   /* _mesa_function_pool[11186]: GetUniformivARB (will be remapped) */
+   /* _mesa_function_pool[11211]: GetUniformivARB (will be remapped) */
    "iip\0"
    "glGetUniformiv\0"
    "glGetUniformivARB\0"
    "\0"
-   /* _mesa_function_pool[11224]: PixelTexGenParameteriSGIS (will be remapped) */
+   /* _mesa_function_pool[11249]: PixelTexGenParameteriSGIS (will be remapped) */
    "ii\0"
    "glPixelTexGenParameteriSGIS\0"
    "\0"
-   /* _mesa_function_pool[11256]: VertexPointervINTEL (dynamic) */
+   /* _mesa_function_pool[11281]: VertexPointervINTEL (dynamic) */
    "iip\0"
    "glVertexPointervINTEL\0"
    "\0"
-   /* _mesa_function_pool[11283]: Vertex2i (offset 130) */
+   /* _mesa_function_pool[11308]: Vertex2i (offset 130) */
    "ii\0"
    "glVertex2i\0"
    "\0"
-   /* _mesa_function_pool[11298]: LoadMatrixf (offset 291) */
+   /* _mesa_function_pool[11323]: LoadMatrixf (offset 291) */
    "p\0"
    "glLoadMatrixf\0"
    "\0"
-   /* _mesa_function_pool[11315]: Vertex2f (offset 128) */
+   /* _mesa_function_pool[11340]: Vertex2f (offset 128) */
    "ff\0"
    "glVertex2f\0"
    "\0"
-   /* _mesa_function_pool[11330]: ReplacementCodeuiColor4fNormal3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[11355]: ReplacementCodeuiColor4fNormal3fVertex3fvSUN (dynamic) */
    "pppp\0"
    "glReplacementCodeuiColor4fNormal3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[11383]: Color4bv (offset 26) */
+   /* _mesa_function_pool[11408]: Color4bv (offset 26) */
    "p\0"
    "glColor4bv\0"
    "\0"
-   /* _mesa_function_pool[11397]: VertexPointer (offset 321) */
+   /* _mesa_function_pool[11422]: VertexPointer (offset 321) */
    "iiip\0"
    "glVertexPointer\0"
    "\0"
-   /* _mesa_function_pool[11419]: SecondaryColor3uiEXT (will be remapped) */
+   /* _mesa_function_pool[11444]: SecondaryColor3uiEXT (will be remapped) */
    "iii\0"
    "glSecondaryColor3ui\0"
    "glSecondaryColor3uiEXT\0"
    "\0"
-   /* _mesa_function_pool[11467]: StartInstrumentsSGIX (dynamic) */
+   /* _mesa_function_pool[11492]: StartInstrumentsSGIX (dynamic) */
    "\0"
    "glStartInstrumentsSGIX\0"
    "\0"
-   /* _mesa_function_pool[11492]: SecondaryColor3usvEXT (will be remapped) */
+   /* _mesa_function_pool[11517]: SecondaryColor3usvEXT (will be remapped) */
    "p\0"
    "glSecondaryColor3usv\0"
    "glSecondaryColor3usvEXT\0"
    "\0"
-   /* _mesa_function_pool[11540]: VertexAttrib2fvNV (will be remapped) */
+   /* _mesa_function_pool[11565]: VertexAttrib2fvNV (will be remapped) */
    "ip\0"
    "glVertexAttrib2fvNV\0"
    "\0"
-   /* _mesa_function_pool[11564]: ProgramLocalParameter4dvARB (will be remapped) */
+   /* _mesa_function_pool[11589]: ProgramLocalParameter4dvARB (will be remapped) */
    "iip\0"
    "glProgramLocalParameter4dvARB\0"
    "\0"
-   /* _mesa_function_pool[11599]: DeleteLists (offset 4) */
+   /* _mesa_function_pool[11624]: DeleteLists (offset 4) */
    "ii\0"
    "glDeleteLists\0"
    "\0"
-   /* _mesa_function_pool[11617]: LogicOp (offset 242) */
+   /* _mesa_function_pool[11642]: LogicOp (offset 242) */
    "i\0"
    "glLogicOp\0"
    "\0"
-   /* _mesa_function_pool[11630]: MatrixIndexuivARB (dynamic) */
+   /* _mesa_function_pool[11655]: MatrixIndexuivARB (dynamic) */
    "ip\0"
    "glMatrixIndexuivARB\0"
    "\0"
-   /* _mesa_function_pool[11654]: Vertex2s (offset 132) */
+   /* _mesa_function_pool[11679]: Vertex2s (offset 132) */
    "ii\0"
    "glVertex2s\0"
    "\0"
-   /* _mesa_function_pool[11669]: RenderbufferStorageMultisample (will be remapped) */
+   /* _mesa_function_pool[11694]: RenderbufferStorageMultisample (will be remapped) */
    "iiiii\0"
    "glRenderbufferStorageMultisample\0"
    "glRenderbufferStorageMultisampleEXT\0"
    "\0"
-   /* _mesa_function_pool[11745]: TexCoord4fv (offset 121) */
+   /* _mesa_function_pool[11770]: TexCoord4fv (offset 121) */
    "p\0"
    "glTexCoord4fv\0"
    "\0"
-   /* _mesa_function_pool[11762]: Tangent3sEXT (dynamic) */
+   /* _mesa_function_pool[11787]: Tangent3sEXT (dynamic) */
    "iii\0"
    "glTangent3sEXT\0"
    "\0"
-   /* _mesa_function_pool[11782]: GlobalAlphaFactorfSUN (dynamic) */
+   /* _mesa_function_pool[11807]: GlobalAlphaFactorfSUN (dynamic) */
    "f\0"
    "glGlobalAlphaFactorfSUN\0"
    "\0"
-   /* _mesa_function_pool[11809]: MultiTexCoord3iARB (offset 396) */
+   /* _mesa_function_pool[11834]: MultiTexCoord3iARB (offset 396) */
    "iiii\0"
    "glMultiTexCoord3i\0"
    "glMultiTexCoord3iARB\0"
    "\0"
-   /* _mesa_function_pool[11854]: IsProgram (will be remapped) */
+   /* _mesa_function_pool[11879]: IsProgram (will be remapped) */
    "i\0"
    "glIsProgram\0"
    "\0"
-   /* _mesa_function_pool[11869]: TexCoordPointerListIBM (dynamic) */
+   /* _mesa_function_pool[11894]: TexCoordPointerListIBM (dynamic) */
    "iiipi\0"
    "glTexCoordPointerListIBM\0"
    "\0"
-   /* _mesa_function_pool[11901]: GlobalAlphaFactorusSUN (dynamic) */
+   /* _mesa_function_pool[11926]: GlobalAlphaFactorusSUN (dynamic) */
    "i\0"
    "glGlobalAlphaFactorusSUN\0"
    "\0"
-   /* _mesa_function_pool[11929]: VertexAttrib2dvNV (will be remapped) */
+   /* _mesa_function_pool[11954]: VertexAttrib2dvNV (will be remapped) */
    "ip\0"
    "glVertexAttrib2dvNV\0"
    "\0"
-   /* _mesa_function_pool[11953]: FramebufferRenderbufferEXT (will be remapped) */
+   /* _mesa_function_pool[11978]: FramebufferRenderbufferEXT (will be remapped) */
    "iiii\0"
    "glFramebufferRenderbuffer\0"
    "glFramebufferRenderbufferEXT\0"
    "\0"
-   /* _mesa_function_pool[12014]: VertexAttrib1dvNV (will be remapped) */
+   /* _mesa_function_pool[12039]: VertexAttrib1dvNV (will be remapped) */
    "ip\0"
    "glVertexAttrib1dvNV\0"
    "\0"
-   /* _mesa_function_pool[12038]: GenTextures (offset 328) */
+   /* _mesa_function_pool[12063]: GenTextures (offset 328) */
    "ip\0"
    "glGenTextures\0"
    "glGenTexturesEXT\0"
    "\0"
-   /* _mesa_function_pool[12073]: SetFenceNV (will be remapped) */
+   /* _mesa_function_pool[12098]: SetFenceNV (will be remapped) */
    "ii\0"
    "glSetFenceNV\0"
    "\0"
-   /* _mesa_function_pool[12090]: FramebufferTexture1DEXT (will be remapped) */
+   /* _mesa_function_pool[12115]: FramebufferTexture1DEXT (will be remapped) */
    "iiiii\0"
    "glFramebufferTexture1D\0"
    "glFramebufferTexture1DEXT\0"
    "\0"
-   /* _mesa_function_pool[12146]: GetCombinerOutputParameterivNV (will be remapped) */
+   /* _mesa_function_pool[12171]: GetCombinerOutputParameterivNV (will be remapped) */
    "iiip\0"
    "glGetCombinerOutputParameterivNV\0"
    "\0"
-   /* _mesa_function_pool[12185]: PixelTexGenParameterivSGIS (will be remapped) */
+   /* _mesa_function_pool[12210]: MultiModeDrawArraysIBM (will be remapped) */
+   "pppii\0"
+   "glMultiModeDrawArraysIBM\0"
+   "\0"
+   /* _mesa_function_pool[12242]: PixelTexGenParameterivSGIS (will be remapped) */
    "ip\0"
    "glPixelTexGenParameterivSGIS\0"
    "\0"
-   /* _mesa_function_pool[12218]: TextureNormalEXT (dynamic) */
+   /* _mesa_function_pool[12275]: TextureNormalEXT (dynamic) */
    "i\0"
    "glTextureNormalEXT\0"
    "\0"
-   /* _mesa_function_pool[12240]: IndexPointerListIBM (dynamic) */
+   /* _mesa_function_pool[12297]: IndexPointerListIBM (dynamic) */
    "iipi\0"
    "glIndexPointerListIBM\0"
    "\0"
-   /* _mesa_function_pool[12268]: WeightfvARB (dynamic) */
+   /* _mesa_function_pool[12325]: WeightfvARB (dynamic) */
    "ip\0"
    "glWeightfvARB\0"
    "\0"
-   /* _mesa_function_pool[12286]: RasterPos2sv (offset 69) */
+   /* _mesa_function_pool[12343]: RasterPos2sv (offset 69) */
    "p\0"
    "glRasterPos2sv\0"
    "\0"
-   /* _mesa_function_pool[12304]: Color4ubv (offset 36) */
+   /* _mesa_function_pool[12361]: Color4ubv (offset 36) */
    "p\0"
    "glColor4ubv\0"
    "\0"
-   /* _mesa_function_pool[12319]: DrawBuffer (offset 202) */
+   /* _mesa_function_pool[12376]: DrawBuffer (offset 202) */
    "i\0"
    "glDrawBuffer\0"
    "\0"
-   /* _mesa_function_pool[12335]: TexCoord2fv (offset 105) */
+   /* _mesa_function_pool[12392]: TexCoord2fv (offset 105) */
    "p\0"
    "glTexCoord2fv\0"
    "\0"
-   /* _mesa_function_pool[12352]: WindowPos4fMESA (will be remapped) */
+   /* _mesa_function_pool[12409]: WindowPos4fMESA (will be remapped) */
    "ffff\0"
    "glWindowPos4fMESA\0"
    "\0"
-   /* _mesa_function_pool[12376]: TexCoord1sv (offset 101) */
+   /* _mesa_function_pool[12433]: TexCoord1sv (offset 101) */
    "p\0"
    "glTexCoord1sv\0"
    "\0"
-   /* _mesa_function_pool[12393]: WindowPos3dvMESA (will be remapped) */
+   /* _mesa_function_pool[12450]: WindowPos3dvMESA (will be remapped) */
    "p\0"
    "glWindowPos3dv\0"
    "glWindowPos3dvARB\0"
    "glWindowPos3dvMESA\0"
    "\0"
-   /* _mesa_function_pool[12448]: DepthFunc (offset 245) */
+   /* _mesa_function_pool[12505]: DepthFunc (offset 245) */
    "i\0"
    "glDepthFunc\0"
    "\0"
-   /* _mesa_function_pool[12463]: PixelMapusv (offset 253) */
+   /* _mesa_function_pool[12520]: PixelMapusv (offset 253) */
    "iip\0"
    "glPixelMapusv\0"
    "\0"
-   /* _mesa_function_pool[12482]: GetQueryObjecti64vEXT (will be remapped) */
+   /* _mesa_function_pool[12539]: GetQueryObjecti64vEXT (will be remapped) */
    "iip\0"
    "glGetQueryObjecti64vEXT\0"
    "\0"
-   /* _mesa_function_pool[12511]: MultiTexCoord1dARB (offset 376) */
+   /* _mesa_function_pool[12568]: MultiTexCoord1dARB (offset 376) */
    "id\0"
    "glMultiTexCoord1d\0"
    "glMultiTexCoord1dARB\0"
    "\0"
-   /* _mesa_function_pool[12554]: PointParameterivNV (will be remapped) */
+   /* _mesa_function_pool[12611]: PointParameterivNV (will be remapped) */
    "ip\0"
    "glPointParameteriv\0"
    "glPointParameterivNV\0"
    "\0"
-   /* _mesa_function_pool[12598]: BlendFunc (offset 241) */
+   /* _mesa_function_pool[12655]: BlendFunc (offset 241) */
    "ii\0"
    "glBlendFunc\0"
    "\0"
-   /* _mesa_function_pool[12614]: Uniform2fvARB (will be remapped) */
+   /* _mesa_function_pool[12671]: Uniform2fvARB (will be remapped) */
    "iip\0"
    "glUniform2fv\0"
    "glUniform2fvARB\0"
    "\0"
-   /* _mesa_function_pool[12648]: BufferParameteriAPPLE (will be remapped) */
+   /* _mesa_function_pool[12705]: BufferParameteriAPPLE (will be remapped) */
    "iii\0"
    "glBufferParameteriAPPLE\0"
    "\0"
-   /* _mesa_function_pool[12677]: MultiTexCoord3dvARB (offset 393) */
+   /* _mesa_function_pool[12734]: MultiTexCoord3dvARB (offset 393) */
    "ip\0"
    "glMultiTexCoord3dv\0"
    "glMultiTexCoord3dvARB\0"
    "\0"
-   /* _mesa_function_pool[12722]: ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[12779]: ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (dynamic) */
    "pppp\0"
    "glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[12778]: DeleteObjectARB (will be remapped) */
+   /* _mesa_function_pool[12835]: DeleteObjectARB (will be remapped) */
    "i\0"
    "glDeleteObjectARB\0"
    "\0"
-   /* _mesa_function_pool[12799]: MatrixIndexPointerARB (dynamic) */
+   /* _mesa_function_pool[12856]: MatrixIndexPointerARB (dynamic) */
    "iiip\0"
    "glMatrixIndexPointerARB\0"
    "\0"
-   /* _mesa_function_pool[12829]: ProgramNamedParameter4dvNV (will be remapped) */
+   /* _mesa_function_pool[12886]: ProgramNamedParameter4dvNV (will be remapped) */
    "iipp\0"
    "glProgramNamedParameter4dvNV\0"
    "\0"
-   /* _mesa_function_pool[12864]: Tangent3fvEXT (dynamic) */
+   /* _mesa_function_pool[12921]: Tangent3fvEXT (dynamic) */
    "p\0"
    "glTangent3fvEXT\0"
    "\0"
-   /* _mesa_function_pool[12883]: Flush (offset 217) */
+   /* _mesa_function_pool[12940]: Flush (offset 217) */
    "\0"
    "glFlush\0"
    "\0"
-   /* _mesa_function_pool[12893]: Color4uiv (offset 38) */
+   /* _mesa_function_pool[12950]: Color4uiv (offset 38) */
    "p\0"
    "glColor4uiv\0"
    "\0"
-   /* _mesa_function_pool[12908]: GenVertexArrays (will be remapped) */
+   /* _mesa_function_pool[12965]: GenVertexArrays (will be remapped) */
    "ip\0"
    "glGenVertexArrays\0"
    "\0"
-   /* _mesa_function_pool[12930]: RasterPos3sv (offset 77) */
+   /* _mesa_function_pool[12987]: RasterPos3sv (offset 77) */
    "p\0"
    "glRasterPos3sv\0"
    "\0"
-   /* _mesa_function_pool[12948]: BindFramebufferEXT (will be remapped) */
+   /* _mesa_function_pool[13005]: BindFramebufferEXT (will be remapped) */
    "ii\0"
    "glBindFramebuffer\0"
    "glBindFramebufferEXT\0"
    "\0"
-   /* _mesa_function_pool[12991]: ReferencePlaneSGIX (dynamic) */
+   /* _mesa_function_pool[13048]: ReferencePlaneSGIX (dynamic) */
    "p\0"
    "glReferencePlaneSGIX\0"
    "\0"
-   /* _mesa_function_pool[13015]: PushAttrib (offset 219) */
+   /* _mesa_function_pool[13072]: PushAttrib (offset 219) */
    "i\0"
    "glPushAttrib\0"
    "\0"
-   /* _mesa_function_pool[13031]: RasterPos2i (offset 66) */
+   /* _mesa_function_pool[13088]: RasterPos2i (offset 66) */
    "ii\0"
    "glRasterPos2i\0"
    "\0"
-   /* _mesa_function_pool[13049]: ValidateProgramARB (will be remapped) */
+   /* _mesa_function_pool[13106]: ValidateProgramARB (will be remapped) */
    "i\0"
    "glValidateProgram\0"
    "glValidateProgramARB\0"
    "\0"
-   /* _mesa_function_pool[13091]: TexParameteriv (offset 181) */
+   /* _mesa_function_pool[13148]: TexParameteriv (offset 181) */
    "iip\0"
    "glTexParameteriv\0"
    "\0"
-   /* _mesa_function_pool[13113]: UnlockArraysEXT (will be remapped) */
+   /* _mesa_function_pool[13170]: UnlockArraysEXT (will be remapped) */
    "\0"
    "glUnlockArraysEXT\0"
    "\0"
-   /* _mesa_function_pool[13133]: TexCoord2fColor3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[13190]: TexCoord2fColor3fVertex3fSUN (dynamic) */
    "ffffffff\0"
    "glTexCoord2fColor3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[13174]: WindowPos3fvMESA (will be remapped) */
+   /* _mesa_function_pool[13231]: WindowPos3fvMESA (will be remapped) */
    "p\0"
    "glWindowPos3fv\0"
    "glWindowPos3fvARB\0"
    "glWindowPos3fvMESA\0"
    "\0"
-   /* _mesa_function_pool[13229]: RasterPos2f (offset 64) */
+   /* _mesa_function_pool[13286]: RasterPos2f (offset 64) */
    "ff\0"
    "glRasterPos2f\0"
    "\0"
-   /* _mesa_function_pool[13247]: VertexAttrib1svNV (will be remapped) */
+   /* _mesa_function_pool[13304]: VertexAttrib1svNV (will be remapped) */
    "ip\0"
    "glVertexAttrib1svNV\0"
    "\0"
-   /* _mesa_function_pool[13271]: RasterPos2d (offset 62) */
+   /* _mesa_function_pool[13328]: RasterPos2d (offset 62) */
    "dd\0"
    "glRasterPos2d\0"
    "\0"
-   /* _mesa_function_pool[13289]: RasterPos3fv (offset 73) */
+   /* _mesa_function_pool[13346]: RasterPos3fv (offset 73) */
    "p\0"
    "glRasterPos3fv\0"
    "\0"
-   /* _mesa_function_pool[13307]: CopyTexSubImage3D (offset 373) */
+   /* _mesa_function_pool[13364]: CopyTexSubImage3D (offset 373) */
    "iiiiiiiii\0"
    "glCopyTexSubImage3D\0"
    "glCopyTexSubImage3DEXT\0"
    "\0"
-   /* _mesa_function_pool[13361]: VertexAttrib2dARB (will be remapped) */
+   /* _mesa_function_pool[13418]: VertexAttrib2dARB (will be remapped) */
    "idd\0"
    "glVertexAttrib2d\0"
    "glVertexAttrib2dARB\0"
    "\0"
-   /* _mesa_function_pool[13403]: Color4ub (offset 35) */
+   /* _mesa_function_pool[13460]: Color4ub (offset 35) */
    "iiii\0"
    "glColor4ub\0"
    "\0"
-   /* _mesa_function_pool[13420]: GetInteger64v (will be remapped) */
+   /* _mesa_function_pool[13477]: GetInteger64v (will be remapped) */
    "ip\0"
    "glGetInteger64v\0"
    "\0"
-   /* _mesa_function_pool[13440]: TextureColorMaskSGIS (dynamic) */
+   /* _mesa_function_pool[13497]: TextureColorMaskSGIS (dynamic) */
    "iiii\0"
    "glTextureColorMaskSGIS\0"
    "\0"
-   /* _mesa_function_pool[13469]: RasterPos2s (offset 68) */
+   /* _mesa_function_pool[13526]: RasterPos2s (offset 68) */
    "ii\0"
    "glRasterPos2s\0"
    "\0"
-   /* _mesa_function_pool[13487]: GetColorTable (offset 343) */
+   /* _mesa_function_pool[13544]: GetColorTable (offset 343) */
    "iiip\0"
    "glGetColorTable\0"
    "glGetColorTableSGI\0"
    "glGetColorTableEXT\0"
    "\0"
-   /* _mesa_function_pool[13547]: SelectBuffer (offset 195) */
+   /* _mesa_function_pool[13604]: SelectBuffer (offset 195) */
    "ip\0"
    "glSelectBuffer\0"
    "\0"
-   /* _mesa_function_pool[13566]: Indexiv (offset 49) */
+   /* _mesa_function_pool[13623]: Indexiv (offset 49) */
    "p\0"
    "glIndexiv\0"
    "\0"
-   /* _mesa_function_pool[13579]: TexCoord3i (offset 114) */
+   /* _mesa_function_pool[13636]: TexCoord3i (offset 114) */
    "iii\0"
    "glTexCoord3i\0"
    "\0"
-   /* _mesa_function_pool[13597]: CopyColorTable (offset 342) */
+   /* _mesa_function_pool[13654]: CopyColorTable (offset 342) */
    "iiiii\0"
    "glCopyColorTable\0"
    "glCopyColorTableSGI\0"
    "\0"
-   /* _mesa_function_pool[13641]: GetHistogramParameterfv (offset 362) */
+   /* _mesa_function_pool[13698]: GetHistogramParameterfv (offset 362) */
    "iip\0"
    "glGetHistogramParameterfv\0"
    "glGetHistogramParameterfvEXT\0"
    "\0"
-   /* _mesa_function_pool[13701]: Frustum (offset 289) */
+   /* _mesa_function_pool[13758]: Frustum (offset 289) */
    "dddddd\0"
    "glFrustum\0"
    "\0"
-   /* _mesa_function_pool[13719]: GetString (offset 275) */
+   /* _mesa_function_pool[13776]: GetString (offset 275) */
    "i\0"
    "glGetString\0"
    "\0"
-   /* _mesa_function_pool[13734]: ColorPointervINTEL (dynamic) */
+   /* _mesa_function_pool[13791]: ColorPointervINTEL (dynamic) */
    "iip\0"
    "glColorPointervINTEL\0"
    "\0"
-   /* _mesa_function_pool[13760]: TexEnvf (offset 184) */
+   /* _mesa_function_pool[13817]: TexEnvf (offset 184) */
    "iif\0"
    "glTexEnvf\0"
    "\0"
-   /* _mesa_function_pool[13775]: TexCoord3d (offset 110) */
+   /* _mesa_function_pool[13832]: TexCoord3d (offset 110) */
    "ddd\0"
    "glTexCoord3d\0"
    "\0"
-   /* _mesa_function_pool[13793]: AlphaFragmentOp1ATI (will be remapped) */
+   /* _mesa_function_pool[13850]: AlphaFragmentOp1ATI (will be remapped) */
    "iiiiii\0"
    "glAlphaFragmentOp1ATI\0"
    "\0"
-   /* _mesa_function_pool[13823]: TexCoord3f (offset 112) */
+   /* _mesa_function_pool[13880]: TexCoord3f (offset 112) */
    "fff\0"
    "glTexCoord3f\0"
    "\0"
-   /* _mesa_function_pool[13841]: MultiTexCoord3ivARB (offset 397) */
+   /* _mesa_function_pool[13898]: MultiTexCoord3ivARB (offset 397) */
    "ip\0"
    "glMultiTexCoord3iv\0"
    "glMultiTexCoord3ivARB\0"
    "\0"
-   /* _mesa_function_pool[13886]: MultiTexCoord2sARB (offset 390) */
+   /* _mesa_function_pool[13943]: MultiTexCoord2sARB (offset 390) */
    "iii\0"
    "glMultiTexCoord2s\0"
    "glMultiTexCoord2sARB\0"
    "\0"
-   /* _mesa_function_pool[13930]: VertexAttrib1dvARB (will be remapped) */
+   /* _mesa_function_pool[13987]: VertexAttrib1dvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib1dv\0"
    "glVertexAttrib1dvARB\0"
    "\0"
-   /* _mesa_function_pool[13973]: DeleteTextures (offset 327) */
+   /* _mesa_function_pool[14030]: DeleteTextures (offset 327) */
    "ip\0"
    "glDeleteTextures\0"
    "glDeleteTexturesEXT\0"
    "\0"
-   /* _mesa_function_pool[14014]: TexCoordPointerEXT (will be remapped) */
+   /* _mesa_function_pool[14071]: TexCoordPointerEXT (will be remapped) */
    "iiiip\0"
    "glTexCoordPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[14042]: TexSubImage4DSGIS (dynamic) */
+   /* _mesa_function_pool[14099]: TexSubImage4DSGIS (dynamic) */
    "iiiiiiiiiiiip\0"
    "glTexSubImage4DSGIS\0"
    "\0"
-   /* _mesa_function_pool[14077]: TexCoord3s (offset 116) */
+   /* _mesa_function_pool[14134]: TexCoord3s (offset 116) */
    "iii\0"
    "glTexCoord3s\0"
    "\0"
-   /* _mesa_function_pool[14095]: GetTexLevelParameteriv (offset 285) */
+   /* _mesa_function_pool[14152]: GetTexLevelParameteriv (offset 285) */
    "iiip\0"
    "glGetTexLevelParameteriv\0"
    "\0"
-   /* _mesa_function_pool[14126]: CombinerStageParameterfvNV (dynamic) */
+   /* _mesa_function_pool[14183]: CombinerStageParameterfvNV (dynamic) */
    "iip\0"
    "glCombinerStageParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[14160]: StopInstrumentsSGIX (dynamic) */
+   /* _mesa_function_pool[14217]: StopInstrumentsSGIX (dynamic) */
    "i\0"
    "glStopInstrumentsSGIX\0"
    "\0"
-   /* _mesa_function_pool[14185]: TexCoord4fColor4fNormal3fVertex4fSUN (dynamic) */
+   /* _mesa_function_pool[14242]: TexCoord4fColor4fNormal3fVertex4fSUN (dynamic) */
    "fffffffffffffff\0"
    "glTexCoord4fColor4fNormal3fVertex4fSUN\0"
    "\0"
-   /* _mesa_function_pool[14241]: ClearAccum (offset 204) */
+   /* _mesa_function_pool[14298]: ClearAccum (offset 204) */
    "ffff\0"
    "glClearAccum\0"
    "\0"
-   /* _mesa_function_pool[14260]: DeformSGIX (dynamic) */
+   /* _mesa_function_pool[14317]: DeformSGIX (dynamic) */
    "i\0"
    "glDeformSGIX\0"
    "\0"
-   /* _mesa_function_pool[14276]: GetVertexAttribfvARB (will be remapped) */
+   /* _mesa_function_pool[14333]: GetVertexAttribfvARB (will be remapped) */
    "iip\0"
    "glGetVertexAttribfv\0"
    "glGetVertexAttribfvARB\0"
    "\0"
-   /* _mesa_function_pool[14324]: SecondaryColor3ivEXT (will be remapped) */
+   /* _mesa_function_pool[14381]: SecondaryColor3ivEXT (will be remapped) */
    "p\0"
    "glSecondaryColor3iv\0"
    "glSecondaryColor3ivEXT\0"
    "\0"
-   /* _mesa_function_pool[14370]: TexCoord4iv (offset 123) */
+   /* _mesa_function_pool[14427]: TexCoord4iv (offset 123) */
    "p\0"
    "glTexCoord4iv\0"
    "\0"
-   /* _mesa_function_pool[14387]: UniformMatrix4x2fv (will be remapped) */
+   /* _mesa_function_pool[14444]: UniformMatrix4x2fv (will be remapped) */
    "iiip\0"
    "glUniformMatrix4x2fv\0"
    "\0"
-   /* _mesa_function_pool[14414]: GetDetailTexFuncSGIS (dynamic) */
+   /* _mesa_function_pool[14471]: GetDetailTexFuncSGIS (dynamic) */
    "ip\0"
    "glGetDetailTexFuncSGIS\0"
    "\0"
-   /* _mesa_function_pool[14441]: GetCombinerStageParameterfvNV (dynamic) */
+   /* _mesa_function_pool[14498]: GetCombinerStageParameterfvNV (dynamic) */
    "iip\0"
    "glGetCombinerStageParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[14478]: PolygonOffset (offset 319) */
+   /* _mesa_function_pool[14535]: PolygonOffset (offset 319) */
    "ff\0"
    "glPolygonOffset\0"
    "\0"
-   /* _mesa_function_pool[14498]: BindVertexArray (will be remapped) */
+   /* _mesa_function_pool[14555]: BindVertexArray (will be remapped) */
    "i\0"
    "glBindVertexArray\0"
    "\0"
-   /* _mesa_function_pool[14519]: Color4ubVertex2fvSUN (dynamic) */
+   /* _mesa_function_pool[14576]: Color4ubVertex2fvSUN (dynamic) */
    "pp\0"
    "glColor4ubVertex2fvSUN\0"
    "\0"
-   /* _mesa_function_pool[14546]: Rectd (offset 86) */
+   /* _mesa_function_pool[14603]: Rectd (offset 86) */
    "dddd\0"
    "glRectd\0"
    "\0"
-   /* _mesa_function_pool[14560]: TexFilterFuncSGIS (dynamic) */
+   /* _mesa_function_pool[14617]: TexFilterFuncSGIS (dynamic) */
    "iiip\0"
    "glTexFilterFuncSGIS\0"
    "\0"
-   /* _mesa_function_pool[14586]: SampleMaskSGIS (will be remapped) */
+   /* _mesa_function_pool[14643]: SampleMaskSGIS (will be remapped) */
    "fi\0"
    "glSampleMaskSGIS\0"
    "glSampleMaskEXT\0"
    "\0"
-   /* _mesa_function_pool[14623]: GetAttribLocationARB (will be remapped) */
+   /* _mesa_function_pool[14680]: GetAttribLocationARB (will be remapped) */
    "ip\0"
    "glGetAttribLocation\0"
    "glGetAttribLocationARB\0"
    "\0"
-   /* _mesa_function_pool[14670]: RasterPos3i (offset 74) */
+   /* _mesa_function_pool[14727]: RasterPos3i (offset 74) */
    "iii\0"
    "glRasterPos3i\0"
    "\0"
-   /* _mesa_function_pool[14689]: VertexAttrib4ubvARB (will be remapped) */
+   /* _mesa_function_pool[14746]: VertexAttrib4ubvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4ubv\0"
    "glVertexAttrib4ubvARB\0"
    "\0"
-   /* _mesa_function_pool[14734]: DetailTexFuncSGIS (dynamic) */
+   /* _mesa_function_pool[14791]: DetailTexFuncSGIS (dynamic) */
    "iip\0"
    "glDetailTexFuncSGIS\0"
    "\0"
-   /* _mesa_function_pool[14759]: Normal3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[14816]: Normal3fVertex3fSUN (dynamic) */
    "ffffff\0"
    "glNormal3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[14789]: CopyTexImage2D (offset 324) */
+   /* _mesa_function_pool[14846]: CopyTexImage2D (offset 324) */
    "iiiiiiii\0"
    "glCopyTexImage2D\0"
    "glCopyTexImage2DEXT\0"
    "\0"
-   /* _mesa_function_pool[14836]: GetBufferPointervARB (will be remapped) */
+   /* _mesa_function_pool[14893]: GetBufferPointervARB (will be remapped) */
    "iip\0"
    "glGetBufferPointerv\0"
    "glGetBufferPointervARB\0"
    "\0"
-   /* _mesa_function_pool[14884]: ProgramEnvParameter4fARB (will be remapped) */
+   /* _mesa_function_pool[14941]: ProgramEnvParameter4fARB (will be remapped) */
    "iiffff\0"
    "glProgramEnvParameter4fARB\0"
    "glProgramParameter4fNV\0"
    "\0"
-   /* _mesa_function_pool[14942]: Uniform3ivARB (will be remapped) */
+   /* _mesa_function_pool[14999]: Uniform3ivARB (will be remapped) */
    "iip\0"
    "glUniform3iv\0"
    "glUniform3ivARB\0"
    "\0"
-   /* _mesa_function_pool[14976]: Lightfv (offset 160) */
+   /* _mesa_function_pool[15033]: Lightfv (offset 160) */
    "iip\0"
    "glLightfv\0"
    "\0"
-   /* _mesa_function_pool[14991]: ClearDepth (offset 208) */
+   /* _mesa_function_pool[15048]: ClearDepth (offset 208) */
    "d\0"
    "glClearDepth\0"
    "\0"
-   /* _mesa_function_pool[15007]: GetFenceivNV (will be remapped) */
+   /* _mesa_function_pool[15064]: GetFenceivNV (will be remapped) */
    "iip\0"
    "glGetFenceivNV\0"
    "\0"
-   /* _mesa_function_pool[15027]: WindowPos4dvMESA (will be remapped) */
+   /* _mesa_function_pool[15084]: WindowPos4dvMESA (will be remapped) */
    "p\0"
    "glWindowPos4dvMESA\0"
    "\0"
-   /* _mesa_function_pool[15049]: ColorSubTable (offset 346) */
+   /* _mesa_function_pool[15106]: ColorSubTable (offset 346) */
    "iiiiip\0"
    "glColorSubTable\0"
    "glColorSubTableEXT\0"
    "\0"
-   /* _mesa_function_pool[15092]: Color4fv (offset 30) */
+   /* _mesa_function_pool[15149]: Color4fv (offset 30) */
    "p\0"
    "glColor4fv\0"
    "\0"
-   /* _mesa_function_pool[15106]: MultiTexCoord4ivARB (offset 405) */
+   /* _mesa_function_pool[15163]: MultiTexCoord4ivARB (offset 405) */
    "ip\0"
    "glMultiTexCoord4iv\0"
    "glMultiTexCoord4ivARB\0"
    "\0"
-   /* _mesa_function_pool[15151]: ProgramLocalParameters4fvEXT (will be remapped) */
+   /* _mesa_function_pool[15208]: ProgramLocalParameters4fvEXT (will be remapped) */
    "iiip\0"
    "glProgramLocalParameters4fvEXT\0"
    "\0"
-   /* _mesa_function_pool[15188]: ColorPointer (offset 308) */
+   /* _mesa_function_pool[15245]: ColorPointer (offset 308) */
    "iiip\0"
    "glColorPointer\0"
    "\0"
-   /* _mesa_function_pool[15209]: Rects (offset 92) */
+   /* _mesa_function_pool[15266]: Rects (offset 92) */
    "iiii\0"
    "glRects\0"
    "\0"
-   /* _mesa_function_pool[15223]: GetMapAttribParameterfvNV (dynamic) */
+   /* _mesa_function_pool[15280]: GetMapAttribParameterfvNV (dynamic) */
    "iiip\0"
    "glGetMapAttribParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[15257]: Lightiv (offset 162) */
+   /* _mesa_function_pool[15314]: Lightiv (offset 162) */
    "iip\0"
    "glLightiv\0"
    "\0"
-   /* _mesa_function_pool[15272]: VertexAttrib4sARB (will be remapped) */
+   /* _mesa_function_pool[15329]: VertexAttrib4sARB (will be remapped) */
    "iiiii\0"
    "glVertexAttrib4s\0"
    "glVertexAttrib4sARB\0"
    "\0"
-   /* _mesa_function_pool[15316]: GetQueryObjectuivARB (will be remapped) */
+   /* _mesa_function_pool[15373]: GetQueryObjectuivARB (will be remapped) */
    "iip\0"
    "glGetQueryObjectuiv\0"
    "glGetQueryObjectuivARB\0"
    "\0"
-   /* _mesa_function_pool[15364]: GetTexParameteriv (offset 283) */
+   /* _mesa_function_pool[15421]: GetTexParameteriv (offset 283) */
    "iip\0"
    "glGetTexParameteriv\0"
    "\0"
-   /* _mesa_function_pool[15389]: MapParameterivNV (dynamic) */
+   /* _mesa_function_pool[15446]: MapParameterivNV (dynamic) */
    "iip\0"
    "glMapParameterivNV\0"
    "\0"
-   /* _mesa_function_pool[15413]: GenRenderbuffersEXT (will be remapped) */
+   /* _mesa_function_pool[15470]: GenRenderbuffersEXT (will be remapped) */
    "ip\0"
    "glGenRenderbuffers\0"
    "glGenRenderbuffersEXT\0"
    "\0"
-   /* _mesa_function_pool[15458]: VertexAttrib2dvARB (will be remapped) */
+   /* _mesa_function_pool[15515]: VertexAttrib2dvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib2dv\0"
    "glVertexAttrib2dvARB\0"
    "\0"
-   /* _mesa_function_pool[15501]: EdgeFlagPointerEXT (will be remapped) */
+   /* _mesa_function_pool[15558]: EdgeFlagPointerEXT (will be remapped) */
    "iip\0"
    "glEdgeFlagPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[15527]: VertexAttribs2svNV (will be remapped) */
+   /* _mesa_function_pool[15584]: VertexAttribs2svNV (will be remapped) */
    "iip\0"
    "glVertexAttribs2svNV\0"
    "\0"
-   /* _mesa_function_pool[15553]: WeightbvARB (dynamic) */
+   /* _mesa_function_pool[15610]: WeightbvARB (dynamic) */
    "ip\0"
    "glWeightbvARB\0"
    "\0"
-   /* _mesa_function_pool[15571]: VertexAttrib2fvARB (will be remapped) */
+   /* _mesa_function_pool[15628]: VertexAttrib2fvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib2fv\0"
    "glVertexAttrib2fvARB\0"
    "\0"
-   /* _mesa_function_pool[15614]: GetBufferParameterivARB (will be remapped) */
+   /* _mesa_function_pool[15671]: GetBufferParameterivARB (will be remapped) */
    "iip\0"
    "glGetBufferParameteriv\0"
    "glGetBufferParameterivARB\0"
    "\0"
-   /* _mesa_function_pool[15668]: Rectdv (offset 87) */
+   /* _mesa_function_pool[15725]: Rectdv (offset 87) */
    "pp\0"
    "glRectdv\0"
    "\0"
-   /* _mesa_function_pool[15681]: ListParameteriSGIX (dynamic) */
+   /* _mesa_function_pool[15738]: ListParameteriSGIX (dynamic) */
    "iii\0"
    "glListParameteriSGIX\0"
    "\0"
-   /* _mesa_function_pool[15707]: ReplacementCodeuiColor4fNormal3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[15764]: ReplacementCodeuiColor4fNormal3fVertex3fSUN (dynamic) */
    "iffffffffff\0"
    "glReplacementCodeuiColor4fNormal3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[15766]: InstrumentsBufferSGIX (dynamic) */
+   /* _mesa_function_pool[15823]: InstrumentsBufferSGIX (dynamic) */
    "ip\0"
    "glInstrumentsBufferSGIX\0"
    "\0"
-   /* _mesa_function_pool[15794]: VertexAttrib4NivARB (will be remapped) */
+   /* _mesa_function_pool[15851]: VertexAttrib4NivARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4Niv\0"
    "glVertexAttrib4NivARB\0"
    "\0"
-   /* _mesa_function_pool[15839]: GetAttachedShaders (will be remapped) */
+   /* _mesa_function_pool[15896]: GetAttachedShaders (will be remapped) */
    "iipp\0"
    "glGetAttachedShaders\0"
    "\0"
-   /* _mesa_function_pool[15866]: GenVertexArraysAPPLE (will be remapped) */
+   /* _mesa_function_pool[15923]: GenVertexArraysAPPLE (will be remapped) */
    "ip\0"
    "glGenVertexArraysAPPLE\0"
    "\0"
-   /* _mesa_function_pool[15893]: Materialiv (offset 172) */
+   /* _mesa_function_pool[15950]: Materialiv (offset 172) */
    "iip\0"
    "glMaterialiv\0"
    "\0"
-   /* _mesa_function_pool[15911]: PushClientAttrib (offset 335) */
+   /* _mesa_function_pool[15968]: PushClientAttrib (offset 335) */
    "i\0"
    "glPushClientAttrib\0"
    "\0"
-   /* _mesa_function_pool[15933]: ProgramEnvParameters4fvEXT (will be remapped) */
+   /* _mesa_function_pool[15990]: ProgramEnvParameters4fvEXT (will be remapped) */
    "iiip\0"
    "glProgramEnvParameters4fvEXT\0"
    "\0"
-   /* _mesa_function_pool[15968]: TexCoord2fColor4fNormal3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[16025]: TexCoord2fColor4fNormal3fVertex3fvSUN (dynamic) */
    "pppp\0"
    "glTexCoord2fColor4fNormal3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[16014]: WindowPos2iMESA (will be remapped) */
+   /* _mesa_function_pool[16071]: WindowPos2iMESA (will be remapped) */
    "ii\0"
    "glWindowPos2i\0"
    "glWindowPos2iARB\0"
    "glWindowPos2iMESA\0"
    "\0"
-   /* _mesa_function_pool[16067]: SecondaryColor3fvEXT (will be remapped) */
+   /* _mesa_function_pool[16124]: SecondaryColor3fvEXT (will be remapped) */
    "p\0"
    "glSecondaryColor3fv\0"
    "glSecondaryColor3fvEXT\0"
    "\0"
-   /* _mesa_function_pool[16113]: PolygonMode (offset 174) */
+   /* _mesa_function_pool[16170]: PolygonMode (offset 174) */
    "ii\0"
    "glPolygonMode\0"
    "\0"
-   /* _mesa_function_pool[16131]: CompressedTexSubImage1DARB (will be remapped) */
+   /* _mesa_function_pool[16188]: CompressedTexSubImage1DARB (will be remapped) */
    "iiiiiip\0"
    "glCompressedTexSubImage1D\0"
    "glCompressedTexSubImage1DARB\0"
    "\0"
-   /* _mesa_function_pool[16195]: GetVertexAttribivNV (will be remapped) */
+   /* _mesa_function_pool[16252]: GetVertexAttribivNV (will be remapped) */
    "iip\0"
    "glGetVertexAttribivNV\0"
    "\0"
-   /* _mesa_function_pool[16222]: GetProgramStringARB (will be remapped) */
+   /* _mesa_function_pool[16279]: GetProgramStringARB (will be remapped) */
    "iip\0"
    "glGetProgramStringARB\0"
    "\0"
-   /* _mesa_function_pool[16249]: TexBumpParameterfvATI (will be remapped) */
+   /* _mesa_function_pool[16306]: TexBumpParameterfvATI (will be remapped) */
    "ip\0"
    "glTexBumpParameterfvATI\0"
    "\0"
-   /* _mesa_function_pool[16277]: CompileShaderARB (will be remapped) */
+   /* _mesa_function_pool[16334]: CompileShaderARB (will be remapped) */
    "i\0"
    "glCompileShader\0"
    "glCompileShaderARB\0"
    "\0"
-   /* _mesa_function_pool[16315]: DeleteShader (will be remapped) */
+   /* _mesa_function_pool[16372]: DeleteShader (will be remapped) */
    "i\0"
    "glDeleteShader\0"
    "\0"
-   /* _mesa_function_pool[16333]: DisableClientState (offset 309) */
+   /* _mesa_function_pool[16390]: DisableClientState (offset 309) */
    "i\0"
    "glDisableClientState\0"
    "\0"
-   /* _mesa_function_pool[16357]: TexGeni (offset 192) */
+   /* _mesa_function_pool[16414]: TexGeni (offset 192) */
    "iii\0"
    "glTexGeni\0"
    "\0"
-   /* _mesa_function_pool[16372]: TexGenf (offset 190) */
+   /* _mesa_function_pool[16429]: TexGenf (offset 190) */
    "iif\0"
    "glTexGenf\0"
    "\0"
-   /* _mesa_function_pool[16387]: Uniform3fARB (will be remapped) */
+   /* _mesa_function_pool[16444]: Uniform3fARB (will be remapped) */
    "ifff\0"
    "glUniform3f\0"
    "glUniform3fARB\0"
    "\0"
-   /* _mesa_function_pool[16420]: TexGend (offset 188) */
+   /* _mesa_function_pool[16477]: TexGend (offset 188) */
    "iid\0"
    "glTexGend\0"
    "\0"
-   /* _mesa_function_pool[16435]: ListParameterfvSGIX (dynamic) */
+   /* _mesa_function_pool[16492]: ListParameterfvSGIX (dynamic) */
    "iip\0"
    "glListParameterfvSGIX\0"
    "\0"
-   /* _mesa_function_pool[16462]: GetPolygonStipple (offset 274) */
+   /* _mesa_function_pool[16519]: GetPolygonStipple (offset 274) */
    "p\0"
    "glGetPolygonStipple\0"
    "\0"
-   /* _mesa_function_pool[16485]: Tangent3dvEXT (dynamic) */
+   /* _mesa_function_pool[16542]: Tangent3dvEXT (dynamic) */
    "p\0"
    "glTangent3dvEXT\0"
    "\0"
-   /* _mesa_function_pool[16504]: GetVertexAttribfvNV (will be remapped) */
+   /* _mesa_function_pool[16561]: GetVertexAttribfvNV (will be remapped) */
    "iip\0"
    "glGetVertexAttribfvNV\0"
    "\0"
-   /* _mesa_function_pool[16531]: WindowPos3sMESA (will be remapped) */
+   /* _mesa_function_pool[16588]: WindowPos3sMESA (will be remapped) */
    "iii\0"
    "glWindowPos3s\0"
    "glWindowPos3sARB\0"
    "glWindowPos3sMESA\0"
    "\0"
-   /* _mesa_function_pool[16585]: VertexAttrib2svNV (will be remapped) */
+   /* _mesa_function_pool[16642]: VertexAttrib2svNV (will be remapped) */
    "ip\0"
    "glVertexAttrib2svNV\0"
    "\0"
-   /* _mesa_function_pool[16609]: VertexAttribs1fvNV (will be remapped) */
+   /* _mesa_function_pool[16666]: VertexAttribs1fvNV (will be remapped) */
    "iip\0"
    "glVertexAttribs1fvNV\0"
    "\0"
-   /* _mesa_function_pool[16635]: TexCoord2fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[16692]: TexCoord2fVertex3fvSUN (dynamic) */
    "pp\0"
    "glTexCoord2fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[16664]: WindowPos4sMESA (will be remapped) */
+   /* _mesa_function_pool[16721]: WindowPos4sMESA (will be remapped) */
    "iiii\0"
    "glWindowPos4sMESA\0"
    "\0"
-   /* _mesa_function_pool[16688]: VertexAttrib4NuivARB (will be remapped) */
+   /* _mesa_function_pool[16745]: VertexAttrib4NuivARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4Nuiv\0"
    "glVertexAttrib4NuivARB\0"
    "\0"
-   /* _mesa_function_pool[16735]: ClientActiveTextureARB (offset 375) */
+   /* _mesa_function_pool[16792]: ClientActiveTextureARB (offset 375) */
    "i\0"
    "glClientActiveTexture\0"
    "glClientActiveTextureARB\0"
    "\0"
-   /* _mesa_function_pool[16785]: PixelTexGenSGIX (will be remapped) */
+   /* _mesa_function_pool[16842]: PixelTexGenSGIX (will be remapped) */
    "i\0"
    "glPixelTexGenSGIX\0"
    "\0"
-   /* _mesa_function_pool[16806]: ReplacementCodeusvSUN (dynamic) */
+   /* _mesa_function_pool[16863]: ReplacementCodeusvSUN (dynamic) */
    "p\0"
    "glReplacementCodeusvSUN\0"
    "\0"
-   /* _mesa_function_pool[16833]: Uniform4fARB (will be remapped) */
+   /* _mesa_function_pool[16890]: Uniform4fARB (will be remapped) */
    "iffff\0"
    "glUniform4f\0"
    "glUniform4fARB\0"
    "\0"
-   /* _mesa_function_pool[16867]: Color4sv (offset 34) */
+   /* _mesa_function_pool[16924]: Color4sv (offset 34) */
    "p\0"
    "glColor4sv\0"
    "\0"
-   /* _mesa_function_pool[16881]: FlushMappedBufferRange (will be remapped) */
+   /* _mesa_function_pool[16938]: FlushMappedBufferRange (will be remapped) */
    "iii\0"
    "glFlushMappedBufferRange\0"
    "\0"
-   /* _mesa_function_pool[16911]: IsProgramNV (will be remapped) */
+   /* _mesa_function_pool[16968]: IsProgramNV (will be remapped) */
    "i\0"
    "glIsProgramARB\0"
    "glIsProgramNV\0"
    "\0"
-   /* _mesa_function_pool[16943]: FlushMappedBufferRangeAPPLE (will be remapped) */
+   /* _mesa_function_pool[17000]: FlushMappedBufferRangeAPPLE (will be remapped) */
    "iii\0"
    "glFlushMappedBufferRangeAPPLE\0"
    "\0"
-   /* _mesa_function_pool[16978]: PixelZoom (offset 246) */
+   /* _mesa_function_pool[17035]: PixelZoom (offset 246) */
    "ff\0"
    "glPixelZoom\0"
    "\0"
-   /* _mesa_function_pool[16994]: ReplacementCodePointerSUN (dynamic) */
+   /* _mesa_function_pool[17051]: ReplacementCodePointerSUN (dynamic) */
    "iip\0"
    "glReplacementCodePointerSUN\0"
    "\0"
-   /* _mesa_function_pool[17027]: ProgramEnvParameter4dARB (will be remapped) */
+   /* _mesa_function_pool[17084]: ProgramEnvParameter4dARB (will be remapped) */
    "iidddd\0"
    "glProgramEnvParameter4dARB\0"
    "glProgramParameter4dNV\0"
    "\0"
-   /* _mesa_function_pool[17085]: ColorTableParameterfv (offset 340) */
+   /* _mesa_function_pool[17142]: ColorTableParameterfv (offset 340) */
    "iip\0"
    "glColorTableParameterfv\0"
    "glColorTableParameterfvSGI\0"
    "\0"
-   /* _mesa_function_pool[17141]: FragmentLightModelfSGIX (dynamic) */
+   /* _mesa_function_pool[17198]: FragmentLightModelfSGIX (dynamic) */
    "if\0"
    "glFragmentLightModelfSGIX\0"
    "\0"
-   /* _mesa_function_pool[17171]: Binormal3bvEXT (dynamic) */
+   /* _mesa_function_pool[17228]: Binormal3bvEXT (dynamic) */
    "p\0"
    "glBinormal3bvEXT\0"
    "\0"
-   /* _mesa_function_pool[17191]: PixelMapuiv (offset 252) */
+   /* _mesa_function_pool[17248]: PixelMapuiv (offset 252) */
    "iip\0"
    "glPixelMapuiv\0"
    "\0"
-   /* _mesa_function_pool[17210]: Color3dv (offset 12) */
+   /* _mesa_function_pool[17267]: Color3dv (offset 12) */
    "p\0"
    "glColor3dv\0"
    "\0"
-   /* _mesa_function_pool[17224]: IsTexture (offset 330) */
+   /* _mesa_function_pool[17281]: IsTexture (offset 330) */
    "i\0"
    "glIsTexture\0"
    "glIsTextureEXT\0"
    "\0"
-   /* _mesa_function_pool[17254]: VertexWeightfvEXT (dynamic) */
+   /* _mesa_function_pool[17311]: VertexWeightfvEXT (dynamic) */
    "p\0"
    "glVertexWeightfvEXT\0"
    "\0"
-   /* _mesa_function_pool[17277]: VertexAttrib1dARB (will be remapped) */
+   /* _mesa_function_pool[17334]: VertexAttrib1dARB (will be remapped) */
    "id\0"
    "glVertexAttrib1d\0"
    "glVertexAttrib1dARB\0"
    "\0"
-   /* _mesa_function_pool[17318]: ImageTransformParameterivHP (dynamic) */
+   /* _mesa_function_pool[17375]: ImageTransformParameterivHP (dynamic) */
    "iip\0"
    "glImageTransformParameterivHP\0"
    "\0"
-   /* _mesa_function_pool[17353]: TexCoord4i (offset 122) */
+   /* _mesa_function_pool[17410]: TexCoord4i (offset 122) */
    "iiii\0"
    "glTexCoord4i\0"
    "\0"
-   /* _mesa_function_pool[17372]: DeleteQueriesARB (will be remapped) */
+   /* _mesa_function_pool[17429]: DeleteQueriesARB (will be remapped) */
    "ip\0"
    "glDeleteQueries\0"
    "glDeleteQueriesARB\0"
    "\0"
-   /* _mesa_function_pool[17411]: Color4ubVertex2fSUN (dynamic) */
+   /* _mesa_function_pool[17468]: Color4ubVertex2fSUN (dynamic) */
    "iiiiff\0"
    "glColor4ubVertex2fSUN\0"
    "\0"
-   /* _mesa_function_pool[17441]: FragmentColorMaterialSGIX (dynamic) */
+   /* _mesa_function_pool[17498]: FragmentColorMaterialSGIX (dynamic) */
    "ii\0"
    "glFragmentColorMaterialSGIX\0"
    "\0"
-   /* _mesa_function_pool[17473]: CurrentPaletteMatrixARB (dynamic) */
+   /* _mesa_function_pool[17530]: CurrentPaletteMatrixARB (dynamic) */
    "i\0"
    "glCurrentPaletteMatrixARB\0"
    "\0"
-   /* _mesa_function_pool[17502]: GetMapdv (offset 266) */
+   /* _mesa_function_pool[17559]: GetMapdv (offset 266) */
    "iip\0"
    "glGetMapdv\0"
    "\0"
-   /* _mesa_function_pool[17518]: SamplePatternSGIS (will be remapped) */
+   /* _mesa_function_pool[17575]: ObjectPurgeableAPPLE (will be remapped) */
+   "iii\0"
+   "glObjectPurgeableAPPLE\0"
+   "\0"
+   /* _mesa_function_pool[17603]: SamplePatternSGIS (will be remapped) */
    "i\0"
    "glSamplePatternSGIS\0"
    "glSamplePatternEXT\0"
    "\0"
-   /* _mesa_function_pool[17560]: PixelStoref (offset 249) */
+   /* _mesa_function_pool[17645]: PixelStoref (offset 249) */
    "if\0"
    "glPixelStoref\0"
    "\0"
-   /* _mesa_function_pool[17578]: IsQueryARB (will be remapped) */
+   /* _mesa_function_pool[17663]: IsQueryARB (will be remapped) */
    "i\0"
    "glIsQuery\0"
    "glIsQueryARB\0"
    "\0"
-   /* _mesa_function_pool[17604]: ReplacementCodeuiColor4ubVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[17689]: ReplacementCodeuiColor4ubVertex3fSUN (dynamic) */
    "iiiiifff\0"
    "glReplacementCodeuiColor4ubVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[17653]: PixelStorei (offset 250) */
+   /* _mesa_function_pool[17738]: PixelStorei (offset 250) */
    "ii\0"
    "glPixelStorei\0"
    "\0"
-   /* _mesa_function_pool[17671]: VertexAttrib4usvARB (will be remapped) */
+   /* _mesa_function_pool[17756]: VertexAttrib4usvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4usv\0"
    "glVertexAttrib4usvARB\0"
    "\0"
-   /* _mesa_function_pool[17716]: LinkProgramARB (will be remapped) */
+   /* _mesa_function_pool[17801]: LinkProgramARB (will be remapped) */
    "i\0"
    "glLinkProgram\0"
    "glLinkProgramARB\0"
    "\0"
-   /* _mesa_function_pool[17750]: VertexAttrib2fNV (will be remapped) */
+   /* _mesa_function_pool[17835]: VertexAttrib2fNV (will be remapped) */
    "iff\0"
    "glVertexAttrib2fNV\0"
    "\0"
-   /* _mesa_function_pool[17774]: ShaderSourceARB (will be remapped) */
+   /* _mesa_function_pool[17859]: ShaderSourceARB (will be remapped) */
    "iipp\0"
    "glShaderSource\0"
    "glShaderSourceARB\0"
    "\0"
-   /* _mesa_function_pool[17813]: FragmentMaterialiSGIX (dynamic) */
+   /* _mesa_function_pool[17898]: FragmentMaterialiSGIX (dynamic) */
    "iii\0"
    "glFragmentMaterialiSGIX\0"
    "\0"
-   /* _mesa_function_pool[17842]: EvalCoord2dv (offset 233) */
+   /* _mesa_function_pool[17927]: EvalCoord2dv (offset 233) */
    "p\0"
    "glEvalCoord2dv\0"
    "\0"
-   /* _mesa_function_pool[17860]: VertexAttrib3svARB (will be remapped) */
+   /* _mesa_function_pool[17945]: VertexAttrib3svARB (will be remapped) */
    "ip\0"
    "glVertexAttrib3sv\0"
    "glVertexAttrib3svARB\0"
    "\0"
-   /* _mesa_function_pool[17903]: ColorMaterial (offset 151) */
+   /* _mesa_function_pool[17988]: ColorMaterial (offset 151) */
    "ii\0"
    "glColorMaterial\0"
    "\0"
-   /* _mesa_function_pool[17923]: CompressedTexSubImage3DARB (will be remapped) */
+   /* _mesa_function_pool[18008]: CompressedTexSubImage3DARB (will be remapped) */
    "iiiiiiiiiip\0"
    "glCompressedTexSubImage3D\0"
    "glCompressedTexSubImage3DARB\0"
    "\0"
-   /* _mesa_function_pool[17991]: WindowPos2ivMESA (will be remapped) */
+   /* _mesa_function_pool[18076]: WindowPos2ivMESA (will be remapped) */
    "p\0"
    "glWindowPos2iv\0"
    "glWindowPos2ivARB\0"
    "glWindowPos2ivMESA\0"
    "\0"
-   /* _mesa_function_pool[18046]: IsFramebufferEXT (will be remapped) */
+   /* _mesa_function_pool[18131]: IsFramebufferEXT (will be remapped) */
    "i\0"
    "glIsFramebuffer\0"
    "glIsFramebufferEXT\0"
    "\0"
-   /* _mesa_function_pool[18084]: Uniform4ivARB (will be remapped) */
+   /* _mesa_function_pool[18169]: Uniform4ivARB (will be remapped) */
    "iip\0"
    "glUniform4iv\0"
    "glUniform4ivARB\0"
    "\0"
-   /* _mesa_function_pool[18118]: GetVertexAttribdvARB (will be remapped) */
+   /* _mesa_function_pool[18203]: GetVertexAttribdvARB (will be remapped) */
    "iip\0"
    "glGetVertexAttribdv\0"
    "glGetVertexAttribdvARB\0"
    "\0"
-   /* _mesa_function_pool[18166]: TexBumpParameterivATI (will be remapped) */
+   /* _mesa_function_pool[18251]: TexBumpParameterivATI (will be remapped) */
    "ip\0"
    "glTexBumpParameterivATI\0"
    "\0"
-   /* _mesa_function_pool[18194]: GetSeparableFilter (offset 359) */
+   /* _mesa_function_pool[18279]: GetSeparableFilter (offset 359) */
    "iiippp\0"
    "glGetSeparableFilter\0"
    "glGetSeparableFilterEXT\0"
    "\0"
-   /* _mesa_function_pool[18247]: Binormal3dEXT (dynamic) */
+   /* _mesa_function_pool[18332]: Binormal3dEXT (dynamic) */
    "ddd\0"
    "glBinormal3dEXT\0"
    "\0"
-   /* _mesa_function_pool[18268]: SpriteParameteriSGIX (dynamic) */
+   /* _mesa_function_pool[18353]: SpriteParameteriSGIX (dynamic) */
    "ii\0"
    "glSpriteParameteriSGIX\0"
    "\0"
-   /* _mesa_function_pool[18295]: RequestResidentProgramsNV (will be remapped) */
+   /* _mesa_function_pool[18380]: RequestResidentProgramsNV (will be remapped) */
    "ip\0"
    "glRequestResidentProgramsNV\0"
    "\0"
-   /* _mesa_function_pool[18327]: TagSampleBufferSGIX (dynamic) */
+   /* _mesa_function_pool[18412]: TagSampleBufferSGIX (dynamic) */
    "\0"
    "glTagSampleBufferSGIX\0"
    "\0"
-   /* _mesa_function_pool[18351]: ReplacementCodeusSUN (dynamic) */
+   /* _mesa_function_pool[18436]: ReplacementCodeusSUN (dynamic) */
    "i\0"
    "glReplacementCodeusSUN\0"
    "\0"
-   /* _mesa_function_pool[18377]: FeedbackBuffer (offset 194) */
+   /* _mesa_function_pool[18462]: FeedbackBuffer (offset 194) */
    "iip\0"
    "glFeedbackBuffer\0"
    "\0"
-   /* _mesa_function_pool[18399]: RasterPos2iv (offset 67) */
+   /* _mesa_function_pool[18484]: RasterPos2iv (offset 67) */
    "p\0"
    "glRasterPos2iv\0"
    "\0"
-   /* _mesa_function_pool[18417]: TexImage1D (offset 182) */
+   /* _mesa_function_pool[18502]: TexImage1D (offset 182) */
    "iiiiiiip\0"
    "glTexImage1D\0"
    "\0"
-   /* _mesa_function_pool[18440]: ListParameterivSGIX (dynamic) */
+   /* _mesa_function_pool[18525]: ListParameterivSGIX (dynamic) */
    "iip\0"
    "glListParameterivSGIX\0"
    "\0"
-   /* _mesa_function_pool[18467]: MultiDrawElementsEXT (will be remapped) */
+   /* _mesa_function_pool[18552]: MultiDrawElementsEXT (will be remapped) */
    "ipipi\0"
    "glMultiDrawElements\0"
    "glMultiDrawElementsEXT\0"
    "\0"
-   /* _mesa_function_pool[18517]: Color3s (offset 17) */
+   /* _mesa_function_pool[18602]: Color3s (offset 17) */
    "iii\0"
    "glColor3s\0"
    "\0"
-   /* _mesa_function_pool[18532]: Uniform1ivARB (will be remapped) */
+   /* _mesa_function_pool[18617]: Uniform1ivARB (will be remapped) */
    "iip\0"
    "glUniform1iv\0"
    "glUniform1ivARB\0"
    "\0"
-   /* _mesa_function_pool[18566]: WindowPos2sMESA (will be remapped) */
+   /* _mesa_function_pool[18651]: WindowPos2sMESA (will be remapped) */
    "ii\0"
    "glWindowPos2s\0"
    "glWindowPos2sARB\0"
    "glWindowPos2sMESA\0"
    "\0"
-   /* _mesa_function_pool[18619]: WeightusvARB (dynamic) */
+   /* _mesa_function_pool[18704]: WeightusvARB (dynamic) */
    "ip\0"
    "glWeightusvARB\0"
    "\0"
-   /* _mesa_function_pool[18638]: TexCoordPointer (offset 320) */
+   /* _mesa_function_pool[18723]: TexCoordPointer (offset 320) */
    "iiip\0"
    "glTexCoordPointer\0"
    "\0"
-   /* _mesa_function_pool[18662]: FogCoordPointerEXT (will be remapped) */
+   /* _mesa_function_pool[18747]: FogCoordPointerEXT (will be remapped) */
    "iip\0"
    "glFogCoordPointer\0"
    "glFogCoordPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[18706]: IndexMaterialEXT (dynamic) */
+   /* _mesa_function_pool[18791]: IndexMaterialEXT (dynamic) */
    "ii\0"
    "glIndexMaterialEXT\0"
    "\0"
-   /* _mesa_function_pool[18729]: Color3i (offset 15) */
+   /* _mesa_function_pool[18814]: Color3i (offset 15) */
    "iii\0"
    "glColor3i\0"
    "\0"
-   /* _mesa_function_pool[18744]: FrontFace (offset 157) */
+   /* _mesa_function_pool[18829]: FrontFace (offset 157) */
    "i\0"
    "glFrontFace\0"
    "\0"
-   /* _mesa_function_pool[18759]: EvalCoord2d (offset 232) */
+   /* _mesa_function_pool[18844]: EvalCoord2d (offset 232) */
    "dd\0"
    "glEvalCoord2d\0"
    "\0"
-   /* _mesa_function_pool[18777]: SecondaryColor3ubvEXT (will be remapped) */
+   /* _mesa_function_pool[18862]: SecondaryColor3ubvEXT (will be remapped) */
    "p\0"
    "glSecondaryColor3ubv\0"
    "glSecondaryColor3ubvEXT\0"
    "\0"
-   /* _mesa_function_pool[18825]: EvalCoord2f (offset 234) */
+   /* _mesa_function_pool[18910]: EvalCoord2f (offset 234) */
    "ff\0"
    "glEvalCoord2f\0"
    "\0"
-   /* _mesa_function_pool[18843]: VertexAttrib4dvARB (will be remapped) */
+   /* _mesa_function_pool[18928]: VertexAttrib4dvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4dv\0"
    "glVertexAttrib4dvARB\0"
    "\0"
-   /* _mesa_function_pool[18886]: BindAttribLocationARB (will be remapped) */
+   /* _mesa_function_pool[18971]: BindAttribLocationARB (will be remapped) */
    "iip\0"
    "glBindAttribLocation\0"
    "glBindAttribLocationARB\0"
    "\0"
-   /* _mesa_function_pool[18936]: Color3b (offset 9) */
+   /* _mesa_function_pool[19021]: Color3b (offset 9) */
    "iii\0"
    "glColor3b\0"
    "\0"
-   /* _mesa_function_pool[18951]: MultiTexCoord2dARB (offset 384) */
+   /* _mesa_function_pool[19036]: MultiTexCoord2dARB (offset 384) */
    "idd\0"
    "glMultiTexCoord2d\0"
    "glMultiTexCoord2dARB\0"
    "\0"
-   /* _mesa_function_pool[18995]: ExecuteProgramNV (will be remapped) */
+   /* _mesa_function_pool[19080]: ExecuteProgramNV (will be remapped) */
    "iip\0"
    "glExecuteProgramNV\0"
    "\0"
-   /* _mesa_function_pool[19019]: Color3f (offset 13) */
+   /* _mesa_function_pool[19104]: Color3f (offset 13) */
    "fff\0"
    "glColor3f\0"
    "\0"
-   /* _mesa_function_pool[19034]: LightEnviSGIX (dynamic) */
+   /* _mesa_function_pool[19119]: LightEnviSGIX (dynamic) */
    "ii\0"
    "glLightEnviSGIX\0"
    "\0"
-   /* _mesa_function_pool[19054]: Color3d (offset 11) */
+   /* _mesa_function_pool[19139]: Color3d (offset 11) */
    "ddd\0"
    "glColor3d\0"
    "\0"
-   /* _mesa_function_pool[19069]: Normal3dv (offset 55) */
+   /* _mesa_function_pool[19154]: Normal3dv (offset 55) */
    "p\0"
    "glNormal3dv\0"
    "\0"
-   /* _mesa_function_pool[19084]: Lightf (offset 159) */
+   /* _mesa_function_pool[19169]: Lightf (offset 159) */
    "iif\0"
    "glLightf\0"
    "\0"
-   /* _mesa_function_pool[19098]: ReplacementCodeuiSUN (dynamic) */
+   /* _mesa_function_pool[19183]: ReplacementCodeuiSUN (dynamic) */
    "i\0"
    "glReplacementCodeuiSUN\0"
    "\0"
-   /* _mesa_function_pool[19124]: MatrixMode (offset 293) */
+   /* _mesa_function_pool[19209]: MatrixMode (offset 293) */
    "i\0"
    "glMatrixMode\0"
    "\0"
-   /* _mesa_function_pool[19140]: GetPixelMapusv (offset 273) */
+   /* _mesa_function_pool[19225]: GetPixelMapusv (offset 273) */
    "ip\0"
    "glGetPixelMapusv\0"
    "\0"
-   /* _mesa_function_pool[19161]: Lighti (offset 161) */
+   /* _mesa_function_pool[19246]: Lighti (offset 161) */
    "iii\0"
    "glLighti\0"
    "\0"
-   /* _mesa_function_pool[19175]: VertexAttribPointerNV (will be remapped) */
+   /* _mesa_function_pool[19260]: VertexAttribPointerNV (will be remapped) */
    "iiiip\0"
    "glVertexAttribPointerNV\0"
    "\0"
-   /* _mesa_function_pool[19206]: GetBooleanIndexedvEXT (will be remapped) */
+   /* _mesa_function_pool[19291]: GetBooleanIndexedvEXT (will be remapped) */
    "iip\0"
    "glGetBooleanIndexedvEXT\0"
    "\0"
-   /* _mesa_function_pool[19235]: GetFramebufferAttachmentParameterivEXT (will be remapped) */
+   /* _mesa_function_pool[19320]: GetFramebufferAttachmentParameterivEXT (will be remapped) */
    "iiip\0"
    "glGetFramebufferAttachmentParameteriv\0"
    "glGetFramebufferAttachmentParameterivEXT\0"
    "\0"
-   /* _mesa_function_pool[19320]: PixelTransformParameterfEXT (dynamic) */
+   /* _mesa_function_pool[19405]: PixelTransformParameterfEXT (dynamic) */
    "iif\0"
    "glPixelTransformParameterfEXT\0"
    "\0"
-   /* _mesa_function_pool[19355]: MultiTexCoord4dvARB (offset 401) */
+   /* _mesa_function_pool[19440]: MultiTexCoord4dvARB (offset 401) */
    "ip\0"
    "glMultiTexCoord4dv\0"
    "glMultiTexCoord4dvARB\0"
    "\0"
-   /* _mesa_function_pool[19400]: PixelTransformParameteriEXT (dynamic) */
+   /* _mesa_function_pool[19485]: PixelTransformParameteriEXT (dynamic) */
    "iii\0"
    "glPixelTransformParameteriEXT\0"
    "\0"
-   /* _mesa_function_pool[19435]: GetDoublev (offset 260) */
+   /* _mesa_function_pool[19520]: GetDoublev (offset 260) */
    "ip\0"
    "glGetDoublev\0"
    "\0"
-   /* _mesa_function_pool[19452]: MultMatrixd (offset 295) */
+   /* _mesa_function_pool[19537]: MultMatrixd (offset 295) */
    "p\0"
    "glMultMatrixd\0"
    "\0"
-   /* _mesa_function_pool[19469]: MultMatrixf (offset 294) */
+   /* _mesa_function_pool[19554]: MultMatrixf (offset 294) */
    "p\0"
    "glMultMatrixf\0"
    "\0"
-   /* _mesa_function_pool[19486]: TexCoord2fColor4ubVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[19571]: TexCoord2fColor4ubVertex3fSUN (dynamic) */
    "ffiiiifff\0"
    "glTexCoord2fColor4ubVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[19529]: Uniform1iARB (will be remapped) */
+   /* _mesa_function_pool[19614]: Uniform1iARB (will be remapped) */
    "ii\0"
    "glUniform1i\0"
    "glUniform1iARB\0"
    "\0"
-   /* _mesa_function_pool[19560]: VertexAttribPointerARB (will be remapped) */
+   /* _mesa_function_pool[19645]: VertexAttribPointerARB (will be remapped) */
    "iiiiip\0"
    "glVertexAttribPointer\0"
    "glVertexAttribPointerARB\0"
    "\0"
-   /* _mesa_function_pool[19615]: SharpenTexFuncSGIS (dynamic) */
+   /* _mesa_function_pool[19700]: SharpenTexFuncSGIS (dynamic) */
    "iip\0"
    "glSharpenTexFuncSGIS\0"
    "\0"
-   /* _mesa_function_pool[19641]: MultiTexCoord4fvARB (offset 403) */
+   /* _mesa_function_pool[19726]: MultiTexCoord4fvARB (offset 403) */
    "ip\0"
    "glMultiTexCoord4fv\0"
    "glMultiTexCoord4fvARB\0"
    "\0"
-   /* _mesa_function_pool[19686]: UniformMatrix2x3fv (will be remapped) */
+   /* _mesa_function_pool[19771]: UniformMatrix2x3fv (will be remapped) */
    "iiip\0"
    "glUniformMatrix2x3fv\0"
    "\0"
-   /* _mesa_function_pool[19713]: TrackMatrixNV (will be remapped) */
+   /* _mesa_function_pool[19798]: TrackMatrixNV (will be remapped) */
    "iiii\0"
    "glTrackMatrixNV\0"
    "\0"
-   /* _mesa_function_pool[19735]: CombinerParameteriNV (will be remapped) */
+   /* _mesa_function_pool[19820]: CombinerParameteriNV (will be remapped) */
    "ii\0"
    "glCombinerParameteriNV\0"
    "\0"
-   /* _mesa_function_pool[19762]: DeleteAsyncMarkersSGIX (dynamic) */
+   /* _mesa_function_pool[19847]: DeleteAsyncMarkersSGIX (dynamic) */
    "ii\0"
    "glDeleteAsyncMarkersSGIX\0"
    "\0"
-   /* _mesa_function_pool[19791]: IsAsyncMarkerSGIX (dynamic) */
+   /* _mesa_function_pool[19876]: IsAsyncMarkerSGIX (dynamic) */
    "i\0"
    "glIsAsyncMarkerSGIX\0"
    "\0"
-   /* _mesa_function_pool[19814]: FrameZoomSGIX (dynamic) */
+   /* _mesa_function_pool[19899]: FrameZoomSGIX (dynamic) */
    "i\0"
    "glFrameZoomSGIX\0"
    "\0"
-   /* _mesa_function_pool[19833]: Normal3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[19918]: Normal3fVertex3fvSUN (dynamic) */
    "pp\0"
    "glNormal3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[19860]: RasterPos4sv (offset 85) */
+   /* _mesa_function_pool[19945]: RasterPos4sv (offset 85) */
    "p\0"
    "glRasterPos4sv\0"
    "\0"
-   /* _mesa_function_pool[19878]: VertexAttrib4NsvARB (will be remapped) */
+   /* _mesa_function_pool[19963]: VertexAttrib4NsvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4Nsv\0"
    "glVertexAttrib4NsvARB\0"
    "\0"
-   /* _mesa_function_pool[19923]: VertexAttrib3fvARB (will be remapped) */
+   /* _mesa_function_pool[20008]: VertexAttrib3fvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib3fv\0"
    "glVertexAttrib3fvARB\0"
    "\0"
-   /* _mesa_function_pool[19966]: ClearColor (offset 206) */
+   /* _mesa_function_pool[20051]: ClearColor (offset 206) */
    "ffff\0"
    "glClearColor\0"
    "\0"
-   /* _mesa_function_pool[19985]: GetSynciv (will be remapped) */
+   /* _mesa_function_pool[20070]: GetSynciv (will be remapped) */
    "iiipp\0"
    "glGetSynciv\0"
    "\0"
-   /* _mesa_function_pool[20004]: DeleteFramebuffersEXT (will be remapped) */
+   /* _mesa_function_pool[20089]: DeleteFramebuffersEXT (will be remapped) */
    "ip\0"
    "glDeleteFramebuffers\0"
    "glDeleteFramebuffersEXT\0"
    "\0"
-   /* _mesa_function_pool[20053]: GlobalAlphaFactorsSUN (dynamic) */
+   /* _mesa_function_pool[20138]: GlobalAlphaFactorsSUN (dynamic) */
    "i\0"
    "glGlobalAlphaFactorsSUN\0"
    "\0"
-   /* _mesa_function_pool[20080]: IsEnabledIndexedEXT (will be remapped) */
+   /* _mesa_function_pool[20165]: IsEnabledIndexedEXT (will be remapped) */
    "ii\0"
    "glIsEnabledIndexedEXT\0"
    "\0"
-   /* _mesa_function_pool[20106]: TexEnviv (offset 187) */
+   /* _mesa_function_pool[20191]: TexEnviv (offset 187) */
    "iip\0"
    "glTexEnviv\0"
    "\0"
-   /* _mesa_function_pool[20122]: TexSubImage3D (offset 372) */
+   /* _mesa_function_pool[20207]: TexSubImage3D (offset 372) */
    "iiiiiiiiiip\0"
    "glTexSubImage3D\0"
    "glTexSubImage3DEXT\0"
    "\0"
-   /* _mesa_function_pool[20170]: Tangent3fEXT (dynamic) */
+   /* _mesa_function_pool[20255]: Tangent3fEXT (dynamic) */
    "fff\0"
    "glTangent3fEXT\0"
    "\0"
-   /* _mesa_function_pool[20190]: SecondaryColor3uivEXT (will be remapped) */
+   /* _mesa_function_pool[20275]: SecondaryColor3uivEXT (will be remapped) */
    "p\0"
    "glSecondaryColor3uiv\0"
    "glSecondaryColor3uivEXT\0"
    "\0"
-   /* _mesa_function_pool[20238]: MatrixIndexubvARB (dynamic) */
+   /* _mesa_function_pool[20323]: MatrixIndexubvARB (dynamic) */
    "ip\0"
    "glMatrixIndexubvARB\0"
    "\0"
-   /* _mesa_function_pool[20262]: Color4fNormal3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[20347]: Color4fNormal3fVertex3fSUN (dynamic) */
    "ffffffffff\0"
    "glColor4fNormal3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[20303]: PixelTexGenParameterfSGIS (will be remapped) */
+   /* _mesa_function_pool[20388]: PixelTexGenParameterfSGIS (will be remapped) */
    "if\0"
    "glPixelTexGenParameterfSGIS\0"
    "\0"
-   /* _mesa_function_pool[20335]: CreateShader (will be remapped) */
+   /* _mesa_function_pool[20420]: CreateShader (will be remapped) */
    "i\0"
    "glCreateShader\0"
    "\0"
-   /* _mesa_function_pool[20353]: GetColorTableParameterfv (offset 344) */
+   /* _mesa_function_pool[20438]: GetColorTableParameterfv (offset 344) */
    "iip\0"
    "glGetColorTableParameterfv\0"
    "glGetColorTableParameterfvSGI\0"
    "glGetColorTableParameterfvEXT\0"
    "\0"
-   /* _mesa_function_pool[20445]: FragmentLightModelfvSGIX (dynamic) */
+   /* _mesa_function_pool[20530]: FragmentLightModelfvSGIX (dynamic) */
    "ip\0"
    "glFragmentLightModelfvSGIX\0"
    "\0"
-   /* _mesa_function_pool[20476]: Bitmap (offset 8) */
+   /* _mesa_function_pool[20561]: Bitmap (offset 8) */
    "iiffffp\0"
    "glBitmap\0"
    "\0"
-   /* _mesa_function_pool[20494]: MultiTexCoord3fARB (offset 394) */
+   /* _mesa_function_pool[20579]: MultiTexCoord3fARB (offset 394) */
    "ifff\0"
    "glMultiTexCoord3f\0"
    "glMultiTexCoord3fARB\0"
    "\0"
-   /* _mesa_function_pool[20539]: GetTexLevelParameterfv (offset 284) */
+   /* _mesa_function_pool[20624]: GetTexLevelParameterfv (offset 284) */
    "iiip\0"
    "glGetTexLevelParameterfv\0"
    "\0"
-   /* _mesa_function_pool[20570]: GetPixelTexGenParameterfvSGIS (will be remapped) */
+   /* _mesa_function_pool[20655]: GetPixelTexGenParameterfvSGIS (will be remapped) */
    "ip\0"
    "glGetPixelTexGenParameterfvSGIS\0"
    "\0"
-   /* _mesa_function_pool[20606]: GenFramebuffersEXT (will be remapped) */
+   /* _mesa_function_pool[20691]: GenFramebuffersEXT (will be remapped) */
    "ip\0"
    "glGenFramebuffers\0"
    "glGenFramebuffersEXT\0"
    "\0"
-   /* _mesa_function_pool[20649]: GetProgramParameterdvNV (will be remapped) */
+   /* _mesa_function_pool[20734]: GetProgramParameterdvNV (will be remapped) */
    "iiip\0"
    "glGetProgramParameterdvNV\0"
    "\0"
-   /* _mesa_function_pool[20681]: Vertex2sv (offset 133) */
+   /* _mesa_function_pool[20766]: Vertex2sv (offset 133) */
    "p\0"
    "glVertex2sv\0"
    "\0"
-   /* _mesa_function_pool[20696]: GetIntegerv (offset 263) */
+   /* _mesa_function_pool[20781]: GetIntegerv (offset 263) */
    "ip\0"
    "glGetIntegerv\0"
    "\0"
-   /* _mesa_function_pool[20714]: IsVertexArrayAPPLE (will be remapped) */
+   /* _mesa_function_pool[20799]: IsVertexArrayAPPLE (will be remapped) */
    "i\0"
    "glIsVertexArray\0"
    "glIsVertexArrayAPPLE\0"
    "\0"
-   /* _mesa_function_pool[20754]: FragmentLightfvSGIX (dynamic) */
+   /* _mesa_function_pool[20839]: FragmentLightfvSGIX (dynamic) */
    "iip\0"
    "glFragmentLightfvSGIX\0"
    "\0"
-   /* _mesa_function_pool[20781]: DetachShader (will be remapped) */
+   /* _mesa_function_pool[20866]: DetachShader (will be remapped) */
    "ii\0"
    "glDetachShader\0"
    "\0"
-   /* _mesa_function_pool[20800]: VertexAttrib4NubARB (will be remapped) */
+   /* _mesa_function_pool[20885]: VertexAttrib4NubARB (will be remapped) */
    "iiiii\0"
    "glVertexAttrib4Nub\0"
    "glVertexAttrib4NubARB\0"
    "\0"
-   /* _mesa_function_pool[20848]: GetProgramEnvParameterfvARB (will be remapped) */
+   /* _mesa_function_pool[20933]: GetProgramEnvParameterfvARB (will be remapped) */
    "iip\0"
    "glGetProgramEnvParameterfvARB\0"
    "\0"
-   /* _mesa_function_pool[20883]: GetTrackMatrixivNV (will be remapped) */
+   /* _mesa_function_pool[20968]: GetTrackMatrixivNV (will be remapped) */
    "iiip\0"
    "glGetTrackMatrixivNV\0"
    "\0"
-   /* _mesa_function_pool[20910]: VertexAttrib3svNV (will be remapped) */
+   /* _mesa_function_pool[20995]: VertexAttrib3svNV (will be remapped) */
    "ip\0"
    "glVertexAttrib3svNV\0"
    "\0"
-   /* _mesa_function_pool[20934]: Uniform4fvARB (will be remapped) */
+   /* _mesa_function_pool[21019]: Uniform4fvARB (will be remapped) */
    "iip\0"
    "glUniform4fv\0"
    "glUniform4fvARB\0"
    "\0"
-   /* _mesa_function_pool[20968]: MultTransposeMatrixfARB (will be remapped) */
+   /* _mesa_function_pool[21053]: MultTransposeMatrixfARB (will be remapped) */
    "p\0"
    "glMultTransposeMatrixf\0"
    "glMultTransposeMatrixfARB\0"
    "\0"
-   /* _mesa_function_pool[21020]: GetTexEnviv (offset 277) */
+   /* _mesa_function_pool[21105]: GetTexEnviv (offset 277) */
    "iip\0"
    "glGetTexEnviv\0"
    "\0"
-   /* _mesa_function_pool[21039]: ColorFragmentOp1ATI (will be remapped) */
+   /* _mesa_function_pool[21124]: ColorFragmentOp1ATI (will be remapped) */
    "iiiiiii\0"
    "glColorFragmentOp1ATI\0"
    "\0"
-   /* _mesa_function_pool[21070]: GetUniformfvARB (will be remapped) */
+   /* _mesa_function_pool[21155]: GetUniformfvARB (will be remapped) */
    "iip\0"
    "glGetUniformfv\0"
    "glGetUniformfvARB\0"
    "\0"
-   /* _mesa_function_pool[21108]: EGLImageTargetRenderbufferStorageOES (will be remapped) */
+   /* _mesa_function_pool[21193]: EGLImageTargetRenderbufferStorageOES (will be remapped) */
    "ip\0"
    "glEGLImageTargetRenderbufferStorageOES\0"
    "\0"
-   /* _mesa_function_pool[21151]: PopClientAttrib (offset 334) */
+   /* _mesa_function_pool[21236]: PopClientAttrib (offset 334) */
    "\0"
    "glPopClientAttrib\0"
    "\0"
-   /* _mesa_function_pool[21171]: ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[21256]: ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (dynamic) */
    "iffffffffffff\0"
    "glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[21242]: DetachObjectARB (will be remapped) */
+   /* _mesa_function_pool[21327]: DetachObjectARB (will be remapped) */
    "ii\0"
    "glDetachObjectARB\0"
    "\0"
-   /* _mesa_function_pool[21264]: VertexBlendARB (dynamic) */
+   /* _mesa_function_pool[21349]: VertexBlendARB (dynamic) */
    "i\0"
    "glVertexBlendARB\0"
    "\0"
-   /* _mesa_function_pool[21284]: WindowPos3iMESA (will be remapped) */
+   /* _mesa_function_pool[21369]: WindowPos3iMESA (will be remapped) */
    "iii\0"
    "glWindowPos3i\0"
    "glWindowPos3iARB\0"
    "glWindowPos3iMESA\0"
    "\0"
-   /* _mesa_function_pool[21338]: SeparableFilter2D (offset 360) */
+   /* _mesa_function_pool[21423]: SeparableFilter2D (offset 360) */
    "iiiiiipp\0"
    "glSeparableFilter2D\0"
    "glSeparableFilter2DEXT\0"
    "\0"
-   /* _mesa_function_pool[21391]: ReplacementCodeuiColor4ubVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[21476]: ReplacementCodeuiColor4ubVertex3fvSUN (dynamic) */
    "ppp\0"
    "glReplacementCodeuiColor4ubVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[21436]: Map1d (offset 220) */
+   /* _mesa_function_pool[21521]: Map1d (offset 220) */
    "iddiip\0"
    "glMap1d\0"
    "\0"
-   /* _mesa_function_pool[21452]: Map1f (offset 221) */
+   /* _mesa_function_pool[21537]: Map1f (offset 221) */
    "iffiip\0"
    "glMap1f\0"
    "\0"
-   /* _mesa_function_pool[21468]: CompressedTexImage2DARB (will be remapped) */
+   /* _mesa_function_pool[21553]: CompressedTexImage2DARB (will be remapped) */
    "iiiiiiip\0"
    "glCompressedTexImage2D\0"
    "glCompressedTexImage2DARB\0"
    "\0"
-   /* _mesa_function_pool[21527]: ArrayElement (offset 306) */
+   /* _mesa_function_pool[21612]: ArrayElement (offset 306) */
    "i\0"
    "glArrayElement\0"
    "glArrayElementEXT\0"
    "\0"
-   /* _mesa_function_pool[21563]: TexImage2D (offset 183) */
+   /* _mesa_function_pool[21648]: TexImage2D (offset 183) */
    "iiiiiiiip\0"
    "glTexImage2D\0"
    "\0"
-   /* _mesa_function_pool[21587]: DepthBoundsEXT (will be remapped) */
+   /* _mesa_function_pool[21672]: DepthBoundsEXT (will be remapped) */
    "dd\0"
    "glDepthBoundsEXT\0"
    "\0"
-   /* _mesa_function_pool[21608]: ProgramParameters4fvNV (will be remapped) */
+   /* _mesa_function_pool[21693]: ProgramParameters4fvNV (will be remapped) */
    "iiip\0"
    "glProgramParameters4fvNV\0"
    "\0"
-   /* _mesa_function_pool[21639]: DeformationMap3fSGIX (dynamic) */
+   /* _mesa_function_pool[21724]: DeformationMap3fSGIX (dynamic) */
    "iffiiffiiffiip\0"
    "glDeformationMap3fSGIX\0"
    "\0"
-   /* _mesa_function_pool[21678]: GetProgramivNV (will be remapped) */
+   /* _mesa_function_pool[21763]: GetProgramivNV (will be remapped) */
    "iip\0"
    "glGetProgramivNV\0"
    "\0"
-   /* _mesa_function_pool[21700]: GetMinmaxParameteriv (offset 366) */
+   /* _mesa_function_pool[21785]: GetMinmaxParameteriv (offset 366) */
    "iip\0"
    "glGetMinmaxParameteriv\0"
    "glGetMinmaxParameterivEXT\0"
    "\0"
-   /* _mesa_function_pool[21754]: PixelTransferf (offset 247) */
+   /* _mesa_function_pool[21839]: PixelTransferf (offset 247) */
    "if\0"
    "glPixelTransferf\0"
    "\0"
-   /* _mesa_function_pool[21775]: CopyTexImage1D (offset 323) */
+   /* _mesa_function_pool[21860]: CopyTexImage1D (offset 323) */
    "iiiiiii\0"
    "glCopyTexImage1D\0"
    "glCopyTexImage1DEXT\0"
    "\0"
-   /* _mesa_function_pool[21821]: PushMatrix (offset 298) */
+   /* _mesa_function_pool[21906]: PushMatrix (offset 298) */
    "\0"
    "glPushMatrix\0"
    "\0"
-   /* _mesa_function_pool[21836]: Fogiv (offset 156) */
+   /* _mesa_function_pool[21921]: Fogiv (offset 156) */
    "ip\0"
    "glFogiv\0"
    "\0"
-   /* _mesa_function_pool[21848]: TexCoord1dv (offset 95) */
+   /* _mesa_function_pool[21933]: TexCoord1dv (offset 95) */
    "p\0"
    "glTexCoord1dv\0"
    "\0"
-   /* _mesa_function_pool[21865]: AlphaFragmentOp3ATI (will be remapped) */
+   /* _mesa_function_pool[21950]: AlphaFragmentOp3ATI (will be remapped) */
    "iiiiiiiiiiii\0"
    "glAlphaFragmentOp3ATI\0"
    "\0"
-   /* _mesa_function_pool[21901]: PixelTransferi (offset 248) */
+   /* _mesa_function_pool[21986]: PixelTransferi (offset 248) */
    "ii\0"
    "glPixelTransferi\0"
    "\0"
-   /* _mesa_function_pool[21922]: GetVertexAttribdvNV (will be remapped) */
+   /* _mesa_function_pool[22007]: GetVertexAttribdvNV (will be remapped) */
    "iip\0"
    "glGetVertexAttribdvNV\0"
    "\0"
-   /* _mesa_function_pool[21949]: VertexAttrib3fvNV (will be remapped) */
+   /* _mesa_function_pool[22034]: VertexAttrib3fvNV (will be remapped) */
    "ip\0"
    "glVertexAttrib3fvNV\0"
    "\0"
-   /* _mesa_function_pool[21973]: Rotatef (offset 300) */
+   /* _mesa_function_pool[22058]: Rotatef (offset 300) */
    "ffff\0"
    "glRotatef\0"
    "\0"
-   /* _mesa_function_pool[21989]: GetFinalCombinerInputParameterivNV (will be remapped) */
+   /* _mesa_function_pool[22074]: GetFinalCombinerInputParameterivNV (will be remapped) */
    "iip\0"
    "glGetFinalCombinerInputParameterivNV\0"
    "\0"
-   /* _mesa_function_pool[22031]: Vertex3i (offset 138) */
+   /* _mesa_function_pool[22116]: Vertex3i (offset 138) */
    "iii\0"
    "glVertex3i\0"
    "\0"
-   /* _mesa_function_pool[22047]: Vertex3f (offset 136) */
+   /* _mesa_function_pool[22132]: Vertex3f (offset 136) */
    "fff\0"
    "glVertex3f\0"
    "\0"
-   /* _mesa_function_pool[22063]: Clear (offset 203) */
+   /* _mesa_function_pool[22148]: Clear (offset 203) */
    "i\0"
    "glClear\0"
    "\0"
-   /* _mesa_function_pool[22074]: Vertex3d (offset 134) */
+   /* _mesa_function_pool[22159]: Vertex3d (offset 134) */
    "ddd\0"
    "glVertex3d\0"
    "\0"
-   /* _mesa_function_pool[22090]: GetMapParameterivNV (dynamic) */
+   /* _mesa_function_pool[22175]: GetMapParameterivNV (dynamic) */
    "iip\0"
    "glGetMapParameterivNV\0"
    "\0"
-   /* _mesa_function_pool[22117]: Uniform4iARB (will be remapped) */
+   /* _mesa_function_pool[22202]: Uniform4iARB (will be remapped) */
    "iiiii\0"
    "glUniform4i\0"
    "glUniform4iARB\0"
    "\0"
-   /* _mesa_function_pool[22151]: ReadBuffer (offset 254) */
+   /* _mesa_function_pool[22236]: ReadBuffer (offset 254) */
    "i\0"
    "glReadBuffer\0"
    "\0"
-   /* _mesa_function_pool[22167]: ConvolutionParameteri (offset 352) */
+   /* _mesa_function_pool[22252]: ConvolutionParameteri (offset 352) */
    "iii\0"
    "glConvolutionParameteri\0"
    "glConvolutionParameteriEXT\0"
    "\0"
-   /* _mesa_function_pool[22223]: Ortho (offset 296) */
+   /* _mesa_function_pool[22308]: Ortho (offset 296) */
    "dddddd\0"
    "glOrtho\0"
    "\0"
-   /* _mesa_function_pool[22239]: Binormal3sEXT (dynamic) */
+   /* _mesa_function_pool[22324]: Binormal3sEXT (dynamic) */
    "iii\0"
    "glBinormal3sEXT\0"
    "\0"
-   /* _mesa_function_pool[22260]: ListBase (offset 6) */
+   /* _mesa_function_pool[22345]: ListBase (offset 6) */
    "i\0"
    "glListBase\0"
    "\0"
-   /* _mesa_function_pool[22274]: Vertex3s (offset 140) */
+   /* _mesa_function_pool[22359]: Vertex3s (offset 140) */
    "iii\0"
    "glVertex3s\0"
    "\0"
-   /* _mesa_function_pool[22290]: ConvolutionParameterf (offset 350) */
+   /* _mesa_function_pool[22375]: ConvolutionParameterf (offset 350) */
    "iif\0"
    "glConvolutionParameterf\0"
    "glConvolutionParameterfEXT\0"
    "\0"
-   /* _mesa_function_pool[22346]: GetColorTableParameteriv (offset 345) */
+   /* _mesa_function_pool[22431]: GetColorTableParameteriv (offset 345) */
    "iip\0"
    "glGetColorTableParameteriv\0"
    "glGetColorTableParameterivSGI\0"
    "glGetColorTableParameterivEXT\0"
    "\0"
-   /* _mesa_function_pool[22438]: ProgramEnvParameter4dvARB (will be remapped) */
+   /* _mesa_function_pool[22523]: ProgramEnvParameter4dvARB (will be remapped) */
    "iip\0"
    "glProgramEnvParameter4dvARB\0"
    "glProgramParameter4dvNV\0"
    "\0"
-   /* _mesa_function_pool[22495]: ShadeModel (offset 177) */
+   /* _mesa_function_pool[22580]: ShadeModel (offset 177) */
    "i\0"
    "glShadeModel\0"
    "\0"
-   /* _mesa_function_pool[22511]: VertexAttribs2fvNV (will be remapped) */
+   /* _mesa_function_pool[22596]: VertexAttribs2fvNV (will be remapped) */
    "iip\0"
    "glVertexAttribs2fvNV\0"
    "\0"
-   /* _mesa_function_pool[22537]: Rectiv (offset 91) */
+   /* _mesa_function_pool[22622]: Rectiv (offset 91) */
    "pp\0"
    "glRectiv\0"
    "\0"
-   /* _mesa_function_pool[22550]: UseProgramObjectARB (will be remapped) */
+   /* _mesa_function_pool[22635]: UseProgramObjectARB (will be remapped) */
    "i\0"
    "glUseProgram\0"
    "glUseProgramObjectARB\0"
    "\0"
-   /* _mesa_function_pool[22588]: GetMapParameterfvNV (dynamic) */
+   /* _mesa_function_pool[22673]: GetMapParameterfvNV (dynamic) */
    "iip\0"
    "glGetMapParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[22615]: EndConditionalRenderNV (will be remapped) */
+   /* _mesa_function_pool[22700]: EndConditionalRenderNV (will be remapped) */
    "\0"
    "glEndConditionalRenderNV\0"
    "\0"
-   /* _mesa_function_pool[22642]: PassTexCoordATI (will be remapped) */
+   /* _mesa_function_pool[22727]: PassTexCoordATI (will be remapped) */
    "iii\0"
    "glPassTexCoordATI\0"
    "\0"
-   /* _mesa_function_pool[22665]: DeleteProgram (will be remapped) */
+   /* _mesa_function_pool[22750]: DeleteProgram (will be remapped) */
    "i\0"
    "glDeleteProgram\0"
    "\0"
-   /* _mesa_function_pool[22684]: Tangent3ivEXT (dynamic) */
+   /* _mesa_function_pool[22769]: Tangent3ivEXT (dynamic) */
    "p\0"
    "glTangent3ivEXT\0"
    "\0"
-   /* _mesa_function_pool[22703]: Tangent3dEXT (dynamic) */
+   /* _mesa_function_pool[22788]: Tangent3dEXT (dynamic) */
    "ddd\0"
    "glTangent3dEXT\0"
    "\0"
-   /* _mesa_function_pool[22723]: SecondaryColor3dvEXT (will be remapped) */
+   /* _mesa_function_pool[22808]: SecondaryColor3dvEXT (will be remapped) */
    "p\0"
    "glSecondaryColor3dv\0"
    "glSecondaryColor3dvEXT\0"
    "\0"
-   /* _mesa_function_pool[22769]: Vertex2fv (offset 129) */
+   /* _mesa_function_pool[22854]: Vertex2fv (offset 129) */
    "p\0"
    "glVertex2fv\0"
    "\0"
-   /* _mesa_function_pool[22784]: MultiDrawArraysEXT (will be remapped) */
+   /* _mesa_function_pool[22869]: MultiDrawArraysEXT (will be remapped) */
    "ippi\0"
    "glMultiDrawArrays\0"
    "glMultiDrawArraysEXT\0"
    "\0"
-   /* _mesa_function_pool[22829]: BindRenderbufferEXT (will be remapped) */
+   /* _mesa_function_pool[22914]: BindRenderbufferEXT (will be remapped) */
    "ii\0"
    "glBindRenderbuffer\0"
    "glBindRenderbufferEXT\0"
    "\0"
-   /* _mesa_function_pool[22874]: MultiTexCoord4dARB (offset 400) */
+   /* _mesa_function_pool[22959]: MultiTexCoord4dARB (offset 400) */
    "idddd\0"
    "glMultiTexCoord4d\0"
    "glMultiTexCoord4dARB\0"
    "\0"
-   /* _mesa_function_pool[22920]: Vertex3sv (offset 141) */
+   /* _mesa_function_pool[23005]: Vertex3sv (offset 141) */
    "p\0"
    "glVertex3sv\0"
    "\0"
-   /* _mesa_function_pool[22935]: SecondaryColor3usEXT (will be remapped) */
+   /* _mesa_function_pool[23020]: SecondaryColor3usEXT (will be remapped) */
    "iii\0"
    "glSecondaryColor3us\0"
    "glSecondaryColor3usEXT\0"
    "\0"
-   /* _mesa_function_pool[22983]: ProgramLocalParameter4fvARB (will be remapped) */
+   /* _mesa_function_pool[23068]: ProgramLocalParameter4fvARB (will be remapped) */
    "iip\0"
    "glProgramLocalParameter4fvARB\0"
    "\0"
-   /* _mesa_function_pool[23018]: DeleteProgramsNV (will be remapped) */
+   /* _mesa_function_pool[23103]: DeleteProgramsNV (will be remapped) */
    "ip\0"
    "glDeleteProgramsARB\0"
    "glDeleteProgramsNV\0"
    "\0"
-   /* _mesa_function_pool[23061]: EvalMesh1 (offset 236) */
+   /* _mesa_function_pool[23146]: EvalMesh1 (offset 236) */
    "iii\0"
    "glEvalMesh1\0"
    "\0"
-   /* _mesa_function_pool[23078]: MultiTexCoord1sARB (offset 382) */
+   /* _mesa_function_pool[23163]: MultiTexCoord1sARB (offset 382) */
    "ii\0"
    "glMultiTexCoord1s\0"
    "glMultiTexCoord1sARB\0"
    "\0"
-   /* _mesa_function_pool[23121]: ReplacementCodeuiColor3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[23206]: ReplacementCodeuiColor3fVertex3fSUN (dynamic) */
    "iffffff\0"
    "glReplacementCodeuiColor3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[23168]: GetVertexAttribPointervNV (will be remapped) */
+   /* _mesa_function_pool[23253]: GetVertexAttribPointervNV (will be remapped) */
    "iip\0"
    "glGetVertexAttribPointerv\0"
    "glGetVertexAttribPointervARB\0"
    "glGetVertexAttribPointervNV\0"
    "\0"
-   /* _mesa_function_pool[23256]: DisableIndexedEXT (will be remapped) */
+   /* _mesa_function_pool[23341]: DisableIndexedEXT (will be remapped) */
    "ii\0"
    "glDisableIndexedEXT\0"
    "\0"
-   /* _mesa_function_pool[23280]: MultiTexCoord1dvARB (offset 377) */
+   /* _mesa_function_pool[23365]: MultiTexCoord1dvARB (offset 377) */
    "ip\0"
    "glMultiTexCoord1dv\0"
    "glMultiTexCoord1dvARB\0"
    "\0"
-   /* _mesa_function_pool[23325]: Uniform2iARB (will be remapped) */
+   /* _mesa_function_pool[23410]: Uniform2iARB (will be remapped) */
    "iii\0"
    "glUniform2i\0"
    "glUniform2iARB\0"
    "\0"
-   /* _mesa_function_pool[23357]: Vertex2iv (offset 131) */
+   /* _mesa_function_pool[23442]: Vertex2iv (offset 131) */
    "p\0"
    "glVertex2iv\0"
    "\0"
-   /* _mesa_function_pool[23372]: GetProgramStringNV (will be remapped) */
+   /* _mesa_function_pool[23457]: GetProgramStringNV (will be remapped) */
    "iip\0"
    "glGetProgramStringNV\0"
    "\0"
-   /* _mesa_function_pool[23398]: ColorPointerEXT (will be remapped) */
+   /* _mesa_function_pool[23483]: ColorPointerEXT (will be remapped) */
    "iiiip\0"
    "glColorPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[23423]: LineWidth (offset 168) */
+   /* _mesa_function_pool[23508]: LineWidth (offset 168) */
    "f\0"
    "glLineWidth\0"
    "\0"
-   /* _mesa_function_pool[23438]: MapBufferARB (will be remapped) */
+   /* _mesa_function_pool[23523]: MapBufferARB (will be remapped) */
    "ii\0"
    "glMapBuffer\0"
    "glMapBufferARB\0"
    "\0"
-   /* _mesa_function_pool[23469]: MultiDrawElementsBaseVertex (will be remapped) */
+   /* _mesa_function_pool[23554]: MultiDrawElementsBaseVertex (will be remapped) */
    "ipipip\0"
    "glMultiDrawElementsBaseVertex\0"
    "\0"
-   /* _mesa_function_pool[23507]: Binormal3svEXT (dynamic) */
+   /* _mesa_function_pool[23592]: Binormal3svEXT (dynamic) */
    "p\0"
    "glBinormal3svEXT\0"
    "\0"
-   /* _mesa_function_pool[23527]: ApplyTextureEXT (dynamic) */
+   /* _mesa_function_pool[23612]: ApplyTextureEXT (dynamic) */
    "i\0"
    "glApplyTextureEXT\0"
    "\0"
-   /* _mesa_function_pool[23548]: TexGendv (offset 189) */
+   /* _mesa_function_pool[23633]: TexGendv (offset 189) */
    "iip\0"
    "glTexGendv\0"
    "\0"
-   /* _mesa_function_pool[23564]: EnableIndexedEXT (will be remapped) */
+   /* _mesa_function_pool[23649]: EnableIndexedEXT (will be remapped) */
    "ii\0"
    "glEnableIndexedEXT\0"
    "\0"
-   /* _mesa_function_pool[23587]: TextureMaterialEXT (dynamic) */
+   /* _mesa_function_pool[23672]: TextureMaterialEXT (dynamic) */
    "ii\0"
    "glTextureMaterialEXT\0"
    "\0"
-   /* _mesa_function_pool[23612]: TextureLightEXT (dynamic) */
+   /* _mesa_function_pool[23697]: TextureLightEXT (dynamic) */
    "i\0"
    "glTextureLightEXT\0"
    "\0"
-   /* _mesa_function_pool[23633]: ResetMinmax (offset 370) */
+   /* _mesa_function_pool[23718]: ResetMinmax (offset 370) */
    "i\0"
    "glResetMinmax\0"
    "glResetMinmaxEXT\0"
    "\0"
-   /* _mesa_function_pool[23667]: SpriteParameterfSGIX (dynamic) */
+   /* _mesa_function_pool[23752]: SpriteParameterfSGIX (dynamic) */
    "if\0"
    "glSpriteParameterfSGIX\0"
    "\0"
-   /* _mesa_function_pool[23694]: EnableClientState (offset 313) */
+   /* _mesa_function_pool[23779]: EnableClientState (offset 313) */
    "i\0"
    "glEnableClientState\0"
    "\0"
-   /* _mesa_function_pool[23717]: VertexAttrib4sNV (will be remapped) */
+   /* _mesa_function_pool[23802]: VertexAttrib4sNV (will be remapped) */
    "iiiii\0"
    "glVertexAttrib4sNV\0"
    "\0"
-   /* _mesa_function_pool[23743]: GetConvolutionParameterfv (offset 357) */
+   /* _mesa_function_pool[23828]: GetConvolutionParameterfv (offset 357) */
    "iip\0"
    "glGetConvolutionParameterfv\0"
    "glGetConvolutionParameterfvEXT\0"
    "\0"
-   /* _mesa_function_pool[23807]: VertexAttribs4dvNV (will be remapped) */
+   /* _mesa_function_pool[23892]: VertexAttribs4dvNV (will be remapped) */
    "iip\0"
    "glVertexAttribs4dvNV\0"
    "\0"
-   /* _mesa_function_pool[23833]: MultiModeDrawArraysIBM (will be remapped) */
-   "pppii\0"
-   "glMultiModeDrawArraysIBM\0"
-   "\0"
-   /* _mesa_function_pool[23865]: VertexAttrib4dARB (will be remapped) */
+   /* _mesa_function_pool[23918]: VertexAttrib4dARB (will be remapped) */
    "idddd\0"
    "glVertexAttrib4d\0"
    "glVertexAttrib4dARB\0"
    "\0"
-   /* _mesa_function_pool[23909]: GetTexBumpParameterfvATI (will be remapped) */
+   /* _mesa_function_pool[23962]: GetTexBumpParameterfvATI (will be remapped) */
    "ip\0"
    "glGetTexBumpParameterfvATI\0"
    "\0"
-   /* _mesa_function_pool[23940]: ProgramNamedParameter4dNV (will be remapped) */
+   /* _mesa_function_pool[23993]: ProgramNamedParameter4dNV (will be remapped) */
    "iipdddd\0"
    "glProgramNamedParameter4dNV\0"
    "\0"
-   /* _mesa_function_pool[23977]: GetMaterialfv (offset 269) */
+   /* _mesa_function_pool[24030]: GetMaterialfv (offset 269) */
    "iip\0"
    "glGetMaterialfv\0"
    "\0"
-   /* _mesa_function_pool[23998]: VertexWeightfEXT (dynamic) */
+   /* _mesa_function_pool[24051]: VertexWeightfEXT (dynamic) */
    "f\0"
    "glVertexWeightfEXT\0"
    "\0"
-   /* _mesa_function_pool[24020]: Binormal3fEXT (dynamic) */
+   /* _mesa_function_pool[24073]: Binormal3fEXT (dynamic) */
    "fff\0"
    "glBinormal3fEXT\0"
    "\0"
-   /* _mesa_function_pool[24041]: CallList (offset 2) */
+   /* _mesa_function_pool[24094]: CallList (offset 2) */
    "i\0"
    "glCallList\0"
    "\0"
-   /* _mesa_function_pool[24055]: Materialfv (offset 170) */
+   /* _mesa_function_pool[24108]: Materialfv (offset 170) */
    "iip\0"
    "glMaterialfv\0"
    "\0"
-   /* _mesa_function_pool[24073]: TexCoord3fv (offset 113) */
+   /* _mesa_function_pool[24126]: TexCoord3fv (offset 113) */
    "p\0"
    "glTexCoord3fv\0"
    "\0"
-   /* _mesa_function_pool[24090]: FogCoordfvEXT (will be remapped) */
+   /* _mesa_function_pool[24143]: FogCoordfvEXT (will be remapped) */
    "p\0"
    "glFogCoordfv\0"
    "glFogCoordfvEXT\0"
    "\0"
-   /* _mesa_function_pool[24122]: MultiTexCoord1ivARB (offset 381) */
+   /* _mesa_function_pool[24175]: MultiTexCoord1ivARB (offset 381) */
    "ip\0"
    "glMultiTexCoord1iv\0"
    "glMultiTexCoord1ivARB\0"
    "\0"
-   /* _mesa_function_pool[24167]: SecondaryColor3ubEXT (will be remapped) */
+   /* _mesa_function_pool[24220]: SecondaryColor3ubEXT (will be remapped) */
    "iii\0"
    "glSecondaryColor3ub\0"
    "glSecondaryColor3ubEXT\0"
    "\0"
-   /* _mesa_function_pool[24215]: MultiTexCoord2ivARB (offset 389) */
+   /* _mesa_function_pool[24268]: MultiTexCoord2ivARB (offset 389) */
    "ip\0"
    "glMultiTexCoord2iv\0"
    "glMultiTexCoord2ivARB\0"
    "\0"
-   /* _mesa_function_pool[24260]: FogFuncSGIS (dynamic) */
+   /* _mesa_function_pool[24313]: FogFuncSGIS (dynamic) */
    "ip\0"
    "glFogFuncSGIS\0"
    "\0"
-   /* _mesa_function_pool[24278]: CopyTexSubImage2D (offset 326) */
+   /* _mesa_function_pool[24331]: CopyTexSubImage2D (offset 326) */
    "iiiiiiii\0"
    "glCopyTexSubImage2D\0"
    "glCopyTexSubImage2DEXT\0"
    "\0"
-   /* _mesa_function_pool[24331]: GetObjectParameterivARB (will be remapped) */
+   /* _mesa_function_pool[24384]: GetObjectParameterivARB (will be remapped) */
    "iip\0"
    "glGetObjectParameterivARB\0"
    "\0"
-   /* _mesa_function_pool[24362]: Color3iv (offset 16) */
+   /* _mesa_function_pool[24415]: Color3iv (offset 16) */
    "p\0"
    "glColor3iv\0"
    "\0"
-   /* _mesa_function_pool[24376]: TexCoord4fVertex4fSUN (dynamic) */
+   /* _mesa_function_pool[24429]: TexCoord4fVertex4fSUN (dynamic) */
    "ffffffff\0"
    "glTexCoord4fVertex4fSUN\0"
    "\0"
-   /* _mesa_function_pool[24410]: DrawElements (offset 311) */
+   /* _mesa_function_pool[24463]: DrawElements (offset 311) */
    "iiip\0"
    "glDrawElements\0"
    "\0"
-   /* _mesa_function_pool[24431]: BindVertexArrayAPPLE (will be remapped) */
+   /* _mesa_function_pool[24484]: BindVertexArrayAPPLE (will be remapped) */
    "i\0"
    "glBindVertexArrayAPPLE\0"
    "\0"
-   /* _mesa_function_pool[24457]: GetProgramLocalParameterdvARB (will be remapped) */
+   /* _mesa_function_pool[24510]: GetProgramLocalParameterdvARB (will be remapped) */
    "iip\0"
    "glGetProgramLocalParameterdvARB\0"
    "\0"
-   /* _mesa_function_pool[24494]: GetHistogramParameteriv (offset 363) */
+   /* _mesa_function_pool[24547]: GetHistogramParameteriv (offset 363) */
    "iip\0"
    "glGetHistogramParameteriv\0"
    "glGetHistogramParameterivEXT\0"
    "\0"
-   /* _mesa_function_pool[24554]: MultiTexCoord1iARB (offset 380) */
+   /* _mesa_function_pool[24607]: MultiTexCoord1iARB (offset 380) */
    "ii\0"
    "glMultiTexCoord1i\0"
    "glMultiTexCoord1iARB\0"
    "\0"
-   /* _mesa_function_pool[24597]: GetConvolutionFilter (offset 356) */
+   /* _mesa_function_pool[24650]: GetConvolutionFilter (offset 356) */
    "iiip\0"
    "glGetConvolutionFilter\0"
    "glGetConvolutionFilterEXT\0"
    "\0"
-   /* _mesa_function_pool[24652]: GetProgramivARB (will be remapped) */
+   /* _mesa_function_pool[24705]: GetProgramivARB (will be remapped) */
    "iip\0"
    "glGetProgramivARB\0"
    "\0"
-   /* _mesa_function_pool[24675]: BlendFuncSeparateEXT (will be remapped) */
+   /* _mesa_function_pool[24728]: BlendFuncSeparateEXT (will be remapped) */
    "iiii\0"
    "glBlendFuncSeparate\0"
    "glBlendFuncSeparateEXT\0"
    "glBlendFuncSeparateINGR\0"
    "\0"
-   /* _mesa_function_pool[24748]: MapBufferRange (will be remapped) */
+   /* _mesa_function_pool[24801]: MapBufferRange (will be remapped) */
    "iiii\0"
    "glMapBufferRange\0"
    "\0"
-   /* _mesa_function_pool[24771]: ProgramParameters4dvNV (will be remapped) */
+   /* _mesa_function_pool[24824]: ProgramParameters4dvNV (will be remapped) */
    "iiip\0"
    "glProgramParameters4dvNV\0"
    "\0"
-   /* _mesa_function_pool[24802]: TexCoord2fColor3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[24855]: TexCoord2fColor3fVertex3fvSUN (dynamic) */
    "ppp\0"
    "glTexCoord2fColor3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[24839]: EvalPoint2 (offset 239) */
+   /* _mesa_function_pool[24892]: EvalPoint2 (offset 239) */
    "ii\0"
    "glEvalPoint2\0"
    "\0"
-   /* _mesa_function_pool[24856]: EvalPoint1 (offset 237) */
+   /* _mesa_function_pool[24909]: EvalPoint1 (offset 237) */
    "i\0"
    "glEvalPoint1\0"
    "\0"
-   /* _mesa_function_pool[24872]: Binormal3dvEXT (dynamic) */
+   /* _mesa_function_pool[24925]: Binormal3dvEXT (dynamic) */
    "p\0"
    "glBinormal3dvEXT\0"
    "\0"
-   /* _mesa_function_pool[24892]: PopMatrix (offset 297) */
+   /* _mesa_function_pool[24945]: PopMatrix (offset 297) */
    "\0"
    "glPopMatrix\0"
    "\0"
-   /* _mesa_function_pool[24906]: FinishFenceNV (will be remapped) */
+   /* _mesa_function_pool[24959]: FinishFenceNV (will be remapped) */
    "i\0"
    "glFinishFenceNV\0"
    "\0"
-   /* _mesa_function_pool[24925]: GetFogFuncSGIS (dynamic) */
+   /* _mesa_function_pool[24978]: GetFogFuncSGIS (dynamic) */
    "p\0"
    "glGetFogFuncSGIS\0"
    "\0"
-   /* _mesa_function_pool[24945]: GetUniformLocationARB (will be remapped) */
+   /* _mesa_function_pool[24998]: GetUniformLocationARB (will be remapped) */
    "ip\0"
    "glGetUniformLocation\0"
    "glGetUniformLocationARB\0"
    "\0"
-   /* _mesa_function_pool[24994]: SecondaryColor3fEXT (will be remapped) */
+   /* _mesa_function_pool[25047]: SecondaryColor3fEXT (will be remapped) */
    "fff\0"
    "glSecondaryColor3f\0"
    "glSecondaryColor3fEXT\0"
    "\0"
-   /* _mesa_function_pool[25040]: GetTexGeniv (offset 280) */
+   /* _mesa_function_pool[25093]: GetTexGeniv (offset 280) */
    "iip\0"
    "glGetTexGeniv\0"
    "\0"
-   /* _mesa_function_pool[25059]: CombinerInputNV (will be remapped) */
+   /* _mesa_function_pool[25112]: CombinerInputNV (will be remapped) */
    "iiiiii\0"
    "glCombinerInputNV\0"
    "\0"
-   /* _mesa_function_pool[25085]: VertexAttrib3sARB (will be remapped) */
+   /* _mesa_function_pool[25138]: VertexAttrib3sARB (will be remapped) */
    "iiii\0"
    "glVertexAttrib3s\0"
    "glVertexAttrib3sARB\0"
    "\0"
-   /* _mesa_function_pool[25128]: ReplacementCodeuiNormal3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[25181]: ReplacementCodeuiNormal3fVertex3fvSUN (dynamic) */
    "ppp\0"
    "glReplacementCodeuiNormal3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[25173]: Map2d (offset 222) */
+   /* _mesa_function_pool[25226]: Map2d (offset 222) */
    "iddiiddiip\0"
    "glMap2d\0"
    "\0"
-   /* _mesa_function_pool[25193]: Map2f (offset 223) */
+   /* _mesa_function_pool[25246]: Map2f (offset 223) */
    "iffiiffiip\0"
    "glMap2f\0"
    "\0"
-   /* _mesa_function_pool[25213]: ProgramStringARB (will be remapped) */
+   /* _mesa_function_pool[25266]: ProgramStringARB (will be remapped) */
    "iiip\0"
    "glProgramStringARB\0"
    "\0"
-   /* _mesa_function_pool[25238]: Vertex4s (offset 148) */
+   /* _mesa_function_pool[25291]: Vertex4s (offset 148) */
    "iiii\0"
    "glVertex4s\0"
    "\0"
-   /* _mesa_function_pool[25255]: TexCoord4fVertex4fvSUN (dynamic) */
+   /* _mesa_function_pool[25308]: TexCoord4fVertex4fvSUN (dynamic) */
    "pp\0"
    "glTexCoord4fVertex4fvSUN\0"
    "\0"
-   /* _mesa_function_pool[25284]: VertexAttrib3sNV (will be remapped) */
+   /* _mesa_function_pool[25337]: VertexAttrib3sNV (will be remapped) */
    "iiii\0"
    "glVertexAttrib3sNV\0"
    "\0"
-   /* _mesa_function_pool[25309]: VertexAttrib1fNV (will be remapped) */
+   /* _mesa_function_pool[25362]: VertexAttrib1fNV (will be remapped) */
    "if\0"
    "glVertexAttrib1fNV\0"
    "\0"
-   /* _mesa_function_pool[25332]: Vertex4f (offset 144) */
+   /* _mesa_function_pool[25385]: Vertex4f (offset 144) */
    "ffff\0"
    "glVertex4f\0"
    "\0"
-   /* _mesa_function_pool[25349]: EvalCoord1d (offset 228) */
+   /* _mesa_function_pool[25402]: EvalCoord1d (offset 228) */
    "d\0"
    "glEvalCoord1d\0"
    "\0"
-   /* _mesa_function_pool[25366]: Vertex4d (offset 142) */
+   /* _mesa_function_pool[25419]: Vertex4d (offset 142) */
    "dddd\0"
    "glVertex4d\0"
    "\0"
-   /* _mesa_function_pool[25383]: RasterPos4dv (offset 79) */
+   /* _mesa_function_pool[25436]: RasterPos4dv (offset 79) */
    "p\0"
    "glRasterPos4dv\0"
    "\0"
-   /* _mesa_function_pool[25401]: FragmentLightfSGIX (dynamic) */
+   /* _mesa_function_pool[25454]: FragmentLightfSGIX (dynamic) */
    "iif\0"
    "glFragmentLightfSGIX\0"
    "\0"
-   /* _mesa_function_pool[25427]: GetCompressedTexImageARB (will be remapped) */
+   /* _mesa_function_pool[25480]: GetCompressedTexImageARB (will be remapped) */
    "iip\0"
    "glGetCompressedTexImage\0"
    "glGetCompressedTexImageARB\0"
    "\0"
-   /* _mesa_function_pool[25483]: GetTexGenfv (offset 279) */
+   /* _mesa_function_pool[25536]: GetTexGenfv (offset 279) */
    "iip\0"
    "glGetTexGenfv\0"
    "\0"
-   /* _mesa_function_pool[25502]: Vertex4i (offset 146) */
+   /* _mesa_function_pool[25555]: Vertex4i (offset 146) */
    "iiii\0"
    "glVertex4i\0"
    "\0"
-   /* _mesa_function_pool[25519]: VertexWeightPointerEXT (dynamic) */
+   /* _mesa_function_pool[25572]: VertexWeightPointerEXT (dynamic) */
    "iiip\0"
    "glVertexWeightPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[25550]: GetHistogram (offset 361) */
+   /* _mesa_function_pool[25603]: GetHistogram (offset 361) */
    "iiiip\0"
    "glGetHistogram\0"
    "glGetHistogramEXT\0"
    "\0"
-   /* _mesa_function_pool[25590]: ActiveStencilFaceEXT (will be remapped) */
+   /* _mesa_function_pool[25643]: ActiveStencilFaceEXT (will be remapped) */
    "i\0"
    "glActiveStencilFaceEXT\0"
    "\0"
-   /* _mesa_function_pool[25616]: StencilFuncSeparateATI (will be remapped) */
+   /* _mesa_function_pool[25669]: StencilFuncSeparateATI (will be remapped) */
    "iiii\0"
    "glStencilFuncSeparateATI\0"
    "\0"
-   /* _mesa_function_pool[25647]: Materialf (offset 169) */
+   /* _mesa_function_pool[25700]: Materialf (offset 169) */
    "iif\0"
    "glMaterialf\0"
    "\0"
-   /* _mesa_function_pool[25664]: GetShaderSourceARB (will be remapped) */
+   /* _mesa_function_pool[25717]: GetShaderSourceARB (will be remapped) */
    "iipp\0"
    "glGetShaderSource\0"
    "glGetShaderSourceARB\0"
    "\0"
-   /* _mesa_function_pool[25709]: IglooInterfaceSGIX (dynamic) */
+   /* _mesa_function_pool[25762]: IglooInterfaceSGIX (dynamic) */
    "ip\0"
    "glIglooInterfaceSGIX\0"
    "\0"
-   /* _mesa_function_pool[25734]: Materiali (offset 171) */
+   /* _mesa_function_pool[25787]: Materiali (offset 171) */
    "iii\0"
    "glMateriali\0"
    "\0"
-   /* _mesa_function_pool[25751]: VertexAttrib4dNV (will be remapped) */
+   /* _mesa_function_pool[25804]: VertexAttrib4dNV (will be remapped) */
    "idddd\0"
    "glVertexAttrib4dNV\0"
    "\0"
-   /* _mesa_function_pool[25777]: MultiModeDrawElementsIBM (will be remapped) */
+   /* _mesa_function_pool[25830]: MultiModeDrawElementsIBM (will be remapped) */
    "ppipii\0"
    "glMultiModeDrawElementsIBM\0"
    "\0"
-   /* _mesa_function_pool[25812]: Indexsv (offset 51) */
+   /* _mesa_function_pool[25865]: Indexsv (offset 51) */
    "p\0"
    "glIndexsv\0"
    "\0"
-   /* _mesa_function_pool[25825]: MultiTexCoord4svARB (offset 407) */
+   /* _mesa_function_pool[25878]: MultiTexCoord4svARB (offset 407) */
    "ip\0"
    "glMultiTexCoord4sv\0"
    "glMultiTexCoord4svARB\0"
    "\0"
-   /* _mesa_function_pool[25870]: LightModelfv (offset 164) */
+   /* _mesa_function_pool[25923]: LightModelfv (offset 164) */
    "ip\0"
    "glLightModelfv\0"
    "\0"
-   /* _mesa_function_pool[25889]: TexCoord2dv (offset 103) */
+   /* _mesa_function_pool[25942]: TexCoord2dv (offset 103) */
    "p\0"
    "glTexCoord2dv\0"
    "\0"
-   /* _mesa_function_pool[25906]: GenQueriesARB (will be remapped) */
+   /* _mesa_function_pool[25959]: GenQueriesARB (will be remapped) */
    "ip\0"
    "glGenQueries\0"
    "glGenQueriesARB\0"
    "\0"
-   /* _mesa_function_pool[25939]: EvalCoord1dv (offset 229) */
+   /* _mesa_function_pool[25992]: EvalCoord1dv (offset 229) */
    "p\0"
    "glEvalCoord1dv\0"
    "\0"
-   /* _mesa_function_pool[25957]: ReplacementCodeuiVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[26010]: ReplacementCodeuiVertex3fSUN (dynamic) */
    "ifff\0"
    "glReplacementCodeuiVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[25994]: Translated (offset 303) */
+   /* _mesa_function_pool[26047]: Translated (offset 303) */
    "ddd\0"
    "glTranslated\0"
    "\0"
-   /* _mesa_function_pool[26012]: Translatef (offset 304) */
+   /* _mesa_function_pool[26065]: Translatef (offset 304) */
    "fff\0"
    "glTranslatef\0"
    "\0"
-   /* _mesa_function_pool[26030]: StencilMask (offset 209) */
+   /* _mesa_function_pool[26083]: StencilMask (offset 209) */
    "i\0"
    "glStencilMask\0"
    "\0"
-   /* _mesa_function_pool[26047]: Tangent3iEXT (dynamic) */
+   /* _mesa_function_pool[26100]: Tangent3iEXT (dynamic) */
    "iii\0"
    "glTangent3iEXT\0"
    "\0"
-   /* _mesa_function_pool[26067]: GetLightiv (offset 265) */
+   /* _mesa_function_pool[26120]: GetLightiv (offset 265) */
    "iip\0"
    "glGetLightiv\0"
    "\0"
-   /* _mesa_function_pool[26085]: DrawMeshArraysSUN (dynamic) */
+   /* _mesa_function_pool[26138]: DrawMeshArraysSUN (dynamic) */
    "iiii\0"
    "glDrawMeshArraysSUN\0"
    "\0"
-   /* _mesa_function_pool[26111]: IsList (offset 287) */
+   /* _mesa_function_pool[26164]: IsList (offset 287) */
    "i\0"
    "glIsList\0"
    "\0"
-   /* _mesa_function_pool[26123]: IsSync (will be remapped) */
+   /* _mesa_function_pool[26176]: IsSync (will be remapped) */
    "i\0"
    "glIsSync\0"
    "\0"
-   /* _mesa_function_pool[26135]: RenderMode (offset 196) */
+   /* _mesa_function_pool[26188]: RenderMode (offset 196) */
    "i\0"
    "glRenderMode\0"
    "\0"
-   /* _mesa_function_pool[26151]: GetMapControlPointsNV (dynamic) */
+   /* _mesa_function_pool[26204]: GetMapControlPointsNV (dynamic) */
    "iiiiiip\0"
    "glGetMapControlPointsNV\0"
    "\0"
-   /* _mesa_function_pool[26184]: DrawBuffersARB (will be remapped) */
+   /* _mesa_function_pool[26237]: DrawBuffersARB (will be remapped) */
    "ip\0"
    "glDrawBuffers\0"
    "glDrawBuffersARB\0"
    "glDrawBuffersATI\0"
    "\0"
-   /* _mesa_function_pool[26236]: ProgramLocalParameter4fARB (will be remapped) */
+   /* _mesa_function_pool[26289]: ProgramLocalParameter4fARB (will be remapped) */
    "iiffff\0"
    "glProgramLocalParameter4fARB\0"
    "\0"
-   /* _mesa_function_pool[26273]: SpriteParameterivSGIX (dynamic) */
+   /* _mesa_function_pool[26326]: SpriteParameterivSGIX (dynamic) */
    "ip\0"
    "glSpriteParameterivSGIX\0"
    "\0"
-   /* _mesa_function_pool[26301]: ProvokingVertexEXT (will be remapped) */
+   /* _mesa_function_pool[26354]: ProvokingVertexEXT (will be remapped) */
    "i\0"
    "glProvokingVertexEXT\0"
    "glProvokingVertex\0"
    "\0"
-   /* _mesa_function_pool[26343]: MultiTexCoord1fARB (offset 378) */
+   /* _mesa_function_pool[26396]: MultiTexCoord1fARB (offset 378) */
    "if\0"
    "glMultiTexCoord1f\0"
    "glMultiTexCoord1fARB\0"
    "\0"
-   /* _mesa_function_pool[26386]: LoadName (offset 198) */
+   /* _mesa_function_pool[26439]: LoadName (offset 198) */
    "i\0"
    "glLoadName\0"
    "\0"
-   /* _mesa_function_pool[26400]: VertexAttribs4ubvNV (will be remapped) */
+   /* _mesa_function_pool[26453]: VertexAttribs4ubvNV (will be remapped) */
    "iip\0"
    "glVertexAttribs4ubvNV\0"
    "\0"
-   /* _mesa_function_pool[26427]: WeightsvARB (dynamic) */
+   /* _mesa_function_pool[26480]: WeightsvARB (dynamic) */
    "ip\0"
    "glWeightsvARB\0"
    "\0"
-   /* _mesa_function_pool[26445]: Uniform1fvARB (will be remapped) */
+   /* _mesa_function_pool[26498]: Uniform1fvARB (will be remapped) */
    "iip\0"
    "glUniform1fv\0"
    "glUniform1fvARB\0"
    "\0"
-   /* _mesa_function_pool[26479]: CopyTexSubImage1D (offset 325) */
+   /* _mesa_function_pool[26532]: CopyTexSubImage1D (offset 325) */
    "iiiiii\0"
    "glCopyTexSubImage1D\0"
    "glCopyTexSubImage1DEXT\0"
    "\0"
-   /* _mesa_function_pool[26530]: CullFace (offset 152) */
+   /* _mesa_function_pool[26583]: CullFace (offset 152) */
    "i\0"
    "glCullFace\0"
    "\0"
-   /* _mesa_function_pool[26544]: BindTexture (offset 307) */
+   /* _mesa_function_pool[26597]: BindTexture (offset 307) */
    "ii\0"
    "glBindTexture\0"
    "glBindTextureEXT\0"
    "\0"
-   /* _mesa_function_pool[26579]: BeginFragmentShaderATI (will be remapped) */
+   /* _mesa_function_pool[26632]: BeginFragmentShaderATI (will be remapped) */
    "\0"
    "glBeginFragmentShaderATI\0"
    "\0"
-   /* _mesa_function_pool[26606]: MultiTexCoord4fARB (offset 402) */
+   /* _mesa_function_pool[26659]: MultiTexCoord4fARB (offset 402) */
    "iffff\0"
    "glMultiTexCoord4f\0"
    "glMultiTexCoord4fARB\0"
    "\0"
-   /* _mesa_function_pool[26652]: VertexAttribs3svNV (will be remapped) */
+   /* _mesa_function_pool[26705]: VertexAttribs3svNV (will be remapped) */
    "iip\0"
    "glVertexAttribs3svNV\0"
    "\0"
-   /* _mesa_function_pool[26678]: StencilFunc (offset 243) */
+   /* _mesa_function_pool[26731]: StencilFunc (offset 243) */
    "iii\0"
    "glStencilFunc\0"
    "\0"
-   /* _mesa_function_pool[26697]: CopyPixels (offset 255) */
+   /* _mesa_function_pool[26750]: CopyPixels (offset 255) */
    "iiiii\0"
    "glCopyPixels\0"
    "\0"
-   /* _mesa_function_pool[26717]: Rectsv (offset 93) */
+   /* _mesa_function_pool[26770]: Rectsv (offset 93) */
    "pp\0"
    "glRectsv\0"
    "\0"
-   /* _mesa_function_pool[26730]: ReplacementCodeuivSUN (dynamic) */
+   /* _mesa_function_pool[26783]: ReplacementCodeuivSUN (dynamic) */
    "p\0"
    "glReplacementCodeuivSUN\0"
    "\0"
-   /* _mesa_function_pool[26757]: EnableVertexAttribArrayARB (will be remapped) */
+   /* _mesa_function_pool[26810]: EnableVertexAttribArrayARB (will be remapped) */
    "i\0"
    "glEnableVertexAttribArray\0"
    "glEnableVertexAttribArrayARB\0"
    "\0"
-   /* _mesa_function_pool[26815]: NormalPointervINTEL (dynamic) */
+   /* _mesa_function_pool[26868]: NormalPointervINTEL (dynamic) */
    "ip\0"
    "glNormalPointervINTEL\0"
    "\0"
-   /* _mesa_function_pool[26841]: CopyConvolutionFilter2D (offset 355) */
+   /* _mesa_function_pool[26894]: CopyConvolutionFilter2D (offset 355) */
    "iiiiii\0"
    "glCopyConvolutionFilter2D\0"
    "glCopyConvolutionFilter2DEXT\0"
    "\0"
-   /* _mesa_function_pool[26904]: WindowPos3ivMESA (will be remapped) */
+   /* _mesa_function_pool[26957]: WindowPos3ivMESA (will be remapped) */
    "p\0"
    "glWindowPos3iv\0"
    "glWindowPos3ivARB\0"
    "glWindowPos3ivMESA\0"
    "\0"
-   /* _mesa_function_pool[26959]: CopyBufferSubData (will be remapped) */
+   /* _mesa_function_pool[27012]: CopyBufferSubData (will be remapped) */
    "iiiii\0"
    "glCopyBufferSubData\0"
    "\0"
-   /* _mesa_function_pool[26986]: NormalPointer (offset 318) */
+   /* _mesa_function_pool[27039]: NormalPointer (offset 318) */
    "iip\0"
    "glNormalPointer\0"
    "\0"
-   /* _mesa_function_pool[27007]: TexParameterfv (offset 179) */
+   /* _mesa_function_pool[27060]: TexParameterfv (offset 179) */
    "iip\0"
    "glTexParameterfv\0"
    "\0"
-   /* _mesa_function_pool[27029]: IsBufferARB (will be remapped) */
+   /* _mesa_function_pool[27082]: IsBufferARB (will be remapped) */
    "i\0"
    "glIsBuffer\0"
    "glIsBufferARB\0"
    "\0"
-   /* _mesa_function_pool[27057]: WindowPos4iMESA (will be remapped) */
+   /* _mesa_function_pool[27110]: WindowPos4iMESA (will be remapped) */
    "iiii\0"
    "glWindowPos4iMESA\0"
    "\0"
-   /* _mesa_function_pool[27081]: VertexAttrib4uivARB (will be remapped) */
+   /* _mesa_function_pool[27134]: VertexAttrib4uivARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4uiv\0"
    "glVertexAttrib4uivARB\0"
    "\0"
-   /* _mesa_function_pool[27126]: Tangent3bvEXT (dynamic) */
+   /* _mesa_function_pool[27179]: Tangent3bvEXT (dynamic) */
    "p\0"
    "glTangent3bvEXT\0"
    "\0"
-   /* _mesa_function_pool[27145]: UniformMatrix3x4fv (will be remapped) */
+   /* _mesa_function_pool[27198]: UniformMatrix3x4fv (will be remapped) */
    "iiip\0"
    "glUniformMatrix3x4fv\0"
    "\0"
-   /* _mesa_function_pool[27172]: ClipPlane (offset 150) */
+   /* _mesa_function_pool[27225]: ClipPlane (offset 150) */
    "ip\0"
    "glClipPlane\0"
    "\0"
-   /* _mesa_function_pool[27188]: Recti (offset 90) */
+   /* _mesa_function_pool[27241]: Recti (offset 90) */
    "iiii\0"
    "glRecti\0"
    "\0"
-   /* _mesa_function_pool[27202]: DrawRangeElementsBaseVertex (will be remapped) */
+   /* _mesa_function_pool[27255]: DrawRangeElementsBaseVertex (will be remapped) */
    "iiiiipi\0"
    "glDrawRangeElementsBaseVertex\0"
    "\0"
-   /* _mesa_function_pool[27241]: TexCoordPointervINTEL (dynamic) */
+   /* _mesa_function_pool[27294]: TexCoordPointervINTEL (dynamic) */
    "iip\0"
    "glTexCoordPointervINTEL\0"
    "\0"
-   /* _mesa_function_pool[27270]: DeleteBuffersARB (will be remapped) */
+   /* _mesa_function_pool[27323]: DeleteBuffersARB (will be remapped) */
    "ip\0"
    "glDeleteBuffers\0"
    "glDeleteBuffersARB\0"
    "\0"
-   /* _mesa_function_pool[27309]: WindowPos4fvMESA (will be remapped) */
+   /* _mesa_function_pool[27362]: WindowPos4fvMESA (will be remapped) */
    "p\0"
    "glWindowPos4fvMESA\0"
    "\0"
-   /* _mesa_function_pool[27331]: GetPixelMapuiv (offset 272) */
+   /* _mesa_function_pool[27384]: GetPixelMapuiv (offset 272) */
    "ip\0"
    "glGetPixelMapuiv\0"
    "\0"
-   /* _mesa_function_pool[27352]: Rectf (offset 88) */
+   /* _mesa_function_pool[27405]: Rectf (offset 88) */
    "ffff\0"
    "glRectf\0"
    "\0"
-   /* _mesa_function_pool[27366]: VertexAttrib1sNV (will be remapped) */
+   /* _mesa_function_pool[27419]: VertexAttrib1sNV (will be remapped) */
    "ii\0"
    "glVertexAttrib1sNV\0"
    "\0"
-   /* _mesa_function_pool[27389]: Indexfv (offset 47) */
+   /* _mesa_function_pool[27442]: Indexfv (offset 47) */
    "p\0"
    "glIndexfv\0"
    "\0"
-   /* _mesa_function_pool[27402]: SecondaryColor3svEXT (will be remapped) */
+   /* _mesa_function_pool[27455]: SecondaryColor3svEXT (will be remapped) */
    "p\0"
    "glSecondaryColor3sv\0"
    "glSecondaryColor3svEXT\0"
    "\0"
-   /* _mesa_function_pool[27448]: LoadTransposeMatrixfARB (will be remapped) */
+   /* _mesa_function_pool[27501]: LoadTransposeMatrixfARB (will be remapped) */
    "p\0"
    "glLoadTransposeMatrixf\0"
    "glLoadTransposeMatrixfARB\0"
    "\0"
-   /* _mesa_function_pool[27500]: GetPointerv (offset 329) */
+   /* _mesa_function_pool[27553]: GetPointerv (offset 329) */
    "ip\0"
    "glGetPointerv\0"
    "glGetPointervEXT\0"
    "\0"
-   /* _mesa_function_pool[27535]: Tangent3bEXT (dynamic) */
+   /* _mesa_function_pool[27588]: Tangent3bEXT (dynamic) */
    "iii\0"
    "glTangent3bEXT\0"
    "\0"
-   /* _mesa_function_pool[27555]: CombinerParameterfNV (will be remapped) */
+   /* _mesa_function_pool[27608]: CombinerParameterfNV (will be remapped) */
    "if\0"
    "glCombinerParameterfNV\0"
    "\0"
-   /* _mesa_function_pool[27582]: IndexMask (offset 212) */
+   /* _mesa_function_pool[27635]: IndexMask (offset 212) */
    "i\0"
    "glIndexMask\0"
    "\0"
-   /* _mesa_function_pool[27597]: BindProgramNV (will be remapped) */
+   /* _mesa_function_pool[27650]: BindProgramNV (will be remapped) */
    "ii\0"
    "glBindProgramARB\0"
    "glBindProgramNV\0"
    "\0"
-   /* _mesa_function_pool[27634]: VertexAttrib4svARB (will be remapped) */
+   /* _mesa_function_pool[27687]: VertexAttrib4svARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4sv\0"
    "glVertexAttrib4svARB\0"
    "\0"
-   /* _mesa_function_pool[27677]: GetFloatv (offset 262) */
+   /* _mesa_function_pool[27730]: GetFloatv (offset 262) */
    "ip\0"
    "glGetFloatv\0"
    "\0"
-   /* _mesa_function_pool[27693]: CreateDebugObjectMESA (dynamic) */
+   /* _mesa_function_pool[27746]: CreateDebugObjectMESA (dynamic) */
    "\0"
    "glCreateDebugObjectMESA\0"
    "\0"
-   /* _mesa_function_pool[27719]: GetShaderiv (will be remapped) */
+   /* _mesa_function_pool[27772]: GetShaderiv (will be remapped) */
    "iip\0"
    "glGetShaderiv\0"
    "\0"
-   /* _mesa_function_pool[27738]: ClientWaitSync (will be remapped) */
+   /* _mesa_function_pool[27791]: ClientWaitSync (will be remapped) */
    "iii\0"
    "glClientWaitSync\0"
    "\0"
-   /* _mesa_function_pool[27760]: TexCoord4s (offset 124) */
+   /* _mesa_function_pool[27813]: TexCoord4s (offset 124) */
    "iiii\0"
    "glTexCoord4s\0"
    "\0"
-   /* _mesa_function_pool[27779]: TexCoord3sv (offset 117) */
+   /* _mesa_function_pool[27832]: TexCoord3sv (offset 117) */
    "p\0"
    "glTexCoord3sv\0"
    "\0"
-   /* _mesa_function_pool[27796]: BindFragmentShaderATI (will be remapped) */
+   /* _mesa_function_pool[27849]: BindFragmentShaderATI (will be remapped) */
    "i\0"
    "glBindFragmentShaderATI\0"
    "\0"
-   /* _mesa_function_pool[27823]: PopAttrib (offset 218) */
+   /* _mesa_function_pool[27876]: PopAttrib (offset 218) */
    "\0"
    "glPopAttrib\0"
    "\0"
-   /* _mesa_function_pool[27837]: Fogfv (offset 154) */
+   /* _mesa_function_pool[27890]: Fogfv (offset 154) */
    "ip\0"
    "glFogfv\0"
    "\0"
-   /* _mesa_function_pool[27849]: UnmapBufferARB (will be remapped) */
+   /* _mesa_function_pool[27902]: UnmapBufferARB (will be remapped) */
    "i\0"
    "glUnmapBuffer\0"
    "glUnmapBufferARB\0"
    "\0"
-   /* _mesa_function_pool[27883]: InitNames (offset 197) */
+   /* _mesa_function_pool[27936]: InitNames (offset 197) */
    "\0"
    "glInitNames\0"
    "\0"
-   /* _mesa_function_pool[27897]: Normal3sv (offset 61) */
+   /* _mesa_function_pool[27950]: Normal3sv (offset 61) */
    "p\0"
    "glNormal3sv\0"
    "\0"
-   /* _mesa_function_pool[27912]: Minmax (offset 368) */
+   /* _mesa_function_pool[27965]: Minmax (offset 368) */
    "iii\0"
    "glMinmax\0"
    "glMinmaxEXT\0"
    "\0"
-   /* _mesa_function_pool[27938]: TexCoord4d (offset 118) */
+   /* _mesa_function_pool[27991]: TexCoord4d (offset 118) */
    "dddd\0"
    "glTexCoord4d\0"
    "\0"
-   /* _mesa_function_pool[27957]: TexCoord4f (offset 120) */
+   /* _mesa_function_pool[28010]: DeformationMap3dSGIX (dynamic) */
+   "iddiiddiiddiip\0"
+   "glDeformationMap3dSGIX\0"
+   "\0"
+   /* _mesa_function_pool[28049]: TexCoord4f (offset 120) */
    "ffff\0"
    "glTexCoord4f\0"
    "\0"
-   /* _mesa_function_pool[27976]: FogCoorddvEXT (will be remapped) */
+   /* _mesa_function_pool[28068]: FogCoorddvEXT (will be remapped) */
    "p\0"
    "glFogCoorddv\0"
    "glFogCoorddvEXT\0"
    "\0"
-   /* _mesa_function_pool[28008]: FinishTextureSUNX (dynamic) */
+   /* _mesa_function_pool[28100]: FinishTextureSUNX (dynamic) */
    "\0"
    "glFinishTextureSUNX\0"
    "\0"
-   /* _mesa_function_pool[28030]: GetFragmentLightfvSGIX (dynamic) */
+   /* _mesa_function_pool[28122]: GetFragmentLightfvSGIX (dynamic) */
    "iip\0"
    "glGetFragmentLightfvSGIX\0"
    "\0"
-   /* _mesa_function_pool[28060]: Binormal3fvEXT (dynamic) */
+   /* _mesa_function_pool[28152]: Binormal3fvEXT (dynamic) */
    "p\0"
    "glBinormal3fvEXT\0"
    "\0"
-   /* _mesa_function_pool[28080]: GetBooleanv (offset 258) */
+   /* _mesa_function_pool[28172]: GetBooleanv (offset 258) */
    "ip\0"
    "glGetBooleanv\0"
    "\0"
-   /* _mesa_function_pool[28098]: ColorFragmentOp3ATI (will be remapped) */
+   /* _mesa_function_pool[28190]: ColorFragmentOp3ATI (will be remapped) */
    "iiiiiiiiiiiii\0"
    "glColorFragmentOp3ATI\0"
    "\0"
-   /* _mesa_function_pool[28135]: Hint (offset 158) */
+   /* _mesa_function_pool[28227]: Hint (offset 158) */
    "ii\0"
    "glHint\0"
    "\0"
-   /* _mesa_function_pool[28146]: Color4dv (offset 28) */
+   /* _mesa_function_pool[28238]: Color4dv (offset 28) */
    "p\0"
    "glColor4dv\0"
    "\0"
-   /* _mesa_function_pool[28160]: VertexAttrib2svARB (will be remapped) */
+   /* _mesa_function_pool[28252]: VertexAttrib2svARB (will be remapped) */
    "ip\0"
    "glVertexAttrib2sv\0"
    "glVertexAttrib2svARB\0"
    "\0"
-   /* _mesa_function_pool[28203]: AreProgramsResidentNV (will be remapped) */
+   /* _mesa_function_pool[28295]: AreProgramsResidentNV (will be remapped) */
    "ipp\0"
    "glAreProgramsResidentNV\0"
    "\0"
-   /* _mesa_function_pool[28232]: WindowPos3svMESA (will be remapped) */
+   /* _mesa_function_pool[28324]: WindowPos3svMESA (will be remapped) */
    "p\0"
    "glWindowPos3sv\0"
    "glWindowPos3svARB\0"
    "glWindowPos3svMESA\0"
    "\0"
-   /* _mesa_function_pool[28287]: CopyColorSubTable (offset 347) */
+   /* _mesa_function_pool[28379]: CopyColorSubTable (offset 347) */
    "iiiii\0"
    "glCopyColorSubTable\0"
    "glCopyColorSubTableEXT\0"
    "\0"
-   /* _mesa_function_pool[28337]: WeightdvARB (dynamic) */
+   /* _mesa_function_pool[28429]: WeightdvARB (dynamic) */
    "ip\0"
    "glWeightdvARB\0"
    "\0"
-   /* _mesa_function_pool[28355]: DeleteRenderbuffersEXT (will be remapped) */
+   /* _mesa_function_pool[28447]: DeleteRenderbuffersEXT (will be remapped) */
    "ip\0"
    "glDeleteRenderbuffers\0"
    "glDeleteRenderbuffersEXT\0"
    "\0"
-   /* _mesa_function_pool[28406]: VertexAttrib4NubvARB (will be remapped) */
+   /* _mesa_function_pool[28498]: VertexAttrib4NubvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4Nubv\0"
    "glVertexAttrib4NubvARB\0"
    "\0"
-   /* _mesa_function_pool[28453]: VertexAttrib3dvNV (will be remapped) */
+   /* _mesa_function_pool[28545]: VertexAttrib3dvNV (will be remapped) */
    "ip\0"
    "glVertexAttrib3dvNV\0"
    "\0"
-   /* _mesa_function_pool[28477]: GetObjectParameterfvARB (will be remapped) */
+   /* _mesa_function_pool[28569]: GetObjectParameterfvARB (will be remapped) */
    "iip\0"
    "glGetObjectParameterfvARB\0"
    "\0"
-   /* _mesa_function_pool[28508]: Vertex4iv (offset 147) */
+   /* _mesa_function_pool[28600]: Vertex4iv (offset 147) */
    "p\0"
    "glVertex4iv\0"
    "\0"
-   /* _mesa_function_pool[28523]: GetProgramEnvParameterdvARB (will be remapped) */
+   /* _mesa_function_pool[28615]: GetProgramEnvParameterdvARB (will be remapped) */
    "iip\0"
    "glGetProgramEnvParameterdvARB\0"
    "\0"
-   /* _mesa_function_pool[28558]: TexCoord4dv (offset 119) */
+   /* _mesa_function_pool[28650]: TexCoord4dv (offset 119) */
    "p\0"
    "glTexCoord4dv\0"
    "\0"
-   /* _mesa_function_pool[28575]: LockArraysEXT (will be remapped) */
+   /* _mesa_function_pool[28667]: LockArraysEXT (will be remapped) */
    "ii\0"
    "glLockArraysEXT\0"
    "\0"
-   /* _mesa_function_pool[28595]: Begin (offset 7) */
+   /* _mesa_function_pool[28687]: Begin (offset 7) */
    "i\0"
    "glBegin\0"
    "\0"
-   /* _mesa_function_pool[28606]: LightModeli (offset 165) */
+   /* _mesa_function_pool[28698]: LightModeli (offset 165) */
    "ii\0"
    "glLightModeli\0"
    "\0"
-   /* _mesa_function_pool[28624]: Rectfv (offset 89) */
+   /* _mesa_function_pool[28716]: Rectfv (offset 89) */
    "pp\0"
    "glRectfv\0"
    "\0"
-   /* _mesa_function_pool[28637]: LightModelf (offset 163) */
+   /* _mesa_function_pool[28729]: LightModelf (offset 163) */
    "if\0"
    "glLightModelf\0"
    "\0"
-   /* _mesa_function_pool[28655]: GetTexParameterfv (offset 282) */
+   /* _mesa_function_pool[28747]: GetTexParameterfv (offset 282) */
    "iip\0"
    "glGetTexParameterfv\0"
    "\0"
-   /* _mesa_function_pool[28680]: GetLightfv (offset 264) */
+   /* _mesa_function_pool[28772]: GetLightfv (offset 264) */
    "iip\0"
    "glGetLightfv\0"
    "\0"
-   /* _mesa_function_pool[28698]: PixelTransformParameterivEXT (dynamic) */
+   /* _mesa_function_pool[28790]: PixelTransformParameterivEXT (dynamic) */
    "iip\0"
    "glPixelTransformParameterivEXT\0"
    "\0"
-   /* _mesa_function_pool[28734]: BinormalPointerEXT (dynamic) */
+   /* _mesa_function_pool[28826]: BinormalPointerEXT (dynamic) */
    "iip\0"
    "glBinormalPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[28760]: VertexAttrib1dNV (will be remapped) */
+   /* _mesa_function_pool[28852]: VertexAttrib1dNV (will be remapped) */
    "id\0"
    "glVertexAttrib1dNV\0"
    "\0"
-   /* _mesa_function_pool[28783]: GetCombinerInputParameterivNV (will be remapped) */
+   /* _mesa_function_pool[28875]: GetCombinerInputParameterivNV (will be remapped) */
    "iiiip\0"
    "glGetCombinerInputParameterivNV\0"
    "\0"
-   /* _mesa_function_pool[28822]: Disable (offset 214) */
+   /* _mesa_function_pool[28914]: Disable (offset 214) */
    "i\0"
    "glDisable\0"
    "\0"
-   /* _mesa_function_pool[28835]: MultiTexCoord2fvARB (offset 387) */
+   /* _mesa_function_pool[28927]: MultiTexCoord2fvARB (offset 387) */
    "ip\0"
    "glMultiTexCoord2fv\0"
    "glMultiTexCoord2fvARB\0"
    "\0"
-   /* _mesa_function_pool[28880]: GetRenderbufferParameterivEXT (will be remapped) */
+   /* _mesa_function_pool[28972]: GetRenderbufferParameterivEXT (will be remapped) */
    "iip\0"
    "glGetRenderbufferParameteriv\0"
    "glGetRenderbufferParameterivEXT\0"
    "\0"
-   /* _mesa_function_pool[28946]: CombinerParameterivNV (will be remapped) */
+   /* _mesa_function_pool[29038]: CombinerParameterivNV (will be remapped) */
    "ip\0"
    "glCombinerParameterivNV\0"
    "\0"
-   /* _mesa_function_pool[28974]: GenFragmentShadersATI (will be remapped) */
+   /* _mesa_function_pool[29066]: GenFragmentShadersATI (will be remapped) */
    "i\0"
    "glGenFragmentShadersATI\0"
    "\0"
-   /* _mesa_function_pool[29001]: DrawArrays (offset 310) */
+   /* _mesa_function_pool[29093]: DrawArrays (offset 310) */
    "iii\0"
    "glDrawArrays\0"
    "glDrawArraysEXT\0"
    "\0"
-   /* _mesa_function_pool[29035]: WeightuivARB (dynamic) */
+   /* _mesa_function_pool[29127]: WeightuivARB (dynamic) */
    "ip\0"
    "glWeightuivARB\0"
    "\0"
-   /* _mesa_function_pool[29054]: VertexAttrib2sARB (will be remapped) */
+   /* _mesa_function_pool[29146]: VertexAttrib2sARB (will be remapped) */
    "iii\0"
    "glVertexAttrib2s\0"
    "glVertexAttrib2sARB\0"
    "\0"
-   /* _mesa_function_pool[29096]: ColorMask (offset 210) */
+   /* _mesa_function_pool[29188]: ColorMask (offset 210) */
    "iiii\0"
    "glColorMask\0"
    "\0"
-   /* _mesa_function_pool[29114]: GenAsyncMarkersSGIX (dynamic) */
+   /* _mesa_function_pool[29206]: GenAsyncMarkersSGIX (dynamic) */
    "i\0"
    "glGenAsyncMarkersSGIX\0"
    "\0"
-   /* _mesa_function_pool[29139]: Tangent3svEXT (dynamic) */
+   /* _mesa_function_pool[29231]: Tangent3svEXT (dynamic) */
    "p\0"
    "glTangent3svEXT\0"
    "\0"
-   /* _mesa_function_pool[29158]: GetListParameterivSGIX (dynamic) */
+   /* _mesa_function_pool[29250]: GetListParameterivSGIX (dynamic) */
    "iip\0"
    "glGetListParameterivSGIX\0"
    "\0"
-   /* _mesa_function_pool[29188]: BindBufferARB (will be remapped) */
+   /* _mesa_function_pool[29280]: BindBufferARB (will be remapped) */
    "ii\0"
    "glBindBuffer\0"
    "glBindBufferARB\0"
    "\0"
-   /* _mesa_function_pool[29221]: GetInfoLogARB (will be remapped) */
+   /* _mesa_function_pool[29313]: GetInfoLogARB (will be remapped) */
    "iipp\0"
    "glGetInfoLogARB\0"
    "\0"
-   /* _mesa_function_pool[29243]: RasterPos4iv (offset 83) */
+   /* _mesa_function_pool[29335]: RasterPos4iv (offset 83) */
    "p\0"
    "glRasterPos4iv\0"
    "\0"
-   /* _mesa_function_pool[29261]: Enable (offset 215) */
+   /* _mesa_function_pool[29353]: Enable (offset 215) */
    "i\0"
    "glEnable\0"
    "\0"
-   /* _mesa_function_pool[29273]: LineStipple (offset 167) */
+   /* _mesa_function_pool[29365]: LineStipple (offset 167) */
    "ii\0"
    "glLineStipple\0"
    "\0"
-   /* _mesa_function_pool[29291]: VertexAttribs4svNV (will be remapped) */
+   /* _mesa_function_pool[29383]: VertexAttribs4svNV (will be remapped) */
    "iip\0"
    "glVertexAttribs4svNV\0"
    "\0"
-   /* _mesa_function_pool[29317]: EdgeFlagPointerListIBM (dynamic) */
+   /* _mesa_function_pool[29409]: EdgeFlagPointerListIBM (dynamic) */
    "ipi\0"
    "glEdgeFlagPointerListIBM\0"
    "\0"
-   /* _mesa_function_pool[29347]: UniformMatrix3x2fv (will be remapped) */
+   /* _mesa_function_pool[29439]: UniformMatrix3x2fv (will be remapped) */
    "iiip\0"
    "glUniformMatrix3x2fv\0"
    "\0"
-   /* _mesa_function_pool[29374]: GetMinmaxParameterfv (offset 365) */
+   /* _mesa_function_pool[29466]: GetMinmaxParameterfv (offset 365) */
    "iip\0"
    "glGetMinmaxParameterfv\0"
    "glGetMinmaxParameterfvEXT\0"
    "\0"
-   /* _mesa_function_pool[29428]: VertexAttrib1fvARB (will be remapped) */
+   /* _mesa_function_pool[29520]: VertexAttrib1fvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib1fv\0"
    "glVertexAttrib1fvARB\0"
    "\0"
-   /* _mesa_function_pool[29471]: GenBuffersARB (will be remapped) */
+   /* _mesa_function_pool[29563]: GenBuffersARB (will be remapped) */
    "ip\0"
    "glGenBuffers\0"
    "glGenBuffersARB\0"
    "\0"
-   /* _mesa_function_pool[29504]: VertexAttribs1svNV (will be remapped) */
+   /* _mesa_function_pool[29596]: VertexAttribs1svNV (will be remapped) */
    "iip\0"
    "glVertexAttribs1svNV\0"
    "\0"
-   /* _mesa_function_pool[29530]: Vertex3fv (offset 137) */
+   /* _mesa_function_pool[29622]: Vertex3fv (offset 137) */
    "p\0"
    "glVertex3fv\0"
    "\0"
-   /* _mesa_function_pool[29545]: GetTexBumpParameterivATI (will be remapped) */
+   /* _mesa_function_pool[29637]: GetTexBumpParameterivATI (will be remapped) */
    "ip\0"
    "glGetTexBumpParameterivATI\0"
    "\0"
-   /* _mesa_function_pool[29576]: Binormal3bEXT (dynamic) */
+   /* _mesa_function_pool[29668]: Binormal3bEXT (dynamic) */
    "iii\0"
    "glBinormal3bEXT\0"
    "\0"
-   /* _mesa_function_pool[29597]: FragmentMaterialivSGIX (dynamic) */
+   /* _mesa_function_pool[29689]: FragmentMaterialivSGIX (dynamic) */
    "iip\0"
    "glFragmentMaterialivSGIX\0"
    "\0"
-   /* _mesa_function_pool[29627]: IsRenderbufferEXT (will be remapped) */
+   /* _mesa_function_pool[29719]: IsRenderbufferEXT (will be remapped) */
    "i\0"
    "glIsRenderbuffer\0"
    "glIsRenderbufferEXT\0"
    "\0"
-   /* _mesa_function_pool[29667]: GenProgramsNV (will be remapped) */
+   /* _mesa_function_pool[29759]: GenProgramsNV (will be remapped) */
    "ip\0"
    "glGenProgramsARB\0"
    "glGenProgramsNV\0"
    "\0"
-   /* _mesa_function_pool[29704]: VertexAttrib4dvNV (will be remapped) */
+   /* _mesa_function_pool[29796]: VertexAttrib4dvNV (will be remapped) */
    "ip\0"
    "glVertexAttrib4dvNV\0"
    "\0"
-   /* _mesa_function_pool[29728]: EndFragmentShaderATI (will be remapped) */
+   /* _mesa_function_pool[29820]: EndFragmentShaderATI (will be remapped) */
    "\0"
    "glEndFragmentShaderATI\0"
    "\0"
-   /* _mesa_function_pool[29753]: Binormal3iEXT (dynamic) */
+   /* _mesa_function_pool[29845]: Binormal3iEXT (dynamic) */
    "iii\0"
    "glBinormal3iEXT\0"
    "\0"
-   /* _mesa_function_pool[29774]: WindowPos2fMESA (will be remapped) */
+   /* _mesa_function_pool[29866]: WindowPos2fMESA (will be remapped) */
    "ff\0"
    "glWindowPos2f\0"
    "glWindowPos2fARB\0"
@@ -4374,402 +4386,405 @@ static const struct {
    GLint remap_index;
 } MESA_remap_table_functions[] = {
    {  1461, AttachShader_remap_index },
-   {  8764, CreateProgram_remap_index },
-   { 20335, CreateShader_remap_index },
-   { 22665, DeleteProgram_remap_index },
-   { 16315, DeleteShader_remap_index },
-   { 20781, DetachShader_remap_index },
-   { 15839, GetAttachedShaders_remap_index },
+   {  8794, CreateProgram_remap_index },
+   { 20420, CreateShader_remap_index },
+   { 22750, DeleteProgram_remap_index },
+   { 16372, DeleteShader_remap_index },
+   { 20866, DetachShader_remap_index },
+   { 15896, GetAttachedShaders_remap_index },
    {  4275, GetProgramInfoLog_remap_index },
    {   361, GetProgramiv_remap_index },
-   {  5578, GetShaderInfoLog_remap_index },
-   { 27719, GetShaderiv_remap_index },
-   { 11854, IsProgram_remap_index },
-   { 10889, IsShader_remap_index },
-   {  8868, StencilFuncSeparate_remap_index },
+   {  5608, GetShaderInfoLog_remap_index },
+   { 27772, GetShaderiv_remap_index },
+   { 11879, IsProgram_remap_index },
+   { 10914, IsShader_remap_index },
+   {  8898, StencilFuncSeparate_remap_index },
    {  3487, StencilMaskSeparate_remap_index },
-   {  6654, StencilOpSeparate_remap_index },
-   { 19686, UniformMatrix2x3fv_remap_index },
+   {  6684, StencilOpSeparate_remap_index },
+   { 19771, UniformMatrix2x3fv_remap_index },
    {  2615, UniformMatrix2x4fv_remap_index },
-   { 29347, UniformMatrix3x2fv_remap_index },
-   { 27145, UniformMatrix3x4fv_remap_index },
-   { 14387, UniformMatrix4x2fv_remap_index },
+   { 29439, UniformMatrix3x2fv_remap_index },
+   { 27198, UniformMatrix3x4fv_remap_index },
+   { 14444, UniformMatrix4x2fv_remap_index },
    {  2937, UniformMatrix4x3fv_remap_index },
-   {  8782, LoadTransposeMatrixdARB_remap_index },
-   { 27448, LoadTransposeMatrixfARB_remap_index },
+   {  8812, LoadTransposeMatrixdARB_remap_index },
+   { 27501, LoadTransposeMatrixfARB_remap_index },
    {  4848, MultTransposeMatrixdARB_remap_index },
-   { 20968, MultTransposeMatrixfARB_remap_index },
+   { 21053, MultTransposeMatrixfARB_remap_index },
    {   172, SampleCoverageARB_remap_index },
-   {  5002, CompressedTexImage1DARB_remap_index },
-   { 21468, CompressedTexImage2DARB_remap_index },
+   {  5032, CompressedTexImage1DARB_remap_index },
+   { 21553, CompressedTexImage2DARB_remap_index },
    {  3550, CompressedTexImage3DARB_remap_index },
-   { 16131, CompressedTexSubImage1DARB_remap_index },
+   { 16188, CompressedTexSubImage1DARB_remap_index },
    {  1880, CompressedTexSubImage2DARB_remap_index },
-   { 17923, CompressedTexSubImage3DARB_remap_index },
-   { 25427, GetCompressedTexImageARB_remap_index },
+   { 18008, CompressedTexSubImage3DARB_remap_index },
+   { 25480, GetCompressedTexImageARB_remap_index },
    {  3395, DisableVertexAttribArrayARB_remap_index },
-   { 26757, EnableVertexAttribArrayARB_remap_index },
-   { 28523, GetProgramEnvParameterdvARB_remap_index },
-   { 20848, GetProgramEnvParameterfvARB_remap_index },
-   { 24457, GetProgramLocalParameterdvARB_remap_index },
-   {  7096, GetProgramLocalParameterfvARB_remap_index },
-   { 16222, GetProgramStringARB_remap_index },
-   { 24652, GetProgramivARB_remap_index },
-   { 18118, GetVertexAttribdvARB_remap_index },
-   { 14276, GetVertexAttribfvARB_remap_index },
-   {  8677, GetVertexAttribivARB_remap_index },
-   { 17027, ProgramEnvParameter4dARB_remap_index },
-   { 22438, ProgramEnvParameter4dvARB_remap_index },
-   { 14884, ProgramEnvParameter4fARB_remap_index },
-   {  7959, ProgramEnvParameter4fvARB_remap_index },
+   { 26810, EnableVertexAttribArrayARB_remap_index },
+   { 28615, GetProgramEnvParameterdvARB_remap_index },
+   { 20933, GetProgramEnvParameterfvARB_remap_index },
+   { 24510, GetProgramLocalParameterdvARB_remap_index },
+   {  7126, GetProgramLocalParameterfvARB_remap_index },
+   { 16279, GetProgramStringARB_remap_index },
+   { 24705, GetProgramivARB_remap_index },
+   { 18203, GetVertexAttribdvARB_remap_index },
+   { 14333, GetVertexAttribfvARB_remap_index },
+   {  8707, GetVertexAttribivARB_remap_index },
+   { 17084, ProgramEnvParameter4dARB_remap_index },
+   { 22523, ProgramEnvParameter4dvARB_remap_index },
+   { 14941, ProgramEnvParameter4fARB_remap_index },
+   {  7989, ProgramEnvParameter4fvARB_remap_index },
    {  3513, ProgramLocalParameter4dARB_remap_index },
-   { 11564, ProgramLocalParameter4dvARB_remap_index },
-   { 26236, ProgramLocalParameter4fARB_remap_index },
-   { 22983, ProgramLocalParameter4fvARB_remap_index },
-   { 25213, ProgramStringARB_remap_index },
-   { 17277, VertexAttrib1dARB_remap_index },
-   { 13930, VertexAttrib1dvARB_remap_index },
+   { 11589, ProgramLocalParameter4dvARB_remap_index },
+   { 26289, ProgramLocalParameter4fARB_remap_index },
+   { 23068, ProgramLocalParameter4fvARB_remap_index },
+   { 25266, ProgramStringARB_remap_index },
+   { 17334, VertexAttrib1dARB_remap_index },
+   { 13987, VertexAttrib1dvARB_remap_index },
    {  3688, VertexAttrib1fARB_remap_index },
-   { 29428, VertexAttrib1fvARB_remap_index },
-   {  6180, VertexAttrib1sARB_remap_index },
+   { 29520, VertexAttrib1fvARB_remap_index },
+   {  6210, VertexAttrib1sARB_remap_index },
    {  2054, VertexAttrib1svARB_remap_index },
-   { 13361, VertexAttrib2dARB_remap_index },
-   { 15458, VertexAttrib2dvARB_remap_index },
+   { 13418, VertexAttrib2dARB_remap_index },
+   { 15515, VertexAttrib2dvARB_remap_index },
    {  1480, VertexAttrib2fARB_remap_index },
-   { 15571, VertexAttrib2fvARB_remap_index },
-   { 29054, VertexAttrib2sARB_remap_index },
-   { 28160, VertexAttrib2svARB_remap_index },
-   { 10015, VertexAttrib3dARB_remap_index },
-   {  7662, VertexAttrib3dvARB_remap_index },
+   { 15628, VertexAttrib2fvARB_remap_index },
+   { 29146, VertexAttrib2sARB_remap_index },
+   { 28252, VertexAttrib2svARB_remap_index },
+   { 10045, VertexAttrib3dARB_remap_index },
+   {  7692, VertexAttrib3dvARB_remap_index },
    {  1567, VertexAttrib3fARB_remap_index },
-   { 19923, VertexAttrib3fvARB_remap_index },
-   { 25085, VertexAttrib3sARB_remap_index },
-   { 17860, VertexAttrib3svARB_remap_index },
+   { 20008, VertexAttrib3fvARB_remap_index },
+   { 25138, VertexAttrib3sARB_remap_index },
+   { 17945, VertexAttrib3svARB_remap_index },
    {  4301, VertexAttrib4NbvARB_remap_index },
-   { 15794, VertexAttrib4NivARB_remap_index },
-   { 19878, VertexAttrib4NsvARB_remap_index },
-   { 20800, VertexAttrib4NubARB_remap_index },
-   { 28406, VertexAttrib4NubvARB_remap_index },
-   { 16688, VertexAttrib4NuivARB_remap_index },
+   { 15851, VertexAttrib4NivARB_remap_index },
+   { 19963, VertexAttrib4NsvARB_remap_index },
+   { 20885, VertexAttrib4NubARB_remap_index },
+   { 28498, VertexAttrib4NubvARB_remap_index },
+   { 16745, VertexAttrib4NuivARB_remap_index },
    {  2810, VertexAttrib4NusvARB_remap_index },
-   {  9609, VertexAttrib4bvARB_remap_index },
-   { 23865, VertexAttrib4dARB_remap_index },
-   { 18843, VertexAttrib4dvARB_remap_index },
-   { 10122, VertexAttrib4fARB_remap_index },
-   { 10492, VertexAttrib4fvARB_remap_index },
-   {  9061, VertexAttrib4ivARB_remap_index },
-   { 15272, VertexAttrib4sARB_remap_index },
-   { 27634, VertexAttrib4svARB_remap_index },
-   { 14689, VertexAttrib4ubvARB_remap_index },
-   { 27081, VertexAttrib4uivARB_remap_index },
-   { 17671, VertexAttrib4usvARB_remap_index },
-   { 19560, VertexAttribPointerARB_remap_index },
-   { 29188, BindBufferARB_remap_index },
-   {  5893, BufferDataARB_remap_index },
+   {  9639, VertexAttrib4bvARB_remap_index },
+   { 23918, VertexAttrib4dARB_remap_index },
+   { 18928, VertexAttrib4dvARB_remap_index },
+   { 10152, VertexAttrib4fARB_remap_index },
+   { 10556, VertexAttrib4fvARB_remap_index },
+   {  9091, VertexAttrib4ivARB_remap_index },
+   { 15329, VertexAttrib4sARB_remap_index },
+   { 27687, VertexAttrib4svARB_remap_index },
+   { 14746, VertexAttrib4ubvARB_remap_index },
+   { 27134, VertexAttrib4uivARB_remap_index },
+   { 17756, VertexAttrib4usvARB_remap_index },
+   { 19645, VertexAttribPointerARB_remap_index },
+   { 29280, BindBufferARB_remap_index },
+   {  5923, BufferDataARB_remap_index },
    {  1382, BufferSubDataARB_remap_index },
-   { 27270, DeleteBuffersARB_remap_index },
-   { 29471, GenBuffersARB_remap_index },
-   { 15614, GetBufferParameterivARB_remap_index },
-   { 14836, GetBufferPointervARB_remap_index },
+   { 27323, DeleteBuffersARB_remap_index },
+   { 29563, GenBuffersARB_remap_index },
+   { 15671, GetBufferParameterivARB_remap_index },
+   { 14893, GetBufferPointervARB_remap_index },
    {  1335, GetBufferSubDataARB_remap_index },
-   { 27029, IsBufferARB_remap_index },
-   { 23438, MapBufferARB_remap_index },
-   { 27849, UnmapBufferARB_remap_index },
+   { 27082, IsBufferARB_remap_index },
+   { 23523, MapBufferARB_remap_index },
+   { 27902, UnmapBufferARB_remap_index },
    {   268, BeginQueryARB_remap_index },
-   { 17372, DeleteQueriesARB_remap_index },
-   { 10786, EndQueryARB_remap_index },
-   { 25906, GenQueriesARB_remap_index },
+   { 17429, DeleteQueriesARB_remap_index },
+   { 10850, EndQueryARB_remap_index },
+   { 25959, GenQueriesARB_remap_index },
    {  1772, GetQueryObjectivARB_remap_index },
-   { 15316, GetQueryObjectuivARB_remap_index },
+   { 15373, GetQueryObjectuivARB_remap_index },
    {  1624, GetQueryivARB_remap_index },
-   { 17578, IsQueryARB_remap_index },
-   {  7272, AttachObjectARB_remap_index },
-   { 16277, CompileShaderARB_remap_index },
+   { 17663, IsQueryARB_remap_index },
+   {  7302, AttachObjectARB_remap_index },
+   { 16334, CompileShaderARB_remap_index },
    {  2879, CreateProgramObjectARB_remap_index },
-   {  5838, CreateShaderObjectARB_remap_index },
-   { 12778, DeleteObjectARB_remap_index },
-   { 21242, DetachObjectARB_remap_index },
-   { 10564, GetActiveUniformARB_remap_index },
-   {  8380, GetAttachedObjectsARB_remap_index },
-   {  8659, GetHandleARB_remap_index },
-   { 29221, GetInfoLogARB_remap_index },
-   { 28477, GetObjectParameterfvARB_remap_index },
-   { 24331, GetObjectParameterivARB_remap_index },
-   { 25664, GetShaderSourceARB_remap_index },
-   { 24945, GetUniformLocationARB_remap_index },
-   { 21070, GetUniformfvARB_remap_index },
-   { 11186, GetUniformivARB_remap_index },
-   { 17716, LinkProgramARB_remap_index },
-   { 17774, ShaderSourceARB_remap_index },
-   {  6554, Uniform1fARB_remap_index },
-   { 26445, Uniform1fvARB_remap_index },
-   { 19529, Uniform1iARB_remap_index },
-   { 18532, Uniform1ivARB_remap_index },
+   {  5868, CreateShaderObjectARB_remap_index },
+   { 12835, DeleteObjectARB_remap_index },
+   { 21327, DetachObjectARB_remap_index },
+   { 10628, GetActiveUniformARB_remap_index },
+   {  8410, GetAttachedObjectsARB_remap_index },
+   {  8689, GetHandleARB_remap_index },
+   { 29313, GetInfoLogARB_remap_index },
+   { 28569, GetObjectParameterfvARB_remap_index },
+   { 24384, GetObjectParameterivARB_remap_index },
+   { 25717, GetShaderSourceARB_remap_index },
+   { 24998, GetUniformLocationARB_remap_index },
+   { 21155, GetUniformfvARB_remap_index },
+   { 11211, GetUniformivARB_remap_index },
+   { 17801, LinkProgramARB_remap_index },
+   { 17859, ShaderSourceARB_remap_index },
+   {  6584, Uniform1fARB_remap_index },
+   { 26498, Uniform1fvARB_remap_index },
+   { 19614, Uniform1iARB_remap_index },
+   { 18617, Uniform1ivARB_remap_index },
    {  2003, Uniform2fARB_remap_index },
-   { 12614, Uniform2fvARB_remap_index },
-   { 23325, Uniform2iARB_remap_index },
+   { 12671, Uniform2fvARB_remap_index },
+   { 23410, Uniform2iARB_remap_index },
    {  2123, Uniform2ivARB_remap_index },
-   { 16387, Uniform3fARB_remap_index },
-   {  8410, Uniform3fvARB_remap_index },
-   {  5512, Uniform3iARB_remap_index },
-   { 14942, Uniform3ivARB_remap_index },
-   { 16833, Uniform4fARB_remap_index },
-   { 20934, Uniform4fvARB_remap_index },
-   { 22117, Uniform4iARB_remap_index },
-   { 18084, Uniform4ivARB_remap_index },
-   {  7324, UniformMatrix2fvARB_remap_index },
+   { 16444, Uniform3fARB_remap_index },
+   {  8440, Uniform3fvARB_remap_index },
+   {  5542, Uniform3iARB_remap_index },
+   { 14999, Uniform3ivARB_remap_index },
+   { 16890, Uniform4fARB_remap_index },
+   { 21019, Uniform4fvARB_remap_index },
+   { 22202, Uniform4iARB_remap_index },
+   { 18169, Uniform4ivARB_remap_index },
+   {  7354, UniformMatrix2fvARB_remap_index },
    {    17, UniformMatrix3fvARB_remap_index },
    {  2475, UniformMatrix4fvARB_remap_index },
-   { 22550, UseProgramObjectARB_remap_index },
-   { 13049, ValidateProgramARB_remap_index },
-   { 18886, BindAttribLocationARB_remap_index },
+   { 22635, UseProgramObjectARB_remap_index },
+   { 13106, ValidateProgramARB_remap_index },
+   { 18971, BindAttribLocationARB_remap_index },
    {  4346, GetActiveAttribARB_remap_index },
-   { 14623, GetAttribLocationARB_remap_index },
-   { 26184, DrawBuffersARB_remap_index },
-   { 11669, RenderbufferStorageMultisample_remap_index },
-   { 16881, FlushMappedBufferRange_remap_index },
-   { 24748, MapBufferRange_remap_index },
-   { 14498, BindVertexArray_remap_index },
-   { 12908, GenVertexArrays_remap_index },
-   { 26959, CopyBufferSubData_remap_index },
-   { 27738, ClientWaitSync_remap_index },
+   { 14680, GetAttribLocationARB_remap_index },
+   { 26237, DrawBuffersARB_remap_index },
+   { 11694, RenderbufferStorageMultisample_remap_index },
+   { 16938, FlushMappedBufferRange_remap_index },
+   { 24801, MapBufferRange_remap_index },
+   { 14555, BindVertexArray_remap_index },
+   { 12965, GenVertexArrays_remap_index },
+   { 27012, CopyBufferSubData_remap_index },
+   { 27791, ClientWaitSync_remap_index },
    {  2394, DeleteSync_remap_index },
-   {  6221, FenceSync_remap_index },
-   { 13420, GetInteger64v_remap_index },
-   { 19985, GetSynciv_remap_index },
-   { 26123, IsSync_remap_index },
-   {  8328, WaitSync_remap_index },
+   {  6251, FenceSync_remap_index },
+   { 13477, GetInteger64v_remap_index },
+   { 20070, GetSynciv_remap_index },
+   { 26176, IsSync_remap_index },
+   {  8358, WaitSync_remap_index },
    {  3363, DrawElementsBaseVertex_remap_index },
-   { 27202, DrawRangeElementsBaseVertex_remap_index },
-   { 23469, MultiDrawElementsBaseVertex_remap_index },
+   { 27255, DrawRangeElementsBaseVertex_remap_index },
+   { 23554, MultiDrawElementsBaseVertex_remap_index },
    {  4711, PolygonOffsetEXT_remap_index },
-   { 20570, GetPixelTexGenParameterfvSGIS_remap_index },
+   { 20655, GetPixelTexGenParameterfvSGIS_remap_index },
    {  3895, GetPixelTexGenParameterivSGIS_remap_index },
-   { 20303, PixelTexGenParameterfSGIS_remap_index },
+   { 20388, PixelTexGenParameterfSGIS_remap_index },
    {   580, PixelTexGenParameterfvSGIS_remap_index },
-   { 11224, PixelTexGenParameteriSGIS_remap_index },
-   { 12185, PixelTexGenParameterivSGIS_remap_index },
-   { 14586, SampleMaskSGIS_remap_index },
-   { 17518, SamplePatternSGIS_remap_index },
-   { 23398, ColorPointerEXT_remap_index },
-   { 15501, EdgeFlagPointerEXT_remap_index },
-   {  5166, IndexPointerEXT_remap_index },
-   {  5246, NormalPointerEXT_remap_index },
-   { 14014, TexCoordPointerEXT_remap_index },
-   {  6016, VertexPointerEXT_remap_index },
+   { 11249, PixelTexGenParameteriSGIS_remap_index },
+   { 12242, PixelTexGenParameterivSGIS_remap_index },
+   { 14643, SampleMaskSGIS_remap_index },
+   { 17603, SamplePatternSGIS_remap_index },
+   { 23483, ColorPointerEXT_remap_index },
+   { 15558, EdgeFlagPointerEXT_remap_index },
+   {  5196, IndexPointerEXT_remap_index },
+   {  5276, NormalPointerEXT_remap_index },
+   { 14071, TexCoordPointerEXT_remap_index },
+   {  6046, VertexPointerEXT_remap_index },
    {  3165, PointParameterfEXT_remap_index },
-   {  6861, PointParameterfvEXT_remap_index },
-   { 28575, LockArraysEXT_remap_index },
-   { 13113, UnlockArraysEXT_remap_index },
-   {  7868, CullParameterdvEXT_remap_index },
-   { 10359, CullParameterfvEXT_remap_index },
+   {  6891, PointParameterfvEXT_remap_index },
+   { 28667, LockArraysEXT_remap_index },
+   { 13170, UnlockArraysEXT_remap_index },
+   {  7898, CullParameterdvEXT_remap_index },
+   { 10423, CullParameterfvEXT_remap_index },
    {  1151, SecondaryColor3bEXT_remap_index },
-   {  7020, SecondaryColor3bvEXT_remap_index },
-   {  9238, SecondaryColor3dEXT_remap_index },
-   { 22723, SecondaryColor3dvEXT_remap_index },
-   { 24994, SecondaryColor3fEXT_remap_index },
-   { 16067, SecondaryColor3fvEXT_remap_index },
+   {  7050, SecondaryColor3bvEXT_remap_index },
+   {  9268, SecondaryColor3dEXT_remap_index },
+   { 22808, SecondaryColor3dvEXT_remap_index },
+   { 25047, SecondaryColor3fEXT_remap_index },
+   { 16124, SecondaryColor3fvEXT_remap_index },
    {   426, SecondaryColor3iEXT_remap_index },
-   { 14324, SecondaryColor3ivEXT_remap_index },
-   {  8896, SecondaryColor3sEXT_remap_index },
-   { 27402, SecondaryColor3svEXT_remap_index },
-   { 24167, SecondaryColor3ubEXT_remap_index },
-   { 18777, SecondaryColor3ubvEXT_remap_index },
-   { 11419, SecondaryColor3uiEXT_remap_index },
-   { 20190, SecondaryColor3uivEXT_remap_index },
-   { 22935, SecondaryColor3usEXT_remap_index },
-   { 11492, SecondaryColor3usvEXT_remap_index },
-   { 10435, SecondaryColorPointerEXT_remap_index },
-   { 22784, MultiDrawArraysEXT_remap_index },
-   { 18467, MultiDrawElementsEXT_remap_index },
-   { 18662, FogCoordPointerEXT_remap_index },
+   { 14381, SecondaryColor3ivEXT_remap_index },
+   {  8926, SecondaryColor3sEXT_remap_index },
+   { 27455, SecondaryColor3svEXT_remap_index },
+   { 24220, SecondaryColor3ubEXT_remap_index },
+   { 18862, SecondaryColor3ubvEXT_remap_index },
+   { 11444, SecondaryColor3uiEXT_remap_index },
+   { 20275, SecondaryColor3uivEXT_remap_index },
+   { 23020, SecondaryColor3usEXT_remap_index },
+   { 11517, SecondaryColor3usvEXT_remap_index },
+   { 10499, SecondaryColorPointerEXT_remap_index },
+   { 22869, MultiDrawArraysEXT_remap_index },
+   { 18552, MultiDrawElementsEXT_remap_index },
+   { 18747, FogCoordPointerEXT_remap_index },
    {  4044, FogCoorddEXT_remap_index },
-   { 27976, FogCoorddvEXT_remap_index },
+   { 28068, FogCoorddvEXT_remap_index },
    {  4136, FogCoordfEXT_remap_index },
-   { 24090, FogCoordfvEXT_remap_index },
-   { 16785, PixelTexGenSGIX_remap_index },
-   { 24675, BlendFuncSeparateEXT_remap_index },
-   {  5928, FlushVertexArrayRangeNV_remap_index },
+   { 24143, FogCoordfvEXT_remap_index },
+   { 16842, PixelTexGenSGIX_remap_index },
+   { 24728, BlendFuncSeparateEXT_remap_index },
+   {  5958, FlushVertexArrayRangeNV_remap_index },
    {  4660, VertexArrayRangeNV_remap_index },
-   { 25059, CombinerInputNV_remap_index },
+   { 25112, CombinerInputNV_remap_index },
    {  1946, CombinerOutputNV_remap_index },
-   { 27555, CombinerParameterfNV_remap_index },
+   { 27608, CombinerParameterfNV_remap_index },
    {  4580, CombinerParameterfvNV_remap_index },
-   { 19735, CombinerParameteriNV_remap_index },
-   { 28946, CombinerParameterivNV_remap_index },
-   {  6298, FinalCombinerInputNV_remap_index },
-   {  8725, GetCombinerInputParameterfvNV_remap_index },
-   { 28783, GetCombinerInputParameterivNV_remap_index },
-   {  6097, GetCombinerOutputParameterfvNV_remap_index },
-   { 12146, GetCombinerOutputParameterivNV_remap_index },
-   {  5673, GetFinalCombinerInputParameterfvNV_remap_index },
-   { 21989, GetFinalCombinerInputParameterivNV_remap_index },
-   { 11164, ResizeBuffersMESA_remap_index },
-   {  9842, WindowPos2dMESA_remap_index },
+   { 19820, CombinerParameteriNV_remap_index },
+   { 29038, CombinerParameterivNV_remap_index },
+   {  6328, FinalCombinerInputNV_remap_index },
+   {  8755, GetCombinerInputParameterfvNV_remap_index },
+   { 28875, GetCombinerInputParameterivNV_remap_index },
+   {  6127, GetCombinerOutputParameterfvNV_remap_index },
+   { 12171, GetCombinerOutputParameterivNV_remap_index },
+   {  5703, GetFinalCombinerInputParameterfvNV_remap_index },
+   { 22074, GetFinalCombinerInputParameterivNV_remap_index },
+   { 11189, ResizeBuffersMESA_remap_index },
+   {  9872, WindowPos2dMESA_remap_index },
    {   944, WindowPos2dvMESA_remap_index },
-   { 29774, WindowPos2fMESA_remap_index },
-   {  6965, WindowPos2fvMESA_remap_index },
-   { 16014, WindowPos2iMESA_remap_index },
-   { 17991, WindowPos2ivMESA_remap_index },
-   { 18566, WindowPos2sMESA_remap_index },
-   {  4916, WindowPos2svMESA_remap_index },
-   {  6790, WindowPos3dMESA_remap_index },
-   { 12393, WindowPos3dvMESA_remap_index },
+   { 29866, WindowPos2fMESA_remap_index },
+   {  6995, WindowPos2fvMESA_remap_index },
+   { 16071, WindowPos2iMESA_remap_index },
+   { 18076, WindowPos2ivMESA_remap_index },
+   { 18651, WindowPos2sMESA_remap_index },
+   {  4946, WindowPos2svMESA_remap_index },
+   {  6820, WindowPos3dMESA_remap_index },
+   { 12450, WindowPos3dvMESA_remap_index },
    {   472, WindowPos3fMESA_remap_index },
-   { 13174, WindowPos3fvMESA_remap_index },
-   { 21284, WindowPos3iMESA_remap_index },
-   { 26904, WindowPos3ivMESA_remap_index },
-   { 16531, WindowPos3sMESA_remap_index },
-   { 28232, WindowPos3svMESA_remap_index },
-   {  9793, WindowPos4dMESA_remap_index },
-   { 15027, WindowPos4dvMESA_remap_index },
-   { 12352, WindowPos4fMESA_remap_index },
-   { 27309, WindowPos4fvMESA_remap_index },
-   { 27057, WindowPos4iMESA_remap_index },
-   { 11003, WindowPos4ivMESA_remap_index },
-   { 16664, WindowPos4sMESA_remap_index },
+   { 13231, WindowPos3fvMESA_remap_index },
+   { 21369, WindowPos3iMESA_remap_index },
+   { 26957, WindowPos3ivMESA_remap_index },
+   { 16588, WindowPos3sMESA_remap_index },
+   { 28324, WindowPos3svMESA_remap_index },
+   {  9823, WindowPos4dMESA_remap_index },
+   { 15084, WindowPos4dvMESA_remap_index },
+   { 12409, WindowPos4fMESA_remap_index },
+   { 27362, WindowPos4fvMESA_remap_index },
+   { 27110, WindowPos4iMESA_remap_index },
+   { 11028, WindowPos4ivMESA_remap_index },
+   { 16721, WindowPos4sMESA_remap_index },
    {  2857, WindowPos4svMESA_remap_index },
-   { 23833, MultiModeDrawArraysIBM_remap_index },
-   { 25777, MultiModeDrawElementsIBM_remap_index },
-   { 10814, DeleteFencesNV_remap_index },
-   { 24906, FinishFenceNV_remap_index },
+   { 12210, MultiModeDrawArraysIBM_remap_index },
+   { 25830, MultiModeDrawElementsIBM_remap_index },
+   { 10878, DeleteFencesNV_remap_index },
+   { 24959, FinishFenceNV_remap_index },
    {  3287, GenFencesNV_remap_index },
-   { 15007, GetFenceivNV_remap_index },
-   {  7257, IsFenceNV_remap_index },
-   { 12073, SetFenceNV_remap_index },
+   { 15064, GetFenceivNV_remap_index },
+   {  7287, IsFenceNV_remap_index },
+   { 12098, SetFenceNV_remap_index },
    {  3744, TestFenceNV_remap_index },
-   { 28203, AreProgramsResidentNV_remap_index },
-   { 27597, BindProgramNV_remap_index },
-   { 23018, DeleteProgramsNV_remap_index },
-   { 18995, ExecuteProgramNV_remap_index },
-   { 29667, GenProgramsNV_remap_index },
-   { 20649, GetProgramParameterdvNV_remap_index },
-   {  9300, GetProgramParameterfvNV_remap_index },
-   { 23372, GetProgramStringNV_remap_index },
-   { 21678, GetProgramivNV_remap_index },
-   { 20883, GetTrackMatrixivNV_remap_index },
-   { 23168, GetVertexAttribPointervNV_remap_index },
-   { 21922, GetVertexAttribdvNV_remap_index },
-   { 16504, GetVertexAttribfvNV_remap_index },
-   { 16195, GetVertexAttribivNV_remap_index },
-   { 16911, IsProgramNV_remap_index },
-   {  8306, LoadProgramNV_remap_index },
-   { 24771, ProgramParameters4dvNV_remap_index },
-   { 21608, ProgramParameters4fvNV_remap_index },
-   { 18295, RequestResidentProgramsNV_remap_index },
-   { 19713, TrackMatrixNV_remap_index },
-   { 28760, VertexAttrib1dNV_remap_index },
-   { 12014, VertexAttrib1dvNV_remap_index },
-   { 25309, VertexAttrib1fNV_remap_index },
+   { 28295, AreProgramsResidentNV_remap_index },
+   { 27650, BindProgramNV_remap_index },
+   { 23103, DeleteProgramsNV_remap_index },
+   { 19080, ExecuteProgramNV_remap_index },
+   { 29759, GenProgramsNV_remap_index },
+   { 20734, GetProgramParameterdvNV_remap_index },
+   {  9330, GetProgramParameterfvNV_remap_index },
+   { 23457, GetProgramStringNV_remap_index },
+   { 21763, GetProgramivNV_remap_index },
+   { 20968, GetTrackMatrixivNV_remap_index },
+   { 23253, GetVertexAttribPointervNV_remap_index },
+   { 22007, GetVertexAttribdvNV_remap_index },
+   { 16561, GetVertexAttribfvNV_remap_index },
+   { 16252, GetVertexAttribivNV_remap_index },
+   { 16968, IsProgramNV_remap_index },
+   {  8336, LoadProgramNV_remap_index },
+   { 24824, ProgramParameters4dvNV_remap_index },
+   { 21693, ProgramParameters4fvNV_remap_index },
+   { 18380, RequestResidentProgramsNV_remap_index },
+   { 19798, TrackMatrixNV_remap_index },
+   { 28852, VertexAttrib1dNV_remap_index },
+   { 12039, VertexAttrib1dvNV_remap_index },
+   { 25362, VertexAttrib1fNV_remap_index },
    {  2245, VertexAttrib1fvNV_remap_index },
-   { 27366, VertexAttrib1sNV_remap_index },
-   { 13247, VertexAttrib1svNV_remap_index },
+   { 27419, VertexAttrib1sNV_remap_index },
+   { 13304, VertexAttrib1svNV_remap_index },
    {  4251, VertexAttrib2dNV_remap_index },
-   { 11929, VertexAttrib2dvNV_remap_index },
-   { 17750, VertexAttrib2fNV_remap_index },
-   { 11540, VertexAttrib2fvNV_remap_index },
-   {  5076, VertexAttrib2sNV_remap_index },
-   { 16585, VertexAttrib2svNV_remap_index },
-   {  9990, VertexAttrib3dNV_remap_index },
-   { 28453, VertexAttrib3dvNV_remap_index },
-   {  9112, VertexAttrib3fNV_remap_index },
-   { 21949, VertexAttrib3fvNV_remap_index },
-   { 25284, VertexAttrib3sNV_remap_index },
-   { 20910, VertexAttrib3svNV_remap_index },
-   { 25751, VertexAttrib4dNV_remap_index },
-   { 29704, VertexAttrib4dvNV_remap_index },
+   { 11954, VertexAttrib2dvNV_remap_index },
+   { 17835, VertexAttrib2fNV_remap_index },
+   { 11565, VertexAttrib2fvNV_remap_index },
+   {  5106, VertexAttrib2sNV_remap_index },
+   { 16642, VertexAttrib2svNV_remap_index },
+   { 10020, VertexAttrib3dNV_remap_index },
+   { 28545, VertexAttrib3dvNV_remap_index },
+   {  9142, VertexAttrib3fNV_remap_index },
+   { 22034, VertexAttrib3fvNV_remap_index },
+   { 25337, VertexAttrib3sNV_remap_index },
+   { 20995, VertexAttrib3svNV_remap_index },
+   { 25804, VertexAttrib4dNV_remap_index },
+   { 29796, VertexAttrib4dvNV_remap_index },
    {  3945, VertexAttrib4fNV_remap_index },
-   {  8356, VertexAttrib4fvNV_remap_index },
-   { 23717, VertexAttrib4sNV_remap_index },
+   {  8386, VertexAttrib4fvNV_remap_index },
+   { 23802, VertexAttrib4sNV_remap_index },
    {  1293, VertexAttrib4svNV_remap_index },
    {  4409, VertexAttrib4ubNV_remap_index },
    {   734, VertexAttrib4ubvNV_remap_index },
-   { 19175, VertexAttribPointerNV_remap_index },
+   { 19260, VertexAttribPointerNV_remap_index },
    {  2097, VertexAttribs1dvNV_remap_index },
-   { 16609, VertexAttribs1fvNV_remap_index },
-   { 29504, VertexAttribs1svNV_remap_index },
-   {  9137, VertexAttribs2dvNV_remap_index },
-   { 22511, VertexAttribs2fvNV_remap_index },
-   { 15527, VertexAttribs2svNV_remap_index },
+   { 16666, VertexAttribs1fvNV_remap_index },
+   { 29596, VertexAttribs1svNV_remap_index },
+   {  9167, VertexAttribs2dvNV_remap_index },
+   { 22596, VertexAttribs2fvNV_remap_index },
+   { 15584, VertexAttribs2svNV_remap_index },
    {  4608, VertexAttribs3dvNV_remap_index },
    {  1977, VertexAttribs3fvNV_remap_index },
-   { 26652, VertexAttribs3svNV_remap_index },
-   { 23807, VertexAttribs4dvNV_remap_index },
+   { 26705, VertexAttribs3svNV_remap_index },
+   { 23892, VertexAttribs4dvNV_remap_index },
    {  4634, VertexAttribs4fvNV_remap_index },
-   { 29291, VertexAttribs4svNV_remap_index },
-   { 26400, VertexAttribs4ubvNV_remap_index },
-   { 23909, GetTexBumpParameterfvATI_remap_index },
-   { 29545, GetTexBumpParameterivATI_remap_index },
-   { 16249, TexBumpParameterfvATI_remap_index },
-   { 18166, TexBumpParameterivATI_remap_index },
-   { 13793, AlphaFragmentOp1ATI_remap_index },
-   {  9652, AlphaFragmentOp2ATI_remap_index },
-   { 21865, AlphaFragmentOp3ATI_remap_index },
-   { 26579, BeginFragmentShaderATI_remap_index },
-   { 27796, BindFragmentShaderATI_remap_index },
-   { 21039, ColorFragmentOp1ATI_remap_index },
+   { 29383, VertexAttribs4svNV_remap_index },
+   { 26453, VertexAttribs4ubvNV_remap_index },
+   { 23962, GetTexBumpParameterfvATI_remap_index },
+   { 29637, GetTexBumpParameterivATI_remap_index },
+   { 16306, TexBumpParameterfvATI_remap_index },
+   { 18251, TexBumpParameterivATI_remap_index },
+   { 13850, AlphaFragmentOp1ATI_remap_index },
+   {  9682, AlphaFragmentOp2ATI_remap_index },
+   { 21950, AlphaFragmentOp3ATI_remap_index },
+   { 26632, BeginFragmentShaderATI_remap_index },
+   { 27849, BindFragmentShaderATI_remap_index },
+   { 21124, ColorFragmentOp1ATI_remap_index },
    {  3823, ColorFragmentOp2ATI_remap_index },
-   { 28098, ColorFragmentOp3ATI_remap_index },
+   { 28190, ColorFragmentOp3ATI_remap_index },
    {  4753, DeleteFragmentShaderATI_remap_index },
-   { 29728, EndFragmentShaderATI_remap_index },
-   { 28974, GenFragmentShadersATI_remap_index },
-   { 22642, PassTexCoordATI_remap_index },
-   {  5996, SampleMapATI_remap_index },
-   {  5769, SetFragmentShaderConstantATI_remap_index },
+   { 29820, EndFragmentShaderATI_remap_index },
+   { 29066, GenFragmentShadersATI_remap_index },
+   { 22727, PassTexCoordATI_remap_index },
+   {  6026, SampleMapATI_remap_index },
+   {  5799, SetFragmentShaderConstantATI_remap_index },
    {   319, PointParameteriNV_remap_index },
-   { 12554, PointParameterivNV_remap_index },
-   { 25590, ActiveStencilFaceEXT_remap_index },
-   { 24431, BindVertexArrayAPPLE_remap_index },
+   { 12611, PointParameterivNV_remap_index },
+   { 25643, ActiveStencilFaceEXT_remap_index },
+   { 24484, BindVertexArrayAPPLE_remap_index },
    {  2522, DeleteVertexArraysAPPLE_remap_index },
-   { 15866, GenVertexArraysAPPLE_remap_index },
-   { 20714, IsVertexArrayAPPLE_remap_index },
+   { 15923, GenVertexArraysAPPLE_remap_index },
+   { 20799, IsVertexArrayAPPLE_remap_index },
    {   775, GetProgramNamedParameterdvNV_remap_index },
    {  3128, GetProgramNamedParameterfvNV_remap_index },
-   { 23940, ProgramNamedParameter4dNV_remap_index },
-   { 12829, ProgramNamedParameter4dvNV_remap_index },
-   {  7893, ProgramNamedParameter4fNV_remap_index },
-   { 10400, ProgramNamedParameter4fvNV_remap_index },
-   { 21587, DepthBoundsEXT_remap_index },
+   { 23993, ProgramNamedParameter4dNV_remap_index },
+   { 12886, ProgramNamedParameter4dvNV_remap_index },
+   {  7923, ProgramNamedParameter4fNV_remap_index },
+   { 10464, ProgramNamedParameter4fvNV_remap_index },
+   { 21672, DepthBoundsEXT_remap_index },
    {  1043, BlendEquationSeparateEXT_remap_index },
-   { 12948, BindFramebufferEXT_remap_index },
-   { 22829, BindRenderbufferEXT_remap_index },
-   {  8575, CheckFramebufferStatusEXT_remap_index },
-   { 20004, DeleteFramebuffersEXT_remap_index },
-   { 28355, DeleteRenderbuffersEXT_remap_index },
-   { 11953, FramebufferRenderbufferEXT_remap_index },
-   { 12090, FramebufferTexture1DEXT_remap_index },
-   { 10228, FramebufferTexture2DEXT_remap_index },
-   {  9895, FramebufferTexture3DEXT_remap_index },
-   { 20606, GenFramebuffersEXT_remap_index },
-   { 15413, GenRenderbuffersEXT_remap_index },
-   {  5715, GenerateMipmapEXT_remap_index },
-   { 19235, GetFramebufferAttachmentParameterivEXT_remap_index },
-   { 28880, GetRenderbufferParameterivEXT_remap_index },
-   { 18046, IsFramebufferEXT_remap_index },
-   { 29627, IsRenderbufferEXT_remap_index },
-   {  7204, RenderbufferStorageEXT_remap_index },
+   { 13005, BindFramebufferEXT_remap_index },
+   { 22914, BindRenderbufferEXT_remap_index },
+   {  8605, CheckFramebufferStatusEXT_remap_index },
+   { 20089, DeleteFramebuffersEXT_remap_index },
+   { 28447, DeleteRenderbuffersEXT_remap_index },
+   { 11978, FramebufferRenderbufferEXT_remap_index },
+   { 12115, FramebufferTexture1DEXT_remap_index },
+   { 10258, FramebufferTexture2DEXT_remap_index },
+   {  9925, FramebufferTexture3DEXT_remap_index },
+   { 20691, GenFramebuffersEXT_remap_index },
+   { 15470, GenRenderbuffersEXT_remap_index },
+   {  5745, GenerateMipmapEXT_remap_index },
+   { 19320, GetFramebufferAttachmentParameterivEXT_remap_index },
+   { 28972, GetRenderbufferParameterivEXT_remap_index },
+   { 18131, IsFramebufferEXT_remap_index },
+   { 29719, IsRenderbufferEXT_remap_index },
+   {  7234, RenderbufferStorageEXT_remap_index },
    {   651, BlitFramebufferEXT_remap_index },
-   { 12648, BufferParameteriAPPLE_remap_index },
-   { 16943, FlushMappedBufferRangeAPPLE_remap_index },
+   { 12705, BufferParameteriAPPLE_remap_index },
+   { 17000, FlushMappedBufferRangeAPPLE_remap_index },
    {  2701, FramebufferTextureLayerEXT_remap_index },
-   {  8277, ColorMaskIndexedEXT_remap_index },
-   { 23256, DisableIndexedEXT_remap_index },
-   { 23564, EnableIndexedEXT_remap_index },
-   { 19206, GetBooleanIndexedvEXT_remap_index },
-   {  9685, GetIntegerIndexedvEXT_remap_index },
-   { 20080, IsEnabledIndexedEXT_remap_index },
+   {  8307, ColorMaskIndexedEXT_remap_index },
+   { 23341, DisableIndexedEXT_remap_index },
+   { 23649, EnableIndexedEXT_remap_index },
+   { 19291, GetBooleanIndexedvEXT_remap_index },
+   {  9715, GetIntegerIndexedvEXT_remap_index },
+   { 20165, IsEnabledIndexedEXT_remap_index },
    {  4074, BeginConditionalRenderNV_remap_index },
-   { 22615, EndConditionalRenderNV_remap_index },
-   { 26301, ProvokingVertexEXT_remap_index },
-   {  9521, GetTexParameterPointervAPPLE_remap_index },
+   { 22700, EndConditionalRenderNV_remap_index },
+   { 26354, ProvokingVertexEXT_remap_index },
+   {  9551, GetTexParameterPointervAPPLE_remap_index },
    {  4436, TextureRangeAPPLE_remap_index },
-   { 25616, StencilFuncSeparateATI_remap_index },
-   { 15933, ProgramEnvParameters4fvEXT_remap_index },
-   { 15151, ProgramLocalParameters4fvEXT_remap_index },
-   { 12482, GetQueryObjecti64vEXT_remap_index },
-   {  9163, GetQueryObjectui64vEXT_remap_index },
-   { 21108, EGLImageTargetRenderbufferStorageOES_remap_index },
-   { 10753, EGLImageTargetTexture2DOES_remap_index },
+   { 10330, GetObjectParameterivAPPLE_remap_index },
+   { 17575, ObjectPurgeableAPPLE_remap_index },
+   {  4900, ObjectUnpurgeableAPPLE_remap_index },
+   { 25669, StencilFuncSeparateATI_remap_index },
+   { 15990, ProgramEnvParameters4fvEXT_remap_index },
+   { 15208, ProgramLocalParameters4fvEXT_remap_index },
+   { 12539, GetQueryObjecti64vEXT_remap_index },
+   {  9193, GetQueryObjectui64vEXT_remap_index },
+   { 21193, EGLImageTargetRenderbufferStorageOES_remap_index },
+   { 10817, EGLImageTargetTexture2DOES_remap_index },
    {    -1, -1 }
 };
 
@@ -4778,108 +4793,108 @@ static const struct gl_function_remap MESA_alt_functions[] = {
    /* from GL_EXT_blend_color */
    {  2440, _gloffset_BlendColor },
    /* from GL_EXT_blend_minmax */
-   {  9952, _gloffset_BlendEquation },
+   {  9982, _gloffset_BlendEquation },
    /* from GL_EXT_color_subtable */
-   { 15049, _gloffset_ColorSubTable },
-   { 28287, _gloffset_CopyColorSubTable },
+   { 15106, _gloffset_ColorSubTable },
+   { 28379, _gloffset_CopyColorSubTable },
    /* from GL_EXT_convolution */
    {   213, _gloffset_ConvolutionFilter1D },
    {  2284, _gloffset_CopyConvolutionFilter1D },
    {  3624, _gloffset_GetConvolutionParameteriv },
-   {  7553, _gloffset_ConvolutionFilter2D },
-   {  7719, _gloffset_ConvolutionParameteriv },
-   {  8179, _gloffset_ConvolutionParameterfv },
-   { 18194, _gloffset_GetSeparableFilter },
-   { 21338, _gloffset_SeparableFilter2D },
-   { 22167, _gloffset_ConvolutionParameteri },
-   { 22290, _gloffset_ConvolutionParameterf },
-   { 23743, _gloffset_GetConvolutionParameterfv },
-   { 24597, _gloffset_GetConvolutionFilter },
-   { 26841, _gloffset_CopyConvolutionFilter2D },
+   {  7583, _gloffset_ConvolutionFilter2D },
+   {  7749, _gloffset_ConvolutionParameteriv },
+   {  8209, _gloffset_ConvolutionParameterfv },
+   { 18279, _gloffset_GetSeparableFilter },
+   { 21423, _gloffset_SeparableFilter2D },
+   { 22252, _gloffset_ConvolutionParameteri },
+   { 22375, _gloffset_ConvolutionParameterf },
+   { 23828, _gloffset_GetConvolutionParameterfv },
+   { 24650, _gloffset_GetConvolutionFilter },
+   { 26894, _gloffset_CopyConvolutionFilter2D },
    /* from GL_EXT_copy_texture */
-   { 13307, _gloffset_CopyTexSubImage3D },
-   { 14789, _gloffset_CopyTexImage2D },
-   { 21775, _gloffset_CopyTexImage1D },
-   { 24278, _gloffset_CopyTexSubImage2D },
-   { 26479, _gloffset_CopyTexSubImage1D },
+   { 13364, _gloffset_CopyTexSubImage3D },
+   { 14846, _gloffset_CopyTexImage2D },
+   { 21860, _gloffset_CopyTexImage1D },
+   { 24331, _gloffset_CopyTexSubImage2D },
+   { 26532, _gloffset_CopyTexSubImage1D },
    /* from GL_EXT_draw_range_elements */
-   {  8462, _gloffset_DrawRangeElements },
+   {  8492, _gloffset_DrawRangeElements },
    /* from GL_EXT_histogram */
    {   812, _gloffset_Histogram },
    {  3088, _gloffset_ResetHistogram },
-   {  8834, _gloffset_GetMinmax },
-   { 13641, _gloffset_GetHistogramParameterfv },
-   { 21700, _gloffset_GetMinmaxParameteriv },
-   { 23633, _gloffset_ResetMinmax },
-   { 24494, _gloffset_GetHistogramParameteriv },
-   { 25550, _gloffset_GetHistogram },
-   { 27912, _gloffset_Minmax },
-   { 29374, _gloffset_GetMinmaxParameterfv },
+   {  8864, _gloffset_GetMinmax },
+   { 13698, _gloffset_GetHistogramParameterfv },
+   { 21785, _gloffset_GetMinmaxParameteriv },
+   { 23718, _gloffset_ResetMinmax },
+   { 24547, _gloffset_GetHistogramParameteriv },
+   { 25603, _gloffset_GetHistogram },
+   { 27965, _gloffset_Minmax },
+   { 29466, _gloffset_GetMinmaxParameterfv },
    /* from GL_EXT_paletted_texture */
-   {  7415, _gloffset_ColorTable },
-   { 13487, _gloffset_GetColorTable },
-   { 20353, _gloffset_GetColorTableParameterfv },
-   { 22346, _gloffset_GetColorTableParameteriv },
+   {  7445, _gloffset_ColorTable },
+   { 13544, _gloffset_GetColorTable },
+   { 20438, _gloffset_GetColorTableParameterfv },
+   { 22431, _gloffset_GetColorTableParameteriv },
    /* from GL_EXT_subtexture */
-   {  6136, _gloffset_TexSubImage1D },
-   {  9448, _gloffset_TexSubImage2D },
+   {  6166, _gloffset_TexSubImage1D },
+   {  9478, _gloffset_TexSubImage2D },
    /* from GL_EXT_texture3D */
    {  1658, _gloffset_TexImage3D },
-   { 20122, _gloffset_TexSubImage3D },
+   { 20207, _gloffset_TexSubImage3D },
    /* from GL_EXT_texture_object */
    {  2964, _gloffset_PrioritizeTextures },
-   {  6585, _gloffset_AreTexturesResident },
-   { 12038, _gloffset_GenTextures },
-   { 13973, _gloffset_DeleteTextures },
-   { 17224, _gloffset_IsTexture },
-   { 26544, _gloffset_BindTexture },
+   {  6615, _gloffset_AreTexturesResident },
+   { 12063, _gloffset_GenTextures },
+   { 14030, _gloffset_DeleteTextures },
+   { 17281, _gloffset_IsTexture },
+   { 26597, _gloffset_BindTexture },
    /* from GL_EXT_vertex_array */
-   { 21527, _gloffset_ArrayElement },
-   { 27500, _gloffset_GetPointerv },
-   { 29001, _gloffset_DrawArrays },
+   { 21612, _gloffset_ArrayElement },
+   { 27553, _gloffset_GetPointerv },
+   { 29093, _gloffset_DrawArrays },
    /* from GL_SGI_color_table */
-   {  6703, _gloffset_ColorTableParameteriv },
-   {  7415, _gloffset_ColorTable },
-   { 13487, _gloffset_GetColorTable },
-   { 13597, _gloffset_CopyColorTable },
-   { 17085, _gloffset_ColorTableParameterfv },
-   { 20353, _gloffset_GetColorTableParameterfv },
-   { 22346, _gloffset_GetColorTableParameteriv },
+   {  6733, _gloffset_ColorTableParameteriv },
+   {  7445, _gloffset_ColorTable },
+   { 13544, _gloffset_GetColorTable },
+   { 13654, _gloffset_CopyColorTable },
+   { 17142, _gloffset_ColorTableParameterfv },
+   { 20438, _gloffset_GetColorTableParameterfv },
+   { 22431, _gloffset_GetColorTableParameteriv },
    /* from GL_VERSION_1_3 */
    {   381, _gloffset_MultiTexCoord3sARB },
    {   613, _gloffset_ActiveTextureARB },
    {  3761, _gloffset_MultiTexCoord1fvARB },
-   {  5271, _gloffset_MultiTexCoord3dARB },
-   {  5316, _gloffset_MultiTexCoord2iARB },
-   {  5440, _gloffset_MultiTexCoord2svARB },
-   {  7371, _gloffset_MultiTexCoord2fARB },
-   {  9193, _gloffset_MultiTexCoord3fvARB },
-   {  9714, _gloffset_MultiTexCoord4sARB },
-   { 10314, _gloffset_MultiTexCoord2dvARB },
-   { 10696, _gloffset_MultiTexCoord1svARB },
-   { 11025, _gloffset_MultiTexCoord3svARB },
-   { 11086, _gloffset_MultiTexCoord4iARB },
-   { 11809, _gloffset_MultiTexCoord3iARB },
-   { 12511, _gloffset_MultiTexCoord1dARB },
-   { 12677, _gloffset_MultiTexCoord3dvARB },
-   { 13841, _gloffset_MultiTexCoord3ivARB },
-   { 13886, _gloffset_MultiTexCoord2sARB },
-   { 15106, _gloffset_MultiTexCoord4ivARB },
-   { 16735, _gloffset_ClientActiveTextureARB },
-   { 18951, _gloffset_MultiTexCoord2dARB },
-   { 19355, _gloffset_MultiTexCoord4dvARB },
-   { 19641, _gloffset_MultiTexCoord4fvARB },
-   { 20494, _gloffset_MultiTexCoord3fARB },
-   { 22874, _gloffset_MultiTexCoord4dARB },
-   { 23078, _gloffset_MultiTexCoord1sARB },
-   { 23280, _gloffset_MultiTexCoord1dvARB },
-   { 24122, _gloffset_MultiTexCoord1ivARB },
-   { 24215, _gloffset_MultiTexCoord2ivARB },
-   { 24554, _gloffset_MultiTexCoord1iARB },
-   { 25825, _gloffset_MultiTexCoord4svARB },
-   { 26343, _gloffset_MultiTexCoord1fARB },
-   { 26606, _gloffset_MultiTexCoord4fARB },
-   { 28835, _gloffset_MultiTexCoord2fvARB },
+   {  5301, _gloffset_MultiTexCoord3dARB },
+   {  5346, _gloffset_MultiTexCoord2iARB },
+   {  5470, _gloffset_MultiTexCoord2svARB },
+   {  7401, _gloffset_MultiTexCoord2fARB },
+   {  9223, _gloffset_MultiTexCoord3fvARB },
+   {  9744, _gloffset_MultiTexCoord4sARB },
+   { 10378, _gloffset_MultiTexCoord2dvARB },
+   { 10760, _gloffset_MultiTexCoord1svARB },
+   { 11050, _gloffset_MultiTexCoord3svARB },
+   { 11111, _gloffset_MultiTexCoord4iARB },
+   { 11834, _gloffset_MultiTexCoord3iARB },
+   { 12568, _gloffset_MultiTexCoord1dARB },
+   { 12734, _gloffset_MultiTexCoord3dvARB },
+   { 13898, _gloffset_MultiTexCoord3ivARB },
+   { 13943, _gloffset_MultiTexCoord2sARB },
+   { 15163, _gloffset_MultiTexCoord4ivARB },
+   { 16792, _gloffset_ClientActiveTextureARB },
+   { 19036, _gloffset_MultiTexCoord2dARB },
+   { 19440, _gloffset_MultiTexCoord4dvARB },
+   { 19726, _gloffset_MultiTexCoord4fvARB },
+   { 20579, _gloffset_MultiTexCoord3fARB },
+   { 22959, _gloffset_MultiTexCoord4dARB },
+   { 23163, _gloffset_MultiTexCoord1sARB },
+   { 23365, _gloffset_MultiTexCoord1dvARB },
+   { 24175, _gloffset_MultiTexCoord1ivARB },
+   { 24268, _gloffset_MultiTexCoord2ivARB },
+   { 24607, _gloffset_MultiTexCoord1iARB },
+   { 25878, _gloffset_MultiTexCoord4svARB },
+   { 26396, _gloffset_MultiTexCoord1fARB },
+   { 26659, _gloffset_MultiTexCoord4fARB },
+   { 28927, _gloffset_MultiTexCoord2fvARB },
    {    -1, -1 }
 };
 
@@ -4887,7 +4902,7 @@ static const struct gl_function_remap MESA_alt_functions[] = {
 
 #if defined(need_GL_3DFX_tbuffer)
 static const struct gl_function_remap GL_3DFX_tbuffer_functions[] = {
-   {  8237, -1 }, /* TbufferMask3DFX */
+   {  8267, -1 }, /* TbufferMask3DFX */
    {    -1, -1 }
 };
 #endif
@@ -4899,6 +4914,13 @@ static const struct gl_function_remap GL_APPLE_flush_buffer_range_functions[] =
 };
 #endif
 
+#if defined(need_GL_APPLE_object_purgeable)
+/* functions defined in MESA_remap_table_functions are excluded */
+static const struct gl_function_remap GL_APPLE_object_purgeable_functions[] = {
+   {    -1, -1 }
+};
+#endif
+
 #if defined(need_GL_APPLE_texture_range)
 /* functions defined in MESA_remap_table_functions are excluded */
 static const struct gl_function_remap GL_APPLE_texture_range_functions[] = {
@@ -4951,10 +4973,10 @@ static const struct gl_function_remap GL_ARB_map_buffer_range_functions[] = {
 #if defined(need_GL_ARB_matrix_palette)
 static const struct gl_function_remap GL_ARB_matrix_palette_functions[] = {
    {  3339, -1 }, /* MatrixIndexusvARB */
-   { 11630, -1 }, /* MatrixIndexuivARB */
-   { 12799, -1 }, /* MatrixIndexPointerARB */
-   { 17473, -1 }, /* CurrentPaletteMatrixARB */
-   { 20238, -1 }, /* MatrixIndexubvARB */
+   { 11655, -1 }, /* MatrixIndexuivARB */
+   { 12856, -1 }, /* MatrixIndexPointerARB */
+   { 17530, -1 }, /* CurrentPaletteMatrixARB */
+   { 20323, -1 }, /* MatrixIndexubvARB */
    {    -1, -1 }
 };
 #endif
@@ -5025,15 +5047,15 @@ static const struct gl_function_remap GL_ARB_vertex_array_object_functions[] = {
 #if defined(need_GL_ARB_vertex_blend)
 static const struct gl_function_remap GL_ARB_vertex_blend_functions[] = {
    {  2226, -1 }, /* WeightubvARB */
-   {  5603, -1 }, /* WeightivARB */
-   {  9817, -1 }, /* WeightPointerARB */
-   { 12268, -1 }, /* WeightfvARB */
-   { 15553, -1 }, /* WeightbvARB */
-   { 18619, -1 }, /* WeightusvARB */
-   { 21264, -1 }, /* VertexBlendARB */
-   { 26427, -1 }, /* WeightsvARB */
-   { 28337, -1 }, /* WeightdvARB */
-   { 29035, -1 }, /* WeightuivARB */
+   {  5633, -1 }, /* WeightivARB */
+   {  9847, -1 }, /* WeightPointerARB */
+   { 12325, -1 }, /* WeightfvARB */
+   { 15610, -1 }, /* WeightbvARB */
+   { 18704, -1 }, /* WeightusvARB */
+   { 21349, -1 }, /* VertexBlendARB */
+   { 26480, -1 }, /* WeightsvARB */
+   { 28429, -1 }, /* WeightdvARB */
+   { 29127, -1 }, /* WeightuivARB */
    {    -1, -1 }
 };
 #endif
@@ -5124,15 +5146,15 @@ static const struct gl_function_remap GL_EXT_blend_func_separate_functions[] = {
 
 #if defined(need_GL_EXT_blend_minmax)
 static const struct gl_function_remap GL_EXT_blend_minmax_functions[] = {
-   {  9952, _gloffset_BlendEquation },
+   {  9982, _gloffset_BlendEquation },
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_EXT_color_subtable)
 static const struct gl_function_remap GL_EXT_color_subtable_functions[] = {
-   { 15049, _gloffset_ColorSubTable },
-   { 28287, _gloffset_CopyColorSubTable },
+   { 15106, _gloffset_ColorSubTable },
+   { 28379, _gloffset_CopyColorSubTable },
    {    -1, -1 }
 };
 #endif
@@ -5149,55 +5171,55 @@ static const struct gl_function_remap GL_EXT_convolution_functions[] = {
    {   213, _gloffset_ConvolutionFilter1D },
    {  2284, _gloffset_CopyConvolutionFilter1D },
    {  3624, _gloffset_GetConvolutionParameteriv },
-   {  7553, _gloffset_ConvolutionFilter2D },
-   {  7719, _gloffset_ConvolutionParameteriv },
-   {  8179, _gloffset_ConvolutionParameterfv },
-   { 18194, _gloffset_GetSeparableFilter },
-   { 21338, _gloffset_SeparableFilter2D },
-   { 22167, _gloffset_ConvolutionParameteri },
-   { 22290, _gloffset_ConvolutionParameterf },
-   { 23743, _gloffset_GetConvolutionParameterfv },
-   { 24597, _gloffset_GetConvolutionFilter },
-   { 26841, _gloffset_CopyConvolutionFilter2D },
+   {  7583, _gloffset_ConvolutionFilter2D },
+   {  7749, _gloffset_ConvolutionParameteriv },
+   {  8209, _gloffset_ConvolutionParameterfv },
+   { 18279, _gloffset_GetSeparableFilter },
+   { 21423, _gloffset_SeparableFilter2D },
+   { 22252, _gloffset_ConvolutionParameteri },
+   { 22375, _gloffset_ConvolutionParameterf },
+   { 23828, _gloffset_GetConvolutionParameterfv },
+   { 24650, _gloffset_GetConvolutionFilter },
+   { 26894, _gloffset_CopyConvolutionFilter2D },
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_EXT_coordinate_frame)
 static const struct gl_function_remap GL_EXT_coordinate_frame_functions[] = {
-   {  9332, -1 }, /* TangentPointerEXT */
-   { 11144, -1 }, /* Binormal3ivEXT */
-   { 11762, -1 }, /* Tangent3sEXT */
-   { 12864, -1 }, /* Tangent3fvEXT */
-   { 16485, -1 }, /* Tangent3dvEXT */
-   { 17171, -1 }, /* Binormal3bvEXT */
-   { 18247, -1 }, /* Binormal3dEXT */
-   { 20170, -1 }, /* Tangent3fEXT */
-   { 22239, -1 }, /* Binormal3sEXT */
-   { 22684, -1 }, /* Tangent3ivEXT */
-   { 22703, -1 }, /* Tangent3dEXT */
-   { 23507, -1 }, /* Binormal3svEXT */
-   { 24020, -1 }, /* Binormal3fEXT */
-   { 24872, -1 }, /* Binormal3dvEXT */
-   { 26047, -1 }, /* Tangent3iEXT */
-   { 27126, -1 }, /* Tangent3bvEXT */
-   { 27535, -1 }, /* Tangent3bEXT */
-   { 28060, -1 }, /* Binormal3fvEXT */
-   { 28734, -1 }, /* BinormalPointerEXT */
-   { 29139, -1 }, /* Tangent3svEXT */
-   { 29576, -1 }, /* Binormal3bEXT */
-   { 29753, -1 }, /* Binormal3iEXT */
+   {  9362, -1 }, /* TangentPointerEXT */
+   { 11169, -1 }, /* Binormal3ivEXT */
+   { 11787, -1 }, /* Tangent3sEXT */
+   { 12921, -1 }, /* Tangent3fvEXT */
+   { 16542, -1 }, /* Tangent3dvEXT */
+   { 17228, -1 }, /* Binormal3bvEXT */
+   { 18332, -1 }, /* Binormal3dEXT */
+   { 20255, -1 }, /* Tangent3fEXT */
+   { 22324, -1 }, /* Binormal3sEXT */
+   { 22769, -1 }, /* Tangent3ivEXT */
+   { 22788, -1 }, /* Tangent3dEXT */
+   { 23592, -1 }, /* Binormal3svEXT */
+   { 24073, -1 }, /* Binormal3fEXT */
+   { 24925, -1 }, /* Binormal3dvEXT */
+   { 26100, -1 }, /* Tangent3iEXT */
+   { 27179, -1 }, /* Tangent3bvEXT */
+   { 27588, -1 }, /* Tangent3bEXT */
+   { 28152, -1 }, /* Binormal3fvEXT */
+   { 28826, -1 }, /* BinormalPointerEXT */
+   { 29231, -1 }, /* Tangent3svEXT */
+   { 29668, -1 }, /* Binormal3bEXT */
+   { 29845, -1 }, /* Binormal3iEXT */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_EXT_copy_texture)
 static const struct gl_function_remap GL_EXT_copy_texture_functions[] = {
-   { 13307, _gloffset_CopyTexSubImage3D },
-   { 14789, _gloffset_CopyTexImage2D },
-   { 21775, _gloffset_CopyTexImage1D },
-   { 24278, _gloffset_CopyTexSubImage2D },
-   { 26479, _gloffset_CopyTexSubImage1D },
+   { 13364, _gloffset_CopyTexSubImage3D },
+   { 14846, _gloffset_CopyTexImage2D },
+   { 21860, _gloffset_CopyTexImage1D },
+   { 24331, _gloffset_CopyTexSubImage2D },
+   { 26532, _gloffset_CopyTexSubImage1D },
    {    -1, -1 }
 };
 #endif
@@ -5225,7 +5247,7 @@ static const struct gl_function_remap GL_EXT_draw_buffers2_functions[] = {
 
 #if defined(need_GL_EXT_draw_range_elements)
 static const struct gl_function_remap GL_EXT_draw_range_elements_functions[] = {
-   {  8462, _gloffset_DrawRangeElements },
+   {  8492, _gloffset_DrawRangeElements },
    {    -1, -1 }
 };
 #endif
@@ -5269,37 +5291,37 @@ static const struct gl_function_remap GL_EXT_gpu_program_parameters_functions[]
 static const struct gl_function_remap GL_EXT_histogram_functions[] = {
    {   812, _gloffset_Histogram },
    {  3088, _gloffset_ResetHistogram },
-   {  8834, _gloffset_GetMinmax },
-   { 13641, _gloffset_GetHistogramParameterfv },
-   { 21700, _gloffset_GetMinmaxParameteriv },
-   { 23633, _gloffset_ResetMinmax },
-   { 24494, _gloffset_GetHistogramParameteriv },
-   { 25550, _gloffset_GetHistogram },
-   { 27912, _gloffset_Minmax },
-   { 29374, _gloffset_GetMinmaxParameterfv },
+   {  8864, _gloffset_GetMinmax },
+   { 13698, _gloffset_GetHistogramParameterfv },
+   { 21785, _gloffset_GetMinmaxParameteriv },
+   { 23718, _gloffset_ResetMinmax },
+   { 24547, _gloffset_GetHistogramParameteriv },
+   { 25603, _gloffset_GetHistogram },
+   { 27965, _gloffset_Minmax },
+   { 29466, _gloffset_GetMinmaxParameterfv },
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_EXT_index_func)
 static const struct gl_function_remap GL_EXT_index_func_functions[] = {
-   { 10179, -1 }, /* IndexFuncEXT */
+   { 10209, -1 }, /* IndexFuncEXT */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_EXT_index_material)
 static const struct gl_function_remap GL_EXT_index_material_functions[] = {
-   { 18706, -1 }, /* IndexMaterialEXT */
+   { 18791, -1 }, /* IndexMaterialEXT */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_EXT_light_texture)
 static const struct gl_function_remap GL_EXT_light_texture_functions[] = {
-   { 23527, -1 }, /* ApplyTextureEXT */
-   { 23587, -1 }, /* TextureMaterialEXT */
-   { 23612, -1 }, /* TextureLightEXT */
+   { 23612, -1 }, /* ApplyTextureEXT */
+   { 23672, -1 }, /* TextureMaterialEXT */
+   { 23697, -1 }, /* TextureLightEXT */
    {    -1, -1 }
 };
 #endif
@@ -5320,20 +5342,20 @@ static const struct gl_function_remap GL_EXT_multisample_functions[] = {
 
 #if defined(need_GL_EXT_paletted_texture)
 static const struct gl_function_remap GL_EXT_paletted_texture_functions[] = {
-   {  7415, _gloffset_ColorTable },
-   { 13487, _gloffset_GetColorTable },
-   { 20353, _gloffset_GetColorTableParameterfv },
-   { 22346, _gloffset_GetColorTableParameteriv },
+   {  7445, _gloffset_ColorTable },
+   { 13544, _gloffset_GetColorTable },
+   { 20438, _gloffset_GetColorTableParameterfv },
+   { 22431, _gloffset_GetColorTableParameteriv },
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_EXT_pixel_transform)
 static const struct gl_function_remap GL_EXT_pixel_transform_functions[] = {
-   {  9573, -1 }, /* PixelTransformParameterfvEXT */
-   { 19320, -1 }, /* PixelTransformParameterfEXT */
-   { 19400, -1 }, /* PixelTransformParameteriEXT */
-   { 28698, -1 }, /* PixelTransformParameterivEXT */
+   {  9603, -1 }, /* PixelTransformParameterfvEXT */
+   { 19405, -1 }, /* PixelTransformParameterfEXT */
+   { 19485, -1 }, /* PixelTransformParameteriEXT */
+   { 28790, -1 }, /* PixelTransformParameterivEXT */
    {    -1, -1 }
 };
 #endif
@@ -5375,8 +5397,8 @@ static const struct gl_function_remap GL_EXT_stencil_two_side_functions[] = {
 
 #if defined(need_GL_EXT_subtexture)
 static const struct gl_function_remap GL_EXT_subtexture_functions[] = {
-   {  6136, _gloffset_TexSubImage1D },
-   {  9448, _gloffset_TexSubImage2D },
+   {  6166, _gloffset_TexSubImage1D },
+   {  9478, _gloffset_TexSubImage2D },
    {    -1, -1 }
 };
 #endif
@@ -5384,7 +5406,7 @@ static const struct gl_function_remap GL_EXT_subtexture_functions[] = {
 #if defined(need_GL_EXT_texture3D)
 static const struct gl_function_remap GL_EXT_texture3D_functions[] = {
    {  1658, _gloffset_TexImage3D },
-   { 20122, _gloffset_TexSubImage3D },
+   { 20207, _gloffset_TexSubImage3D },
    {    -1, -1 }
 };
 #endif
@@ -5399,18 +5421,18 @@ static const struct gl_function_remap GL_EXT_texture_array_functions[] = {
 #if defined(need_GL_EXT_texture_object)
 static const struct gl_function_remap GL_EXT_texture_object_functions[] = {
    {  2964, _gloffset_PrioritizeTextures },
-   {  6585, _gloffset_AreTexturesResident },
-   { 12038, _gloffset_GenTextures },
-   { 13973, _gloffset_DeleteTextures },
-   { 17224, _gloffset_IsTexture },
-   { 26544, _gloffset_BindTexture },
+   {  6615, _gloffset_AreTexturesResident },
+   { 12063, _gloffset_GenTextures },
+   { 14030, _gloffset_DeleteTextures },
+   { 17281, _gloffset_IsTexture },
+   { 26597, _gloffset_BindTexture },
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_EXT_texture_perturb_normal)
 static const struct gl_function_remap GL_EXT_texture_perturb_normal_functions[] = {
-   { 12218, -1 }, /* TextureNormalEXT */
+   { 12275, -1 }, /* TextureNormalEXT */
    {    -1, -1 }
 };
 #endif
@@ -5425,18 +5447,18 @@ static const struct gl_function_remap GL_EXT_timer_query_functions[] = {
 #if defined(need_GL_EXT_vertex_array)
 /* functions defined in MESA_remap_table_functions are excluded */
 static const struct gl_function_remap GL_EXT_vertex_array_functions[] = {
-   { 21527, _gloffset_ArrayElement },
-   { 27500, _gloffset_GetPointerv },
-   { 29001, _gloffset_DrawArrays },
+   { 21612, _gloffset_ArrayElement },
+   { 27553, _gloffset_GetPointerv },
+   { 29093, _gloffset_DrawArrays },
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_EXT_vertex_weighting)
 static const struct gl_function_remap GL_EXT_vertex_weighting_functions[] = {
-   { 17254, -1 }, /* VertexWeightfvEXT */
-   { 23998, -1 }, /* VertexWeightfEXT */
-   { 25519, -1 }, /* VertexWeightPointerEXT */
+   { 17311, -1 }, /* VertexWeightfvEXT */
+   { 24051, -1 }, /* VertexWeightfEXT */
+   { 25572, -1 }, /* VertexWeightPointerEXT */
    {    -1, -1 }
 };
 #endif
@@ -5445,10 +5467,10 @@ static const struct gl_function_remap GL_EXT_vertex_weighting_functions[] = {
 static const struct gl_function_remap GL_HP_image_transform_functions[] = {
    {  2157, -1 }, /* GetImageTransformParameterfvHP */
    {  3305, -1 }, /* ImageTransformParameterfHP */
-   {  9026, -1 }, /* ImageTransformParameterfvHP */
-   { 10614, -1 }, /* ImageTransformParameteriHP */
-   { 10915, -1 }, /* GetImageTransformParameterivHP */
-   { 17318, -1 }, /* ImageTransformParameterivHP */
+   {  9056, -1 }, /* ImageTransformParameterfvHP */
+   { 10678, -1 }, /* ImageTransformParameteriHP */
+   { 10940, -1 }, /* GetImageTransformParameterivHP */
+   { 17375, -1 }, /* ImageTransformParameterivHP */
    {    -1, -1 }
 };
 #endif
@@ -5463,13 +5485,13 @@ static const struct gl_function_remap GL_IBM_multimode_draw_arrays_functions[] =
 #if defined(need_GL_IBM_vertex_array_lists)
 static const struct gl_function_remap GL_IBM_vertex_array_lists_functions[] = {
    {  3857, -1 }, /* SecondaryColorPointerListIBM */
-   {  5137, -1 }, /* NormalPointerListIBM */
-   {  6759, -1 }, /* FogCoordPointerListIBM */
-   {  7066, -1 }, /* VertexPointerListIBM */
-   { 10535, -1 }, /* ColorPointerListIBM */
-   { 11869, -1 }, /* TexCoordPointerListIBM */
-   { 12240, -1 }, /* IndexPointerListIBM */
-   { 29317, -1 }, /* EdgeFlagPointerListIBM */
+   {  5167, -1 }, /* NormalPointerListIBM */
+   {  6789, -1 }, /* FogCoordPointerListIBM */
+   {  7096, -1 }, /* VertexPointerListIBM */
+   { 10599, -1 }, /* ColorPointerListIBM */
+   { 11894, -1 }, /* TexCoordPointerListIBM */
+   { 12297, -1 }, /* IndexPointerListIBM */
+   { 29409, -1 }, /* EdgeFlagPointerListIBM */
    {    -1, -1 }
 };
 #endif
@@ -5483,10 +5505,10 @@ static const struct gl_function_remap GL_INGR_blend_func_separate_functions[] =
 
 #if defined(need_GL_INTEL_parallel_arrays)
 static const struct gl_function_remap GL_INTEL_parallel_arrays_functions[] = {
-   { 11256, -1 }, /* VertexPointervINTEL */
-   { 13734, -1 }, /* ColorPointervINTEL */
-   { 26815, -1 }, /* NormalPointervINTEL */
-   { 27241, -1 }, /* TexCoordPointervINTEL */
+   { 11281, -1 }, /* VertexPointervINTEL */
+   { 13791, -1 }, /* ColorPointervINTEL */
+   { 26868, -1 }, /* NormalPointervINTEL */
+   { 27294, -1 }, /* TexCoordPointervINTEL */
    {    -1, -1 }
 };
 #endif
@@ -5503,7 +5525,7 @@ static const struct gl_function_remap GL_MESA_shader_debug_functions[] = {
    {  1522, -1 }, /* GetDebugLogLengthMESA */
    {  3063, -1 }, /* ClearDebugLogMESA */
    {  4018, -1 }, /* GetDebugLogMESA */
-   { 27693, -1 }, /* CreateDebugObjectMESA */
+   { 27746, -1 }, /* CreateDebugObjectMESA */
    {    -1, -1 }
 };
 #endif
@@ -5524,15 +5546,15 @@ static const struct gl_function_remap GL_NV_condtitional_render_functions[] = {
 
 #if defined(need_GL_NV_evaluators)
 static const struct gl_function_remap GL_NV_evaluators_functions[] = {
-   {  5804, -1 }, /* GetMapAttribParameterivNV */
-   {  7521, -1 }, /* MapControlPointsNV */
-   {  7620, -1 }, /* MapParameterfvNV */
-   {  9431, -1 }, /* EvalMapsNV */
-   { 15223, -1 }, /* GetMapAttribParameterfvNV */
-   { 15389, -1 }, /* MapParameterivNV */
-   { 22090, -1 }, /* GetMapParameterivNV */
-   { 22588, -1 }, /* GetMapParameterfvNV */
-   { 26151, -1 }, /* GetMapControlPointsNV */
+   {  5834, -1 }, /* GetMapAttribParameterivNV */
+   {  7551, -1 }, /* MapControlPointsNV */
+   {  7650, -1 }, /* MapParameterfvNV */
+   {  9461, -1 }, /* EvalMapsNV */
+   { 15280, -1 }, /* GetMapAttribParameterfvNV */
+   { 15446, -1 }, /* MapParameterivNV */
+   { 22175, -1 }, /* GetMapParameterivNV */
+   { 22673, -1 }, /* GetMapParameterfvNV */
+   { 26204, -1 }, /* GetMapControlPointsNV */
    {    -1, -1 }
 };
 #endif
@@ -5567,8 +5589,8 @@ static const struct gl_function_remap GL_NV_register_combiners_functions[] = {
 
 #if defined(need_GL_NV_register_combiners2)
 static const struct gl_function_remap GL_NV_register_combiners2_functions[] = {
-   { 14126, -1 }, /* CombinerStageParameterfvNV */
-   { 14441, -1 }, /* GetCombinerStageParameterfvNV */
+   { 14183, -1 }, /* CombinerStageParameterfvNV */
+   { 14498, -1 }, /* GetCombinerStageParameterfvNV */
    {    -1, -1 }
 };
 #endif
@@ -5596,23 +5618,23 @@ static const struct gl_function_remap GL_OES_EGL_image_functions[] = {
 
 #if defined(need_GL_PGI_misc_hints)
 static const struct gl_function_remap GL_PGI_misc_hints_functions[] = {
-   {  7705, -1 }, /* HintPGI */
+   {  7735, -1 }, /* HintPGI */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIS_detail_texture)
 static const struct gl_function_remap GL_SGIS_detail_texture_functions[] = {
-   { 14414, -1 }, /* GetDetailTexFuncSGIS */
-   { 14734, -1 }, /* DetailTexFuncSGIS */
+   { 14471, -1 }, /* GetDetailTexFuncSGIS */
+   { 14791, -1 }, /* DetailTexFuncSGIS */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIS_fog_function)
 static const struct gl_function_remap GL_SGIS_fog_function_functions[] = {
-   { 24260, -1 }, /* FogFuncSGIS */
-   { 24925, -1 }, /* GetFogFuncSGIS */
+   { 24313, -1 }, /* FogFuncSGIS */
+   { 24978, -1 }, /* GetFogFuncSGIS */
    {    -1, -1 }
 };
 #endif
@@ -5640,8 +5662,8 @@ static const struct gl_function_remap GL_SGIS_point_parameters_functions[] = {
 
 #if defined(need_GL_SGIS_sharpen_texture)
 static const struct gl_function_remap GL_SGIS_sharpen_texture_functions[] = {
-   {  5865, -1 }, /* GetSharpenTexFuncSGIS */
-   { 19615, -1 }, /* SharpenTexFuncSGIS */
+   {  5895, -1 }, /* GetSharpenTexFuncSGIS */
+   { 19700, -1 }, /* SharpenTexFuncSGIS */
    {    -1, -1 }
 };
 #endif
@@ -5649,22 +5671,22 @@ static const struct gl_function_remap GL_SGIS_sharpen_texture_functions[] = {
 #if defined(need_GL_SGIS_texture4D)
 static const struct gl_function_remap GL_SGIS_texture4D_functions[] = {
    {   894, -1 }, /* TexImage4DSGIS */
-   { 14042, -1 }, /* TexSubImage4DSGIS */
+   { 14099, -1 }, /* TexSubImage4DSGIS */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIS_texture_color_mask)
 static const struct gl_function_remap GL_SGIS_texture_color_mask_functions[] = {
-   { 13440, -1 }, /* TextureColorMaskSGIS */
+   { 13497, -1 }, /* TextureColorMaskSGIS */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIS_texture_filter4)
 static const struct gl_function_remap GL_SGIS_texture_filter4_functions[] = {
-   {  6042, -1 }, /* GetTexFilterFuncSGIS */
-   { 14560, -1 }, /* TexFilterFuncSGIS */
+   {  6072, -1 }, /* GetTexFilterFuncSGIS */
+   { 14617, -1 }, /* TexFilterFuncSGIS */
    {    -1, -1 }
 };
 #endif
@@ -5674,16 +5696,16 @@ static const struct gl_function_remap GL_SGIX_async_functions[] = {
    {  3014, -1 }, /* AsyncMarkerSGIX */
    {  3997, -1 }, /* FinishAsyncSGIX */
    {  4734, -1 }, /* PollAsyncSGIX */
-   { 19762, -1 }, /* DeleteAsyncMarkersSGIX */
-   { 19791, -1 }, /* IsAsyncMarkerSGIX */
-   { 29114, -1 }, /* GenAsyncMarkersSGIX */
+   { 19847, -1 }, /* DeleteAsyncMarkersSGIX */
+   { 19876, -1 }, /* IsAsyncMarkerSGIX */
+   { 29206, -1 }, /* GenAsyncMarkersSGIX */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIX_flush_raster)
 static const struct gl_function_remap GL_SGIX_flush_raster_functions[] = {
-   {  6413, -1 }, /* FlushRasterSGIX */
+   {  6443, -1 }, /* FlushRasterSGIX */
    {    -1, -1 }
 };
 #endif
@@ -5693,35 +5715,35 @@ static const struct gl_function_remap GL_SGIX_fragment_lighting_functions[] = {
    {  2410, -1 }, /* FragmentMaterialfvSGIX */
    {  2906, -1 }, /* FragmentLightModelivSGIX */
    {  4685, -1 }, /* FragmentLightiSGIX */
-   {  5545, -1 }, /* GetFragmentMaterialfvSGIX */
-   {  7133, -1 }, /* FragmentMaterialfSGIX */
-   {  7294, -1 }, /* GetFragmentLightivSGIX */
-   {  8131, -1 }, /* FragmentLightModeliSGIX */
-   {  9494, -1 }, /* FragmentLightivSGIX */
-   {  9760, -1 }, /* GetFragmentMaterialivSGIX */
-   { 17141, -1 }, /* FragmentLightModelfSGIX */
-   { 17441, -1 }, /* FragmentColorMaterialSGIX */
-   { 17813, -1 }, /* FragmentMaterialiSGIX */
-   { 19034, -1 }, /* LightEnviSGIX */
-   { 20445, -1 }, /* FragmentLightModelfvSGIX */
-   { 20754, -1 }, /* FragmentLightfvSGIX */
-   { 25401, -1 }, /* FragmentLightfSGIX */
-   { 28030, -1 }, /* GetFragmentLightfvSGIX */
-   { 29597, -1 }, /* FragmentMaterialivSGIX */
+   {  5575, -1 }, /* GetFragmentMaterialfvSGIX */
+   {  7163, -1 }, /* FragmentMaterialfSGIX */
+   {  7324, -1 }, /* GetFragmentLightivSGIX */
+   {  8161, -1 }, /* FragmentLightModeliSGIX */
+   {  9524, -1 }, /* FragmentLightivSGIX */
+   {  9790, -1 }, /* GetFragmentMaterialivSGIX */
+   { 17198, -1 }, /* FragmentLightModelfSGIX */
+   { 17498, -1 }, /* FragmentColorMaterialSGIX */
+   { 17898, -1 }, /* FragmentMaterialiSGIX */
+   { 19119, -1 }, /* LightEnviSGIX */
+   { 20530, -1 }, /* FragmentLightModelfvSGIX */
+   { 20839, -1 }, /* FragmentLightfvSGIX */
+   { 25454, -1 }, /* FragmentLightfSGIX */
+   { 28122, -1 }, /* GetFragmentLightfvSGIX */
+   { 29689, -1 }, /* FragmentMaterialivSGIX */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIX_framezoom)
 static const struct gl_function_remap GL_SGIX_framezoom_functions[] = {
-   { 19814, -1 }, /* FrameZoomSGIX */
+   { 19899, -1 }, /* FrameZoomSGIX */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIX_igloo_interface)
 static const struct gl_function_remap GL_SGIX_igloo_interface_functions[] = {
-   { 25709, -1 }, /* IglooInterfaceSGIX */
+   { 25762, -1 }, /* IglooInterfaceSGIX */
    {    -1, -1 }
 };
 #endif
@@ -5729,11 +5751,11 @@ static const struct gl_function_remap GL_SGIX_igloo_interface_functions[] = {
 #if defined(need_GL_SGIX_instruments)
 static const struct gl_function_remap GL_SGIX_instruments_functions[] = {
    {  2573, -1 }, /* ReadInstrumentsSGIX */
-   {  5621, -1 }, /* PollInstrumentsSGIX */
-   {  9392, -1 }, /* GetInstrumentsSGIX */
-   { 11467, -1 }, /* StartInstrumentsSGIX */
-   { 14160, -1 }, /* StopInstrumentsSGIX */
-   { 15766, -1 }, /* InstrumentsBufferSGIX */
+   {  5651, -1 }, /* PollInstrumentsSGIX */
+   {  9422, -1 }, /* GetInstrumentsSGIX */
+   { 11492, -1 }, /* StartInstrumentsSGIX */
+   { 14217, -1 }, /* StopInstrumentsSGIX */
+   { 15823, -1 }, /* InstrumentsBufferSGIX */
    {    -1, -1 }
 };
 #endif
@@ -5742,10 +5764,10 @@ static const struct gl_function_remap GL_SGIX_instruments_functions[] = {
 static const struct gl_function_remap GL_SGIX_list_priority_functions[] = {
    {  1125, -1 }, /* ListParameterfSGIX */
    {  2763, -1 }, /* GetListParameterfvSGIX */
-   { 15681, -1 }, /* ListParameteriSGIX */
-   { 16435, -1 }, /* ListParameterfvSGIX */
-   { 18440, -1 }, /* ListParameterivSGIX */
-   { 29158, -1 }, /* GetListParameterivSGIX */
+   { 15738, -1 }, /* ListParameteriSGIX */
+   { 16492, -1 }, /* ListParameterfvSGIX */
+   { 18525, -1 }, /* ListParameterivSGIX */
+   { 29250, -1 }, /* GetListParameterivSGIX */
    {    -1, -1 }
 };
 #endif
@@ -5760,53 +5782,53 @@ static const struct gl_function_remap GL_SGIX_pixel_texture_functions[] = {
 #if defined(need_GL_SGIX_polynomial_ffd)
 static const struct gl_function_remap GL_SGIX_polynomial_ffd_functions[] = {
    {  3251, -1 }, /* LoadIdentityDeformationMapSGIX */
-   { 10835, -1 }, /* DeformationMap3dSGIX */
-   { 14260, -1 }, /* DeformSGIX */
-   { 21639, -1 }, /* DeformationMap3fSGIX */
+   { 14317, -1 }, /* DeformSGIX */
+   { 21724, -1 }, /* DeformationMap3fSGIX */
+   { 28010, -1 }, /* DeformationMap3dSGIX */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIX_reference_plane)
 static const struct gl_function_remap GL_SGIX_reference_plane_functions[] = {
-   { 12991, -1 }, /* ReferencePlaneSGIX */
+   { 13048, -1 }, /* ReferencePlaneSGIX */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIX_sprite)
 static const struct gl_function_remap GL_SGIX_sprite_functions[] = {
-   {  8547, -1 }, /* SpriteParameterfvSGIX */
-   { 18268, -1 }, /* SpriteParameteriSGIX */
-   { 23667, -1 }, /* SpriteParameterfSGIX */
-   { 26273, -1 }, /* SpriteParameterivSGIX */
+   {  8577, -1 }, /* SpriteParameterfvSGIX */
+   { 18353, -1 }, /* SpriteParameteriSGIX */
+   { 23752, -1 }, /* SpriteParameterfSGIX */
+   { 26326, -1 }, /* SpriteParameterivSGIX */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIX_tag_sample_buffer)
 static const struct gl_function_remap GL_SGIX_tag_sample_buffer_functions[] = {
-   { 18327, -1 }, /* TagSampleBufferSGIX */
+   { 18412, -1 }, /* TagSampleBufferSGIX */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGI_color_table)
 static const struct gl_function_remap GL_SGI_color_table_functions[] = {
-   {  6703, _gloffset_ColorTableParameteriv },
-   {  7415, _gloffset_ColorTable },
-   { 13487, _gloffset_GetColorTable },
-   { 13597, _gloffset_CopyColorTable },
-   { 17085, _gloffset_ColorTableParameterfv },
-   { 20353, _gloffset_GetColorTableParameterfv },
-   { 22346, _gloffset_GetColorTableParameteriv },
+   {  6733, _gloffset_ColorTableParameteriv },
+   {  7445, _gloffset_ColorTable },
+   { 13544, _gloffset_GetColorTable },
+   { 13654, _gloffset_CopyColorTable },
+   { 17142, _gloffset_ColorTableParameterfv },
+   { 20438, _gloffset_GetColorTableParameterfv },
+   { 22431, _gloffset_GetColorTableParameteriv },
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SUNX_constant_data)
 static const struct gl_function_remap GL_SUNX_constant_data_functions[] = {
-   { 28008, -1 }, /* FinishTextureSUNX */
+   { 28100, -1 }, /* FinishTextureSUNX */
    {    -1, -1 }
 };
 #endif
@@ -5815,19 +5837,19 @@ static const struct gl_function_remap GL_SUNX_constant_data_functions[] = {
 static const struct gl_function_remap GL_SUN_global_alpha_functions[] = {
    {  3035, -1 }, /* GlobalAlphaFactorubSUN */
    {  4224, -1 }, /* GlobalAlphaFactoriSUN */
-   {  5646, -1 }, /* GlobalAlphaFactordSUN */
-   {  8631, -1 }, /* GlobalAlphaFactoruiSUN */
-   {  8983, -1 }, /* GlobalAlphaFactorbSUN */
-   { 11782, -1 }, /* GlobalAlphaFactorfSUN */
-   { 11901, -1 }, /* GlobalAlphaFactorusSUN */
-   { 20053, -1 }, /* GlobalAlphaFactorsSUN */
+   {  5676, -1 }, /* GlobalAlphaFactordSUN */
+   {  8661, -1 }, /* GlobalAlphaFactoruiSUN */
+   {  9013, -1 }, /* GlobalAlphaFactorbSUN */
+   { 11807, -1 }, /* GlobalAlphaFactorfSUN */
+   { 11926, -1 }, /* GlobalAlphaFactorusSUN */
+   { 20138, -1 }, /* GlobalAlphaFactorsSUN */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SUN_mesh_array)
 static const struct gl_function_remap GL_SUN_mesh_array_functions[] = {
-   { 26085, -1 }, /* DrawMeshArraysSUN */
+   { 26138, -1 }, /* DrawMeshArraysSUN */
    {    -1, -1 }
 };
 #endif
@@ -5835,12 +5857,12 @@ static const struct gl_function_remap GL_SUN_mesh_array_functions[] = {
 #if defined(need_GL_SUN_triangle_list)
 static const struct gl_function_remap GL_SUN_triangle_list_functions[] = {
    {  3971, -1 }, /* ReplacementCodeubSUN */
-   {  5485, -1 }, /* ReplacementCodeubvSUN */
-   { 16806, -1 }, /* ReplacementCodeusvSUN */
-   { 16994, -1 }, /* ReplacementCodePointerSUN */
-   { 18351, -1 }, /* ReplacementCodeusSUN */
-   { 19098, -1 }, /* ReplacementCodeuiSUN */
-   { 26730, -1 }, /* ReplacementCodeuivSUN */
+   {  5515, -1 }, /* ReplacementCodeubvSUN */
+   { 16863, -1 }, /* ReplacementCodeusvSUN */
+   { 17051, -1 }, /* ReplacementCodePointerSUN */
+   { 18436, -1 }, /* ReplacementCodeusSUN */
+   { 19183, -1 }, /* ReplacementCodeuiSUN */
+   { 26783, -1 }, /* ReplacementCodeuivSUN */
    {    -1, -1 }
 };
 #endif
@@ -5858,35 +5880,35 @@ static const struct gl_function_remap GL_SUN_vertex_functions[] = {
    {  4181, -1 }, /* TexCoord2fVertex3fSUN */
    {  4480, -1 }, /* TexCoord2fColor4fNormal3fVertex3fSUN */
    {  4810, -1 }, /* TexCoord2fNormal3fVertex3fvSUN */
-   {  5380, -1 }, /* ReplacementCodeuiTexCoord2fNormal3fVertex3fSUN */
-   {  6450, -1 }, /* ReplacementCodeuiTexCoord2fVertex3fSUN */
-   {  7162, -1 }, /* TexCoord2fNormal3fVertex3fSUN */
-   {  7930, -1 }, /* Color3fVertex3fSUN */
-   {  8942, -1 }, /* Color3fVertex3fvSUN */
-   {  9357, -1 }, /* Color4fNormal3fVertex3fvSUN */
-   { 10058, -1 }, /* ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN */
-   { 11330, -1 }, /* ReplacementCodeuiColor4fNormal3fVertex3fvSUN */
-   { 12722, -1 }, /* ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN */
-   { 13133, -1 }, /* TexCoord2fColor3fVertex3fSUN */
-   { 14185, -1 }, /* TexCoord4fColor4fNormal3fVertex4fSUN */
-   { 14519, -1 }, /* Color4ubVertex2fvSUN */
-   { 14759, -1 }, /* Normal3fVertex3fSUN */
-   { 15707, -1 }, /* ReplacementCodeuiColor4fNormal3fVertex3fSUN */
-   { 15968, -1 }, /* TexCoord2fColor4fNormal3fVertex3fvSUN */
-   { 16635, -1 }, /* TexCoord2fVertex3fvSUN */
-   { 17411, -1 }, /* Color4ubVertex2fSUN */
-   { 17604, -1 }, /* ReplacementCodeuiColor4ubVertex3fSUN */
-   { 19486, -1 }, /* TexCoord2fColor4ubVertex3fSUN */
-   { 19833, -1 }, /* Normal3fVertex3fvSUN */
-   { 20262, -1 }, /* Color4fNormal3fVertex3fSUN */
-   { 21171, -1 }, /* ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN */
-   { 21391, -1 }, /* ReplacementCodeuiColor4ubVertex3fvSUN */
-   { 23121, -1 }, /* ReplacementCodeuiColor3fVertex3fSUN */
-   { 24376, -1 }, /* TexCoord4fVertex4fSUN */
-   { 24802, -1 }, /* TexCoord2fColor3fVertex3fvSUN */
-   { 25128, -1 }, /* ReplacementCodeuiNormal3fVertex3fvSUN */
-   { 25255, -1 }, /* TexCoord4fVertex4fvSUN */
-   { 25957, -1 }, /* ReplacementCodeuiVertex3fSUN */
+   {  5410, -1 }, /* ReplacementCodeuiTexCoord2fNormal3fVertex3fSUN */
+   {  6480, -1 }, /* ReplacementCodeuiTexCoord2fVertex3fSUN */
+   {  7192, -1 }, /* TexCoord2fNormal3fVertex3fSUN */
+   {  7960, -1 }, /* Color3fVertex3fSUN */
+   {  8972, -1 }, /* Color3fVertex3fvSUN */
+   {  9387, -1 }, /* Color4fNormal3fVertex3fvSUN */
+   { 10088, -1 }, /* ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN */
+   { 11355, -1 }, /* ReplacementCodeuiColor4fNormal3fVertex3fvSUN */
+   { 12779, -1 }, /* ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN */
+   { 13190, -1 }, /* TexCoord2fColor3fVertex3fSUN */
+   { 14242, -1 }, /* TexCoord4fColor4fNormal3fVertex4fSUN */
+   { 14576, -1 }, /* Color4ubVertex2fvSUN */
+   { 14816, -1 }, /* Normal3fVertex3fSUN */
+   { 15764, -1 }, /* ReplacementCodeuiColor4fNormal3fVertex3fSUN */
+   { 16025, -1 }, /* TexCoord2fColor4fNormal3fVertex3fvSUN */
+   { 16692, -1 }, /* TexCoord2fVertex3fvSUN */
+   { 17468, -1 }, /* Color4ubVertex2fSUN */
+   { 17689, -1 }, /* ReplacementCodeuiColor4ubVertex3fSUN */
+   { 19571, -1 }, /* TexCoord2fColor4ubVertex3fSUN */
+   { 19918, -1 }, /* Normal3fVertex3fvSUN */
+   { 20347, -1 }, /* Color4fNormal3fVertex3fSUN */
+   { 21256, -1 }, /* ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN */
+   { 21476, -1 }, /* ReplacementCodeuiColor4ubVertex3fvSUN */
+   { 23206, -1 }, /* ReplacementCodeuiColor3fVertex3fSUN */
+   { 24429, -1 }, /* TexCoord4fVertex4fSUN */
+   { 24855, -1 }, /* TexCoord2fColor3fVertex3fvSUN */
+   { 25181, -1 }, /* ReplacementCodeuiNormal3fVertex3fvSUN */
+   { 25308, -1 }, /* TexCoord4fVertex4fvSUN */
+   { 26010, -1 }, /* ReplacementCodeuiVertex3fSUN */
    {    -1, -1 }
 };
 #endif
@@ -5897,37 +5919,37 @@ static const struct gl_function_remap GL_VERSION_1_3_functions[] = {
    {   381, _gloffset_MultiTexCoord3sARB },
    {   613, _gloffset_ActiveTextureARB },
    {  3761, _gloffset_MultiTexCoord1fvARB },
-   {  5271, _gloffset_MultiTexCoord3dARB },
-   {  5316, _gloffset_MultiTexCoord2iARB },
-   {  5440, _gloffset_MultiTexCoord2svARB },
-   {  7371, _gloffset_MultiTexCoord2fARB },
-   {  9193, _gloffset_MultiTexCoord3fvARB },
-   {  9714, _gloffset_MultiTexCoord4sARB },
-   { 10314, _gloffset_MultiTexCoord2dvARB },
-   { 10696, _gloffset_MultiTexCoord1svARB },
-   { 11025, _gloffset_MultiTexCoord3svARB },
-   { 11086, _gloffset_MultiTexCoord4iARB },
-   { 11809, _gloffset_MultiTexCoord3iARB },
-   { 12511, _gloffset_MultiTexCoord1dARB },
-   { 12677, _gloffset_MultiTexCoord3dvARB },
-   { 13841, _gloffset_MultiTexCoord3ivARB },
-   { 13886, _gloffset_MultiTexCoord2sARB },
-   { 15106, _gloffset_MultiTexCoord4ivARB },
-   { 16735, _gloffset_ClientActiveTextureARB },
-   { 18951, _gloffset_MultiTexCoord2dARB },
-   { 19355, _gloffset_MultiTexCoord4dvARB },
-   { 19641, _gloffset_MultiTexCoord4fvARB },
-   { 20494, _gloffset_MultiTexCoord3fARB },
-   { 22874, _gloffset_MultiTexCoord4dARB },
-   { 23078, _gloffset_MultiTexCoord1sARB },
-   { 23280, _gloffset_MultiTexCoord1dvARB },
-   { 24122, _gloffset_MultiTexCoord1ivARB },
-   { 24215, _gloffset_MultiTexCoord2ivARB },
-   { 24554, _gloffset_MultiTexCoord1iARB },
-   { 25825, _gloffset_MultiTexCoord4svARB },
-   { 26343, _gloffset_MultiTexCoord1fARB },
-   { 26606, _gloffset_MultiTexCoord4fARB },
-   { 28835, _gloffset_MultiTexCoord2fvARB },
+   {  5301, _gloffset_MultiTexCoord3dARB },
+   {  5346, _gloffset_MultiTexCoord2iARB },
+   {  5470, _gloffset_MultiTexCoord2svARB },
+   {  7401, _gloffset_MultiTexCoord2fARB },
+   {  9223, _gloffset_MultiTexCoord3fvARB },
+   {  9744, _gloffset_MultiTexCoord4sARB },
+   { 10378, _gloffset_MultiTexCoord2dvARB },
+   { 10760, _gloffset_MultiTexCoord1svARB },
+   { 11050, _gloffset_MultiTexCoord3svARB },
+   { 11111, _gloffset_MultiTexCoord4iARB },
+   { 11834, _gloffset_MultiTexCoord3iARB },
+   { 12568, _gloffset_MultiTexCoord1dARB },
+   { 12734, _gloffset_MultiTexCoord3dvARB },
+   { 13898, _gloffset_MultiTexCoord3ivARB },
+   { 13943, _gloffset_MultiTexCoord2sARB },
+   { 15163, _gloffset_MultiTexCoord4ivARB },
+   { 16792, _gloffset_ClientActiveTextureARB },
+   { 19036, _gloffset_MultiTexCoord2dARB },
+   { 19440, _gloffset_MultiTexCoord4dvARB },
+   { 19726, _gloffset_MultiTexCoord4fvARB },
+   { 20579, _gloffset_MultiTexCoord3fARB },
+   { 22959, _gloffset_MultiTexCoord4dARB },
+   { 23163, _gloffset_MultiTexCoord1sARB },
+   { 23365, _gloffset_MultiTexCoord1dvARB },
+   { 24175, _gloffset_MultiTexCoord1ivARB },
+   { 24268, _gloffset_MultiTexCoord2ivARB },
+   { 24607, _gloffset_MultiTexCoord1iARB },
+   { 25878, _gloffset_MultiTexCoord4svARB },
+   { 26396, _gloffset_MultiTexCoord1fARB },
+   { 26659, _gloffset_MultiTexCoord4fARB },
+   { 28927, _gloffset_MultiTexCoord2fvARB },
    {    -1, -1 }
 };
 #endif
diff --git a/src/mesa/sparc/glapi_sparc.S b/src/mesa/sparc/glapi_sparc.S
index 3fbdb4abb3..478adc6520 100644
--- a/src/mesa/sparc/glapi_sparc.S
+++ b/src/mesa/sparc/glapi_sparc.S
@@ -1027,16 +1027,19 @@ gl_dispatch_functions_start:
 	HIDDEN(gl_dispatch_stub_796)
 	GL_STUB(gl_dispatch_stub_797, _gloffset_TextureRangeAPPLE)
 	HIDDEN(gl_dispatch_stub_797)
-	GL_STUB(gl_dispatch_stub_798, _gloffset_StencilFuncSeparateATI)
-	HIDDEN(gl_dispatch_stub_798)
-	GL_STUB(gl_dispatch_stub_799, _gloffset_ProgramEnvParameters4fvEXT)
-	HIDDEN(gl_dispatch_stub_799)
-	GL_STUB(gl_dispatch_stub_800, _gloffset_ProgramLocalParameters4fvEXT)
-	HIDDEN(gl_dispatch_stub_800)
-	GL_STUB(gl_dispatch_stub_801, _gloffset_GetQueryObjecti64vEXT)
+	GL_STUB(glGetObjectParameterivAPPLE, _gloffset_GetObjectParameterivAPPLE)
+	GL_STUB(glObjectPurgeableAPPLE, _gloffset_ObjectPurgeableAPPLE)
+	GL_STUB(glObjectUnpurgeableAPPLE, _gloffset_ObjectUnpurgeableAPPLE)
+	GL_STUB(gl_dispatch_stub_801, _gloffset_StencilFuncSeparateATI)
 	HIDDEN(gl_dispatch_stub_801)
-	GL_STUB(gl_dispatch_stub_802, _gloffset_GetQueryObjectui64vEXT)
+	GL_STUB(gl_dispatch_stub_802, _gloffset_ProgramEnvParameters4fvEXT)
 	HIDDEN(gl_dispatch_stub_802)
+	GL_STUB(gl_dispatch_stub_803, _gloffset_ProgramLocalParameters4fvEXT)
+	HIDDEN(gl_dispatch_stub_803)
+	GL_STUB(gl_dispatch_stub_804, _gloffset_GetQueryObjecti64vEXT)
+	HIDDEN(gl_dispatch_stub_804)
+	GL_STUB(gl_dispatch_stub_805, _gloffset_GetQueryObjectui64vEXT)
+	HIDDEN(gl_dispatch_stub_805)
 	GL_STUB(glEGLImageTargetRenderbufferStorageOES, _gloffset_EGLImageTargetRenderbufferStorageOES)
 	GL_STUB(glEGLImageTargetTexture2DOES, _gloffset_EGLImageTargetTexture2DOES)
 	GL_STUB_ALIAS(glArrayElementEXT, glArrayElement)
diff --git a/src/mesa/x86-64/glapi_x86-64.S b/src/mesa/x86-64/glapi_x86-64.S
index 03a2c999ff..a76cbb07d5 100644
--- a/src/mesa/x86-64/glapi_x86-64.S
+++ b/src/mesa/x86-64/glapi_x86-64.S
@@ -30201,10 +30201,9 @@ GL_PREFIX(_dispatch_stub_797):
 	.size	GL_PREFIX(_dispatch_stub_797), .-GL_PREFIX(_dispatch_stub_797)
 
 	.p2align	4,,15
-	.globl	GL_PREFIX(_dispatch_stub_798)
-	.type	GL_PREFIX(_dispatch_stub_798), @function
-	HIDDEN(GL_PREFIX(_dispatch_stub_798))
-GL_PREFIX(_dispatch_stub_798):
+	.globl	GL_PREFIX(GetObjectParameterivAPPLE)
+	.type	GL_PREFIX(GetObjectParameterivAPPLE), @function
+GL_PREFIX(GetObjectParameterivAPPLE):
 #if defined(GLX_USE_TLS)
 	call	_x86_64_get_dispatch@PLT
 	movq	6384(%rax), %r11
@@ -30244,13 +30243,12 @@ GL_PREFIX(_dispatch_stub_798):
 	movq	6384(%rax), %r11
 	jmp	*%r11
 #endif /* defined(GLX_USE_TLS) */
-	.size	GL_PREFIX(_dispatch_stub_798), .-GL_PREFIX(_dispatch_stub_798)
+	.size	GL_PREFIX(GetObjectParameterivAPPLE), .-GL_PREFIX(GetObjectParameterivAPPLE)
 
 	.p2align	4,,15
-	.globl	GL_PREFIX(_dispatch_stub_799)
-	.type	GL_PREFIX(_dispatch_stub_799), @function
-	HIDDEN(GL_PREFIX(_dispatch_stub_799))
-GL_PREFIX(_dispatch_stub_799):
+	.globl	GL_PREFIX(ObjectPurgeableAPPLE)
+	.type	GL_PREFIX(ObjectPurgeableAPPLE), @function
+GL_PREFIX(ObjectPurgeableAPPLE):
 #if defined(GLX_USE_TLS)
 	call	_x86_64_get_dispatch@PLT
 	movq	6392(%rax), %r11
@@ -30259,11 +30257,7 @@ GL_PREFIX(_dispatch_stub_799):
 	pushq	%rdi
 	pushq	%rsi
 	pushq	%rdx
-	pushq	%rcx
-	pushq	%rbp
 	call	_x86_64_get_dispatch@PLT
-	popq	%rbp
-	popq	%rcx
 	popq	%rdx
 	popq	%rsi
 	popq	%rdi
@@ -30279,24 +30273,19 @@ GL_PREFIX(_dispatch_stub_799):
 	pushq	%rdi
 	pushq	%rsi
 	pushq	%rdx
-	pushq	%rcx
-	pushq	%rbp
 	call	_glapi_get_dispatch
-	popq	%rbp
-	popq	%rcx
 	popq	%rdx
 	popq	%rsi
 	popq	%rdi
 	movq	6392(%rax), %r11
 	jmp	*%r11
 #endif /* defined(GLX_USE_TLS) */
-	.size	GL_PREFIX(_dispatch_stub_799), .-GL_PREFIX(_dispatch_stub_799)
+	.size	GL_PREFIX(ObjectPurgeableAPPLE), .-GL_PREFIX(ObjectPurgeableAPPLE)
 
 	.p2align	4,,15
-	.globl	GL_PREFIX(_dispatch_stub_800)
-	.type	GL_PREFIX(_dispatch_stub_800), @function
-	HIDDEN(GL_PREFIX(_dispatch_stub_800))
-GL_PREFIX(_dispatch_stub_800):
+	.globl	GL_PREFIX(ObjectUnpurgeableAPPLE)
+	.type	GL_PREFIX(ObjectUnpurgeableAPPLE), @function
+GL_PREFIX(ObjectUnpurgeableAPPLE):
 #if defined(GLX_USE_TLS)
 	call	_x86_64_get_dispatch@PLT
 	movq	6400(%rax), %r11
@@ -30305,11 +30294,7 @@ GL_PREFIX(_dispatch_stub_800):
 	pushq	%rdi
 	pushq	%rsi
 	pushq	%rdx
-	pushq	%rcx
-	pushq	%rbp
 	call	_x86_64_get_dispatch@PLT
-	popq	%rbp
-	popq	%rcx
 	popq	%rdx
 	popq	%rsi
 	popq	%rdi
@@ -30325,18 +30310,14 @@ GL_PREFIX(_dispatch_stub_800):
 	pushq	%rdi
 	pushq	%rsi
 	pushq	%rdx
-	pushq	%rcx
-	pushq	%rbp
 	call	_glapi_get_dispatch
-	popq	%rbp
-	popq	%rcx
 	popq	%rdx
 	popq	%rsi
 	popq	%rdi
 	movq	6400(%rax), %r11
 	jmp	*%r11
 #endif /* defined(GLX_USE_TLS) */
-	.size	GL_PREFIX(_dispatch_stub_800), .-GL_PREFIX(_dispatch_stub_800)
+	.size	GL_PREFIX(ObjectUnpurgeableAPPLE), .-GL_PREFIX(ObjectUnpurgeableAPPLE)
 
 	.p2align	4,,15
 	.globl	GL_PREFIX(_dispatch_stub_801)
@@ -30351,7 +30332,11 @@ GL_PREFIX(_dispatch_stub_801):
 	pushq	%rdi
 	pushq	%rsi
 	pushq	%rdx
+	pushq	%rcx
+	pushq	%rbp
 	call	_x86_64_get_dispatch@PLT
+	popq	%rbp
+	popq	%rcx
 	popq	%rdx
 	popq	%rsi
 	popq	%rdi
@@ -30367,7 +30352,11 @@ GL_PREFIX(_dispatch_stub_801):
 	pushq	%rdi
 	pushq	%rsi
 	pushq	%rdx
+	pushq	%rcx
+	pushq	%rbp
 	call	_glapi_get_dispatch
+	popq	%rbp
+	popq	%rcx
 	popq	%rdx
 	popq	%rsi
 	popq	%rdi
@@ -30389,7 +30378,11 @@ GL_PREFIX(_dispatch_stub_802):
 	pushq	%rdi
 	pushq	%rsi
 	pushq	%rdx
+	pushq	%rcx
+	pushq	%rbp
 	call	_x86_64_get_dispatch@PLT
+	popq	%rbp
+	popq	%rcx
 	popq	%rdx
 	popq	%rsi
 	popq	%rdi
@@ -30405,7 +30398,11 @@ GL_PREFIX(_dispatch_stub_802):
 	pushq	%rdi
 	pushq	%rsi
 	pushq	%rdx
+	pushq	%rcx
+	pushq	%rbp
 	call	_glapi_get_dispatch
+	popq	%rbp
+	popq	%rcx
 	popq	%rdx
 	popq	%rsi
 	popq	%rdi
@@ -30415,9 +30412,10 @@ GL_PREFIX(_dispatch_stub_802):
 	.size	GL_PREFIX(_dispatch_stub_802), .-GL_PREFIX(_dispatch_stub_802)
 
 	.p2align	4,,15
-	.globl	GL_PREFIX(EGLImageTargetRenderbufferStorageOES)
-	.type	GL_PREFIX(EGLImageTargetRenderbufferStorageOES), @function
-GL_PREFIX(EGLImageTargetRenderbufferStorageOES):
+	.globl	GL_PREFIX(_dispatch_stub_803)
+	.type	GL_PREFIX(_dispatch_stub_803), @function
+	HIDDEN(GL_PREFIX(_dispatch_stub_803))
+GL_PREFIX(_dispatch_stub_803):
 #if defined(GLX_USE_TLS)
 	call	_x86_64_get_dispatch@PLT
 	movq	6424(%rax), %r11
@@ -30425,9 +30423,13 @@ GL_PREFIX(EGLImageTargetRenderbufferStorageOES):
 #elif defined(PTHREADS)
 	pushq	%rdi
 	pushq	%rsi
+	pushq	%rdx
+	pushq	%rcx
 	pushq	%rbp
 	call	_x86_64_get_dispatch@PLT
 	popq	%rbp
+	popq	%rcx
+	popq	%rdx
 	popq	%rsi
 	popq	%rdi
 	movq	6424(%rax), %r11
@@ -30441,13 +30443,130 @@ GL_PREFIX(EGLImageTargetRenderbufferStorageOES):
 1:
 	pushq	%rdi
 	pushq	%rsi
+	pushq	%rdx
+	pushq	%rcx
 	pushq	%rbp
 	call	_glapi_get_dispatch
 	popq	%rbp
+	popq	%rcx
+	popq	%rdx
 	popq	%rsi
 	popq	%rdi
 	movq	6424(%rax), %r11
 	jmp	*%r11
+#endif /* defined(GLX_USE_TLS) */
+	.size	GL_PREFIX(_dispatch_stub_803), .-GL_PREFIX(_dispatch_stub_803)
+
+	.p2align	4,,15
+	.globl	GL_PREFIX(_dispatch_stub_804)
+	.type	GL_PREFIX(_dispatch_stub_804), @function
+	HIDDEN(GL_PREFIX(_dispatch_stub_804))
+GL_PREFIX(_dispatch_stub_804):
+#if defined(GLX_USE_TLS)
+	call	_x86_64_get_dispatch@PLT
+	movq	6432(%rax), %r11
+	jmp	*%r11
+#elif defined(PTHREADS)
+	pushq	%rdi
+	pushq	%rsi
+	pushq	%rdx
+	call	_x86_64_get_dispatch@PLT
+	popq	%rdx
+	popq	%rsi
+	popq	%rdi
+	movq	6432(%rax), %r11
+	jmp	*%r11
+#else
+	movq	_glapi_Dispatch(%rip), %rax
+	testq	%rax, %rax
+	je	1f
+	movq	6432(%rax), %r11
+	jmp	*%r11
+1:
+	pushq	%rdi
+	pushq	%rsi
+	pushq	%rdx
+	call	_glapi_get_dispatch
+	popq	%rdx
+	popq	%rsi
+	popq	%rdi
+	movq	6432(%rax), %r11
+	jmp	*%r11
+#endif /* defined(GLX_USE_TLS) */
+	.size	GL_PREFIX(_dispatch_stub_804), .-GL_PREFIX(_dispatch_stub_804)
+
+	.p2align	4,,15
+	.globl	GL_PREFIX(_dispatch_stub_805)
+	.type	GL_PREFIX(_dispatch_stub_805), @function
+	HIDDEN(GL_PREFIX(_dispatch_stub_805))
+GL_PREFIX(_dispatch_stub_805):
+#if defined(GLX_USE_TLS)
+	call	_x86_64_get_dispatch@PLT
+	movq	6440(%rax), %r11
+	jmp	*%r11
+#elif defined(PTHREADS)
+	pushq	%rdi
+	pushq	%rsi
+	pushq	%rdx
+	call	_x86_64_get_dispatch@PLT
+	popq	%rdx
+	popq	%rsi
+	popq	%rdi
+	movq	6440(%rax), %r11
+	jmp	*%r11
+#else
+	movq	_glapi_Dispatch(%rip), %rax
+	testq	%rax, %rax
+	je	1f
+	movq	6440(%rax), %r11
+	jmp	*%r11
+1:
+	pushq	%rdi
+	pushq	%rsi
+	pushq	%rdx
+	call	_glapi_get_dispatch
+	popq	%rdx
+	popq	%rsi
+	popq	%rdi
+	movq	6440(%rax), %r11
+	jmp	*%r11
+#endif /* defined(GLX_USE_TLS) */
+	.size	GL_PREFIX(_dispatch_stub_805), .-GL_PREFIX(_dispatch_stub_805)
+
+	.p2align	4,,15
+	.globl	GL_PREFIX(EGLImageTargetRenderbufferStorageOES)
+	.type	GL_PREFIX(EGLImageTargetRenderbufferStorageOES), @function
+GL_PREFIX(EGLImageTargetRenderbufferStorageOES):
+#if defined(GLX_USE_TLS)
+	call	_x86_64_get_dispatch@PLT
+	movq	6448(%rax), %r11
+	jmp	*%r11
+#elif defined(PTHREADS)
+	pushq	%rdi
+	pushq	%rsi
+	pushq	%rbp
+	call	_x86_64_get_dispatch@PLT
+	popq	%rbp
+	popq	%rsi
+	popq	%rdi
+	movq	6448(%rax), %r11
+	jmp	*%r11
+#else
+	movq	_glapi_Dispatch(%rip), %rax
+	testq	%rax, %rax
+	je	1f
+	movq	6448(%rax), %r11
+	jmp	*%r11
+1:
+	pushq	%rdi
+	pushq	%rsi
+	pushq	%rbp
+	call	_glapi_get_dispatch
+	popq	%rbp
+	popq	%rsi
+	popq	%rdi
+	movq	6448(%rax), %r11
+	jmp	*%r11
 #endif /* defined(GLX_USE_TLS) */
 	.size	GL_PREFIX(EGLImageTargetRenderbufferStorageOES), .-GL_PREFIX(EGLImageTargetRenderbufferStorageOES)
 
@@ -30457,7 +30576,7 @@ GL_PREFIX(EGLImageTargetRenderbufferStorageOES):
 GL_PREFIX(EGLImageTargetTexture2DOES):
 #if defined(GLX_USE_TLS)
 	call	_x86_64_get_dispatch@PLT
-	movq	6432(%rax), %r11
+	movq	6456(%rax), %r11
 	jmp	*%r11
 #elif defined(PTHREADS)
 	pushq	%rdi
@@ -30467,13 +30586,13 @@ GL_PREFIX(EGLImageTargetTexture2DOES):
 	popq	%rbp
 	popq	%rsi
 	popq	%rdi
-	movq	6432(%rax), %r11
+	movq	6456(%rax), %r11
 	jmp	*%r11
 #else
 	movq	_glapi_Dispatch(%rip), %rax
 	testq	%rax, %rax
 	je	1f
-	movq	6432(%rax), %r11
+	movq	6456(%rax), %r11
 	jmp	*%r11
 1:
 	pushq	%rdi
@@ -30483,7 +30602,7 @@ GL_PREFIX(EGLImageTargetTexture2DOES):
 	popq	%rbp
 	popq	%rsi
 	popq	%rdi
-	movq	6432(%rax), %r11
+	movq	6456(%rax), %r11
 	jmp	*%r11
 #endif /* defined(GLX_USE_TLS) */
 	.size	GL_PREFIX(EGLImageTargetTexture2DOES), .-GL_PREFIX(EGLImageTargetTexture2DOES)
diff --git a/src/mesa/x86/glapi_x86.S b/src/mesa/x86/glapi_x86.S
index ae5dd2b0d1..a7dd8d7218 100644
--- a/src/mesa/x86/glapi_x86.S
+++ b/src/mesa/x86/glapi_x86.S
@@ -981,16 +981,19 @@ GLNAME(gl_dispatch_functions_start):
 	HIDDEN(GL_PREFIX(_dispatch_stub_796, _dispatch_stub_796@12))
 	GL_STUB(_dispatch_stub_797, _gloffset_TextureRangeAPPLE, _dispatch_stub_797@12)
 	HIDDEN(GL_PREFIX(_dispatch_stub_797, _dispatch_stub_797@12))
-	GL_STUB(_dispatch_stub_798, _gloffset_StencilFuncSeparateATI, _dispatch_stub_798@16)
-	HIDDEN(GL_PREFIX(_dispatch_stub_798, _dispatch_stub_798@16))
-	GL_STUB(_dispatch_stub_799, _gloffset_ProgramEnvParameters4fvEXT, _dispatch_stub_799@16)
-	HIDDEN(GL_PREFIX(_dispatch_stub_799, _dispatch_stub_799@16))
-	GL_STUB(_dispatch_stub_800, _gloffset_ProgramLocalParameters4fvEXT, _dispatch_stub_800@16)
-	HIDDEN(GL_PREFIX(_dispatch_stub_800, _dispatch_stub_800@16))
-	GL_STUB(_dispatch_stub_801, _gloffset_GetQueryObjecti64vEXT, _dispatch_stub_801@12)
-	HIDDEN(GL_PREFIX(_dispatch_stub_801, _dispatch_stub_801@12))
-	GL_STUB(_dispatch_stub_802, _gloffset_GetQueryObjectui64vEXT, _dispatch_stub_802@12)
-	HIDDEN(GL_PREFIX(_dispatch_stub_802, _dispatch_stub_802@12))
+	GL_STUB(GetObjectParameterivAPPLE, _gloffset_GetObjectParameterivAPPLE, GetObjectParameterivAPPLE@16)
+	GL_STUB(ObjectPurgeableAPPLE, _gloffset_ObjectPurgeableAPPLE, ObjectPurgeableAPPLE@12)
+	GL_STUB(ObjectUnpurgeableAPPLE, _gloffset_ObjectUnpurgeableAPPLE, ObjectUnpurgeableAPPLE@12)
+	GL_STUB(_dispatch_stub_801, _gloffset_StencilFuncSeparateATI, _dispatch_stub_801@16)
+	HIDDEN(GL_PREFIX(_dispatch_stub_801, _dispatch_stub_801@16))
+	GL_STUB(_dispatch_stub_802, _gloffset_ProgramEnvParameters4fvEXT, _dispatch_stub_802@16)
+	HIDDEN(GL_PREFIX(_dispatch_stub_802, _dispatch_stub_802@16))
+	GL_STUB(_dispatch_stub_803, _gloffset_ProgramLocalParameters4fvEXT, _dispatch_stub_803@16)
+	HIDDEN(GL_PREFIX(_dispatch_stub_803, _dispatch_stub_803@16))
+	GL_STUB(_dispatch_stub_804, _gloffset_GetQueryObjecti64vEXT, _dispatch_stub_804@12)
+	HIDDEN(GL_PREFIX(_dispatch_stub_804, _dispatch_stub_804@12))
+	GL_STUB(_dispatch_stub_805, _gloffset_GetQueryObjectui64vEXT, _dispatch_stub_805@12)
+	HIDDEN(GL_PREFIX(_dispatch_stub_805, _dispatch_stub_805@12))
 	GL_STUB(EGLImageTargetRenderbufferStorageOES, _gloffset_EGLImageTargetRenderbufferStorageOES, EGLImageTargetRenderbufferStorageOES@8)
 	GL_STUB(EGLImageTargetTexture2DOES, _gloffset_EGLImageTargetTexture2DOES, EGLImageTargetTexture2DOES@8)
 	GL_STUB_ALIAS(ArrayElementEXT, _gloffset_ArrayElement, ArrayElementEXT@4, ArrayElement, ArrayElement@4)
-- 
cgit v1.2.3


From 43c347c63ee10db95bd912fc39b1127fa35305a4 Mon Sep 17 00:00:00 2001
From: Francisco Jerez <currojerez@riseup.net>
Date: Thu, 4 Mar 2010 21:27:11 +0100
Subject: dri/nouveau: Pack client arrays as they're copied to the real BO.

---
 src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c | 44 ++++++++++++++++++++--------
 1 file changed, 32 insertions(+), 12 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c b/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c
index 02c8580760..8a2caff63e 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c
@@ -24,8 +24,11 @@
  *
  */
 
-#include "main/bufferobj.h"
 #include "nouveau_bufferobj.h"
+#include "nouveau_util.h"
+
+#include "main/bufferobj.h"
+#include "main/image.h"
 
 /* Arbitrary pushbuf length we can assume we can get with a single
  * WAIT_RING. */
@@ -58,7 +61,11 @@ vbo_init_array(struct nouveau_array_state *a, int attr, int stride,
 	} else {
 		nouveau_bo_ref(NULL, &a->bo);
 		a->offset = 0;
-		a->buf = ptr;
+
+		if (map)
+			a->buf = ptr;
+		else
+			a->buf = NULL;
 	}
 
 	if (a->buf)
@@ -94,11 +101,20 @@ vbo_init_arrays(GLcontext *ctx, const struct _mesa_index_buffer *ib,
 
 		if (attr >= 0) {
 			const struct gl_client_array *array = arrays[attr];
+			int stride;
+
+			if (render->mode == VBO &&
+			    !_mesa_is_bufferobj(array->BufferObj))
+				/* Pack client buffers. */
+				stride = align(_mesa_sizeof_type(array->Type)
+					       * array->Size, 4);
+			else
+				stride = array->StrideB;
 
 			vbo_init_array(&render->attrs[attr], attr,
-				       array->StrideB, array->Size,
-				       array->Type, array->BufferObj,
-				       array->Ptr, render->mode == IMM);
+				       stride, array->Size, array->Type,
+				       array->BufferObj, array->Ptr,
+				       render->mode == IMM);
 		}
 	}
 }
@@ -276,17 +292,21 @@ vbo_bind_vertices(GLcontext *ctx, const struct gl_client_array **arrays,
 		if (attr >= 0) {
 			const struct gl_client_array *array = arrays[attr];
 			struct nouveau_array_state *a = &render->attrs[attr];
-			unsigned delta = (basevertex + min_index) * a->stride,
-				size = (max_index - min_index + 1) * a->stride;
+			unsigned delta = (basevertex + min_index)
+				* array->StrideB;
 
 			if (a->bo) {
 				a->offset = (intptr_t)array->Ptr + delta;
 			} else {
-				void *scratch = get_scratch_vbo(ctx, size,
-								&a->bo,
-								&a->offset);
-
-				memcpy(scratch, a->buf + delta, size);
+				int j, n = max_index - min_index + 1;
+				char *sp = (char *)array->Ptr + delta;
+				char *dp = get_scratch_vbo(ctx, n * a->stride,
+							   &a->bo, &a->offset);
+
+				for (j = 0; j < n; j++)
+					memcpy(dp + j * a->stride,
+					       sp + j * array->StrideB,
+					       a->stride);
 			}
 		}
 	}
-- 
cgit v1.2.3


From 80316cbefaa28454ab9d6da44ac93805608c3685 Mon Sep 17 00:00:00 2001
From: Francisco Jerez <currojerez@riseup.net>
Date: Thu, 4 Mar 2010 21:32:07 +0100
Subject: dri/nouveau: Try to keep client buffers smaller than the scratch VBO
 length.

---
 src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c b/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c
index 8a2caff63e..69a9b96f0c 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c
@@ -243,6 +243,23 @@ vbo_choose_attrs(GLcontext *ctx, const struct gl_client_array **arrays)
 	vbo_emit_attr(ctx, arrays, VERT_ATTRIB_POS);
 }
 
+static unsigned
+get_max_client_stride(GLcontext *ctx)
+{
+	struct nouveau_render_state *render = to_render_state(ctx);
+	int i, s = 0;
+
+	for (i = 0; i < render->attr_count; i++) {
+		int attr = render->map[i];
+		struct nouveau_array_state *a = &render->attrs[attr];
+
+		if (attr >= 0 && !a->bo)
+			s = MAX2(a->stride, s);
+	}
+
+	return s;
+}
+
 static void
 TAG(vbo_render_prims)(GLcontext *ctx, const struct gl_client_array **arrays,
 		      const struct _mesa_prim *prims, GLuint nr_prims,
@@ -257,9 +274,18 @@ vbo_maybe_split(GLcontext *ctx, const struct gl_client_array **arrays,
 	    GLuint min_index, GLuint max_index)
 {
 	struct nouveau_context *nctx = to_nouveau_context(ctx);
+	struct nouveau_render_state *render = to_render_state(ctx);
 	unsigned pushbuf_avail = PUSHBUF_DWORDS - 2 * nctx->bo.count,
 		vert_avail = get_max_vertices(ctx, NULL, pushbuf_avail),
 		idx_avail = get_max_vertices(ctx, ib, pushbuf_avail);
+	int stride;
+
+	/* Try to keep client buffers smaller than the scratch BOs. */
+	if (!ib && render->mode == VBO &&
+	    (stride = get_max_client_stride(ctx)))
+		    vert_avail = MIN2(vert_avail,
+				      RENDER_SCRATCH_SIZE / stride);
+
 
 	if ((ib && ib->count > idx_avail) ||
 	    (!ib && max_index - min_index > vert_avail)) {
-- 
cgit v1.2.3


From 9c21c1e865ad3008eb6f4d6d4e4a48c2ed94472d Mon Sep 17 00:00:00 2001
From: Francisco Jerez <currojerez@riseup.net>
Date: Thu, 4 Mar 2010 21:40:47 +0100
Subject: dri/nouveau: Fix rb->DataType for z24s8 renderbuffers.

---
 src/mesa/drivers/dri/nouveau/nouveau_fbo.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_fbo.c b/src/mesa/drivers/dri/nouveau/nouveau_fbo.c
index 846478650e..2ec3dc9242 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_fbo.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_fbo.c
@@ -72,7 +72,7 @@ set_renderbuffer_format(struct gl_renderbuffer *rb, GLenum internalFormat)
 	case GL_DEPTH24_STENCIL8_EXT:
 		rb->_BaseFormat  = GL_DEPTH_STENCIL;
 		rb->Format = MESA_FORMAT_Z24_S8;
-		rb->DataType = GL_UNSIGNED_INT;
+		rb->DataType = GL_UNSIGNED_INT_24_8_EXT;
 		s->cpp = 4;
 		break;
 	default:
-- 
cgit v1.2.3


From 210bcf6d156aba5994f25f1bd9c50586ebc3bada Mon Sep 17 00:00:00 2001
From: Andrew Randrianasulu <randrik@mail.ru>
Date: Mon, 1 Mar 2010 23:58:17 +0000
Subject: dri/nouveau: Add GL_EXT_stencil_wrap for nv04.

Signed-off-by: Francisco Jerez <currojerez@riseup.net>
---
 src/mesa/drivers/dri/nouveau/nv04_state_raster.c | 4 ++++
 1 file changed, 4 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/nouveau/nv04_state_raster.c b/src/mesa/drivers/dri/nouveau/nv04_state_raster.c
index 89c6753694..4314fc33cf 100644
--- a/src/mesa/drivers/dri/nouveau/nv04_state_raster.c
+++ b/src/mesa/drivers/dri/nouveau/nv04_state_raster.c
@@ -71,6 +71,10 @@ get_stencil_op(unsigned op)
 		return 0x5;
 	case GL_INVERT:
 		return 0x6;
+	case GL_INCR_WRAP:
+		return 0x7;
+	case GL_DECR_WRAP:
+		return 0x8;
 	default:
 		assert(0);
 	}
-- 
cgit v1.2.3


From 44df3577a77818d6e87f1b728f0aa19698133981 Mon Sep 17 00:00:00 2001
From: Andrew Randrianasulu <randrik@mail.ru>
Date: Mon, 1 Mar 2010 23:45:50 +0000
Subject: dri/nouveau: Enable GL_EXT_stencil_wrap.

Signed-off-by: Francisco Jerez <currojerez@riseup.net>
---
 src/mesa/drivers/dri/nouveau/nouveau_context.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_context.c b/src/mesa/drivers/dri/nouveau/nouveau_context.c
index 2629733273..ef26a19219 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_context.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_context.c
@@ -47,14 +47,15 @@
 #include "main/remap_helper.h"
 
 static const struct dri_extension nouveau_extensions[] = {
-	{ "GL_EXT_framebuffer_object",  GL_EXT_framebuffer_object_functions },
 	{ "GL_ARB_multitexture",	NULL },
-	{ "GL_EXT_texture_lod_bias",	NULL },
-	{ "GL_SGIS_generate_mipmap",	NULL },
 	{ "GL_ARB_texture_env_combine",	NULL },
 	{ "GL_ARB_texture_env_dot3",	NULL },
 	{ "GL_ARB_texture_env_add",	NULL },
+	{ "GL_EXT_texture_lod_bias",	NULL },
+	{ "GL_EXT_framebuffer_object",	GL_EXT_framebuffer_object_functions },
+	{ "GL_EXT_stencil_wrap",	NULL },
 	{ "GL_EXT_fog_coord",		GL_EXT_fog_coord_functions },
+	{ "GL_SGIS_generate_mipmap",	NULL },
 	{ NULL,				NULL }
 };
 
-- 
cgit v1.2.3


From 9c4937524e15dc685eb0c83cbdab8b637803fd78 Mon Sep 17 00:00:00 2001
From: Andrew Randrianasulu <randrik@mail.ru>
Date: Thu, 4 Mar 2010 23:15:47 +0100
Subject: dri/nouveau: Trivially add GL_ARB_texture_mirrored_repeat.

Signed-off-by: Francisco Jerez <currojerez@riseup.net>
---
 src/mesa/drivers/dri/nouveau/nouveau_context.c | 1 +
 1 file changed, 1 insertion(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_context.c b/src/mesa/drivers/dri/nouveau/nouveau_context.c
index ef26a19219..52185a2fb9 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_context.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_context.c
@@ -53,6 +53,7 @@ static const struct dri_extension nouveau_extensions[] = {
 	{ "GL_ARB_texture_env_add",	NULL },
 	{ "GL_EXT_texture_lod_bias",	NULL },
 	{ "GL_EXT_framebuffer_object",	GL_EXT_framebuffer_object_functions },
+	{ "GL_ARB_texture_mirrored_repeat", NULL },
 	{ "GL_EXT_stencil_wrap",	NULL },
 	{ "GL_EXT_fog_coord",		GL_EXT_fog_coord_functions },
 	{ "GL_SGIS_generate_mipmap",	NULL },
-- 
cgit v1.2.3


From a42fd95f43929c1e2c7acf2a6e49c473e1a2a178 Mon Sep 17 00:00:00 2001
From: Francisco Jerez <currojerez@riseup.net>
Date: Thu, 4 Mar 2010 23:19:49 +0100
Subject: dri/nouveau: Remove some CI remnants.

---
 src/mesa/drivers/dri/nouveau/nouveau_state.h     | 1 -
 src/mesa/drivers/dri/nouveau/nv04_context.c      | 1 -
 src/mesa/drivers/dri/nouveau/nv10_context.c      | 1 -
 src/mesa/drivers/dri/nouveau/nv10_driver.h       | 3 ---
 src/mesa/drivers/dri/nouveau/nv10_state_raster.c | 5 -----
 src/mesa/drivers/dri/nouveau/nv20_context.c      | 1 -
 6 files changed, 12 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_state.h b/src/mesa/drivers/dri/nouveau/nouveau_state.h
index d001fa259a..d01d962c9f 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_state.h
+++ b/src/mesa/drivers/dri/nouveau/nouveau_state.h
@@ -47,7 +47,6 @@ enum {
 	NOUVEAU_STATE_FRAG,
 	NOUVEAU_STATE_FRAMEBUFFER,
 	NOUVEAU_STATE_FOG,
-	NOUVEAU_STATE_INDEX_MASK,
 	NOUVEAU_STATE_LIGHT_ENABLE,
 	NOUVEAU_STATE_LIGHT_MODEL,
 	NOUVEAU_STATE_LIGHT_SOURCE0,
diff --git a/src/mesa/drivers/dri/nouveau/nv04_context.c b/src/mesa/drivers/dri/nouveau/nv04_context.c
index 1acd41de54..a442425e44 100644
--- a/src/mesa/drivers/dri/nouveau/nv04_context.c
+++ b/src/mesa/drivers/dri/nouveau/nv04_context.c
@@ -265,7 +265,6 @@ const struct nouveau_driver nv04_driver = {
 		nouveau_emit_nothing,
 		nouveau_emit_nothing,
 		nouveau_emit_nothing,
-		nouveau_emit_nothing,
 		nv04_emit_scissor,
 		nv04_defer_blend,
 		nv04_defer_control,
diff --git a/src/mesa/drivers/dri/nouveau/nv10_context.c b/src/mesa/drivers/dri/nouveau/nv10_context.c
index 8e70c419ed..860d0aeb8f 100644
--- a/src/mesa/drivers/dri/nouveau/nv10_context.c
+++ b/src/mesa/drivers/dri/nouveau/nv10_context.c
@@ -370,7 +370,6 @@ const struct nouveau_driver nv10_driver = {
 		nv10_emit_frag,
 		nv10_emit_framebuffer,
 		nv10_emit_fog,
-		nv10_emit_index_mask,
 		nv10_emit_light_enable,
 		nv10_emit_light_model,
 		nv10_emit_light_source,
diff --git a/src/mesa/drivers/dri/nouveau/nv10_driver.h b/src/mesa/drivers/dri/nouveau/nv10_driver.h
index b5ab19b3bc..d662712533 100644
--- a/src/mesa/drivers/dri/nouveau/nv10_driver.h
+++ b/src/mesa/drivers/dri/nouveau/nv10_driver.h
@@ -99,9 +99,6 @@ nv10_emit_depth(GLcontext *ctx, int emit);
 void
 nv10_emit_dither(GLcontext *ctx, int emit);
 
-void
-nv10_emit_index_mask(GLcontext *ctx, int emit);
-
 void
 nv10_emit_logic_opcode(GLcontext *ctx, int emit);
 
diff --git a/src/mesa/drivers/dri/nouveau/nv10_state_raster.c b/src/mesa/drivers/dri/nouveau/nv10_state_raster.c
index 68882ef05f..a62cd807a9 100644
--- a/src/mesa/drivers/dri/nouveau/nv10_state_raster.c
+++ b/src/mesa/drivers/dri/nouveau/nv10_state_raster.c
@@ -118,11 +118,6 @@ nv10_emit_dither(GLcontext *ctx, int emit)
 	OUT_RING(chan, ctx->Color.DitherFlag ? 1 : 0);
 }
 
-void
-nv10_emit_index_mask(GLcontext *ctx, int emit)
-{
-}
-
 void
 nv10_emit_logic_opcode(GLcontext *ctx, int emit)
 {
diff --git a/src/mesa/drivers/dri/nouveau/nv20_context.c b/src/mesa/drivers/dri/nouveau/nv20_context.c
index 635b5c0996..db39ef7075 100644
--- a/src/mesa/drivers/dri/nouveau/nv20_context.c
+++ b/src/mesa/drivers/dri/nouveau/nv20_context.c
@@ -459,7 +459,6 @@ const struct nouveau_driver nv20_driver = {
 		nv20_emit_frag,
 		nv20_emit_framebuffer,
 		nv20_emit_fog,
-		nv10_emit_index_mask,
 		nv10_emit_light_enable,
 		nv20_emit_light_model,
 		nv20_emit_light_source,
-- 
cgit v1.2.3


From 391b396f3fb300a912e6d9bfbf26f49cc30e52df Mon Sep 17 00:00:00 2001
From: Michel Dänzer <daenzer@vmware.com>
Date: Fri, 5 Mar 2010 00:15:40 +0100
Subject: Fix comparison of unsigned value against < 0.

---
 src/mesa/main/api_validate.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/main/api_validate.c b/src/mesa/main/api_validate.c
index 326ad6f909..e9359dbe5f 100644
--- a/src/mesa/main/api_validate.c
+++ b/src/mesa/main/api_validate.c
@@ -147,7 +147,7 @@ check_index_bounds(GLcontext *ctx, GLsizei count, GLenum type,
 
    vbo_get_minmax_index(ctx, &prim, &ib, &min, &max);
 
-   if (min + basevertex < 0 ||
+   if ((int)(min + basevertex) < 0 ||
        max + basevertex > ctx->Array.ArrayObj->_MaxElement) {
       /* the max element is out of bounds of one or more enabled arrays */
       _mesa_warning(ctx, "glDrawElements() index=%u is "
-- 
cgit v1.2.3


From 7cbc4c07ee85782d5da3e2db3c4e072ca498ff07 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Thu, 4 Mar 2010 15:33:21 -0800
Subject: intel: Remove the unused s8 spans code.  Not hit during no_rast
 piglit.

Shaves 5.5k off of the driver.
---
 src/mesa/drivers/dri/intel/intel_span.c | 60 +--------------------------------
 1 file changed, 1 insertion(+), 59 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/intel/intel_span.c b/src/mesa/drivers/dri/intel/intel_span.c
index 0072bb15fc..2fcb2d843c 100644
--- a/src/mesa/drivers/dri/intel/intel_span.c
+++ b/src/mesa/drivers/dri/intel/intel_span.c
@@ -352,40 +352,6 @@ static uint32_t y_tile_swizzle(struct intel_renderbuffer *irb,
 #define INTEL_TAG(name) name##_z24_x8
 #include "intel_depthtmp.h"
 
-
-/**
- ** 8-bit stencil function (XXX FBO: This is obsolete)
- **/
-/* XXX */
-#define WRITE_STENCIL(_x, _y, d) pwrite_8(irb, NO_TILE(_x, _y) + 3, d)
-#define READ_STENCIL(d, _x, _y) d = pread_8(irb, NO_TILE(_x, _y) + 3);
-#define TAG(x) intel_gttmap_##x##_z24_s8
-#include "stenciltmp.h"
-
-/**
- ** 8-bit stencil function (XXX FBO: This is obsolete)
- **/
-#define WRITE_STENCIL(_x, _y, d) pwrite_8(irb, NO_TILE(_x, _y) + 3, d)
-#define READ_STENCIL(d, _x, _y) d = pread_8(irb, NO_TILE(_x, _y) + 3);
-#define TAG(x) intel##x##_z24_s8
-#include "stenciltmp.h"
-
-/**
- ** 8-bit x-tile stencil function (XXX FBO: This is obsolete)
- **/
-#define WRITE_STENCIL(_x, _y, d) pwrite_8(irb, X_TILE(_x, _y) + 3, d)
-#define READ_STENCIL(d, _x, _y) d = pread_8(irb, X_TILE(_x, _y) + 3);
-#define TAG(x) intel_XTile_##x##_z24_s8
-#include "stenciltmp.h"
-
-/**
- ** 8-bit y-tile stencil function (XXX FBO: This is obsolete)
- **/
-#define WRITE_STENCIL(_x, _y, d) pwrite_8(irb, Y_TILE(_x, _y) + 3, d)
-#define READ_STENCIL(d, _x, _y) d = pread_8(irb, Y_TILE(_x, _y) + 3)
-#define TAG(x) intel_YTile_##x##_z24_s8
-#include "stenciltmp.h"
-
 void
 intel_renderbuffer_map(struct intel_context *intel, struct gl_renderbuffer *rb)
 {
@@ -615,19 +581,8 @@ intel_set_span_functions(struct intel_context *intel,
 	 intel_gttmap_InitDepthPointers_z16(rb);
 	 break;
       case MESA_FORMAT_X8_Z24:
-	 intel_gttmap_InitDepthPointers_z24_x8(rb);
-	 break;
       case MESA_FORMAT_S8_Z24:
-	 /* There are a few different ways SW asks us to access the S8Z24 data:
-	  * Z24 depth-only depth reads
-	  * S8Z24 depth reads
-	  * S8Z24 stencil reads.
-	  */
-	 if (rb->Format == MESA_FORMAT_S8_Z24) {
-	    intel_gttmap_InitDepthPointers_z24_x8(rb);
-	 } else if (rb->Format == MESA_FORMAT_S8) {
-	    intel_gttmap_InitStencilPointers_z24_s8(rb);
-	 }
+	 intel_gttmap_InitDepthPointers_z24_x8(rb);
 	 break;
       default:
 	 _mesa_problem(NULL,
@@ -747,19 +702,6 @@ intel_set_span_functions(struct intel_context *intel,
 	    intel_YTile_InitDepthPointers_z24_x8(rb);
 	    break;
 	 }
-      } else if (rb->Format == MESA_FORMAT_S8) {
-	 switch (tiling) {
-	 case I915_TILING_NONE:
-	 default:
-	    intelInitStencilPointers_z24_s8(rb);
-	    break;
-	 case I915_TILING_X:
-	    intel_XTile_InitStencilPointers_z24_s8(rb);
-	    break;
-	 case I915_TILING_Y:
-	    intel_YTile_InitStencilPointers_z24_s8(rb);
-	    break;
-	 }
       } else {
 	 _mesa_problem(NULL,
 		       "Unexpected ActualFormat in intelSetSpanFunctions");
-- 
cgit v1.2.3


From bb35000b4b6dfe60048b2f5d60bc102c4a7fd791 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Thu, 4 Mar 2010 15:47:19 -0800
Subject: intel: Remove non-kernel-exec-fencing support.

Shaves 60k off the driver from removing the broken spans code.  This
means we now require 2.6.29, which seems fair given that it's a year
old and we've removed support for non-KMS already in the last release
of 2D.
---
 src/mesa/drivers/dri/i965/brw_curbe.c             |   5 +-
 src/mesa/drivers/dri/i965/brw_draw_upload.c       |  63 +--
 src/mesa/drivers/dri/i965/brw_vs_surface_state.c  |   4 +-
 src/mesa/drivers/dri/i965/brw_vtbl.c              |   2 +-
 src/mesa/drivers/dri/i965/gen6_vs_state.c         |   4 +-
 src/mesa/drivers/dri/i965/gen6_wm_state.c         |   4 +-
 src/mesa/drivers/dri/intel/intel_blit.c           |   8 +-
 src/mesa/drivers/dri/intel/intel_buffer_objects.c |   8 +-
 src/mesa/drivers/dri/intel/intel_context.c        |   6 -
 src/mesa/drivers/dri/intel/intel_context.h        |  21 -
 src/mesa/drivers/dri/intel/intel_depthtmp.h       |  64 ---
 src/mesa/drivers/dri/intel/intel_fbo.c            |   3 -
 src/mesa/drivers/dri/intel/intel_fbo.h            |   3 -
 src/mesa/drivers/dri/intel/intel_mipmap_tree.c    |   3 +-
 src/mesa/drivers/dri/intel/intel_regions.c        |   6 +-
 src/mesa/drivers/dri/intel/intel_screen.c         |   9 +-
 src/mesa/drivers/dri/intel/intel_screen.h         |   1 -
 src/mesa/drivers/dri/intel/intel_span.c           | 451 +++-------------------
 src/mesa/drivers/dri/intel/intel_spantmp.h        |  67 ----
 19 files changed, 94 insertions(+), 638 deletions(-)
 delete mode 100644 src/mesa/drivers/dri/intel/intel_depthtmp.h
 delete mode 100644 src/mesa/drivers/dri/intel/intel_spantmp.h

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_curbe.c b/src/mesa/drivers/dri/i965/brw_curbe.c
index 6f2ead793d..4e78b08cfe 100644
--- a/src/mesa/drivers/dri/i965/brw_curbe.c
+++ b/src/mesa/drivers/dri/i965/brw_curbe.c
@@ -179,7 +179,6 @@ static GLfloat fixed_plane[6][4] = {
  */
 static void prepare_constant_buffer(struct brw_context *brw)
 {
-   struct intel_context *intel = &brw->intel;
    GLcontext *ctx = &brw->intel.ctx;
    const struct brw_vertex_program *vp =
       brw_vertex_program_const(brw->vertex_program);
@@ -307,7 +306,7 @@ static void prepare_constant_buffer(struct brw_context *brw)
       if (brw->curbe.curbe_bo != NULL &&
 	  brw->curbe.curbe_next_offset + bufsz > brw->curbe.curbe_bo->size)
       {
-	 intel_bo_unmap_gtt_preferred(intel, brw->curbe.curbe_bo);
+	 drm_intel_gem_bo_unmap_gtt(brw->curbe.curbe_bo);
 	 dri_bo_unreference(brw->curbe.curbe_bo);
 	 brw->curbe.curbe_bo = NULL;
       }
@@ -319,7 +318,7 @@ static void prepare_constant_buffer(struct brw_context *brw)
 	 brw->curbe.curbe_bo = dri_bo_alloc(brw->intel.bufmgr, "CURBE",
 					    4096, 1 << 6);
 	 brw->curbe.curbe_next_offset = 0;
-	 intel_bo_map_gtt_preferred(intel, brw->curbe.curbe_bo, GL_TRUE);
+	 drm_intel_gem_bo_map_gtt(brw->curbe.curbe_bo);
       }
 
       brw->curbe.curbe_offset = brw->curbe.curbe_next_offset;
diff --git a/src/mesa/drivers/dri/i965/brw_draw_upload.c b/src/mesa/drivers/dri/i965/brw_draw_upload.c
index f0a4e8ad65..71a43577bf 100644
--- a/src/mesa/drivers/dri/i965/brw_draw_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_draw_upload.c
@@ -276,7 +276,6 @@ copy_array_to_vbo_array( struct brw_context *brw,
 			 struct brw_vertex_element *element,
 			 GLuint dst_stride)
 {
-   struct intel_context *intel = &brw->intel;
    GLuint size = element->count * dst_stride;
 
    get_space(brw, size, &element->bo, &element->offset);
@@ -289,52 +288,26 @@ copy_array_to_vbo_array( struct brw_context *brw,
    }
 
    if (dst_stride == element->glarray->StrideB) {
-      if (intel->intelScreen->kernel_exec_fencing) {
-	 drm_intel_gem_bo_map_gtt(element->bo);
-	 memcpy((char *)element->bo->virtual + element->offset,
-		element->glarray->Ptr, size);
-	 drm_intel_gem_bo_unmap_gtt(element->bo);
-      } else {
-	 dri_bo_subdata(element->bo,
-			element->offset,
-			size,
-			element->glarray->Ptr);
-      }
+      drm_intel_gem_bo_map_gtt(element->bo);
+      memcpy((char *)element->bo->virtual + element->offset,
+	     element->glarray->Ptr, size);
+      drm_intel_gem_bo_unmap_gtt(element->bo);
    } else {
       char *dest;
       const unsigned char *src = element->glarray->Ptr;
       int i;
 
-      if (intel->intelScreen->kernel_exec_fencing) {
-	 drm_intel_gem_bo_map_gtt(element->bo);
-	 dest = element->bo->virtual;
-	 dest += element->offset;
-
-	 for (i = 0; i < element->count; i++) {
-	    memcpy(dest, src, dst_stride);
-	    src += element->glarray->StrideB;
-	    dest += dst_stride;
-	 }
-
-	 drm_intel_gem_bo_unmap_gtt(element->bo);
-      } else {
-	 void *data;
-
-	 data = malloc(dst_stride * element->count);
-	 dest = data;
-	 for (i = 0; i < element->count; i++) {
-	    memcpy(dest, src, dst_stride);
-	    src += element->glarray->StrideB;
-	    dest += dst_stride;
-	 }
-
-	 dri_bo_subdata(element->bo,
-			element->offset,
-			size,
-			data);
+      drm_intel_gem_bo_map_gtt(element->bo);
+      dest = element->bo->virtual;
+      dest += element->offset;
 
-	 free(data);
+      for (i = 0; i < element->count; i++) {
+	 memcpy(dest, src, dst_stride);
+	 src += element->glarray->StrideB;
+	 dest += dst_stride;
       }
+
+      drm_intel_gem_bo_unmap_gtt(element->bo);
    }
 }
 
@@ -646,13 +619,9 @@ static void brw_prepare_indices(struct brw_context *brw)
 
       /* Straight upload
        */
-      if (intel->intelScreen->kernel_exec_fencing) {
-	 drm_intel_gem_bo_map_gtt(bo);
-	 memcpy((char *)bo->virtual + offset, index_buffer->ptr, ib_size);
-	 drm_intel_gem_bo_unmap_gtt(bo);
-      } else {
-	 dri_bo_subdata(bo, offset, ib_size, index_buffer->ptr);
-      }
+      drm_intel_gem_bo_map_gtt(bo);
+      memcpy((char *)bo->virtual + offset, index_buffer->ptr, ib_size);
+      drm_intel_gem_bo_unmap_gtt(bo);
    } else {
       offset = (GLuint) (unsigned long) index_buffer->ptr;
       brw->ib.start_vertex_offset = 0;
diff --git a/src/mesa/drivers/dri/i965/brw_vs_surface_state.c b/src/mesa/drivers/dri/i965/brw_vs_surface_state.c
index ead623fc0e..950d075aa1 100644
--- a/src/mesa/drivers/dri/i965/brw_vs_surface_state.c
+++ b/src/mesa/drivers/dri/i965/brw_vs_surface_state.c
@@ -67,13 +67,13 @@ brw_vs_update_constant_buffer(struct brw_context *brw)
     */
    _mesa_load_state_parameters(&brw->intel.ctx, vp->program.Base.Parameters);
 
-   intel_bo_map_gtt_preferred(intel, const_buffer, GL_TRUE);
+   drm_intel_gem_bo_map_gtt(const_buffer);
    for (i = 0; i < params->NumParameters; i++) {
       memcpy(const_buffer->virtual + i * 4 * sizeof(float),
 	     params->ParameterValues[i],
 	     4 * sizeof(float));
    }
-   intel_bo_unmap_gtt_preferred(intel, const_buffer);
+   drm_intel_gem_bo_unmap_gtt(const_buffer);
 
    return const_buffer;
 }
diff --git a/src/mesa/drivers/dri/i965/brw_vtbl.c b/src/mesa/drivers/dri/i965/brw_vtbl.c
index 27a2a3e8a7..96a44bfbec 100644
--- a/src/mesa/drivers/dri/i965/brw_vtbl.c
+++ b/src/mesa/drivers/dri/i965/brw_vtbl.c
@@ -144,7 +144,7 @@ static void brw_finish_batch(struct intel_context *intel)
    brw_emit_query_end(brw);
 
    if (brw->curbe.curbe_bo) {
-      intel_bo_unmap_gtt_preferred(intel, brw->curbe.curbe_bo);
+      drm_intel_gem_bo_unmap_gtt(brw->curbe.curbe_bo);
       drm_intel_bo_unreference(brw->curbe.curbe_bo);
       brw->curbe.curbe_bo = NULL;
    }
diff --git a/src/mesa/drivers/dri/i965/gen6_vs_state.c b/src/mesa/drivers/dri/i965/gen6_vs_state.c
index 211a6231c9..fe597dfb94 100644
--- a/src/mesa/drivers/dri/i965/gen6_vs_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_vs_state.c
@@ -65,13 +65,13 @@ upload_vs_state(struct brw_context *brw)
       constant_bo = drm_intel_bo_alloc(intel->bufmgr, "VS constant_bo",
 				       nr_params * 4 * sizeof(float),
 				       4096);
-      intel_bo_map_gtt_preferred(intel, constant_bo, GL_TRUE);
+      drm_intel_gem_bo_map_gtt(constant_bo);
       for (i = 0; i < nr_params; i++) {
 	 memcpy((char *)constant_bo->virtual + i * 4 * sizeof(float),
 		vp->program.Base.Parameters->ParameterValues[i],
 		4 * sizeof(float));
       }
-      intel_bo_unmap_gtt_preferred(intel, constant_bo);
+      drm_intel_gem_bo_unmap_gtt(constant_bo);
 
       BEGIN_BATCH(5);
       OUT_BATCH(CMD_3D_CONSTANT_VS_STATE << 16 |
diff --git a/src/mesa/drivers/dri/i965/gen6_wm_state.c b/src/mesa/drivers/dri/i965/gen6_wm_state.c
index e355261769..1eb17ca627 100644
--- a/src/mesa/drivers/dri/i965/gen6_wm_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_wm_state.c
@@ -63,13 +63,13 @@ upload_wm_state(struct brw_context *brw)
       constant_bo = drm_intel_bo_alloc(intel->bufmgr, "WM constant_bo",
 				       nr_params * 4 * sizeof(float),
 				       4096);
-      intel_bo_map_gtt_preferred(intel, constant_bo, GL_TRUE);
+      drm_intel_gem_bo_map_gtt(constant_bo);
       for (i = 0; i < nr_params; i++) {
 	 memcpy((char *)constant_bo->virtual + i * 4 * sizeof(float),
 		fp->program.Base.Parameters->ParameterValues[i],
 		4 * sizeof(float));
       }
-      intel_bo_unmap_gtt_preferred(intel, constant_bo);
+      drm_intel_gem_bo_unmap_gtt(constant_bo);
 
       BEGIN_BATCH(5);
       OUT_BATCH(CMD_3D_CONSTANT_PS_STATE << 16 |
diff --git a/src/mesa/drivers/dri/intel/intel_blit.c b/src/mesa/drivers/dri/intel/intel_blit.c
index 6d6af86347..f2769aa3e8 100644
--- a/src/mesa/drivers/dri/intel/intel_blit.c
+++ b/src/mesa/drivers/dri/intel/intel_blit.c
@@ -122,8 +122,8 @@ intelEmitCopyBlit(struct intel_context *intel,
    intel_prepare_render(intel);
 
    if (pass >= 2) {
-      intel_bo_map_gtt_preferred(intel, dst_buffer, GL_TRUE);
-      intel_bo_map_gtt_preferred(intel, src_buffer, GL_FALSE);
+      drm_intel_gem_bo_map_gtt(dst_buffer);
+      drm_intel_gem_bo_map_gtt(src_buffer);
       _mesa_copy_rect((GLubyte *)dst_buffer->virtual + dst_offset,
 		      cpp,
 		      dst_pitch,
@@ -132,8 +132,8 @@ intelEmitCopyBlit(struct intel_context *intel,
 		      (GLubyte *)src_buffer->virtual + src_offset,
 		      src_pitch,
 		      src_x, src_y);
-      intel_bo_unmap_gtt_preferred(intel, src_buffer);
-      intel_bo_unmap_gtt_preferred(intel, dst_buffer);
+      drm_intel_gem_bo_unmap_gtt(src_buffer);
+      drm_intel_gem_bo_unmap_gtt(dst_buffer);
 
       return GL_TRUE;
    }
diff --git a/src/mesa/drivers/dri/intel/intel_buffer_objects.c b/src/mesa/drivers/dri/intel/intel_buffer_objects.c
index 312866d865..8fe3a0e6f3 100644
--- a/src/mesa/drivers/dri/intel/intel_buffer_objects.c
+++ b/src/mesa/drivers/dri/intel/intel_buffer_objects.c
@@ -285,7 +285,7 @@ intel_bufferobj_map(GLcontext * ctx,
       return NULL;
    }
 
-   if (write_only && intel->intelScreen->kernel_exec_fencing) {
+   if (write_only) {
       drm_intel_gem_bo_map_gtt(intel_obj->buffer);
       intel_obj->mapped_gtt = GL_TRUE;
    } else {
@@ -379,8 +379,7 @@ intel_bufferobj_map_range(GLcontext * ctx,
 	 intel_obj->range_map_bo = drm_intel_bo_alloc(intel->bufmgr,
 						      "range map",
 						      length, 64);
-	 if (!(access & GL_MAP_READ_BIT) &&
-	     intel->intelScreen->kernel_exec_fencing) {
+	 if (!(access & GL_MAP_READ_BIT)) {
 	    drm_intel_gem_bo_map_gtt(intel_obj->range_map_bo);
 	    intel_obj->mapped_gtt = GL_TRUE;
 	 } else {
@@ -393,8 +392,7 @@ intel_bufferobj_map_range(GLcontext * ctx,
       return obj->Pointer;
    }
 
-   if (!(access & GL_MAP_READ_BIT) &&
-       intel->intelScreen->kernel_exec_fencing) {
+   if (!(access & GL_MAP_READ_BIT)) {
       drm_intel_gem_bo_map_gtt(intel_obj->buffer);
       intel_obj->mapped_gtt = GL_TRUE;
    } else {
diff --git a/src/mesa/drivers/dri/intel/intel_context.c b/src/mesa/drivers/dri/intel/intel_context.c
index ec379a77ac..d6a1ba6952 100644
--- a/src/mesa/drivers/dri/intel/intel_context.c
+++ b/src/mesa/drivers/dri/intel/intel_context.c
@@ -755,12 +755,6 @@ intelInitContext(struct intel_context *intel,
    }
    intel->use_texture_tiling = driQueryOptionb(&intel->optionCache,
 					       "texture_tiling");
-   if (intel->use_texture_tiling &&
-       !intel->intelScreen->kernel_exec_fencing) {
-      fprintf(stderr, "No kernel support for execution fencing, "
-	      "disabling texture tiling\n");
-      intel->use_texture_tiling = GL_FALSE;
-   }
    intel->use_early_z = driQueryOptionb(&intel->optionCache, "early_z");
 
    intel->prim.primitive = ~0;
diff --git a/src/mesa/drivers/dri/intel/intel_context.h b/src/mesa/drivers/dri/intel/intel_context.h
index d20d44497e..22736a9327 100644
--- a/src/mesa/drivers/dri/intel/intel_context.h
+++ b/src/mesa/drivers/dri/intel/intel_context.h
@@ -475,25 +475,4 @@ is_power_of_two(uint32_t value)
    return (value & (value - 1)) == 0;
 }
 
-static INLINE void
-intel_bo_map_gtt_preferred(struct intel_context *intel,
-			   drm_intel_bo *bo,
-			   GLboolean write)
-{
-   if (intel->intelScreen->kernel_exec_fencing)
-      drm_intel_gem_bo_map_gtt(bo);
-   else
-      drm_intel_bo_map(bo, write);
-}
-
-static INLINE void
-intel_bo_unmap_gtt_preferred(struct intel_context *intel,
-			     drm_intel_bo *bo)
-{
-   if (intel->intelScreen->kernel_exec_fencing)
-      drm_intel_gem_bo_unmap_gtt(bo);
-   else
-      drm_intel_bo_unmap(bo);
-}
-
 #endif
diff --git a/src/mesa/drivers/dri/intel/intel_depthtmp.h b/src/mesa/drivers/dri/intel/intel_depthtmp.h
deleted file mode 100644
index a9c75d44cf..0000000000
--- a/src/mesa/drivers/dri/intel/intel_depthtmp.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright © 2009 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- *
- * Authors:
- *    Eric Anholt <eric@anholt.net>
- *
- */
-
-/**
- * Wrapper around the depthtmp.h macrofest to generate spans code for
- * all the tiling styles.
- */
-
-#define VALUE_TYPE INTEL_VALUE_TYPE
-#define WRITE_DEPTH(_x, _y, d) \
-   (*(INTEL_VALUE_TYPE *)(irb->region->buffer->virtual +	\
-			  NO_TILE(_x, _y)) = d)
-#define READ_DEPTH(d, _x, _y) \
-   d = *(INTEL_VALUE_TYPE *)(irb->region->buffer->virtual +	\
-			     NO_TILE(_x, _y))
-#define TAG(x) INTEL_TAG(intel_gttmap_##x)
-#include "depthtmp.h"
-
-#define VALUE_TYPE INTEL_VALUE_TYPE
-#define WRITE_DEPTH(_x, _y, d) INTEL_WRITE_DEPTH(NO_TILE(_x, _y), d)
-#define READ_DEPTH(d, _x, _y) d = INTEL_READ_DEPTH(NO_TILE(_x, _y))
-#define TAG(x) INTEL_TAG(intel##x)
-#include "depthtmp.h"
-
-#define VALUE_TYPE INTEL_VALUE_TYPE
-#define WRITE_DEPTH(_x, _y, d) INTEL_WRITE_DEPTH(X_TILE(_x, _y), d)
-#define READ_DEPTH(d, _x, _y) d = INTEL_READ_DEPTH(X_TILE(_x, _y))
-#define TAG(x) INTEL_TAG(intel_XTile_##x)
-#include "depthtmp.h"
-
-#define VALUE_TYPE INTEL_VALUE_TYPE
-#define WRITE_DEPTH(_x, _y, d) INTEL_WRITE_DEPTH(Y_TILE(_x, _y), d)
-#define READ_DEPTH(d, _x, _y) d = INTEL_READ_DEPTH(Y_TILE(_x, _y))
-#define TAG(x) INTEL_TAG(intel_YTile_##x)
-#include "depthtmp.h"
-
-#undef INTEL_VALUE_TYPE
-#undef INTEL_WRITE_DEPTH
-#undef INTEL_READ_DEPTH
-#undef INTEL_TAG
diff --git a/src/mesa/drivers/dri/intel/intel_fbo.c b/src/mesa/drivers/dri/intel/intel_fbo.c
index b388a3de2e..a429f8d003 100644
--- a/src/mesa/drivers/dri/intel/intel_fbo.c
+++ b/src/mesa/drivers/dri/intel/intel_fbo.c
@@ -70,9 +70,6 @@ intel_delete_renderbuffer(struct gl_renderbuffer *rb)
 
    ASSERT(irb);
 
-   if (irb->span_cache != NULL)
-      free(irb->span_cache);
-
    if (intel && irb->region) {
       intel_region_release(&irb->region);
    }
diff --git a/src/mesa/drivers/dri/intel/intel_fbo.h b/src/mesa/drivers/dri/intel/intel_fbo.h
index 586dbbbb25..72413f7369 100644
--- a/src/mesa/drivers/dri/intel/intel_fbo.h
+++ b/src/mesa/drivers/dri/intel/intel_fbo.h
@@ -40,9 +40,6 @@ struct intel_renderbuffer
 {
    struct gl_renderbuffer Base;
    struct intel_region *region;
-
-   uint8_t *span_cache;
-   unsigned long span_cache_offset;
 };
 
 
diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
index a20ea5afdb..4f14946ec7 100644
--- a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
+++ b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
@@ -119,8 +119,7 @@ intel_miptree_create(struct intel_context *intel,
    struct intel_mipmap_tree *mt;
    uint32_t tiling;
 
-   if (intel->use_texture_tiling && compress_byte == 0 &&
-       intel->intelScreen->kernel_exec_fencing) {
+   if (intel->use_texture_tiling && compress_byte == 0) {
       if (intel->gen >= 4 &&
 	  (base_format == GL_DEPTH_COMPONENT ||
 	   base_format == GL_DEPTH_STENCIL_EXT))
diff --git a/src/mesa/drivers/dri/intel/intel_regions.c b/src/mesa/drivers/dri/intel/intel_regions.c
index e3c0635e5b..f042bcbc28 100644
--- a/src/mesa/drivers/dri/intel/intel_regions.c
+++ b/src/mesa/drivers/dri/intel/intel_regions.c
@@ -118,8 +118,7 @@ intel_region_map(struct intel_context *intel, struct intel_region *region)
       if (region->pbo)
          intel_region_cow(intel, region);
 
-      if (region->tiling != I915_TILING_NONE &&
-	  intel->intelScreen->kernel_exec_fencing)
+      if (region->tiling != I915_TILING_NONE)
 	 drm_intel_gem_bo_map_gtt(region->buffer);
       else
 	 dri_bo_map(region->buffer, GL_TRUE);
@@ -134,8 +133,7 @@ intel_region_unmap(struct intel_context *intel, struct intel_region *region)
 {
    _DBG("%s %p\n", __FUNCTION__, region);
    if (!--region->map_refcount) {
-      if (region->tiling != I915_TILING_NONE &&
-	  intel->intelScreen->kernel_exec_fencing)
+      if (region->tiling != I915_TILING_NONE)
 	 drm_intel_gem_bo_unmap_gtt(region->buffer);
       else
 	 dri_bo_unmap(region->buffer);
diff --git a/src/mesa/drivers/dri/intel/intel_screen.c b/src/mesa/drivers/dri/intel/intel_screen.c
index 959ccfb8b1..9ff76c4803 100644
--- a/src/mesa/drivers/dri/intel/intel_screen.c
+++ b/src/mesa/drivers/dri/intel/intel_screen.c
@@ -416,10 +416,11 @@ intel_init_bufmgr(struct intel_screen *intelScreen)
       return GL_FALSE;
    }
 
-   if (intel_get_param(spriv, I915_PARAM_NUM_FENCES_AVAIL, &num_fences))
-      intelScreen->kernel_exec_fencing = !!num_fences;
-   else
-      intelScreen->kernel_exec_fencing = GL_FALSE;
+   if (!intel_get_param(spriv, I915_PARAM_NUM_FENCES_AVAIL, &num_fences) ||
+       num_fences == 0) {
+      fprintf(stderr, "[%s: %u] Kernel 2.6.29 required.\n", __func__, __LINE__);
+      return GL_FALSE;
+   }
 
    drm_intel_bufmgr_gem_enable_fenced_relocs(intelScreen->bufmgr);
 
diff --git a/src/mesa/drivers/dri/intel/intel_screen.h b/src/mesa/drivers/dri/intel/intel_screen.h
index 1ce476daca..5863093f00 100644
--- a/src/mesa/drivers/dri/intel/intel_screen.h
+++ b/src/mesa/drivers/dri/intel/intel_screen.h
@@ -46,7 +46,6 @@ struct intel_screen
 
    GLboolean no_vbo;
    dri_bufmgr *bufmgr;
-   GLboolean kernel_exec_fencing;
    struct _mesa_HashTable *named_regions;
 
    /**
diff --git a/src/mesa/drivers/dri/intel/intel_span.c b/src/mesa/drivers/dri/intel/intel_span.c
index 2fcb2d843c..fb5c01bc4d 100644
--- a/src/mesa/drivers/dri/intel/intel_span.c
+++ b/src/mesa/drivers/dri/intel/intel_span.c
@@ -43,218 +43,6 @@ static void
 intel_set_span_functions(struct intel_context *intel,
 			 struct gl_renderbuffer *rb);
 
-#define SPAN_CACHE_SIZE		4096
-
-static void
-get_span_cache(struct intel_renderbuffer *irb, uint32_t offset)
-{
-   if (irb->span_cache == NULL) {
-      irb->span_cache = malloc(SPAN_CACHE_SIZE);
-      irb->span_cache_offset = -1;
-   }
-
-   if ((offset & ~(SPAN_CACHE_SIZE - 1)) != irb->span_cache_offset) {
-      irb->span_cache_offset = offset & ~(SPAN_CACHE_SIZE - 1);
-      dri_bo_get_subdata(irb->region->buffer, irb->span_cache_offset,
-			 SPAN_CACHE_SIZE, irb->span_cache);
-   }
-}
-
-static void
-clear_span_cache(struct intel_renderbuffer *irb)
-{
-   irb->span_cache_offset = -1;
-}
-
-static uint32_t
-pread_32(struct intel_renderbuffer *irb, uint32_t offset)
-{
-   get_span_cache(irb, offset);
-
-   return *(uint32_t *)(irb->span_cache + (offset & (SPAN_CACHE_SIZE - 1)));
-}
-
-static uint32_t
-pread_xrgb8888(struct intel_renderbuffer *irb, uint32_t offset)
-{
-   get_span_cache(irb, offset);
-
-   return *(uint32_t *)(irb->span_cache + (offset & (SPAN_CACHE_SIZE - 1))) |
-      0xff000000;
-}
-
-static uint16_t
-pread_16(struct intel_renderbuffer *irb, uint32_t offset)
-{
-   get_span_cache(irb, offset);
-
-   return *(uint16_t *)(irb->span_cache + (offset & (SPAN_CACHE_SIZE - 1)));
-}
-
-static uint8_t
-pread_8(struct intel_renderbuffer *irb, uint32_t offset)
-{
-   get_span_cache(irb, offset);
-
-   return *(uint8_t *)(irb->span_cache + (offset & (SPAN_CACHE_SIZE - 1)));
-}
-
-static void
-pwrite_32(struct intel_renderbuffer *irb, uint32_t offset, uint32_t val)
-{
-   clear_span_cache(irb);
-
-   dri_bo_subdata(irb->region->buffer, offset, 4, &val);
-}
-
-static void
-pwrite_xrgb8888(struct intel_renderbuffer *irb, uint32_t offset, uint32_t val)
-{
-   clear_span_cache(irb);
-
-   dri_bo_subdata(irb->region->buffer, offset, 3, &val);
-}
-
-static void
-pwrite_16(struct intel_renderbuffer *irb, uint32_t offset, uint16_t val)
-{
-   clear_span_cache(irb);
-
-   dri_bo_subdata(irb->region->buffer, offset, 2, &val);
-}
-
-static void
-pwrite_8(struct intel_renderbuffer *irb, uint32_t offset, uint8_t val)
-{
-   clear_span_cache(irb);
-
-   dri_bo_subdata(irb->region->buffer, offset, 1, &val);
-}
-
-static uint32_t no_tile_swizzle(struct intel_renderbuffer *irb,
-				int x, int y)
-{
-	return (y * irb->region->pitch + x) * irb->region->cpp;
-}
-
-/*
- * Deal with tiled surfaces
- */
-
-static uint32_t x_tile_swizzle(struct intel_renderbuffer *irb,
-			       int x, int y)
-{
-	int	tile_stride;
-	int	xbyte;
-	int	x_tile_off, y_tile_off;
-	int	x_tile_number, y_tile_number;
-	int	tile_off, tile_base;
-	
-        x += irb->region->draw_x;
-        y += irb->region->draw_y;
-
-	tile_stride = (irb->region->pitch * irb->region->cpp) << 3;
-
-	xbyte = x * irb->region->cpp;
-
-	x_tile_off = xbyte & 0x1ff;
-	y_tile_off = y & 7;
-
-	x_tile_number = xbyte >> 9;
-	y_tile_number = y >> 3;
-
-	tile_off = (y_tile_off << 9) + x_tile_off;
-
-	switch (irb->region->bit_6_swizzle) {
-	case I915_BIT_6_SWIZZLE_NONE:
-	   break;
-	case I915_BIT_6_SWIZZLE_9:
-	   tile_off ^= ((tile_off >> 3) & 64);
-	   break;
-	case I915_BIT_6_SWIZZLE_9_10:
-	   tile_off ^= ((tile_off >> 3) & 64) ^ ((tile_off >> 4) & 64);
-	   break;
-	case I915_BIT_6_SWIZZLE_9_11:
-	   tile_off ^= ((tile_off >> 3) & 64) ^ ((tile_off >> 5) & 64);
-	   break;
-	case I915_BIT_6_SWIZZLE_9_10_11:
-	   tile_off ^= ((tile_off >> 3) & 64) ^ ((tile_off >> 4) & 64) ^
-	      ((tile_off >> 5) & 64);
-	   break;
-	default:
-	   fprintf(stderr, "Unknown tile swizzling mode %d\n",
-		   irb->region->bit_6_swizzle);
-	   exit(1);
-	}
-
-	tile_base = (x_tile_number << 12) + y_tile_number * tile_stride;
-
-#if 0
-	printf("(%d,%d) -> %d + %d = %d (pitch = %d, tstride = %d)\n",
-	       x, y, tile_off, tile_base,
-	       tile_off + tile_base,
-	       irb->region->pitch, tile_stride);
-#endif
-
-	return tile_base + tile_off;
-}
-
-static uint32_t y_tile_swizzle(struct intel_renderbuffer *irb,
-			       int x, int y)
-{
-	int	tile_stride;
-	int	xbyte;
-	int	x_tile_off, y_tile_off;
-	int	x_tile_number, y_tile_number;
-	int	tile_off, tile_base;
-	
-        x += irb->region->draw_x;
-        y += irb->region->draw_y;
-
-	tile_stride = (irb->region->pitch * irb->region->cpp) << 5;
-
-	xbyte = x * irb->region->cpp;
-
-	x_tile_off = xbyte & 0x7f;
-	y_tile_off = y & 0x1f;
-
-	x_tile_number = xbyte >> 7;
-	y_tile_number = y >> 5;
-
-	tile_off = ((x_tile_off & ~0xf) << 5) + (y_tile_off << 4) +
-	   (x_tile_off & 0xf);
-
-	switch (irb->region->bit_6_swizzle) {
-	case I915_BIT_6_SWIZZLE_NONE:
-	   break;
-	case I915_BIT_6_SWIZZLE_9:
-	   tile_off ^= ((tile_off >> 3) & 64);
-	   break;
-	case I915_BIT_6_SWIZZLE_9_10:
-	   tile_off ^= ((tile_off >> 3) & 64) ^ ((tile_off >> 4) & 64);
-	   break;
-	case I915_BIT_6_SWIZZLE_9_11:
-	   tile_off ^= ((tile_off >> 3) & 64) ^ ((tile_off >> 5) & 64);
-	   break;
-	case I915_BIT_6_SWIZZLE_9_10_11:
-	   tile_off ^= ((tile_off >> 3) & 64) ^ ((tile_off >> 4) & 64) ^
-	      ((tile_off >> 5) & 64);
-	   break;
-	default:
-	   fprintf(stderr, "Unknown tile swizzling mode %d\n",
-		   irb->region->bit_6_swizzle);
-	   exit(1);
-	}
-
-	tile_base = (x_tile_number << 12) + y_tile_number * tile_stride;
-
-	return tile_base + tile_off;
-}
-
-/*
-  break intelWriteRGBASpan_ARGB8888
-*/
-
 #undef DBG
 #define DBG 0
 
@@ -280,50 +68,43 @@ static uint32_t y_tile_swizzle(struct intel_renderbuffer *irb,
 
 #define HW_UNLOCK()
 
-/* Convenience macros to avoid typing the swizzle argument over and over */
-#define NO_TILE(_X, _Y) no_tile_swizzle(irb, (_X), (_Y))
-#define X_TILE(_X, _Y) x_tile_swizzle(irb, (_X), (_Y))
-#define Y_TILE(_X, _Y) y_tile_swizzle(irb, (_X), (_Y))
+/* Convenience macros to avoid typing the address argument over and over */
+#define NO_TILE(_X, _Y) (((_Y) * irb->region->pitch + (_X)) * irb->region->cpp)
 
 /* r5g6b5 color span and pixel functions */
-#define INTEL_PIXEL_FMT GL_RGB
-#define INTEL_PIXEL_TYPE GL_UNSIGNED_SHORT_5_6_5
-#define INTEL_READ_VALUE(offset) pread_16(irb, offset)
-#define INTEL_WRITE_VALUE(offset, v) pwrite_16(irb, offset, v)
-#define INTEL_TAG(x) x##_RGB565
-#include "intel_spantmp.h"
+#define SPANTMP_PIXEL_FMT GL_RGB
+#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_SHORT_5_6_5
+#define TAG(x) intel_##x##_RGB565
+#define TAG2(x,y) intel_##x##y_RGB565
+#include "spantmp2.h"
 
 /* a4r4g4b4 color span and pixel functions */
-#define INTEL_PIXEL_FMT GL_BGRA
-#define INTEL_PIXEL_TYPE GL_UNSIGNED_SHORT_4_4_4_4_REV
-#define INTEL_READ_VALUE(offset) pread_16(irb, offset)
-#define INTEL_WRITE_VALUE(offset, v) pwrite_16(irb, offset, v)
-#define INTEL_TAG(x) x##_ARGB4444
-#include "intel_spantmp.h"
+#define SPANTMP_PIXEL_FMT GL_BGRA
+#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_SHORT_4_4_4_4_REV
+#define TAG(x) intel_##x##_ARGB4444
+#define TAG2(x,y) intel_##x##y_ARGB4444
+#include "spantmp2.h"
 
 /* a1r5g5b5 color span and pixel functions */
-#define INTEL_PIXEL_FMT GL_BGRA
-#define INTEL_PIXEL_TYPE GL_UNSIGNED_SHORT_1_5_5_5_REV
-#define INTEL_READ_VALUE(offset) pread_16(irb, offset)
-#define INTEL_WRITE_VALUE(offset, v) pwrite_16(irb, offset, v)
-#define INTEL_TAG(x) x##_ARGB1555
-#include "intel_spantmp.h"
+#define SPANTMP_PIXEL_FMT GL_BGRA
+#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_SHORT_1_5_5_5_REV
+#define TAG(x) intel_##x##_ARGB1555
+#define TAG2(x,y) intel_##x##y##_ARGB1555
+#include "spantmp2.h"
 
 /* a8r8g8b8 color span and pixel functions */
-#define INTEL_PIXEL_FMT GL_BGRA
-#define INTEL_PIXEL_TYPE GL_UNSIGNED_INT_8_8_8_8_REV
-#define INTEL_READ_VALUE(offset) pread_32(irb, offset)
-#define INTEL_WRITE_VALUE(offset, v) pwrite_32(irb, offset, v)
-#define INTEL_TAG(x) x##_ARGB8888
-#include "intel_spantmp.h"
+#define SPANTMP_PIXEL_FMT GL_BGRA
+#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_INT_8_8_8_8_REV
+#define TAG(x) intel_##x##_ARGB8888
+#define TAG2(x,y) intel_##x##y##_ARGB8888
+#include "spantmp2.h"
 
 /* x8r8g8b8 color span and pixel functions */
-#define INTEL_PIXEL_FMT GL_BGR
-#define INTEL_PIXEL_TYPE GL_UNSIGNED_INT_8_8_8_8_REV
-#define INTEL_READ_VALUE(offset) pread_xrgb8888(irb, offset)
-#define INTEL_WRITE_VALUE(offset, v) pwrite_xrgb8888(irb, offset, v)
-#define INTEL_TAG(x) x##_xRGB8888
-#include "intel_spantmp.h"
+#define SPANTMP_PIXEL_FMT GL_BGR
+#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_INT_8_8_8_8_REV
+#define TAG(x) intel_##x##_xRGB8888
+#define TAG2(x,y) intel_##x##y##_xRGB8888
+#include "spantmp2.h"
 
 #define LOCAL_DEPTH_VARS						\
    struct intel_renderbuffer *irb = intel_renderbuffer(rb);		\
@@ -339,18 +120,22 @@ static uint32_t y_tile_swizzle(struct intel_renderbuffer *irb,
 #define LOCAL_STENCIL_VARS LOCAL_DEPTH_VARS
 
 /* z16 depthbuffer functions. */
-#define INTEL_VALUE_TYPE GLushort
-#define INTEL_WRITE_DEPTH(offset, d) pwrite_16(irb, offset, d)
-#define INTEL_READ_DEPTH(offset) pread_16(irb, offset)
-#define INTEL_TAG(name) name##_z16
-#include "intel_depthtmp.h"
-
-/* z24x8 depthbuffer functions. */
-#define INTEL_VALUE_TYPE GLuint
-#define INTEL_WRITE_DEPTH(offset, d) pwrite_32(irb, offset, d)
-#define INTEL_READ_DEPTH(offset) pread_32(irb, offset)
-#define INTEL_TAG(name) name##_z24_x8
-#include "intel_depthtmp.h"
+#define VALUE_TYPE GLushort
+#define WRITE_DEPTH(_x, _y, d) \
+   (*(uint16_t *)(irb->region->buffer->virtual + NO_TILE(_x, _y)) = d)
+#define READ_DEPTH(d, _x, _y) \
+   d = *(uint16_t *)(irb->region->buffer->virtual + NO_TILE(_x, _y))
+#define TAG(x) intel_##x##_z16
+#include "depthtmp.h"
+
+/* z24_s8 and z24_x8 depthbuffer functions. */
+#define VALUE_TYPE GLuint
+#define WRITE_DEPTH(_x, _y, d) \
+   (*(uint32_t *)(irb->region->buffer->virtual + NO_TILE(_x, _y)) = d)
+#define READ_DEPTH(d, _x, _y) \
+   d = *(uint32_t *)(irb->region->buffer->virtual + NO_TILE(_x, _y))
+#define TAG(x) intel_##x##_z24_x8
+#include "depthtmp.h"
 
 void
 intel_renderbuffer_map(struct intel_context *intel, struct gl_renderbuffer *rb)
@@ -360,8 +145,7 @@ intel_renderbuffer_map(struct intel_context *intel, struct gl_renderbuffer *rb)
    if (irb == NULL || irb->region == NULL)
       return;
 
-   if (intel->intelScreen->kernel_exec_fencing)
-      drm_intel_gem_bo_map_gtt(irb->region->buffer);
+   drm_intel_gem_bo_map_gtt(irb->region->buffer);
 
    intel_set_span_functions(intel, rb);
 }
@@ -375,10 +159,7 @@ intel_renderbuffer_unmap(struct intel_context *intel,
    if (irb == NULL || irb->region == NULL)
       return;
 
-   if (intel->intelScreen->kernel_exec_fencing)
-      drm_intel_gem_bo_unmap_gtt(irb->region->buffer);
-   else
-      clear_span_cache(irb);
+   drm_intel_gem_bo_unmap_gtt(irb->region->buffer);
 
    rb->GetRow = NULL;
    rb->PutRow = NULL;
@@ -558,158 +339,34 @@ intel_set_span_functions(struct intel_context *intel,
 			 struct gl_renderbuffer *rb)
 {
    struct intel_renderbuffer *irb = (struct intel_renderbuffer *) rb;
-   uint32_t tiling = irb->region->tiling;
-
-   if (intel->intelScreen->kernel_exec_fencing) {
-      switch (irb->Base.Format) {
-      case MESA_FORMAT_RGB565:
-	 intel_gttmap_InitPointers_RGB565(rb);
-	 break;
-      case MESA_FORMAT_ARGB4444:
-	 intel_gttmap_InitPointers_ARGB4444(rb);
-	 break;
-      case MESA_FORMAT_ARGB1555:
-	 intel_gttmap_InitPointers_ARGB1555(rb);
-	 break;
-      case MESA_FORMAT_XRGB8888:
-         intel_gttmap_InitPointers_xRGB8888(rb);
-	 break;
-      case MESA_FORMAT_ARGB8888:
-	 intel_gttmap_InitPointers_ARGB8888(rb);
-	 break;
-      case MESA_FORMAT_Z16:
-	 intel_gttmap_InitDepthPointers_z16(rb);
-	 break;
-      case MESA_FORMAT_X8_Z24:
-      case MESA_FORMAT_S8_Z24:
-	 intel_gttmap_InitDepthPointers_z24_x8(rb);
-	 break;
-      default:
-	 _mesa_problem(NULL,
-		       "Unexpected MesaFormat %d in intelSetSpanFunctions",
-		       irb->Base.Format);
-	 break;
-      }
-      return;
-   }
 
-   /* If in GEM mode, we need to do the tile address swizzling ourselves,
-    * instead of the fence registers handling it.
-    */
    switch (irb->Base.Format) {
    case MESA_FORMAT_RGB565:
-      switch (tiling) {
-      case I915_TILING_NONE:
-      default:
-	 intelInitPointers_RGB565(rb);
-	 break;
-      case I915_TILING_X:
-	 intel_XTile_InitPointers_RGB565(rb);
-	 break;
-      case I915_TILING_Y:
-	 intel_YTile_InitPointers_RGB565(rb);
-	 break;
-      }
+      intel_InitPointers_RGB565(rb);
       break;
    case MESA_FORMAT_ARGB4444:
-      switch (tiling) {
-      case I915_TILING_NONE:
-      default:
-	 intelInitPointers_ARGB4444(rb);
-	 break;
-      case I915_TILING_X:
-	 intel_XTile_InitPointers_ARGB4444(rb);
-	 break;
-      case I915_TILING_Y:
-	 intel_YTile_InitPointers_ARGB4444(rb);
-	 break;
-      }
+      intel_InitPointers_ARGB4444(rb);
       break;
    case MESA_FORMAT_ARGB1555:
-      switch (tiling) {
-      case I915_TILING_NONE:
-      default:
-	 intelInitPointers_ARGB1555(rb);
-	 break;
-      case I915_TILING_X:
-	 intel_XTile_InitPointers_ARGB1555(rb);
-	 break;
-      case I915_TILING_Y:
-	 intel_YTile_InitPointers_ARGB1555(rb);
-	 break;
-      }
+      intel_InitPointers_ARGB1555(rb);
       break;
    case MESA_FORMAT_XRGB8888:
-      switch (tiling) {
-      case I915_TILING_NONE:
-      default:
-         intelInitPointers_xRGB8888(rb);
-         break;
-      case I915_TILING_X:
-         intel_XTile_InitPointers_xRGB8888(rb);
-         break;
-      case I915_TILING_Y:
-         intel_YTile_InitPointers_xRGB8888(rb);
-         break;
-      }
+      intel_InitPointers_xRGB8888(rb);
       break;
    case MESA_FORMAT_ARGB8888:
-      /* 8888 RGBA */
-      switch (tiling) {
-      case I915_TILING_NONE:
-      default:
-	 intelInitPointers_ARGB8888(rb);
-	 break;
-      case I915_TILING_X:
-	 intel_XTile_InitPointers_ARGB8888(rb);
-	 break;
-      case I915_TILING_Y:
-	 intel_YTile_InitPointers_ARGB8888(rb);
-	 break;
-      }
+      intel_InitPointers_ARGB8888(rb);
       break;
    case MESA_FORMAT_Z16:
-      switch (tiling) {
-      case I915_TILING_NONE:
-      default:
-	 intelInitDepthPointers_z16(rb);
-	 break;
-      case I915_TILING_X:
-	 intel_XTile_InitDepthPointers_z16(rb);
-	 break;
-      case I915_TILING_Y:
-	 intel_YTile_InitDepthPointers_z16(rb);
-	 break;
-      }
+      intel_InitDepthPointers_z16(rb);
       break;
    case MESA_FORMAT_X8_Z24:
    case MESA_FORMAT_S8_Z24:
-      /* There are a few different ways SW asks us to access the S8Z24 data:
-       * Z24 depth-only depth reads
-       * S8Z24 depth reads
-       * S8Z24 stencil reads.
-       */
-      if (rb->Format == MESA_FORMAT_S8_Z24) {
-	 switch (tiling) {
-	 case I915_TILING_NONE:
-	 default:
-	    intelInitDepthPointers_z24_x8(rb);
-	    break;
-	 case I915_TILING_X:
-	    intel_XTile_InitDepthPointers_z24_x8(rb);
-	    break;
-	 case I915_TILING_Y:
-	    intel_YTile_InitDepthPointers_z24_x8(rb);
-	    break;
-	 }
-      } else {
-	 _mesa_problem(NULL,
-		       "Unexpected ActualFormat in intelSetSpanFunctions");
-      }
+      intel_InitDepthPointers_z24_x8(rb);
       break;
    default:
       _mesa_problem(NULL,
-                    "Unexpected MesaFormat in intelSetSpanFunctions");
+		    "Unexpected MesaFormat %d in intelSetSpanFunctions",
+		    irb->Base.Format);
       break;
    }
 }
diff --git a/src/mesa/drivers/dri/intel/intel_spantmp.h b/src/mesa/drivers/dri/intel/intel_spantmp.h
deleted file mode 100644
index bad03398f6..0000000000
--- a/src/mesa/drivers/dri/intel/intel_spantmp.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright © 2009 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- *
- * Authors:
- *    Eric Anholt <eric@anholt.net>
- *
- */
-
-/**
- * Wrapper around the spantmp.h macrofest to generate spans code for
- * all the tiling styles.
- */
-
-#define SPANTMP_PIXEL_FMT INTEL_PIXEL_FMT
-#define SPANTMP_PIXEL_TYPE INTEL_PIXEL_TYPE
-#define TAG(x) INTEL_TAG(intel_gttmap_##x)
-#define TAG2(x, y) INTEL_TAG(intel_gttmap_##x##y)
-#include "spantmp2.h"
-
-#define SPANTMP_PIXEL_FMT INTEL_PIXEL_FMT
-#define SPANTMP_PIXEL_TYPE INTEL_PIXEL_TYPE
-#define PUT_VALUE(_x, _y, v) INTEL_WRITE_VALUE(NO_TILE(_x, _y), v)
-#define GET_VALUE(_x, _y) INTEL_READ_VALUE(NO_TILE(_x, _y))
-#define TAG(x) INTEL_TAG(intel##x)
-#define TAG2(x, y) INTEL_TAG(intel##x)##y
-#include "spantmp2.h"
-
-#define SPANTMP_PIXEL_FMT INTEL_PIXEL_FMT
-#define SPANTMP_PIXEL_TYPE INTEL_PIXEL_TYPE
-#define PUT_VALUE(_x, _y, v) INTEL_WRITE_VALUE(X_TILE(_x, _y), v)
-#define GET_VALUE(_x, _y) INTEL_READ_VALUE(X_TILE(_x, _y))
-#define TAG(x) INTEL_TAG(intel_XTile_##x)
-#define TAG2(x, y) INTEL_TAG(intel_XTile_##x)##y
-#include "spantmp2.h"
-
-#define SPANTMP_PIXEL_FMT INTEL_PIXEL_FMT
-#define SPANTMP_PIXEL_TYPE INTEL_PIXEL_TYPE
-#define PUT_VALUE(_x, _y, v) INTEL_WRITE_VALUE(Y_TILE(_x, _y), v)
-#define GET_VALUE(_x, _y) INTEL_READ_VALUE(Y_TILE(_x, _y))
-#define TAG(x) INTEL_TAG(intel_YTile_##x)
-#define TAG2(x, y) INTEL_TAG(intel_YTile_##x)##y
-#include "spantmp2.h"
-
-#undef INTEL_PIXEL_FMT
-#undef INTEL_PIXEL_TYPE
-#undef INTEL_WRITE_VALUE
-#undef INTEL_READ_VALUE
-#undef INTEL_TAG
-- 
cgit v1.2.3


From 45df4bad9fc0379f05197bee10c03fd351f24094 Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Thu, 4 Mar 2010 17:40:36 -0800
Subject: Revert "mesa: Remove pointless comparison of unsigned integer with a
 negative constant."

This reverts commit a05fdbcb719ac64e6be842372813f0f4ca2f4f93.

Removing the comparison is wrong. The comparison with -1 should be changed
to another value (probably PROGRAM_UNDEFINED) along with another
change in the shader assembler.

Conflicts:

	src/mesa/shader/prog_execute.c
---
 src/mesa/shader/prog_execute.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/shader/prog_execute.c b/src/mesa/shader/prog_execute.c
index a1c20a325e..37750cc330 100644
--- a/src/mesa/shader/prog_execute.c
+++ b/src/mesa/shader/prog_execute.c
@@ -1767,10 +1767,15 @@ _mesa_execute_program(GLcontext * ctx,
          break;
       case OPCODE_PRINT:
          {
-            GLfloat a[4];
-            fetch_vector4(&inst->SrcReg[0], machine, a);
-            printf("%s%g, %g, %g, %g\n", (const char *) inst->Data,
-		   a[0], a[1], a[2], a[3]);
+            if (inst->SrcReg[0].File != -1) {
+               GLfloat a[4];
+               fetch_vector4(&inst->SrcReg[0], machine, a);
+               printf("%s%g, %g, %g, %g\n", (const char *) inst->Data,
+                            a[0], a[1], a[2], a[3]);
+            }
+            else {
+               printf("%s\n", (const char *) inst->Data);
+            }
          }
          break;
       case OPCODE_END:
-- 
cgit v1.2.3


From 3490923c817cd81d46a405de117e9ba8a8aeef3c Mon Sep 17 00:00:00 2001
From: Chia-I Wu <olv@lunarg.com>
Date: Thu, 25 Feb 2010 16:37:04 +0800
Subject: mesa/es: Update GLAPI and APISpec for GL_OES_EGL_image.

This generates the entrypoints and dispatches for GL_OES_EGL_image.
There is no real support yet.
---
 src/mesa/es/glapi/es_EXT.xml     |  3 +++
 src/mesa/es/main/APIspec.xml     | 39 +++++++++++++++++++++++++++++++++++++++
 src/mesa/es/main/mfeatures_es1.h |  2 ++
 src/mesa/es/main/mfeatures_es2.h |  2 ++
 4 files changed, 46 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/es/glapi/es_EXT.xml b/src/mesa/es/glapi/es_EXT.xml
index 629ba90528..291a53b4b2 100644
--- a/src/mesa/es/glapi/es_EXT.xml
+++ b/src/mesa/es/glapi/es_EXT.xml
@@ -18,6 +18,9 @@
     <enum name="PALETTE8_RGB5_A1_OES"                     value="0x8B99"/>
 </category>
 
+<!-- 23. GL_OES_EGL_image -->
+<xi:include href="../../glapi/gen/OES_EGL_image.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
+
 <category name="GL_OES_depth24" number="24">
     <enum name="DEPTH_COMPONENT24_OES"                    value="0x81A6"/>
 </category>
diff --git a/src/mesa/es/main/APIspec.xml b/src/mesa/es/main/APIspec.xml
index f6f33130b1..17665d8df5 100644
--- a/src/mesa/es/main/APIspec.xml
+++ b/src/mesa/es/main/APIspec.xml
@@ -3502,6 +3502,31 @@
 	</desc>
 </template>
 
+<template name="EGLImageTargetTexture2D">
+	<proto>
+		<return type="void"/>
+		<param name="target" type="GLenum"/>
+		<param name="image" type="GLeglImageOES"/>
+	</proto>
+
+	<desc name="target">
+		<value name="GL_TEXTURE_2D"/>
+	</desc>
+</template>
+
+<template name="EGLImageTargetRenderbufferStorage">
+	<proto>
+		<return type="void"/>
+		<param name="target" type="GLenum"/>
+		<param name="image" type="GLeglImageOES"/>
+	</proto>
+
+	<desc name="target">
+		<value name="GL_RENDERBUFFER_OES" category="OES_framebuffer_object"/>
+		<value name="GL_RENDERBUFFER" category="GLES2.0"/>
+	</desc>
+</template>
+
 <api name="mesa" implementation="true">
 	<category name="MESA"/>
 
@@ -3770,6 +3795,10 @@
         <!-- EXT_multi_draw_arrays -->
         <function name="MultiDrawArraysEXT" template="MultiDrawArrays"/>
         <function name="MultiDrawElementsEXT" template="MultiDrawElements"/>
+
+        <!-- OES_EGL_image -->
+        <function name="EGLImageTargetTexture2DOES" template="EGLImageTargetTexture2D"/>
+        <function name="EGLImageTargetRenderbufferStorageOES" template="EGLImageTargetRenderbufferStorage"/>
 </api>
 
 <api name="GLES1.1">
@@ -3811,6 +3840,7 @@
 	<category name="EXT_blend_minmax"/>
 	-->
 	<category name="EXT_multi_draw_arrays"/>
+	<category name="OES_EGL_image"/>
 
 	<category name="OES_matrix_palette"/>
 
@@ -4068,6 +4098,10 @@
         <!-- EXT_multi_draw_arrays -->
         <function name="MultiDrawArraysEXT" template="MultiDrawArrays"/>
         <function name="MultiDrawElementsEXT" template="MultiDrawElements"/>
+
+        <!-- OES_EGL_image -->
+        <function name="EGLImageTargetTexture2DOES" template="EGLImageTargetTexture2D"/>
+        <function name="EGLImageTargetRenderbufferStorageOES" template="EGLImageTargetRenderbufferStorage"/>
 </api>
 
 <api name="GLES2.0">
@@ -4095,6 +4129,7 @@
 	<category name="EXT_blend_minmax"/>
 	-->
 	<category name="EXT_multi_draw_arrays"/>
+	<category name="OES_EGL_image"/>
 
 	<function name="CullFace" template="CullFace"/>
 
@@ -4292,6 +4327,10 @@
         <!-- EXT_multi_draw_arrays -->
         <function name="MultiDrawArraysEXT" template="MultiDrawArrays"/>
         <function name="MultiDrawElementsEXT" template="MultiDrawElements"/>
+
+        <!-- OES_EGL_image -->
+        <function name="EGLImageTargetTexture2DOES" template="EGLImageTargetTexture2D"/>
+        <function name="EGLImageTargetRenderbufferStorageOES" template="EGLImageTargetRenderbufferStorage"/>
 </api>
 
 </apispec>
diff --git a/src/mesa/es/main/mfeatures_es1.h b/src/mesa/es/main/mfeatures_es1.h
index 6c2ece2608..1793550268 100644
--- a/src/mesa/es/main/mfeatures_es1.h
+++ b/src/mesa/es/main/mfeatures_es1.h
@@ -106,6 +106,8 @@
 #define FEATURE_OES_draw_texture 1
 #define FEATURE_OES_mapbuffer 1
 
+#define FEATURE_OES_EGL_image 1
+
 #define FEATURE_extra_context_init 1
 
 /*@}*/
diff --git a/src/mesa/es/main/mfeatures_es2.h b/src/mesa/es/main/mfeatures_es2.h
index f34782fedb..a463bed11c 100644
--- a/src/mesa/es/main/mfeatures_es2.h
+++ b/src/mesa/es/main/mfeatures_es2.h
@@ -106,6 +106,8 @@
 #define FEATURE_OES_draw_texture 0
 #define FEATURE_OES_mapbuffer 1
 
+#define FEATURE_OES_EGL_image 1
+
 #define FEATURE_extra_context_init 1
 
 /*@}*/
-- 
cgit v1.2.3


From 99864d595f7d4c13e9548f83d5972db9af64e67b Mon Sep 17 00:00:00 2001
From: Chris Wilson <chris@chris-wilson.co.uk>
Date: Fri, 13 Nov 2009 12:19:35 +0000
Subject: APPLE_object_purgeable: core

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
---
 src/mesa/main/api_exec.c   |   6 +
 src/mesa/main/bufferobj.c  | 356 +++++++++++++++++++++++++++++++++++++++++++++
 src/mesa/main/bufferobj.h  |  11 ++
 src/mesa/main/dd.h         |  17 +++
 src/mesa/main/dlist.c      |   6 +
 src/mesa/main/extensions.c |   4 +
 src/mesa/main/mfeatures.h  |   1 +
 src/mesa/main/mtypes.h     |   4 +
 8 files changed, 405 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/main/api_exec.c b/src/mesa/main/api_exec.c
index 70c154b62b..fa8d409caa 100644
--- a/src/mesa/main/api_exec.c
+++ b/src/mesa/main/api_exec.c
@@ -758,4 +758,10 @@ _mesa_init_exec_table(struct _glapi_table *exec)
    SET_EGLImageTargetTexture2DOES(exec, _mesa_EGLImageTargetTexture2DOES);
    SET_EGLImageTargetRenderbufferStorageOES(exec, _mesa_EGLImageTargetRenderbufferStorageOES);
 #endif
+
+#if FEATURE_APPLE_object_purgeable
+   SET_ObjectPurgeableAPPLE(exec, _mesa_ObjectPurgeableAPPLE);
+   SET_ObjectUnpurgeableAPPLE(exec, _mesa_ObjectUnpurgeableAPPLE);
+   SET_GetObjectParameterivAPPLE(exec, _mesa_GetObjectParameterivAPPLE);
+#endif
 }
diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c
index 971b280f3b..3c48f6cce5 100644
--- a/src/mesa/main/bufferobj.c
+++ b/src/mesa/main/bufferobj.c
@@ -37,6 +37,8 @@
 #include "image.h"
 #include "context.h"
 #include "bufferobj.h"
+#include "fbobject.h"
+#include "texobj.h"
 
 
 /* Debug flags */
@@ -1710,3 +1712,357 @@ _mesa_FlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length)
    if (ctx->Driver.FlushMappedBufferRange)
       ctx->Driver.FlushMappedBufferRange(ctx, target, offset, length, bufObj);
 }
+
+#if FEATURE_APPLE_object_purgeable
+static GLenum
+_mesa_BufferObjectPurgeable(GLcontext *ctx, GLuint name, GLenum option)
+{
+   struct gl_buffer_object *bufObj;
+   GLenum retval;
+
+   bufObj = _mesa_lookup_bufferobj(ctx, name);
+   if (!bufObj) {
+      _mesa_error(ctx, GL_INVALID_VALUE,
+                  "glObjectPurgeable(name = 0x%x)", name);
+      return 0;
+   }
+   if (!_mesa_is_bufferobj(bufObj)) {
+      _mesa_error(ctx, GL_INVALID_OPERATION, "glObjectPurgeable(buffer 0)" );
+      return 0;
+   }
+
+   if (bufObj->Purgeable) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "glObjectPurgeable(name = 0x%x) is already purgeable", name);
+      return GL_VOLATILE_APPLE;
+   }
+
+   bufObj->Purgeable = GL_TRUE;
+
+   retval = GL_VOLATILE_APPLE;
+   if (ctx->Driver.BufferObjectPurgeable)
+      retval = ctx->Driver.BufferObjectPurgeable(ctx, bufObj, option);
+
+   return retval;
+}
+
+static GLenum
+_mesa_RenderObjectPurgeable(GLcontext *ctx, GLuint name, GLenum option)
+{
+   struct gl_renderbuffer *bufObj;
+   GLenum retval;
+
+   bufObj = _mesa_lookup_renderbuffer(ctx, name);
+   if (!bufObj) {
+      _mesa_error(ctx, GL_INVALID_VALUE,
+                  "glObjectUnpurgeable(name = 0x%x)", name);
+      return 0;
+   }
+
+   if (bufObj->Purgeable) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "glObjectPurgeable(name = 0x%x) is already purgeable", name);
+      return GL_VOLATILE_APPLE;
+   }
+
+   bufObj->Purgeable = GL_TRUE;
+
+   retval = GL_VOLATILE_APPLE;
+   if (ctx->Driver.RenderObjectPurgeable)
+      retval = ctx->Driver.RenderObjectPurgeable(ctx, bufObj, option);
+
+   return retval;
+}
+
+static GLenum
+_mesa_TextureObjectPurgeable(GLcontext *ctx, GLuint name, GLenum option)
+{
+   struct gl_texture_object *bufObj;
+   GLenum retval;
+
+   bufObj = _mesa_lookup_texture(ctx, name);
+   if (!bufObj) {
+      _mesa_error(ctx, GL_INVALID_VALUE,
+                  "glObjectPurgeable(name = 0x%x)", name);
+      return 0;
+   }
+
+   if (bufObj->Purgeable) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "glObjectPurgeable(name = 0x%x) is already purgeable", name);
+      return GL_VOLATILE_APPLE;
+   }
+
+   bufObj->Purgeable = GL_TRUE;
+
+   retval = GL_VOLATILE_APPLE;
+   if (ctx->Driver.TextureObjectPurgeable)
+      retval = ctx->Driver.TextureObjectPurgeable(ctx, bufObj, option);
+
+   return retval;
+}
+
+GLenum GLAPIENTRY
+_mesa_ObjectPurgeableAPPLE(GLenum objectType, GLuint name, GLenum option)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, 0);
+
+   if (name == 0) {
+      _mesa_error(ctx, GL_INVALID_VALUE,
+                  "glObjectPurgeable(name = 0x%x)", name);
+      return 0;
+   }
+
+   switch (option) {
+   case GL_VOLATILE_APPLE:
+   case GL_RELEASED_APPLE:
+      break;
+
+   default:
+      _mesa_error(ctx, GL_INVALID_ENUM,
+                  "glObjectPurgeable(name = 0x%x) invalid option: %d", name, option);
+      return 0;
+   }
+
+   switch (objectType) {
+   case GL_TEXTURE:
+      return _mesa_TextureObjectPurgeable (ctx, name, option);
+   case GL_RENDERBUFFER_EXT:
+      return _mesa_RenderObjectPurgeable (ctx, name, option);
+   case GL_BUFFER_OBJECT_APPLE:
+      return _mesa_BufferObjectPurgeable (ctx, name, option);
+
+   default:
+      _mesa_error(ctx, GL_INVALID_ENUM,
+                  "glObjectPurgeable(name = 0x%x) invalid type: %d", name, objectType);
+      return 0;
+   }
+}
+
+static GLenum
+_mesa_BufferObjectUnpurgeable(GLcontext *ctx, GLuint name, GLenum option)
+{
+   struct gl_buffer_object *bufObj;
+   GLenum retval;
+
+   bufObj = _mesa_lookup_bufferobj(ctx, name);
+   if (!bufObj) {
+      _mesa_error(ctx, GL_INVALID_VALUE,
+                  "glObjectUnpurgeable(name = 0x%x)", name);
+      return 0;
+   }
+
+   if (! bufObj->Purgeable) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "glObjectUnpurgeable(name = 0x%x) object is already \"unpurged\"", name);
+      return 0;
+   }
+
+   bufObj->Purgeable = GL_FALSE;
+
+   retval = GL_RETAINED_APPLE;
+   if (ctx->Driver.BufferObjectUnpurgeable)
+      retval = ctx->Driver.BufferObjectUnpurgeable(ctx, bufObj, option);
+
+   return retval;
+}
+
+static GLenum
+_mesa_RenderObjectUnpurgeable(GLcontext *ctx, GLuint name, GLenum option)
+{
+   struct gl_renderbuffer *bufObj;
+   GLenum retval;
+
+   bufObj = _mesa_lookup_renderbuffer(ctx, name);
+   if (!bufObj) {
+      _mesa_error(ctx, GL_INVALID_VALUE,
+                  "glObjectUnpurgeable(name = 0x%x)", name);
+      return 0;
+   }
+
+   if (! bufObj->Purgeable) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "glObjectUnpurgeable(name = 0x%x) object is already \"unpurged\"", name);
+      return 0;
+   }
+
+   bufObj->Purgeable = GL_FALSE;
+
+   retval = GL_RETAINED_APPLE;
+   if (ctx->Driver.RenderObjectUnpurgeable)
+      retval = ctx->Driver.RenderObjectUnpurgeable(ctx, bufObj, option);
+
+   return retval;
+}
+
+static GLenum
+_mesa_TextureObjectUnpurgeable(GLcontext *ctx, GLuint name, GLenum option)
+{
+   struct gl_texture_object *bufObj;
+   GLenum retval;
+
+   bufObj = _mesa_lookup_texture(ctx, name);
+   if (!bufObj) {
+      _mesa_error(ctx, GL_INVALID_VALUE,
+                  "glObjectUnpurgeable(name = 0x%x)", name);
+      return 0;
+   }
+
+   if (! bufObj->Purgeable) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "glObjectUnpurgeable(name = 0x%x) object is already \"unpurged\"", name);
+      return 0;
+   }
+
+   bufObj->Purgeable = GL_FALSE;
+
+   retval = GL_RETAINED_APPLE;
+   if (ctx->Driver.TextureObjectUnpurgeable)
+      retval = ctx->Driver.TextureObjectUnpurgeable(ctx, bufObj, option);
+
+   return retval;
+}
+
+GLenum GLAPIENTRY
+_mesa_ObjectUnpurgeableAPPLE(GLenum objectType, GLuint name, GLenum option)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, 0);
+
+   if (name == 0) {
+      _mesa_error(ctx, GL_INVALID_VALUE,
+                  "glObjectUnpurgeable(name = 0x%x)", name);
+      return 0;
+   }
+
+   switch (option) {
+   case GL_RETAINED_APPLE:
+   case GL_UNDEFINED_APPLE:
+      break;
+
+   default:
+      _mesa_error(ctx, GL_INVALID_ENUM,
+                  "glObjectUnpurgeable(name = 0x%x) invalid option: %d", name, option);
+      return 0;
+   }
+
+   switch (objectType) {
+   case GL_BUFFER_OBJECT_APPLE:
+      return _mesa_BufferObjectUnpurgeable(ctx, name, option);
+
+   case GL_TEXTURE:
+      return _mesa_TextureObjectUnpurgeable(ctx, name, option);
+
+   case GL_RENDERBUFFER_EXT:
+      return _mesa_RenderObjectUnpurgeable(ctx, name, option);
+
+   default:
+      _mesa_error(ctx, GL_INVALID_ENUM,
+                  "glObjectUnpurgeable(name = 0x%x) invalid type: %d", name, objectType);
+      return 0;
+   }
+}
+
+static void
+_mesa_GetBufferObjectParameterivAPPLE(GLcontext *ctx, GLuint name, GLenum pname, GLint* params)
+{
+   struct gl_buffer_object *bufObj;
+
+   bufObj = _mesa_lookup_bufferobj(ctx, name);
+   if (!bufObj) {
+      _mesa_error(ctx, GL_INVALID_VALUE,
+                  "glGetObjectParameteriv(name = 0x%x) invalid object", name);
+      return;
+   }
+
+   switch (pname) {
+   case GL_PURGEABLE_APPLE:
+      *params = bufObj->Purgeable;
+      break;
+
+   default:
+      _mesa_error(ctx, GL_INVALID_ENUM,
+                  "glGetObjectParameteriv(name = 0x%x) invalid enum: %d", name, pname);
+      break;
+   }
+}
+
+static void
+_mesa_GetRenderObjectParameterivAPPLE(GLcontext *ctx, GLuint name, GLenum pname, GLint* params)
+{
+   struct gl_renderbuffer *bufObj;
+
+   bufObj = _mesa_lookup_renderbuffer(ctx, name);
+   if (!bufObj) {
+      _mesa_error(ctx, GL_INVALID_VALUE,
+                  "glObjectUnpurgeable(name = 0x%x)", name);
+      return;
+   }
+
+   switch (pname) {
+   case GL_PURGEABLE_APPLE:
+      *params = bufObj->Purgeable;
+      break;
+
+   default:
+      _mesa_error(ctx, GL_INVALID_ENUM,
+                  "glGetObjectParameteriv(name = 0x%x) invalid enum: %d", name, pname);
+      break;
+   }
+}
+
+static void
+_mesa_GetTextureObjectParameterivAPPLE(GLcontext *ctx, GLuint name, GLenum pname, GLint* params)
+{
+   struct gl_texture_object *bufObj;
+
+   bufObj = _mesa_lookup_texture(ctx, name);
+   if (!bufObj) {
+      _mesa_error(ctx, GL_INVALID_VALUE,
+                  "glObjectUnpurgeable(name = 0x%x)", name);
+      return;
+   }
+
+   switch (pname) {
+   case GL_PURGEABLE_APPLE:
+      *params = bufObj->Purgeable;
+      break;
+
+   default:
+      _mesa_error(ctx, GL_INVALID_ENUM,
+                  "glGetObjectParameteriv(name = 0x%x) invalid enum: %d", name, pname);
+      break;
+   }
+}
+
+void GLAPIENTRY
+_mesa_GetObjectParameterivAPPLE(GLenum objectType, GLuint name, GLenum pname, GLint* params)
+{
+   GET_CURRENT_CONTEXT(ctx);
+
+   if (name == 0) {
+      _mesa_error(ctx, GL_INVALID_VALUE,
+                  "glGetObjectParameteriv(name = 0x%x)", name);
+      return;
+   }
+
+   switch (objectType) {
+   case GL_TEXTURE:
+      _mesa_GetTextureObjectParameterivAPPLE (ctx, name, pname, params);
+      break;
+
+   case GL_BUFFER_OBJECT_APPLE:
+      _mesa_GetBufferObjectParameterivAPPLE (ctx, name, pname, params);
+      break;
+
+   case GL_RENDERBUFFER_EXT:
+      _mesa_GetRenderObjectParameterivAPPLE (ctx, name, pname, params);
+      break;
+
+   default:
+      _mesa_error(ctx, GL_INVALID_ENUM,
+                  "glGetObjectParameteriv(name = 0x%x) invalid type: %d", name, objectType);
+   }
+}
+#endif
diff --git a/src/mesa/main/bufferobj.h b/src/mesa/main/bufferobj.h
index f8bca5ff71..912529cfdf 100644
--- a/src/mesa/main/bufferobj.h
+++ b/src/mesa/main/bufferobj.h
@@ -175,4 +175,15 @@ _mesa_MapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length,
 extern void GLAPIENTRY
 _mesa_FlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length);
 
+#if FEATURE_APPLE_object_purgeable
+extern GLenum GLAPIENTRY
+_mesa_ObjectPurgeableAPPLE(GLenum objectType, GLuint name, GLenum option);
+
+extern GLenum GLAPIENTRY
+_mesa_ObjectUnpurgeableAPPLE(GLenum objectType, GLuint name, GLenum option);
+
+extern void GLAPIENTRY
+_mesa_GetObjectParameterivAPPLE(GLenum objectType, GLuint name, GLenum pname, GLint* params);
+#endif
+
 #endif
diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h
index 84b83fe273..197de09b22 100644
--- a/src/mesa/main/dd.h
+++ b/src/mesa/main/dd.h
@@ -776,6 +776,23 @@ struct dd_function_table {
    /*@}*/
 #endif
 
+   /**
+    * \name Functions for GL_APPLE_object_purgeable
+    */
+#if FEATURE_APPLE_object_purgeable
+   /*@{*/
+   /* variations on ObjectPurgeable */
+   GLenum (*BufferObjectPurgeable)( GLcontext *ctx, struct gl_buffer_object *obj, GLenum option );
+   GLenum (*RenderObjectPurgeable)( GLcontext *ctx, struct gl_renderbuffer *obj, GLenum option );
+   GLenum (*TextureObjectPurgeable)( GLcontext *ctx, struct gl_texture_object *obj, GLenum option );
+
+   /* variations on ObjectUnpurgeable */
+   GLenum (*BufferObjectUnpurgeable)( GLcontext *ctx, struct gl_buffer_object *obj, GLenum option );
+   GLenum (*RenderObjectUnpurgeable)( GLcontext *ctx, struct gl_renderbuffer *obj, GLenum option );
+   GLenum (*TextureObjectUnpurgeable)( GLcontext *ctx, struct gl_texture_object *obj, GLenum option );
+   /*@}*/
+#endif
+
    /**
     * \name Functions for GL_EXT_framebuffer_object
     */
diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c
index 673db30f25..43aadb1de5 100644
--- a/src/mesa/main/dlist.c
+++ b/src/mesa/main/dlist.c
@@ -9285,6 +9285,12 @@ _mesa_init_save_table(struct _glapi_table *table)
    /* 364. GL_EXT_provoking_vertex */
    SET_ProvokingVertexEXT(table, save_ProvokingVertexEXT);
 
+   /* 371. GL_APPLE_object_purgeable */
+#if FEATURE_APPLE_object_purgeable
+   SET_ObjectPurgeableAPPLE(table, _mesa_ObjectPurgeableAPPLE);
+   SET_ObjectUnpurgeableAPPLE(table, _mesa_ObjectUnpurgeableAPPLE);
+#endif
+
    /* GL 3.0 */
 #if 0
    SET_ClearBufferiv(table, save_ClearBufferiv);
diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c
index 0e7e52a54a..30245d6aaf 100644
--- a/src/mesa/main/extensions.c
+++ b/src/mesa/main/extensions.c
@@ -153,6 +153,7 @@ static const struct {
    { OFF, "GL_APPLE_client_storage",           F(APPLE_client_storage) },
    { ON,  "GL_APPLE_packed_pixels",            F(APPLE_packed_pixels) },
    { OFF, "GL_APPLE_vertex_array_object",      F(APPLE_vertex_array_object) },
+   { OFF, "GL_APPLE_object_purgeable",         F(APPLE_object_purgeable) },
    { OFF, "GL_ATI_blend_equation_separate",    F(EXT_blend_equation_separate) },
    { OFF, "GL_ATI_envmap_bumpmap",             F(ATI_envmap_bumpmap) },
    { OFF, "GL_ATI_texture_env_combine3",       F(ATI_texture_env_combine3)},
@@ -265,6 +266,9 @@ _mesa_enable_sw_extensions(GLcontext *ctx)
    ctx->Extensions.ARB_sync = GL_TRUE;
 #endif
    ctx->Extensions.APPLE_vertex_array_object = GL_TRUE;
+#if FEATURE_APPLE_object_purgeable
+   ctx->Extensions.APPLE_object_purgeable = GL_TRUE;
+#endif
    ctx->Extensions.ATI_envmap_bumpmap = GL_TRUE;
 #if FEATURE_ATI_fragment_shader
    ctx->Extensions.ATI_fragment_shader = GL_TRUE;
diff --git a/src/mesa/main/mfeatures.h b/src/mesa/main/mfeatures.h
index f0896ee626..cb96c4d1d0 100644
--- a/src/mesa/main/mfeatures.h
+++ b/src/mesa/main/mfeatures.h
@@ -116,6 +116,7 @@
 #define FEATURE_EXT_framebuffer_blit _HAVE_FULL_GL
 #define FEATURE_EXT_framebuffer_object _HAVE_FULL_GL
 #define FEATURE_EXT_pixel_buffer_object  _HAVE_FULL_GL
+#define FEATURE_APPLE_object_purgeable _HAVE_FULL_GL
 #define FEATURE_EXT_texture_sRGB _HAVE_FULL_GL
 #define FEATURE_ATI_fragment_shader _HAVE_FULL_GL
 #define FEATURE_NV_fence  _HAVE_FULL_GL
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 4d55ebb972..9d9b475dd1 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -1244,6 +1244,7 @@ struct gl_texture_object
    GLboolean GenerateMipmap;    /**< GL_SGIS_generate_mipmap */
    GLboolean _Complete;		/**< Is texture object complete? */
    GLboolean _RenderToTexture;  /**< Any rendering to this texture? */
+   GLboolean Purgeable;         /**< Is the buffer purgeable under memory pressure? */
 
    /** Actual texture images, indexed by [cube face] and [mipmap level] */
    struct gl_texture_image *Image[MAX_FACES][MAX_TEXTURE_LEVELS];
@@ -1439,6 +1440,7 @@ struct gl_buffer_object
    GLsizeiptr Length;   /**< Mapped length */
    /*@}*/
    GLboolean Written;   /**< Ever written to? (for debugging) */
+   GLboolean Purgeable; /**< Is the buffer purgeable under memory pressure? */
 };
 
 
@@ -2104,6 +2106,7 @@ struct gl_renderbuffer
    GLuint Name;
    GLint RefCount;
    GLuint Width, Height;
+   GLboolean Purgeable;   /**< Is the buffer purgeable under memory pressure? */
 
    GLenum InternalFormat; /**< The user-specified format */
    GLenum _BaseFormat;    /**< Either GL_RGB, GL_RGBA, GL_DEPTH_COMPONENT or
@@ -2491,6 +2494,7 @@ struct gl_extensions
    GLboolean APPLE_client_storage;
    GLboolean APPLE_packed_pixels;
    GLboolean APPLE_vertex_array_object;
+   GLboolean APPLE_object_purgeable;
    GLboolean ATI_envmap_bumpmap;
    GLboolean ATI_texture_mirror_once;
    GLboolean ATI_texture_env_combine3;
-- 
cgit v1.2.3


From 755915fa5d9ea782d142b3f8755b62d6de28fe29 Mon Sep 17 00:00:00 2001
From: Chris Wilson <chris@chris-wilson.co.uk>
Date: Wed, 13 Jan 2010 18:35:25 +0000
Subject: APPLE_object_purgeable: intel

Implement support for purgeable objects by using the GEM madvise ioctl.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
---
 src/mesa/drivers/dri/intel/intel_buffer_objects.c | 134 +++++++++++++++++++++-
 src/mesa/drivers/dri/intel/intel_extensions.c     |   3 +
 2 files changed, 136 insertions(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/intel/intel_buffer_objects.c b/src/mesa/drivers/dri/intel/intel_buffer_objects.c
index 312866d865..7599beab52 100644
--- a/src/mesa/drivers/dri/intel/intel_buffer_objects.c
+++ b/src/mesa/drivers/dri/intel/intel_buffer_objects.c
@@ -31,10 +31,12 @@
 #include "main/macros.h"
 #include "main/bufferobj.h"
 
-#include "intel_context.h"
 #include "intel_blit.h"
 #include "intel_buffer_objects.h"
 #include "intel_batchbuffer.h"
+#include "intel_context.h"
+#include "intel_fbo.h"
+#include "intel_mipmap_tree.h"
 #include "intel_regions.h"
 
 static GLboolean
@@ -588,6 +590,126 @@ intel_bufferobj_copy_subdata(GLcontext *ctx,
    intel_batchbuffer_emit_mi_flush(intel->batch);
 }
 
+#if FEATURE_APPLE_object_purgeable
+static GLenum
+intel_buffer_purgeable(GLcontext * ctx,
+                       drm_intel_bo *buffer,
+                       GLenum option)
+{
+   int retained = 0;
+
+   if (buffer != NULL)
+      retained = drm_intel_bo_madvise (buffer, I915_MADV_DONTNEED);
+
+   return retained ? GL_VOLATILE_APPLE : GL_RELEASED_APPLE;
+}
+
+static GLenum
+intel_buffer_object_purgeable(GLcontext * ctx,
+                              struct gl_buffer_object *obj,
+                              GLenum option)
+{
+   struct intel_buffer_object *intel;
+
+   intel = intel_buffer_object (obj);
+   if (intel->buffer != NULL)
+      return intel_buffer_purgeable (ctx, intel->buffer, option);
+
+   if (option == GL_RELEASED_APPLE) {
+      if (intel->sys_buffer != NULL) {
+         free(intel->sys_buffer);
+         intel->sys_buffer = NULL;
+      }
+
+      return GL_RELEASED_APPLE;
+   } else {
+      /* XXX Create the buffer and madvise(MADV_DONTNEED)? */
+      return intel_buffer_purgeable (ctx,
+                                     intel_bufferobj_buffer(intel_context(ctx),
+                                                            intel, INTEL_READ),
+                                     option);
+   }
+}
+
+static GLenum
+intel_texture_object_purgeable(GLcontext * ctx,
+                               struct gl_texture_object *obj,
+                               GLenum option)
+{
+   struct intel_texture_object *intel;
+
+   intel = intel_texture_object(obj);
+   if (intel->mt == NULL || intel->mt->region == NULL)
+      return GL_RELEASED_APPLE;
+
+   return intel_buffer_purgeable (ctx, intel->mt->region->buffer, option);
+}
+
+static GLenum
+intel_render_object_purgeable(GLcontext * ctx,
+                              struct gl_renderbuffer *obj,
+                              GLenum option)
+{
+   struct intel_renderbuffer *intel;
+
+   intel = intel_renderbuffer(obj);
+   if (intel->region == NULL)
+      return GL_RELEASED_APPLE;
+
+   return intel_buffer_purgeable (ctx, intel->region->buffer, option);
+}
+
+static GLenum
+intel_buffer_unpurgeable(GLcontext * ctx,
+                         drm_intel_bo *buffer,
+                         GLenum option)
+{
+   int retained;
+
+   retained = 0;
+   if (buffer != NULL)
+      retained = drm_intel_bo_madvise (buffer, I915_MADV_WILLNEED);
+
+   return retained ? GL_RETAINED_APPLE : GL_UNDEFINED_APPLE;
+}
+
+static GLenum
+intel_buffer_object_unpurgeable(GLcontext * ctx,
+                                struct gl_buffer_object *obj,
+                                GLenum option)
+{
+   return intel_buffer_unpurgeable (ctx, intel_buffer_object (obj)->buffer, option);
+}
+
+static GLenum
+intel_texture_object_unpurgeable(GLcontext * ctx,
+                                 struct gl_texture_object *obj,
+                                 GLenum option)
+{
+   struct intel_texture_object *intel;
+
+   intel = intel_texture_object(obj);
+   if (intel->mt == NULL || intel->mt->region == NULL)
+      return GL_UNDEFINED_APPLE;
+
+   return intel_buffer_unpurgeable (ctx, intel->mt->region->buffer, option);
+}
+
+static GLenum
+intel_render_object_unpurgeable(GLcontext * ctx,
+                                struct gl_renderbuffer *obj,
+                                GLenum option)
+{
+   struct intel_renderbuffer *intel;
+
+   intel = intel_renderbuffer(obj);
+   if (intel->region == NULL)
+      return GL_UNDEFINED_APPLE;
+
+   return intel_buffer_unpurgeable (ctx, intel->region->buffer, option);
+}
+#endif
+
 void
 intelInitBufferObjectFuncs(struct dd_function_table *functions)
 {
@@ -601,4 +723,14 @@ intelInitBufferObjectFuncs(struct dd_function_table *functions)
    functions->FlushMappedBufferRange = intel_bufferobj_flush_mapped_range;
    functions->UnmapBuffer = intel_bufferobj_unmap;
    functions->CopyBufferSubData = intel_bufferobj_copy_subdata;
+
+#if FEATURE_APPLE_object_purgeable
+   functions->BufferObjectPurgeable = intel_buffer_object_purgeable;
+   functions->TextureObjectPurgeable = intel_texture_object_purgeable;
+   functions->RenderObjectPurgeable = intel_render_object_purgeable;
+
+   functions->BufferObjectUnpurgeable = intel_buffer_object_unpurgeable;
+   functions->TextureObjectUnpurgeable = intel_texture_object_unpurgeable;
+   functions->RenderObjectUnpurgeable = intel_render_object_unpurgeable;
+#endif
 }
diff --git a/src/mesa/drivers/dri/intel/intel_extensions.c b/src/mesa/drivers/dri/intel/intel_extensions.c
index e16c33b33d..a1aac699c9 100644
--- a/src/mesa/drivers/dri/intel/intel_extensions.c
+++ b/src/mesa/drivers/dri/intel/intel_extensions.c
@@ -58,6 +58,7 @@
 #define need_GL_EXT_secondary_color
 #define need_GL_EXT_stencil_two_side
 #define need_GL_APPLE_vertex_array_object
+#define need_GL_APPLE_object_purgeable
 #define need_GL_ATI_separate_stencil
 #define need_GL_ATI_envmap_bumpmap
 #define need_GL_NV_point_sprite
@@ -121,6 +122,7 @@ static const struct dri_extension card_extensions[] = {
    { "GL_EXT_texture_lod_bias",           NULL },
    { "GL_3DFX_texture_compression_FXT1",  NULL },
    { "GL_APPLE_client_storage",           NULL },
+   { "GL_APPLE_object_purgeable",         GL_APPLE_object_purgeable_functions },
    { "GL_APPLE_vertex_array_object",      GL_APPLE_vertex_array_object_functions},
    { "GL_MESA_pack_invert",               NULL },
    { "GL_MESA_ycbcr_texture",             NULL },
@@ -182,6 +184,7 @@ static const struct dri_extension arb_oq_extensions[] = {
    { NULL, NULL }
 };
 
+
 static const struct dri_extension fragment_shader_extensions[] = {
    { "GL_ARB_fragment_shader",            NULL },
    { NULL, NULL }
-- 
cgit v1.2.3


From e176ae5f2a90632c778c3ae7dcab587f119035b1 Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Fri, 5 Mar 2010 09:23:43 -0700
Subject: mesa: whitespace fixes, 80-column wrapping, etc.

---
 src/mesa/main/bufferobj.c | 186 +++++++++++++++++++++++++---------------------
 1 file changed, 102 insertions(+), 84 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c
index 3c48f6cce5..c532cbef11 100644
--- a/src/mesa/main/bufferobj.c
+++ b/src/mesa/main/bufferobj.c
@@ -1119,20 +1119,20 @@ _mesa_BufferDataARB(GLenum target, GLsizeiptrARB size,
    }
 
    switch (usage) {
-      case GL_STREAM_DRAW_ARB:
-      case GL_STREAM_READ_ARB:
-      case GL_STREAM_COPY_ARB:
-      case GL_STATIC_DRAW_ARB:
-      case GL_STATIC_READ_ARB:
-      case GL_STATIC_COPY_ARB:
-      case GL_DYNAMIC_DRAW_ARB:
-      case GL_DYNAMIC_READ_ARB:
-      case GL_DYNAMIC_COPY_ARB:
-         /* OK */
-         break;
-      default:
-         _mesa_error(ctx, GL_INVALID_ENUM, "glBufferDataARB(usage)");
-         return;
+   case GL_STREAM_DRAW_ARB:
+   case GL_STREAM_READ_ARB:
+   case GL_STREAM_COPY_ARB:
+   case GL_STATIC_DRAW_ARB:
+   case GL_STATIC_READ_ARB:
+   case GL_STATIC_COPY_ARB:
+   case GL_DYNAMIC_DRAW_ARB:
+   case GL_DYNAMIC_READ_ARB:
+   case GL_DYNAMIC_COPY_ARB:
+      /* OK */
+      break;
+   default:
+      _mesa_error(ctx, GL_INVALID_ENUM, "glBufferDataARB(usage)");
+      return;
    }
 
    bufObj = get_buffer(ctx, target);
@@ -1225,18 +1225,18 @@ _mesa_MapBufferARB(GLenum target, GLenum access)
    ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, NULL);
 
    switch (access) {
-      case GL_READ_ONLY_ARB:
-         accessFlags = GL_MAP_READ_BIT;
-         break;
-      case GL_WRITE_ONLY_ARB:
-         accessFlags = GL_MAP_WRITE_BIT;
-         break;
-      case GL_READ_WRITE_ARB:
-         accessFlags = GL_MAP_READ_BIT | GL_MAP_WRITE_BIT;
-         break;
-      default:
-         _mesa_error(ctx, GL_INVALID_ENUM, "glMapBufferARB(access)");
-         return NULL;
+   case GL_READ_ONLY_ARB:
+      accessFlags = GL_MAP_READ_BIT;
+      break;
+   case GL_WRITE_ONLY_ARB:
+      accessFlags = GL_MAP_WRITE_BIT;
+      break;
+   case GL_READ_WRITE_ARB:
+      accessFlags = GL_MAP_READ_BIT | GL_MAP_WRITE_BIT;
+      break;
+   default:
+      _mesa_error(ctx, GL_INVALID_ENUM, "glMapBufferARB(access)");
+      return NULL;
    }
 
    bufObj = get_buffer(ctx, target);
@@ -1385,21 +1385,21 @@ _mesa_GetBufferParameterivARB(GLenum target, GLenum pname, GLint *params)
    }
 
    switch (pname) {
-      case GL_BUFFER_SIZE_ARB:
-         *params = (GLint) bufObj->Size;
-         break;
-      case GL_BUFFER_USAGE_ARB:
-         *params = bufObj->Usage;
-         break;
-      case GL_BUFFER_ACCESS_ARB:
-         *params = simplified_access_mode(bufObj->AccessFlags);
-         break;
-      case GL_BUFFER_MAPPED_ARB:
-         *params = _mesa_bufferobj_mapped(bufObj);
-         break;
-      default:
-         _mesa_error(ctx, GL_INVALID_ENUM, "glGetBufferParameterivARB(pname)");
-         return;
+   case GL_BUFFER_SIZE_ARB:
+      *params = (GLint) bufObj->Size;
+      break;
+   case GL_BUFFER_USAGE_ARB:
+      *params = bufObj->Usage;
+      break;
+   case GL_BUFFER_ACCESS_ARB:
+      *params = simplified_access_mode(bufObj->AccessFlags);
+      break;
+   case GL_BUFFER_MAPPED_ARB:
+      *params = _mesa_bufferobj_mapped(bufObj);
+      break;
+   default:
+      _mesa_error(ctx, GL_INVALID_ENUM, "glGetBufferParameterivARB(pname)");
+      return;
    }
 }
 
@@ -1427,21 +1427,21 @@ _mesa_GetBufferParameteri64v(GLenum target, GLenum pname, GLint64 *params)
    }
 
    switch (pname) {
-      case GL_BUFFER_SIZE_ARB:
-         *params = bufObj->Size;
-         break;
-      case GL_BUFFER_USAGE_ARB:
-         *params = bufObj->Usage;
-         break;
-      case GL_BUFFER_ACCESS_ARB:
-         *params = simplified_access_mode(bufObj->AccessFlags);
-         break;
-      case GL_BUFFER_MAPPED_ARB:
-         *params = _mesa_bufferobj_mapped(bufObj);
-         break;
-      default:
-         _mesa_error(ctx, GL_INVALID_ENUM, "glGetBufferParameteri64v(pname)");
-         return;
+   case GL_BUFFER_SIZE_ARB:
+      *params = bufObj->Size;
+      break;
+   case GL_BUFFER_USAGE_ARB:
+      *params = bufObj->Usage;
+      break;
+   case GL_BUFFER_ACCESS_ARB:
+      *params = simplified_access_mode(bufObj->AccessFlags);
+      break;
+   case GL_BUFFER_MAPPED_ARB:
+      *params = _mesa_bufferobj_mapped(bufObj);
+      break;
+   default:
+      _mesa_error(ctx, GL_INVALID_ENUM, "glGetBufferParameteri64v(pname)");
+      return;
    }
 }
 
@@ -1713,6 +1713,7 @@ _mesa_FlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length)
       ctx->Driver.FlushMappedBufferRange(ctx, target, offset, length, bufObj);
 }
 
+
 #if FEATURE_APPLE_object_purgeable
 static GLenum
 _mesa_BufferObjectPurgeable(GLcontext *ctx, GLuint name, GLenum option)
@@ -1746,6 +1747,7 @@ _mesa_BufferObjectPurgeable(GLcontext *ctx, GLuint name, GLenum option)
    return retval;
 }
 
+
 static GLenum
 _mesa_RenderObjectPurgeable(GLcontext *ctx, GLuint name, GLenum option)
 {
@@ -1774,6 +1776,7 @@ _mesa_RenderObjectPurgeable(GLcontext *ctx, GLuint name, GLenum option)
    return retval;
 }
 
+
 static GLenum
 _mesa_TextureObjectPurgeable(GLcontext *ctx, GLuint name, GLenum option)
 {
@@ -1802,6 +1805,7 @@ _mesa_TextureObjectPurgeable(GLcontext *ctx, GLuint name, GLenum option)
    return retval;
 }
 
+
 GLenum GLAPIENTRY
 _mesa_ObjectPurgeableAPPLE(GLenum objectType, GLuint name, GLenum option)
 {
@@ -1817,11 +1821,12 @@ _mesa_ObjectPurgeableAPPLE(GLenum objectType, GLuint name, GLenum option)
    switch (option) {
    case GL_VOLATILE_APPLE:
    case GL_RELEASED_APPLE:
+      /* legal */
       break;
-
    default:
       _mesa_error(ctx, GL_INVALID_ENUM,
-                  "glObjectPurgeable(name = 0x%x) invalid option: %d", name, option);
+                  "glObjectPurgeable(name = 0x%x) invalid option: %d",
+                  name, option);
       return 0;
    }
 
@@ -1832,14 +1837,15 @@ _mesa_ObjectPurgeableAPPLE(GLenum objectType, GLuint name, GLenum option)
       return _mesa_RenderObjectPurgeable (ctx, name, option);
    case GL_BUFFER_OBJECT_APPLE:
       return _mesa_BufferObjectPurgeable (ctx, name, option);
-
    default:
       _mesa_error(ctx, GL_INVALID_ENUM,
-                  "glObjectPurgeable(name = 0x%x) invalid type: %d", name, objectType);
+                  "glObjectPurgeable(name = 0x%x) invalid type: %d",
+                  name, objectType);
       return 0;
    }
 }
 
+
 static GLenum
 _mesa_BufferObjectUnpurgeable(GLcontext *ctx, GLuint name, GLenum option)
 {
@@ -1855,7 +1861,8 @@ _mesa_BufferObjectUnpurgeable(GLcontext *ctx, GLuint name, GLenum option)
 
    if (! bufObj->Purgeable) {
       _mesa_error(ctx, GL_INVALID_OPERATION,
-                  "glObjectUnpurgeable(name = 0x%x) object is already \"unpurged\"", name);
+                  "glObjectUnpurgeable(name = 0x%x) object is "
+                  " already \"unpurged\"", name);
       return 0;
    }
 
@@ -1868,6 +1875,7 @@ _mesa_BufferObjectUnpurgeable(GLcontext *ctx, GLuint name, GLenum option)
    return retval;
 }
 
+
 static GLenum
 _mesa_RenderObjectUnpurgeable(GLcontext *ctx, GLuint name, GLenum option)
 {
@@ -1883,7 +1891,8 @@ _mesa_RenderObjectUnpurgeable(GLcontext *ctx, GLuint name, GLenum option)
 
    if (! bufObj->Purgeable) {
       _mesa_error(ctx, GL_INVALID_OPERATION,
-                  "glObjectUnpurgeable(name = 0x%x) object is already \"unpurged\"", name);
+                  "glObjectUnpurgeable(name = 0x%x) object is "
+                  " already \"unpurged\"", name);
       return 0;
    }
 
@@ -1896,6 +1905,7 @@ _mesa_RenderObjectUnpurgeable(GLcontext *ctx, GLuint name, GLenum option)
    return retval;
 }
 
+
 static GLenum
 _mesa_TextureObjectUnpurgeable(GLcontext *ctx, GLuint name, GLenum option)
 {
@@ -1911,7 +1921,8 @@ _mesa_TextureObjectUnpurgeable(GLcontext *ctx, GLuint name, GLenum option)
 
    if (! bufObj->Purgeable) {
       _mesa_error(ctx, GL_INVALID_OPERATION,
-                  "glObjectUnpurgeable(name = 0x%x) object is already \"unpurged\"", name);
+                  "glObjectUnpurgeable(name = 0x%x) object is"
+                  " already \"unpurged\"", name);
       return 0;
    }
 
@@ -1924,6 +1935,7 @@ _mesa_TextureObjectUnpurgeable(GLcontext *ctx, GLuint name, GLenum option)
    return retval;
 }
 
+
 GLenum GLAPIENTRY
 _mesa_ObjectUnpurgeableAPPLE(GLenum objectType, GLuint name, GLenum option)
 {
@@ -1939,33 +1951,34 @@ _mesa_ObjectUnpurgeableAPPLE(GLenum objectType, GLuint name, GLenum option)
    switch (option) {
    case GL_RETAINED_APPLE:
    case GL_UNDEFINED_APPLE:
+      /* legal */
       break;
-
    default:
       _mesa_error(ctx, GL_INVALID_ENUM,
-                  "glObjectUnpurgeable(name = 0x%x) invalid option: %d", name, option);
+                  "glObjectUnpurgeable(name = 0x%x) invalid option: %d",
+                  name, option);
       return 0;
    }
 
    switch (objectType) {
    case GL_BUFFER_OBJECT_APPLE:
       return _mesa_BufferObjectUnpurgeable(ctx, name, option);
-
    case GL_TEXTURE:
       return _mesa_TextureObjectUnpurgeable(ctx, name, option);
-
    case GL_RENDERBUFFER_EXT:
       return _mesa_RenderObjectUnpurgeable(ctx, name, option);
-
    default:
       _mesa_error(ctx, GL_INVALID_ENUM,
-                  "glObjectUnpurgeable(name = 0x%x) invalid type: %d", name, objectType);
+                  "glObjectUnpurgeable(name = 0x%x) invalid type: %d",
+                  name, objectType);
       return 0;
    }
 }
 
+
 static void
-_mesa_GetBufferObjectParameterivAPPLE(GLcontext *ctx, GLuint name, GLenum pname, GLint* params)
+_mesa_GetBufferObjectParameterivAPPLE(GLcontext *ctx, GLuint name,
+                                      GLenum pname, GLint* params)
 {
    struct gl_buffer_object *bufObj;
 
@@ -1980,16 +1993,18 @@ _mesa_GetBufferObjectParameterivAPPLE(GLcontext *ctx, GLuint name, GLenum pname,
    case GL_PURGEABLE_APPLE:
       *params = bufObj->Purgeable;
       break;
-
    default:
       _mesa_error(ctx, GL_INVALID_ENUM,
-                  "glGetObjectParameteriv(name = 0x%x) invalid enum: %d", name, pname);
+                  "glGetObjectParameteriv(name = 0x%x) invalid enum: %d",
+                  name, pname);
       break;
    }
 }
 
+
 static void
-_mesa_GetRenderObjectParameterivAPPLE(GLcontext *ctx, GLuint name, GLenum pname, GLint* params)
+_mesa_GetRenderObjectParameterivAPPLE(GLcontext *ctx, GLuint name,
+                                      GLenum pname, GLint* params)
 {
    struct gl_renderbuffer *bufObj;
 
@@ -2004,16 +2019,18 @@ _mesa_GetRenderObjectParameterivAPPLE(GLcontext *ctx, GLuint name, GLenum pname,
    case GL_PURGEABLE_APPLE:
       *params = bufObj->Purgeable;
       break;
-
    default:
       _mesa_error(ctx, GL_INVALID_ENUM,
-                  "glGetObjectParameteriv(name = 0x%x) invalid enum: %d", name, pname);
+                  "glGetObjectParameteriv(name = 0x%x) invalid enum: %d",
+                  name, pname);
       break;
    }
 }
 
+
 static void
-_mesa_GetTextureObjectParameterivAPPLE(GLcontext *ctx, GLuint name, GLenum pname, GLint* params)
+_mesa_GetTextureObjectParameterivAPPLE(GLcontext *ctx, GLuint name,
+                                       GLenum pname, GLint* params)
 {
    struct gl_texture_object *bufObj;
 
@@ -2028,16 +2045,18 @@ _mesa_GetTextureObjectParameterivAPPLE(GLcontext *ctx, GLuint name, GLenum pname
    case GL_PURGEABLE_APPLE:
       *params = bufObj->Purgeable;
       break;
-
    default:
       _mesa_error(ctx, GL_INVALID_ENUM,
-                  "glGetObjectParameteriv(name = 0x%x) invalid enum: %d", name, pname);
+                  "glGetObjectParameteriv(name = 0x%x) invalid enum: %d",
+                  name, pname);
       break;
    }
 }
 
+
 void GLAPIENTRY
-_mesa_GetObjectParameterivAPPLE(GLenum objectType, GLuint name, GLenum pname, GLint* params)
+_mesa_GetObjectParameterivAPPLE(GLenum objectType, GLuint name, GLenum pname,
+                                GLint* params)
 {
    GET_CURRENT_CONTEXT(ctx);
 
@@ -2051,18 +2070,17 @@ _mesa_GetObjectParameterivAPPLE(GLenum objectType, GLuint name, GLenum pname, GL
    case GL_TEXTURE:
       _mesa_GetTextureObjectParameterivAPPLE (ctx, name, pname, params);
       break;
-
    case GL_BUFFER_OBJECT_APPLE:
       _mesa_GetBufferObjectParameterivAPPLE (ctx, name, pname, params);
       break;
-
    case GL_RENDERBUFFER_EXT:
       _mesa_GetRenderObjectParameterivAPPLE (ctx, name, pname, params);
       break;
-
    default:
       _mesa_error(ctx, GL_INVALID_ENUM,
-                  "glGetObjectParameteriv(name = 0x%x) invalid type: %d", name, objectType);
+                  "glGetObjectParameteriv(name = 0x%x) invalid type: %d",
+                  name, objectType);
    }
 }
-#endif
+
+#endif /* FEATURE_APPLE_object_purgeable */
-- 
cgit v1.2.3


From e9968ebfa40b4740601c1596950ebd3f168664b0 Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Fri, 5 Mar 2010 12:32:32 -0700
Subject: mesa: minor reformatting, new comments

---
 src/mesa/main/api_validate.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/main/api_validate.c b/src/mesa/main/api_validate.c
index e9359dbe5f..4fb7b5ad61 100644
--- a/src/mesa/main/api_validate.c
+++ b/src/mesa/main/api_validate.c
@@ -123,6 +123,12 @@ check_valid_to_render(GLcontext *ctx, const char *function)
    return GL_TRUE;
 }
 
+
+/**
+ * Do bounds checking on array element indexes.  Check that the vertices
+ * pointed to by the indices don't lie outside buffer object bounds.
+ * \return GL_TRUE if OK, GL_FALSE if any indexed vertex goes is out of bounds
+ */
 static GLboolean
 check_index_bounds(GLcontext *ctx, GLsizei count, GLenum type,
 		   const GLvoid *indices, GLint basevertex)
@@ -150,14 +156,15 @@ check_index_bounds(GLcontext *ctx, GLsizei count, GLenum type,
    if ((int)(min + basevertex) < 0 ||
        max + basevertex > ctx->Array.ArrayObj->_MaxElement) {
       /* the max element is out of bounds of one or more enabled arrays */
-      _mesa_warning(ctx, "glDrawElements() index=%u is "
-		    "out of bounds (max=%u)", max, ctx->Array.ArrayObj->_MaxElement);
+      _mesa_warning(ctx, "glDrawElements() index=%u is out of bounds (max=%u)",
+                    max, ctx->Array.ArrayObj->_MaxElement);
       return GL_FALSE;
    }
 
    return GL_TRUE;
 }
 
+
 /**
  * Error checking for glDrawElements().  Includes parameter checking
  * and VBO bounds checking.
-- 
cgit v1.2.3


From 24f90112761d108a4a131fad11bd7b426d8edfa0 Mon Sep 17 00:00:00 2001
From: Chris Wilson <chris@chris-wilson.co.uk>
Date: Fri, 5 Mar 2010 23:10:45 +0000
Subject: Always return VOLATILE for ObjectPurgeable(VOLATILE)

Fixes fdo bug 26128.

The spec mandates that VOLATILE is returned from
ObjectPurgeable(VOLATILE) irrespective of the actual status of the
object upon completion of marking it purgeable.

Conform to the spec, even though it seems wrong.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
---
 src/mesa/main/bufferobj.c | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c
index c532cbef11..71d1514fe4 100644
--- a/src/mesa/main/bufferobj.c
+++ b/src/mesa/main/bufferobj.c
@@ -1809,6 +1809,8 @@ _mesa_TextureObjectPurgeable(GLcontext *ctx, GLuint name, GLenum option)
 GLenum GLAPIENTRY
 _mesa_ObjectPurgeableAPPLE(GLenum objectType, GLuint name, GLenum option)
 {
+   GLenum retval;
+
    GET_CURRENT_CONTEXT(ctx);
    ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, 0);
 
@@ -1832,17 +1834,27 @@ _mesa_ObjectPurgeableAPPLE(GLenum objectType, GLuint name, GLenum option)
 
    switch (objectType) {
    case GL_TEXTURE:
-      return _mesa_TextureObjectPurgeable (ctx, name, option);
+      retval = _mesa_TextureObjectPurgeable (ctx, name, option);
+      break;
    case GL_RENDERBUFFER_EXT:
-      return _mesa_RenderObjectPurgeable (ctx, name, option);
+      retval = _mesa_RenderObjectPurgeable (ctx, name, option);
+      break;
    case GL_BUFFER_OBJECT_APPLE:
-      return _mesa_BufferObjectPurgeable (ctx, name, option);
+      retval = _mesa_BufferObjectPurgeable (ctx, name, option);
+      break;
    default:
       _mesa_error(ctx, GL_INVALID_ENUM,
                   "glObjectPurgeable(name = 0x%x) invalid type: %d",
                   name, objectType);
       return 0;
    }
+
+   /* In strict conformance to the spec, we must only return VOLATILE when
+    * when passed the VOLATILE option. Madness.
+    *
+    * XXX First fix the spec, then fix me.
+    */
+   return option == GL_VOLATILE_APPLE ? GL_VOLATILE_APPLE : retval;
 }
 
 
@@ -1902,7 +1914,7 @@ _mesa_RenderObjectUnpurgeable(GLcontext *ctx, GLuint name, GLenum option)
    if (ctx->Driver.RenderObjectUnpurgeable)
       retval = ctx->Driver.RenderObjectUnpurgeable(ctx, bufObj, option);
 
-   return retval;
+   return option;
 }
 
 
-- 
cgit v1.2.3


From 3b9612645e537c3d293b09f27ef199a3eb52d840 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Thu, 4 Mar 2010 18:26:33 -0800
Subject: i965: Fix the SNB SF input size.

---
 src/mesa/drivers/dri/i965/gen6_sf_state.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/gen6_sf_state.c b/src/mesa/drivers/dri/i965/gen6_sf_state.c
index 08e6753a91..18fab61556 100644
--- a/src/mesa/drivers/dri/i965/gen6_sf_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_sf_state.c
@@ -48,7 +48,7 @@ upload_sf_state(struct brw_context *brw)
 
    dw1 =
       num_outputs << GEN6_SF_NUM_OUTPUTS_SHIFT |
-      num_inputs << GEN6_SF_URB_ENTRY_READ_LENGTH_SHIFT |
+      (num_inputs + 1) / 2 << GEN6_SF_URB_ENTRY_READ_LENGTH_SHIFT |
       3 << GEN6_SF_URB_ENTRY_READ_OFFSET_SHIFT;
    dw2 = GEN6_SF_VIEWPORT_TRANSFORM_ENABLE |
       GEN6_SF_STATISTICS_ENABLE;
-- 
cgit v1.2.3


From f6f5e8767926932dc276015ce84b74a0d01ade65 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Fri, 5 Mar 2010 12:27:25 -0800
Subject: i965: Try to assign SNB SF inputs to outputs.

---
 src/mesa/drivers/dri/i965/gen6_sf_state.c | 43 +++++++++++++++++++++++++++++--
 1 file changed, 41 insertions(+), 2 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/gen6_sf_state.c b/src/mesa/drivers/dri/i965/gen6_sf_state.c
index 18fab61556..8d96b44f1d 100644
--- a/src/mesa/drivers/dri/i965/gen6_sf_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_sf_state.c
@@ -32,6 +32,25 @@
 #include "main/macros.h"
 #include "intel_batchbuffer.h"
 
+static uint32_t
+get_attr_override(struct brw_context *brw, int attr)
+{
+   uint32_t attr_override;
+   int attr_index = 0, i;
+
+   /* Find the source index (0 = first attribute after the 4D position)
+    * for this output attribute.  attr is currently a VERT_RESULT_* but should
+    * be FRAG_ATTRIB_*.
+    */
+   for (i = 0; i < attr; i++) {
+      if (brw->vs.prog_data->outputs_written & BITFIELD64_BIT(i))
+	 attr_index++;
+   }
+   attr_override = attr_index;
+
+   return attr_index;
+}
+
 static void
 upload_sf_state(struct brw_context *brw)
 {
@@ -45,6 +64,7 @@ upload_sf_state(struct brw_context *brw)
    int i;
    /* _NEW_BUFFER */
    GLboolean render_to_fbo = brw->intel.ctx.DrawBuffer->Name != 0;
+   int attr = 0;
 
    dw1 =
       num_outputs << GEN6_SF_NUM_OUTPUTS_SHIFT |
@@ -122,8 +142,27 @@ upload_sf_state(struct brw_context *brw)
    OUT_BATCH_F(ctx->Polygon.OffsetFactor); /* scale */
    OUT_BATCH_F(0.0); /* XXX: global depth offset clamp */
    for (i = 0; i < 8; i++) {
-      /* attribute overrides */
-      OUT_BATCH(0);
+      uint32_t attr_overrides = 0;
+
+      /* These should be generating FS inputs read instead of VS
+       * outputs written
+       */
+      for (; attr < 64; attr++) {
+	 if (brw->vs.prog_data->outputs_written & BITFIELD64_BIT(attr)) {
+	    attr_overrides |= get_attr_override(brw, attr);
+	    attr++;
+	    break;
+	 }
+      }
+
+      for (; attr < 64; attr++) {
+	 if (brw->vs.prog_data->outputs_written & BITFIELD64_BIT(attr)) {
+	    attr_overrides |= get_attr_override(brw, attr) << 16;
+	    attr++;
+	    break;
+	 }
+      }
+      OUT_BATCH(attr_overrides);
    }
    OUT_BATCH(0); /* point sprite texcoord bitmask */
    OUT_BATCH(0); /* constant interp bitmask */
-- 
cgit v1.2.3


From 8a9d8bd52af4414e59320c68238b8929edf3ff80 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Fri, 5 Mar 2010 12:27:46 -0800
Subject: intel: Check that the batch is mapped per BEGIN, not each OUT.

Shaves 800 bytes off the driver.
---
 src/mesa/drivers/dri/intel/intel_batchbuffer.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/intel/intel_batchbuffer.h b/src/mesa/drivers/dri/intel/intel_batchbuffer.h
index 79bdbc17ae..860aa1327a 100644
--- a/src/mesa/drivers/dri/intel/intel_batchbuffer.h
+++ b/src/mesa/drivers/dri/intel/intel_batchbuffer.h
@@ -86,7 +86,6 @@ intel_batchbuffer_space(struct intel_batchbuffer *batch)
 static INLINE void
 intel_batchbuffer_emit_dword(struct intel_batchbuffer *batch, GLuint dword)
 {
-   assert(batch->map);
    assert(intel_batchbuffer_space(batch) >= 4);
    *(GLuint *) (batch->ptr) = dword;
    batch->ptr += 4;
@@ -118,6 +117,7 @@ static INLINE uint32_t float_as_int(float f)
 
 #define BEGIN_BATCH(n) do {				\
    intel_batchbuffer_require_space(intel->batch, (n)*4); \
+   assert(intel->batch->map);						\
    assert(intel->batch->emit.start_ptr == NULL);			\
    intel->batch->emit.total = (n) * 4;					\
    intel->batch->emit.start_ptr = intel->batch->ptr;			\
-- 
cgit v1.2.3


From 342a7f23bf76e21b049cba9ab97bf4aa640a5bfd Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Fri, 5 Mar 2010 12:40:45 -0800
Subject: intel: Move the assertions about reloc delta from the macros to the
 function.

Cuts another 1800 bytes from the driver.
---
 src/mesa/drivers/dri/intel/intel_batchbuffer.c | 4 ++++
 src/mesa/drivers/dri/intel/intel_batchbuffer.h | 2 --
 2 files changed, 4 insertions(+), 2 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/intel/intel_batchbuffer.c b/src/mesa/drivers/dri/intel/intel_batchbuffer.c
index a7bfd62b28..9768b0deee 100644
--- a/src/mesa/drivers/dri/intel/intel_batchbuffer.c
+++ b/src/mesa/drivers/dri/intel/intel_batchbuffer.c
@@ -210,6 +210,8 @@ intel_batchbuffer_emit_reloc(struct intel_batchbuffer *batch,
 {
    int ret;
 
+   assert(delta < buffer->size);
+
    if (batch->ptr - batch->map > batch->buf->size)
     printf ("bad relocation ptr %p map %p offset %d size %lu\n",
 	    batch->ptr, batch->map, batch->ptr - batch->map, batch->buf->size);
@@ -234,6 +236,8 @@ intel_batchbuffer_emit_reloc_fenced(struct intel_batchbuffer *batch,
 {
    int ret;
 
+   assert(delta < buffer->size);
+
    if (batch->ptr - batch->map > batch->buf->size)
     printf ("bad relocation ptr %p map %p offset %d size %lu\n",
 	    batch->ptr, batch->map, batch->ptr - batch->map, batch->buf->size);
diff --git a/src/mesa/drivers/dri/intel/intel_batchbuffer.h b/src/mesa/drivers/dri/intel/intel_batchbuffer.h
index 860aa1327a..b7625b5b0d 100644
--- a/src/mesa/drivers/dri/intel/intel_batchbuffer.h
+++ b/src/mesa/drivers/dri/intel/intel_batchbuffer.h
@@ -128,12 +128,10 @@ static INLINE uint32_t float_as_int(float f)
 						    float_as_int(f))
 
 #define OUT_RELOC(buf, read_domains, write_domain, delta) do {		\
-   assert((unsigned) (delta) < buf->size);				\
    intel_batchbuffer_emit_reloc(intel->batch, buf,			\
 				read_domains, write_domain, delta);	\
 } while (0)
 #define OUT_RELOC_FENCED(buf, read_domains, write_domain, delta) do {	\
-   assert((unsigned) (delta) < buf->size);				\
    intel_batchbuffer_emit_reloc_fenced(intel->batch, buf,		\
 				       read_domains, write_domain, delta); \
 } while (0)
-- 
cgit v1.2.3


From 7392002041f6c7ac6eb788d7b154f2b44eb6f403 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Fri, 5 Mar 2010 12:47:21 -0800
Subject: intel: Replace batch macro contents with function calls.

This manages to cut down another 3800 bytes.
---
 src/mesa/drivers/dri/intel/intel_batchbuffer.h | 67 +++++++++++++++-----------
 1 file changed, 39 insertions(+), 28 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/intel/intel_batchbuffer.h b/src/mesa/drivers/dri/intel/intel_batchbuffer.h
index b7625b5b0d..5e0ea916b4 100644
--- a/src/mesa/drivers/dri/intel/intel_batchbuffer.h
+++ b/src/mesa/drivers/dri/intel/intel_batchbuffer.h
@@ -71,6 +71,17 @@ GLboolean intel_batchbuffer_emit_reloc_fenced(struct intel_batchbuffer *batch,
 					      uint32_t offset);
 void intel_batchbuffer_emit_mi_flush(struct intel_batchbuffer *batch);
 
+static INLINE uint32_t float_as_int(float f)
+{
+   union {
+      float f;
+      uint32_t d;
+   } fi;
+
+   fi.f = f;
+   return fi.d;
+}
+
 /* Inline functions - might actually be better off with these
  * non-inlined.  Certainly better off switching all command packets to
  * be passed as structs rather than dwords, but that's a little bit of
@@ -91,6 +102,12 @@ intel_batchbuffer_emit_dword(struct intel_batchbuffer *batch, GLuint dword)
    batch->ptr += 4;
 }
 
+static INLINE void
+intel_batchbuffer_emit_float(struct intel_batchbuffer *batch, float f)
+{
+   intel_batchbuffer_emit_dword(batch, float_as_int(f));
+}
+
 static INLINE void
 intel_batchbuffer_require_space(struct intel_batchbuffer *batch,
                                 GLuint sz)
@@ -100,33 +117,36 @@ intel_batchbuffer_require_space(struct intel_batchbuffer *batch,
       intel_batchbuffer_flush(batch);
 }
 
-static INLINE uint32_t float_as_int(float f)
+static INLINE void
+intel_batchbuffer_begin(struct intel_batchbuffer *batch, int n)
 {
-   union {
-      float f;
-      uint32_t d;
-   } fi;
+   intel_batchbuffer_require_space(batch, n * 4);
+   assert(batch->map);
+   assert(batch->emit.start_ptr == NULL);
+   batch->emit.total = n * 4;
+   batch->emit.start_ptr = batch->ptr;
+}
 
-   fi.f = f;
-   return fi.d;
+static INLINE void
+intel_batchbuffer_advance(struct intel_batchbuffer *batch)
+{
+   unsigned int _n = batch->ptr - batch->emit.start_ptr;
+   assert(batch->emit.start_ptr != NULL);
+   if (_n != batch->emit.total) {
+      fprintf(stderr, "ADVANCE_BATCH: %d of %d dwords emitted\n",
+	      _n, batch->emit.total);
+      abort();
+   }
+   batch->emit.start_ptr = NULL;
 }
 
 /* Here are the crusty old macros, to be removed:
  */
 #define BATCH_LOCALS
 
-#define BEGIN_BATCH(n) do {				\
-   intel_batchbuffer_require_space(intel->batch, (n)*4); \
-   assert(intel->batch->map);						\
-   assert(intel->batch->emit.start_ptr == NULL);			\
-   intel->batch->emit.total = (n) * 4;					\
-   intel->batch->emit.start_ptr = intel->batch->ptr;			\
-} while (0)
-
+#define BEGIN_BATCH(n) intel_batchbuffer_begin(intel->batch, n)
 #define OUT_BATCH(d) intel_batchbuffer_emit_dword(intel->batch, d)
-#define OUT_BATCH_F(f) intel_batchbuffer_emit_dword(intel->batch,	\
-						    float_as_int(f))
-
+#define OUT_BATCH_F(f) intel_batchbuffer_emit_float(intel->batch,f)
 #define OUT_RELOC(buf, read_domains, write_domain, delta) do {		\
    intel_batchbuffer_emit_reloc(intel->batch, buf,			\
 				read_domains, write_domain, delta);	\
@@ -136,15 +156,6 @@ static INLINE uint32_t float_as_int(float f)
 				       read_domains, write_domain, delta); \
 } while (0)
 
-#define ADVANCE_BATCH() do {						\
-   unsigned int _n = intel->batch->ptr - intel->batch->emit.start_ptr;	\
-   assert(intel->batch->emit.start_ptr != NULL);			\
-   if (_n != intel->batch->emit.total) {				\
-      fprintf(stderr, "ADVANCE_BATCH: %d of %d dwords emitted\n",	\
-	      _n, intel->batch->emit.total);				\
-      abort();								\
-   }									\
-   intel->batch->emit.start_ptr = NULL;					\
-} while(0)
+#define ADVANCE_BATCH() intel_batchbuffer_advance(intel->batch);
 
 #endif
-- 
cgit v1.2.3


From 855515859ec1d94737ea91167220ba7b568c144d Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Fri, 5 Mar 2010 12:56:40 -0800
Subject: intel: Only do batchbuffer debug if --enable-debug is used.

This saves 6.6KB on the 965 driver, and appears to speed
firefox-talos-gfx up by 1-2%.  Unlike many other asserts in the
driver, when we make a mistake that would trigger one of these it
generally shows up all the time for developers, so turning it off for
release seems fine.
---
 src/mesa/drivers/dri/intel/intel_batchbuffer.h | 10 ++++++++++
 1 file changed, 10 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/intel/intel_batchbuffer.h b/src/mesa/drivers/dri/intel/intel_batchbuffer.h
index 5e0ea916b4..e5ad2617ab 100644
--- a/src/mesa/drivers/dri/intel/intel_batchbuffer.h
+++ b/src/mesa/drivers/dri/intel/intel_batchbuffer.h
@@ -24,11 +24,13 @@ struct intel_batchbuffer
 
    GLuint size;
 
+#ifdef DEBUG
    /** Tracking of BEGIN_BATCH()/OUT_BATCH()/ADVANCE_BATCH() debugging */
    struct {
       GLuint total;
       GLubyte *start_ptr;
    } emit;
+#endif
 
    GLuint dirty_state;
    GLuint reserved_space;
@@ -97,7 +99,9 @@ intel_batchbuffer_space(struct intel_batchbuffer *batch)
 static INLINE void
 intel_batchbuffer_emit_dword(struct intel_batchbuffer *batch, GLuint dword)
 {
+#ifdef DEBUG
    assert(intel_batchbuffer_space(batch) >= 4);
+#endif
    *(GLuint *) (batch->ptr) = dword;
    batch->ptr += 4;
 }
@@ -112,7 +116,9 @@ static INLINE void
 intel_batchbuffer_require_space(struct intel_batchbuffer *batch,
                                 GLuint sz)
 {
+#ifdef DEBUG
    assert(sz < batch->size - 8);
+#endif
    if (intel_batchbuffer_space(batch) < sz)
       intel_batchbuffer_flush(batch);
 }
@@ -121,15 +127,18 @@ static INLINE void
 intel_batchbuffer_begin(struct intel_batchbuffer *batch, int n)
 {
    intel_batchbuffer_require_space(batch, n * 4);
+#ifdef DEBUG
    assert(batch->map);
    assert(batch->emit.start_ptr == NULL);
    batch->emit.total = n * 4;
    batch->emit.start_ptr = batch->ptr;
+#endif
 }
 
 static INLINE void
 intel_batchbuffer_advance(struct intel_batchbuffer *batch)
 {
+#ifdef DEBUG
    unsigned int _n = batch->ptr - batch->emit.start_ptr;
    assert(batch->emit.start_ptr != NULL);
    if (_n != batch->emit.total) {
@@ -138,6 +147,7 @@ intel_batchbuffer_advance(struct intel_batchbuffer *batch)
       abort();
    }
    batch->emit.start_ptr = NULL;
+#endif
 }
 
 /* Here are the crusty old macros, to be removed:
-- 
cgit v1.2.3


From 5d18e86971bdcf0a4dff3cb62581d7ae54c5e67a Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Fri, 5 Mar 2010 13:18:13 -0800
Subject: i965: Pack gen6 blend_state_key structure.

---
 src/mesa/drivers/dri/i965/gen6_cc.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/gen6_cc.c b/src/mesa/drivers/dri/i965/gen6_cc.c
index 42b41f3210..6418fc6d81 100644
--- a/src/mesa/drivers/dri/i965/gen6_cc.c
+++ b/src/mesa/drivers/dri/i965/gen6_cc.c
@@ -34,6 +34,7 @@
 
 struct brw_blend_state_key {
    GLboolean color_blend, alpha_enabled;
+   GLboolean dither;
 
    GLenum logic_op;
 
@@ -42,8 +43,6 @@ struct brw_blend_state_key {
    GLenum blend_dst_rgb, blend_dst_a;
 
    GLenum alpha_func;
-
-   GLboolean dither;
 };
 
 static void
-- 
cgit v1.2.3


From 879ea6f27972766c792fe78971a36c5c7b9f1884 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Fri, 5 Mar 2010 13:19:09 -0800
Subject: i965: Rename SNB brw_*_key structs to gen6_*_key structs.

---
 src/mesa/drivers/dri/i965/gen6_cc.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/gen6_cc.c b/src/mesa/drivers/dri/i965/gen6_cc.c
index 6418fc6d81..f7acad6912 100644
--- a/src/mesa/drivers/dri/i965/gen6_cc.c
+++ b/src/mesa/drivers/dri/i965/gen6_cc.c
@@ -32,7 +32,7 @@
 #include "intel_batchbuffer.h"
 #include "main/macros.h"
 
-struct brw_blend_state_key {
+struct gen6_blend_state_key {
    GLboolean color_blend, alpha_enabled;
    GLboolean dither;
 
@@ -47,7 +47,7 @@ struct brw_blend_state_key {
 
 static void
 blend_state_populate_key(struct brw_context *brw,
-			 struct brw_blend_state_key *key)
+			 struct gen6_blend_state_key *key)
 {
    GLcontext *ctx = &brw->intel.ctx;
 
@@ -85,7 +85,7 @@ blend_state_populate_key(struct brw_context *brw,
  */
 static drm_intel_bo *
 blend_state_create_from_key(struct brw_context *brw,
-			    struct brw_blend_state_key *key)
+			    struct gen6_blend_state_key *key)
 {
    struct gen6_blend_state blend;
    drm_intel_bo *bo;
@@ -148,7 +148,7 @@ blend_state_create_from_key(struct brw_context *brw,
 static void
 prepare_blend_state(struct brw_context *brw)
 {
-   struct brw_blend_state_key key;
+   struct gen6_blend_state_key key;
 
    blend_state_populate_key(brw, &key);
 
@@ -171,7 +171,7 @@ const struct brw_tracked_state gen6_blend_state = {
    .prepare = prepare_blend_state,
 };
 
-struct brw_color_calc_state_key {
+struct gen6_color_calc_state_key {
    GLubyte blend_constant_color[4];
    GLclampf alpha_ref;
    GLubyte stencil_ref[2];
@@ -179,7 +179,7 @@ struct brw_color_calc_state_key {
 
 static void
 color_calc_state_populate_key(struct brw_context *brw,
-			      struct brw_color_calc_state_key *key)
+			      struct gen6_color_calc_state_key *key)
 {
    GLcontext *ctx = &brw->intel.ctx;
 
@@ -209,7 +209,7 @@ color_calc_state_populate_key(struct brw_context *brw,
  */
 static drm_intel_bo *
 color_calc_state_create_from_key(struct brw_context *brw,
-				 struct brw_color_calc_state_key *key)
+				 struct gen6_color_calc_state_key *key)
 {
    struct gen6_color_calc_state cc;
    drm_intel_bo *bo;
@@ -238,7 +238,7 @@ color_calc_state_create_from_key(struct brw_context *brw,
 static void
 prepare_color_calc_state(struct brw_context *brw)
 {
-   struct brw_color_calc_state_key key;
+   struct gen6_color_calc_state_key key;
 
    color_calc_state_populate_key(brw, &key);
 
-- 
cgit v1.2.3


From 9a38f76044761f9555bf84ebbc520c015ec88d78 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Fri, 5 Mar 2010 13:24:24 -0800
Subject: i965: Remove the unused SDC BO pointer from the sampler state key.

Since it's a BO pointer, it already lives outside the key in
brw->wm.sdc_bo[] which is used for sampler state lookup and setup.
---
 src/mesa/drivers/dri/i965/brw_wm_sampler_state.c | 1 -
 1 file changed, 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_wm_sampler_state.c b/src/mesa/drivers/dri/i965/brw_wm_sampler_state.c
index c232cd2791..3a33996452 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_sampler_state.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_sampler_state.c
@@ -89,7 +89,6 @@ struct wm_sampler_key {
       float max_aniso;
       GLenum minfilter, magfilter;
       GLenum comparemode, comparefunc;
-      dri_bo *sdc_bo;
 
       /** If target is cubemap, take context setting.
        */
-- 
cgit v1.2.3


From 20952f0378247f69849b6e37a7374bc9c94437a0 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Fri, 5 Mar 2010 13:38:02 -0800
Subject: i965: Remove the paths for making a const surface object for a NULL
 BO.

---
 src/mesa/drivers/dri/i965/brw_vs_surface_state.c |  4 ++--
 src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 29 +++++++++---------------
 2 files changed, 13 insertions(+), 20 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_vs_surface_state.c b/src/mesa/drivers/dri/i965/brw_vs_surface_state.c
index 950d075aa1..4007b5a15c 100644
--- a/src/mesa/drivers/dri/i965/brw_vs_surface_state.c
+++ b/src/mesa/drivers/dri/i965/brw_vs_surface_state.c
@@ -104,7 +104,7 @@ brw_update_vs_constant_surface( GLcontext *ctx,
    /* If there's no constant buffer, then no surface BO is needed to point at
     * it.
     */
-   if (vp->const_buffer == 0) {
+   if (vp->const_buffer == NULL) {
       drm_intel_bo_unreference(brw->vs.surf_bo[surf]);
       brw->vs.surf_bo[surf] = NULL;
       return;
@@ -132,7 +132,7 @@ brw_update_vs_constant_surface( GLcontext *ctx,
    brw->vs.surf_bo[surf] = brw_search_cache(&brw->surface_cache,
                                             BRW_SS_SURFACE,
                                             &key, sizeof(key),
-                                            &key.bo, key.bo ? 1 : 0,
+                                            &key.bo, 1,
                                             NULL);
    if (brw->vs.surf_bo[surf] == NULL) {
       brw->vs.surf_bo[surf] = brw_create_constant_surface(brw, &key);
diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
index a42067611c..b1ab79b783 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
@@ -336,10 +336,7 @@ brw_create_constant_surface( struct brw_context *brw,
    surf.ss0.surface_format = BRW_SURFACEFORMAT_R32G32B32A32_FLOAT;
 
    assert(key->bo);
-   if (key->bo)
-      surf.ss1.base_addr = key->bo->offset; /* reloc */
-   else
-      surf.ss1.base_addr = key->offset;
+   surf.ss1.base_addr = key->bo->offset; /* reloc */
 
    surf.ss2.width = w & 0x7f;            /* bits 6:0 of size or width */
    surf.ss2.height = (w >> 7) & 0x1fff;  /* bits 19:7 of size or width */
@@ -349,20 +346,16 @@ brw_create_constant_surface( struct brw_context *brw,
  
    bo = brw_upload_cache(&brw->surface_cache, BRW_SS_SURFACE,
 			 key, sizeof(*key),
-			 &key->bo, key->bo ? 1 : 0,
+			 &key->bo, 1,
 			 &surf, sizeof(surf));
 
-   if (key->bo) {
-      /* Emit relocation to surface contents.  Section 5.1.1 of the gen4
-       * bspec ("Data Cache") says that the data cache does not exist as
-       * a separate cache and is just the sampler cache.
-       */
-      dri_bo_emit_reloc(bo,
-			I915_GEM_DOMAIN_SAMPLER, 0,
-			0,
-			offsetof(struct brw_surface_state, ss1),
-			key->bo);
-   }
+   /* Emit relocation to surface contents.  Section 5.1.1 of the gen4
+    * bspec ("Data Cache") says that the data cache does not exist as
+    * a separate cache and is just the sampler cache.
+    */
+   drm_intel_bo_emit_reloc(bo, offsetof(struct brw_surface_state, ss1),
+			   key->bo, 0,
+			   I915_GEM_DOMAIN_SAMPLER, 0);
 
    return bo;
 }
@@ -420,7 +413,7 @@ brw_update_wm_constant_surface( GLcontext *ctx,
    /* If there's no constant buffer, then no surface BO is needed to point at
     * it.
     */
-   if (fp->const_buffer == 0) {
+   if (fp->const_buffer == NULL) {
       drm_intel_bo_unreference(brw->wm.surf_bo[surf]);
       brw->wm.surf_bo[surf] = NULL;
       return;
@@ -448,7 +441,7 @@ brw_update_wm_constant_surface( GLcontext *ctx,
    brw->wm.surf_bo[surf] = brw_search_cache(&brw->surface_cache,
                                             BRW_SS_SURFACE,
                                             &key, sizeof(key),
-                                            &key.bo, key.bo ? 1 : 0,
+                                            &key.bo, 1,
                                             NULL);
    if (brw->wm.surf_bo[surf] == NULL) {
       brw->wm.surf_bo[surf] = brw_create_constant_surface(brw, &key);
-- 
cgit v1.2.3


From a232cc59e3f8ac8462c23b1a83e0ba60b451e681 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Fri, 5 Mar 2010 13:48:41 -0800
Subject: intel: Remove support for the DRI1 TFP extension.

---
 src/mesa/drivers/dri/i915/i830_texstate.c        | 49 ++++++------------
 src/mesa/drivers/dri/i915/i915_texstate.c        | 36 +++-----------
 src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 63 +++++++-----------------
 src/mesa/drivers/dri/intel/intel_screen.c        |  6 ---
 src/mesa/drivers/dri/intel/intel_tex.h           |  2 -
 src/mesa/drivers/dri/intel/intel_tex_image.c     | 23 ---------
 src/mesa/drivers/dri/intel/intel_tex_obj.h       |  4 --
 7 files changed, 39 insertions(+), 144 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i915/i830_texstate.c b/src/mesa/drivers/dri/i915/i830_texstate.c
index 7525f9f2e0..e8f7e378ec 100644
--- a/src/mesa/drivers/dri/i915/i830_texstate.c
+++ b/src/mesa/drivers/dri/i915/i830_texstate.c
@@ -122,6 +122,7 @@ i830_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
    GLuint *state = i830->state.Tex[unit], format, pitch;
    GLint lodbias;
    GLubyte border[4];
+   GLuint dst_x, dst_y;
 
    memset(state, 0, sizeof(state));
 
@@ -132,7 +133,7 @@ i830_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
        i830->state.tex_buffer[unit] = NULL;
    }
 
-   if (!intelObj->imageOverride && !intel_finalize_mipmap_tree(intel, unit))
+   if (!intel_finalize_mipmap_tree(intel, unit))
       return GL_FALSE;
 
    /* Get first image here, since intelObj->firstLevel will get set in
@@ -140,42 +141,20 @@ i830_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
     */
    firstImage = tObj->Image[0][intelObj->firstLevel];
 
-   if (intelObj->imageOverride) {
-      i830->state.tex_buffer[unit] = NULL;
-      i830->state.tex_offset[unit] = intelObj->textureOffset;
+   intel_miptree_get_image_offset(intelObj->mt, intelObj->firstLevel, 0, 0,
+				  &dst_x, &dst_y);
 
-      switch (intelObj->depthOverride) {
-      case 32:
-	 format = MAPSURF_32BIT | MT_32BIT_ARGB8888;
-	 break;
-      case 24:
-      default:
-	 format = MAPSURF_32BIT | MT_32BIT_XRGB8888;
-	 break;
-      case 16:
-	 format = MAPSURF_16BIT | MT_16BIT_RGB565;
-	 break;
-      }
-
-      pitch = intelObj->pitchOverride;
-   } else {
-      GLuint dst_x, dst_y;
-
-      intel_miptree_get_image_offset(intelObj->mt, intelObj->firstLevel, 0, 0,
-				     &dst_x, &dst_y);
-
-      dri_bo_reference(intelObj->mt->region->buffer);
-      i830->state.tex_buffer[unit] = intelObj->mt->region->buffer;
-      /* XXX: This calculation is probably broken for tiled images with
-       * a non-page-aligned offset.
-       */
-      i830->state.tex_offset[unit] = (dst_x + dst_y * intelObj->mt->pitch) *
-	 intelObj->mt->cpp;
+   dri_bo_reference(intelObj->mt->region->buffer);
+   i830->state.tex_buffer[unit] = intelObj->mt->region->buffer;
+   /* XXX: This calculation is probably broken for tiled images with
+    * a non-page-aligned offset.
+    */
+   i830->state.tex_offset[unit] = (dst_x + dst_y * intelObj->mt->pitch) *
+      intelObj->mt->cpp;
 
-      format = translate_texture_format(firstImage->TexFormat,
-					firstImage->InternalFormat);
-      pitch = intelObj->mt->pitch * intelObj->mt->cpp;
-   }
+   format = translate_texture_format(firstImage->TexFormat,
+				     firstImage->InternalFormat);
+   pitch = intelObj->mt->pitch * intelObj->mt->cpp;
 
    state[I830_TEXREG_TM0LI] = (_3DSTATE_LOAD_STATE_IMMEDIATE_2 |
                                (LOAD_TEXTURE_MAP0 << unit) | 4);
diff --git a/src/mesa/drivers/dri/i915/i915_texstate.c b/src/mesa/drivers/dri/i915/i915_texstate.c
index 3ee4c8653a..a1ab8f8b6d 100644
--- a/src/mesa/drivers/dri/i915/i915_texstate.c
+++ b/src/mesa/drivers/dri/i915/i915_texstate.c
@@ -150,7 +150,7 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
        i915->state.tex_buffer[unit] = NULL;
    }
 
-   if (!intelObj->imageOverride && !intel_finalize_mipmap_tree(intel, unit))
+   if (!intel_finalize_mipmap_tree(intel, unit))
       return GL_FALSE;
 
    /* Get first image here, since intelObj->firstLevel will get set in
@@ -158,34 +158,14 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
     */
    firstImage = tObj->Image[0][intelObj->firstLevel];
 
-   if (intelObj->imageOverride) {
-      i915->state.tex_buffer[unit] = NULL;
-      i915->state.tex_offset[unit] = intelObj->textureOffset;
+   dri_bo_reference(intelObj->mt->region->buffer);
+   i915->state.tex_buffer[unit] = intelObj->mt->region->buffer;
+   i915->state.tex_offset[unit] = 0; /* Always the origin of the miptree */
 
-      switch (intelObj->depthOverride) {
-      case 32:
-	 format = MAPSURF_32BIT | MT_32BIT_ARGB8888;
-	 break;
-      case 24:
-      default:
-	 format = MAPSURF_32BIT | MT_32BIT_XRGB8888;
-	 break;
-      case 16:
-	 format = MAPSURF_16BIT | MT_16BIT_RGB565;
-	 break;
-      }
-
-      pitch = intelObj->pitchOverride;
-   } else {
-      dri_bo_reference(intelObj->mt->region->buffer);
-      i915->state.tex_buffer[unit] = intelObj->mt->region->buffer;
-      i915->state.tex_offset[unit] = 0; /* Always the origin of the miptree */
-
-      format = translate_texture_format(firstImage->TexFormat,
-					firstImage->InternalFormat,
-					tObj->DepthMode);
-      pitch = intelObj->mt->pitch * intelObj->mt->cpp;
-   }
+   format = translate_texture_format(firstImage->TexFormat,
+				     firstImage->InternalFormat,
+				     tObj->DepthMode);
+   pitch = intelObj->mt->pitch * intelObj->mt->cpp;
 
    state[I915_TEXREG_MS3] =
       (((firstImage->Height - 1) << MS3_HEIGHT_SHIFT) |
diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
index b1ab79b783..ce0bf0b97d 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
@@ -207,33 +207,14 @@ brw_create_texture_surface( struct brw_context *brw,
 
    surf.ss0.mipmap_layout_mode = BRW_SURFACE_MIPMAPLAYOUT_BELOW;
    surf.ss0.surface_type = translate_tex_target(key->target);
-   if (key->bo) {
-      surf.ss0.surface_format = translate_tex_format(key->format,
-						     key->internal_format,
-						     key->depthmode);
-   }
-   else {
-      switch (key->depth) {
-      case 32:
-         surf.ss0.surface_format = BRW_SURFACEFORMAT_B8G8R8A8_UNORM;
-         break;
-      default:
-      case 24:
-         surf.ss0.surface_format = BRW_SURFACEFORMAT_B8G8R8X8_UNORM;
-         break;
-      case 16:
-         surf.ss0.surface_format = BRW_SURFACEFORMAT_B5G6R5_UNORM;
-         break;
-      }
-   }
+   surf.ss0.surface_format = translate_tex_format(key->format,
+						  key->internal_format,
+						  key->depthmode);
 
    /* This is ok for all textures with channel width 8bit or less:
     */
 /*    surf.ss0.data_return_format = BRW_SURFACERETURNFORMAT_S1; */
-   if (key->bo)
-      surf.ss1.base_addr = key->bo->offset; /* reloc */
-   else
-      surf.ss1.base_addr = key->offset;
+   surf.ss1.base_addr = key->bo->offset; /* reloc */
 
    surf.ss2.mip_count = key->last_level - key->first_level;
    surf.ss2.width = key->width - 1;
@@ -255,17 +236,14 @@ brw_create_texture_surface( struct brw_context *brw,
 
    bo = brw_upload_cache(&brw->surface_cache, BRW_SS_SURFACE,
 			 key, sizeof(*key),
-			 &key->bo, key->bo ? 1 : 0,
+			 &key->bo, 1,
 			 &surf, sizeof(surf));
 
-   if (key->bo) {
-      /* Emit relocation to surface contents */
-      dri_bo_emit_reloc(bo,
-			I915_GEM_DOMAIN_SAMPLER, 0,
-			0,
-			offsetof(struct brw_surface_state, ss1),
-			key->bo);
-   }
+   /* Emit relocation to surface contents */
+   drm_intel_bo_emit_reloc(bo, offsetof(struct brw_surface_state, ss1),
+			   key->bo, 0,
+			   I915_GEM_DOMAIN_SAMPLER, 0);
+
    return bo;
 }
 
@@ -281,19 +259,12 @@ brw_update_texture_surface( GLcontext *ctx, GLuint unit )
 
    memset(&key, 0, sizeof(key));
 
-   if (intelObj->imageOverride) {
-      key.pitch = intelObj->pitchOverride / intelObj->mt->cpp;
-      key.depth = intelObj->depthOverride;
-      key.bo = NULL;
-      key.offset = intelObj->textureOffset;
-   } else {
-      key.format = firstImage->TexFormat;
-      key.internal_format = firstImage->InternalFormat;
-      key.pitch = intelObj->mt->pitch;
-      key.depth = firstImage->Depth;
-      key.bo = intelObj->mt->region->buffer;
-      key.offset = 0;
-   }
+   key.format = firstImage->TexFormat;
+   key.internal_format = firstImage->InternalFormat;
+   key.pitch = intelObj->mt->pitch;
+   key.depth = firstImage->Depth;
+   key.bo = intelObj->mt->region->buffer;
+   key.offset = 0;
 
    key.target = tObj->Target;
    key.depthmode = tObj->DepthMode;
@@ -308,7 +279,7 @@ brw_update_texture_surface( GLcontext *ctx, GLuint unit )
    brw->wm.surf_bo[surf] = brw_search_cache(&brw->surface_cache,
                                             BRW_SS_SURFACE,
                                             &key, sizeof(key),
-                                            &key.bo, key.bo ? 1 : 0,
+                                            &key.bo, 1,
                                             NULL);
    if (brw->wm.surf_bo[surf] == NULL) {
       brw->wm.surf_bo[surf] = brw_create_texture_surface(brw, &key);
diff --git a/src/mesa/drivers/dri/intel/intel_screen.c b/src/mesa/drivers/dri/intel/intel_screen.c
index 9ff76c4803..6e4bb64365 100644
--- a/src/mesa/drivers/dri/intel/intel_screen.c
+++ b/src/mesa/drivers/dri/intel/intel_screen.c
@@ -96,11 +96,6 @@ const GLuint __driNConfigOptions = 11;
 static PFNGLXCREATECONTEXTMODES create_context_modes = NULL;
 #endif /*USE_NEW_INTERFACE */
 
-static const __DRItexOffsetExtension intelTexOffsetExtension = {
-   { __DRI_TEX_OFFSET },
-   intelSetTexOffset,
-};
-
 static const __DRItexBufferExtension intelTexBufferExtension = {
     { __DRI_TEX_BUFFER, __DRI_TEX_BUFFER_VERSION },
    intelSetTexBuffer,
@@ -227,7 +222,6 @@ static struct __DRIimageExtensionRec intelImageExtension = {
 
 static const __DRIextension *intelScreenExtensions[] = {
     &driReadDrawableExtension,
-    &intelTexOffsetExtension.base,
     &intelTexBufferExtension.base,
     &intelFlushExtension.base,
     &intelImageExtension.base,
diff --git a/src/mesa/drivers/dri/intel/intel_tex.h b/src/mesa/drivers/dri/intel/intel_tex.h
index f3cc0fff5c..4bb012dc65 100644
--- a/src/mesa/drivers/dri/intel/intel_tex.h
+++ b/src/mesa/drivers/dri/intel/intel_tex.h
@@ -45,8 +45,6 @@ void intelInitTextureCopyImageFuncs(struct dd_function_table *functions);
 gl_format intelChooseTextureFormat(GLcontext *ctx, GLint internalFormat,
                                    GLenum format, GLenum type);
 
-void intelSetTexOffset(__DRIcontext *pDRICtx, GLint texname,
-		       unsigned long long offset, GLint depth, GLuint pitch);
 void intelSetTexBuffer(__DRIcontext *pDRICtx,
 		       GLint target, __DRIdrawable *pDraw);
 void intelSetTexBuffer2(__DRIcontext *pDRICtx,
diff --git a/src/mesa/drivers/dri/intel/intel_tex_image.c b/src/mesa/drivers/dri/intel/intel_tex_image.c
index f586aee992..bac36eeb56 100644
--- a/src/mesa/drivers/dri/intel/intel_tex_image.c
+++ b/src/mesa/drivers/dri/intel/intel_tex_image.c
@@ -706,29 +706,6 @@ intelGetCompressedTexImage(GLcontext *ctx, GLenum target, GLint level,
 		       texObj, texImage, GL_TRUE);
 }
 
-
-void
-intelSetTexOffset(__DRIcontext *pDRICtx, GLint texname,
-		  unsigned long long offset, GLint depth, GLuint pitch)
-{
-   struct intel_context *intel = pDRICtx->driverPrivate;
-   struct gl_texture_object *tObj = _mesa_lookup_texture(&intel->ctx, texname);
-   struct intel_texture_object *intelObj = intel_texture_object(tObj);
-
-   if (!intelObj)
-      return;
-
-   if (intelObj->mt)
-      intel_miptree_release(intel, &intelObj->mt);
-
-   intelObj->imageOverride = GL_TRUE;
-   intelObj->depthOverride = depth;
-   intelObj->pitchOverride = pitch;
-
-   if (offset)
-      intelObj->textureOffset = offset;
-}
-
 void
 intelSetTexBuffer2(__DRIcontext *pDRICtx, GLint target,
 		   GLint texture_format,
diff --git a/src/mesa/drivers/dri/intel/intel_tex_obj.h b/src/mesa/drivers/dri/intel/intel_tex_obj.h
index 3ad10d3d23..5f60e0ea4f 100644
--- a/src/mesa/drivers/dri/intel/intel_tex_obj.h
+++ b/src/mesa/drivers/dri/intel/intel_tex_obj.h
@@ -46,10 +46,6 @@ struct intel_texture_object
     * regions will be copied to this region and the old storage freed.
     */
    struct intel_mipmap_tree *mt;
-
-   GLboolean imageOverride;
-   GLint depthOverride;
-   GLuint pitchOverride;
 };
 
 struct intel_texture_image
-- 
cgit v1.2.3


From 8c8e664f1086e702e1102ee7f5043c8c12c037bd Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Fri, 5 Mar 2010 14:13:24 -0800
Subject: i965: Only use the effective subset of the WM sampler key.

The whole structure is 836 bytes, but if only the first one or two
samplers are used (as is common), the part that matters is only 56 or
108 bytes.  By using just that subset as the key (since the key size
is also part of the key), we improve firefox-talos-gfx performance by
1%.
---
 src/mesa/drivers/dri/i965/brw_wm_sampler_state.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_wm_sampler_state.c b/src/mesa/drivers/dri/i965/brw_wm_sampler_state.c
index 3a33996452..d7650af3d9 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_sampler_state.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_sampler_state.c
@@ -229,7 +229,7 @@ brw_wm_sampler_populate_key(struct brw_context *brw,
    GLcontext *ctx = &brw->intel.ctx;
    int unit;
 
-   memset(key, 0, sizeof(*key));
+   key->sampler_count = 0;
 
    for (unit = 0; unit < BRW_MAX_TEX_UNIT; unit++) {
       if (ctx->Texture.Unit[unit]._ReallyEnabled) {
@@ -240,6 +240,8 @@ brw_wm_sampler_populate_key(struct brw_context *brw,
 	 struct gl_texture_image *firstImage =
 	    texObj->Image[0][intelObj->firstLevel];
 
+	 memset(entry, 0, sizeof(*entry));
+
          entry->tex_target = texObj->Target;
 
 	 entry->seamless_cube_map = (texObj->Target == GL_TEXTURE_CUBE_MAP)
@@ -288,7 +290,7 @@ static void upload_wm_samplers( struct brw_context *brw )
 {
    GLcontext *ctx = &brw->intel.ctx;
    struct wm_sampler_key key;
-   int i;
+   int i, sampler_key_size;
 
    brw_wm_sampler_populate_key(brw, &key);
 
@@ -302,8 +304,11 @@ static void upload_wm_samplers( struct brw_context *brw )
    if (brw->wm.sampler_count == 0)
       return;
 
+   /* Only include the populated portion of the key in the search. */
+   sampler_key_size = offsetof(struct wm_sampler_key,
+			       sampler[key.sampler_count]);
    brw->wm.sampler_bo = brw_search_cache(&brw->cache, BRW_SAMPLER,
-					 &key, sizeof(key),
+					 &key, sampler_key_size,
 					 brw->wm.sdc_bo, key.sampler_count,
 					 NULL);
 
@@ -323,7 +328,7 @@ static void upload_wm_samplers( struct brw_context *brw )
       }
 
       brw->wm.sampler_bo = brw_upload_cache(&brw->cache, BRW_SAMPLER,
-					    &key, sizeof(key),
+					    &key, sampler_key_size,
 					    brw->wm.sdc_bo, key.sampler_count,
 					    &sampler, sizeof(sampler));
 
-- 
cgit v1.2.3


From c67af0628b1b020b36df7dc81e9ab125da06b3a9 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 3 Mar 2010 17:14:55 -0800
Subject: swrast: Remove stray comment that mentions ctx->Visual

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/swrast/s_linetemp.h | 1 -
 1 file changed, 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/swrast/s_linetemp.h b/src/mesa/swrast/s_linetemp.h
index 182f962e1e..033431df23 100644
--- a/src/mesa/swrast/s_linetemp.h
+++ b/src/mesa/swrast/s_linetemp.h
@@ -84,7 +84,6 @@ NAME( GLcontext *ctx, const SWvertex *vert0, const SWvertex *vert1 )
    DEPTH_TYPE *zPtr;
 #elif defined(INTERP_Z)
    const GLint depthBits = ctx->DrawBuffer->Visual.depthBits;
-/*ctx->Visual.depthBits;*/
 #endif
 #ifdef PIXEL_ADDRESS
    PIXEL_TYPE *pixelPtr;
-- 
cgit v1.2.3


From ebbec7e4e44fccf496a9a663bdcc643efead6e95 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 3 Mar 2010 17:16:11 -0800
Subject: swrast: Adjust colors based on ReadBuffer visual, not context visual

In the presence of FBOs, the visual of the context may not match the,
possibly fake, visual of the current ReadBuffer.  Note that the caller
of adjust_colors correctly uses the visual of the ReadBuffer.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/swrast/s_readpix.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/swrast/s_readpix.c b/src/mesa/swrast/s_readpix.c
index ecabac6921..368311e14d 100644
--- a/src/mesa/swrast/s_readpix.c
+++ b/src/mesa/swrast/s_readpix.c
@@ -253,21 +253,21 @@ fast_read_rgba_pixels( GLcontext *ctx,
 /**
  * When we're using a low-precision color buffer (like 16-bit 5/6/5)
  * we have to adjust our color values a bit to pass conformance.
- * The problem is when a 5 or 6-bit color value is convert to an 8-bit
+ * The problem is when a 5 or 6-bit color value is converted to an 8-bit
  * value and then a floating point value, the floating point values don't
  * increment uniformly as the 5 or 6-bit value is incremented.
  *
  * This function adjusts floating point values to compensate.
  */
 static void
-adjust_colors(GLcontext *ctx, GLuint n, GLfloat rgba[][4])
+adjust_colors(const struct gl_framebuffer *fb, GLuint n, GLfloat rgba[][4])
 {
-   const GLuint rShift = 8 - ctx->Visual.redBits;
-   const GLuint gShift = 8 - ctx->Visual.greenBits;
-   const GLuint bShift = 8 - ctx->Visual.blueBits;
-   const GLfloat rScale = 1.0F / (GLfloat) ((1 << ctx->Visual.redBits  ) - 1);
-   const GLfloat gScale = 1.0F / (GLfloat) ((1 << ctx->Visual.greenBits) - 1);
-   const GLfloat bScale = 1.0F / (GLfloat) ((1 << ctx->Visual.blueBits ) - 1);
+   const GLuint rShift = 8 - fb->Visual.redBits;
+   const GLuint gShift = 8 - fb->Visual.greenBits;
+   const GLuint bShift = 8 - fb->Visual.blueBits;
+   const GLfloat rScale = 1.0F / (GLfloat) ((1 << fb->Visual.redBits  ) - 1);
+   const GLfloat gScale = 1.0F / (GLfloat) ((1 << fb->Visual.greenBits) - 1);
+   const GLfloat bScale = 1.0F / (GLfloat) ((1 << fb->Visual.blueBits ) - 1);
    GLuint i;
    for (i = 0; i < n; i++) {
       GLint r, g, b;
@@ -390,7 +390,7 @@ read_rgba_pixels( GLcontext *ctx,
          if (fb->Visual.redBits < 8 ||
              fb->Visual.greenBits < 8 ||
              fb->Visual.blueBits < 8) {
-            adjust_colors(ctx, width, rgba);
+            adjust_colors(fb, width, rgba);
          }
 
          /* pack the row of RGBA pixels into user's buffer */
-- 
cgit v1.2.3


From 66c0abba6ba89d326555389d9539894402303286 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 3 Mar 2010 17:17:56 -0800
Subject: swrast: Remove redundant test of the visual's accumulation buffer
 size

If the visual doesn't have an accumulation buffer, the renderbuffer
passed into _swrast_clear_accum_buffer will be NULL anyway.  There is
no reason the check the visual.  Moreover, the test erroneously checks
the context's visual instead of the visual of the current DrawBuffer.
With FBOs these may be different.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/swrast/s_accum.c | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/swrast/s_accum.c b/src/mesa/swrast/s_accum.c
index 2dd9ca6348..854e106b7f 100644
--- a/src/mesa/swrast/s_accum.c
+++ b/src/mesa/swrast/s_accum.c
@@ -130,11 +130,7 @@ _swrast_clear_accum_buffer( GLcontext *ctx, struct gl_renderbuffer *rb )
    SWcontext *swrast = SWRAST_CONTEXT(ctx);
    GLuint x, y, width, height;
 
-   if (ctx->Visual.accumRedBits == 0) {
-      /* No accumulation buffer! Not an error. */
-      return;
-   }
-
+   /* No accumulation buffer! Not an error. */
    if (!rb || !rb->Data)
       return;
 
-- 
cgit v1.2.3


From 77fc3ef9116fae6b8b53cda78d97c4ff1ec5c171 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Wed, 3 Mar 2010 17:20:27 -0800
Subject: meta: Use the DrawBuffer's stencil size

Previously the code was erroneously using the stencil size of the
context instead of the stencil size of the DrawBuffer.  With FBOs
these may be different.  As a result, clearing the stencil buffer of
an FBO bound to a context that doesn't have stencil would fail.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
---
 src/mesa/drivers/common/meta.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c
index 8e229bbe38..b97b760f18 100644
--- a/src/mesa/drivers/common/meta.c
+++ b/src/mesa/drivers/common/meta.c
@@ -1895,7 +1895,7 @@ _mesa_meta_DrawPixels(GLcontext *ctx,
       _mesa_BindProgram(GL_FRAGMENT_PROGRAM_ARB, drawpix->StencilFP);
       _mesa_set_enable(ctx, GL_FRAGMENT_PROGRAM_ARB, GL_TRUE);
 
-      for (bit = 0; bit < ctx->Visual.stencilBits; bit++) {
+      for (bit = 0; bit < ctx->DrawBuffer->Visual.stencilBits; bit++) {
          const GLuint mask = 1 << bit;
          if (mask & origStencilMask) {
             _mesa_StencilFunc(GL_ALWAYS, mask, mask);
-- 
cgit v1.2.3


From 6ce4a85e0b1d6581d73c1b1cbc37525d7a9ed1ba Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Fri, 5 Mar 2010 17:35:01 -0700
Subject: mesa: bump version to 7.9

Now that the 7.8 branch has been created Mesa/master will be version 7.9
---
 Makefile                | 2 +-
 configs/default         | 2 +-
 src/mesa/main/version.h | 6 +++---
 3 files changed, 5 insertions(+), 5 deletions(-)

(limited to 'src/mesa')

diff --git a/Makefile b/Makefile
index c4ee9e583c..92b227ca48 100644
--- a/Makefile
+++ b/Makefile
@@ -180,7 +180,7 @@ ultrix-gcc:
 
 # Rules for making release tarballs
 
-VERSION=7.8-devel
+VERSION=7.9-devel
 DIRECTORY = Mesa-$(VERSION)
 LIB_NAME = MesaLib-$(VERSION)
 DEMO_NAME = MesaDemos-$(VERSION)
diff --git a/configs/default b/configs/default
index ad6d93c92f..4fe64cc6c9 100644
--- a/configs/default
+++ b/configs/default
@@ -9,7 +9,7 @@ CONFIG_NAME = default
 
 # Version info
 MESA_MAJOR=7
-MESA_MINOR=8
+MESA_MINOR=9
 MESA_TINY=0
 MESA_VERSION = $(MESA_MAJOR).$(MESA_MINOR).$(MESA_TINY)
 
diff --git a/src/mesa/main/version.h b/src/mesa/main/version.h
index d521569f8d..59f62ebd6c 100644
--- a/src/mesa/main/version.h
+++ b/src/mesa/main/version.h
@@ -1,6 +1,6 @@
 /*
  * Mesa 3-D graphics library
- * Version:  7.8
+ * Version:  7.9
  *
  * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
  * Copyright (C) 2009  VMware, Inc.  All Rights Reserved.
@@ -33,9 +33,9 @@
 
 /* Mesa version */
 #define MESA_MAJOR 7
-#define MESA_MINOR 8
+#define MESA_MINOR 9
 #define MESA_PATCH 0
-#define MESA_VERSION_STRING "7.8-devel"
+#define MESA_VERSION_STRING "7.9-devel"
 
 /* To make version comparison easy */
 #define MESA_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
-- 
cgit v1.2.3


From 8953bfce0eb7e56f13d4527ef86cdf4cf2db037f Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Sat, 6 Mar 2010 06:33:20 +0200
Subject: dri: drop MINIGLX_SOURCES

---
 src/mesa/drivers/dri/i810/Makefile      | 3 ---
 src/mesa/drivers/dri/i915/Makefile      | 2 --
 src/mesa/drivers/dri/i965/Makefile      | 1 -
 src/mesa/drivers/dri/mach64/Makefile    | 3 ---
 src/mesa/drivers/dri/mga/Makefile       | 2 --
 src/mesa/drivers/dri/nouveau/Makefile   | 2 --
 src/mesa/drivers/dri/r128/Makefile      | 2 --
 src/mesa/drivers/dri/r200/Makefile      | 2 --
 src/mesa/drivers/dri/r300/Makefile      | 2 --
 src/mesa/drivers/dri/r600/Makefile      | 2 --
 src/mesa/drivers/dri/radeon/Makefile    | 2 --
 src/mesa/drivers/dri/savage/Makefile    | 3 ---
 src/mesa/drivers/dri/sis/Makefile       | 4 ----
 src/mesa/drivers/dri/tdfx/Makefile      | 3 ---
 src/mesa/drivers/dri/unichrome/Makefile | 2 --
 15 files changed, 35 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i810/Makefile b/src/mesa/drivers/dri/i810/Makefile
index 3874faee51..54a837d5ea 100644
--- a/src/mesa/drivers/dri/i810/Makefile
+++ b/src/mesa/drivers/dri/i810/Makefile
@@ -5,9 +5,6 @@ include $(TOP)/configs/current
 
 LIBNAME = i810_dri.so
 
-# Not yet
-# MINIGLX_SOURCES = server/i810_dri.c 
-
 DRIVER_SOURCES = \
 	i810context.c \
 	i810ioctl.c \
diff --git a/src/mesa/drivers/dri/i915/Makefile b/src/mesa/drivers/dri/i915/Makefile
index dc15ae425c..5b49d0c77c 100644
--- a/src/mesa/drivers/dri/i915/Makefile
+++ b/src/mesa/drivers/dri/i915/Makefile
@@ -4,8 +4,6 @@ include $(TOP)/configs/current
 
 LIBNAME = i915_dri.so
 
-MINIGLX_SOURCES = server/intel_dri.c
-
 DRIVER_SOURCES = \
 	i830_context.c \
 	i830_state.c \
diff --git a/src/mesa/drivers/dri/i965/Makefile b/src/mesa/drivers/dri/i965/Makefile
index f98a1a27db..a242580273 100644
--- a/src/mesa/drivers/dri/i965/Makefile
+++ b/src/mesa/drivers/dri/i965/Makefile
@@ -99,7 +99,6 @@ DRIVER_SOURCES = \
 
 C_SOURCES = \
 	$(COMMON_SOURCES) \
-	$(MINIGLX_SOURCES) \
 	$(DRIVER_SOURCES)
 
 ASM_SOURCES = 
diff --git a/src/mesa/drivers/dri/mach64/Makefile b/src/mesa/drivers/dri/mach64/Makefile
index a8f463e9fd..c20fdece29 100644
--- a/src/mesa/drivers/dri/mach64/Makefile
+++ b/src/mesa/drivers/dri/mach64/Makefile
@@ -5,9 +5,6 @@ include $(TOP)/configs/current
 
 LIBNAME = mach64_dri.so
 
-# Not yet
-# MINIGLX_SOURCES = server/mach64_dri.c 
-
 DRIVER_SOURCES = \
 	mach64_context.c \
 	mach64_ioctl.c \
diff --git a/src/mesa/drivers/dri/mga/Makefile b/src/mesa/drivers/dri/mga/Makefile
index 0cc329fb22..92533bccc2 100644
--- a/src/mesa/drivers/dri/mga/Makefile
+++ b/src/mesa/drivers/dri/mga/Makefile
@@ -5,8 +5,6 @@ include $(TOP)/configs/current
 
 LIBNAME = mga_dri.so
 
-MINIGLX_SOURCES = server/mga_dri.c 
-
 DRIVER_SOURCES = \
 	mgadd.c \
 	mgaioctl.c \
diff --git a/src/mesa/drivers/dri/nouveau/Makefile b/src/mesa/drivers/dri/nouveau/Makefile
index 49e8933561..7be19b26fd 100644
--- a/src/mesa/drivers/dri/nouveau/Makefile
+++ b/src/mesa/drivers/dri/nouveau/Makefile
@@ -8,8 +8,6 @@ DRI_LIB_DEPS += $(shell pkg-config libdrm_nouveau --libs)
 
 LIBNAME = nouveau_vieux_dri.so
 
-MINIGLX_SOURCES =
-
 DRIVER_SOURCES = \
 	nouveau_screen.c \
 	nouveau_context.c \
diff --git a/src/mesa/drivers/dri/r128/Makefile b/src/mesa/drivers/dri/r128/Makefile
index 52c5a38a70..8144c9b43f 100644
--- a/src/mesa/drivers/dri/r128/Makefile
+++ b/src/mesa/drivers/dri/r128/Makefile
@@ -5,8 +5,6 @@ include $(TOP)/configs/current
 
 LIBNAME = r128_dri.so
 
-MINIGLX_SOURCES = server/r128_dri.c 
-
 DRIVER_SOURCES = \
 	r128_context.c \
 	r128_lock.c \
diff --git a/src/mesa/drivers/dri/r200/Makefile b/src/mesa/drivers/dri/r200/Makefile
index 14eb96c1ba..2e86e8b941 100644
--- a/src/mesa/drivers/dri/r200/Makefile
+++ b/src/mesa/drivers/dri/r200/Makefile
@@ -7,8 +7,6 @@ CFLAGS += $(RADEON_CFLAGS)
 
 LIBNAME = r200_dri.so
 
-MINIGLX_SOURCES = server/radeon_dri.c 
-
 ifeq ($(RADEON_LDFLAGS),)
 CS_SOURCES = radeon_cs_space_drm.c radeon_bo.c radeon_cs.c
 endif
diff --git a/src/mesa/drivers/dri/r300/Makefile b/src/mesa/drivers/dri/r300/Makefile
index 04459c2ddf..08934fc996 100644
--- a/src/mesa/drivers/dri/r300/Makefile
+++ b/src/mesa/drivers/dri/r300/Makefile
@@ -7,8 +7,6 @@ CFLAGS += $(RADEON_CFLAGS)
 
 LIBNAME = r300_dri.so
 
-MINIGLX_SOURCES = server/radeon_dri.c
-
 ifeq ($(RADEON_LDFLAGS),)
 CS_SOURCES = radeon_cs_space_drm.c radeon_bo.c radeon_cs.c
 endif
diff --git a/src/mesa/drivers/dri/r600/Makefile b/src/mesa/drivers/dri/r600/Makefile
index 5d50941539..2478b12658 100644
--- a/src/mesa/drivers/dri/r600/Makefile
+++ b/src/mesa/drivers/dri/r600/Makefile
@@ -7,8 +7,6 @@ CFLAGS += $(RADEON_CFLAGS)
 
 LIBNAME = r600_dri.so
 
-MINIGLX_SOURCES = server/radeon_dri.c
-
 ifeq ($(RADEON_LDFLAGS),)
 CS_SOURCES = radeon_cs_space_drm.c radeon_bo.c radeon_cs.c
 endif
diff --git a/src/mesa/drivers/dri/radeon/Makefile b/src/mesa/drivers/dri/radeon/Makefile
index a54ea16ec6..fc6d1c8e89 100644
--- a/src/mesa/drivers/dri/radeon/Makefile
+++ b/src/mesa/drivers/dri/radeon/Makefile
@@ -8,8 +8,6 @@ CFLAGS += $(RADEON_CFLAGS)
 
 LIBNAME = radeon_dri.so
 
-MINIGLX_SOURCES = server/radeon_dri.c 
-
 ifeq ($(RADEON_LDFLAGS),)
 CS_SOURCES = radeon_cs_space_drm.c radeon_bo.c radeon_cs.c
 endif
diff --git a/src/mesa/drivers/dri/savage/Makefile b/src/mesa/drivers/dri/savage/Makefile
index 2e5c40802c..53511552c6 100644
--- a/src/mesa/drivers/dri/savage/Makefile
+++ b/src/mesa/drivers/dri/savage/Makefile
@@ -5,9 +5,6 @@ include $(TOP)/configs/current
 
 LIBNAME = savage_dri.so
 
-# Doesn't exist yet.
-#MINIGLX_SOURCES = server/savage_dri.c 
-
 DRIVER_SOURCES = \
 	savage_xmesa.c \
 	savagedd.c \
diff --git a/src/mesa/drivers/dri/sis/Makefile b/src/mesa/drivers/dri/sis/Makefile
index ad009fc239..6b4f938bab 100644
--- a/src/mesa/drivers/dri/sis/Makefile
+++ b/src/mesa/drivers/dri/sis/Makefile
@@ -5,10 +5,6 @@ include $(TOP)/configs/current
 
 LIBNAME = sis_dri.so
 
-
-# Not yet
-# MINIGLX_SOURCES = server/sis_dri.c 
-
 DRIVER_SOURCES = \
 	sis6326_state.c \
 	sis6326_clear.c \
diff --git a/src/mesa/drivers/dri/tdfx/Makefile b/src/mesa/drivers/dri/tdfx/Makefile
index b9f25db4fe..96bd8f8202 100644
--- a/src/mesa/drivers/dri/tdfx/Makefile
+++ b/src/mesa/drivers/dri/tdfx/Makefile
@@ -5,9 +5,6 @@ include $(TOP)/configs/current
 
 LIBNAME = tdfx_dri.so
 
-# not yet
-# MINIGLX_SOURCES = server/tdfx_dri.c 
-
 DRIVER_SOURCES = \
 	tdfx_context.c \
 	tdfx_dd.c \
diff --git a/src/mesa/drivers/dri/unichrome/Makefile b/src/mesa/drivers/dri/unichrome/Makefile
index 344d34fce3..14cf9f3038 100644
--- a/src/mesa/drivers/dri/unichrome/Makefile
+++ b/src/mesa/drivers/dri/unichrome/Makefile
@@ -5,8 +5,6 @@ include $(TOP)/configs/current
 
 LIBNAME = unichrome_dri.so
 
-MINIGLX_SOURCES = server/via_dri.c 
-
 DRIVER_SOURCES = \
 	via_context.c \
 	via_fb.c \
-- 
cgit v1.2.3


From 419f0f9d0426bc1eb40ceb60e7764af4013947a0 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Sat, 6 Mar 2010 06:33:21 +0200
Subject: dri: drop MINIGLX_SOURCES (2)

---
 src/mesa/drivers/dri/i810/server/i810_dri.c     |  975 -----------------
 src/mesa/drivers/dri/i915/server/intel_dri.c    |    1 -
 src/mesa/drivers/dri/i965/server/intel_dri.c    |    1 -
 src/mesa/drivers/dri/intel/server/intel_dri.c   | 1306 ----------------------
 src/mesa/drivers/dri/mga/server/mga_dri.c       | 1088 ------------------
 src/mesa/drivers/dri/r128/server/r128_dri.c     | 1112 -------------------
 src/mesa/drivers/dri/r200/server/radeon_dri.c   |    1 -
 src/mesa/drivers/dri/r300/server/radeon_dri.c   |    1 -
 src/mesa/drivers/dri/r600/server/radeon_dri.c   |    1 -
 src/mesa/drivers/dri/radeon/server/radeon_dri.c | 1337 -----------------------
 src/mesa/drivers/dri/tdfx/server/tdfx_dri.c     |  471 --------
 src/mesa/drivers/dri/unichrome/server/via_dri.c | 1251 ---------------------
 12 files changed, 7545 deletions(-)
 delete mode 100644 src/mesa/drivers/dri/i810/server/i810_dri.c
 delete mode 120000 src/mesa/drivers/dri/i915/server/intel_dri.c
 delete mode 120000 src/mesa/drivers/dri/i965/server/intel_dri.c
 delete mode 100644 src/mesa/drivers/dri/intel/server/intel_dri.c
 delete mode 100644 src/mesa/drivers/dri/mga/server/mga_dri.c
 delete mode 100644 src/mesa/drivers/dri/r128/server/r128_dri.c
 delete mode 120000 src/mesa/drivers/dri/r200/server/radeon_dri.c
 delete mode 120000 src/mesa/drivers/dri/r300/server/radeon_dri.c
 delete mode 120000 src/mesa/drivers/dri/r600/server/radeon_dri.c
 delete mode 100644 src/mesa/drivers/dri/radeon/server/radeon_dri.c
 delete mode 100644 src/mesa/drivers/dri/tdfx/server/tdfx_dri.c
 delete mode 100644 src/mesa/drivers/dri/unichrome/server/via_dri.c

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i810/server/i810_dri.c b/src/mesa/drivers/dri/i810/server/i810_dri.c
deleted file mode 100644
index f52797c5ed..0000000000
--- a/src/mesa/drivers/dri/i810/server/i810_dri.c
+++ /dev/null
@@ -1,975 +0,0 @@
-/**
- * \file server/i810_dri.c
- * \brief File to perform the device-specific initialization tasks typically
- * done in the X server.
- *
- * Here they are converted to run in the client (or perhaps a standalone
- * process), and to work with the frame buffer device rather than the X
- * server infrastructure.
- * 
- * Copyright (C) 2004 Dave Airlie (airlied@linux.ie)
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-
-#include "driver.h"
-#include "drm.h"
-
-#include "i810.h"
-#include "i810_dri.h"
-#include "i810_reg.h"
-
-
-static int i810_pitches[] = {
-   512,
-   1024,
-   2048,
-   4096,
-   0
-};
-
-static int i810_pitch_flags[] = {
-   0x0,
-   0x1,
-   0x2,
-   0x3,
-   0
-};
-
-static unsigned int i810_drm_version = 0;
-
-static int
-I810AllocLow(I810MemRange * result, I810MemRange * pool, int size)
-{
-   if (size > pool->Size)
-      return 0;
-
-   pool->Size -= size;
-   result->Size = size;
-   result->Start = pool->Start;
-   result->End = pool->Start += size;
-
-   return 1;
-}
-
-static int
-I810AllocHigh(I810MemRange * result, I810MemRange * pool, int size)
-{
-   if (size > pool->Size)
-      return 0;
-
-   pool->Size -= size;
-   result->Size = size;
-   result->End = pool->End;
-   result->Start = pool->End -= size;
-
-   return 1;
-}
-
-
-/**
- * \brief Wait for free FIFO entries.
- *
- * \param ctx display handle.
- * \param entries number of free entries to wait.
- *
- * It polls the free entries from the chip until it reaches the requested value
- * or a timeout (3000 tries) occurs. Aborts the program if the FIFO times out.
- */
-static void I810WaitForFifo( const DRIDriverContext *ctx,
-			       int entries )
-{
-}
-
-/**
- * \brief Reset graphics card to known state.
- *
- * \param ctx display handle.
- *
- * Resets the values of several I810 registers.
- */
-static void I810EngineReset( const DRIDriverContext *ctx )
-{
-   unsigned char *I810MMIO = ctx->MMIOAddress;
-}
-
-/**
- * \brief Restore the drawing engine.
- *
- * \param ctx display handle
- *
- * Resets the graphics card and sets initial values for several registers of
- * the card's drawing engine.
- *
- * Turns on the i810 command processor engine (i.e., the ringbuffer).
- */
-static int I810EngineRestore( const DRIDriverContext *ctx )
-{
-   I810Ptr info = ctx->driverPrivate;
-   unsigned char *I810MMIO = ctx->MMIOAddress;
-
-   fprintf(stderr, "%s\n", __FUNCTION__);
-
-   return 1;
-}
-
-
-/**
- * \brief Shutdown the drawing engine.
- *
- * \param ctx display handle
- *
- * Turns off the command processor engine & restores the graphics card
- * to a state that fbdev understands.
- */
-static int I810EngineShutdown( const DRIDriverContext *ctx )
-{
-  drmI810Init info;
-  int ret;
-
-  memset(&info, 0, sizeof(drmI810Init));
-  info.func = I810_CLEANUP_DMA;
-  
-  ret = drmCommandWrite(ctx->drmFD, DRM_I810_INIT, &info, sizeof(drmI810Init));
-  if (ret>0)
-  {
-    fprintf(stderr,"[dri] I810 DMA Cleanup failed\n");
-    return -errno;
-  }
-  return 0;
-}
-
-/**
- * \brief Compute base 2 logarithm.
- *
- * \param val value.
- * 
- * \return base 2 logarithm of \p val.
- */
-static int I810MinBits(int val)
-{
-   int  bits;
-
-   if (!val) return 1;
-   for (bits = 0; val; val >>= 1, ++bits);
-   return bits;
-}
-
-static int I810DRIAgpPreInit( const DRIDriverContext *ctx, I810Ptr info)
-{
-
-  if (drmAgpAcquire(ctx->drmFD) < 0) {
-    fprintf(stderr, "[gart] AGP not available\n");
-    return 0;
-  }
-  
-  
-  if (drmAgpEnable(ctx->drmFD, 0) < 0) {
-    fprintf(stderr, "[gart] AGP not enabled\n");
-    drmAgpRelease(ctx->drmFD);
-    return 0;
-  }
-}
-
-/**
- * \brief Initialize the AGP state
- *
- * \param ctx display handle.
- * \param info driver private data.
- *
- * \return one on success, or zero on failure.
- * 
- * Acquires and enables the AGP device. Reserves memory in the AGP space for
- * the ring buffer, vertex buffers and textures. Initialize the I810
- * registers to point to that memory and add client mappings.
- */
-static int I810DRIAgpInit( const DRIDriverContext *ctx, I810Ptr info)
-{
-   unsigned char *I810MMIO = ctx->MMIOAddress;
-   int            ret;
-   int            s, l;
-   unsigned long dcacheHandle;
-   unsigned long agpHandle;
-   int pitch_idx = 0;
-   int back_size = 0;
-   int sysmem_size = 0;
-   int width = ctx->shared.virtualWidth * ctx->cpp;
-
-
-   info->backHandle = DRM_AGP_NO_HANDLE;
-   info->zHandle = DRM_AGP_NO_HANDLE;
-   info->sysmemHandle = DRM_AGP_NO_HANDLE;
-   info->dcacheHandle = DRM_AGP_NO_HANDLE;
-
-   memset(&info->DcacheMem, 0, sizeof(I810MemRange));
-   memset(&info->BackBuffer, 0, sizeof(I810MemRange));
-   memset(&info->DepthBuffer, 0, sizeof(I810MemRange));
-   
-   drmAgpAlloc(ctx->drmFD, 4096 * 1024, 1, NULL, &dcacheHandle);
-   info->dcacheHandle = dcacheHandle;
-   
-   fprintf(stderr, "[agp] dcacheHandle : 0x%x\n", dcacheHandle);
-
-#define Elements(x) sizeof(x)/sizeof(*x)
-   for (pitch_idx = 0; pitch_idx < Elements(i810_pitches); pitch_idx++)
-     if (width <= i810_pitches[pitch_idx])
-       break;
-   
-   if (pitch_idx == Elements(i810_pitches)) {
-     fprintf(stderr,"[dri] Couldn't find depth/back buffer pitch\n");
-     exit(-1);
-   }
-   else
-   {
-     int lines = (ctx->shared.virtualWidth + 15) / 16 * 16;
-     back_size = i810_pitches[pitch_idx] * lines;
-     back_size = ((back_size + 4096 - 1) / 4096) * 4096;
-   }
-
-   sysmem_size = ctx->shared.fbSize;
-   fprintf(stderr,"sysmem_size is %lu back_size is %lu\n", sysmem_size, back_size);
-   if (dcacheHandle != DRM_AGP_NO_HANDLE) {
-     if (back_size > 4 * 1024 * 1024) {
-       fprintf(stderr,"[dri] Backsize is larger then 4 meg\n");
-       sysmem_size = sysmem_size - 2 * back_size;
-       drmAgpFree(ctx->drmFD, dcacheHandle);
-       info->dcacheHandle = dcacheHandle = DRM_AGP_NO_HANDLE;
-     } else {
-       sysmem_size = sysmem_size - back_size;
-     }
-   } else {
-     sysmem_size = sysmem_size - 2 * back_size;
-   }
-   
-   info->SysMem.Start=0;
-   info->SysMem.Size = sysmem_size;
-   info->SysMem.End = sysmem_size;
-   
-   if (dcacheHandle != DRM_AGP_NO_HANDLE) {
-      if (drmAgpBind(ctx->drmFD, dcacheHandle, info->DepthOffset) == 0) {
-	memset(&info->DcacheMem, 0, sizeof(I810MemRange));
-	fprintf(stderr,"[agp] GART: Found 4096K Z buffer memory\n");
-	info->DcacheMem.Start = info->DepthOffset;
-	 info->DcacheMem.Size = 1024 * 4096;
-	 info->DcacheMem.End =  info->DcacheMem.Start + info->DcacheMem.Size;
-      } else {
-	fprintf(stderr, "[agp] GART: dcache bind failed\n");
-	drmAgpFree(ctx->drmFD, dcacheHandle);
-	info->dcacheHandle = dcacheHandle = DRM_AGP_NO_HANDLE;
-      }
-   } else {
-     fprintf(stderr, "[agp] GART: no dcache memory found\n");
-   }
-   
-   drmAgpAlloc(ctx->drmFD, back_size, 0, NULL, &agpHandle);
-   info->backHandle = agpHandle;
-
-   if (agpHandle != DRM_AGP_NO_HANDLE) {
-      if (drmAgpBind(ctx->drmFD, agpHandle, info->BackOffset) == 0) {
-	fprintf(stderr, "[agp] Bound backbuffer memory\n");
-
-	info->BackBuffer.Start = info->BackOffset;
-	info->BackBuffer.Size = back_size;
-	info->BackBuffer.End = (info->BackBuffer.Start +
-				 info->BackBuffer.Size);
-      } else {
-	fprintf(stderr,"[agp] Unable to bind backbuffer.  Disabling DRI.\n");
-	return 0;
-      }
-   } else {
-     fprintf(stderr, "[dri] Unable to allocate backbuffer memory.  Disabling DRI.\n");
-     return 0;
-   }
-
-   if (dcacheHandle == DRM_AGP_NO_HANDLE) {
-     drmAgpAlloc(ctx->drmFD, back_size, 0, NULL, &agpHandle);
-
-     info->zHandle = agpHandle;
-
-     if (agpHandle != DRM_AGP_NO_HANDLE) {
-       if (drmAgpBind(ctx->drmFD, agpHandle, info->DepthOffset) == 0) {
-	 fprintf(stderr,"[agp] Bound depthbuffer memory\n");
-	 info->DepthBuffer.Start = info->DepthOffset;
-	 info->DepthBuffer.Size = back_size;
-	 info->DepthBuffer.End = (info->DepthBuffer.Start +
-				   info->DepthBuffer.Size);
-       } else {
-	 fprintf(stderr,"[agp] Unable to bind depthbuffer.  Disabling DRI.\n");
-	 return 0;
-       }
-     } else {
-       fprintf(stderr,"[agp] Unable to allocate depthbuffer memory.  Disabling DRI.\n");
-       return 0;
-     }
-   }
-
-   /* Now allocate and bind the agp space.  This memory will include the
-    * regular framebuffer as well as texture memory.
-    */
-   drmAgpAlloc(ctx->drmFD, sysmem_size, 0, NULL, &agpHandle);
-   info->sysmemHandle = agpHandle;
-   
-   if (agpHandle != DRM_AGP_NO_HANDLE) {
-     if (drmAgpBind(ctx->drmFD, agpHandle, 0) == 0) {
-       fprintf(stderr, "[agp] Bound System Texture Memory\n");
-     } else {
-       fprintf(stderr, "[agp] Unable to bind system texture memory. Disabling DRI.\n");
-       return 0;
-     }
-   } else {
-     fprintf(stderr, "[agp] Unable to allocate system texture memory. Disabling DRI.\n");
-     return 0;
-   }
-   
-   info->auxPitch = i810_pitches[pitch_idx];
-   info->auxPitchBits = i810_pitch_flags[pitch_idx];
-   
-   return 1;
-}
-
-
-/**
- * \brief Initialize the kernel data structures and enable the CP engine.
- *
- * \param ctx display handle.
- * \param info driver private data.
- *
- * \return non-zero on success, or zero on failure.
- *
- * This function is a wrapper around the DRM_I810_CP_INIT command, passing
- * all the parameters in a drmI810Init structure.
- */
-static int I810DRIKernelInit( const DRIDriverContext *ctx,
-			       I810Ptr info)
-{
-   int cpp = ctx->bpp / 8;
-   drmI810Init  drmInfo;
-   int ret;
-   I810RingBuffer *ring = &(info->LpRing);
-
-   /* This is the struct passed to the kernel module for its initialization */
-   memset(&drmInfo, 0, sizeof(drmI810Init));
-   
-   /* make sure we have at least 1.4 */
-   drmInfo.func             = I810_INIT_DMA_1_4;
-
-   drmInfo.ring_start = ring->mem.Start;
-   drmInfo.ring_end = ring->mem.End;
-   drmInfo.ring_size = ring->mem.Size;
-
-   drmInfo.mmio_offset         = (unsigned int)info->regs;
-   drmInfo.buffers_offset      = (unsigned int)info->buffer_map;
-   drmInfo.sarea_priv_offset   = sizeof(drm_sarea_t);
-
-   drmInfo.front_offset        = 0;
-   drmInfo.back_offset         = info->BackBuffer.Start;
-   drmInfo.depth_offset        = info->DepthBuffer.Start;
-
-   drmInfo.w                   = ctx->shared.virtualWidth;
-   drmInfo.h                   = ctx->shared.virtualHeight;
-   drmInfo.pitch               = info->auxPitch;
-   drmInfo.pitch_bits          = info->auxPitchBits;
-   
-
-   ret = drmCommandWrite(ctx->drmFD, DRM_I810_INIT, &drmInfo, 
-			 sizeof(drmI810Init));
-
-   return ret >= 0;
-}
-
-
-/**
- * \brief Add a map for the vertex buffers that will be accessed by any
- * DRI-based clients.
- * 
- * \param ctx display handle.
- * \param info driver private data.
- *
- * \return one on success, or zero on failure.
- *
- * Calls drmAddBufs() with the previously allocated vertex buffers.
- */
-static int I810DRIBufInit( const DRIDriverContext *ctx, I810Ptr info )
-{
-   /* Initialize vertex buffers */
-   info->bufNumBufs = drmAddBufs(ctx->drmFD,
-				 I810_DMA_BUF_NR,
-				 I810_DMA_BUF_SZ,
-				 DRM_AGP_BUFFER,
-				 info->BufferMem.Start);
-
-   if (info->bufNumBufs <= 0) {
-      fprintf(stderr,
-	      "[drm] Could not create vertex/indirect buffers list\n");
-      return 0;
-   }
-   fprintf(stderr,
-	   "[drm] Added %d %d byte vertex/indirect buffers\n",
-	   info->bufNumBufs, I810_DMA_BUF_SZ);
-   
-   return 1;
-}
-
-/**
- * \brief Install an IRQ handler.
- * 
- * \param ctx display handle.
- * \param info driver private data.
- *
- * Attempts to install an IRQ handler via drmCtlInstHandler(), falling back to
- * IRQ-free operation on failure.
- */
-static void I810DRIIrqInit(const DRIDriverContext *ctx,
-			     I810Ptr info)
-{
-   if (!info->irq) {
-      info->irq = drmGetInterruptFromBusID(ctx->drmFD,
-					   ctx->pciBus,
-					   ctx->pciDevice,
-					   ctx->pciFunc);
-
-      if ((drmCtlInstHandler(ctx->drmFD, info->irq)) != 0) {
-	 fprintf(stderr,
-		 "[drm] failure adding irq handler, "
-		 "there is a device already using that irq\n"
-		 "[drm] falling back to irq-free operation\n");
-	 info->irq = 0;
-      }
-   }
-
-   if (info->irq)
-      fprintf(stderr,
-	      "[drm] dma control initialized, using IRQ %d\n",
-	      info->irq);
-}
-
-static int I810CheckDRMVersion( const DRIDriverContext *ctx,
-				  I810Ptr info )
-{
-   drmVersionPtr  version;
-
-   version = drmGetVersion(ctx->drmFD);
-   if (version) {
-      int req_minor, req_patch;
-
-      req_minor = 4;
-      req_patch = 0;	
-
-      i810_drm_version = (version->version_major<<16) | version->version_minor;
-      if (version->version_major != 1 ||
-	  version->version_minor < req_minor ||
-	  (version->version_minor == req_minor && 
-	   version->version_patchlevel < req_patch)) {
-	 /* Incompatible drm version */
-	 fprintf(stderr,
-		 "[dri] I810DRIScreenInit failed because of a version "
-		 "mismatch.\n"
-		 "[dri] i810.o kernel module version is %d.%d.%d "
-		 "but version 1.%d.%d or newer is needed.\n"
-		 "[dri] Disabling DRI.\n",
-		 version->version_major,
-		 version->version_minor,
-		 version->version_patchlevel,
-		 req_minor,
-		 req_patch);
-	 drmFreeVersion(version);
-	 return 0;
-      }
-
-      info->drmMinor = version->version_minor;
-      drmFreeVersion(version);
-   }
-
-   return 1;
-}
-
-static int I810MemoryInit( const DRIDriverContext *ctx, I810Ptr info )
-{
-   int        width_bytes = ctx->shared.virtualWidth * ctx->cpp;
-   int        cpp         = ctx->cpp;
-   int        bufferSize  = (ctx->shared.virtualHeight * width_bytes);
-   int        depthSize   = (((ctx->shared.virtualHeight+15) & ~15) * width_bytes);
-   int        l;
-
-   if (drmAddMap(ctx->drmFD, (drm_handle_t) info->BackBuffer.Start,
-		 info->BackBuffer.Size, DRM_AGP, 0,
-		 &info->backbuffer) < 0) {
-     fprintf(stderr, "[drm] drmAddMap(backbuffer) failed.  Disabling DRI\n");
-     return 0;
-   }
-   
-   if (drmAddMap(ctx->drmFD, (drm_handle_t) info->DepthBuffer.Start,
-		 info->DepthBuffer.Size, DRM_AGP, 0,
-		 &info->depthbuffer) < 0) {
-     fprintf(stderr, "[drm] drmAddMap(depthbuffer) failed.  Disabling DRI.\n");
-      return 0;
-   }
-
-   if (!I810AllocLow(&(info->FrontBuffer), &(info->SysMem), (((ctx->shared.virtualHeight * width_bytes) + 4095) & ~4095)))
-   {
-     fprintf(stderr,"Framebuffer allocation failed\n");
-     return 0;
-   }
-   else
-     fprintf(stderr,"Frame buffer at 0x%.8x (%luk, %lu bytes)\n",
-	     info->FrontBuffer.Start,
-	     info->FrontBuffer.Size / 1024, info->FrontBuffer.Size);
-   
-   memset(&(info->LpRing), 0, sizeof(I810RingBuffer));
-   if (I810AllocLow(&(info->LpRing.mem), &(info->SysMem), 16 * 4096)) {
-     fprintf(stderr,
-	    "Ring buffer at 0x%.8x (%luk, %lu bytes)\n",
-	     info->LpRing.mem.Start,
-	     info->LpRing.mem.Size / 1024, info->LpRing.mem.Size);
-     
-     info->LpRing.tail_mask = info->LpRing.mem.Size - 1;
-     info->LpRing.virtual_start = info->LpRing.mem.Start;
-     info->LpRing.head = 0;
-     info->LpRing.tail = 0;
-     info->LpRing.space = 0;
-   } else {
-     fprintf(stderr, "Ring buffer allocation failed\n");
-     return (0);
-   }
-
-   /* Allocate buffer memory */
-   I810AllocHigh(&(info->BufferMem), &(info->SysMem),
-		 I810_DMA_BUF_NR * I810_DMA_BUF_SZ);
-   
-
-   fprintf(stderr, "[dri] Buffer map : %lx\n",
-	      info->BufferMem.Start);
-
-   if (info->BufferMem.Start == 0 ||
-       info->BufferMem.End - info->BufferMem.Start >
-       I810_DMA_BUF_NR * I810_DMA_BUF_SZ) {
-     fprintf(stderr,"[dri] Not enough memory for dma buffers.  Disabling DRI.\n");
-     return 0;
-   }
-
-   if (drmAddMap(ctx->drmFD, (drm_handle_t) info->BufferMem.Start,
-		 info->BufferMem.Size, DRM_AGP, 0, &info->buffer_map) < 0) {
-     fprintf(stderr, "[drm] drmAddMap(buffer_map) failed.  Disabling DRI.\n");
-     return 0;
-   }
-
-   if (drmAddMap(ctx->drmFD, (drm_handle_t) info->LpRing.mem.Start,
-		 info->LpRing.mem.Size, DRM_AGP, 0, &info->ring_map) < 0) {
-     fprintf(stderr, "[drm] drmAddMap(ring_map) failed.  Disabling DRI. \n");
-     return 0;
-   }
-
-   /* Front, back and depth buffers - everything else texture??
-    */
-   info->textureSize = info->SysMem.Size;
-
-   if (info->textureSize < 0) 
-      return 0;
-
-   
-   l = I810MinBits((info->textureSize-1) / I810_NR_TEX_REGIONS);
-   if (l < I810_LOG_MIN_TEX_REGION_SIZE) l = I810_LOG_MIN_TEX_REGION_SIZE;
-
-   /* Round the texture size up to the nearest whole number of
-    * texture regions.  Again, be greedy about this, don't
-    * round down.
-    */
-   info->logTextureGranularity = l;
-   info->textureSize = (info->textureSize >> l) << l;
-
-   /* Set a minimum usable local texture heap size.  This will fit
-    * two 256x256x32bpp textures.
-    */
-   if (info->textureSize < 512 * 1024) {
-      info->textureOffset = 0;
-      info->textureSize = 0;
-   }
-
-   I810AllocLow(&(info->TexMem), &(info->SysMem), info->textureSize);
-
-   if (drmAddMap(ctx->drmFD, (drm_handle_t) info->TexMem.Start,
-		 info->TexMem.Size, DRM_AGP, 0, &info->textures) < 0) {
-     fprintf(stderr,
-		 "[drm] drmAddMap(textures) failed.  Disabling DRI.\n");
-      return 0;
-   }
-
-   /* Reserve space for textures */
-   fprintf(stderr, 
-	   "Will use back buffer at offset 0x%x\n",
-	   info->BackOffset);
-   fprintf(stderr, 
-	   "Will use depth buffer at offset 0x%x\n",
-	   info->DepthOffset);
-   fprintf(stderr, 
-	   "Will use %d kb for textures at offset 0x%x\n",
-	   info->TexMem.Size/1024, info->TexMem.Start);
-
-   return 1;
-} 
-
-
-
-/**
- * Called at the start of each server generation.
- *
- * \param ctx display handle.
- * \param info driver private data.
- *
- * \return non-zero on success, or zero on failure.
- *
- * Performs static frame buffer allocation. Opens the DRM device and add maps
- * to the SAREA, framebuffer and MMIO regions. Fills in \p info with more
- * information. Creates a \e server context to grab the lock for the
- * initialization ioctls and calls the other initilization functions in this
- * file. Starts the CP engine via the DRM_I810_CP_START command.
- *
- * Setups a I810DRIRec structure to be passed to i810_dri.so for its
- * initialization.
- */
-static int I810ScreenInit( DRIDriverContext *ctx, I810Ptr info )
-{
-   I810DRIPtr   pI810DRI;
-   int err;
-
-   usleep(100);
-   /*assert(!ctx->IsClient);*/
-
-   /* from XFree86 driver */
-   info->DepthOffset = 0x3000000;
-   info->BackOffset = 0x3800000;
-   {
-      int  width_bytes = (ctx->shared.virtualWidth * ctx->cpp);
-      int  maxy        = ctx->shared.fbSize / width_bytes;
-
-
-      if (maxy <= ctx->shared.virtualHeight * 3) {
-	 fprintf(stderr, 
-		 "Static buffer allocation failed -- "
-		 "need at least %d kB video memory (have %d kB)\n",
-		 (ctx->shared.virtualWidth * ctx->shared.virtualHeight *
-		  ctx->cpp * 3 + 1023) / 1024,
-		 ctx->shared.fbSize / 1024);
-	 return 0;
-      } 
-   }
-
-
-   info->regsSize = ctx->MMIOSize;
-   ctx->shared.SAREASize = 0x2000;
-
-   /* Note that drmOpen will try to load the kernel module, if needed. */
-   ctx->drmFD = drmOpen("i810", NULL );
-   if (ctx->drmFD < 0) {
-      fprintf(stderr, "[drm] drmOpen failed\n");
-      return 0;
-   }
-
-   if ((err = drmSetBusid(ctx->drmFD, ctx->pciBusID)) < 0) {
-      fprintf(stderr, "[drm] drmSetBusid failed (%d, %s), %s\n",
-	      ctx->drmFD, ctx->pciBusID, strerror(-err));
-      return 0;
-   }
-
-   if (drmAddMap( ctx->drmFD,
-		  0,
-		  ctx->shared.SAREASize,
-		  DRM_SHM,
-		  DRM_CONTAINS_LOCK,
-		  &ctx->shared.hSAREA) < 0)
-   {
-      fprintf(stderr, "[drm] drmAddMap failed\n");
-      return 0;
-   }
-   fprintf(stderr, "[drm] added %d byte SAREA at 0x%08lx\n",
-	   ctx->shared.SAREASize, ctx->shared.hSAREA);
-
-   if (drmMap( ctx->drmFD,
-	       ctx->shared.hSAREA,
-	       ctx->shared.SAREASize,
-	       (drmAddressPtr)(&ctx->pSAREA)) < 0)
-   {
-      fprintf(stderr, "[drm] drmMap failed\n");
-      return 0;
-   }
-   memset(ctx->pSAREA, 0, ctx->shared.SAREASize);
-   fprintf(stderr, "[drm] mapped SAREA 0x%08lx to %p, size %d\n",
-	   ctx->shared.hSAREA, ctx->pSAREA, ctx->shared.SAREASize);
-
-   if (drmAddMap(ctx->drmFD, 
-		 ctx->MMIOStart,
-		 ctx->MMIOSize,
-		 DRM_REGISTERS, 
-		 DRM_READ_ONLY, 
-		 &info->regs) < 0) {
-      fprintf(stderr, "[drm] drmAddMap mmio failed\n");	
-      return 0;
-   }
-   fprintf(stderr,
-	   "[drm] register handle = 0x%08x\n", info->regs);
-
-   I810DRIAgpPreInit(ctx, info);
-   /* Need to AddMap the framebuffer and mmio regions here:
-    */
-   if (drmAddMap( ctx->drmFD,
-		  (drm_handle_t)ctx->FBStart,
-		  ctx->FBSize,
-		  DRM_FRAME_BUFFER,
-#ifndef _EMBEDDED
-		  0,
-#else
-		  DRM_READ_ONLY,
-#endif
-		  &ctx->shared.hFrameBuffer) < 0)
-   {
-      fprintf(stderr, "[drm] drmAddMap framebuffer failed\n");
-      return 0;
-   }
-
-   fprintf(stderr, "[drm] framebuffer handle = 0x%08lx\n",
-	   ctx->shared.hFrameBuffer);
-
-   /* Check the i810 DRM version */
-   if (!I810CheckDRMVersion(ctx, info)) {
-      return 0;
-   }
-
-   /* Initialize AGP */
-   if (!I810DRIAgpInit(ctx, info)) {
-      return 0;
-   }
-
-
-   /* Memory manager setup */
-   if (!I810MemoryInit(ctx, info)) {
-      return 0;
-   }
-
-   /* Initialize the SAREA private data structure */
-   {
-      I810SAREAPtr pSAREAPriv;
-      pSAREAPriv = (I810SAREAPtr)(((char*)ctx->pSAREA) + 
-					sizeof(drm_sarea_t));
-      memset(pSAREAPriv, 0, sizeof(*pSAREAPriv));
-      //      pSAREAPriv->pf_enabled=1;
-   }
-
-
-   /* Create a 'server' context so we can grab the lock for
-    * initialization ioctls.
-    */
-   if ((err = drmCreateContext(ctx->drmFD, &ctx->serverContext)) != 0) {
-      fprintf(stderr, "%s: drmCreateContext failed %d\n", __FUNCTION__, err);
-      return 0;
-   }
-
-   DRM_LOCK(ctx->drmFD, ctx->pSAREA, ctx->serverContext, 0); 
-
-   /* Initialize the vertex buffers list */
-   if (!I810DRIBufInit(ctx, info)) {
-      fprintf(stderr, "I810DRIBufInit failed\n");
-      DRM_UNLOCK(ctx->drmFD, ctx->pSAREA, ctx->serverContext);
-      return 0;
-   }
-
-   /* Initialize the kernel data structures */
-   if (!I810DRIKernelInit(ctx, info)) {
-      fprintf(stderr, "I810DRIKernelInit failed\n");
-      DRM_UNLOCK(ctx->drmFD, ctx->pSAREA, ctx->serverContext);
-      return 0;
-   }
-
-   /* Initialize IRQ */
-   I810DRIIrqInit(ctx, info);
-
-   /* Quick hack to clear the front & back buffers.  Could also use
-    * the clear ioctl to do this, but would need to setup hw state
-    * first.
-    */
-#if 0
-   memset((char *)ctx->FBAddress,
-	  0,
-	  info->auxPitch * ctx->cpp * ctx->shared.virtualHeight );
-
-   memset((char *)info->backbuffer,
-	  0,
-	  info->auxPitch * ctx->cpp * ctx->shared.virtualHeight );
-#endif
-
-   /* This is the struct passed to i810_dri.so for its initialization */
-   ctx->driverClientMsg = malloc(sizeof(I810DRIRec));
-   ctx->driverClientMsgSize = sizeof(I810DRIRec);
-   pI810DRI                    = (I810DRIPtr)ctx->driverClientMsg;
-
-   pI810DRI->regs              = info->regs;
-   pI810DRI->regsSize          = info->regsSize;
-   // regsMap is unused
-
-   pI810DRI->backbufferSize    = info->BackBuffer.Size;
-   pI810DRI->backbuffer        = info->backbuffer;
-
-   pI810DRI->depthbufferSize   = info->DepthBuffer.Size;
-   pI810DRI->depthbuffer       = info->depthbuffer;
-
-   pI810DRI->textures          = info->textures;
-   pI810DRI->textureSize       = info->textureSize;
-
-   pI810DRI->agp_buffers       = info->buffer_map;
-   pI810DRI->agp_buf_size      = info->BufferMem.Size;
-
-   pI810DRI->deviceID          = info->Chipset;
-   pI810DRI->width             = ctx->shared.virtualWidth;
-   pI810DRI->height            = ctx->shared.virtualHeight;
-   pI810DRI->mem               = ctx->shared.fbSize;
-   pI810DRI->cpp               = ctx->bpp / 8;
-   pI810DRI->bitsPerPixel      = ctx->bpp;
-   pI810DRI->fbOffset          = info->FrontBuffer.Start;
-   pI810DRI->fbStride          = info->auxPitch;
-   
-   pI810DRI->backOffset        = info->BackBuffer.Start;
-   pI810DRI->depthOffset       = info->DepthBuffer.Start;
-
-   pI810DRI->auxPitch          = info->auxPitch;
-   pI810DRI->auxPitchBits      = info->auxPitchBits;
-
-   pI810DRI->logTextureGranularity = info->logTextureGranularity;
-   pI810DRI->textureOffset     = info->TexMem.Start;
-  
-   pI810DRI->ringOffset        = info->LpRing.mem.Start;
-   pI810DRI->ringSize          = info->LpRing.mem.Size;
-
-   // drmBufs looks unused 
-   pI810DRI->irq               = info->irq;
-   pI810DRI->sarea_priv_offset = sizeof(drm_sarea_t);
-
-   /* Don't release the lock now - let the VT switch handler do it. */
-   return 1;
-}
-
-
-/**
- * \brief Validate the fbdev mode.
- * 
- * \param ctx display handle.
- *
- * \return one on success, or zero on failure.
- *
- * Saves some registers and returns 1.
- *
- * \sa i810ValidateMode().
- */
-static int i810ValidateMode( const DRIDriverContext *ctx )
-{
-   unsigned char *I810MMIO = ctx->MMIOAddress;
-   I810Ptr info = ctx->driverPrivate;
-
-   return 1;
-}
-
-
-/**
- * \brief Examine mode returned by fbdev.
- * 
- * \param ctx display handle.
- *
- * \return one on success, or zero on failure.
- *
- * Restores registers that fbdev has clobbered and returns 1.
- *
- * \sa i810ValidateMode().
- */
-static int i810PostValidateMode( const DRIDriverContext *ctx )
-{
-   unsigned char *I810MMIO = ctx->MMIOAddress;
-   I810Ptr info = ctx->driverPrivate;
-
-   return 1;
-}
-
-
-/**
- * \brief Initialize the framebuffer device mode
- *
- * \param ctx display handle.
- *
- * \return one on success, or zero on failure.
- *
- * Fills in \p info with some default values and some information from \p ctx
- * and then calls I810ScreenInit() for the screen initialization.
- * 
- * Before exiting clears the framebuffer memory accessing it directly.
- */
-static int i810InitFBDev( DRIDriverContext *ctx )
-{
-  I810Ptr info = calloc(1, sizeof(*info));
-
-   {
-      int  dummy = ctx->shared.virtualWidth;
-
-      switch (ctx->bpp / 8) {
-      case 1: dummy = (ctx->shared.virtualWidth + 127) & ~127; break;
-      case 2: dummy = (ctx->shared.virtualWidth +  31) &  ~31; break;
-      case 3:
-      case 4: dummy = (ctx->shared.virtualWidth +  15) &  ~15; break;
-      }
-
-      ctx->shared.virtualWidth = dummy;
-   }
-
-   ctx->driverPrivate = (void *)info;
-   
-   info->Chipset = ctx->chipset;
-
-   if (!I810ScreenInit( ctx, info ))
-      return 0;
-
-
-   return 1;
-}
-
-
-/**
- * \brief The screen is being closed, so clean up any state and free any
- * resources used by the DRI.
- *
- * \param ctx display handle.
- *
- * Unmaps the SAREA, closes the DRM device file descriptor and frees the driver
- * private data.
- */
-static void i810HaltFBDev( DRIDriverContext *ctx )
-{
-    drmUnmap( ctx->pSAREA, ctx->shared.SAREASize );
-    drmClose(ctx->drmFD);
-
-    if (ctx->driverPrivate) {
-       free(ctx->driverPrivate);
-       ctx->driverPrivate = 0;
-    }
-}
-
-
-extern void i810NotifyFocus( int );
-
-/**
- * \brief Exported driver interface for Mini GLX.
- *
- * \sa DRIDriverRec.
- */
-const struct DRIDriverRec __driDriver = {
-   i810ValidateMode,
-   i810PostValidateMode,
-   i810InitFBDev,
-   i810HaltFBDev,
-   I810EngineShutdown,
-   I810EngineRestore,  
-#ifndef _EMBEDDED
-   0,
-#else
-   i810NotifyFocus, 
-#endif
-};
diff --git a/src/mesa/drivers/dri/i915/server/intel_dri.c b/src/mesa/drivers/dri/i915/server/intel_dri.c
deleted file mode 120000
index effdd26448..0000000000
--- a/src/mesa/drivers/dri/i915/server/intel_dri.c
+++ /dev/null
@@ -1 +0,0 @@
-../../intel/server/intel_dri.c
\ No newline at end of file
diff --git a/src/mesa/drivers/dri/i965/server/intel_dri.c b/src/mesa/drivers/dri/i965/server/intel_dri.c
deleted file mode 120000
index effdd26448..0000000000
--- a/src/mesa/drivers/dri/i965/server/intel_dri.c
+++ /dev/null
@@ -1 +0,0 @@
-../../intel/server/intel_dri.c
\ No newline at end of file
diff --git a/src/mesa/drivers/dri/intel/server/intel_dri.c b/src/mesa/drivers/dri/intel/server/intel_dri.c
deleted file mode 100644
index e49c4214ad..0000000000
--- a/src/mesa/drivers/dri/intel/server/intel_dri.c
+++ /dev/null
@@ -1,1306 +0,0 @@
-/**
- * \file server/intel_dri.c
- * \brief File to perform the device-specific initialization tasks typically
- * done in the X server.
- *
- * Here they are converted to run in the client (or perhaps a standalone
- * process), and to work with the frame buffer device rather than the X
- * server infrastructure.
- * 
- * Copyright (C) 2006 Dave Airlie (airlied@linux.ie)
-
- Permission is hereby granted, free of charge, to any person obtaining a
- copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sub license, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- 
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial portions
- of the Software.
- 
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND/OR THEIR SUPPLIERS BE LIABLE FOR
- ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-
-#include "driver.h"
-#include "drm.h"
-
-#include "intel.h"
-#include "i830_dri.h"
-
-#include "memops.h"
-#include "pciaccess.h"
-
-static size_t drm_page_size;
-static int nextTile = 0;
-#define xf86DrvMsg(...) do {} while(0)
-
-static const int pitches[] = {
-  128 * 8,
-  128 * 16,
-  128 * 32,
-  128 * 64,
-  0
-};
-
-static Bool I830DRIDoMappings(DRIDriverContext *ctx, I830Rec *pI830, drmI830Sarea *sarea);
-
-static unsigned long
-GetBestTileAlignment(unsigned long size)
-{
-   unsigned long i;
-
-   for (i = KB(512); i < size; i <<= 1)
-      ;
-
-   if (i > MB(64))
-      i = MB(64);
-
-   return i;
-}
-
-static void SetFenceRegs(const DRIDriverContext *ctx, I830Rec *pI830)
-{
-  int i;
-  unsigned char *MMIO = ctx->MMIOAddress;
-
-  for (i = 0; i < 8; i++) {
-    OUTREG(FENCE + i * 4, pI830->Fence[i]);
-    //    if (I810_DEBUG & DEBUG_VERBOSE_VGA)
-    fprintf(stderr,"Fence Register : %x\n", pI830->Fence[i]);
-  }
-}
-
-/* Tiled memory is good... really, really good...
- *
- * Need to make it less likely that we miss out on this - probably
- * need to move the frontbuffer away from the 'guarenteed' alignment
- * of the first memory segment, or perhaps allocate a discontigous
- * framebuffer to get more alignment 'sweet spots'.
- */
-static void
-SetFence(const DRIDriverContext *ctx, I830Rec *pI830,
-	 int nr, unsigned int start, unsigned int pitch,
-         unsigned int size)
-{
-   unsigned int val;
-   unsigned int fence_mask = 0;
-   unsigned int fence_pitch;
-
-   if (nr < 0 || nr > 7) {
-      fprintf(stderr,
-		 "SetFence: fence %d out of range\n",nr);
-      return;
-   }
-
-   pI830->Fence[nr] = 0;
-
-   if (IS_I9XX(pI830))
-   	fence_mask = ~I915G_FENCE_START_MASK;
-   else
-   	fence_mask = ~I830_FENCE_START_MASK;
-
-   if (start & fence_mask) {
-      fprintf(stderr,
-		 "SetFence: %d: start (0x%08x) is not %s aligned\n",
-		 nr, start, (IS_I9XX(pI830)) ? "1MB" : "512k");
-      return;
-   }
-
-   if (start % size) {
-      fprintf(stderr,
-		 "SetFence: %d: start (0x%08x) is not size (%dk) aligned\n",
-		 nr, start, size / 1024);
-      return;
-   }
-
-   if (pitch & 127) {
-      fprintf(stderr,
-		 "SetFence: %d: pitch (%d) not a multiple of 128 bytes\n",
-		 nr, pitch);
-      return;
-   }
-
-   val = (start | FENCE_X_MAJOR | FENCE_VALID);
-
-   if (IS_I9XX(pI830)) {
-   	switch (size) {
-	   case MB(1):
-      		val |= I915G_FENCE_SIZE_1M;
-      		break;
-   	   case MB(2):
-      		val |= I915G_FENCE_SIZE_2M;
-      		break;
-   	   case MB(4):
-      		val |= I915G_FENCE_SIZE_4M;
-      		break;
-   	   case MB(8):
-      		val |= I915G_FENCE_SIZE_8M;
-      		break;
-   	   case MB(16):
-      		val |= I915G_FENCE_SIZE_16M;
-      		break;
-   	   case MB(32):
-      		val |= I915G_FENCE_SIZE_32M;
-      		break;
-   	   case MB(64):
-      		val |= I915G_FENCE_SIZE_64M;
-      		break;
-   	   default:
-      		fprintf(stderr,
-		 "SetFence: %d: illegal size (%d kByte)\n", nr, size / 1024);
-      		return;
-   	}
-    } else {
-   	switch (size) {
-	   case KB(512):
-      		val |= FENCE_SIZE_512K;
-      		break;
-	   case MB(1):
-      		val |= FENCE_SIZE_1M;
-      		break;
-   	   case MB(2):
-      		val |= FENCE_SIZE_2M;
-      		break;
-   	   case MB(4):
-      		val |= FENCE_SIZE_4M;
-      		break;
-   	   case MB(8):
-      		val |= FENCE_SIZE_8M;
-      		break;
-   	   case MB(16):
-      		val |= FENCE_SIZE_16M;
-      		break;
-   	   case MB(32):
-      		val |= FENCE_SIZE_32M;
-      		break;
-   	   case MB(64):
-      		val |= FENCE_SIZE_64M;
-      		break;
-   	   default:
-      		fprintf(stderr,
-		 "SetFence: %d: illegal size (%d kByte)\n", nr, size / 1024);
-      		return;
-   	}
-   }
-
-   if (IS_I9XX(pI830))
-	fence_pitch = pitch / 512;
-   else
-	fence_pitch = pitch / 128;
-
-   switch (fence_pitch) {
-   case 1:
-      val |= FENCE_PITCH_1;
-      break;
-   case 2:
-      val |= FENCE_PITCH_2;
-      break;
-   case 4:
-      val |= FENCE_PITCH_4;
-      break;
-   case 8:
-      val |= FENCE_PITCH_8;
-      break;
-   case 16:
-      val |= FENCE_PITCH_16;
-      break;
-   case 32:
-      val |= FENCE_PITCH_32;
-      break;
-   case 64:
-      val |= FENCE_PITCH_64;
-      break;
-   default:
-      fprintf(stderr,
-		 "SetFence: %d: illegal pitch (%d)\n", nr, pitch);
-      return;
-   }
-
-   pI830->Fence[nr] = val;
-}
-
-static Bool
-MakeTiles(const DRIDriverContext *ctx, I830Rec *pI830, I830MemRange *pMem)
-{
-   int pitch, ntiles, i;
-
-   pitch = pMem->Pitch * ctx->cpp;
-   /*
-    * Simply try to break the region up into at most four pieces of size
-    * equal to the alignment.
-    */
-   ntiles = ROUND_TO(pMem->Size, pMem->Alignment) / pMem->Alignment;
-   if (ntiles >= 4) {
-      return FALSE;
-   }
-
-   for (i = 0; i < ntiles; i++, nextTile++) {
-     SetFence(ctx, pI830, nextTile, pMem->Start + i * pMem->Alignment,
-	       pitch, pMem->Alignment);
-   }
-   return TRUE;
-}
-
-static void I830SetupMemoryTiling(const DRIDriverContext *ctx, I830Rec *pI830)
-{
-  int i;
-
-  /* Clear out */
-  for (i = 0; i < 8; i++)
-    pI830->Fence[i] = 0;
-  
-  nextTile = 0;
-
-  if (pI830->BackBuffer.Alignment >= KB(512)) {
-    if (MakeTiles(ctx, pI830, &(pI830->BackBuffer))) {
-      fprintf(stderr,
-		 "Activating tiled memory for the back buffer.\n");
-    } else {
-      fprintf(stderr,
-		 "MakeTiles failed for the back buffer.\n");
-      pI830->allowPageFlip = FALSE;
-    }
-  }
-  
-  if (pI830->DepthBuffer.Alignment >= KB(512)) {
-    if (MakeTiles(ctx, pI830, &(pI830->DepthBuffer))) {
-      fprintf(stderr,
-		 "Activating tiled memory for the depth buffer.\n");
-    } else {
-      fprintf(stderr,
-		 "MakeTiles failed for the depth buffer.\n");
-    }
-  }
-
-  return;
-}
-
-static int I830DetectMemory(const DRIDriverContext *ctx, I830Rec *pI830)
-{
-  struct pci_device host_bridge, ig_dev;
-  uint32_t gmch_ctrl;
-  int memsize = 0;
-  int range;
-  uint32_t aper_size;
-  uint32_t membase2 = 0;
-      
-  memset(&host_bridge, 0, sizeof(host_bridge));
-  memset(&ig_dev, 0, sizeof(ig_dev));
-
-  ig_dev.dev = 2;
-
-  pci_device_cfg_read_u32(&host_bridge, &gmch_ctrl, I830_GMCH_CTRL);
-
-  if (IS_I830(pI830) || IS_845G(pI830)) {
-    if ((gmch_ctrl & I830_GMCH_MEM_MASK) == I830_GMCH_MEM_128M) {
-      aper_size = 0x80000000;
-    } else {
-      aper_size = 0x40000000;
-    }
-  } else {
-    if (IS_I9XX(pI830)) {
-      int ret;
-      ret = pci_device_cfg_read_u32(&ig_dev, &membase2, 0x18);
-      if (membase2 & 0x08000000)
-	aper_size = 0x8000000;
-      else
-	aper_size = 0x10000000;
-
-      fprintf(stderr,"aper size is %08X %08x %d\n", aper_size, membase2, ret);
-    } else
-      aper_size = 0x8000000;
-  }
-
-  pI830->aper_size = aper_size;
-
-
-  /* We need to reduce the stolen size, by the GTT and the popup.
-   * The GTT varying according the the FbMapSize and the popup is 4KB */
-  range = (ctx->shared.fbSize / (1024*1024)) + 4;
-
-   if (IS_I85X(pI830) || IS_I865G(pI830) || IS_I9XX(pI830)) {
-      switch (gmch_ctrl & I830_GMCH_GMS_MASK) {
-      case I855_GMCH_GMS_STOLEN_1M:
-	 memsize = MB(1) - KB(range);
-	 break;
-      case I855_GMCH_GMS_STOLEN_4M:
-	 memsize = MB(4) - KB(range);
-	 break;
-      case I855_GMCH_GMS_STOLEN_8M:
-	 memsize = MB(8) - KB(range);
-	 break;
-      case I855_GMCH_GMS_STOLEN_16M:
-	 memsize = MB(16) - KB(range);
-	 break;
-      case I855_GMCH_GMS_STOLEN_32M:
-	 memsize = MB(32) - KB(range);
-	 break;
-      case I915G_GMCH_GMS_STOLEN_48M:
-	 if (IS_I9XX(pI830))
-	    memsize = MB(48) - KB(range);
-	 break;
-      case I915G_GMCH_GMS_STOLEN_64M:
-	 if (IS_I9XX(pI830))
-	    memsize = MB(64) - KB(range);
-	 break;
-      }
-   } else {
-      switch (gmch_ctrl & I830_GMCH_GMS_MASK) {
-      case I830_GMCH_GMS_STOLEN_512:
-	 memsize = KB(512) - KB(range);
-	 break;
-      case I830_GMCH_GMS_STOLEN_1024:
-	 memsize = MB(1) - KB(range);
-	 break;
-      case I830_GMCH_GMS_STOLEN_8192:
-	 memsize = MB(8) - KB(range);
-	 break;
-      case I830_GMCH_GMS_LOCAL:
-	 memsize = 0;
-	 xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
-		    "Local memory found, but won't be used.\n");
-	 break;
-      }
-   }
-   if (memsize > 0) {
-     fprintf(stderr,
-		 "detected %d kB stolen memory.\n", memsize / 1024);
-   } else {
-     fprintf(stderr,
-		 "no video memory detected.\n");
-   }
-   return memsize;
-}
-
-static int AgpInit(const DRIDriverContext *ctx, I830Rec *info)
-{
-  unsigned long mode = 0x4;
-
-  if (drmAgpAcquire(ctx->drmFD) < 0) {
-    fprintf(stderr, "[gart] AGP not available\n");
-    return 0;
-  }
-  
-  if (drmAgpEnable(ctx->drmFD, mode) < 0) {
-    fprintf(stderr, "[gart] AGP not enabled\n");
-    drmAgpRelease(ctx->drmFD);
-    return 0;
-  }
-  else
-    fprintf(stderr, "[gart] AGP enabled at %dx\n", ctx->agpmode);
-
-  return 1;
-}
-
-/*
- * Allocate memory from the given pool.  Grow the pool if needed and if
- * possible.
- */
-static unsigned long
-AllocFromPool(const DRIDriverContext *ctx, I830Rec *pI830, 
-	      I830MemRange *result, I830MemPool *pool,
-	      long size, unsigned long alignment, int flags)
-{
-   long needed, start, end;
-
-   if (!result || !pool || !size)
-      return 0;
-
-   /* Calculate how much space is needed. */
-   if (alignment <= GTT_PAGE_SIZE)
-      needed = size;
-   else {
-	 start = ROUND_TO(pool->Free.Start, alignment);
-	 end = ROUND_TO(start + size, alignment);
-	 needed = end - pool->Free.Start;
-   }
-   if (needed > pool->Free.Size) {
-     return 0;
-   }
-
-   result->Start = ROUND_TO(pool->Free.Start, alignment);
-   pool->Free.Start += needed;
-   result->End = pool->Free.Start;
-
-   pool->Free.Size = pool->Free.End - pool->Free.Start;
-   result->Size = result->End - result->Start;
-   result->Pool = pool;
-   result->Alignment = alignment;
-   return needed;
-}
-
-static unsigned long AllocFromAGP(const DRIDriverContext *ctx, I830Rec *pI830, long size, unsigned long alignment, I830MemRange  *result)
-{
-   unsigned long start, end;
-   unsigned long newApStart, newApEnd;
-   int ret;
-   if (!result || !size)
-      return 0;
-   
-   if (!alignment)
-     alignment = 4;
-
-   start = ROUND_TO(pI830->MemoryAperture.Start, alignment);
-   end = ROUND_TO(start + size, alignment);
-   newApStart = end;
-   newApEnd = pI830->MemoryAperture.End;
-
-   ret=drmAgpAlloc(ctx->drmFD, size, 0, &(result->Physical), (drm_handle_t *)&(result->Key));
-   
-   if (ret)
-   {
-     fprintf(stderr,"drmAgpAlloc failed %d\n", ret);
-     return 0;
-   }
-   pI830->allocatedMemory += size;
-   pI830->MemoryAperture.Start = newApStart;
-   pI830->MemoryAperture.End = newApEnd;
-   pI830->MemoryAperture.Size = newApEnd - newApStart;
-   //   pI830->FreeMemory -= size;
-   result->Start = start;
-   result->End = start + size;
-   result->Size = size;
-   result->Offset = start;
-   result->Alignment = alignment;
-   result->Pool = NULL;
-  
-   return size;
-}
-
-unsigned long
-I830AllocVidMem(const DRIDriverContext *ctx, I830Rec *pI830,
-                I830MemRange *result, I830MemPool *pool, long size,
-                unsigned long alignment, int flags)
-{
-   unsigned long ret;
-
-   if (!result)
-      return 0;
-
-   /* Make sure these are initialised. */
-   result->Size = 0;
-   result->Key = -1;
-
-   if (!size) {
-      return 0;
-   }
-
-   if (pool->Free.Size < size) {
-      ret = AllocFromAGP(ctx, pI830, size, alignment, result);
-   }
-   else {
-      ret = AllocFromPool(ctx, pI830, result, pool, size, alignment, flags);
-      if (ret == 0)
-         ret = AllocFromAGP(ctx, pI830, size, alignment, result);
-   }
-   return ret;
-}
-
-static Bool BindAgpRange(const DRIDriverContext *ctx, I830MemRange *mem)
-{
-  if (!mem)
-    return FALSE;
-  
-  if (mem->Key == -1)
-    return TRUE;
-
-  return !drmAgpBind(ctx->drmFD, mem->Key, mem->Offset);
-}
-
-/* simple memory allocation routines needed */
-/* put ring buffer in low memory */
-/* need to allocate front, back, depth buffers aligned correctly,
-   allocate ring buffer, 
-*/
-
-/* */
-static Bool
-I830AllocateMemory(const DRIDriverContext *ctx, I830Rec *pI830)
-{
-  unsigned long size, ret;
-  unsigned long lines, lineSize, align;
-
-  /* allocate ring buffer */
-  memset(pI830->LpRing, 0, sizeof(I830RingBuffer));
-  pI830->LpRing->mem.Key = -1;
-
-  size = PRIMARY_RINGBUFFER_SIZE;
-  
-  ret = I830AllocVidMem(ctx, pI830, &pI830->LpRing->mem, &pI830->StolenPool, size, 0x1000, 0);
-  
-  if (ret != size)
-  {
-    fprintf(stderr,"unable to allocate ring buffer %ld\n", ret);
-    return FALSE;
-  }
-
-  pI830->LpRing->tail_mask = pI830->LpRing->mem.Size - 1;
-
-  
-  /* allocate front buffer */
-  memset(&(pI830->FrontBuffer), 0, sizeof(pI830->FrontBuffer));
-  pI830->FrontBuffer.Key = -1;
-  pI830->FrontBuffer.Pitch = ctx->shared.virtualWidth;
-
-  align = KB(512);  
-
-  lineSize = ctx->shared.virtualWidth * ctx->cpp;
-  lines = (ctx->shared.virtualHeight + 15) / 16 * 16;
-  size = lineSize * lines;
-  size = ROUND_TO_PAGE(size);
-
-  align = GetBestTileAlignment(size);
-
-  ret = I830AllocVidMem(ctx, pI830, &pI830->FrontBuffer, &pI830->StolenPool, size, align, 0);
-  if (ret < size)
-  {
-    fprintf(stderr,"unable to allocate front buffer %ld\n", ret);
-    return FALSE;
-  }
-
-  memset(&(pI830->BackBuffer), 0, sizeof(pI830->BackBuffer));
-  pI830->BackBuffer.Key = -1;
-  pI830->BackBuffer.Pitch = ctx->shared.virtualWidth;
-
-  ret = I830AllocVidMem(ctx, pI830, &pI830->BackBuffer, &pI830->StolenPool, size, align, 0);
-  if (ret < size)
-  {
-    fprintf(stderr,"unable to allocate back buffer %ld\n", ret);
-    return FALSE;
-  }
-  
-  memset(&(pI830->DepthBuffer), 0, sizeof(pI830->DepthBuffer));
-  pI830->DepthBuffer.Key = -1;
-  pI830->DepthBuffer.Pitch = ctx->shared.virtualWidth;
-
-  ret = I830AllocVidMem(ctx, pI830, &pI830->DepthBuffer, &pI830->StolenPool, size, align, 0);
-  if (ret < size)
-  {
-    fprintf(stderr,"unable to allocate depth buffer %ld\n", ret);
-    return FALSE;
-  }
-
-  memset(&(pI830->ContextMem), 0, sizeof(pI830->ContextMem));
-  pI830->ContextMem.Key = -1;
-  size = KB(32);
-
-  ret = I830AllocVidMem(ctx, pI830, &pI830->ContextMem, &pI830->StolenPool, size, align, 0);
-  if (ret < size)
-  {
-    fprintf(stderr,"unable to allocate context buffer %ld\n", ret);
-    return FALSE;
-  }
-
-#if 0  
-  memset(&(pI830->TexMem), 0, sizeof(pI830->TexMem));
-  pI830->TexMem.Key = -1;
-
-  size = 32768 * 1024;
-  ret = AllocFromAGP(ctx, pI830, size, align, &pI830->TexMem);
-  if (ret < size)
-  {
-    fprintf(stderr,"unable to allocate texture memory %ld\n", ret);
-    return FALSE;
-  }
-#endif
-
-  return TRUE;
-}
-
-static Bool
-I830BindMemory(const DRIDriverContext *ctx, I830Rec *pI830)
-{
-  if (!BindAgpRange(ctx, &pI830->LpRing->mem))
-    return FALSE;
-  if (!BindAgpRange(ctx, &pI830->FrontBuffer))
-    return FALSE;
-  if (!BindAgpRange(ctx, &pI830->BackBuffer))
-    return FALSE;
-  if (!BindAgpRange(ctx, &pI830->DepthBuffer))
-    return FALSE;
-  if (!BindAgpRange(ctx, &pI830->ContextMem))
-    return FALSE;
-#if 0
-  if (!BindAgpRange(ctx, &pI830->TexMem))
-    return FALSE;
-#endif
-  return TRUE;
-}
-
-static void SetupDRIMM(const DRIDriverContext *ctx, I830Rec *pI830)
-{
-  unsigned long aperEnd = ROUND_DOWN_TO(pI830->aper_size, GTT_PAGE_SIZE) / GTT_PAGE_SIZE;
-  unsigned long aperStart = ROUND_TO(pI830->aper_size - KB(32768), GTT_PAGE_SIZE) / GTT_PAGE_SIZE;
-
-  fprintf(stderr, "aper size is %08X\n", ctx->shared.fbSize);
-  if (drmMMInit(ctx->drmFD, aperStart, aperEnd - aperStart, DRM_BO_MEM_TT)) {
-      fprintf(stderr,
-	      "DRM MM Initialization Failed\n");
-  } else {
-    fprintf(stderr,
-	    "DRM MM Initialized at offset 0x%lx length %d page\n", aperStart, aperEnd-aperStart);
-  }
-
-}
-
-static Bool
-I830CleanupDma(const DRIDriverContext *ctx)
-{
-   drmI830Init info;
-
-   memset(&info, 0, sizeof(drmI830Init));
-   info.func = I830_CLEANUP_DMA;
-
-   if (drmCommandWrite(ctx->drmFD, DRM_I830_INIT,
-		       &info, sizeof(drmI830Init))) {
-     fprintf(stderr, "I830 Dma Cleanup Failed\n");
-      return FALSE;
-   }
-
-   return TRUE;
-}
-
-static Bool
-I830InitDma(const DRIDriverContext *ctx, I830Rec *pI830)
-{
-   I830RingBuffer *ring = pI830->LpRing;
-   drmI830Init info;
-
-   memset(&info, 0, sizeof(drmI830Init));
-   info.func = I830_INIT_DMA;
-
-   info.ring_start = ring->mem.Start + pI830->LinearAddr;
-   info.ring_end = ring->mem.End + pI830->LinearAddr;
-   info.ring_size = ring->mem.Size;
-
-   info.mmio_offset = (unsigned int)ctx->MMIOStart;
-
-   info.sarea_priv_offset = sizeof(drm_sarea_t);
-
-   info.front_offset = pI830->FrontBuffer.Start;
-   info.back_offset = pI830->BackBuffer.Start;
-   info.depth_offset = pI830->DepthBuffer.Start;
-   info.w = ctx->shared.virtualWidth;
-   info.h = ctx->shared.virtualHeight;
-   info.pitch = ctx->shared.virtualWidth;
-   info.back_pitch = pI830->BackBuffer.Pitch;
-   info.depth_pitch = pI830->DepthBuffer.Pitch;
-   info.cpp = ctx->cpp;
-
-   if (drmCommandWrite(ctx->drmFD, DRM_I830_INIT,
-		       &info, sizeof(drmI830Init))) {
-      fprintf(stderr,
-		 "I830 Dma Initialization Failed\n");
-      return FALSE;
-   }
-
-   return TRUE;
-}
-
-static int I830CheckDRMVersion( const DRIDriverContext *ctx,
-				  I830Rec *pI830 )
-{
-   drmVersionPtr  version;
-
-   version = drmGetVersion(ctx->drmFD);
-
-   if (version) {
-     int req_minor, req_patch;
-
-     req_minor = 4;
-     req_patch = 0;	
-
-     if (version->version_major != 1 ||
-	 version->version_minor < req_minor ||
-	 (version->version_minor == req_minor && 
-	  version->version_patchlevel < req_patch)) {
-       /* Incompatible drm version */
-       fprintf(stderr,
-	       "[dri] I830DRIScreenInit failed because of a version "
-	       "mismatch.\n"
-	       "[dri] i915.o kernel module version is %d.%d.%d "
-	       "but version 1.%d.%d or newer is needed.\n"
-	       "[dri] Disabling DRI.\n",
-	       version->version_major,
-	       version->version_minor,
-	       version->version_patchlevel,
-	       req_minor,
-	       req_patch);
-       drmFreeVersion(version);
-       return 0;
-     }
-     
-     pI830->drmMinor = version->version_minor;
-     drmFreeVersion(version);
-   }
-   return 1;
-}
-
-static void
-I830SetRingRegs(const DRIDriverContext *ctx, I830Rec *pI830)
-{
-  unsigned int itemp;
-  unsigned char *MMIO = ctx->MMIOAddress;
-
-   OUTREG(LP_RING + RING_LEN, 0);
-   OUTREG(LP_RING + RING_TAIL, 0);
-   OUTREG(LP_RING + RING_HEAD, 0);
-
-   if ((long)(pI830->LpRing->mem.Start & I830_RING_START_MASK) !=
-       pI830->LpRing->mem.Start) {
-      fprintf(stderr,
-		 "I830SetRingRegs: Ring buffer start (%lx) violates its "
-		 "mask (%x)\n", pI830->LpRing->mem.Start, I830_RING_START_MASK);
-   }
-   /* Don't care about the old value.  Reserved bits must be zero anyway. */
-   itemp = pI830->LpRing->mem.Start & I830_RING_START_MASK;
-   OUTREG(LP_RING + RING_START, itemp);
-
-   if (((pI830->LpRing->mem.Size - 4096) & I830_RING_NR_PAGES) !=
-       pI830->LpRing->mem.Size - 4096) {
-      fprintf(stderr,
-		 "I830SetRingRegs: Ring buffer size - 4096 (%lx) violates its "
-		 "mask (%x)\n", pI830->LpRing->mem.Size - 4096,
-		 I830_RING_NR_PAGES);
-   }
-   /* Don't care about the old value.  Reserved bits must be zero anyway. */
-   itemp = (pI830->LpRing->mem.Size - 4096) & I830_RING_NR_PAGES;
-   itemp |= (RING_NO_REPORT | RING_VALID);
-   OUTREG(LP_RING + RING_LEN, itemp);
-
-   pI830->LpRing->head = INREG(LP_RING + RING_HEAD) & I830_HEAD_MASK;
-   pI830->LpRing->tail = INREG(LP_RING + RING_TAIL);
-   pI830->LpRing->space = pI830->LpRing->head - (pI830->LpRing->tail + 8);
-   if (pI830->LpRing->space < 0)
-      pI830->LpRing->space += pI830->LpRing->mem.Size;
-
-   SetFenceRegs(ctx, pI830);
-   
-   /* RESET THE DISPLAY PIPE TO POINT TO THE FRONTBUFFER - hacky
-      hacky hacky */
-   OUTREG(DSPABASE, pI830->FrontBuffer.Start + pI830->LinearAddr);
-
-}
-
-static Bool
-I830SetParam(const DRIDriverContext *ctx, int param, int value)
-{
-   drmI830SetParam sp;
-
-   memset(&sp, 0, sizeof(sp));
-   sp.param = param;
-   sp.value = value;
-
-   if (drmCommandWrite(ctx->drmFD, DRM_I830_SETPARAM, &sp, sizeof(sp))) {
-      fprintf(stderr, "I830 SetParam Failed\n");
-      return FALSE;
-   }
-
-   return TRUE;
-}
-
-static Bool
-I830DRIMapScreenRegions(DRIDriverContext *ctx, I830Rec *pI830, drmI830Sarea *sarea)
-{
-   fprintf(stderr,
-              "[drm] Mapping front buffer\n");
-
-   if (drmAddMap(ctx->drmFD,
-                 (drm_handle_t)(sarea->front_offset + pI830->LinearAddr),
-                 sarea->front_size,
-                 DRM_FRAME_BUFFER,  /*DRM_AGP,*/
-                 0,
-                 &sarea->front_handle) < 0) {
-     fprintf(stderr,
-	     "[drm] drmAddMap(front_handle) failed. Disabling DRI\n");
-      return FALSE;
-   }
-   ctx->shared.hFrameBuffer = sarea->front_handle;
-   ctx->shared.fbSize = sarea->front_size;
-   fprintf(stderr, "[drm] Front Buffer = 0x%08x\n",
-	   sarea->front_handle);
-
-   if (drmAddMap(ctx->drmFD,
-                 (drm_handle_t)(sarea->back_offset),
-                 sarea->back_size, DRM_AGP, 0,
-                 &sarea->back_handle) < 0) {
-      fprintf(stderr,
-                 "[drm] drmAddMap(back_handle) failed. Disabling DRI\n");
-      return FALSE;
-   }
-   fprintf(stderr, "[drm] Back Buffer = 0x%08x\n",
-              sarea->back_handle);
-
-   if (drmAddMap(ctx->drmFD,
-                 (drm_handle_t)sarea->depth_offset,
-                 sarea->depth_size, DRM_AGP, 0,
-                 &sarea->depth_handle) < 0) {
-      fprintf(stderr,
-                 "[drm] drmAddMap(depth_handle) failed. Disabling DRI\n");
-      return FALSE;
-   }
-   fprintf(stderr, "[drm] Depth Buffer = 0x%08x\n",
-              sarea->depth_handle);
-
-#if 0
-   if (drmAddMap(ctx->drmFD,
-		 (drm_handle_t)sarea->tex_offset,
-		 sarea->tex_size, DRM_AGP, 0,
-		 &sarea->tex_handle) < 0) {
-      fprintf(stderr,
-		 "[drm] drmAddMap(tex_handle) failed. Disabling DRI\n");
-      return FALSE;
-   }
-   fprintf(stderr, "[drm] textures = 0x%08x\n",
-	      sarea->tex_handle);
-#endif
-   return TRUE;
-}
-
-
-static void
-I830DRIUnmapScreenRegions(const DRIDriverContext *ctx, I830Rec *pI830, drmI830Sarea *sarea)
-{
-#if 1
-   if (sarea->front_handle) {
-      drmRmMap(ctx->drmFD, sarea->front_handle);
-      sarea->front_handle = 0;
-   }
-#endif
-   if (sarea->back_handle) {
-      drmRmMap(ctx->drmFD, sarea->back_handle);
-      sarea->back_handle = 0;
-   }
-   if (sarea->depth_handle) {
-      drmRmMap(ctx->drmFD, sarea->depth_handle);
-      sarea->depth_handle = 0;
-   }
-   if (sarea->tex_handle) {
-      drmRmMap(ctx->drmFD, sarea->tex_handle);
-      sarea->tex_handle = 0;
-   }
-}
-
-static Bool
-I830DRIDoMappings(DRIDriverContext *ctx, I830Rec *pI830, drmI830Sarea *sarea)
-{
-  if (drmAddMap(ctx->drmFD,
-		(drm_handle_t)pI830->LpRing->mem.Start,
-		pI830->LpRing->mem.Size, DRM_AGP, 0,
-		&pI830->ring_map) < 0) {
-    fprintf(stderr,
-	    "[drm] drmAddMap(ring_map) failed. Disabling DRI\n");
-    return FALSE;
-  }
-  fprintf(stderr, "[drm] ring buffer = 0x%08x\n",
-	  pI830->ring_map);
-
-  if (I830InitDma(ctx, pI830) == FALSE) {
-    return FALSE;
-  }
-  
-   /* init to zero to be safe */
-
-  I830DRIMapScreenRegions(ctx, pI830, sarea);
-  SetupDRIMM(ctx, pI830);
-
-   if (ctx->pciDevice != PCI_CHIP_845_G &&
-       ctx->pciDevice != PCI_CHIP_I830_M) {
-      I830SetParam(ctx, I830_SETPARAM_USE_MI_BATCHBUFFER_START, 1 );
-   }
-
-   /* Okay now initialize the dma engine */
-   {
-      pI830->irq = drmGetInterruptFromBusID(ctx->drmFD,
-					    ctx->pciBus,
-					    ctx->pciDevice,
-					    ctx->pciFunc);
-
-      if (drmCtlInstHandler(ctx->drmFD, pI830->irq)) {
-	 fprintf(stderr,
-		    "[drm] failure adding irq handler\n");
-	 pI830->irq = 0;
-	 return FALSE;
-      }
-      else
-	 fprintf(stderr,
-		    "[drm] dma control initialized, using IRQ %d\n",
-		    pI830->irq);
-   }
-
-   fprintf(stderr, "[dri] visual configs initialized\n");
-
-   return TRUE;
-}
-
-static Bool
-I830ClearScreen(DRIDriverContext *ctx, I830Rec *pI830, drmI830Sarea *sarea)
-{
-  /* need to drmMap front and back buffers and zero them */
-  drmAddress map_addr;
-  int ret;
-
-  ret = drmMap(ctx->drmFD,
-	       sarea->front_handle,
-	       sarea->front_size,
-	       &map_addr);
-
-  if (ret)
-  {
-    fprintf(stderr, "Unable to map front buffer\n");
-    return FALSE;
-  }
-
-  drimemsetio((char *)map_addr,
-	      0,
-	      sarea->front_size);
-  drmUnmap(map_addr, sarea->front_size);
-
-
-  ret = drmMap(ctx->drmFD,
-	       sarea->back_handle,
-	       sarea->back_size,
-	       &map_addr);
-
-  if (ret)
-  {
-    fprintf(stderr, "Unable to map back buffer\n");
-    return FALSE;
-  }
-
-  drimemsetio((char *)map_addr,
-	      0,
-	      sarea->back_size);
-  drmUnmap(map_addr, sarea->back_size);
-
-  return TRUE;
-}
-
-static Bool
-I830ScreenInit(DRIDriverContext *ctx, I830Rec *pI830)
-		  
-{
-   I830DRIPtr pI830DRI;
-   drmI830Sarea *pSAREAPriv;
-   int err;
-      
-   drm_page_size = getpagesize();   
-
-   pI830->registerSize = ctx->MMIOSize;
-   /* This is a hack for now.  We have to have more than a 4k page here
-    * because of the size of the state.  However, the state should be
-    * in a per-context mapping.  This will be added in the Mesa 3.5 port
-    * of the I830 driver.
-    */
-   ctx->shared.SAREASize = SAREA_MAX;
-
-   /* Note that drmOpen will try to load the kernel module, if needed. */
-   ctx->drmFD = drmOpen("i915", NULL );
-   if (ctx->drmFD < 0) {
-      fprintf(stderr, "[drm] drmOpen failed\n");
-      return 0;
-   }
-
-   if ((err = drmSetBusid(ctx->drmFD, ctx->pciBusID)) < 0) {
-      fprintf(stderr, "[drm] drmSetBusid failed (%d, %s), %s\n",
-	      ctx->drmFD, ctx->pciBusID, strerror(-err));
-      return 0;
-   }
-
-   if (drmAddMap( ctx->drmFD,
-		  0,
-		  ctx->shared.SAREASize,
-		  DRM_SHM,
-		  DRM_CONTAINS_LOCK,
-		  &ctx->shared.hSAREA) < 0)
-   {
-     fprintf(stderr, "[drm] drmAddMap failed\n");
-     return 0;
-   }
-
-   fprintf(stderr, "[drm] added %d byte SAREA at 0x%08x\n",
-	   ctx->shared.SAREASize, ctx->shared.hSAREA);
-   
-   if (drmMap( ctx->drmFD,
-	       ctx->shared.hSAREA,
-	       ctx->shared.SAREASize,
-	       (drmAddressPtr)(&ctx->pSAREA)) < 0)
-   {
-      fprintf(stderr, "[drm] drmMap failed\n");
-      return 0;
-   
-   }
-   
-   memset(ctx->pSAREA, 0, ctx->shared.SAREASize);
-   fprintf(stderr, "[drm] mapped SAREA 0x%08x to %p, size %d\n",
-	   ctx->shared.hSAREA, ctx->pSAREA, ctx->shared.SAREASize);
-   
-
-   if (drmAddMap(ctx->drmFD, 
-		 ctx->MMIOStart,
-		 ctx->MMIOSize,
-		 DRM_REGISTERS, 
-		 DRM_READ_ONLY, 
-		 &pI830->registerHandle) < 0) {
-      fprintf(stderr, "[drm] drmAddMap mmio failed\n");	
-      return 0;
-   }
-   fprintf(stderr,
-	   "[drm] register handle = 0x%08x\n", pI830->registerHandle);
-
-
-   if (!I830CheckDRMVersion(ctx, pI830)) {
-     return FALSE;
-   }
-
-   /* Create a 'server' context so we can grab the lock for
-    * initialization ioctls.
-    */
-   if ((err = drmCreateContext(ctx->drmFD, &ctx->serverContext)) != 0) {
-      fprintf(stderr, "%s: drmCreateContext failed %d\n", __FUNCTION__, err);
-      return 0;
-   }
-
-   DRM_LOCK(ctx->drmFD, ctx->pSAREA, ctx->serverContext, 0); 
-
-   /* Initialize the SAREA private data structure */
-   pSAREAPriv = (drmI830Sarea *)(((char*)ctx->pSAREA) + 
-				 sizeof(drm_sarea_t));
-   memset(pSAREAPriv, 0, sizeof(*pSAREAPriv));
-
-   pI830->StolenMemory.Size = I830DetectMemory(ctx, pI830);
-   pI830->StolenMemory.Start = 0;
-   pI830->StolenMemory.End = pI830->StolenMemory.Size;
-
-   pI830->MemoryAperture.Start = pI830->StolenMemory.End;
-   pI830->MemoryAperture.End = KB(40000);
-   pI830->MemoryAperture.Size = pI830->MemoryAperture.End - pI830->MemoryAperture.Start;
-
-   pI830->StolenPool.Fixed = pI830->StolenMemory;
-   pI830->StolenPool.Total = pI830->StolenMemory;
-   pI830->StolenPool.Free = pI830->StolenPool.Total;
-   pI830->FreeMemory = pI830->StolenPool.Total.Size;
-
-   if (!AgpInit(ctx, pI830))
-     return FALSE;
-
-   if (I830AllocateMemory(ctx, pI830) == FALSE)
-   {
-     return FALSE;
-   }
-
-   if (I830BindMemory(ctx, pI830) == FALSE)
-   {
-     return FALSE;
-   }
-
-   pSAREAPriv->rotated_offset = -1;
-   pSAREAPriv->rotated_size = 0;
-   pSAREAPriv->rotated_pitch = ctx->shared.virtualWidth;
-
-   pSAREAPriv->front_offset = pI830->FrontBuffer.Start;
-   pSAREAPriv->front_size = pI830->FrontBuffer.Size;
-   pSAREAPriv->width = ctx->shared.virtualWidth;
-   pSAREAPriv->height = ctx->shared.virtualHeight;
-   pSAREAPriv->pitch = ctx->shared.virtualWidth;
-   pSAREAPriv->virtualX = ctx->shared.virtualWidth;
-   pSAREAPriv->virtualY = ctx->shared.virtualHeight;
-   pSAREAPriv->back_offset = pI830->BackBuffer.Start;
-   pSAREAPriv->back_size = pI830->BackBuffer.Size;
-   pSAREAPriv->depth_offset = pI830->DepthBuffer.Start;
-   pSAREAPriv->depth_size = pI830->DepthBuffer.Size;
-#if 0
-   pSAREAPriv->tex_offset = pI830->TexMem.Start;
-   pSAREAPriv->tex_size = pI830->TexMem.Size;
-#endif
-   pSAREAPriv->log_tex_granularity = pI830->TexGranularity;
-
-   ctx->driverClientMsg = malloc(sizeof(I830DRIRec));
-   ctx->driverClientMsgSize = sizeof(I830DRIRec);
-   pI830DRI = (I830DRIPtr)ctx->driverClientMsg;
-   pI830DRI->deviceID = pI830->Chipset;
-   pI830DRI->regsSize = I830_REG_SIZE;
-   pI830DRI->width = ctx->shared.virtualWidth;
-   pI830DRI->height = ctx->shared.virtualHeight;
-   pI830DRI->mem = ctx->shared.fbSize;
-   pI830DRI->cpp = ctx->cpp;
-
-   pI830DRI->bitsPerPixel = ctx->bpp;
-   pI830DRI->sarea_priv_offset = sizeof(drm_sarea_t);
-   
-   err = I830DRIDoMappings(ctx, pI830, pSAREAPriv);
-   if (err == FALSE)
-       return FALSE;
-
-   I830SetupMemoryTiling(ctx, pI830);
-
-   /* Quick hack to clear the front & back buffers.  Could also use
-    * the clear ioctl to do this, but would need to setup hw state
-    * first.
-    */
-   I830ClearScreen(ctx, pI830, pSAREAPriv);
-
-   I830SetRingRegs(ctx, pI830);
-
-   return TRUE;
-}
-
-
-/**
- * \brief Validate the fbdev mode.
- * 
- * \param ctx display handle.
- *
- * \return one on success, or zero on failure.
- *
- * Saves some registers and returns 1.
- *
- * \sa radeonValidateMode().
- */
-static int i830ValidateMode( const DRIDriverContext *ctx )
-{
-  return 1;
-}
-
-/**
- * \brief Examine mode returned by fbdev.
- * 
- * \param ctx display handle.
- *
- * \return one on success, or zero on failure.
- *
- * Restores registers that fbdev has clobbered and returns 1.
- *
- * \sa i810ValidateMode().
- */
-static int i830PostValidateMode( const DRIDriverContext *ctx )
-{
-  I830Rec *pI830 = ctx->driverPrivate;
-
-  I830SetRingRegs(ctx, pI830);
-  return 1;
-}
-
-
-/**
- * \brief Initialize the framebuffer device mode
- *
- * \param ctx display handle.
- *
- * \return one on success, or zero on failure.
- *
- * Fills in \p info with some default values and some information from \p ctx
- * and then calls I810ScreenInit() for the screen initialization.
- * 
- * Before exiting clears the framebuffer memory accessing it directly.
- */
-static int i830InitFBDev( DRIDriverContext *ctx )
-{
-  I830Rec *pI830 = calloc(1, sizeof(I830Rec));
-  int i;
-
-   {
-      int  dummy = ctx->shared.virtualWidth;
-
-      switch (ctx->bpp / 8) {
-      case 1: dummy = (ctx->shared.virtualWidth + 127) & ~127; break;
-      case 2: dummy = (ctx->shared.virtualWidth +  31) &  ~31; break;
-      case 3:
-      case 4: dummy = (ctx->shared.virtualWidth +  15) &  ~15; break;
-      }
-
-      ctx->shared.virtualWidth = dummy;
-      ctx->shared.Width = ctx->shared.virtualWidth;
-   }
-
-
-   for (i = 0; pitches[i] != 0; i++) {
-     if (pitches[i] >= ctx->shared.virtualWidth) {
-       ctx->shared.virtualWidth = pitches[i];
-       break;
-     }
-   }
-
-   ctx->driverPrivate = (void *)pI830;
-   
-   pI830->LpRing = calloc(1, sizeof(I830RingBuffer));
-   pI830->Chipset = ctx->chipset;
-   pI830->LinearAddr = ctx->FBStart;
-
-   if (!I830ScreenInit( ctx, pI830 ))
-      return 0;
-
-   
-   return 1;
-}
-
-
-/**
- * \brief The screen is being closed, so clean up any state and free any
- * resources used by the DRI.
- *
- * \param ctx display handle.
- *
- * Unmaps the SAREA, closes the DRM device file descriptor and frees the driver
- * private data.
- */
-static void i830HaltFBDev( DRIDriverContext *ctx )
-{
-  drmI830Sarea *pSAREAPriv;
-  I830Rec *pI830 = ctx->driverPrivate;
-
-   if (pI830->irq) {
-       drmCtlUninstHandler(ctx->drmFD);
-       pI830->irq = 0;   }
-
-   I830CleanupDma(ctx);
-
-  pSAREAPriv = (drmI830Sarea *)(((char*)ctx->pSAREA) + 
-				sizeof(drm_sarea_t));
-
-  I830DRIUnmapScreenRegions(ctx, pI830, pSAREAPriv);
-  drmUnmap( ctx->pSAREA, ctx->shared.SAREASize );
-  drmClose(ctx->drmFD);
-  
-  if (ctx->driverPrivate) {
-    free(ctx->driverPrivate);
-    ctx->driverPrivate = 0;
-  }
-}
-
-
-extern void i810NotifyFocus( int );
-
-/**
- * \brief Exported driver interface for Mini GLX.
- *
- * \sa DRIDriverRec.
- */
-const struct DRIDriverRec __driDriver = {
-   i830ValidateMode,
-   i830PostValidateMode,
-   i830InitFBDev,
-   i830HaltFBDev,
-   NULL,//I830EngineShutdown,
-   NULL, //I830EngineRestore,  
-#ifndef _EMBEDDED
-   0,
-#else
-   i810NotifyFocus, 
-#endif
-};
diff --git a/src/mesa/drivers/dri/mga/server/mga_dri.c b/src/mesa/drivers/dri/mga/server/mga_dri.c
deleted file mode 100644
index bc575e62ee..0000000000
--- a/src/mesa/drivers/dri/mga/server/mga_dri.c
+++ /dev/null
@@ -1,1088 +0,0 @@
-
-/*
- * Copyright 2000 VA Linux Systems Inc., Fremont, California.
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES
- * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * Authors:
- *    Keith Whitwell <keith@tungstengraphics.com>
- *    Gareth Hughes <gareth@valinux.com>
- */
-
-#include <errno.h>
-#include <unistd.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <inttypes.h>
-
-#include "driver.h"
-#include "drm.h"
-#include "memops.h"
-
-#include "mga_reg.h"
-#include "mga.h"
-#include "mga_macros.h"
-#include "mga_dri.h"
-
-
-/* Quiescence, locking
- */
-#define MGA_TIMEOUT		2048
-
-static void MGAWaitForIdleDMA( struct DRIDriverContextRec *ctx, MGAPtr pMga )
-{
-   drm_lock_t lock;
-   int ret;
-   int i = 0;
-
-   memset( &lock, 0, sizeof(lock) );
-
-   for (;;) {
-      do {
-         /* first ask for quiescent and flush */
-         lock.flags = DRM_LOCK_QUIESCENT | DRM_LOCK_FLUSH;
-         do {
-	    ret = drmCommandWrite( ctx->drmFD, DRM_MGA_FLUSH,
-                                   &lock, sizeof( lock ) );
-         } while ( ret == -EBUSY && i++ < DRM_MGA_IDLE_RETRY );
-
-         /* if it's still busy just try quiescent */
-         if ( ret == -EBUSY ) { 
-            lock.flags = DRM_LOCK_QUIESCENT;
-            do {
-	       ret = drmCommandWrite( ctx->drmFD, DRM_MGA_FLUSH,
-                                      &lock, sizeof( lock ) );
-            } while ( ret == -EBUSY && i++ < DRM_MGA_IDLE_RETRY );
-         }
-      } while ( ( ret == -EBUSY ) && ( i++ < MGA_TIMEOUT ) );
-
-      if ( ret == 0 )
-	 return;
-
-      fprintf( stderr,
-               "[dri] Idle timed out, resetting engine...\n" );
-
-      drmCommandNone( ctx->drmFD, DRM_MGA_RESET );
-   }
-}
-
-static unsigned int mylog2( unsigned int n )
-{
-   unsigned int log2 = 1;
-   while ( n > 1 ) n >>= 1, log2++;
-   return log2;
-}
-
-static int MGADRIAgpInit(struct DRIDriverContextRec *ctx, MGAPtr pMga)
-{
-   unsigned long mode;
-   unsigned int vendor, device;
-   int ret, count, i;
-
-   if(pMga->agpSize < 12)pMga->agpSize = 12;
-   if(pMga->agpSize > 64)pMga->agpSize = 64; /* cap */
-
-   /* FIXME: Make these configurable...
-    */
-   pMga->agp.size = pMga->agpSize * 1024 * 1024;
-
-   pMga->warp.offset = 0;
-   pMga->warp.size = MGA_WARP_UCODE_SIZE;
-
-   pMga->primary.offset = (pMga->warp.offset +
-				    pMga->warp.size);
-   pMga->primary.size = 1024 * 1024;
-
-   pMga->buffers.offset = (pMga->primary.offset +
-				    pMga->primary.size);
-   pMga->buffers.size = MGA_NUM_BUFFERS * MGA_BUFFER_SIZE;
-
-
-   pMga->agpTextures.offset = (pMga->buffers.offset +
-                                    pMga->buffers.size);
-
-   pMga->agpTextures.size = pMga->agp.size -
-                                     pMga->agpTextures.offset;
-
-   if ( drmAgpAcquire( ctx->drmFD ) < 0 ) {
-     fprintf( stderr, "[agp] AGP not available\n" );
-      return 0;
-   }
-
-   mode   = drmAgpGetMode( ctx->drmFD );        /* Default mode */
-   vendor = drmAgpVendorId( ctx->drmFD );
-   device = drmAgpDeviceId( ctx->drmFD );
-
-   mode &= ~MGA_AGP_MODE_MASK;
-   switch ( pMga->agpMode ) {
-   case 4:
-      mode |= MGA_AGP_4X_MODE;
-   case 2:
-      mode |= MGA_AGP_2X_MODE;
-   case 1:
-   default:
-      mode |= MGA_AGP_1X_MODE;
-   }
-
-#if 0
-   fprintf( stderr,
-            "[agp] Mode 0x%08lx [AGP 0x%04x/0x%04x; Card 0x%04x/0x%04x]\n",
-            mode, vendor, device,
-            ctx->pciVendor,
-            ctx->pciChipType );
-#endif
-
-   if ( drmAgpEnable( ctx->drmFD, mode ) < 0 ) {
-     fprintf( stderr, "[agp] AGP not enabled\n" );
-      drmAgpRelease( ctx->drmFD );
-      return 0;
-   }
-
-   if ( pMga->Chipset == PCI_CHIP_MGAG200 ) {
-      switch ( pMga->agpMode ) {
-      case 2:
-	 fprintf( stderr,
-		     "[drm] Enabling AGP 2x PLL encoding\n" );
-	 OUTREG( MGAREG_AGP_PLL, MGA_AGP2XPLL_ENABLE );
-	 break;
-
-      case 1:
-      default:
-	 fprintf( stderr,
-		     "[drm] Disabling AGP 2x PLL encoding\n" );
-	 OUTREG( MGAREG_AGP_PLL, MGA_AGP2XPLL_DISABLE );
-	 pMga->agpMode = 1;
-	 break;
-      }
-   }
-
-   ret = drmAgpAlloc( ctx->drmFD, pMga->agp.size,
-		      0, NULL, &pMga->agp.handle );
-   if ( ret < 0 ) {
-      fprintf( stderr, "[agp] Out of memory (%d)\n", ret );
-      drmAgpRelease( ctx->drmFD );
-      return 0;
-   }
-   fprintf( stderr,
-	       "[agp] %d kB allocated with handle 0x%08x\n",
-	       pMga->agp.size/1024, (unsigned int)pMga->agp.handle );
-
-   if ( drmAgpBind( ctx->drmFD, pMga->agp.handle, 0 ) < 0 ) {
-      fprintf( stderr, "[agp] Could not bind memory\n" );
-      drmAgpFree( ctx->drmFD, pMga->agp.handle );
-      drmAgpRelease( ctx->drmFD );
-      return 0;
-   }
-
-   /* WARP microcode space
-    */
-   if ( drmAddMap( ctx->drmFD,
-		   pMga->warp.offset,
-		   pMga->warp.size,
-		   DRM_AGP, DRM_READ_ONLY,
-		   &pMga->warp.handle ) < 0 ) {
-      fprintf( stderr,
-		  "[agp] Could not add WARP microcode mapping\n" );
-      return 0;
-   }
-   fprintf( stderr,
- 	       "[agp] WARP microcode handle = 0x%08x\n",
-	       pMga->warp.handle );
-
-   if ( drmMap( ctx->drmFD,
-		pMga->warp.handle,
-		pMga->warp.size,
-		&pMga->warp.map ) < 0 ) {
-      fprintf( stderr,
-		  "[agp] Could not map WARP microcode\n" );
-      return 0;
-   }
-   fprintf( stderr,
-	       "[agp] WARP microcode mapped at 0x%08lx\n",
-	       (unsigned long)pMga->warp.map );
-
-   /* Primary DMA space
-    */
-   if ( drmAddMap( ctx->drmFD,
-		   pMga->primary.offset,
-		   pMga->primary.size,
-		   DRM_AGP, DRM_READ_ONLY,
-		   &pMga->primary.handle ) < 0 ) {
-      fprintf( stderr,
-		  "[agp] Could not add primary DMA mapping\n" );
-      return 0;
-   }
-   fprintf( stderr,
- 	       "[agp] Primary DMA handle = 0x%08x\n",
-	       pMga->primary.handle );
-
-   if ( drmMap( ctx->drmFD,
-		pMga->primary.handle,
-		pMga->primary.size,
-		&pMga->primary.map ) < 0 ) {
-      fprintf( stderr,
-		  "[agp] Could not map primary DMA\n" );
-      return 0;
-   }
-   fprintf( stderr,
-	       "[agp] Primary DMA mapped at 0x%08lx\n",
-	       (unsigned long)pMga->primary.map );
-
-   /* DMA buffers
-    */
-   if ( drmAddMap( ctx->drmFD,
-		   pMga->buffers.offset,
-		   pMga->buffers.size,
-		   DRM_AGP, 0,
-		   &pMga->buffers.handle ) < 0 ) {
-      fprintf( stderr,
-		  "[agp] Could not add DMA buffers mapping\n" );
-      return 0;
-   }
-   fprintf( stderr,
- 	       "[agp] DMA buffers handle = 0x%08x\n",
-	       pMga->buffers.handle );
-
-   if ( drmMap( ctx->drmFD,
-		pMga->buffers.handle,
-		pMga->buffers.size,
-		&pMga->buffers.map ) < 0 ) {
-      fprintf( stderr,
-		  "[agp] Could not map DMA buffers\n" );
-      return 0;
-   }
-   fprintf( stderr,
-	       "[agp] DMA buffers mapped at 0x%08lx\n",
-	       (unsigned long)pMga->buffers.map );
-
-   count = drmAddBufs( ctx->drmFD,
-		       MGA_NUM_BUFFERS, MGA_BUFFER_SIZE,
-		       DRM_AGP_BUFFER, pMga->buffers.offset );
-   if ( count <= 0 ) {
-      fprintf( stderr,
-		  "[drm] failure adding %d %d byte DMA buffers\n",
-		  MGA_NUM_BUFFERS, MGA_BUFFER_SIZE );
-      return 0;
-   }
-   fprintf( stderr,
-	       "[drm] Added %d %d byte DMA buffers\n",
-	       count, MGA_BUFFER_SIZE );
-
-   i = mylog2(pMga->agpTextures.size / MGA_NR_TEX_REGIONS);
-   if(i < MGA_LOG_MIN_TEX_REGION_SIZE)
-      i = MGA_LOG_MIN_TEX_REGION_SIZE;
-   pMga->agpTextures.size = (pMga->agpTextures.size >> i) << i;
-
-   if ( drmAddMap( ctx->drmFD,
-                   pMga->agpTextures.offset,
-                   pMga->agpTextures.size,
-                   DRM_AGP, 0,
-                   &pMga->agpTextures.handle ) < 0 ) {
-      fprintf( stderr,
-                  "[agp] Could not add agpTexture mapping\n" );
-      return 0;
-   }
-/* should i map it ? */
-   fprintf( stderr,
-               "[agp] agpTexture handle = 0x%08x\n",
-               pMga->agpTextures.handle );
-   fprintf( stderr,
-               "[agp] agpTexture size: %d kb\n", pMga->agpTextures.size/1024 );
-
-   return 1;
-}
-
-static int MGADRIMapInit( struct DRIDriverContextRec *ctx, MGAPtr pMga )
-{
-   pMga->registers.size = MGAIOMAPSIZE;
-
-   if ( drmAddMap( ctx->drmFD,
-		   (drm_handle_t)pMga->IOAddress,
-		   pMga->registers.size,
-		   DRM_REGISTERS, DRM_READ_ONLY,
-		   &pMga->registers.handle ) < 0 ) {
-      fprintf( stderr,
-		  "[drm] Could not add MMIO registers mapping\n" );
-      return 0;
-   }
-   fprintf( stderr,
-	       "[drm] Registers handle = 0x%08lx\n",
-	       pMga->registers.handle );
-
-   pMga->status.size = SAREA_MAX;
-
-   if ( drmAddMap( ctx->drmFD, 0, pMga->status.size,
-		   DRM_SHM, DRM_READ_ONLY | DRM_LOCKED | DRM_KERNEL,
-		   &pMga->status.handle ) < 0 ) {
-      fprintf( stderr,
-		  "[drm] Could not add status page mapping\n" );
-      return 0;
-   }
-   fprintf( stderr,
- 	       "[drm] Status handle = 0x%08x\n",
-	       pMga->status.handle );
-
-   if ( drmMap( ctx->drmFD,
-		pMga->status.handle,
-		pMga->status.size,
-		&pMga->status.map ) < 0 ) {
-      fprintf( stderr,
-		  "[agp] Could not map status page\n" );
-      return 0;
-   }
-   fprintf( stderr,
-	       "[agp] Status page mapped at 0x%08lx\n",
-	       (unsigned long)pMga->status.map );
-
-   return 1;
-}
-
-static int MGADRIKernelInit( struct DRIDriverContextRec *ctx, MGAPtr pMga )
-{
-   drm_mga_init_t init;
-   int ret;
-
-   memset( &init, 0, sizeof(init) );
-
-   init.func = MGA_INIT_DMA;
-   init.sarea_priv_offset = sizeof(drm_sarea_t);
-
-   switch ( pMga->Chipset ) {
-   case PCI_CHIP_MGAG550:
-   case PCI_CHIP_MGAG400:
-      init.chipset = MGA_CARD_TYPE_G400;
-      break;
-   case PCI_CHIP_MGAG200:
-   case PCI_CHIP_MGAG200_PCI:
-      init.chipset = MGA_CARD_TYPE_G200;
-      break;
-   default:
-      return 0;
-   }
-
-   init.sgram = 0; /* FIXME !pMga->HasSDRAM; */
-
-
-   switch (ctx->bpp)
-     {
-     case 16:
-       init.maccess = MGA_MACCESS_PW16;
-       break;
-     case 32:
-       init.maccess = MGA_MACCESS_PW32;
-       break;
-     default:
-       fprintf( stderr, "[mga] invalid bpp (%d)\n", ctx->bpp );
-       return 0;
-     }
-
-
-   init.fb_cpp		= ctx->bpp / 8;
-   init.front_offset	= pMga->frontOffset;
-   init.front_pitch	= pMga->frontPitch / init.fb_cpp;
-   init.back_offset	= pMga->backOffset;
-   init.back_pitch	= pMga->backPitch / init.fb_cpp;
-
-   init.depth_cpp	= ctx->bpp / 8;
-   init.depth_offset	= pMga->depthOffset;
-   init.depth_pitch	= pMga->depthPitch / init.depth_cpp;
-
-   init.texture_offset[0] = pMga->textureOffset;
-   init.texture_size[0] = pMga->textureSize;
-
-   init.fb_offset = ctx->shared.hFrameBuffer;
-   init.mmio_offset = pMga->registers.handle;
-   init.status_offset = pMga->status.handle;
-
-   init.warp_offset = pMga->warp.handle;
-   init.primary_offset = pMga->primary.handle;
-   init.buffers_offset = pMga->buffers.handle;
-
-   init.texture_offset[1] = pMga->agpTextures.handle;
-   init.texture_size[1] = pMga->agpTextures.size;
-
-   ret = drmCommandWrite( ctx->drmFD, DRM_MGA_INIT, &init, sizeof(init));
-   if ( ret < 0 ) {
-      fprintf( stderr,
-		  "[drm] Failed to initialize DMA! (%d)\n", ret );
-      return 0;
-   }
-
-   return 1;
-}
-
-static void MGADRIIrqInit(struct DRIDriverContextRec *ctx, MGAPtr pMga)
-{
-  if (!pMga->irq)
-    {
-      pMga->irq = drmGetInterruptFromBusID(ctx->drmFD,
-                                           ctx->pciBus,
-                                           ctx->pciDevice,
-                                           ctx->pciFunc);
-
-      fprintf(stderr, "[drm] got IRQ %d\n", pMga->irq);
-
-    if((drmCtlInstHandler(ctx->drmFD, pMga->irq)) != 0)
-      {
-        fprintf(stderr,
-                "[drm] failure adding irq handler, "
-                "there is a device already using that irq\n"
-                "[drm] falling back to irq-free operation\n");
-        pMga->irq = 0;
-      }
-    else
-      {
-        pMga->reg_ien = INREG( MGAREG_IEN );
-      }
-    }
-
-  if (pMga->irq)
-    fprintf(stderr,
-            "[drm] dma control initialized, using IRQ %d\n",
-            pMga->irq);
-}
-
-static int MGADRIBuffersInit( struct DRIDriverContextRec *ctx, MGAPtr pMga )
-{
-   pMga->drmBuffers = drmMapBufs( ctx->drmFD );
-   if ( !pMga->drmBuffers )
-     {
-       fprintf( stderr,
-                "[drm] Failed to map DMA buffers list\n" );
-       return 0;
-     }
-   
-   fprintf( stderr,
-            "[drm] Mapped %d DMA buffers\n",
-            pMga->drmBuffers->count );
-
-   return 1;
-}
-
-static int MGAMemoryInit( struct DRIDriverContextRec *ctx, MGAPtr pMga )
-{
-   int        width_bytes = ctx->shared.virtualWidth * ctx->cpp;
-   int        bufferSize  = ((ctx->shared.virtualHeight * width_bytes
-			      + MGA_BUFFER_ALIGN)
-			     & ~MGA_BUFFER_ALIGN);
-   int        depthSize   = ((((ctx->shared.virtualHeight+15) & ~15) * width_bytes
-			      + MGA_BUFFER_ALIGN)
-			     & ~MGA_BUFFER_ALIGN);
-   int        l;
-
-   pMga->frontOffset = 0;
-   pMga->frontPitch = ctx->shared.virtualWidth * ctx->cpp;
-
-   fprintf(stderr, 
-	   "Using %d MB AGP aperture\n", pMga->agpSize);
-   fprintf(stderr, 
-	   "Using %d MB for vertex/indirect buffers\n", pMga->buffers.size>>20);
-   fprintf(stderr, 
-	   "Using %d MB for AGP textures\n", pMga->agpTextures.size>>20);
-
-   /* Front, back and depth buffers - everything else texture??
-    */
-   pMga->textureSize = ctx->shared.fbSize - 2 * bufferSize - depthSize;
-
-   if (pMga->textureSize < 0) 
-      return 0;
-
-   l = mylog2( pMga->textureSize / MGA_NR_TEX_REGIONS );
-   if ( l < MGA_LOG_MIN_TEX_REGION_SIZE )
-      l = MGA_LOG_MIN_TEX_REGION_SIZE;
-
-   /* Round the texture size up to the nearest whole number of
-    * texture regions.  Again, be greedy about this, don't
-    * round down.
-    */
-   pMga->logTextureGranularity = l;
-   pMga->textureSize = (pMga->textureSize >> l) << l;
-
-   /* Set a minimum usable local texture heap size.  This will fit
-    * two 256x256x32bpp textures.
-    */
-   if (pMga->textureSize < 512 * 1024) {
-      pMga->textureOffset = 0;
-      pMga->textureSize = 0;
-   }
-
-   /* Reserve space for textures */
-   pMga->textureOffset = ((ctx->shared.fbSize - pMga->textureSize +
-			   MGA_BUFFER_ALIGN) &
-			  ~MGA_BUFFER_ALIGN);
-
-   /* Reserve space for the shared depth
-    * buffer.
-    */
-   pMga->depthOffset = ((pMga->textureOffset - depthSize +
-			 MGA_BUFFER_ALIGN) &
-			~MGA_BUFFER_ALIGN);
-   pMga->depthPitch = ctx->shared.virtualWidth * ctx->cpp;
-
-   pMga->backOffset = ((pMga->depthOffset - bufferSize +
-			MGA_BUFFER_ALIGN) &
-                        ~MGA_BUFFER_ALIGN);
-   pMga->backPitch = ctx->shared.virtualWidth * ctx->cpp;
-
-
-   fprintf(stderr, 
-	   "Will use back buffer at offset 0x%x\n",
-	   pMga->backOffset);
-   fprintf(stderr, 
-	   "Will use depth buffer at offset 0x%x\n",
-	   pMga->depthOffset);
-   fprintf(stderr, 
-	   "Will use %d kb for textures at offset 0x%x\n",
-	   pMga->textureSize/1024, pMga->textureOffset);
-
-   return 1;
-} 
-
-static int MGACheckDRMVersion( struct DRIDriverContextRec *ctx, MGAPtr pMga )
-{
-  drmVersionPtr version;
-
-  /* Check the MGA DRM version */
-  version = drmGetVersion(ctx->drmFD);
-  if ( version ) {
-    if ( version->version_major != 3 ||
-         version->version_minor < 0 ) {
-            /* incompatible drm version */
-      fprintf( stderr,
-               "[dri] MGADRIScreenInit failed because of a version mismatch.\n"
-               "[dri] mga.o kernel module version is %d.%d.%d but version 3.0.x is needed.\n"
-               "[dri] Disabling DRI.\n",
-               version->version_major,
-               version->version_minor,
-               version->version_patchlevel );
-      drmFreeVersion( version );
-      return 0;
-    }
-    drmFreeVersion( version );
-  }
-
-  return 1;
-}
-
-static void print_client_msg( MGADRIPtr pMGADRI )
-{
-  fprintf( stderr, "chipset:                  %d\n", pMGADRI->chipset );
-
-  fprintf( stderr, "width:                    %d\n", pMGADRI->width );
-  fprintf( stderr, "height:                   %d\n", pMGADRI->height );
-  fprintf( stderr, "mem:                      %d\n", pMGADRI->mem );
-  fprintf( stderr, "cpp:                      %d\n", pMGADRI->cpp );
-
-  fprintf( stderr, "agpMode:                  %d\n", pMGADRI->agpMode );
-
-  fprintf( stderr, "frontOffset:              %d\n", pMGADRI->frontOffset );
-  fprintf( stderr, "frontPitch:               %d\n", pMGADRI->frontPitch );
-
-  fprintf( stderr, "backOffset:               %d\n", pMGADRI->backOffset );
-  fprintf( stderr, "backPitch:                %d\n", pMGADRI->backPitch );
-
-  fprintf( stderr, "depthOffset:              %d\n", pMGADRI->depthOffset );
-  fprintf( stderr, "depthPitch:               %d\n", pMGADRI->depthPitch );
-
-  fprintf( stderr, "textureOffset:            %d\n", pMGADRI->textureOffset );
-  fprintf( stderr, "textureSize:              %d\n", pMGADRI->textureSize );
-
-  fprintf( stderr, "logTextureGranularity:    %d\n", pMGADRI->logTextureGranularity );
-  fprintf( stderr, "logAgpTextureGranularity: %d\n", pMGADRI->logAgpTextureGranularity );
-
-  fprintf( stderr, "agpTextureHandle:         %u\n", (unsigned int)pMGADRI->agpTextureOffset );
-  fprintf( stderr, "agpTextureSize:           %u\n", (unsigned int)pMGADRI->agpTextureSize );
-
-#if 0
-   pMGADRI->registers.handle	= pMga->registers.handle;
-   pMGADRI->registers.size	= pMga->registers.size;
-   pMGADRI->status.handle	= pMga->status.handle;
-   pMGADRI->status.size		= pMga->status.size;
-   pMGADRI->primary.handle	= pMga->primary.handle;
-   pMGADRI->primary.size	= pMga->primary.size;
-   pMGADRI->buffers.handle	= pMga->buffers.handle;
-   pMGADRI->buffers.size	= pMga->buffers.size;
-   pMGADRI->sarea_priv_offset = sizeof(drm_sarea_t);
-#endif
-}
-
-static int MGAScreenInit( struct DRIDriverContextRec *ctx, MGAPtr pMga )
-{
-  int       i;
-  int       err;
-  MGADRIPtr pMGADRI;
-
-  usleep(100);
-  /*assert(!ctx->IsClient);*/
-
-   {
-      int  width_bytes = (ctx->shared.virtualWidth * ctx->cpp);
-      int  maxy        = ctx->shared.fbSize / width_bytes;
-
-
-      if (maxy <= ctx->shared.virtualHeight * 3) {
-	 fprintf(stderr, 
-		 "Static buffer allocation failed -- "
-		 "need at least %d kB video memory (have %d kB)\n",
-		 (ctx->shared.virtualWidth * ctx->shared.virtualHeight *
-		  ctx->cpp * 3 + 1023) / 1024,
-		 ctx->shared.fbSize / 1024);
-	 return 0;
-      } 
-   }
-
-   switch(pMga->Chipset) {
-   case PCI_CHIP_MGAG550:
-   case PCI_CHIP_MGAG400:
-   case PCI_CHIP_MGAG200:
-#if 0
-   case PCI_CHIP_MGAG200_PCI:
-#endif
-      break;
-   default:
-      fprintf(stderr, "[drm] Direct rendering only supported with G200/G400/G550 AGP\n");
-      return 0;
-   }
-
-   fprintf( stderr,
-	       "[drm] bpp: %d depth: %d\n",
-            ctx->bpp, ctx->bpp /* FIXME: depth */ );
-
-   if ( (ctx->bpp / 8) != 2 &&
-	(ctx->bpp / 8) != 4 ) {
-      fprintf( stderr,
-		  "[dri] Direct rendering only supported in 16 and 32 bpp modes\n" );
-      return 0;
-   }
-
-   ctx->shared.SAREASize = SAREA_MAX;
-
-
-   /* Note that drmOpen will try to load the kernel module, if needed. */
-   ctx->drmFD = drmOpen("mga", NULL );
-   if (ctx->drmFD < 0) {
-      fprintf(stderr, "[drm] drmOpen failed\n");
-      return 0;
-   }
-
-   if ((err = drmSetBusid(ctx->drmFD, ctx->pciBusID)) < 0) {
-      fprintf(stderr, "[drm] drmSetBusid failed (%d, %s), %s\n",
-	      ctx->drmFD, ctx->pciBusID, strerror(-err));
-      return 0;
-   }
-
-     
-   if (drmAddMap( ctx->drmFD,
-		  0,
-		  ctx->shared.SAREASize,
-		  DRM_SHM,
-		  DRM_CONTAINS_LOCK,
-		  &ctx->shared.hSAREA) < 0)
-   {
-      fprintf(stderr, "[drm] drmAddMap failed\n");
-      return 0;
-   }
-   fprintf(stderr, "[drm] added %d byte SAREA at 0x%08lx\n",
-	   ctx->shared.SAREASize, ctx->shared.hSAREA);
-
-   if (drmMap( ctx->drmFD,
-	       ctx->shared.hSAREA,
-	       ctx->shared.SAREASize,
-	       (drmAddressPtr)(&ctx->pSAREA)) < 0)
-   {
-      fprintf(stderr, "[drm] drmMap failed\n");
-      return 0;
-   }
-   memset(ctx->pSAREA, 0, ctx->shared.SAREASize);
-   fprintf(stderr, "[drm] mapped SAREA 0x%08lx to %p, size %d\n",
-	   ctx->shared.hSAREA, ctx->pSAREA, ctx->shared.SAREASize);
-   
-   /* Need to AddMap the framebuffer and mmio regions here:
-    */
-   if (drmAddMap( ctx->drmFD,
-		  (drm_handle_t)ctx->FBStart,
-		  ctx->FBSize,
-		  DRM_FRAME_BUFFER,
-		  0,
-		  &ctx->shared.hFrameBuffer) < 0)
-   {
-      fprintf(stderr, "[drm] drmAddMap framebuffer failed\n");
-      return 0;
-   }
-   fprintf(stderr, "[drm] framebuffer handle = 0x%08lx\n",
-	   ctx->shared.hFrameBuffer);
-
-
-#if 0 /* will be done in MGADRIMapInit */
-   if (drmAddMap(ctx->drmFD, 
-		 ctx->FixedInfo.mmio_start,
-		 ctx->FixedInfo.mmio_len,
-		 DRM_REGISTERS, 
-		 DRM_READ_ONLY, 
-		 &pMga->registers.handle) < 0) {
-      fprintf(stderr, "[drm] drmAddMap mmio failed\n");	
-      return 0;
-   }
-   fprintf(stderr,
-	   "[drm] register handle = 0x%08lx\n", pMga->registers.handle);
-#endif
-
-
-   /* Check the mga DRM version */
-   if (!MGACheckDRMVersion(ctx, pMga)) {
-      return 0;
-   }
-
-   if ( !MGADRIAgpInit( ctx, pMga ) ) {
-      return 0;
-   }
-
-   if ( !MGADRIMapInit( ctx, pMga ) ) {
-      return 0;
-   }
-
-   /* Memory manager setup */
-   if (!MGAMemoryInit(ctx, pMga)) {
-      return 0;
-   }
-
-
-   /* Create a 'server' context so we can grab the lock for
-    * initialization ioctls.
-    */
-   if ((err = drmCreateContext(ctx->drmFD, &ctx->serverContext)) != 0) {
-      fprintf(stderr, "%s: drmCreateContext failed %d\n", __FUNCTION__, err);
-      return 0;
-   }
-
-   DRM_LOCK(ctx->drmFD, ctx->pSAREA, ctx->serverContext, 0); 
-
-   /* Initialize the kernel data structures */
-   if (!MGADRIKernelInit(ctx, pMga)) {
-      fprintf(stderr, "MGADRIKernelInit failed\n");
-      DRM_UNLOCK(ctx->drmFD, ctx->pSAREA, ctx->serverContext);
-      return 0;
-   }
-
-   /* Initialize the vertex buffers list */
-   if (!MGADRIBuffersInit(ctx, pMga)) {
-      fprintf(stderr, "MGADRIBuffersInit failed\n");
-      DRM_UNLOCK(ctx->drmFD, ctx->pSAREA, ctx->serverContext);
-      return 0;
-   }
-
-   /* Initialize IRQ */
-   MGADRIIrqInit(ctx, pMga);
-
-
-   /* Initialize the SAREA private data structure */
-   {
-      drm_mga_sarea_t *pSAREAPriv;
-      pSAREAPriv = (drm_mga_sarea_t *)(((char*)ctx->pSAREA) + 
-					sizeof(drm_sarea_t));
-      memset(pSAREAPriv, 0, sizeof(*pSAREAPriv));
-   }
-
-   /* Quick hack to clear the front & back buffers.  Could also use
-    * the clear ioctl to do this, but would need to setup hw state
-    * first.
-    */
-   drimemsetio((char *)ctx->FBAddress + pMga->frontOffset,
-	  0,
-	  pMga->frontPitch * ctx->shared.virtualHeight );
-
-   drimemsetio((char *)ctx->FBAddress + pMga->backOffset,
-	  0,
-	  pMga->backPitch * ctx->shared.virtualHeight );
-
-   /* Can release the lock now */
-/*   DRM_UNLOCK(ctx->drmFD, ctx->pSAREA, ctx->serverContext);*/
-
-   /* This is the struct passed to radeon_dri.so for its initialization */
-   ctx->driverClientMsg = malloc(sizeof(MGADRIRec));
-   ctx->driverClientMsgSize = sizeof(MGADRIRec);
-
-   pMGADRI                    = (MGADRIPtr)ctx->driverClientMsg;
-
-
-   switch(pMga->Chipset) {
-   case PCI_CHIP_MGAG550:
-   case PCI_CHIP_MGAG400:
-      pMGADRI->chipset = MGA_CARD_TYPE_G400;
-      break;
-   case PCI_CHIP_MGAG200:
-   case PCI_CHIP_MGAG200_PCI:
-      pMGADRI->chipset = MGA_CARD_TYPE_G200;
-      break;
-   default:
-      return 0;
-   }
-   pMGADRI->width		= ctx->shared.virtualWidth;
-   pMGADRI->height		= ctx->shared.virtualHeight;
-   pMGADRI->mem			= ctx->shared.fbSize;
-   pMGADRI->cpp			= ctx->bpp / 8;
-
-   pMGADRI->agpMode		= pMga->agpMode;
-
-   pMGADRI->frontOffset		= pMga->frontOffset;
-   pMGADRI->frontPitch		= pMga->frontPitch;
-   pMGADRI->backOffset		= pMga->backOffset;
-   pMGADRI->backPitch		= pMga->backPitch;
-   pMGADRI->depthOffset		= pMga->depthOffset;
-   pMGADRI->depthPitch		= pMga->depthPitch;
-   pMGADRI->textureOffset	= pMga->textureOffset;
-   pMGADRI->textureSize		= pMga->textureSize;
-   pMGADRI->logTextureGranularity = pMga->logTextureGranularity;
-
-   i = mylog2( pMga->agpTextures.size / MGA_NR_TEX_REGIONS );
-   if ( i < MGA_LOG_MIN_TEX_REGION_SIZE )
-      i = MGA_LOG_MIN_TEX_REGION_SIZE;
-
-   pMGADRI->logAgpTextureGranularity = i;
-   pMGADRI->agpTextureOffset = (unsigned int)pMga->agpTextures.handle;
-   pMGADRI->agpTextureSize = (unsigned int)pMga->agpTextures.size;
-
-   pMGADRI->registers.handle	= pMga->registers.handle;
-   pMGADRI->registers.size	= pMga->registers.size;
-   pMGADRI->status.handle	= pMga->status.handle;
-   pMGADRI->status.size		= pMga->status.size;
-   pMGADRI->primary.handle	= pMga->primary.handle;
-   pMGADRI->primary.size	= pMga->primary.size;
-   pMGADRI->buffers.handle	= pMga->buffers.handle;
-   pMGADRI->buffers.size	= pMga->buffers.size;
-   pMGADRI->sarea_priv_offset = sizeof(drm_sarea_t);
-
-   print_client_msg( pMGADRI );
-
-   return 1;
-}
-
-
-/**
- * \brief Validate the fbdev mode.
- * 
- * \param ctx display handle.
- *
- * \return one on success, or zero on failure.
- *
- * Saves some registers and returns 1.
- *
- * \sa mgaValidateMode().
- */
-static int mgaValidateMode( const DRIDriverContext *ctx )
-{
-   return 1;
-}
-
-
-/**
- * \brief Examine mode returned by fbdev.
- * 
- * \param ctx display handle.
- *
- * \return one on success, or zero on failure.
- *
- * Restores registers that fbdev has clobbered and returns 1.
- *
- * \sa mgaValidateMode().
- */
-static int mgaPostValidateMode( const DRIDriverContext *ctx )
-{
-   return 1;
-}
-
-
-/**
- * \brief Initialize the framebuffer device mode
- *
- * \param ctx display handle.
- *
- * \return one on success, or zero on failure.
- *
- * Fills in \p info with some default values and some information from \p ctx
- * and then calls MGAScreenInit() for the screen initialization.
- * 
- * Before exiting clears the framebuffer memomry accessing it directly.
- */
-static int mgaInitFBDev( struct DRIDriverContextRec *ctx )
-{
-   MGAPtr pMga = calloc(1, sizeof(*pMga));
-
-   {
-      int  dummy = ctx->shared.virtualWidth;
-
-      switch (ctx->bpp / 8) {
-      case 1: dummy = (ctx->shared.virtualWidth + 127) & ~127; break;
-      case 2: dummy = (ctx->shared.virtualWidth +  31) &  ~31; break;
-      case 3:
-      case 4: dummy = (ctx->shared.virtualWidth +  15) &  ~15; break;
-      }
-
-      ctx->shared.virtualWidth = dummy;
-   }
-
-   ctx->driverPrivate = (void *)pMga;
-   
-   pMga->agpMode       = MGA_DEFAULT_AGP_MODE;
-   pMga->agpSize       = MGA_DEFAULT_AGP_SIZE;
-  
-   pMga->Chipset = ctx->chipset;
-
-   pMga->IOAddress = ctx->MMIOStart;
-   pMga->IOBase    = ctx->MMIOAddress;
-
-   pMga->frontPitch = ctx->shared.virtualWidth * ctx->cpp;
-
-   if (!MGAScreenInit( ctx, pMga ))
-      return 0;
-
-   return 1;
-}
-
-
-/**
- * \brief The screen is being closed, so clean up any state and free any
- * resources used by the DRI.
- *
- * \param ctx display handle.
- *
- * Unmaps the SAREA, closes the DRM device file descriptor and frees the driver
- * private data.
- */
-static void mgaHaltFBDev( struct DRIDriverContextRec *ctx )
-{
-    drmUnmap( ctx->pSAREA, ctx->shared.SAREASize );
-    drmClose(ctx->drmFD);
-
-    if (ctx->driverPrivate) {
-       free(ctx->driverPrivate);
-       ctx->driverPrivate = NULL;
-    }
-}
-
-
-static int mgaEngineShutdown( const DRIDriverContext *ctx )
-{
-   fprintf(stderr, "%s() is not yet implemented!\n", __FUNCTION__);
-
-   return 1;
-}
-
-static int mgaEngineRestore( const DRIDriverContext *ctx )
-{
-   fprintf(stderr, "%s() is not yet implemented!\n", __FUNCTION__);
-
-   return 1;
-}
-
-/**
- * \brief Exported driver interface for Mini GLX.
- *
- * \sa DRIDriverRec.
- */
-struct DRIDriverRec __driDriver = {
-   mgaValidateMode,
-   mgaPostValidateMode,
-   mgaInitFBDev,
-   mgaHaltFBDev,
-   mgaEngineShutdown,
-   mgaEngineRestore,
-   0
-};
-
-
-
-
-#if 0
-void MGADRICloseScreen( ScreenPtr pScreen )
-{
-   ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
-   MGAPtr pMga = MGAPTR(pScrn);
-   MGADRIServerPrivatePtr pMga = pMga->DRIServerInfo;
-   drmMGAInit init;
-
-   if ( pMga->drmBuffers ) {
-      drmUnmapBufs( pMga->drmBuffers );
-      pMga->drmBuffers = NULL;
-   }
-
-   if (pMga->irq) {
-      drmCtlUninstHandler(ctx->drmFD);
-      pMga->irq = 0;
-   }
-
-   /* Cleanup DMA */
-   memset( &init, 0, sizeof(drmMGAInit) );
-   init.func = MGA_CLEANUP_DMA;
-   drmCommandWrite( ctx->drmFD, DRM_MGA_INIT, &init, sizeof(drmMGAInit) );
-
-   if ( pMga->status.map ) {
-      drmUnmap( pMga->status.map, pMga->status.size );
-      pMga->status.map = NULL;
-   }
-   if ( pMga->buffers.map ) {
-      drmUnmap( pMga->buffers.map, pMga->buffers.size );
-      pMga->buffers.map = NULL;
-   }
-   if ( pMga->primary.map ) {
-      drmUnmap( pMga->primary.map, pMga->primary.size );
-      pMga->primary.map = NULL;
-   }
-   if ( pMga->warp.map ) {
-      drmUnmap( pMga->warp.map, pMga->warp.size );
-      pMga->warp.map = NULL;
-   }
-
-   if ( pMga->agpTextures.map ) {
-      drmUnmap( pMga->agpTextures.map, pMga->agpTextures.size );
-      pMga->agpTextures.map = NULL;
-   }
-
-   if ( pMga->agp.handle ) {
-      drmAgpUnbind( ctx->drmFD, pMga->agp.handle );
-      drmAgpFree( ctx->drmFD, pMga->agp.handle );
-      pMga->agp.handle = 0;
-      drmAgpRelease( ctx->drmFD );
-   }
-
-   DRICloseScreen( pScreen );
-
-   if ( pMga->pDRIInfo ) {
-      if ( pMga->pDRIpMga->devPrivate ) {
-	 xfree( pMga->pDRIpMga->devPrivate );
-	 pMga->pDRIpMga->devPrivate = 0;
-      }
-      DRIDestroyInfoRec( pMga->pDRIInfo );
-      pMga->pDRIInfo = 0;
-   }
-   if ( pMga->DRIServerInfo ) {
-      xfree( pMga->DRIServerInfo );
-      pMga->DRIServerInfo = 0;
-   }
-   if ( pMga->pVisualConfigs ) {
-      xfree( pMga->pVisualConfigs );
-   }
-   if ( pMga->pVisualConfigsPriv ) {
-      xfree( pMga->pVisualConfigsPriv );
-   }
-}
-#endif
diff --git a/src/mesa/drivers/dri/r128/server/r128_dri.c b/src/mesa/drivers/dri/r128/server/r128_dri.c
deleted file mode 100644
index 6e3db948af..0000000000
--- a/src/mesa/drivers/dri/r128/server/r128_dri.c
+++ /dev/null
@@ -1,1112 +0,0 @@
-/*
- * Copyright 1999, 2000 ATI Technologies Inc., Markham, Ontario,
- *                      Precision Insight, Inc., Cedar Park, Texas, and
- *                      VA Linux Systems Inc., Fremont, California.
- *
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation on the rights to use, copy, modify, merge,
- * publish, distribute, sublicense, and/or sell copies of the Software,
- * and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial
- * portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NON-INFRINGEMENT.  IN NO EVENT SHALL ATI, PRECISION INSIGHT, VA LINUX
- * SYSTEMS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * Authors:
- *   Kevin E. Martin <martin@valinux.com>
- *   Rickard E. Faith <faith@valinux.com>
- *   Daryll Strauss <daryll@valinux.com>
- *   Gareth Hughes <gareth@valinux.com>
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-// Fix this to use kernel pci_ids.h when all of these IDs make it into the kernel 
-#include "pci_ids.h"
-
-#include "driver.h"
-#include "drm.h"
-#include "memops.h"
-
-#include "r128.h"
-#include "r128_dri.h"
-#include "r128_macros.h"
-#include "r128_reg.h"
-#include "r128_version.h"
-#include "r128_drm.h"
-
-static size_t r128_drm_page_size;
-
-/* Compute log base 2 of val. */
-static int R128MinBits(int val)
-{
-    int bits;
-
-    if (!val) return 1;
-    for (bits = 0; val; val >>= 1, ++bits);
-    return bits;
-}
-
-/* Initialize the AGP state.  Request memory for use in AGP space, and
-   initialize the Rage 128 registers to point to that memory. */
-static GLboolean R128DRIAgpInit(const DRIDriverContext *ctx)
-{
-    unsigned char *R128MMIO = ctx->MMIOAddress;
-    R128InfoPtr info = ctx->driverPrivate;
-    unsigned long mode;
-    unsigned int  vendor, device;
-    int           ret;
-    unsigned long cntl, chunk;
-    int           s, l;
-    int           flags;
-    unsigned long agpBase;
-
-    if (drmAgpAcquire(ctx->drmFD) < 0) {
-	fprintf(stderr, "[agp] AGP not available\n");
-	return GL_FALSE;
-    }
-
-				/* Modify the mode if the default mode is
-				   not appropriate for this particular
-				   combination of graphics card and AGP
-				   chipset. */
-
-    mode   = drmAgpGetMode(ctx->drmFD);        /* Default mode */
-    vendor = drmAgpVendorId(ctx->drmFD);
-    device = drmAgpDeviceId(ctx->drmFD);
-
-    mode &= ~R128_AGP_MODE_MASK;
-    switch (info->agpMode) {
-    case 4:          mode |= R128_AGP_4X_MODE;
-    case 2:          mode |= R128_AGP_2X_MODE;
-    case 1: default: mode |= R128_AGP_1X_MODE;
-    }
-
-    fprintf(stderr,
-	       "[agp] Mode 0x%08lx [AGP 0x%04x/0x%04x; Card 0x%04x/0x%04x]\n",
-	       mode, vendor, device,
-	       0x1002,
-	       info->Chipset);
-
-    if (drmAgpEnable(ctx->drmFD, mode) < 0) {
-	fprintf(stderr, "[agp] AGP not enabled\n");
-	drmAgpRelease(ctx->drmFD);
-	return GL_FALSE;
-    }
-
-    info->agpOffset = 0;
-
-    if ((ret = drmAgpAlloc(ctx->drmFD, info->agpSize*1024*1024, 0, NULL,
-			   &info->agpMemHandle)) < 0) {
-	fprintf(stderr, "[agp] Out of memory (%d)\n", ret);
-	drmAgpRelease(ctx->drmFD);
-	return GL_FALSE;
-    }
-    fprintf(stderr,
-	       "[agp] %d kB allocated with handle 0x%08x\n",
-	       info->agpSize*1024, info->agpMemHandle);
-
-    if (drmAgpBind(ctx->drmFD, info->agpMemHandle, info->agpOffset) < 0) {
-	fprintf(stderr, "[agp] Could not bind\n");
-	drmAgpFree(ctx->drmFD, info->agpMemHandle);
-	drmAgpRelease(ctx->drmFD);
-	return GL_FALSE;
-    }
-
-				/* Initialize the CCE ring buffer data */
-    info->ringStart       = info->agpOffset;
-    info->ringMapSize     = info->ringSize*1024*1024 + r128_drm_page_size;
-    info->ringSizeLog2QW  = R128MinBits(info->ringSize*1024*1024/8) - 1;
-
-    info->ringReadOffset  = info->ringStart + info->ringMapSize;
-    info->ringReadMapSize = r128_drm_page_size;
-
-				/* Reserve space for vertex/indirect buffers */
-    info->bufStart        = info->ringReadOffset + info->ringReadMapSize;
-    info->bufMapSize      = info->bufSize*1024*1024;
-
-				/* Reserve the rest for AGP textures */
-    info->agpTexStart     = info->bufStart + info->bufMapSize;
-    s = (info->agpSize*1024*1024 - info->agpTexStart);
-    l = R128MinBits((s-1) / R128_NR_TEX_REGIONS);
-    if (l < R128_LOG_TEX_GRANULARITY) l = R128_LOG_TEX_GRANULARITY;
-    info->agpTexMapSize   = (s >> l) << l;
-    info->log2AGPTexGran  = l;
-
-    if (info->CCESecure) flags = DRM_READ_ONLY;
-    else                  flags = 0;
-
-    if (drmAddMap(ctx->drmFD, info->ringStart, info->ringMapSize,
-		  DRM_AGP, flags, &info->ringHandle) < 0) {
-	fprintf(stderr,
-		   "[agp] Could not add ring mapping\n");
-	return GL_FALSE;
-    }
-    fprintf(stderr,
-	       "[agp] ring handle = 0x%08x\n", info->ringHandle);
-
-    if (drmMap(ctx->drmFD, info->ringHandle, info->ringMapSize,
-	       (drmAddressPtr)&info->ring) < 0) {
-	fprintf(stderr, "[agp] Could not map ring\n");
-	return GL_FALSE;
-    }
-    fprintf(stderr,
-	       "[agp] Ring mapped at 0x%08lx\n",
-	       (unsigned long)info->ring);
-
-    if (drmAddMap(ctx->drmFD, info->ringReadOffset, info->ringReadMapSize,
-		  DRM_AGP, flags, &info->ringReadPtrHandle) < 0) {
-	fprintf(stderr,
-		   "[agp] Could not add ring read ptr mapping\n");
-	return GL_FALSE;
-    }
-    fprintf(stderr,
- 	       "[agp] ring read ptr handle = 0x%08x\n",
-	       info->ringReadPtrHandle);
-
-    if (drmMap(ctx->drmFD, info->ringReadPtrHandle, info->ringReadMapSize,
-	       (drmAddressPtr)&info->ringReadPtr) < 0) {
-	fprintf(stderr,
-		   "[agp] Could not map ring read ptr\n");
-	return GL_FALSE;
-    }
-    fprintf(stderr,
-	       "[agp] Ring read ptr mapped at 0x%08lx\n",
-	       (unsigned long)info->ringReadPtr);
-
-    if (drmAddMap(ctx->drmFD, info->bufStart, info->bufMapSize,
-		  DRM_AGP, 0, &info->bufHandle) < 0) {
-	fprintf(stderr,
-		   "[agp] Could not add vertex/indirect buffers mapping\n");
-	return GL_FALSE;
-    }
-    fprintf(stderr,
-	       "[agp] vertex/indirect buffers handle = 0x%08lx\n",
-	       info->bufHandle);
-
-    if (drmMap(ctx->drmFD, info->bufHandle, info->bufMapSize,
-	       (drmAddressPtr)&info->buf) < 0) {
-	fprintf(stderr,
-		   "[agp] Could not map vertex/indirect buffers\n");
-	return GL_FALSE;
-    }
-    fprintf(stderr,
-	       "[agp] Vertex/indirect buffers mapped at 0x%08lx\n",
-	       (unsigned long)info->buf);
-
-    if (drmAddMap(ctx->drmFD, info->agpTexStart, info->agpTexMapSize,
-		  DRM_AGP, 0, &info->agpTexHandle) < 0) {
-	fprintf(stderr,
-		   "[agp] Could not add AGP texture map mapping\n");
-	return GL_FALSE;
-    }
-    fprintf(stderr,
-	       "[agp] AGP texture map handle = 0x%08lx\n",
-	       info->agpTexHandle);
-
-    if (drmMap(ctx->drmFD, info->agpTexHandle, info->agpTexMapSize,
-	       (drmAddressPtr)&info->agpTex) < 0) {
-	fprintf(stderr,
-		   "[agp] Could not map AGP texture map\n");
-	return GL_FALSE;
-    }
-    fprintf(stderr,
-	       "[agp] AGP Texture map mapped at 0x%08lx\n",
-	       (unsigned long)info->agpTex);
-
-				/* Initialize Rage 128's AGP registers */
-    cntl  = INREG(R128_AGP_CNTL);
-    cntl &= ~R128_AGP_APER_SIZE_MASK;
-    switch (info->agpSize) {
-    case 256: cntl |= R128_AGP_APER_SIZE_256MB; break;
-    case 128: cntl |= R128_AGP_APER_SIZE_128MB; break;
-    case  64: cntl |= R128_AGP_APER_SIZE_64MB;  break;
-    case  32: cntl |= R128_AGP_APER_SIZE_32MB;  break;
-    case  16: cntl |= R128_AGP_APER_SIZE_16MB;  break;
-    case   8: cntl |= R128_AGP_APER_SIZE_8MB;   break;
-    case   4: cntl |= R128_AGP_APER_SIZE_4MB;   break;
-    default:
-	fprintf(stderr,
-		   "[agp] Illegal aperture size %d kB\n",
-		   info->agpSize*1024);
-	return GL_FALSE;
-    }
-    agpBase = drmAgpBase(ctx->drmFD);
-    OUTREG(R128_AGP_BASE, agpBase); 
-    OUTREG(R128_AGP_CNTL, cntl);
-
-				/* Disable Rage 128's PCIGART registers */
-    chunk = INREG(R128_BM_CHUNK_0_VAL);
-    chunk &= ~(R128_BM_PTR_FORCE_TO_PCI |
-	       R128_BM_PM4_RD_FORCE_TO_PCI |
-	       R128_BM_GLOBAL_FORCE_TO_PCI);
-    OUTREG(R128_BM_CHUNK_0_VAL, chunk);
-
-    OUTREG(R128_PCI_GART_PAGE, 1); /* Ensure AGP GART is used (for now) */
-
-    return GL_TRUE;
-}
-
-static GLboolean R128DRIPciInit(const DRIDriverContext *ctx)
-{
-    R128InfoPtr info = ctx->driverPrivate;
-    unsigned char *R128MMIO = ctx->MMIOAddress;
-    uint32_t chunk;
-    int ret;
-    int flags;
-
-    info->agpOffset = 0;
-
-    ret = drmScatterGatherAlloc(ctx->drmFD, info->agpSize*1024*1024,
-				&info->pciMemHandle);
-    if (ret < 0) {
-	fprintf(stderr, "[pci] Out of memory (%d)\n", ret);
-	return GL_FALSE;
-    }
-    fprintf(stderr,
-	       "[pci] %d kB allocated with handle 0x%08x\n",
-	       info->agpSize*1024, info->pciMemHandle);
-
-				/* Initialize the CCE ring buffer data */
-    info->ringStart       = info->agpOffset;
-    info->ringMapSize     = info->ringSize*1024*1024 + r128_drm_page_size;
-    info->ringSizeLog2QW  = R128MinBits(info->ringSize*1024*1024/8) - 1;
-
-    info->ringReadOffset  = info->ringStart + info->ringMapSize;
-    info->ringReadMapSize = r128_drm_page_size;
-
-				/* Reserve space for vertex/indirect buffers */
-    info->bufStart        = info->ringReadOffset + info->ringReadMapSize;
-    info->bufMapSize      = info->bufSize*1024*1024;
-
-    flags = DRM_READ_ONLY | DRM_LOCKED | DRM_KERNEL;
-
-    if (drmAddMap(ctx->drmFD, info->ringStart, info->ringMapSize,
-		  DRM_SCATTER_GATHER, flags, &info->ringHandle) < 0) {
-	fprintf(stderr,
-		   "[pci] Could not add ring mapping\n");
-	return GL_FALSE;
-    }
-    fprintf(stderr,
-	       "[pci] ring handle = 0x%08lx\n", info->ringHandle);
-
-    if (drmMap(ctx->drmFD, info->ringHandle, info->ringMapSize,
-	       (drmAddressPtr)&info->ring) < 0) {
-	fprintf(stderr, "[pci] Could not map ring\n");
-	return GL_FALSE;
-    }
-    fprintf(stderr,
-	       "[pci] Ring mapped at 0x%08lx\n",
-	       (unsigned long)info->ring);
-    fprintf(stderr,
-	       "[pci] Ring contents 0x%08lx\n",
-	       *(unsigned long *)info->ring);
-
-    if (drmAddMap(ctx->drmFD, info->ringReadOffset, info->ringReadMapSize,
-		  DRM_SCATTER_GATHER, flags, &info->ringReadPtrHandle) < 0) {
-	fprintf(stderr,
-		   "[pci] Could not add ring read ptr mapping\n");
-	return GL_FALSE;
-    }
-    fprintf(stderr,
-	       "[pci] ring read ptr handle = 0x%08lx\n",
-	       info->ringReadPtrHandle);
-
-    if (drmMap(ctx->drmFD, info->ringReadPtrHandle, info->ringReadMapSize,
-	       (drmAddressPtr)&info->ringReadPtr) < 0) {
-	fprintf(stderr,
-		   "[pci] Could not map ring read ptr\n");
-	return GL_FALSE;
-    }
-    fprintf(stderr,
-	       "[pci] Ring read ptr mapped at 0x%08lx\n",
-	       (unsigned long)info->ringReadPtr);
-    fprintf(stderr,
-	       "[pci] Ring read ptr contents 0x%08lx\n",
-	       *(unsigned long *)info->ringReadPtr);
-
-    if (drmAddMap(ctx->drmFD, info->bufStart, info->bufMapSize,
-		  DRM_SCATTER_GATHER, 0, &info->bufHandle) < 0) {
-	fprintf(stderr,
-		   "[pci] Could not add vertex/indirect buffers mapping\n");
-	return GL_FALSE;
-    }
-    fprintf(stderr,
-	       "[pci] vertex/indirect buffers handle = 0x%08lx\n",
-	       info->bufHandle);
-
-    if (drmMap(ctx->drmFD, info->bufHandle, info->bufMapSize,
-	       (drmAddressPtr)&info->buf) < 0) {
-	fprintf(stderr,
-		   "[pci] Could not map vertex/indirect buffers\n");
-	return GL_FALSE;
-    }
-    fprintf(stderr,
-	       "[pci] Vertex/indirect buffers mapped at 0x%08lx\n",
-	       (unsigned long)info->buf);
-    fprintf(stderr,
-	       "[pci] Vertex/indirect buffers contents 0x%08lx\n",
-	       *(unsigned long *)info->buf);
-
-    if (!info->IsPCI) {
-	/* This is really an AGP card, force PCI GART mode */
-        chunk = INREG(R128_BM_CHUNK_0_VAL);
-        chunk |= (R128_BM_PTR_FORCE_TO_PCI |
-		  R128_BM_PM4_RD_FORCE_TO_PCI |
-		  R128_BM_GLOBAL_FORCE_TO_PCI);
-        OUTREG(R128_BM_CHUNK_0_VAL, chunk);
-        OUTREG(R128_PCI_GART_PAGE, 0); /* Ensure PCI GART is used */
-    }
-
-    return GL_TRUE;
-}
-
-/* Add a map for the MMIO registers that will be accessed by any
-   DRI-based clients. */
-static GLboolean R128DRIMapInit(const DRIDriverContext *ctx)
-{
-    R128InfoPtr info = ctx->driverPrivate;
-    int flags;
-
-    if (info->CCESecure) flags = DRM_READ_ONLY;
-    else                 flags = 0;
-
-				/* Map registers */
-    if (drmAddMap(ctx->drmFD, ctx->MMIOStart, ctx->MMIOSize,
-		  DRM_REGISTERS, flags, &info->registerHandle) < 0) {
-	return GL_FALSE;
-    }
-    fprintf(stderr,
-	       "[drm] register handle = 0x%08x\n", info->registerHandle);
-
-    return GL_TRUE;
-}
-
-/* Initialize the kernel data structures. */
-static int R128DRIKernelInit(const DRIDriverContext *ctx)
-{
-    R128InfoPtr info = ctx->driverPrivate;
-    drm_r128_init_t drmInfo;
-
-    memset( &drmInfo, 0, sizeof(&drmInfo) );
-
-    drmInfo.func                = R128_INIT_CCE;
-    drmInfo.sarea_priv_offset   = sizeof(drm_sarea_t);
-    drmInfo.is_pci              = info->IsPCI;
-    drmInfo.cce_mode            = info->CCEMode;
-    drmInfo.cce_secure          = info->CCESecure;
-    drmInfo.ring_size           = info->ringSize*1024*1024;
-    drmInfo.usec_timeout        = info->CCEusecTimeout;
-
-    drmInfo.fb_bpp              = ctx->bpp;
-    drmInfo.depth_bpp           = ctx->bpp;
-
-    drmInfo.front_offset        = info->frontOffset;
-    drmInfo.front_pitch         = info->frontPitch;
-
-    drmInfo.back_offset         = info->backOffset;
-    drmInfo.back_pitch          = info->backPitch;
-
-    drmInfo.depth_offset        = info->depthOffset;
-    drmInfo.depth_pitch         = info->depthPitch;
-    drmInfo.span_offset         = info->spanOffset;
-
-    drmInfo.fb_offset           = info->LinearAddr;
-    drmInfo.mmio_offset         = info->registerHandle;
-    drmInfo.ring_offset         = info->ringHandle;
-    drmInfo.ring_rptr_offset    = info->ringReadPtrHandle;
-    drmInfo.buffers_offset      = info->bufHandle;
-    drmInfo.agp_textures_offset = info->agpTexHandle;
-
-    if (drmCommandWrite(ctx->drmFD, DRM_R128_INIT,
-                        &drmInfo, sizeof(drmInfo)) < 0)
-        return GL_FALSE;
-
-    return GL_TRUE;
-}
-
-/* Add a map for the vertex buffers that will be accessed by any
-   DRI-based clients. */
-static GLboolean R128DRIBufInit(const DRIDriverContext *ctx)
-{
-    R128InfoPtr info = ctx->driverPrivate;
-				/* Initialize vertex buffers */
-    if (info->IsPCI) {
-	info->bufNumBufs = drmAddBufs(ctx->drmFD,
-				      info->bufMapSize / R128_BUFFER_SIZE,
-				      R128_BUFFER_SIZE,
-				      DRM_SG_BUFFER,
-				      info->bufStart);
-    } else {
-	info->bufNumBufs = drmAddBufs(ctx->drmFD,
-				      info->bufMapSize / R128_BUFFER_SIZE,
-				      R128_BUFFER_SIZE,
-				      DRM_AGP_BUFFER,
-				      info->bufStart);
-    }
-    if (info->bufNumBufs <= 0) {
-	fprintf(stderr,
-		   "[drm] Could not create vertex/indirect buffers list\n");
-	return GL_FALSE;
-    }
-    fprintf(stderr,
-	       "[drm] Added %d %d byte vertex/indirect buffers\n",
-	       info->bufNumBufs, R128_BUFFER_SIZE);
-
-    if (!(info->buffers = drmMapBufs(ctx->drmFD))) {
-	fprintf(stderr,
-		   "[drm] Failed to map vertex/indirect buffers list\n");
-	return GL_FALSE;
-    }
-    fprintf(stderr,
-	       "[drm] Mapped %d vertex/indirect buffers\n",
-	       info->buffers->count);
-
-    return GL_TRUE;
-}
-
-static void R128DRIIrqInit(const DRIDriverContext *ctx)
-{
-   R128InfoPtr info = ctx->driverPrivate;
-   unsigned char *R128MMIO = ctx->MMIOAddress;
-   
-   if (!info->irq) {
-       info->irq = drmGetInterruptFromBusID(
-	   ctx->drmFD,
-	   ctx->pciBus,
-	   ctx->pciDevice,
-	   ctx->pciFunc);
-
-      if((drmCtlInstHandler(ctx->drmFD, info->irq)) != 0) {
-	 fprintf(stderr,
-		    "[drm] failure adding irq handler, "
-		    "there is a device already using that irq\n"
-		    "[drm] falling back to irq-free operation\n");
-	 info->irq = 0;
-      } else {
-          info->gen_int_cntl = INREG( R128_GEN_INT_CNTL );
-      }
-   }
-
-   if (info->irq)
-      fprintf(stderr,
-		 "[drm] dma control initialized, using IRQ %d\n",
-		 info->irq);
-}
-
-static int R128CCEStop(const DRIDriverContext *ctx)
-{
-    R128InfoPtr info = ctx->driverPrivate;
-    drm_r128_cce_stop_t stop;
-    int            ret, i;
-
-    stop.flush = 1;
-    stop.idle  = 1;
-
-    ret = drmCommandWrite( ctx->drmFD, DRM_R128_CCE_STOP,
-                           &stop, sizeof(stop) );
-
-    if ( ret == 0 ) {
-        return 0;
-    } else if ( errno != EBUSY ) {
-        return -errno;
-    }
-
-    stop.flush = 0;
-
-    i = 0;
-    do {
-        ret = drmCommandWrite( ctx->drmFD, DRM_R128_CCE_STOP,
-                               &stop, sizeof(stop) );
-    } while ( ret && errno == EBUSY && i++ < R128_IDLE_RETRY );
-
-    if ( ret == 0 ) {
-        return 0;
-    } else if ( errno != EBUSY ) {
-        return -errno;
-    }
-
-    stop.idle = 0;
-
-    if ( drmCommandWrite( ctx->drmFD, DRM_R128_CCE_STOP,
-                          &stop, sizeof(stop) )) {
-        return -errno;
-    } else {
-        return 0;
-    }
-}
-
-/* Initialize the CCE state, and start the CCE (if used by the X server) */
-static void R128DRICCEInit(const DRIDriverContext *ctx)
-{
-   R128InfoPtr info = ctx->driverPrivate;
-
-				/* Turn on bus mastering */
-    info->BusCntl &= ~R128_BUS_MASTER_DIS;
-
-				/* CCEMode is initialized in r128_driver.c */
-    switch (info->CCEMode) {
-    case R128_PM4_NONPM4:                 info->CCEFifoSize = 0;   break;
-    case R128_PM4_192PIO:                 info->CCEFifoSize = 192; break;
-    case R128_PM4_192BM:                  info->CCEFifoSize = 192; break;
-    case R128_PM4_128PIO_64INDBM:         info->CCEFifoSize = 128; break;
-    case R128_PM4_128BM_64INDBM:          info->CCEFifoSize = 128; break;
-    case R128_PM4_64PIO_128INDBM:         info->CCEFifoSize = 64;  break;
-    case R128_PM4_64BM_128INDBM:          info->CCEFifoSize = 64;  break;
-    case R128_PM4_64PIO_64VCBM_64INDBM:   info->CCEFifoSize = 64;  break;
-    case R128_PM4_64BM_64VCBM_64INDBM:    info->CCEFifoSize = 64;  break;
-    case R128_PM4_64PIO_64VCPIO_64INDPIO: info->CCEFifoSize = 64;  break;
-    }
-
-    /* Make sure the CCE is on for the X server */
-    R128CCE_START(ctx, info);
-}
-
-
-static int R128MemoryInit(const DRIDriverContext *ctx)
-{
-   R128InfoPtr info = ctx->driverPrivate;
-   int        width_bytes = ctx->shared.virtualWidth * ctx->cpp;
-   int        cpp         = ctx->cpp;
-   int        bufferSize  = ((ctx->shared.virtualHeight * width_bytes
-			      + R128_BUFFER_ALIGN)
-			     & ~R128_BUFFER_ALIGN);
-   int        depthSize   = ((((ctx->shared.virtualHeight+15) & ~15) * width_bytes
-			      + R128_BUFFER_ALIGN)
-			     & ~R128_BUFFER_ALIGN);
-   int        l;
-
-   info->frontOffset = 0;
-   info->frontPitch = ctx->shared.virtualWidth;
-
-   fprintf(stderr, 
-	   "Using %d MB AGP aperture\n", info->agpSize);
-   fprintf(stderr, 
-	   "Using %d MB for the ring buffer\n", info->ringSize);
-   fprintf(stderr, 
-	   "Using %d MB for vertex/indirect buffers\n", info->bufSize);
-   fprintf(stderr, 
-	   "Using %d MB for AGP textures\n", info->agpTexSize);
-
-   /* Front, back and depth buffers - everything else texture??
-    */
-   info->textureSize = ctx->shared.fbSize - 2 * bufferSize - depthSize;
-
-   if (info->textureSize < 0) 
-      return 0;
-
-   l = R128MinBits((info->textureSize-1) / R128_NR_TEX_REGIONS);
-   if (l < R128_LOG_TEX_GRANULARITY) l = R128_LOG_TEX_GRANULARITY;
-
-   /* Round the texture size up to the nearest whole number of
-    * texture regions.  Again, be greedy about this, don't
-    * round down.
-    */
-   info->log2TexGran = l;
-   info->textureSize = (info->textureSize >> l) << l;
-
-   /* Set a minimum usable local texture heap size.  This will fit
-    * two 256x256x32bpp textures.
-    */
-   if (info->textureSize < 512 * 1024) {
-      info->textureOffset = 0;
-      info->textureSize = 0;
-   }
-
-   /* Reserve space for textures */
-   info->textureOffset = ((ctx->shared.fbSize - info->textureSize +
-			   R128_BUFFER_ALIGN) &
-			  ~R128_BUFFER_ALIGN);
-
-   /* Reserve space for the shared depth
-    * buffer.
-    */
-   info->depthOffset = ((info->textureOffset - depthSize +
-			 R128_BUFFER_ALIGN) &
-			~R128_BUFFER_ALIGN);
-   info->depthPitch = ctx->shared.virtualWidth;
-
-   info->backOffset = ((info->depthOffset - bufferSize +
-			R128_BUFFER_ALIGN) &
-		       ~R128_BUFFER_ALIGN);
-   info->backPitch = ctx->shared.virtualWidth;
-
-
-   fprintf(stderr, 
-	   "Will use back buffer at offset 0x%x\n",
-	   info->backOffset);
-   fprintf(stderr, 
-	   "Will use depth buffer at offset 0x%x\n",
-	   info->depthOffset);
-   fprintf(stderr, 
-	   "Will use %d kb for textures at offset 0x%x\n",
-	   info->textureSize/1024, info->textureOffset);
-
-   return 1;
-} 
-
-
-/* Initialize the screen-specific data structures for the DRI and the
-   Rage 128.  This is the main entry point to the device-specific
-   initialization code.  It calls device-independent DRI functions to
-   create the DRI data structures and initialize the DRI state. */
-static GLboolean R128DRIScreenInit(DRIDriverContext *ctx)
-{
-    R128InfoPtr info = ctx->driverPrivate;
-    R128DRIPtr    pR128DRI;
-    int           err, major, minor, patch;
-    drmVersionPtr version;
-    drm_r128_sarea_t *pSAREAPriv;
-
-    switch (ctx->bpp) {
-    case 8:
-	/* These modes are not supported (yet). */
-    case 15:
-    case 24:
-	fprintf(stderr,
-		   "[dri] R128DRIScreenInit failed (depth %d not supported).  "
-		   "[dri] Disabling DRI.\n", ctx->bpp);
-	return GL_FALSE;
-
-	/* Only 16 and 32 color depths are supports currently. */
-    case 16:
-    case 32:
-	break;
-    }
-    r128_drm_page_size = getpagesize();
-    
-    info->registerSize = ctx->MMIOSize;
-    ctx->shared.SAREASize = SAREA_MAX;
-
-    /* Note that drmOpen will try to load the kernel module, if needed. */
-    ctx->drmFD = drmOpen("r128", NULL );
-    if (ctx->drmFD < 0) {
-	fprintf(stderr, "[drm] drmOpen failed\n");
-	return 0;
-    }
-    
-    /* Check the r128 DRM version */
-    version = drmGetVersion(ctx->drmFD);
-    if (version) {
-	if (version->version_major != 2 ||
-	    version->version_minor < 2) {
-	    /* incompatible drm version */
-	    fprintf(stderr,
-		"[dri] R128DRIScreenInit failed because of a version mismatch.\n"
-		"[dri] r128.o kernel module version is %d.%d.%d but version 2.2 or greater is needed.\n"
-		"[dri] Disabling the DRI.\n",
-		version->version_major,
-		version->version_minor,
-		version->version_patchlevel);
-	    drmFreeVersion(version);
-	    return GL_FALSE;
-	}
-	info->drmMinor = version->version_minor;
-	drmFreeVersion(version);
-    }
-    
-    if ((err = drmSetBusid(ctx->drmFD, ctx->pciBusID)) < 0) {
-	fprintf(stderr, "[drm] drmSetBusid failed (%d, %s), %s\n",
-		ctx->drmFD, ctx->pciBusID, strerror(-err));
-	return 0;
-    }
-    
-   if (drmAddMap( ctx->drmFD,
-		  0,
-		  ctx->shared.SAREASize,
-		  DRM_SHM,
-		  DRM_CONTAINS_LOCK,
-		  &ctx->shared.hSAREA) < 0)
-   {
-      fprintf(stderr, "[drm] drmAddMap failed\n");
-      return 0;
-   }
-   fprintf(stderr, "[drm] added %d byte SAREA at 0x%08lx\n",
-	   ctx->shared.SAREASize, ctx->shared.hSAREA);
-
-   if (drmMap( ctx->drmFD,
-	       ctx->shared.hSAREA,
-	       ctx->shared.SAREASize,
-	       (drmAddressPtr)(&ctx->pSAREA)) < 0)
-   {
-      fprintf(stderr, "[drm] drmMap failed\n");
-      return 0;
-   }
-   memset(ctx->pSAREA, 0, ctx->shared.SAREASize);
-   fprintf(stderr, "[drm] mapped SAREA 0x%08lx to %p, size %d\n",
-	   ctx->shared.hSAREA, ctx->pSAREA, ctx->shared.SAREASize);
-   
-   /* Need to AddMap the framebuffer and mmio regions here:
-    */
-   if (drmAddMap( ctx->drmFD,
-		  (drm_handle_t)ctx->FBStart,
-		  ctx->FBSize,
-		  DRM_FRAME_BUFFER,
-		  0,
-		  &ctx->shared.hFrameBuffer) < 0)
-   {
-      fprintf(stderr, "[drm] drmAddMap framebuffer failed\n");
-      return 0;
-   }
-
-   fprintf(stderr, "[drm] framebuffer handle = 0x%08lx\n",
-	   ctx->shared.hFrameBuffer);
-
-   if (!R128MemoryInit(ctx))
-	return GL_FALSE;
-   
-				/* Initialize AGP */
-    if (!info->IsPCI && !R128DRIAgpInit(ctx)) {
-	info->IsPCI = GL_TRUE;
-	fprintf(stderr,
-		   "[agp] AGP failed to initialize -- falling back to PCI mode.\n");
-	fprintf(stderr,
-		   "[agp] Make sure you have the agpgart kernel module loaded.\n");
-    }
-
-				/* Initialize PCIGART */
-    if (info->IsPCI && !R128DRIPciInit(ctx)) {
-	return GL_FALSE;
-    }
-
-				/* DRIScreenInit doesn't add all the
-				   common mappings.  Add additional
-				   mappings here. */
-    if (!R128DRIMapInit(ctx)) {
-	return GL_FALSE;
-    }
-
-   /* Create a 'server' context so we can grab the lock for
-    * initialization ioctls.
-    */
-   if ((err = drmCreateContext(ctx->drmFD, &ctx->serverContext)) != 0) {
-      fprintf(stderr, "%s: drmCreateContext failed %d\n", __FUNCTION__, err);
-      return 0;
-   }
-
-   DRM_LOCK(ctx->drmFD, ctx->pSAREA, ctx->serverContext, 0); 
-
-    /* Initialize the kernel data structures */
-    if (!R128DRIKernelInit(ctx)) {
-	return GL_FALSE;
-    }
-
-    /* Initialize the vertex buffers list */
-    if (!R128DRIBufInit(ctx)) {
-	return GL_FALSE;
-    }
-
-    /* Initialize IRQ */
-    R128DRIIrqInit(ctx);
-
-    /* Initialize and start the CCE if required */
-    R128DRICCEInit(ctx);
-
-   /* Quick hack to clear the front & back buffers.  Could also use
-    * the clear ioctl to do this, but would need to setup hw state
-    * first.
-    */
-   drimemsetio((char *)ctx->FBAddress + info->frontOffset,
-	  0,
-	  info->frontPitch * ctx->cpp * ctx->shared.virtualHeight );
-
-   drimemsetio((char *)ctx->FBAddress + info->backOffset,
-	  0,
-	  info->backPitch * ctx->cpp * ctx->shared.virtualHeight );
-    
-    pSAREAPriv = (drm_r128_sarea_t *)(((char*)ctx->pSAREA) + 
-					sizeof(drm_sarea_t));
-    memset(pSAREAPriv, 0, sizeof(*pSAREAPriv));
-
-   /* This is the struct passed to radeon_dri.so for its initialization */
-   ctx->driverClientMsg = malloc(sizeof(R128DRIRec));
-   ctx->driverClientMsgSize = sizeof(R128DRIRec);
-   
-    pR128DRI                    = (R128DRIPtr)ctx->driverClientMsg;
-    pR128DRI->deviceID          = info->Chipset;
-    pR128DRI->width             = ctx->shared.virtualWidth;
-    pR128DRI->height            = ctx->shared.virtualHeight;
-    pR128DRI->depth             = ctx->bpp;
-    pR128DRI->bpp               = ctx->bpp;
-
-    pR128DRI->IsPCI             = info->IsPCI;
-    pR128DRI->AGPMode           = info->agpMode;
-
-    pR128DRI->frontOffset       = info->frontOffset;
-    pR128DRI->frontPitch        = info->frontPitch;
-    pR128DRI->backOffset        = info->backOffset;
-    pR128DRI->backPitch         = info->backPitch;
-    pR128DRI->depthOffset       = info->depthOffset;
-    pR128DRI->depthPitch        = info->depthPitch;
-    pR128DRI->spanOffset        = info->spanOffset;
-    pR128DRI->textureOffset     = info->textureOffset;
-    pR128DRI->textureSize       = info->textureSize;
-    pR128DRI->log2TexGran       = info->log2TexGran;
-
-    pR128DRI->registerHandle    = info->registerHandle;
-    pR128DRI->registerSize      = info->registerSize;
-
-    pR128DRI->agpTexHandle      = info->agpTexHandle;
-    pR128DRI->agpTexMapSize     = info->agpTexMapSize;
-    pR128DRI->log2AGPTexGran    = info->log2AGPTexGran;
-    pR128DRI->agpTexOffset      = info->agpTexStart;
-    pR128DRI->sarea_priv_offset = sizeof(drm_sarea_t);
-
-    return GL_TRUE;
-}
-
-/* The screen is being closed, so clean up any state and free any
-   resources used by the DRI. */
-void R128DRICloseScreen(const DRIDriverContext *ctx)
-{
-    R128InfoPtr info = ctx->driverPrivate;
-    drm_r128_init_t drmInfo;
-
-    /* Stop the CCE if it is still in use */
-    R128CCE_STOP(ctx, info);
-
-    if (info->irq) {
-	drmCtlUninstHandler(ctx->drmFD);
-	info->irq = 0;
-    }
-
-    /* De-allocate vertex buffers */
-    if (info->buffers) {
-	drmUnmapBufs(info->buffers);
-	info->buffers = NULL;
-    }
-
-    /* De-allocate all kernel resources */
-    memset(&drmInfo, 0, sizeof(drmInfo));
-    drmInfo.func = R128_CLEANUP_CCE;
-    drmCommandWrite(ctx->drmFD, DRM_R128_INIT,
-                    &drmInfo, sizeof(drmInfo));
-
-    /* De-allocate all AGP resources */
-    if (info->agpTex) {
-	drmUnmap(info->agpTex, info->agpTexMapSize);
-	info->agpTex = NULL;
-    }
-    if (info->buf) {
-	drmUnmap(info->buf, info->bufMapSize);
-	info->buf = NULL;
-    }
-    if (info->ringReadPtr) {
-	drmUnmap(info->ringReadPtr, info->ringReadMapSize);
-	info->ringReadPtr = NULL;
-    }
-    if (info->ring) {
-	drmUnmap(info->ring, info->ringMapSize);
-	info->ring = NULL;
-    }
-    if (info->agpMemHandle != DRM_AGP_NO_HANDLE) {
-	drmAgpUnbind(ctx->drmFD, info->agpMemHandle);
-	drmAgpFree(ctx->drmFD, info->agpMemHandle);
-	info->agpMemHandle = 0;
-	drmAgpRelease(ctx->drmFD);
-    }
-    if (info->pciMemHandle) {
-	drmScatterGatherFree(ctx->drmFD, info->pciMemHandle);
-	info->pciMemHandle = 0;
-    }
-}
-
-static GLboolean R128PreInitDRI(const DRIDriverContext *ctx)
-{
-    R128InfoPtr info = ctx->driverPrivate;
-
-    /*info->CCEMode = R128_DEFAULT_CCE_PIO_MODE;*/
-    info->CCEMode = R128_DEFAULT_CCE_BM_MODE;
-    info->CCESecure = GL_TRUE;
-
-    info->agpMode        = R128_DEFAULT_AGP_MODE;
-    info->agpSize        = R128_DEFAULT_AGP_SIZE;
-    info->ringSize       = R128_DEFAULT_RING_SIZE;
-    info->bufSize        = R128_DEFAULT_BUFFER_SIZE;
-    info->agpTexSize     = R128_DEFAULT_AGP_TEX_SIZE;
-
-    info->CCEusecTimeout = R128_DEFAULT_CCE_TIMEOUT;
-
-    return GL_TRUE;
-}
-
-/**
- * \brief Initialize the framebuffer device mode
- *
- * \param ctx display handle.
- *
- * \return one on success, or zero on failure.
- *
- * Fills in \p info with some default values and some information from \p ctx
- * and then calls R128ScreenInit() for the screen initialization.
- * 
- * Before exiting clears the framebuffer memory accessing it directly.
- */
-static int R128InitFBDev( DRIDriverContext *ctx )
-{
-   R128InfoPtr info = calloc(1, sizeof(*info));
-
-   {
-      int  dummy = ctx->shared.virtualWidth;
-
-      switch (ctx->bpp / 8) {
-      case 1: dummy = (ctx->shared.virtualWidth + 127) & ~127; break;
-      case 2: dummy = (ctx->shared.virtualWidth +  31) &  ~31; break;
-      case 3:
-      case 4: dummy = (ctx->shared.virtualWidth +  15) &  ~15; break;
-      }
-
-      ctx->shared.virtualWidth = dummy;
-   }
-
-   ctx->driverPrivate = (void *)info;
-   
-   info->Chipset = ctx->chipset;
-
-   switch (info->Chipset) {
-   case PCI_DEVICE_ID_ATI_RAGE128_LE:
-   case PCI_DEVICE_ID_ATI_RAGE128_RE:
-   case PCI_DEVICE_ID_ATI_RAGE128_RK:
-   case PCI_DEVICE_ID_ATI_RAGE128_PD:
-   case PCI_DEVICE_ID_ATI_RAGE128_PP:
-   case PCI_DEVICE_ID_ATI_RAGE128_PR:
-       /* This is a PCI card */
-       info->IsPCI = GL_TRUE;
-       break;
-   default:
-       /* This is an AGP card */
-       info->IsPCI = GL_FALSE;
-       break;
-   }
-
-   info->frontPitch = ctx->shared.virtualWidth;
-   info->LinearAddr = ctx->FBStart & 0xfc000000;
-   
-   if (!R128PreInitDRI(ctx))
-       return 0;
-
-   if (!R128DRIScreenInit(ctx))
-      return 0;
-
-   return 1;
-}
-
-
-/**
- * \brief The screen is being closed, so clean up any state and free any
- * resources used by the DRI.
- *
- * \param ctx display handle.
- *
- * Unmaps the SAREA, closes the DRM device file descriptor and frees the driver
- * private data.
- */
-static void R128HaltFBDev( DRIDriverContext *ctx )
-{
-    drmUnmap( ctx->pSAREA, ctx->shared.SAREASize );
-    drmClose(ctx->drmFD);
-
-    if (ctx->driverPrivate) {
-       free(ctx->driverPrivate);
-       ctx->driverPrivate = 0;
-    }
-}
-
-
-/**
- * \brief Validate the fbdev mode.
- * 
- * \param ctx display handle.
- *
- * \return one on success, or zero on failure.
- *
- * Saves some registers and returns 1.
- *
- * \sa R128PostValidateMode().
- */
-static int R128ValidateMode( const DRIDriverContext *ctx )
-{
-   return 1;
-}
-
-
-/**
- * \brief Examine mode returned by fbdev.
- * 
- * \param ctx display handle.
- *
- * \return one on success, or zero on failure.
- *
- * Restores registers that fbdev has clobbered and returns 1.
- *
- * \sa R128ValidateMode().
- */
-static int R128PostValidateMode( const DRIDriverContext *ctx )
-{
-   return 1;
-}
-
-
-/**
- * \brief Shutdown the drawing engine.
- *
- * \param ctx display handle
- *
- * Turns off the command processor engine & restores the graphics card
- * to a state that fbdev understands.
- */
-static int R128EngineShutdown( const DRIDriverContext *ctx )
-{
-    return 1;
-}
-
-/**
- * \brief Restore the drawing engine.
- *
- * \param ctx display handle
- *
- * Resets the graphics card and sets initial values for several registers of
- * the card's drawing engine.
- *
- * Turns on the R128 command processor engine (i.e., the ringbuffer).
- */
-static int R128EngineRestore( const DRIDriverContext *ctx )
-{
-   return 1;
-}
-
-
-/**
- * \brief Exported driver interface for Mini GLX.
- *
- * \sa DRIDriverRec.
- */
-const struct DRIDriverRec __driDriver = {
-   R128ValidateMode,
-   R128PostValidateMode,
-   R128InitFBDev,
-   R128HaltFBDev,
-   R128EngineShutdown,
-   R128EngineRestore,  
-   0,
-};
diff --git a/src/mesa/drivers/dri/r200/server/radeon_dri.c b/src/mesa/drivers/dri/r200/server/radeon_dri.c
deleted file mode 120000
index d05847d650..0000000000
--- a/src/mesa/drivers/dri/r200/server/radeon_dri.c
+++ /dev/null
@@ -1 +0,0 @@
-../../radeon/server/radeon_dri.c
\ No newline at end of file
diff --git a/src/mesa/drivers/dri/r300/server/radeon_dri.c b/src/mesa/drivers/dri/r300/server/radeon_dri.c
deleted file mode 120000
index d05847d650..0000000000
--- a/src/mesa/drivers/dri/r300/server/radeon_dri.c
+++ /dev/null
@@ -1 +0,0 @@
-../../radeon/server/radeon_dri.c
\ No newline at end of file
diff --git a/src/mesa/drivers/dri/r600/server/radeon_dri.c b/src/mesa/drivers/dri/r600/server/radeon_dri.c
deleted file mode 120000
index d05847d650..0000000000
--- a/src/mesa/drivers/dri/r600/server/radeon_dri.c
+++ /dev/null
@@ -1 +0,0 @@
-../../radeon/server/radeon_dri.c
\ No newline at end of file
diff --git a/src/mesa/drivers/dri/radeon/server/radeon_dri.c b/src/mesa/drivers/dri/radeon/server/radeon_dri.c
deleted file mode 100644
index 7ead588dac..0000000000
--- a/src/mesa/drivers/dri/radeon/server/radeon_dri.c
+++ /dev/null
@@ -1,1337 +0,0 @@
-/**
- * \file server/radeon_dri.c
- * \brief File to perform the device-specific initialization tasks typically
- * done in the X server.
- *
- * Here they are converted to run in the client (or perhaps a standalone
- * process), and to work with the frame buffer device rather than the X
- * server infrastructure.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-
-#include "driver.h"
-#include "drm.h"
-#include "memops.h"
-
-#include "radeon.h"
-#include "radeon_dri.h"
-#include "radeon_macros.h"
-#include "radeon_reg.h"
-#include "drm_sarea.h"
-
-static size_t radeon_drm_page_size;
-
-static int RadeonSetParam(const DRIDriverContext *ctx, int param, int value)
-{
-   drm_radeon_setparam_t sp;
-
-   memset(&sp, 0, sizeof(sp));
-   sp.param = param;
-   sp.value = value;
-
-   if (drmCommandWrite(ctx->drmFD, DRM_RADEON_SETPARAM, &sp, sizeof(sp))) {
-     return -1;
-   }
-
-   return 0;
-}
-
-/**
- * \brief Wait for free FIFO entries.
- *
- * \param ctx display handle.
- * \param entries number of free entries to wait.
- *
- * It polls the free entries from the chip until it reaches the requested value
- * or a timeout (3000 tries) occurs. Aborts the program if the FIFO times out.
- */
-static void RADEONWaitForFifo( const DRIDriverContext *ctx,
-			       int entries )
-{
-   unsigned char *RADEONMMIO = ctx->MMIOAddress;
-   int i;
-
-   for (i = 0; i < 3000; i++) {
-      int fifo_slots =
-	 INREG(RADEON_RBBM_STATUS) & RADEON_RBBM_FIFOCNT_MASK;
-      if (fifo_slots >= entries) return;
-   }
-
-   /* There are recoveries possible, but I haven't seen them work
-    * in practice:
-    */
-   fprintf(stderr, "FIFO timed out: %d entries, stat=0x%08x\n",
-	   INREG(RADEON_RBBM_STATUS) & RADEON_RBBM_FIFOCNT_MASK,
-	   INREG(RADEON_RBBM_STATUS));
-   exit(1);
-}
-
-/**
- * \brief Read a PLL register.
- *
- * \param ctx display handle.
- * \param addr PLL register index.
- *
- * \return value of the PLL register.
- */
-static unsigned int RADEONINPLL( const DRIDriverContext *ctx, int addr)
-{
-    unsigned char *RADEONMMIO = ctx->MMIOAddress;
-    unsigned int data;
-
-    OUTREG8(RADEON_CLOCK_CNTL_INDEX, addr & 0x3f);
-    data = INREG(RADEON_CLOCK_CNTL_DATA);
-
-    return data;
-}
-
-/**
- * \brief Reset graphics card to known state.
- *
- * \param ctx display handle.
- *
- * Resets the values of several Radeon registers.
- */
-static void RADEONEngineReset( const DRIDriverContext *ctx )
-{
-   unsigned char *RADEONMMIO = ctx->MMIOAddress;
-   unsigned int clock_cntl_index;
-   unsigned int mclk_cntl;
-   unsigned int rbbm_soft_reset;
-   unsigned int host_path_cntl;
-   int i;
-
-   OUTREGP(RADEON_RB2D_DSTCACHE_CTLSTAT,
-	   RADEON_RB2D_DC_FLUSH_ALL,
-	   ~RADEON_RB2D_DC_FLUSH_ALL);
-   for (i = 0; i < 512; i++) {
-      if (!(INREG(RADEON_RB2D_DSTCACHE_CTLSTAT) & RADEON_RB2D_DC_BUSY))
-	 break;
-   }
-
-   clock_cntl_index = INREG(RADEON_CLOCK_CNTL_INDEX);
-
-   mclk_cntl = INPLL(ctx, RADEON_MCLK_CNTL);
-   OUTPLL(RADEON_MCLK_CNTL, (mclk_cntl |
-			     RADEON_FORCEON_MCLKA |
-			     RADEON_FORCEON_MCLKB |
-			     RADEON_FORCEON_YCLKA |
-			     RADEON_FORCEON_YCLKB |
-			     RADEON_FORCEON_MC |
-			     RADEON_FORCEON_AIC));
-
-   /* Soft resetting HDP thru RBBM_SOFT_RESET register can cause some
-    * unexpected behaviour on some machines.  Here we use
-    * RADEON_HOST_PATH_CNTL to reset it.
-    */
-   host_path_cntl = INREG(RADEON_HOST_PATH_CNTL);
-   rbbm_soft_reset = INREG(RADEON_RBBM_SOFT_RESET);
-
-   OUTREG(RADEON_RBBM_SOFT_RESET, (rbbm_soft_reset |
-				   RADEON_SOFT_RESET_CP |
-				   RADEON_SOFT_RESET_HI |
-				   RADEON_SOFT_RESET_SE |
-				   RADEON_SOFT_RESET_RE |
-				   RADEON_SOFT_RESET_PP |
-				   RADEON_SOFT_RESET_E2 |
-				   RADEON_SOFT_RESET_RB));
-   INREG(RADEON_RBBM_SOFT_RESET);
-   OUTREG(RADEON_RBBM_SOFT_RESET, (rbbm_soft_reset & 
-				   (unsigned int) ~(RADEON_SOFT_RESET_CP |
-						    RADEON_SOFT_RESET_HI |
-						    RADEON_SOFT_RESET_SE |
-						    RADEON_SOFT_RESET_RE |
-						    RADEON_SOFT_RESET_PP |
-						    RADEON_SOFT_RESET_E2 |
-						    RADEON_SOFT_RESET_RB)));
-   INREG(RADEON_RBBM_SOFT_RESET);
-
-   OUTREG(RADEON_HOST_PATH_CNTL, host_path_cntl | RADEON_HDP_SOFT_RESET);
-   INREG(RADEON_HOST_PATH_CNTL);
-   OUTREG(RADEON_HOST_PATH_CNTL, host_path_cntl);
-
-   OUTREG(RADEON_RBBM_SOFT_RESET, rbbm_soft_reset);
-
-   OUTREG(RADEON_CLOCK_CNTL_INDEX, clock_cntl_index);
-   OUTPLL(RADEON_MCLK_CNTL, mclk_cntl);
-}
-
-/**
- * \brief Restore the drawing engine.
- *
- * \param ctx display handle
- *
- * Resets the graphics card and sets initial values for several registers of
- * the card's drawing engine.
- *
- * Turns on the radeon command processor engine (i.e., the ringbuffer).
- */
-static int RADEONEngineRestore( const DRIDriverContext *ctx )
-{
-   RADEONInfoPtr info = ctx->driverPrivate;
-   unsigned char *RADEONMMIO = ctx->MMIOAddress;
-   int pitch64, datatype, dp_gui_master_cntl, err;
-
-   fprintf(stderr, "%s\n", __FUNCTION__);
-
-   OUTREG(RADEON_RB3D_CNTL, 0);
-   RADEONEngineReset( ctx );
-
-   switch (ctx->bpp) {
-   case 16: datatype = 4; break;
-   case 32: datatype = 6; break;
-   default: return 0;
-   }
-
-   dp_gui_master_cntl =
-      ((datatype << RADEON_GMC_DST_DATATYPE_SHIFT)
-       | RADEON_GMC_CLR_CMP_CNTL_DIS);
-
-   pitch64 = ((ctx->shared.virtualWidth * (ctx->bpp / 8) + 0x3f)) >> 6;
-
-   RADEONWaitForFifo(ctx, 1);
-   OUTREG(RADEON_DEFAULT_OFFSET, ((INREG(RADEON_DEFAULT_OFFSET) & 0xC0000000)
-				  | (pitch64 << 22)));
-
-   RADEONWaitForFifo(ctx, 1);
-   OUTREG(RADEON_SURFACE_CNTL, RADEON_SURF_TRANSLATION_DIS); 
-
-   RADEONWaitForFifo(ctx, 1);
-   OUTREG(RADEON_DEFAULT_SC_BOTTOM_RIGHT, (RADEON_DEFAULT_SC_RIGHT_MAX
-					   | RADEON_DEFAULT_SC_BOTTOM_MAX));
-
-   RADEONWaitForFifo(ctx, 1);
-   OUTREG(RADEON_DP_GUI_MASTER_CNTL, (dp_gui_master_cntl
-				      | RADEON_GMC_BRUSH_SOLID_COLOR
-				      | RADEON_GMC_SRC_DATATYPE_COLOR));
-
-   RADEONWaitForFifo(ctx, 7);
-   OUTREG(RADEON_DST_LINE_START,    0);
-   OUTREG(RADEON_DST_LINE_END,      0);
-   OUTREG(RADEON_DP_BRUSH_FRGD_CLR, 0xffffffff);
-   OUTREG(RADEON_DP_BRUSH_BKGD_CLR, 0);
-   OUTREG(RADEON_DP_SRC_FRGD_CLR,   0xffffffff);
-   OUTREG(RADEON_DP_SRC_BKGD_CLR,   0);
-   OUTREG(RADEON_DP_WRITE_MASK,     0xffffffff);
-   OUTREG(RADEON_AUX_SC_CNTL,       0);
-
-/*    RADEONWaitForIdleMMIO(ctx); */
-   usleep(100); 
-
-
-   OUTREG(RADEON_GEN_INT_CNTL, info->gen_int_cntl);
-   if (info->colorTiling)
-	   info->crtc_offset_cntl |= RADEON_CRTC_TILE_EN;
-   OUTREG(RADEON_CRTC_OFFSET_CNTL, info->crtc_offset_cntl);
-
-   /* Initialize and start the CP if required */
-   if ((err = drmCommandNone(ctx->drmFD, DRM_RADEON_CP_START)) != 0) {
-      fprintf(stderr, "%s: CP start %d\n", __FUNCTION__, err);
-      return 0;
-   }
-
-   return 1;
-}
-
-
-/**
- * \brief Shutdown the drawing engine.
- *
- * \param ctx display handle
- *
- * Turns off the command processor engine & restores the graphics card
- * to a state that fbdev understands.
- */
-static int RADEONEngineShutdown( const DRIDriverContext *ctx )
-{
-   drm_radeon_cp_stop_t  stop;
-   int              ret, i;
-
-   stop.flush = 1;
-   stop.idle  = 1;
-
-   ret = drmCommandWrite(ctx->drmFD, DRM_RADEON_CP_STOP, &stop, 
-			 sizeof(drm_radeon_cp_stop_t));
-
-   if (ret == 0) {
-      return 0;
-   } else if (errno != EBUSY) {
-      return -errno;
-   }
-
-   stop.flush = 0;
- 
-   i = 0;
-   do {
-      ret = drmCommandWrite(ctx->drmFD, DRM_RADEON_CP_STOP, &stop, 
-			    sizeof(drm_radeon_cp_stop_t));
-   } while (ret && errno == EBUSY && i++ < 10);
-
-   if (ret == 0) {
-      return 0;
-   } else if (errno != EBUSY) {
-      return -errno;
-   }
-
-   stop.idle = 0;
-
-   if (drmCommandWrite(ctx->drmFD, DRM_RADEON_CP_STOP,
-		       &stop, sizeof(drm_radeon_cp_stop_t))) {
-      return -errno;
-   } else {
-      return 0;
-   }
-}
-
-/**
- * \brief Compute base 2 logarithm.
- *
- * \param val value.
- * 
- * \return base 2 logarithm of \p val.
- */
-static int RADEONMinBits(int val)
-{
-   int  bits;
-
-   if (!val) return 1;
-   for (bits = 0; val; val >>= 1, ++bits);
-   return bits;
-}
-
-/**
- * \brief Initialize the AGP state
- *
- * \param ctx display handle.
- * \param info driver private data.
- *
- * \return one on success, or zero on failure.
- * 
- * Acquires and enables the AGP device. Reserves memory in the AGP space for
- * the ring buffer, vertex buffers and textures. Initialize the Radeon
- * registers to point to that memory and add client mappings.
- */
-static int RADEONDRIAgpInit( const DRIDriverContext *ctx, RADEONInfoPtr info)
-{
-   unsigned char *RADEONMMIO = ctx->MMIOAddress;
-   unsigned long  mode;
-   int            ret;
-   int            s, l;
-
-   if (drmAgpAcquire(ctx->drmFD) < 0) {
-      fprintf(stderr, "[gart] AGP not available\n");
-      return 0;
-   }
-    
-   /* Modify the mode if the default mode is not appropriate for this
-    * particular combination of graphics card and AGP chipset.
-    */
-   mode   = drmAgpGetMode(ctx->drmFD);	/* Default mode */
-
-   /* Disable fast write entirely - too many lockups.
-    */
-   mode &= ~RADEON_AGP_MODE_MASK;
-   switch (ctx->agpmode) {
-   case 4:          mode |= RADEON_AGP_4X_MODE;
-   case 2:          mode |= RADEON_AGP_2X_MODE;
-   case 1: default: mode |= RADEON_AGP_1X_MODE;
-   }
-
-   if (drmAgpEnable(ctx->drmFD, mode) < 0) {
-      fprintf(stderr, "[gart] AGP not enabled\n");
-      drmAgpRelease(ctx->drmFD);
-      return 0;
-   }
-   else
-     fprintf(stderr, "[gart] AGP enabled at %dx\n", ctx->agpmode);
-
-   /* Workaround for some hardware bugs */
-   if (info->ChipFamily < CHIP_FAMILY_R200)
-      OUTREG(RADEON_AGP_CNTL, INREG(RADEON_AGP_CNTL) | 0x000e0000);
-
-   info->gartOffset = 0;
-
-   if ((ret = drmAgpAlloc(ctx->drmFD, info->gartSize*1024*1024, 0, NULL,
-			  &info->gartMemHandle)) < 0) {
-      fprintf(stderr, "[gart] Out of memory (%d)\n", ret);
-      drmAgpRelease(ctx->drmFD);
-      return 0;
-   }
-   fprintf(stderr,
-	   "[gart] %d kB allocated with handle 0x%08x\n",
-	   info->gartSize*1024, (unsigned)info->gartMemHandle);
-    
-   if (drmAgpBind(ctx->drmFD,
-		  info->gartMemHandle, info->gartOffset) < 0) {
-      fprintf(stderr, "[gart] Could not bind\n");
-      drmAgpFree(ctx->drmFD, info->gartMemHandle);
-      drmAgpRelease(ctx->drmFD);
-      return 0;
-   }
-
-   /* Initialize the CP ring buffer data */
-   info->ringStart       = info->gartOffset;
-   info->ringMapSize     = info->ringSize*1024*1024 + radeon_drm_page_size;
-
-   info->ringReadOffset  = info->ringStart + info->ringMapSize;
-   info->ringReadMapSize = radeon_drm_page_size;
-
-   /* Reserve space for vertex/indirect buffers */
-   info->bufStart        = info->ringReadOffset + info->ringReadMapSize;
-   info->bufMapSize      = info->bufSize*1024*1024;
-
-   /* Reserve the rest for AGP textures */
-   info->gartTexStart     = info->bufStart + info->bufMapSize;
-   s = (info->gartSize*1024*1024 - info->gartTexStart);
-   l = RADEONMinBits((s-1) / RADEON_NR_TEX_REGIONS);
-   if (l < RADEON_LOG_TEX_GRANULARITY) l = RADEON_LOG_TEX_GRANULARITY;
-   info->gartTexMapSize   = (s >> l) << l;
-   info->log2GARTTexGran  = l;
-
-   if (drmAddMap(ctx->drmFD, info->ringStart, info->ringMapSize,
-		 DRM_AGP, DRM_READ_ONLY, &info->ringHandle) < 0) {
-      fprintf(stderr, "[gart] Could not add ring mapping\n");
-      return 0;
-   }
-   fprintf(stderr, "[gart] ring handle = 0x%08x\n", info->ringHandle);
-    
-
-   if (drmAddMap(ctx->drmFD, info->ringReadOffset, info->ringReadMapSize,
-		 DRM_AGP, DRM_READ_ONLY, &info->ringReadPtrHandle) < 0) {
-      fprintf(stderr,
-	      "[gart] Could not add ring read ptr mapping\n");
-      return 0;
-   }
-    
-   fprintf(stderr,
- 	   "[gart] ring read ptr handle = 0x%08lx\n",
-	   info->ringReadPtrHandle);
-    
-   if (drmAddMap(ctx->drmFD, info->bufStart, info->bufMapSize,
-		 DRM_AGP, 0, &info->bufHandle) < 0) {
-      fprintf(stderr,
-	      "[gart] Could not add vertex/indirect buffers mapping\n");
-      return 0;
-   }
-   fprintf(stderr,
- 	   "[gart] vertex/indirect buffers handle = 0x%08x\n",
-	   info->bufHandle);
-
-   if (drmAddMap(ctx->drmFD, info->gartTexStart, info->gartTexMapSize,
-		 DRM_AGP, 0, &info->gartTexHandle) < 0) {
-      fprintf(stderr,
-	      "[gart] Could not add AGP texture map mapping\n");
-      return 0;
-   }
-   fprintf(stderr,
- 	   "[gart] AGP texture map handle = 0x%08lx\n",
-	   info->gartTexHandle);
-
-   /* Initialize Radeon's AGP registers */
-   /* Ring buffer is at AGP offset 0 */
-   OUTREG(RADEON_AGP_BASE, info->ringHandle);
-
-   return 1;
-}
-
-/* Initialize the PCI GART state.  Request memory for use in PCI space,
- * and initialize the Radeon registers to point to that memory.
- */
-static int RADEONDRIPciInit(const DRIDriverContext *ctx, RADEONInfoPtr info)
-{
-    int  ret;
-    int  flags = DRM_READ_ONLY | DRM_LOCKED | DRM_KERNEL;
-    int            s, l;
-
-    ret = drmScatterGatherAlloc(ctx->drmFD, info->gartSize*1024*1024,
-				&info->gartMemHandle);
-    if (ret < 0) {
-	fprintf(stderr, "[pci] Out of memory (%d)\n", ret);
-	return 0;
-    }
-    fprintf(stderr,
-	       "[pci] %d kB allocated with handle 0x%08lx\n",
-	       info->gartSize*1024, info->gartMemHandle);
-
-   info->gartOffset = 0;
-   
-   /* Initialize the CP ring buffer data */
-   info->ringStart       = info->gartOffset;
-   info->ringMapSize     = info->ringSize*1024*1024 + radeon_drm_page_size;
-
-   info->ringReadOffset  = info->ringStart + info->ringMapSize;
-   info->ringReadMapSize = radeon_drm_page_size;
-
-   /* Reserve space for vertex/indirect buffers */
-   info->bufStart        = info->ringReadOffset + info->ringReadMapSize;
-   info->bufMapSize      = info->bufSize*1024*1024;
-
-   /* Reserve the rest for AGP textures */
-   info->gartTexStart     = info->bufStart + info->bufMapSize;
-   s = (info->gartSize*1024*1024 - info->gartTexStart);
-   l = RADEONMinBits((s-1) / RADEON_NR_TEX_REGIONS);
-   if (l < RADEON_LOG_TEX_GRANULARITY) l = RADEON_LOG_TEX_GRANULARITY;
-   info->gartTexMapSize   = (s >> l) << l;
-   info->log2GARTTexGran  = l;
-
-    if (drmAddMap(ctx->drmFD, info->ringStart, info->ringMapSize,
-		  DRM_SCATTER_GATHER, flags, &info->ringHandle) < 0) {
-	fprintf(stderr,
-		   "[pci] Could not add ring mapping\n");
-	return 0;
-    }
-    fprintf(stderr,
-	       "[pci] ring handle = 0x%08x\n", info->ringHandle);
-
-    if (drmAddMap(ctx->drmFD, info->ringReadOffset, info->ringReadMapSize,
-		  DRM_SCATTER_GATHER, flags, &info->ringReadPtrHandle) < 0) {
-	fprintf(stderr,
-		   "[pci] Could not add ring read ptr mapping\n");
-	return 0;
-    }
-    fprintf(stderr,
- 	       "[pci] ring read ptr handle = 0x%08lx\n",
-	       info->ringReadPtrHandle);
-
-    if (drmAddMap(ctx->drmFD, info->bufStart, info->bufMapSize,
-		  DRM_SCATTER_GATHER, 0, &info->bufHandle) < 0) {
-	fprintf(stderr,
-		   "[pci] Could not add vertex/indirect buffers mapping\n");
-	return 0;
-    }
-    fprintf(stderr,
- 	       "[pci] vertex/indirect buffers handle = 0x%08lx\n",
-	       info->bufHandle);
-
-    if (drmAddMap(ctx->drmFD, info->gartTexStart, info->gartTexMapSize,
-		  DRM_SCATTER_GATHER, 0, &info->gartTexHandle) < 0) {
-	fprintf(stderr,
-		   "[pci] Could not add GART texture map mapping\n");
-	return 0;
-    }
-    fprintf(stderr,
- 	       "[pci] GART texture map handle = 0x%08x\n",
-	       info->gartTexHandle);
-
-    return 1;
-}
-
-
-/**
- * \brief Initialize the kernel data structures and enable the CP engine.
- *
- * \param ctx display handle.
- * \param info driver private data.
- *
- * \return non-zero on success, or zero on failure.
- *
- * This function is a wrapper around the DRM_RADEON_CP_INIT command, passing
- * all the parameters in a drm_radeon_init_t structure.
- */
-static int RADEONDRIKernelInit( const DRIDriverContext *ctx,
-			       RADEONInfoPtr info)
-{
-   int cpp = ctx->bpp / 8;
-   drm_radeon_init_t  drmInfo;
-   int ret;
-
-   memset(&drmInfo, 0, sizeof(drm_radeon_init_t));
-
-   if ( (info->ChipFamily == CHIP_FAMILY_R200) ||
-	(info->ChipFamily == CHIP_FAMILY_RV250) ||
-	(info->ChipFamily == CHIP_FAMILY_M9) ||
-	(info->ChipFamily == CHIP_FAMILY_RV280) )
-      drmInfo.func             = RADEON_INIT_R200_CP;
-   else
-      drmInfo.func             = RADEON_INIT_CP;
-
-   /* This is the struct passed to the kernel module for its initialization */
-   drmInfo.sarea_priv_offset   = sizeof(drm_sarea_t);
-   drmInfo.is_pci              = ctx->isPCI;
-   drmInfo.cp_mode             = RADEON_DEFAULT_CP_BM_MODE;
-   drmInfo.gart_size            = info->gartSize*1024*1024;
-   drmInfo.ring_size           = info->ringSize*1024*1024;
-   drmInfo.usec_timeout        = 1000;
-   drmInfo.fb_bpp              = ctx->bpp;
-   drmInfo.depth_bpp           = ctx->bpp;
-   drmInfo.front_offset        = info->frontOffset;
-   drmInfo.front_pitch         = info->frontPitch * cpp;
-   drmInfo.back_offset         = info->backOffset;
-   drmInfo.back_pitch          = info->backPitch * cpp;
-   drmInfo.depth_offset        = info->depthOffset;
-   drmInfo.depth_pitch         = info->depthPitch * cpp;
-   drmInfo.fb_offset           = info->LinearAddr;
-   drmInfo.mmio_offset         = info->registerHandle;
-   drmInfo.ring_offset         = info->ringHandle;
-   drmInfo.ring_rptr_offset    = info->ringReadPtrHandle;
-   drmInfo.buffers_offset      = info->bufHandle;
-   drmInfo.gart_textures_offset = info->gartTexHandle;
-
-   ret = drmCommandWrite(ctx->drmFD, DRM_RADEON_CP_INIT, &drmInfo, 
-			 sizeof(drm_radeon_init_t));
-
-   return ret >= 0;
-}
-
-
-/**
- * \brief Initialize the AGP heap.
- *
- * \param ctx display handle.
- * \param info driver private data.
- *
- * This function is a wrapper around the DRM_RADEON_INIT_HEAP command, passing
- * all the parameters in a drm_radeon_mem_init_heap structure.
- */
-static void RADEONDRIAgpHeapInit(const DRIDriverContext *ctx,
-				 RADEONInfoPtr info)
-{
-   drm_radeon_mem_init_heap_t drmHeap;
-
-   /* Start up the simple memory manager for gart space */
-   drmHeap.region = RADEON_MEM_REGION_GART;
-   drmHeap.start  = 0;
-   drmHeap.size   = info->gartTexMapSize;
-    
-   if (drmCommandWrite(ctx->drmFD, DRM_RADEON_INIT_HEAP,
-		       &drmHeap, sizeof(drmHeap))) {
-      fprintf(stderr,
-	      "[drm] Failed to initialized gart heap manager\n");
-   } else {
-      fprintf(stderr,
-	      "[drm] Initialized kernel gart heap manager, %d\n",
-	      info->gartTexMapSize);
-   }
-}
-
-/**
- * \brief Add a map for the vertex buffers that will be accessed by any
- * DRI-based clients.
- * 
- * \param ctx display handle.
- * \param info driver private data.
- *
- * \return one on success, or zero on failure.
- *
- * Calls drmAddBufs() with the previously allocated vertex buffers.
- */
-static int RADEONDRIBufInit( const DRIDriverContext *ctx, RADEONInfoPtr info )
-{
-   /* Initialize vertex buffers */
-   info->bufNumBufs = drmAddBufs(ctx->drmFD,
-				 info->bufMapSize / RADEON_BUFFER_SIZE,
-				 RADEON_BUFFER_SIZE,
-				 ctx->isPCI ? DRM_SG_BUFFER : DRM_AGP_BUFFER,
-				 info->bufStart);
-
-   if (info->bufNumBufs <= 0) {
-      fprintf(stderr,
-	      "[drm] Could not create vertex/indirect buffers list\n");
-      return 0;
-   }
-   fprintf(stderr,
-	   "[drm] Added %d %d byte vertex/indirect buffers\n",
-	   info->bufNumBufs, RADEON_BUFFER_SIZE);
-   
-   return 1;
-}
-
-/**
- * \brief Install an IRQ handler.
- * 
- * \param ctx display handle.
- * \param info driver private data.
- *
- * Attempts to install an IRQ handler via drmCtlInstHandler(), falling back to
- * IRQ-free operation on failure.
- */
-static void RADEONDRIIrqInit(const DRIDriverContext *ctx,
-			     RADEONInfoPtr info)
-{
-   if (!info->irq) {
-      info->irq = drmGetInterruptFromBusID(ctx->drmFD,
-					   ctx->pciBus,
-					   ctx->pciDevice,
-					   ctx->pciFunc);
-
-      if ((drmCtlInstHandler(ctx->drmFD, info->irq)) != 0) {
-	 fprintf(stderr,
-		 "[drm] failure adding irq handler, "
-		 "there is a device already using that irq\n"
-		 "[drm] falling back to irq-free operation\n");
-	 info->irq = 0;
-      }
-   }
-
-   if (info->irq)
-      fprintf(stderr,
-	      "[drm] dma control initialized, using IRQ %d\n",
-	      info->irq);
-}
-
-static int RADEONCheckDRMVersion( const DRIDriverContext *ctx,
-				  RADEONInfoPtr info )
-{
-   drmVersionPtr  version;
-
-   version = drmGetVersion(ctx->drmFD);
-   if (version) {
-      int req_minor, req_patch;
-
-      /* Need 1.8.x for proper cleanup-on-client-exit behaviour.
-       */
-      req_minor = 8;
-      req_patch = 0;	
-
-      if (version->version_major != 1 ||
-	  version->version_minor < req_minor ||
-	  (version->version_minor == req_minor && 
-	   version->version_patchlevel < req_patch)) {
-	 /* Incompatible drm version */
-	 fprintf(stderr,
-		 "[dri] RADEONDRIScreenInit failed because of a version "
-		 "mismatch.\n"
-		 "[dri] radeon.o kernel module version is %d.%d.%d "
-		 "but version 1.%d.%d or newer is needed.\n"
-		 "[dri] Disabling DRI.\n",
-		 version->version_major,
-		 version->version_minor,
-		 version->version_patchlevel,
-		 req_minor,
-		 req_patch);
-	 drmFreeVersion(version);
-	 return 0;
-      }
-
-      info->drmMinor = version->version_minor;
-      drmFreeVersion(version);
-   }
-
-   return 1;
-}
-
-static int RADEONMemoryInit( const DRIDriverContext *ctx, RADEONInfoPtr info )
-{
-   int        width_bytes = ctx->shared.virtualWidth * ctx->cpp;
-   int        cpp         = ctx->cpp;
-   int        bufferSize  = ((((ctx->shared.virtualHeight+15) & ~15) * width_bytes			     + RADEON_BUFFER_ALIGN) & ~RADEON_BUFFER_ALIGN);
-   int        depthSize   = ((((ctx->shared.virtualHeight+15) & ~15) * width_bytes
-			     + RADEON_BUFFER_ALIGN) & ~RADEON_BUFFER_ALIGN);
-   int        l;
-
-   info->frontOffset = 0;
-   info->frontPitch = ctx->shared.virtualWidth;
-
-   fprintf(stderr, 
-	   "Using %d MB AGP aperture\n", info->gartSize);
-   fprintf(stderr, 
-	   "Using %d MB for the ring buffer\n", info->ringSize);
-   fprintf(stderr, 
-	   "Using %d MB for vertex/indirect buffers\n", info->bufSize);
-   fprintf(stderr, 
-	   "Using %d MB for AGP textures\n", info->gartTexSize);
-
-   /* Front, back and depth buffers - everything else texture??
-    */
-   info->textureSize = ctx->shared.fbSize - 2 * bufferSize - depthSize;
-
-   if (ctx->colorTiling==1)
-   {
-	info->textureSize = ctx->shared.fbSize - ((ctx->shared.fbSize - info->textureSize + width_bytes * 16 - 1) / (width_bytes * 16)) * (width_bytes*16);
-   }
-
-   if (info->textureSize < 0) 
-      return 0;
-
-   l = RADEONMinBits((info->textureSize-1) / RADEON_NR_TEX_REGIONS);
-   if (l < RADEON_LOG_TEX_GRANULARITY) l = RADEON_LOG_TEX_GRANULARITY;
-
-   /* Round the texture size up to the nearest whole number of
-    * texture regions.  Again, be greedy about this, don't
-    * round down.
-    */
-   info->log2TexGran = l;
-   info->textureSize = (info->textureSize >> l) << l;
-
-   /* Set a minimum usable local texture heap size.  This will fit
-    * two 256x256x32bpp textures.
-    */
-   if (info->textureSize < 512 * 1024) {
-      info->textureOffset = 0;
-      info->textureSize = 0;
-   }
-
-   /* Reserve space for textures */
-   if (ctx->colorTiling==1)
-   {
-      info->textureOffset = ((ctx->shared.fbSize - info->textureSize) / 
-			(width_bytes * 16)) * (width_bytes*16);
-   }
-   else
-   {
-      info->textureOffset = ((ctx->shared.fbSize - info->textureSize +
-   	 		   RADEON_BUFFER_ALIGN) &
-			  ~RADEON_BUFFER_ALIGN);
-   }
-   /* Reserve space for the shared depth
-    * buffer.
-    */
-   info->depthOffset = ((info->textureOffset - depthSize +
-			 RADEON_BUFFER_ALIGN) &
-			~RADEON_BUFFER_ALIGN);
-   info->depthPitch = ctx->shared.virtualWidth;
-
-   info->backOffset = ((info->depthOffset - bufferSize +
-			RADEON_BUFFER_ALIGN) &
-		       ~RADEON_BUFFER_ALIGN);
-   info->backPitch = ctx->shared.virtualWidth;
-
-
-   fprintf(stderr, 
-	   "Will use back buffer at offset 0x%x\n",
-	   info->backOffset);
-   fprintf(stderr, 
-	   "Will use depth buffer at offset 0x%x\n",
-	   info->depthOffset);
-   fprintf(stderr, 
-	   "Will use %d kb for textures at offset 0x%x\n",
-	   info->textureSize/1024, info->textureOffset);
-
-   info->frontPitchOffset = (((info->frontPitch * cpp / 64) << 22) |
-			     (info->frontOffset >> 10));
-
-   info->backPitchOffset = (((info->backPitch * cpp / 64) << 22) |
-			    (info->backOffset >> 10));
-
-   info->depthPitchOffset = (((info->depthPitch * cpp / 64) << 22) |
-			     (info->depthOffset >> 10));
-
-   return 1;
-}
-
-static int RADEONColorTilingInit( const DRIDriverContext *ctx, RADEONInfoPtr info )
-{
-   int        width_bytes = ctx->shared.virtualWidth * ctx->cpp;
-   int        bufferSize  = ((((ctx->shared.virtualHeight+15) & ~15) * width_bytes			     + RADEON_BUFFER_ALIGN)
-			     & ~RADEON_BUFFER_ALIGN);
-   /* Setup color tiling */
-   if (info->drmMinor<14)
-      info->colorTiling=0;
-
-   if (info->colorTiling)
-   {
-
-      int colorTilingFlag;
-      drm_radeon_surface_alloc_t front,back;
-
-      RadeonSetParam(ctx, RADEON_SETPARAM_SWITCH_TILING, info->colorTiling ? 1 : 0);
-      
-      /* Setup the surfaces */
-      if (info->ChipFamily < CHIP_FAMILY_R200)
-         colorTilingFlag=RADEON_SURF_TILE_COLOR_MACRO;
-      else
-         colorTilingFlag=R200_SURF_TILE_COLOR_MACRO;
-
-      front.address = info->frontOffset;
-      front.size = bufferSize;
-      front.flags = (width_bytes) | colorTilingFlag;
-      drmCommandWrite(ctx->drmFD, DRM_RADEON_SURF_ALLOC, &front,sizeof(front)); 
- 
-      back.address = info->backOffset;
-      back.size = bufferSize;
-      back.flags = (width_bytes) | colorTilingFlag;
-      drmCommandWrite(ctx->drmFD, DRM_RADEON_SURF_ALLOC, &back,sizeof(back)); 
-
-   }
-   return 1;
-} 
-
-
-
-/**
- * Called at the start of each server generation.
- *
- * \param ctx display handle.
- * \param info driver private data.
- *
- * \return non-zero on success, or zero on failure.
- *
- * Performs static frame buffer allocation. Opens the DRM device and add maps
- * to the SAREA, framebuffer and MMIO regions. Fills in \p info with more
- * information. Creates a \e server context to grab the lock for the
- * initialization ioctls and calls the other initilization functions in this
- * file. Starts the CP engine via the DRM_RADEON_CP_START command.
- *
- * Setups a RADEONDRIRec structure to be passed to radeon_dri.so for its
- * initialization.
- */
-static int RADEONScreenInit( DRIDriverContext *ctx, RADEONInfoPtr info )
-{
-   RADEONDRIPtr   pRADEONDRI;
-   int err;
-
-   usleep(100);
-   /*assert(!ctx->IsClient);*/
-
-   {
-      int  width_bytes = (ctx->shared.virtualWidth * ctx->cpp);
-      int  maxy        = ctx->shared.fbSize / width_bytes;
-
-
-      if (maxy <= ctx->shared.virtualHeight * 3) {
-	 fprintf(stderr, 
-		 "Static buffer allocation failed -- "
-		 "need at least %d kB video memory (have %d kB)\n",
-		 (ctx->shared.virtualWidth * ctx->shared.virtualHeight *
-		  ctx->cpp * 3 + 1023) / 1024,
-		 ctx->shared.fbSize / 1024);
-	 return 0;
-      } 
-   }
-
-
-   if (info->ChipFamily >= CHIP_FAMILY_R300) {
-      fprintf(stderr, 
-	      "Direct rendering not yet supported on "
-	      "Radeon 9700 and newer cards\n");
-      return 0;
-   }
-   
-   radeon_drm_page_size = getpagesize();   
-
-   info->registerSize = ctx->MMIOSize;
-   ctx->shared.SAREASize = SAREA_MAX;
-
-   /* Note that drmOpen will try to load the kernel module, if needed. */
-   ctx->drmFD = drmOpen("radeon", NULL );
-   if (ctx->drmFD < 0) {
-      fprintf(stderr, "[drm] drmOpen failed\n");
-      return 0;
-   }
-
-   if ((err = drmSetBusid(ctx->drmFD, ctx->pciBusID)) < 0) {
-      fprintf(stderr, "[drm] drmSetBusid failed (%d, %s), %s\n",
-	      ctx->drmFD, ctx->pciBusID, strerror(-err));
-      return 0;
-   }
-
-   if (drmAddMap( ctx->drmFD,
-		  0,
-		  ctx->shared.SAREASize,
-		  DRM_SHM,
-		  DRM_CONTAINS_LOCK,
-		  &ctx->shared.hSAREA) < 0)
-   {
-      fprintf(stderr, "[drm] drmAddMap failed\n");
-      return 0;
-   }
-   fprintf(stderr, "[drm] added %d byte SAREA at 0x%08lx\n",
-	   ctx->shared.SAREASize, ctx->shared.hSAREA);
-
-   if (drmMap( ctx->drmFD,
-	       ctx->shared.hSAREA,
-	       ctx->shared.SAREASize,
-	       (drmAddressPtr)(&ctx->pSAREA)) < 0)
-   {
-      fprintf(stderr, "[drm] drmMap failed\n");
-      return 0;
-   }
-   memset(ctx->pSAREA, 0, ctx->shared.SAREASize);
-   fprintf(stderr, "[drm] mapped SAREA 0x%08lx to %p, size %d\n",
-	   ctx->shared.hSAREA, ctx->pSAREA, ctx->shared.SAREASize);
-   
-   /* Need to AddMap the framebuffer and mmio regions here:
-    */
-   if (drmAddMap( ctx->drmFD,
-		  (drm_handle_t)ctx->FBStart,
-		  ctx->FBSize,
-		  DRM_FRAME_BUFFER,
-#ifndef _EMBEDDED
-		  0,
-#else
-		  DRM_READ_ONLY,
-#endif
-		  &ctx->shared.hFrameBuffer) < 0)
-   {
-      fprintf(stderr, "[drm] drmAddMap framebuffer failed\n");
-      return 0;
-   }
-
-   fprintf(stderr, "[drm] framebuffer handle = 0x%08lx\n",
-	   ctx->shared.hFrameBuffer);
-
-
-
-   if (drmAddMap(ctx->drmFD, 
-		 ctx->MMIOStart,
-		 ctx->MMIOSize,
-		 DRM_REGISTERS, 
-		 DRM_READ_ONLY, 
-		 &info->registerHandle) < 0) {
-      fprintf(stderr, "[drm] drmAddMap mmio failed\n");	
-      return 0;
-   }
-   fprintf(stderr,
-	   "[drm] register handle = 0x%08lx\n", info->registerHandle);
-
-   /* Check the radeon DRM version */
-   if (!RADEONCheckDRMVersion(ctx, info)) {
-      return 0;
-   }
-
-   if (ctx->isPCI) {
-      /* Initialize PCI */
-      if (!RADEONDRIPciInit(ctx, info))
-         return 0;
-   }
-   else {
-      /* Initialize AGP */
-      if (!RADEONDRIAgpInit(ctx, info))
-         return 0;
-   }
-
-   /* Memory manager setup */
-   if (!RADEONMemoryInit(ctx, info)) {
-      return 0;
-   }
-
-   /* Create a 'server' context so we can grab the lock for
-    * initialization ioctls.
-    */
-   if ((err = drmCreateContext(ctx->drmFD, &ctx->serverContext)) != 0) {
-      fprintf(stderr, "%s: drmCreateContext failed %d\n", __FUNCTION__, err);
-      return 0;
-   }
-
-   DRM_LOCK(ctx->drmFD, ctx->pSAREA, ctx->serverContext, 0); 
-
-   /* Initialize the kernel data structures */
-   if (!RADEONDRIKernelInit(ctx, info)) {
-      fprintf(stderr, "RADEONDRIKernelInit failed\n");
-      DRM_UNLOCK(ctx->drmFD, ctx->pSAREA, ctx->serverContext);
-      return 0;
-   }
-
-   /* Initialize the vertex buffers list */
-   if (!RADEONDRIBufInit(ctx, info)) {
-      fprintf(stderr, "RADEONDRIBufInit failed\n");
-      DRM_UNLOCK(ctx->drmFD, ctx->pSAREA, ctx->serverContext);
-      return 0;
-   }
-
-   RADEONColorTilingInit(ctx, info);
-
-   /* Initialize IRQ */
-   RADEONDRIIrqInit(ctx, info);
-
-   /* Initialize kernel gart memory manager */
-   RADEONDRIAgpHeapInit(ctx, info);
-
-   fprintf(stderr,"color tiling %sabled\n", info->colorTiling?"en":"dis");
-   fprintf(stderr,"page flipping %sabled\n", info->page_flip_enable?"en":"dis");
-   /* Initialize the SAREA private data structure */
-   {
-      drm_radeon_sarea_t *pSAREAPriv;
-      pSAREAPriv = (drm_radeon_sarea_t *)(((char*)ctx->pSAREA) + 
-					sizeof(drm_sarea_t));
-      memset(pSAREAPriv, 0, sizeof(*pSAREAPriv));
-      pSAREAPriv->pfState = info->page_flip_enable;
-   }
-
-
-   /* Quick hack to clear the front & back buffers.  Could also use
-    * the clear ioctl to do this, but would need to setup hw state
-    * first.
-    */
-   drimemsetio((char *)ctx->FBAddress + info->frontOffset,
-	  0,
-	  info->frontPitch * ctx->cpp * ctx->shared.virtualHeight );
-
-   drimemsetio((char *)ctx->FBAddress + info->backOffset,
-	  0,
-	  info->backPitch * ctx->cpp * ctx->shared.virtualHeight );
-
-   /* This is the struct passed to radeon_dri.so for its initialization */
-   ctx->driverClientMsg = malloc(sizeof(RADEONDRIRec));
-   ctx->driverClientMsgSize = sizeof(RADEONDRIRec);
-   pRADEONDRI                    = (RADEONDRIPtr)ctx->driverClientMsg;
-   pRADEONDRI->deviceID          = info->Chipset;
-   pRADEONDRI->width             = ctx->shared.virtualWidth;
-   pRADEONDRI->height            = ctx->shared.virtualHeight;
-   pRADEONDRI->depth             = ctx->bpp; /* XXX: depth */
-   pRADEONDRI->bpp               = ctx->bpp;
-   pRADEONDRI->IsPCI             = ctx->isPCI;
-   pRADEONDRI->AGPMode           = ctx->agpmode;
-   pRADEONDRI->frontOffset       = info->frontOffset;
-   pRADEONDRI->frontPitch        = info->frontPitch;
-   pRADEONDRI->backOffset        = info->backOffset;
-   pRADEONDRI->backPitch         = info->backPitch;
-   pRADEONDRI->depthOffset       = info->depthOffset;
-   pRADEONDRI->depthPitch        = info->depthPitch;
-   pRADEONDRI->textureOffset     = info->textureOffset;
-   pRADEONDRI->textureSize       = info->textureSize;
-   pRADEONDRI->log2TexGran       = info->log2TexGran;
-   pRADEONDRI->registerHandle    = info->registerHandle;
-   pRADEONDRI->registerSize      = info->registerSize; 
-   pRADEONDRI->statusHandle      = info->ringReadPtrHandle;
-   pRADEONDRI->statusSize        = info->ringReadMapSize;
-   pRADEONDRI->gartTexHandle      = info->gartTexHandle;
-   pRADEONDRI->gartTexMapSize     = info->gartTexMapSize;
-   pRADEONDRI->log2GARTTexGran    = info->log2GARTTexGran;
-   pRADEONDRI->gartTexOffset      = info->gartTexStart;
-   pRADEONDRI->sarea_priv_offset = sizeof(drm_sarea_t);
-
-   /* Don't release the lock now - let the VT switch handler do it. */
-
-   return 1;
-}
-
-
-/**
- * \brief Get Radeon chip family from chipset number.
- * 
- * \param info driver private data.
- *
- * \return non-zero on success, or zero on failure.
- *
- * Called by radeonInitFBDev() to set RADEONInfoRec::ChipFamily
- * according to the value of RADEONInfoRec::Chipset.  Fails if the
- * chipset is unrecognized or not appropriate for this driver (i.e., not
- * an r100 style radeon)
- */
-static int get_chipfamily_from_chipset( RADEONInfoPtr info )
-{
-    switch (info->Chipset) {
-    case PCI_CHIP_RADEON_LY:
-    case PCI_CHIP_RADEON_LZ:
-	info->ChipFamily = CHIP_FAMILY_M6;
-	break;
-
-    case PCI_CHIP_RADEON_QY:
-    case PCI_CHIP_RADEON_QZ:
-	info->ChipFamily = CHIP_FAMILY_VE;
-	break;
-
-    case PCI_CHIP_R200_QL:
-    case PCI_CHIP_R200_QN:
-    case PCI_CHIP_R200_QO:
-    case PCI_CHIP_R200_Ql:
-    case PCI_CHIP_R200_BB:
-	info->ChipFamily = CHIP_FAMILY_R200;
-	break;
-
-    case PCI_CHIP_RV200_QW: /* RV200 desktop */
-    case PCI_CHIP_RV200_QX:
-	info->ChipFamily = CHIP_FAMILY_RV200;
-	break;
-
-    case PCI_CHIP_RADEON_LW:
-    case PCI_CHIP_RADEON_LX:
-	info->ChipFamily = CHIP_FAMILY_M7;
-	break;
-
-    case PCI_CHIP_RV250_Id:
-    case PCI_CHIP_RV250_Ie:
-    case PCI_CHIP_RV250_If:
-    case PCI_CHIP_RV250_Ig:
-	info->ChipFamily = CHIP_FAMILY_RV250;
-	break;
-
-    case PCI_CHIP_RV250_Ld:
-    case PCI_CHIP_RV250_Le:
-    case PCI_CHIP_RV250_Lf:
-    case PCI_CHIP_RV250_Lg:
-	info->ChipFamily = CHIP_FAMILY_M9;
-	break;
-
-    case PCI_CHIP_RV280_Y_:
-    case PCI_CHIP_RV280_Ya:
-    case PCI_CHIP_RV280_Yb:
-    case PCI_CHIP_RV280_Yc:
-	info->ChipFamily = CHIP_FAMILY_RV280;
-        break;
-
-    case PCI_CHIP_R300_ND:
-    case PCI_CHIP_R300_NE:
-    case PCI_CHIP_R300_NF:
-    case PCI_CHIP_R300_NG:
-	info->ChipFamily = CHIP_FAMILY_R300;
-        break;
-
-    default:
-	/* Original Radeon/7200 */
-	info->ChipFamily = CHIP_FAMILY_RADEON;
-    }
-
-    return 1;
-}
-
-
-/**
- * \brief Validate the fbdev mode.
- * 
- * \param ctx display handle.
- *
- * \return one on success, or zero on failure.
- *
- * Saves some registers and returns 1.
- *
- * \sa radeonValidateMode().
- */
-static int radeonValidateMode( const DRIDriverContext *ctx )
-{
-   unsigned char *RADEONMMIO = ctx->MMIOAddress;
-   RADEONInfoPtr info = ctx->driverPrivate;
-
-   info->gen_int_cntl = INREG(RADEON_GEN_INT_CNTL);
-   info->crtc_offset_cntl = INREG(RADEON_CRTC_OFFSET_CNTL);
-
-   if (info->colorTiling)
-	   info->crtc_offset_cntl |= RADEON_CRTC_TILE_EN;
-   return 1;
-}
-
-
-/**
- * \brief Examine mode returned by fbdev.
- * 
- * \param ctx display handle.
- *
- * \return one on success, or zero on failure.
- *
- * Restores registers that fbdev has clobbered and returns 1.
- *
- * \sa radeonValidateMode().
- */
-static int radeonPostValidateMode( const DRIDriverContext *ctx )
-{
-   unsigned char *RADEONMMIO = ctx->MMIOAddress;
-   RADEONInfoPtr info = ctx->driverPrivate;
-
-   RADEONColorTilingInit( ctx, info);
-   OUTREG(RADEON_GEN_INT_CNTL, info->gen_int_cntl);
-   if (info->colorTiling)
-	   info->crtc_offset_cntl |= RADEON_CRTC_TILE_EN;
-   OUTREG(RADEON_CRTC_OFFSET_CNTL, info->crtc_offset_cntl);
-   
-   return 1;
-}
-
-
-/**
- * \brief Initialize the framebuffer device mode
- *
- * \param ctx display handle.
- *
- * \return one on success, or zero on failure.
- *
- * Fills in \p info with some default values and some information from \p ctx
- * and then calls RADEONScreenInit() for the screen initialization.
- * 
- * Before exiting clears the framebuffer memory accessing it directly.
- */
-static int radeonInitFBDev( DRIDriverContext *ctx )
-{
-   RADEONInfoPtr info = calloc(1, sizeof(*info));
-
-   {
-      int  dummy = ctx->shared.virtualWidth;
-
-      if (ctx->colorTiling==1)
-      {
-         switch (ctx->bpp / 8) {
-         case 1: dummy = (ctx->shared.virtualWidth + 255) & ~255; break;
-         case 2: dummy = (ctx->shared.virtualWidth + 127) & ~127; break;
-         case 3:
-         case 4: dummy = (ctx->shared.virtualWidth +  63) &  ~63; break;
-         }
-      } else {
-	 switch (ctx->bpp / 8) {
-         case 1: dummy = (ctx->shared.virtualWidth + 127) & ~127; break;
-         case 2: dummy = (ctx->shared.virtualWidth +  31) &  ~31; break;
-         case 3:
-         case 4: dummy = (ctx->shared.virtualWidth +  15) &  ~15; break;
-         }
-      }
-
-      ctx->shared.virtualWidth = dummy;
-      ctx->shared.Width = dummy;
-   }
-
-   fprintf(stderr,"shared virtual width is %d\n", ctx->shared.virtualWidth);
-   ctx->driverPrivate = (void *)info;
-   
-   info->gartFastWrite  = RADEON_DEFAULT_AGP_FAST_WRITE;
-   info->gartSize       = RADEON_DEFAULT_AGP_SIZE;
-   info->gartTexSize    = RADEON_DEFAULT_AGP_TEX_SIZE;
-   info->bufSize       = RADEON_DEFAULT_BUFFER_SIZE;
-   info->ringSize      = RADEON_DEFAULT_RING_SIZE;
-   info->page_flip_enable = RADEON_DEFAULT_PAGE_FLIP;
-   info->colorTiling = ctx->colorTiling;
-  
-   info->Chipset = ctx->chipset;
-
-   if (!get_chipfamily_from_chipset( info )) {
-      fprintf(stderr, "Unknown or non-radeon chipset -- cannot continue\n");
-      fprintf(stderr, "==> Verify PCI BusID is correct in miniglx.conf\n");
-      return 0;
-   }
-
-   info->frontPitch = ctx->shared.virtualWidth;
-   info->LinearAddr = ctx->FBStart & 0xfc000000;
-    
-
-   if (!RADEONScreenInit( ctx, info ))
-      return 0;
-
-
-   return 1;
-}
-
-
-/**
- * \brief The screen is being closed, so clean up any state and free any
- * resources used by the DRI.
- *
- * \param ctx display handle.
- *
- * Unmaps the SAREA, closes the DRM device file descriptor and frees the driver
- * private data.
- */
-static void radeonHaltFBDev( DRIDriverContext *ctx )
-{
-    drmUnmap( ctx->pSAREA, ctx->shared.SAREASize );
-    drmClose(ctx->drmFD);
-
-    if (ctx->driverPrivate) {
-       free(ctx->driverPrivate);
-       ctx->driverPrivate = 0;
-    }
-}
-
-
-extern void radeonNotifyFocus( int );
-
-/**
- * \brief Exported driver interface for Mini GLX.
- *
- * \sa DRIDriverRec.
- */
-const struct DRIDriverRec __driDriver = {
-   radeonValidateMode,
-   radeonPostValidateMode,
-   radeonInitFBDev,
-   radeonHaltFBDev,
-   RADEONEngineShutdown,
-   RADEONEngineRestore,  
-#ifndef _EMBEDDED
-   0,
-#else
-   radeonNotifyFocus, 
-#endif
-};
diff --git a/src/mesa/drivers/dri/tdfx/server/tdfx_dri.c b/src/mesa/drivers/dri/tdfx/server/tdfx_dri.c
deleted file mode 100644
index 63fe875f59..0000000000
--- a/src/mesa/drivers/dri/tdfx/server/tdfx_dri.c
+++ /dev/null
@@ -1,471 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version:  5.1
- *
- * Copyright (C) 1999-2003  Brian Paul   All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/* Authors:
- *    Keith Whitwell
- *    Daniel Borca
- */
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
- 
-#include "driver.h"
-#include "drm.h"
-#include "imports.h"
-
-#include "dri_util.h"
-
-#include "tdfx_context.h"
-#include "tdfx_dri.h"
-#include "xf86drm.h"
-
-
-#define TILE_WIDTH 128
-#define TILE_HEIGHT 32
-
-#define CMDFIFO_PAGES 64
-
-
-static int
-calcBufferStride (int xres, int tiled, int cpp)
-{
-  int strideInTiles;
-
-  if (tiled) {
-    /* Calculate tile width stuff */
-    strideInTiles = (xres+TILE_WIDTH-1)/TILE_WIDTH;
-
-    return strideInTiles*cpp*TILE_WIDTH;
-  } else {
-    return xres*cpp;
-  }
-} /* calcBufferStride */
-
-
-static int
-calcBufferHeightInTiles (int yres)
-{
-  int heightInTiles;            /* Height of buffer in tiles */
-
-  /* Calculate tile height stuff */
-  heightInTiles = yres >> 5;
-
-  if (yres & (TILE_HEIGHT - 1))
-    heightInTiles++;
-
-  return heightInTiles;
-
-} /* calcBufferHeightInTiles */
-
-
-static int
-calcBufferSize (int xres, int yres, int tiled, int cpp)
-{
-  int stride, height, bufSize;
-
-  if (tiled) {
-    stride = calcBufferStride(xres, tiled, cpp);
-    height = TILE_HEIGHT * calcBufferHeightInTiles(yres);
-  } else {
-    stride = xres*cpp;
-    height = yres;
-  }
-
-  bufSize = stride * height;
-
-  return bufSize;
-} /* calcBufferSize */
-
-
-static void allocateMemory (const DRIDriverContext *ctx, TDFXDRIPtr pTDFX)
-{
-  int memRemaining, fifoSize, screenSizeInTiles;
-  int fbSize;
-  char *str;
-  int pixmapCacheLinesMin;
-  int cursorOffset, cursorSize;
-
-  pTDFX->stride = calcBufferStride(pTDFX->width, !0, pTDFX->cpp);
-
-  /* enough to do DVD */
-  pixmapCacheLinesMin = ((720*480*pTDFX->cpp) + 
-					pTDFX->stride - 1)/pTDFX->stride;
-
-  if (pTDFX->deviceID > PCI_CHIP_VOODOO3) {
-  	if ((pixmapCacheLinesMin + pTDFX->height) > 4095)
-		pixmapCacheLinesMin = 4095 - pTDFX->height;
-  } else {
-  	if ((pixmapCacheLinesMin + pTDFX->height) > 2047)
-		pixmapCacheLinesMin = 2047 - pTDFX->height;
-  }
-
-  if (pTDFX->cpp!=3) {
-    screenSizeInTiles=calcBufferSize(pTDFX->width, pTDFX->height,
-				     !0, pTDFX->cpp);
-  }
-  else {
-    /* cpp==3 needs to bump up to 4 */
-    screenSizeInTiles=calcBufferSize(pTDFX->width, pTDFX->height,
-				     !0, 4);
-  }
-
-  /*
-   * Layout is:
-   *    cursor, fifo, fb, tex, bb, db
-   */
-
-  fbSize = (pTDFX->height + pixmapCacheLinesMin) * pTDFX->stride;
-
-  memRemaining=(pTDFX->mem - 1) &~ 0xFFF;
-  /* Note that a page is 4096 bytes, and a  */
-  /* tile is 32 x 128 = 4096 bytes.  So,    */
-  /* page and tile boundaries are the same  */
-  /* Place the depth offset first, forcing  */
-  /* it to be on an *odd* page boundary.    */
-  pTDFX->depthOffset = (memRemaining - screenSizeInTiles) &~ 0xFFF;
-  if ((pTDFX->depthOffset & (0x1 << 12)) == 0) {
-      pTDFX->depthOffset -= (0x1 << 12);
-  }
-  /* Now, place the back buffer, forcing it */
-  /* to be on an *even* page boundary.      */
-  pTDFX->backOffset = (pTDFX->depthOffset - screenSizeInTiles) &~ 0xFFF;
-  if (pTDFX->backOffset & (0x1 << 12)) {
-      pTDFX->backOffset -= (0x1 << 12);
-  }
-  /* Give the cmd fifo at least             */
-  /* CMDFIFO_PAGES pages, but no more than  */
-  /* 64. NOTE: Don't go higher than 64, as  */
-  /* there is suspect code in Glide3 !      */
-  fifoSize = ((64 <= CMDFIFO_PAGES) ? 64 : CMDFIFO_PAGES) << 12;
-
-  /* We give 4096 bytes to the cursor  */
-  cursorSize = 0/*4096*/;
-  cursorOffset = 0;
-
-  pTDFX->fifoOffset = cursorOffset + cursorSize;
-  pTDFX->fifoSize = fifoSize;
-  /* Now, place the front buffer, forcing   */
-  /* it to be on a page boundary too, just  */
-  /* for giggles.                           */
-  pTDFX->fbOffset = pTDFX->fifoOffset + pTDFX->fifoSize;
-  pTDFX->textureOffset = pTDFX->fbOffset + fbSize;
-  if (pTDFX->depthOffset <= pTDFX->textureOffset ||
-	pTDFX->backOffset <= pTDFX->textureOffset) {
-    /*
-     * pTDFX->textureSize < 0 means that the DRI is disabled.  pTDFX->backOffset
-     * is used to calculate the maximum amount of memory available for
-     * 2D offscreen use.  With DRI disabled, set this to the top of memory.
-     */
-
-    pTDFX->textureSize = -1;
-    pTDFX->backOffset = pTDFX->mem;
-    pTDFX->depthOffset = -1;
-    fprintf(stderr, 
-        "Not enough video memory available for textures and depth buffer\n"
-	"\tand/or back buffer.  Disabling DRI.  To use DRI try lower\n"
-	"\tresolution modes and/or a smaller virtual screen size\n");
-  } else {
-    pTDFX->textureSize = pTDFX->backOffset - pTDFX->textureOffset;
-  }
-}
-
-
-static int createScreen (DRIDriverContext *ctx, TDFXDRIPtr pTDFX)
-{
-   int err;
-   
-   {
-      int  width_bytes = (ctx->shared.virtualWidth * ctx->cpp);
-      int  maxy        = ctx->shared.fbSize / width_bytes;
-
-
-      if (maxy <= ctx->shared.virtualHeight * 3) {
-	 fprintf(stderr, 
-		 "Static buffer allocation failed -- "
-		 "need at least %d kB video memory (have %d kB)\n",
-		 (ctx->shared.virtualWidth * ctx->shared.virtualHeight *
-		  ctx->cpp * 3 + 1023) / 1024,
-		 ctx->shared.fbSize / 1024);
-	 return 0;
-      } 
-   }
-
-   ctx->shared.SAREASize = SAREA_MAX;
-   pTDFX->regsSize = ctx->MMIOSize;
-
-   /* Note that drmOpen will try to load the kernel module, if needed. */
-   ctx->drmFD = drmOpen("tdfx", NULL );
-   if (ctx->drmFD < 0) {
-      fprintf(stderr, "[drm] drmOpen failed\n");
-      return 0;
-   }
-
-   if ((err = drmSetBusid(ctx->drmFD, ctx->pciBusID)) < 0) {
-      fprintf(stderr, "[drm] drmSetBusid failed (%d, %s), %s\n",
-	      ctx->drmFD, ctx->pciBusID, strerror(-err));
-      return 0;
-   }
-
-   if (drmAddMap( ctx->drmFD,
-		  0,
-		  ctx->shared.SAREASize,
-		  DRM_SHM,
-		  DRM_CONTAINS_LOCK,
-		  &ctx->shared.hSAREA) < 0)
-   {
-      fprintf(stderr, "[drm] drmAddMap failed\n");
-      return 0;
-   }
-   fprintf(stderr, "[drm] added %d byte SAREA at 0x%08lx\n",
-	   ctx->shared.SAREASize, ctx->shared.hSAREA);
-
-   if (drmMap( ctx->drmFD,
-	       ctx->shared.hSAREA,
-	       ctx->shared.SAREASize,
-	       (drmAddressPtr)(&ctx->pSAREA)) < 0)
-   {
-      fprintf(stderr, "[drm] drmMap failed\n");
-      return 0;
-   }
-   memset(ctx->pSAREA, 0, ctx->shared.SAREASize);
-   fprintf(stderr, "[drm] mapped SAREA 0x%08lx to %p, size %d\n",
-	   ctx->shared.hSAREA, ctx->pSAREA, ctx->shared.SAREASize);
-   
-   /* Need to AddMap the framebuffer and mmio regions here:
-    */
-   if (drmAddMap( ctx->drmFD,
-		  (drm_handle_t)ctx->FBStart,
-		  ctx->FBSize,
-		  DRM_FRAME_BUFFER,
-#ifndef _EMBEDDED
-		  0,
-#else
-		  DRM_READ_ONLY,
-#endif
-		  &ctx->shared.hFrameBuffer) < 0)
-   {
-      fprintf(stderr, "[drm] drmAddMap framebuffer failed\n");
-      return 0;
-   }
-
-   fprintf(stderr, "[drm] framebuffer handle = 0x%08lx\n",
-	   ctx->shared.hFrameBuffer);
-
-
-   if (drmAddMap(ctx->drmFD, 
-		 ctx->MMIOStart,
-		 ctx->MMIOSize,
-		 DRM_REGISTERS, 
-		 DRM_READ_ONLY, 
-		 &pTDFX->regs) < 0) {
-      fprintf(stderr, "[drm] drmAddMap mmio failed\n");	
-      return 0;
-   }
-   fprintf(stderr,
-	   "[drm] register handle = 0x%08lx\n", pTDFX->regs);
-
-
-   /* Create a 'server' context so we can grab the lock for
-    * initialization ioctls.
-    */
-   if ((err = drmCreateContext(ctx->drmFD, &ctx->serverContext)) != 0) {
-      fprintf(stderr, "%s: drmCreateContext failed %d\n", __FUNCTION__, err);
-      return 0;
-   }
-
-   DRM_LOCK(ctx->drmFD, ctx->pSAREA, ctx->serverContext, 0); 
-
-   /* Initialize the kernel data structures */
-
-   /* Initialize kernel gart memory manager */
-   allocateMemory(ctx, pTDFX);
-
-   /* Initialize the SAREA private data structure */
-
-
-   /* Quick hack to clear the front & back buffers.  Could also use
-    * the clear ioctl to do this, but would need to setup hw state
-    * first.
-    */
-
-
-   /* This is the struct passed to tdfx_dri.so for its initialization */
-   ctx->driverClientMsg = malloc(sizeof(TDFXDRIRec));
-   ctx->driverClientMsgSize = sizeof(TDFXDRIRec);
-   memcpy(ctx->driverClientMsg, pTDFX, ctx->driverClientMsgSize);
-   pTDFX = (TDFXDRIPtr)ctx->driverClientMsg;
-
-   /* Don't release the lock now - let the VT switch handler do it. */
-
-   return 1;
-}
-
-
-/**
- * \brief Validate the fbdev mode.
- * 
- * \param ctx display handle.
- *
- * \return one on success, or zero on failure.
- *
- * Saves some registers and returns 1.
- *
- * \sa tdfxValidateMode().
- */
-static int tdfxValidateMode( const DRIDriverContext *ctx )
-{
-   return 1;
-}
-
-
-/**
- * \brief Examine mode returned by fbdev.
- * 
- * \param ctx display handle.
- *
- * \return one on success, or zero on failure.
- *
- * Restores registers that fbdev has clobbered and returns 1.
- *
- * \sa tdfxValidateMode().
- */
-static int tdfxPostValidateMode( const DRIDriverContext *ctx )
-{
-   return 1;
-}
-
-
-/**
- * \brief Initialize the framebuffer device mode
- *
- * \param ctx display handle.
- *
- * \return one on success, or zero on failure.
- *
- * Before exiting clears the framebuffer memory accessing it directly.
- */
-static int tdfxInitFBDev( DRIDriverContext *ctx )
-{
-   TDFXDRIPtr pTDFX = calloc(1, sizeof(TDFXDRIRec));
-
-   {
-      int  dummy = ctx->shared.virtualWidth;
-
-      switch (ctx->bpp / 8) {
-      case 1: dummy = (ctx->shared.virtualWidth + 127) & ~127; break;
-      case 2: dummy = (ctx->shared.virtualWidth +  31) &  ~31; break;
-      case 3:
-      case 4: dummy = (ctx->shared.virtualWidth +  15) &  ~15; break;
-      }
-
-      ctx->shared.virtualWidth = dummy;
-   }
-
-   ctx->driverPrivate = (void *)pTDFX;
-
-   pTDFX->deviceID = ctx->chipset;
-   pTDFX->width    = ctx->shared.virtualWidth;
-   pTDFX->height   = ctx->shared.virtualHeight;
-   pTDFX->cpp      = ctx->cpp;
-   pTDFX->mem      = ctx->FBSize; /* ->shared.fbSize? mem probe? */
-   pTDFX->sarea_priv_offset = sizeof(drm_sarea_t);
-
-   if (!createScreen(ctx, pTDFX))
-      return 0;
-
-   return 1;
-}
-
-
-/**
- * \brief The screen is being closed, so clean up any state and free any
- * resources used by the DRI.
- *
- * \param ctx display handle.
- *
- * Unmaps the SAREA, closes the DRM device file descriptor and frees the driver
- * private data.
- */
-static void tdfxHaltFBDev( DRIDriverContext *ctx )
-{
-    drmUnmap( ctx->pSAREA, ctx->shared.SAREASize );
-    drmClose(ctx->drmFD);
-
-    if (ctx->driverPrivate) {
-       free(ctx->driverPrivate);
-       ctx->driverPrivate = 0;
-    }
-}
-
-
-/**
- * \brief Shutdown the drawing engine.
- *
- * \param ctx display handle
- *
- * Turns off the 3D engine & restores the graphics card
- * to a state that fbdev understands.
- */
-static int tdfxEngineShutdown( const DRIDriverContext *ctx )
-{
-   fprintf(stderr, "%s: not implemented\n", __FUNCTION__);
-   return 1;
-}
-
-
-/**
- * \brief Restore the drawing engine.
- *
- * \param ctx display handle
- *
- * Resets the graphics card and sets initial values for several registers of
- * the card's drawing engine.
- *
- * Turns on 3dfx
- */
-static int tdfxEngineRestore( const DRIDriverContext *ctx )
-{
-   fprintf(stderr, "%s: not implemented\n", __FUNCTION__);
-   return 1;
-}
-
-
-/**
- * \brief Exported driver interface for Mini GLX.
- *
- * \sa DRIDriverRec.
- */
-struct DRIDriverRec __driDriver = {
-   tdfxValidateMode,
-   tdfxPostValidateMode,
-   tdfxInitFBDev,
-   tdfxHaltFBDev,
-   tdfxEngineShutdown,
-   tdfxEngineRestore,
-   0
-};
diff --git a/src/mesa/drivers/dri/unichrome/server/via_dri.c b/src/mesa/drivers/dri/unichrome/server/via_dri.c
deleted file mode 100644
index 74034485e2..0000000000
--- a/src/mesa/drivers/dri/unichrome/server/via_dri.c
+++ /dev/null
@@ -1,1251 +0,0 @@
-/*
- * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sub license,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
- * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
- 
-#include "driver.h"
-#include "drm.h"
-#include "imports.h"
-
-#include "dri_util.h"
-
-#include "via_context.h"
-#include "via_dri.h"
-#include "via_driver.h"
-#include "xf86drm.h"
-
-static void VIAEnableMMIO(DRIDriverContext * ctx);
-static void VIADisableMMIO(DRIDriverContext * ctx);
-static void VIADisableExtendedFIFO(DRIDriverContext *ctx);
-static void VIAEnableExtendedFIFO(DRIDriverContext *ctx);
-static void VIAInitialize2DEngine(DRIDriverContext *ctx);
-static void VIAInitialize3DEngine(DRIDriverContext *ctx);
-
-static int VIADRIScreenInit(DRIDriverContext * ctx);
-static void VIADRICloseScreen(DRIDriverContext * ctx);
-static int VIADRIFinishScreenInit(DRIDriverContext * ctx);
-
-/* _SOLO : missing macros normally defined by X code */
-#define xf86DrvMsg(a, b, ...) fprintf(stderr, __VA_ARGS__)
-#define MMIO_IN8(base, addr) ((*(((volatile uint8_t*)base)+(addr)))+0)
-#define MMIO_OUT8(base, addr, val) ((*(((volatile uint8_t*)base)+(addr)))=((uint8_t)val))
-#define MMIO_OUT16(base, addr, val) ((*(volatile uint16_t*)(((uint8_t*)base)+(addr)))=((uint16_t)val))
-
-#define VIDEO	0 
-#define AGP		1
-#define AGP_PAGE_SIZE 4096
-#define AGP_PAGES 8192
-#define AGP_SIZE (AGP_PAGE_SIZE * AGP_PAGES)
-#define AGP_CMDBUF_PAGES 512
-#define AGP_CMDBUF_SIZE (AGP_PAGE_SIZE * AGP_CMDBUF_PAGES)
-
-static char VIAKernelDriverName[] = "via";
-static char VIAClientDriverName[] = "unichrome";
-
-static int VIADRIAgpInit(const DRIDriverContext *ctx, VIAPtr pVia);
-static int VIADRIPciInit(DRIDriverContext * ctx, VIAPtr pVia);
-static int VIADRIFBInit(DRIDriverContext * ctx, VIAPtr pVia);
-static int VIADRIKernelInit(DRIDriverContext * ctx, VIAPtr pVia);
-static int VIADRIMapInit(DRIDriverContext * ctx, VIAPtr pVia);
-
-static void VIADRIIrqInit( DRIDriverContext *ctx )
-{
-    VIAPtr pVia = VIAPTR(ctx);
-    VIADRIPtr pVIADRI = pVia->devPrivate;
-
-    pVIADRI->irqEnabled = drmGetInterruptFromBusID(pVia->drmFD,
-					   ctx->pciBus,
-					   ctx->pciDevice,
-					   ctx->pciFunc);
-
-    if ((drmCtlInstHandler(pVia->drmFD, pVIADRI->irqEnabled))) {
-	xf86DrvMsg(pScreen->myNum, X_WARNING,
-		   "[drm] Failure adding irq handler. "
-		   "Falling back to irq-free operation.\n");
-	pVIADRI->irqEnabled = 0;
-    }
-
-    if (pVIADRI->irqEnabled)
-	xf86DrvMsg(pScreen->myNum, X_INFO,
-		   "[drm] Irq handler installed, using IRQ %d.\n",
-		   pVIADRI->irqEnabled);
-}
-
-static void VIADRIIrqExit( DRIDriverContext *ctx ) {
-    VIAPtr pVia = VIAPTR(ctx);
-    VIADRIPtr pVIADRI = pVia->devPrivate;
-
-    if (pVIADRI->irqEnabled) {
-	if (drmCtlUninstHandler(pVia->drmFD)) {
-	    xf86DrvMsg(pScreen-myNum, X_INFO,"[drm] Irq handler uninstalled.\n");
-	} else {
-	    xf86DrvMsg(pScreen->myNum, X_ERROR,
-		       "[drm] Could not uninstall irq handler.\n");
-	}
-    }
-}
-	    
-static void VIADRIRingBufferCleanup(DRIDriverContext *ctx)
-{
-    VIAPtr pVia = VIAPTR(ctx);
-    VIADRIPtr pVIADRI = pVia->devPrivate;
-    drm_via_dma_init_t ringBufInit;
-
-    if (pVIADRI->ringBufActive) {
-	xf86DrvMsg(pScreen->myNum, X_INFO, 
-		   "[drm] Cleaning up DMA ring-buffer.\n");
-	ringBufInit.func = VIA_CLEANUP_DMA;
-	if (drmCommandWrite(pVia->drmFD, DRM_VIA_DMA_INIT, &ringBufInit,
-			    sizeof(ringBufInit))) {
-	    xf86DrvMsg(pScreen->myNum, X_WARNING, 
-		       "[drm] Failed to clean up DMA ring-buffer: %d\n", errno);
-	}
-	pVIADRI->ringBufActive = 0;
-    }
-}
-
-static int VIADRIRingBufferInit(DRIDriverContext *ctx)
-{
-    VIAPtr pVia = VIAPTR(ctx);
-    VIADRIPtr pVIADRI = pVia->devPrivate;
-    drm_via_dma_init_t ringBufInit;
-    drmVersionPtr drmVer;
-
-    pVIADRI->ringBufActive = 0;
-
-    if (NULL == (drmVer = drmGetVersion(pVia->drmFD))) {
-	return GL_FALSE;
-    }
-
-    if (((drmVer->version_major <= 1) && (drmVer->version_minor <= 3))) {
-	return GL_FALSE;
-    } 
-
-    /*
-     * Info frome code-snippet on DRI-DEVEL list; Erdi Chen.
-     */
-
-    switch (pVia->ChipId) {
-    case PCI_CHIP_VT3259:
-    	ringBufInit.reg_pause_addr = 0x40c;
-	break;
-    default:
-    	ringBufInit.reg_pause_addr = 0x418;
-	break;
-    }
-   
-    ringBufInit.offset = pVia->agpSize;
-    ringBufInit.size = AGP_CMDBUF_SIZE;
-    ringBufInit.func = VIA_INIT_DMA;
-    if (drmCommandWrite(pVia->drmFD, DRM_VIA_DMA_INIT, &ringBufInit,
-			sizeof(ringBufInit))) {
-	xf86DrvMsg(pScreen->myNum, X_ERROR, 
-		   "[drm] Failed to initialize DMA ring-buffer: %d\n", errno);
-	return GL_FALSE;
-    }
-    xf86DrvMsg(pScreen->myNum, X_INFO, 
-	       "[drm] Initialized AGP ring-buffer, size 0x%lx at AGP offset 0x%lx.\n",
-	       ringBufInit.size, ringBufInit.offset);
-   
-    pVIADRI->ringBufActive = 1;
-    return GL_TRUE;
-}	    
-
-static int VIADRIAgpInit(const DRIDriverContext *ctx, VIAPtr pVia)
-{
-    unsigned long  agp_phys;
-    drmAddress agpaddr;
-    VIADRIPtr pVIADRI;
-    pVIADRI = pVia->devPrivate;
-    pVia->agpSize = 0;
-
-    if (drmAgpAcquire(pVia->drmFD) < 0) {
-        xf86DrvMsg(pScreen->myNum, X_ERROR, "[drm] drmAgpAcquire failed %d\n", errno);
-        return GL_FALSE;
-    }
-
-    if (drmAgpEnable(pVia->drmFD, drmAgpGetMode(pVia->drmFD)&~0x0) < 0) {
-         xf86DrvMsg(pScreen->myNum, X_ERROR, "[drm] drmAgpEnable failed\n");
-        return GL_FALSE;
-    }
-    
-    xf86DrvMsg(pScreen->myNum, X_INFO, "[drm] drmAgpEnabled succeeded\n");
-
-    if (drmAgpAlloc(pVia->drmFD, AGP_SIZE, 0, &agp_phys, &pVia->agpHandle) < 0) {
-        xf86DrvMsg(pScreen->myNum, X_ERROR,
-                 "[drm] drmAgpAlloc failed\n");
-        drmAgpRelease(pVia->drmFD);
-        return GL_FALSE;
-    }
-   
-    if (drmAgpBind(pVia->drmFD, pVia->agpHandle, 0) < 0) {
-        xf86DrvMsg(pScreen->myNum, X_ERROR,
-                 "[drm] drmAgpBind failed\n");
-        drmAgpFree(pVia->drmFD, pVia->agpHandle);
-        drmAgpRelease(pVia->drmFD);
-
-        return GL_FALSE;
-    }
-
-    /*
-     * Place the ring-buffer last in the AGP region, and restrict the
-     * public map not to include the buffer for security reasons.
-     */
-
-    pVia->agpSize = AGP_SIZE - AGP_CMDBUF_SIZE;
-    pVia->agpAddr = drmAgpBase(pVia->drmFD);
-    xf86DrvMsg(pScreen->myNum, X_INFO,
-                 "[drm] agpAddr = 0x%08lx\n",pVia->agpAddr);
-		 
-    pVIADRI->agp.size = pVia->agpSize;
-    if (drmAddMap(pVia->drmFD, (drm_handle_t)0,
-                 pVIADRI->agp.size, DRM_AGP, 0, 
-                 &pVIADRI->agp.handle) < 0) {
-	xf86DrvMsg(pScreen->myNum, X_ERROR,
-	    "[drm] Failed to map public agp area\n");
-        pVIADRI->agp.size = 0;
-        return GL_FALSE;
-    }  
-    /* Map AGP from kernel to Xserver - Not really needed */
-    drmMap(pVia->drmFD, pVIADRI->agp.handle,pVIADRI->agp.size, &agpaddr);
-
-    xf86DrvMsg(pScreen->myNum, X_INFO, 
-                "[drm] agpAddr = 0x%08lx\n", pVia->agpAddr);
-    xf86DrvMsg(pScreen->myNum, X_INFO, 
-                "[drm] agpSize = 0x%08lx\n", pVia->agpSize);
-    xf86DrvMsg(pScreen->myNum, X_INFO, 
-                "[drm] agp physical addr = 0x%08lx\n", agp_phys);
-
-    {
-	drm_via_agp_t agp;
-	agp.offset = 0;
-	agp.size = AGP_SIZE-AGP_CMDBUF_SIZE;
-	if (drmCommandWrite(pVia->drmFD, DRM_VIA_AGP_INIT, &agp,
-			    sizeof(drm_via_agp_t)) < 0) {
-	    drmUnmap(&agpaddr,pVia->agpSize);
-	    drmRmMap(pVia->drmFD,pVIADRI->agp.handle);
-	    drmAgpUnbind(pVia->drmFD, pVia->agpHandle);
-	    drmAgpFree(pVia->drmFD, pVia->agpHandle);
-	    drmAgpRelease(pVia->drmFD);
-	    return GL_FALSE;
-	}
-    }
-
-    return GL_TRUE;
-}
-
-static int VIADRIFBInit(DRIDriverContext * ctx, VIAPtr pVia)
-{   
-    int FBSize = pVia->FBFreeEnd-pVia->FBFreeStart;
-    int FBOffset = pVia->FBFreeStart; 
-    VIADRIPtr pVIADRI = pVia->devPrivate;
-    pVIADRI->fbOffset = FBOffset;
-    pVIADRI->fbSize = pVia->videoRambytes;
-
-    {
-	drm_via_fb_t fb;
-	fb.offset = FBOffset;
-	fb.size = FBSize;
-	
-	if (drmCommandWrite(pVia->drmFD, DRM_VIA_FB_INIT, &fb,
-			    sizeof(drm_via_fb_t)) < 0) {
-	    xf86DrvMsg(pScreen->myNum, X_ERROR,
-		       "[drm] failed to init frame buffer area\n");
-	    return GL_FALSE;
-	} else {
-	    xf86DrvMsg(pScreen->myNum, X_INFO,
-		       "[drm] FBFreeStart= 0x%08x FBFreeEnd= 0x%08x "
-		       "FBSize= 0x%08x\n",
-		       pVia->FBFreeStart, pVia->FBFreeEnd, FBSize);
-	    return GL_TRUE;	
-	}   
-    }
-}
-
-static int VIADRIPciInit(DRIDriverContext * ctx, VIAPtr pVia)
-{
-    return GL_TRUE;	
-}
-
-static int VIADRIScreenInit(DRIDriverContext * ctx)
-{
-    VIAPtr pVia = VIAPTR(ctx);
-    VIADRIPtr pVIADRI;
-    int err;
-
-#if 0
-    ctx->shared.SAREASize = ((sizeof(drm_sarea_t) + 0xfff) & 0x1000);
-#else
-    if (sizeof(drm_sarea_t)+sizeof(drm_via_sarea_t) > SAREA_MAX) {
-	xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-			"Data does not fit in SAREA\n");
-	return GL_FALSE;
-    }
-    ctx->shared.SAREASize = SAREA_MAX;
-#endif
-
-    ctx->drmFD = drmOpen(VIAKernelDriverName, NULL);
-    if (ctx->drmFD < 0) {
-        fprintf(stderr, "[drm] drmOpen failed\n");
-        return 0;
-    }
-    pVia->drmFD = ctx->drmFD;
-
-    err = drmSetBusid(ctx->drmFD, ctx->pciBusID);
-    if (err < 0) {
-        fprintf(stderr, "[drm] drmSetBusid failed (%d, %s), %s\n",
-                ctx->drmFD, ctx->pciBusID, strerror(-err));
-        return 0;
-    }
-
-    err = drmAddMap(ctx->drmFD, 0, ctx->shared.SAREASize, DRM_SHM,
-                  DRM_CONTAINS_LOCK, &ctx->shared.hSAREA);
-    if (err < 0) {
-        fprintf(stderr, "[drm] drmAddMap failed\n");
-        return 0;
-    }
-    fprintf(stderr, "[drm] added %d byte SAREA at 0x%08lx\n",
-            ctx->shared.SAREASize, ctx->shared.hSAREA);
-
-    if (drmMap(ctx->drmFD,
-               ctx->shared.hSAREA,
-               ctx->shared.SAREASize,
-               (drmAddressPtr)(&ctx->pSAREA)) < 0)
-    {
-        fprintf(stderr, "[drm] drmMap failed\n");
-        return 0;
-    }
-    memset(ctx->pSAREA, 0, ctx->shared.SAREASize);
-    fprintf(stderr, "[drm] mapped SAREA 0x%08lx to %p, size %d\n",
-            ctx->shared.hSAREA, ctx->pSAREA, ctx->shared.SAREASize);
-
-    /* Need to AddMap the framebuffer and mmio regions here:
-     */
-    if (drmAddMap(ctx->drmFD,
-                  (drm_handle_t)ctx->FBStart,
-                  ctx->FBSize,
-                  DRM_FRAME_BUFFER,
-#ifndef _EMBEDDED
-                   0,
-#else
-                   DRM_READ_ONLY,
-#endif
-                   &ctx->shared.hFrameBuffer) < 0)
-    {
-        fprintf(stderr, "[drm] drmAddMap framebuffer failed\n");
-        return 0;
-    }
-
-    fprintf(stderr, "[drm] framebuffer handle = 0x%08lx\n",
-            ctx->shared.hFrameBuffer);
-
-    pVIADRI = (VIADRIPtr) CALLOC(sizeof(VIADRIRec));
-    if (!pVIADRI) {
-        drmClose(ctx->drmFD);
-        return GL_FALSE;
-    }
-    pVia->devPrivate = pVIADRI;
-    ctx->driverClientMsg = pVIADRI;
-    ctx->driverClientMsgSize = sizeof(*pVIADRI);
-
-    /* DRIScreenInit doesn't add all the common mappings.  Add additional mappings here. */
-    if (!VIADRIMapInit(ctx, pVia)) {
-	VIADRICloseScreen(ctx);
-	return GL_FALSE;
-    }
-
-    pVIADRI->regs.size = VIA_MMIO_REGSIZE;
-    pVIADRI->regs.handle = pVia->registerHandle;
-    xf86DrvMsg(pScreen->myNum, X_INFO, "[drm] mmio Registers = 0x%08lx\n",
-	pVIADRI->regs.handle);
-
-    if (drmMap(pVia->drmFD,
-               pVIADRI->regs.handle,
-               pVIADRI->regs.size,
-               (drmAddress *)&pVia->MapBase) != 0)
-    {
-        VIADRICloseScreen(ctx);
-        return GL_FALSE;
-    }
-
-    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[dri] mmio mapped.\n" );
-
-    VIAEnableMMIO(ctx);
-
-    /* Get video memory clock. */
-    VGAOUT8(0x3D4, 0x3D);
-    pVia->MemClk = (VGAIN8(0x3D5) & 0xF0) >> 4;
-    xf86DrvMsg(0, X_INFO, "[dri] MemClk (0x%x)\n", pVia->MemClk);
-
-    /* 3D rendering has noise if not enabled. */
-    VIAEnableExtendedFIFO(ctx);
-
-    VIAInitialize2DEngine(ctx);
-
-    /* Must disable MMIO or 3D won't work. */
-    VIADisableMMIO(ctx);
-
-    VIAInitialize3DEngine(ctx);
-
-    pVia->IsPCI = !VIADRIAgpInit(ctx, pVia);
-
-    if (pVia->IsPCI) {
-        VIADRIPciInit(ctx, pVia);
-	xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[dri] use pci.\n" );
-    }
-    else
-        xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[dri] use agp.\n" );
-
-    if (!(VIADRIFBInit(ctx, pVia))) {
-	VIADRICloseScreen(ctx);
-        xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "[dri] frame buffer initialize fail .\n" );
-        return GL_FALSE;
-    }
-    
-    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[dri] frame buffer initialized.\n" );
- 
-    return VIADRIFinishScreenInit(ctx);
-}
-
-static void
-VIADRICloseScreen(DRIDriverContext * ctx)
-{
-    VIAPtr pVia = VIAPTR(ctx);
-    VIADRIPtr pVIADRI=(VIADRIPtr)pVia->devPrivate;
-
-    VIADRIRingBufferCleanup(ctx);
-
-    if (pVia->MapBase) {
-	xf86DrvMsg(pScreen->myNum, X_INFO, "[drm] Unmapping MMIO registers\n");
-        drmUnmap(pVia->MapBase, pVIADRI->regs.size);
-    }
-
-    if (pVia->agpSize) {
-	xf86DrvMsg(pScreen->myNum, X_INFO, "[drm] Freeing agp memory\n");
-        drmAgpFree(pVia->drmFD, pVia->agpHandle);
-	xf86DrvMsg(pScreen->myNum, X_INFO, "[drm] Releasing agp module\n");
-    	drmAgpRelease(pVia->drmFD);
-    }
-
-#if 0
-    if (pVia->DRIIrqEnable) 
-#endif
-        VIADRIIrqExit(ctx);
-}
-
-static int
-VIADRIFinishScreenInit(DRIDriverContext * ctx)
-{
-    VIAPtr pVia = VIAPTR(ctx);
-    VIADRIPtr pVIADRI;
-    int err;
-
-    err = drmCreateContext(ctx->drmFD, &ctx->serverContext);
-    if (err != 0) {
-        fprintf(stderr, "%s: drmCreateContext failed %d\n", __FUNCTION__, err);
-        return GL_FALSE;
-    }
-
-    DRM_LOCK(ctx->drmFD, ctx->pSAREA, ctx->serverContext, 0);
-
-
-    if (!VIADRIKernelInit(ctx, pVia)) {
-	VIADRICloseScreen(ctx);
-	return GL_FALSE;
-    }
-    xf86DrvMsg(pScreen->myNum, X_INFO, "[dri] kernel data initialized.\n");
-
-    /* set SAREA value */
-    {
-	drm_via_sarea_t *saPriv;
-
-	saPriv=(drm_via_sarea_t*)(((char*)ctx->pSAREA) +
-                               sizeof(drm_sarea_t));
-	assert(saPriv);
-	memset(saPriv, 0, sizeof(*saPriv));
-	saPriv->ctxOwner = -1;
-    }
-    pVIADRI=(VIADRIPtr)pVia->devPrivate;
-    pVIADRI->deviceID=pVia->Chipset;  
-    pVIADRI->width=ctx->shared.virtualWidth;
-    pVIADRI->height=ctx->shared.virtualHeight;
-    pVIADRI->mem=ctx->shared.fbSize;
-    pVIADRI->bytesPerPixel= (ctx->bpp+7) / 8; 
-    pVIADRI->sarea_priv_offset = sizeof(drm_sarea_t);
-    /* TODO */
-    pVIADRI->scrnX=pVIADRI->width;
-    pVIADRI->scrnY=pVIADRI->height;
-
-    /* Initialize IRQ */
-#if 0
-    if (pVia->DRIIrqEnable) 
-#endif
-	VIADRIIrqInit(ctx);
-    
-    pVIADRI->ringBufActive = 0;
-    VIADRIRingBufferInit(ctx);
-
-    return GL_TRUE;
-}
-
-/* Initialize the kernel data structures. */
-static int VIADRIKernelInit(DRIDriverContext * ctx, VIAPtr pVia)
-{
-    drm_via_init_t drmInfo;
-    memset(&drmInfo, 0, sizeof(drm_via_init_t));
-    drmInfo.sarea_priv_offset   = sizeof(drm_sarea_t);
-    drmInfo.func = VIA_INIT_MAP;
-    drmInfo.fb_offset           = pVia->FrameBufferBase;
-    drmInfo.mmio_offset         = pVia->registerHandle;
-    if (pVia->IsPCI)
-	drmInfo.agpAddr = (uint32_t)NULL;
-    else
-	drmInfo.agpAddr = (uint32_t)pVia->agpAddr;
-
-    if ((drmCommandWrite(pVia->drmFD, DRM_VIA_MAP_INIT,&drmInfo,
-			     sizeof(drm_via_init_t))) < 0)
-	    return GL_FALSE;
-
-    return GL_TRUE;
-}
-/* Add a map for the MMIO registers */
-static int VIADRIMapInit(DRIDriverContext * ctx, VIAPtr pVia)
-{
-    int flags = 0;
-
-    if (drmAddMap(pVia->drmFD, pVia->MmioBase, VIA_MMIO_REGSIZE,
-		  DRM_REGISTERS, flags, &pVia->registerHandle) < 0) {
-	return GL_FALSE;
-    }
-
-    xf86DrvMsg(pScreen->myNum, X_INFO,
-	"[drm] register handle = 0x%08lx\n", pVia->registerHandle);
-
-    return GL_TRUE;
-}
-
-static int viaValidateMode(const DRIDriverContext *ctx)
-{
-    VIAPtr pVia = VIAPTR(ctx);
-
-    return 1;
-}
-
-static int viaPostValidateMode(const DRIDriverContext *ctx)
-{
-    VIAPtr pVia = VIAPTR(ctx);
-
-    return 1;
-}
-
-static void VIAEnableMMIO(DRIDriverContext * ctx)
-{
-    /*vgaHWPtr hwp = VGAHWPTR(ctx);*/
-    VIAPtr pVia = VIAPTR(ctx);
-    unsigned char val;
-
-#if 0
-    if (xf86IsPrimaryPci(pVia->PciInfo)) {
-        /* If we are primary card, we still use std vga port. If we use
-         * MMIO, system will hang in vgaHWSave when our card used in
-         * PLE and KLE (integrated Trident MVP4)
-         */
-        vgaHWSetStdFuncs(hwp);
-    }
-    else {
-        vgaHWSetMmioFuncs(hwp, pVia->MapBase, 0x8000);
-    }
-#endif
-
-    val = VGAIN8(0x3c3);
-    VGAOUT8(0x3c3, val | 0x01);
-    val = VGAIN8(0x3cc);
-    VGAOUT8(0x3c2, val | 0x01);
-
-    /* Unlock Extended IO Space */
-    VGAOUT8(0x3c4, 0x10);
-    VGAOUT8(0x3c5, 0x01);
-
-    /* Enable MMIO */
-    if(!pVia->IsSecondary) {
-	VGAOUT8(0x3c4, 0x1a);
-	val = VGAIN8(0x3c5);
-#ifdef DEBUG
-	xf86DrvMsg(pScrn->scrnIndex, X_INFO, "primary val = %x\n", val);
-#endif
-	VGAOUT8(0x3c5, val | 0x68);
-    }
-    else {
-	VGAOUT8(0x3c4, 0x1a);
-	val = VGAIN8(0x3c5);
-#ifdef DEBUG
-	xf86DrvMsg(pScrn->scrnIndex, X_INFO, "secondary val = %x\n", val);
-#endif
-	VGAOUT8(0x3c5, val | 0x38);
-    }
-
-    /* Unlock CRTC registers */
-    VGAOUT8(0x3d4, 0x47);
-    VGAOUT8(0x3d5, 0x00);
-
-    return;
-}
-
-static void VIADisableMMIO(DRIDriverContext * ctx)
-{
-    VIAPtr pVia = VIAPTR(ctx);
-    unsigned char val;
-
-    VGAOUT8(0x3c4, 0x1a);
-    val = VGAIN8(0x3c5);
-    VGAOUT8(0x3c5, val & 0x97);
-
-    return;
-}
-
-static void VIADisableExtendedFIFO(DRIDriverContext *ctx)
-{
-    VIAPtr  pVia = VIAPTR(ctx);
-    uint32_t  dwGE230, dwGE298;
-
-    /* Cause of exit XWindow will dump back register value, others chipset no
-     * need to set extended fifo value */
-    if (pVia->Chipset == VIA_CLE266 && pVia->ChipRev < 15 &&
-        (ctx->shared.virtualWidth > 1024 || pVia->HasSecondary)) {
-        /* Turn off Extend FIFO */
-        /* 0x298[29] */
-        dwGE298 = VIAGETREG(0x298);
-        VIASETREG(0x298, dwGE298 | 0x20000000);
-        /* 0x230[21] */
-        dwGE230 = VIAGETREG(0x230);
-        VIASETREG(0x230, dwGE230 & ~0x00200000);
-        /* 0x298[29] */
-        dwGE298 = VIAGETREG(0x298);
-        VIASETREG(0x298, dwGE298 & ~0x20000000);
-    }
-}
-
-static void VIAEnableExtendedFIFO(DRIDriverContext *ctx)
-{
-    VIAPtr  pVia = VIAPTR(ctx);
-    uint8_t   bRegTemp;
-    uint32_t  dwGE230, dwGE298;
-
-    switch (pVia->Chipset) {
-    case VIA_CLE266:
-        if (pVia->ChipRev > 14) {  /* For 3123Cx */
-            if (pVia->HasSecondary) {  /* SAMM or DuoView case */
-                if (ctx->shared.virtualWidth >= 1024)
-    	        {
-    	            /* 3c5.16[0:5] */
-        	        VGAOUT8(0x3C4, 0x16);
-            	    bRegTemp = VGAIN8(0x3C5);
-    	            bRegTemp &= ~0x3F;
-        	        bRegTemp |= 0x1C;
-            	    VGAOUT8(0x3C5, bRegTemp);
-        	        /* 3c5.17[0:6] */
-            	    VGAOUT8(0x3C4, 0x17);
-                	bRegTemp = VGAIN8(0x3C5);
-    	            bRegTemp &= ~0x7F;
-        	        bRegTemp |= 0x3F;
-            	    VGAOUT8(0x3C5, bRegTemp);
-            	    pVia->EnableExtendedFIFO = GL_TRUE;
-    	        }
-            }
-            else   /* Single view or Simultaneoue case */
-            {
-                if (ctx->shared.virtualWidth > 1024)
-    	        {
-    	            /* 3c5.16[0:5] */
-        	        VGAOUT8(0x3C4, 0x16);
-            	    bRegTemp = VGAIN8(0x3C5);
-    	            bRegTemp &= ~0x3F;
-        	        bRegTemp |= 0x17;
-            	    VGAOUT8(0x3C5, bRegTemp);
-        	        /* 3c5.17[0:6] */
-            	    VGAOUT8(0x3C4, 0x17);
-                	bRegTemp = VGAIN8(0x3C5);
-    	            bRegTemp &= ~0x7F;
-        	        bRegTemp |= 0x2F;
-            	    VGAOUT8(0x3C5, bRegTemp);
-            	    pVia->EnableExtendedFIFO = GL_TRUE;
-    	        }
-            }
-            /* 3c5.18[0:5] */
-            VGAOUT8(0x3C4, 0x18);
-            bRegTemp = VGAIN8(0x3C5);
-            bRegTemp &= ~0x3F;
-            bRegTemp |= 0x17;
-            bRegTemp |= 0x40;  /* force the preq always higher than treq */
-            VGAOUT8(0x3C5, bRegTemp);
-        }
-        else {      /* for 3123Ax */
-            if (ctx->shared.virtualWidth > 1024 || pVia->HasSecondary) {
-                /* Turn on Extend FIFO */
-                /* 0x298[29] */
-                dwGE298 = VIAGETREG(0x298);
-                VIASETREG(0x298, dwGE298 | 0x20000000);
-                /* 0x230[21] */
-                dwGE230 = VIAGETREG(0x230);
-                VIASETREG(0x230, dwGE230 | 0x00200000);
-                /* 0x298[29] */
-                dwGE298 = VIAGETREG(0x298);
-                VIASETREG(0x298, dwGE298 & ~0x20000000);
-
-                /* 3c5.16[0:5] */
-                VGAOUT8(0x3C4, 0x16);
-                bRegTemp = VGAIN8(0x3C5);
-                bRegTemp &= ~0x3F;
-                bRegTemp |= 0x17;
-                /* bRegTemp |= 0x10; */
-                VGAOUT8(0x3C5, bRegTemp);
-                /* 3c5.17[0:6] */
-                VGAOUT8(0x3C4, 0x17);
-                bRegTemp = VGAIN8(0x3C5);
-                bRegTemp &= ~0x7F;
-                bRegTemp |= 0x2F;
-                /*bRegTemp |= 0x1F;*/
-                VGAOUT8(0x3C5, bRegTemp);
-                /* 3c5.18[0:5] */
-                VGAOUT8(0x3C4, 0x18);
-                bRegTemp = VGAIN8(0x3C5);
-                bRegTemp &= ~0x3F;
-                bRegTemp |= 0x17;
-                bRegTemp |= 0x40;  /* force the preq always higher than treq */
-                VGAOUT8(0x3C5, bRegTemp);
-          	    pVia->EnableExtendedFIFO = GL_TRUE;
-            }
-        }
-        break;
-    case VIA_KM400:
-        if (pVia->HasSecondary) {  /* SAMM or DuoView case */
-            if ((ctx->shared.virtualWidth >= 1600) &&
-                (pVia->MemClk <= VIA_MEM_DDR200)) {
-        	    /* enable CRT extendded FIFO */
-            	VGAOUT8(0x3C4, 0x17);
-                VGAOUT8(0x3C5, 0x1C);
-    	        /* revise second display queue depth and read threshold */
-        	    VGAOUT8(0x3C4, 0x16);
-            	bRegTemp = VGAIN8(0x3C5);
-    	        bRegTemp &= ~0x3F;
-    	        bRegTemp = (bRegTemp) | (0x09);
-                VGAOUT8(0x3C5, bRegTemp);
-            }
-            else {
-                /* enable CRT extendded FIFO */
-                VGAOUT8(0x3C4, 0x17);
-                VGAOUT8(0x3C5,0x3F);
-                /* revise second display queue depth and read threshold */
-                VGAOUT8(0x3C4, 0x16);
-                bRegTemp = VGAIN8(0x3C5);
-                bRegTemp &= ~0x3F;
-                bRegTemp = (bRegTemp) | (0x1C);
-                VGAOUT8(0x3C5, bRegTemp);
-            }
-            /* 3c5.18[0:5] */
-            VGAOUT8(0x3C4, 0x18);
-            bRegTemp = VGAIN8(0x3C5);
-            bRegTemp &= ~0x3F;
-            bRegTemp |= 0x17;
-            bRegTemp |= 0x40;  /* force the preq always higher than treq */
-            VGAOUT8(0x3C5, bRegTemp);
-       	    pVia->EnableExtendedFIFO = GL_TRUE;
-        }
-        else {
-            if ( (ctx->shared.virtualWidth > 1024) && (ctx->shared.virtualWidth <= 1280) )
-            {
-                /* enable CRT extendded FIFO */
-                VGAOUT8(0x3C4, 0x17);
-                VGAOUT8(0x3C5, 0x3F);
-                /* revise second display queue depth and read threshold */
-                VGAOUT8(0x3C4, 0x16);
-                bRegTemp = VGAIN8(0x3C5);
-                bRegTemp &= ~0x3F;
-                bRegTemp = (bRegTemp) | (0x17);
-                VGAOUT8(0x3C5, bRegTemp);
-           	    pVia->EnableExtendedFIFO = GL_TRUE;
-            }
-            else if ((ctx->shared.virtualWidth > 1280))
-            {
-                /* enable CRT extendded FIFO */
-                VGAOUT8(0x3C4, 0x17);
-                VGAOUT8(0x3C5, 0x3F);
-                /* revise second display queue depth and read threshold */
-                VGAOUT8(0x3C4, 0x16);
-                bRegTemp = VGAIN8(0x3C5);
-                bRegTemp &= ~0x3F;
-                bRegTemp = (bRegTemp) | (0x1C);
-                VGAOUT8(0x3C5, bRegTemp);
-           	    pVia->EnableExtendedFIFO = GL_TRUE;
-            }
-            else
-            {
-                /* enable CRT extendded FIFO */
-                VGAOUT8(0x3C4, 0x17);
-                VGAOUT8(0x3C5, 0x3F);
-                /* revise second display queue depth and read threshold */
-                VGAOUT8(0x3C4, 0x16);
-                bRegTemp = VGAIN8(0x3C5);
-                bRegTemp &= ~0x3F;
-                bRegTemp = (bRegTemp) | (0x10);
-                VGAOUT8(0x3C5, bRegTemp);
-            }
-            /* 3c5.18[0:5] */
-            VGAOUT8(0x3C4, 0x18);
-            bRegTemp = VGAIN8(0x3C5);
-            bRegTemp &= ~0x3F;
-            bRegTemp |= 0x17;
-            bRegTemp |= 0x40;  /* force the preq always higher than treq */
-            VGAOUT8(0x3C5, bRegTemp);
-        }
-        break;
-    case VIA_K8M800:
-        /*=* R1 Display FIFO depth (384 /8 -1 -> 0xbf) SR17[7:0] (8bits) *=*/
-        VGAOUT8(0x3c4, 0x17);
-        VGAOUT8(0x3c5, 0xbf);
-
-        /*=* R2 Display fetch datum threshold value (328/4 -> 0x52)
-             SR16[5:0], SR16[7] (7bits) *=*/
-        VGAOUT8(0x3c4, 0x16);
-        bRegTemp = VGAIN8(0x3c5) & ~0xBF;
-        bRegTemp |= (0x52 & 0x3F);
-        bRegTemp |= ((0x52 & 0x40) << 1);
-        VGAOUT8(0x3c5, bRegTemp);
-
-        /*=* R3 Switch to the highest agent threshold value (74 -> 0x4a)
-             SR18[5:0], SR18[7] (7bits) *=*/
-        VGAOUT8(0x3c4, 0x18);
-        bRegTemp = VGAIN8(0x3c5) & ~0xBF;
-        bRegTemp |= (0x4a & 0x3F);
-        bRegTemp |= ((0x4a & 0x40) << 1);
-        VGAOUT8(0x3c5, bRegTemp);
-#if 0
-        /*=* R4 Fetch Number for a scan line (unit: 8 bytes)
-             SR1C[7:0], SR1D[1:0] (10bits) *=*/
-        wRegTemp = (pBIOSInfo->offsetWidthByQWord >> 1) + 4;
-        VGAOUT8(0x3c4, 0x1c);
-        VGAOUT8(0x3c5, (uint8_t)(wRegTemp & 0xFF));
-        VGAOUT8(0x3c4, 0x1d);
-        bRegTemp = VGAIN8(0x3c5) & ~0x03;
-        VGAOUT8(0x3c5, bRegTemp | ((wRegTemp & 0x300) >> 8));
-#endif
-        if (ctx->shared.virtualWidth >= 1400 && ctx->bpp == 32)
-        {
-            /*=* Max. length for a request SR22[4:0] (64/4 -> 0x10) *=*/
-            VGAOUT8(0x3c4, 0x22);
-            bRegTemp = VGAIN8(0x3c5) & ~0x1F;
-            VGAOUT8(0x3c5, bRegTemp | 0x10);
-        }
-        else
-        {
-            /*=* Max. length for a request SR22[4:0]
-                 (128/4 -> over flow 0x0) *=*/
-            VGAOUT8(0x3c4, 0x22);
-            bRegTemp = VGAIN8(0x3c5) & ~0x1F;
-            VGAOUT8(0x3c5, bRegTemp);
-        }
-        break;
-    case VIA_PM800:
-        /*=* R1 Display FIFO depth (96-1 -> 0x5f) SR17[7:0] (8bits) *=*/
-        VGAOUT8(0x3c4, 0x17);
-        VGAOUT8(0x3c5, 0x5f);
-
-        /*=* R2 Display fetch datum threshold value (32 -> 0x20)
-             SR16[5:0], SR16[7] (7bits) *=*/
-        VGAOUT8(0x3c4, 0x16);
-        bRegTemp = VGAIN8(0x3c5) & ~0xBF;
-        bRegTemp |= (0x20 & 0x3F);
-        bRegTemp |= ((0x20 & 0x40) << 1);
-        VGAOUT8(0x3c5, bRegTemp);
-
-        /*=* R3 Switch to the highest agent threshold value (16 -> 0x10)
-             SR18[5:0], SR18[7] (7bits) *=*/
-        VGAOUT8(0x3c4, 0x18);
-        bRegTemp = VGAIN8(0x3c5) & ~0xBF;
-        bRegTemp |= (0x10 & 0x3F);
-        bRegTemp |= ((0x10 & 0x40) << 1);
-        VGAOUT8(0x3c5, bRegTemp);
-#if 0
-        /*=* R4 Fetch Number for a scan line (unit: 8 bytes)
-             SR1C[7:0], SR1D[1:0] (10bits) *=*/
-        wRegTemp = (pBIOSInfo->offsetWidthByQWord >> 1) + 4;
-        VGAOUT8(0x3c4, 0x1c);
-        VGAOUT8(0x3c5, (uint8_t)(wRegTemp & 0xFF));
-        VGAOUT8(0x3c4, 0x1d);
-        bRegTemp = VGAIN8(0x3c5) & ~0x03;
-        VGAOUT8(0x3c5, bRegTemp | ((wRegTemp & 0x300) >> 8));
-#endif
-        if (ctx->shared.virtualWidth >= 1400 && ctx->bpp == 32)
-        {
-            /*=* Max. length for a request SR22[4:0] (64/4 -> 0x10) *=*/
-            VGAOUT8(0x3c4, 0x22);
-            bRegTemp = VGAIN8(0x3c5) & ~0x1F;
-            VGAOUT8(0x3c5, bRegTemp | 0x10);
-        }
-        else
-        {
-            /*=* Max. length for a request SR22[4:0] (0x1F) *=*/
-            VGAOUT8(0x3c4, 0x22);
-            bRegTemp = VGAIN8(0x3c5) & ~0x1F;
-            VGAOUT8(0x3c5, bRegTemp | 0x1F);
-        }
-        break;
-    default:
-        break;
-    }
-}
-
-static void VIAInitialize2DEngine(DRIDriverContext *ctx)
-{
-    VIAPtr  pVia = VIAPTR(ctx);
-    uint32_t  dwVQStartAddr, dwVQEndAddr;
-    uint32_t  dwVQLen, dwVQStartL, dwVQEndL, dwVQStartEndH;
-    uint32_t  dwGEMode;
-
-    /* init 2D engine regs to reset 2D engine */
-    VIASETREG(0x04, 0x0);
-    VIASETREG(0x08, 0x0);
-    VIASETREG(0x0c, 0x0);
-    VIASETREG(0x10, 0x0);
-    VIASETREG(0x14, 0x0);
-    VIASETREG(0x18, 0x0);
-    VIASETREG(0x1c, 0x0);
-    VIASETREG(0x20, 0x0);
-    VIASETREG(0x24, 0x0);
-    VIASETREG(0x28, 0x0);
-    VIASETREG(0x2c, 0x0);
-    VIASETREG(0x30, 0x0);
-    VIASETREG(0x34, 0x0);
-    VIASETREG(0x38, 0x0);
-    VIASETREG(0x3c, 0x0);
-    VIASETREG(0x40, 0x0);
-
-    VIADisableMMIO(ctx);
-
-    /* Init AGP and VQ regs */
-    VIASETREG(0x43c, 0x00100000);
-    VIASETREG(0x440, 0x00000000);
-    VIASETREG(0x440, 0x00333004);
-    VIASETREG(0x440, 0x60000000);
-    VIASETREG(0x440, 0x61000000);
-    VIASETREG(0x440, 0x62000000);
-    VIASETREG(0x440, 0x63000000);
-    VIASETREG(0x440, 0x64000000);
-    VIASETREG(0x440, 0x7D000000);
-
-    VIASETREG(0x43c, 0xfe020000);
-    VIASETREG(0x440, 0x00000000);
-
-    if (pVia->VQStart != 0) {
-        /* Enable VQ */
-        dwVQStartAddr = pVia->VQStart;
-        dwVQEndAddr = pVia->VQEnd;
-        dwVQStartL = 0x50000000 | (dwVQStartAddr & 0xFFFFFF);
-        dwVQEndL = 0x51000000 | (dwVQEndAddr & 0xFFFFFF);
-        dwVQStartEndH = 0x52000000 | ((dwVQStartAddr & 0xFF000000) >> 24) |
-                        ((dwVQEndAddr & 0xFF000000) >> 16);
-        dwVQLen = 0x53000000 | (VIA_VQ_SIZE >> 3);
-
-        VIASETREG(0x43c, 0x00fe0000);
-        VIASETREG(0x440, 0x080003fe);
-        VIASETREG(0x440, 0x0a00027c);
-        VIASETREG(0x440, 0x0b000260);
-        VIASETREG(0x440, 0x0c000274);
-        VIASETREG(0x440, 0x0d000264);
-        VIASETREG(0x440, 0x0e000000);
-        VIASETREG(0x440, 0x0f000020);
-        VIASETREG(0x440, 0x1000027e);
-        VIASETREG(0x440, 0x110002fe);
-        VIASETREG(0x440, 0x200f0060);
-
-        VIASETREG(0x440, 0x00000006);
-        VIASETREG(0x440, 0x40008c0f);
-        VIASETREG(0x440, 0x44000000);
-        VIASETREG(0x440, 0x45080c04);
-        VIASETREG(0x440, 0x46800408);
-
-        VIASETREG(0x440, dwVQStartEndH);
-        VIASETREG(0x440, dwVQStartL);
-        VIASETREG(0x440, dwVQEndL);
-        VIASETREG(0x440, dwVQLen);
-    }
-    else {
-        /* Diable VQ */
-        VIASETREG(0x43c, 0x00fe0000);
-        VIASETREG(0x440, 0x00000004);
-        VIASETREG(0x440, 0x40008c0f);
-        VIASETREG(0x440, 0x44000000);
-        VIASETREG(0x440, 0x45080c04);
-        VIASETREG(0x440, 0x46800408);
-    }
-
-    dwGEMode = 0;
-
-    switch (ctx->bpp) {
-    case 16:
-        dwGEMode |= VIA_GEM_16bpp;
-        break;
-    case 32:
-        dwGEMode |= VIA_GEM_32bpp;
-        break;
-    default:
-        dwGEMode |= VIA_GEM_8bpp;
-        break;
-    }
-
-#if 0
-    switch (ctx->shared.virtualWidth) {
-    case 800:
-        dwGEMode |= VIA_GEM_800;
-        break;
-    case 1024:
-        dwGEMode |= VIA_GEM_1024;
-        break;
-    case 1280:
-        dwGEMode |= VIA_GEM_1280;
-        break;
-    case 1600:
-        dwGEMode |= VIA_GEM_1600;
-        break;
-    case 2048:
-        dwGEMode |= VIA_GEM_2048;
-        break;
-    default:
-        dwGEMode |= VIA_GEM_640;
-        break;
-    }
-#endif
-    
-    VIAEnableMMIO(ctx);
-
-    /* Set BPP and Pitch */
-    VIASETREG(VIA_REG_GEMODE, dwGEMode);
-
-    /* Set Src and Dst base address and pitch, pitch is qword */
-    VIASETREG(VIA_REG_SRCBASE, 0x0);
-    VIASETREG(VIA_REG_DSTBASE, 0x0);
-    VIASETREG(VIA_REG_PITCH, VIA_PITCH_ENABLE |
-              ((ctx->shared.virtualWidth * ctx->bpp >> 3) >> 3) |
-              (((ctx->shared.virtualWidth * ctx->bpp >> 3) >> 3) << 16));
-}
-
-static int b3DRegsInitialized = 0;
-
-static void VIAInitialize3DEngine(DRIDriverContext *ctx)
-{
-    VIAPtr  pVia = VIAPTR(ctx);
-    int i;
-
-    if (!b3DRegsInitialized)
-    {
-
-        VIASETREG(0x43C, 0x00010000);
-
-        for (i = 0; i <= 0x7D; i++)
-        {
-            VIASETREG(0x440, (uint32_t) i << 24);
-        }
-
-        VIASETREG(0x43C, 0x00020000);
-
-        for (i = 0; i <= 0x94; i++)
-        {
-            VIASETREG(0x440, (uint32_t) i << 24);
-        }
-
-        VIASETREG(0x440, 0x82400000);
-
-        VIASETREG(0x43C, 0x01020000);
-
-
-        for (i = 0; i <= 0x94; i++)
-        {
-            VIASETREG(0x440, (uint32_t) i << 24);
-        }
-
-        VIASETREG(0x440, 0x82400000);
-        VIASETREG(0x43C, 0xfe020000);
-
-        for (i = 0; i <= 0x03; i++)
-        {
-            VIASETREG(0x440, (uint32_t) i << 24);
-        }
-
-        VIASETREG(0x43C, 0x00030000);
-
-        for (i = 0; i <= 0xff; i++)
-        {
-            VIASETREG(0x440, 0);
-        }
-        VIASETREG(0x43C, 0x00100000);
-        VIASETREG(0x440, 0x00333004);
-        VIASETREG(0x440, 0x10000002);
-        VIASETREG(0x440, 0x60000000);
-        VIASETREG(0x440, 0x61000000);
-        VIASETREG(0x440, 0x62000000);
-        VIASETREG(0x440, 0x63000000);
-        VIASETREG(0x440, 0x64000000);
-
-        VIASETREG(0x43C, 0x00fe0000);
-
-        if (pVia->ChipRev >= 3 )
-            VIASETREG(0x440,0x40008c0f);
-        else
-            VIASETREG(0x440,0x4000800f);
-
-        VIASETREG(0x440,0x44000000);
-        VIASETREG(0x440,0x45080C04);
-        VIASETREG(0x440,0x46800408);
-        VIASETREG(0x440,0x50000000);
-        VIASETREG(0x440,0x51000000);
-        VIASETREG(0x440,0x52000000);
-        VIASETREG(0x440,0x53000000);
-
-        b3DRegsInitialized = 1;
-        xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-                   "3D Engine has been initialized.\n");
-    }
-
-    VIASETREG(0x43C,0x00fe0000);
-    VIASETREG(0x440,0x08000001);
-    VIASETREG(0x440,0x0A000183);
-    VIASETREG(0x440,0x0B00019F);
-    VIASETREG(0x440,0x0C00018B);
-    VIASETREG(0x440,0x0D00019B);
-    VIASETREG(0x440,0x0E000000);
-    VIASETREG(0x440,0x0F000000);
-    VIASETREG(0x440,0x10000000);
-    VIASETREG(0x440,0x11000000);
-    VIASETREG(0x440,0x20000000);
-}
-
-static int
-WaitIdleCLE266(VIAPtr pVia)
-{
-    int loop = 0;
-
-    /*mem_barrier();*/
-
-    while (!(VIAGETREG(VIA_REG_STATUS) & VIA_VR_QUEUE_BUSY) && (loop++ < MAXLOOP))
-        ;
-
-    while ((VIAGETREG(VIA_REG_STATUS) &
-          (VIA_CMD_RGTR_BUSY | VIA_2D_ENG_BUSY | VIA_3D_ENG_BUSY)) &&
-          (loop++ < MAXLOOP))
-        ;
-
-    return loop >= MAXLOOP;
-}
-
-static int viaInitFBDev(DRIDriverContext *ctx)
-{
-    VIAPtr pVia = CALLOC(sizeof(*pVia));
-
-    ctx->driverPrivate = (void *)pVia;
-
-    switch (ctx->chipset) {
-    case PCI_CHIP_CLE3122:
-    case PCI_CHIP_CLE3022:
-        pVia->Chipset = VIA_CLE266;
-        break;
-    case PCI_CHIP_VT7205:
-    case PCI_CHIP_VT3205:
-        pVia->Chipset = VIA_KM400;
-        break;
-    case PCI_CHIP_VT3204:
-    case PCI_CHIP_VT3344:
-        pVia->Chipset = VIA_K8M800;
-        break;
-    case PCI_CHIP_VT3259:
-        pVia->Chipset = VIA_PM800;
-        break;
-    default:
-        xf86DrvMsg(0, X_ERROR, "VIA: Unknown device ID (0x%x)\n", ctx->chipset);
-    }
-
-    /* _SOLO TODO XXX need to read ChipRev too */
-    pVia->ChipRev = 0;
-
-    pVia->videoRambytes = ctx->shared.fbSize;
-    pVia->MmioBase = ctx->MMIOStart;
-    pVia->FrameBufferBase = ctx->FBStart & 0xfc000000;
-
-    pVia->FBFreeStart = ctx->shared.virtualWidth * ctx->cpp *
-        ctx->shared.virtualHeight;
-
-#if 1
-    /* Alloc a second framebuffer for the second head */
-    pVia->FBFreeStart += ctx->shared.virtualWidth * ctx->cpp *
-	ctx->shared.virtualHeight;
-#endif
-
-    pVia->VQStart = pVia->FBFreeStart;
-    pVia->VQEnd = pVia->FBFreeStart + VIA_VQ_SIZE - 1;
-
-    pVia->FBFreeStart += VIA_VQ_SIZE;
-
-    pVia->FBFreeEnd = pVia->videoRambytes;
-
-    if (!VIADRIScreenInit(ctx))
-        return 0;
-
-    return 1;
-}
-
-static void viaHaltFBDev(DRIDriverContext *ctx)
-{
-    drmUnmap( ctx->pSAREA, ctx->shared.SAREASize );
-    drmClose(ctx->drmFD);
-
-    if (ctx->driverPrivate) {
-        free(ctx->driverPrivate);
-        ctx->driverPrivate = 0;
-    }
-}
-
-static int viaEngineShutdown(const DRIDriverContext *ctx)
-{
-    return 1;
-}
-
-static int viaEngineRestore(const DRIDriverContext *ctx)
-{
-    return 1;
-}
-
-const struct DRIDriverRec __driDriver =
-{
-    viaValidateMode,
-    viaPostValidateMode,
-    viaInitFBDev,
-    viaHaltFBDev,
-    viaEngineShutdown,
-    viaEngineRestore,  
-    0,
-};
-
-- 
cgit v1.2.3


From bbab68ae2db468cc72bf11b901d8e28ab86bd769 Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Sat, 6 Mar 2010 13:09:47 +0100
Subject: r300: remove unnecessary code

_tnl_UpdateFixedFunctionProgram is already called in r300_draw.c
---
 src/mesa/drivers/dri/r300/r300_state.c | 17 -----------------
 1 file changed, 17 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r300/r300_state.c b/src/mesa/drivers/dri/r300/r300_state.c
index 9d1ff6e2ba..ba4a963d40 100644
--- a/src/mesa/drivers/dri/r300/r300_state.c
+++ b/src/mesa/drivers/dri/r300/r300_state.c
@@ -1985,23 +1985,6 @@ void r300UpdateShaders(r300ContextPtr rmesa)
 	if (rmesa->options.hw_tcl_enabled) {
 		struct r300_vertex_program *vp;
 
-		if (rmesa->radeon.NewGLState) {
-			int i;
-			for (i = _TNL_FIRST_MAT; i <= _TNL_LAST_MAT; i++) {
-				rmesa->temp_attrib[i] =
-				    TNL_CONTEXT(ctx)->vb.AttribPtr[i];
-				TNL_CONTEXT(ctx)->vb.AttribPtr[i] =
-				    &rmesa->dummy_attrib[i];
-			}
-
-			_tnl_UpdateFixedFunctionProgram(ctx);
-
-			for (i = _TNL_FIRST_MAT; i <= _TNL_LAST_MAT; i++) {
-				TNL_CONTEXT(ctx)->vb.AttribPtr[i] =
-				    rmesa->temp_attrib[i];
-			}
-		}
-
 		vp = r300SelectAndTranslateVertexShader(ctx);
 
 		r300SwitchFallback(ctx, R300_FALLBACK_VERTEX_PROGRAM, vp->error);
-- 
cgit v1.2.3


From e2d96b2bf805fef0bfb016be1895a49551e2faa7 Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Sat, 6 Mar 2010 13:18:11 +0100
Subject: r300: no need to flush on context init

---
 src/mesa/drivers/dri/r300/r300_state.c | 2 --
 1 file changed, 2 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r300/r300_state.c b/src/mesa/drivers/dri/r300/r300_state.c
index ba4a963d40..6c2c367aab 100644
--- a/src/mesa/drivers/dri/r300/r300_state.c
+++ b/src/mesa/drivers/dri/r300/r300_state.c
@@ -1762,8 +1762,6 @@ static void r300ResetHwState(r300ContextPtr r300)
 	if (RADEON_DEBUG & RADEON_STATE)
 		fprintf(stderr, "%s\n", __FUNCTION__);
 
-	radeon_firevertices(&r300->radeon);
-
 	r300ColorMask(ctx,
 		      ctx->Color.ColorMask[0][RCOMP],
 		      ctx->Color.ColorMask[0][GCOMP],
-- 
cgit v1.2.3


From 89ea4022371998467faf26c5e27ab987469b91ef Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Sat, 6 Mar 2010 13:39:13 +0100
Subject: r300: recalculate point size, if point min/max size changes

Fixes two wine d3d9 unit tests
---
 src/mesa/drivers/dri/r300/r300_state.c | 2 ++
 1 file changed, 2 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r300/r300_state.c b/src/mesa/drivers/dri/r300/r300_state.c
index 6c2c367aab..5a056f018d 100644
--- a/src/mesa/drivers/dri/r300/r300_state.c
+++ b/src/mesa/drivers/dri/r300/r300_state.c
@@ -794,12 +794,14 @@ static void r300PointParameter(GLcontext * ctx, GLenum pname, const GLfloat * pa
 		R300_STATECHANGE(r300, ga_point_minmax);
 		r300->hw.ga_point_minmax.cmd[1] &= ~R300_GA_POINT_MINMAX_MIN_MASK;
 		r300->hw.ga_point_minmax.cmd[1] |= (GLuint)(ctx->Point.MinSize * 6.0);
+		r300PointSize(ctx, ctx->Point.Size);
 		break;
 	case GL_POINT_SIZE_MAX:
 		R300_STATECHANGE(r300, ga_point_minmax);
 		r300->hw.ga_point_minmax.cmd[1] &= ~R300_GA_POINT_MINMAX_MAX_MASK;
 		r300->hw.ga_point_minmax.cmd[1] |= (GLuint)(ctx->Point.MaxSize * 6.0)
 			<< R300_GA_POINT_MINMAX_MAX_SHIFT;
+		r300PointSize(ctx, ctx->Point.Size);
 		break;
 	case GL_POINT_DISTANCE_ATTENUATION:
 		break;
-- 
cgit v1.2.3


From 042779dc85191e51db79090613b5cc4498474e23 Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Sun, 7 Mar 2010 12:02:28 +0100
Subject: r300: VAP flush is needed only when vertex program or constants are
 changed

---
 src/mesa/drivers/dri/r300/r300_cmdbuf.c   | 21 +--------------------
 src/mesa/drivers/dri/r300/r300_context.h  |  1 -
 src/mesa/drivers/dri/r300/r300_state.c    |  1 -
 src/mesa/drivers/dri/r300/r300_vertprog.c |  4 +---
 4 files changed, 2 insertions(+), 25 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r300/r300_cmdbuf.c b/src/mesa/drivers/dri/r300/r300_cmdbuf.c
index 4787bafc66..6cfa5686f4 100644
--- a/src/mesa/drivers/dri/r300/r300_cmdbuf.c
+++ b/src/mesa/drivers/dri/r300/r300_cmdbuf.c
@@ -90,8 +90,7 @@ void r300_emit_vpu(struct r300_context *r300,
 {
     BATCH_LOCALS(&r300->radeon);
 
-    BEGIN_BATCH_NO_AUTOSTATE(5 + len);
-    OUT_BATCH_REGVAL(R300_VAP_PVS_STATE_FLUSH_REG, 0);
+    BEGIN_BATCH_NO_AUTOSTATE(3 + len);
     OUT_BATCH_REGVAL(R300_VAP_PVS_VECTOR_INDX_REG, addr);
     OUT_BATCH(CP_PACKET0(R300_VAP_PVS_UPLOAD_DATA, len-1) | RADEON_ONE_REG_WR);
     OUT_BATCH_TABLE(data, len);
@@ -778,24 +777,6 @@ void r300InitCmdBuf(r300ContextPtr r300)
 	/* VPU only on TCL */
 	if (has_tcl) {
 		int i;
-		if (r300->radeon.radeonScreen->kernel_mm) {
-			ALLOC_STATE(vap_flush, always, 10, 0);
-			/* flush processing vertices */
-			r300->hw.vap_flush.cmd[0] = cmdpacket0(r300->radeon.radeonScreen, R300_SC_SCREENDOOR, 1);
-			r300->hw.vap_flush.cmd[1] = 0;
-			r300->hw.vap_flush.cmd[2] = cmdpacket0(r300->radeon.radeonScreen, R300_RB3D_DSTCACHE_CTLSTAT, 1);
-			r300->hw.vap_flush.cmd[3] = R300_RB3D_DSTCACHE_CTLSTAT_DC_FLUSH_FLUSH_DIRTY_3D;
-			r300->hw.vap_flush.cmd[4] = cmdpacket0(r300->radeon.radeonScreen, RADEON_WAIT_UNTIL, 1);
-			r300->hw.vap_flush.cmd[5] = RADEON_WAIT_3D_IDLECLEAN;
-			r300->hw.vap_flush.cmd[6] = cmdpacket0(r300->radeon.radeonScreen, R300_SC_SCREENDOOR, 1);
-			r300->hw.vap_flush.cmd[7] = 0xffffff;
-			r300->hw.vap_flush.cmd[8] = cmdpacket0(r300->radeon.radeonScreen, R300_VAP_PVS_STATE_FLUSH_REG, 1);
-			r300->hw.vap_flush.cmd[9] = 0;
-		} else {
-			ALLOC_STATE(vap_flush, never, 10, 0);
-		}
-
-
 		ALLOC_STATE(vpi, vpu, R300_VPI_CMDSIZE, 0);
 		r300->hw.vpi.cmd[0] =
 			cmdvpu(r300->radeon.radeonScreen, R300_PVS_CODE_START, 0);
diff --git a/src/mesa/drivers/dri/r300/r300_context.h b/src/mesa/drivers/dri/r300/r300_context.h
index 78ab43a99f..df7115e7da 100644
--- a/src/mesa/drivers/dri/r300/r300_context.h
+++ b/src/mesa/drivers/dri/r300/r300_context.h
@@ -355,7 +355,6 @@ struct r300_hw_state {
 	struct radeon_state_atom zb_hiz_offset;	/* (4F44) */
 	struct radeon_state_atom zb_hiz_pitch;	/* (4F54) */
 
-	struct radeon_state_atom vap_flush;
 	struct radeon_state_atom vpi;	/* vp instructions */
 	struct radeon_state_atom vpp;	/* vp parameters */
 	struct radeon_state_atom vps;	/* vertex point size (?) */
diff --git a/src/mesa/drivers/dri/r300/r300_state.c b/src/mesa/drivers/dri/r300/r300_state.c
index 5a056f018d..5979dedac4 100644
--- a/src/mesa/drivers/dri/r300/r300_state.c
+++ b/src/mesa/drivers/dri/r300/r300_state.c
@@ -366,7 +366,6 @@ static void r300ClipPlane( GLcontext *ctx, GLenum plane, const GLfloat *eq )
 	p = (GLint) plane - (GLint) GL_CLIP_PLANE0;
 	ip = (GLint *)ctx->Transform._ClipUserPlane[p];
 
-	R300_STATECHANGE( rmesa, vap_flush );
 	R300_STATECHANGE( rmesa, vpucp[p] );
 	rmesa->hw.vpucp[p].cmd[R300_VPUCP_X] = ip[0];
 	rmesa->hw.vpucp[p].cmd[R300_VPUCP_Y] = ip[1];
diff --git a/src/mesa/drivers/dri/r300/r300_vertprog.c b/src/mesa/drivers/dri/r300/r300_vertprog.c
index cbe4cb8304..129004fee7 100644
--- a/src/mesa/drivers/dri/r300/r300_vertprog.c
+++ b/src/mesa/drivers/dri/r300/r300_vertprog.c
@@ -342,8 +342,6 @@ static void r300EmitVertexProgram(r300ContextPtr r300, int dest, struct r300_ver
 
 	assert((code->length > 0) && (code->length % 4 == 0));
 
-	R300_STATECHANGE( r300, vap_flush );
-
 	switch ((dest >> 8) & 0xf) {
 		case 0:
 			R300_STATECHANGE(r300, vpi);
@@ -381,7 +379,7 @@ void r300SetupVertexProgram(r300ContextPtr rmesa)
 	((drm_r300_cmd_header_t *) rmesa->hw.vpi.cmd)->vpu.count = 0;
 	((drm_r300_cmd_header_t *) rmesa->hw.vps.cmd)->vpu.count = 0;
 
-	R300_STATECHANGE(rmesa, vap_flush);
+	R300_STATECHANGE(rmesa, vap_cntl);
 	R300_STATECHANGE(rmesa, vpp);
 	param_count = r300VertexProgUpdateParams(ctx, prog, (float *)&rmesa->hw.vpp.cmd[R300_VPP_PARAM_0]);
 	bump_vpu_count(rmesa->hw.vpp.cmd, param_count);
-- 
cgit v1.2.3


From 9543f7f05f416ef6c1ac160e12e2d7ceed3b32ae Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Sat, 6 Feb 2010 19:37:23 +0100
Subject: radeon: fallback to software in glCopyTexImage if blit isn't
 available

---
 src/mesa/drivers/dri/radeon/radeon_tex_copy.c | 4 ++++
 1 file changed, 4 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/radeon/radeon_tex_copy.c b/src/mesa/drivers/dri/radeon/radeon_tex_copy.c
index 89fe9915a7..a4bb03d5d3 100644
--- a/src/mesa/drivers/dri/radeon/radeon_tex_copy.c
+++ b/src/mesa/drivers/dri/radeon/radeon_tex_copy.c
@@ -53,6 +53,10 @@ do_copy_texsubimage(GLcontext *ctx,
     unsigned src_width;
     unsigned dst_width;
 
+    if (!radeon->vtbl.blit) {
+        return GL_FALSE;
+    }
+
     if (_mesa_get_format_bits(timg->base.TexFormat, GL_DEPTH_BITS) > 0) {
         rrb = radeon_get_depthbuffer(radeon);
     } else {
-- 
cgit v1.2.3


From c0a0a1933d4c2a7d32284b5e7170e79ac6157043 Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Sat, 6 Feb 2010 18:25:36 +0100
Subject: r300: reset bos when validating buffers during blit

---
 src/mesa/drivers/dri/r300/r300_blit.c | 3 +++
 1 file changed, 3 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r300/r300_blit.c b/src/mesa/drivers/dri/r300/r300_blit.c
index 2bc761bc20..f9c085e283 100644
--- a/src/mesa/drivers/dri/r300/r300_blit.c
+++ b/src/mesa/drivers/dri/r300/r300_blit.c
@@ -381,6 +381,9 @@ static GLboolean validate_buffers(struct r300_context *r300,
                                   struct radeon_bo *dst_bo)
 {
     int ret;
+
+    radeon_cs_space_reset_bos(r300->radeon.cmdbuf.cs);
+
     ret = radeon_cs_space_check_with_bo(r300->radeon.cmdbuf.cs,
                                         src_bo, RADEON_GEM_DOMAIN_VRAM, 0);
     if (ret)
-- 
cgit v1.2.3


From ea3494b98cc764ead7e96746c0247ebc3a68e629 Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Thu, 4 Mar 2010 18:35:55 +0100
Subject: r300: allow src and dst BOs to be placed in GTT during blit

Fixes some relocation failures
---
 src/mesa/drivers/dri/r300/r300_blit.c | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r300/r300_blit.c b/src/mesa/drivers/dri/r300/r300_blit.c
index f9c085e283..d870c7f852 100644
--- a/src/mesa/drivers/dri/r300/r300_blit.c
+++ b/src/mesa/drivers/dri/r300/r300_blit.c
@@ -385,18 +385,12 @@ static GLboolean validate_buffers(struct r300_context *r300,
     radeon_cs_space_reset_bos(r300->radeon.cmdbuf.cs);
 
     ret = radeon_cs_space_check_with_bo(r300->radeon.cmdbuf.cs,
-                                        src_bo, RADEON_GEM_DOMAIN_VRAM, 0);
+                                        src_bo, RADEON_GEM_DOMAIN_VRAM | RADEON_GEM_DOMAIN_GTT, 0);
     if (ret)
         return GL_FALSE;
 
     ret = radeon_cs_space_check_with_bo(r300->radeon.cmdbuf.cs,
-                                        dst_bo, 0, RADEON_GEM_DOMAIN_VRAM);
-    if (ret)
-        return GL_FALSE;
-
-    ret = radeon_cs_space_check_with_bo(r300->radeon.cmdbuf.cs,
-                                        first_elem(&r300->radeon.dma.reserved)->bo,
-                                        RADEON_GEM_DOMAIN_GTT, 0);
+                                        dst_bo, 0, RADEON_GEM_DOMAIN_VRAM | RADEON_GEM_DOMAIN_GTT);
     if (ret)
         return GL_FALSE;
 
-- 
cgit v1.2.3


From 78eb4a2ea569a7bd624bbf83ece5c9acef82a8de Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Sat, 16 Jan 2010 15:11:37 +0100
Subject: radeon: no need to emit full state twice after flush

---
 src/mesa/drivers/dri/radeon/radeon_common.c | 5 -----
 1 file changed, 5 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/radeon/radeon_common.c b/src/mesa/drivers/dri/radeon/radeon_common.c
index 79f3ff7da6..13f1f0611b 100644
--- a/src/mesa/drivers/dri/radeon/radeon_common.c
+++ b/src/mesa/drivers/dri/radeon/radeon_common.c
@@ -1325,11 +1325,6 @@ void rcommonBeginBatch(radeonContextPtr rmesa, int n,
 		       const char *function,
 		       int line)
 {
-	if (!rmesa->cmdbuf.cs->cdw && dostate) {
-		radeon_print(RADEON_STATE, RADEON_NORMAL,
-				"Reemit state after flush (from %s)\n", function);
-		radeonEmitState(rmesa);
-	}
 	radeon_cs_begin(rmesa->cmdbuf.cs, n, file, function, line);
 
     radeon_print(RADEON_CS, RADEON_VERBOSE, "BEGIN_BATCH(%d) at %d, from %s:%i\n",
-- 
cgit v1.2.3


From 9c0c6c26decfa533ad3fe39f83e7530d4cfc8c2f Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Sun, 14 Feb 2010 00:02:05 +0100
Subject: r300: don't enable EXT_packed_depth_stencil

R300 hw doesn't support sampling from Z24_S8 or S8_Z24 formats.
---
 src/mesa/drivers/dri/r300/r300_context.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r300/r300_context.c b/src/mesa/drivers/dri/r300/r300_context.c
index df4cc11da4..ff35cd5275 100644
--- a/src/mesa/drivers/dri/r300/r300_context.c
+++ b/src/mesa/drivers/dri/r300/r300_context.c
@@ -109,7 +109,6 @@ static const struct dri_extension card_extensions[] = {
   {"GL_EXT_blend_func_separate",	GL_EXT_blend_func_separate_functions},
   {"GL_EXT_blend_minmax",		GL_EXT_blend_minmax_functions},
   {"GL_EXT_blend_subtract",		NULL},
-  {"GL_EXT_packed_depth_stencil",	NULL},
   {"GL_EXT_fog_coord",			GL_EXT_fog_coord_functions },
   {"GL_EXT_gpu_program_parameters",     GL_EXT_gpu_program_parameters_functions},
   {"GL_EXT_provoking_vertex",           GL_EXT_provoking_vertex_functions },
@@ -456,6 +455,9 @@ static void r300InitGLExtensions(GLcontext *ctx)
 	}
 	if (r300->radeon.radeonScreen->chip_family >= CHIP_FAMILY_RV350)
   		_mesa_enable_extension(ctx, "GL_ARB_half_float_vertex");
+
+	if (r300->radeon.radeonScreen->chip_family >= CHIP_FAMILY_RV515)
+		_mesa_enable_extension(ctx, "GL_EXT_packed_depth_stencil");
 }
 
 static void r300InitIoctlFuncs(struct dd_function_table *functions)
-- 
cgit v1.2.3


From 88a99bb305186fd0eaaae9bd0dbfa4c45f14cac7 Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Sat, 16 Jan 2010 18:38:17 +0100
Subject: radeon: added tiling functions

---
 src/mesa/drivers/dri/r200/Makefile        |   3 +-
 src/mesa/drivers/dri/r200/radeon_tile.c   |   1 +
 src/mesa/drivers/dri/r200/radeon_tile.h   |   1 +
 src/mesa/drivers/dri/r300/Makefile        |   3 +-
 src/mesa/drivers/dri/r300/radeon_tile.c   |   1 +
 src/mesa/drivers/dri/r300/radeon_tile.h   |   1 +
 src/mesa/drivers/dri/r600/Makefile        |   3 +-
 src/mesa/drivers/dri/r600/radeon_tile.c   |   1 +
 src/mesa/drivers/dri/r600/radeon_tile.h   |   1 +
 src/mesa/drivers/dri/radeon/Makefile      |   3 +-
 src/mesa/drivers/dri/radeon/radeon_tile.c | 246 ++++++++++++++++++++++++++++++
 src/mesa/drivers/dri/radeon/radeon_tile.h |  32 ++++
 12 files changed, 292 insertions(+), 4 deletions(-)
 create mode 120000 src/mesa/drivers/dri/r200/radeon_tile.c
 create mode 120000 src/mesa/drivers/dri/r200/radeon_tile.h
 create mode 120000 src/mesa/drivers/dri/r300/radeon_tile.c
 create mode 120000 src/mesa/drivers/dri/r300/radeon_tile.h
 create mode 120000 src/mesa/drivers/dri/r600/radeon_tile.c
 create mode 120000 src/mesa/drivers/dri/r600/radeon_tile.h
 create mode 100644 src/mesa/drivers/dri/radeon/radeon_tile.c
 create mode 100644 src/mesa/drivers/dri/radeon/radeon_tile.h

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r200/Makefile b/src/mesa/drivers/dri/r200/Makefile
index 2e86e8b941..d91e5482e9 100644
--- a/src/mesa/drivers/dri/r200/Makefile
+++ b/src/mesa/drivers/dri/r200/Makefile
@@ -24,7 +24,8 @@ RADEON_COMMON_SOURCES = \
 	radeon_queryobj.c \
 	radeon_span.c \
 	radeon_texture.c \
-	radeon_tex_copy.c
+	radeon_tex_copy.c \
+	radeon_tile.c
 
 DRIVER_SOURCES = r200_context.c \
 		 r200_ioctl.c \
diff --git a/src/mesa/drivers/dri/r200/radeon_tile.c b/src/mesa/drivers/dri/r200/radeon_tile.c
new file mode 120000
index 0000000000..d4bfe27da6
--- /dev/null
+++ b/src/mesa/drivers/dri/r200/radeon_tile.c
@@ -0,0 +1 @@
+../radeon/radeon_tile.c
\ No newline at end of file
diff --git a/src/mesa/drivers/dri/r200/radeon_tile.h b/src/mesa/drivers/dri/r200/radeon_tile.h
new file mode 120000
index 0000000000..31074c581e
--- /dev/null
+++ b/src/mesa/drivers/dri/r200/radeon_tile.h
@@ -0,0 +1 @@
+../radeon/radeon_tile.h
\ No newline at end of file
diff --git a/src/mesa/drivers/dri/r300/Makefile b/src/mesa/drivers/dri/r300/Makefile
index 08934fc996..730d801bb0 100644
--- a/src/mesa/drivers/dri/r300/Makefile
+++ b/src/mesa/drivers/dri/r300/Makefile
@@ -34,7 +34,8 @@ RADEON_COMMON_SOURCES = \
 	radeon_span.c \
 	radeon_queryobj.c \
 	radeon_texture.c \
-	radeon_tex_copy.c
+	radeon_tex_copy.c \
+	radeon_tile.c
 
 DRIVER_SOURCES = \
 		 radeon_screen.c \
diff --git a/src/mesa/drivers/dri/r300/radeon_tile.c b/src/mesa/drivers/dri/r300/radeon_tile.c
new file mode 120000
index 0000000000..d4bfe27da6
--- /dev/null
+++ b/src/mesa/drivers/dri/r300/radeon_tile.c
@@ -0,0 +1 @@
+../radeon/radeon_tile.c
\ No newline at end of file
diff --git a/src/mesa/drivers/dri/r300/radeon_tile.h b/src/mesa/drivers/dri/r300/radeon_tile.h
new file mode 120000
index 0000000000..31074c581e
--- /dev/null
+++ b/src/mesa/drivers/dri/r300/radeon_tile.h
@@ -0,0 +1 @@
+../radeon/radeon_tile.h
\ No newline at end of file
diff --git a/src/mesa/drivers/dri/r600/Makefile b/src/mesa/drivers/dri/r600/Makefile
index 2478b12658..b6d1c5f459 100644
--- a/src/mesa/drivers/dri/r600/Makefile
+++ b/src/mesa/drivers/dri/r600/Makefile
@@ -34,7 +34,8 @@ RADEON_COMMON_SOURCES = \
 	radeon_span.c \
 	radeon_texture.c \
 	radeon_queryobj.c \
-	radeon_tex_copy.c
+	radeon_tex_copy.c \
+	radeon_tile.c
 
 DRIVER_SOURCES = \
 		 radeon_screen.c \
diff --git a/src/mesa/drivers/dri/r600/radeon_tile.c b/src/mesa/drivers/dri/r600/radeon_tile.c
new file mode 120000
index 0000000000..d4bfe27da6
--- /dev/null
+++ b/src/mesa/drivers/dri/r600/radeon_tile.c
@@ -0,0 +1 @@
+../radeon/radeon_tile.c
\ No newline at end of file
diff --git a/src/mesa/drivers/dri/r600/radeon_tile.h b/src/mesa/drivers/dri/r600/radeon_tile.h
new file mode 120000
index 0000000000..31074c581e
--- /dev/null
+++ b/src/mesa/drivers/dri/r600/radeon_tile.h
@@ -0,0 +1 @@
+../radeon/radeon_tile.h
\ No newline at end of file
diff --git a/src/mesa/drivers/dri/radeon/Makefile b/src/mesa/drivers/dri/radeon/Makefile
index fc6d1c8e89..f7e8059c4f 100644
--- a/src/mesa/drivers/dri/radeon/Makefile
+++ b/src/mesa/drivers/dri/radeon/Makefile
@@ -25,7 +25,8 @@ RADEON_COMMON_SOURCES = \
 	radeon_queryobj.c \
 	radeon_span.c \
 	radeon_texture.c \
-	radeon_tex_copy.c
+	radeon_tex_copy.c \
+	radeon_tile.c
 
 DRIVER_SOURCES = \
 	radeon_context.c \
diff --git a/src/mesa/drivers/dri/radeon/radeon_tile.c b/src/mesa/drivers/dri/radeon/radeon_tile.c
new file mode 100644
index 0000000000..56f2fc46d9
--- /dev/null
+++ b/src/mesa/drivers/dri/radeon/radeon_tile.c
@@ -0,0 +1,246 @@
+/*
+ * Copyright (C) 2010 Maciej Cencora <m.cencora@gmail.com>
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#include "radeon_tile.h"
+
+#include <stdint.h>
+#include <string.h>
+
+#include <main/macros.h>
+
+#define MICRO_TILE_SIZE 32
+
+static void micro_tile_8_x_4_8bit(const void * const src, unsigned src_pitch,
+                                  void * const dst, unsigned dst_pitch,
+                                  unsigned width, unsigned height)
+{
+    unsigned row; /* current source row */
+    unsigned col; /* current source column */
+    unsigned k; /* number of processed tiles */
+    const unsigned tile_width = 8, tile_height = 4;
+    const unsigned tiles_in_row = (width + (tile_width - 1)) / tile_width;
+
+    k = 0;
+    for (row = 0; row < height; row += tile_height)
+    {
+        for (col = 0; col < width; col += tile_width, ++k)
+        {
+            uint8_t *src2 = (uint8_t *)src + src_pitch * row + col;
+            uint8_t *dst2 = (uint8_t *)dst + row * dst_pitch +
+                             (k % tiles_in_row) * MICRO_TILE_SIZE / sizeof(uint8_t);
+            unsigned j;
+
+            for (j = 0; j < MIN2(tile_height, height - row); ++j)
+            {
+                unsigned columns = MIN2(tile_width, width - col);
+                memcpy(dst2, src2, columns * sizeof(uint8_t));
+                dst2 += tile_width;
+                src2 += src_pitch;
+            }
+        }
+    }
+}
+
+static void micro_tile_4_x_4_16bit(const void * const src, unsigned src_pitch,
+                                   void * const dst, unsigned dst_pitch,
+                                   unsigned width, unsigned height)
+{
+    unsigned row; /* current source row */
+    unsigned col; /* current source column */
+    unsigned k; /* number of processed tiles */
+    const unsigned tile_width = 4, tile_height = 4;
+    const unsigned tiles_in_row = (width + (tile_width - 1)) / tile_width;
+
+    k = 0;
+    for (row = 0; row < height; row += tile_height)
+    {
+        for (col = 0; col < width; col += tile_width, ++k)
+        {
+            uint16_t *src2 = (uint16_t *)src + src_pitch * row + col;
+            uint16_t *dst2 = (uint16_t *)dst + row * dst_pitch +
+                             (k % tiles_in_row) * MICRO_TILE_SIZE / sizeof(uint16_t);
+            unsigned j;
+
+            for (j = 0; j < MIN2(tile_height, height - row); ++j)
+            {
+                unsigned columns = MIN2(tile_width, width - col);
+                memcpy(dst2, src2, columns * sizeof(uint16_t));
+                dst2 += tile_width;
+                src2 += src_pitch;
+            }
+        }
+    }
+}
+
+static void micro_tile_8_x_2_16bit(const void * const src, unsigned src_pitch,
+                                   void * const dst, unsigned dst_pitch,
+                                   unsigned width, unsigned height)
+{
+    unsigned row; /* current source row */
+    unsigned col; /* current source column */
+    unsigned k; /* number of processed tiles */
+    const unsigned tile_width = 8, tile_height = 2;
+    const unsigned tiles_in_row = (width + (tile_width - 1)) / tile_width;
+
+    k = 0;
+    for (row = 0; row < height; row += tile_height)
+    {
+        for (col = 0; col < width; col += tile_width, ++k)
+        {
+            uint16_t *src2 = (uint16_t *)src + src_pitch * row + col;
+            uint16_t *dst2 = (uint16_t *)dst + row * dst_pitch +
+                             (k % tiles_in_row) * MICRO_TILE_SIZE / sizeof(uint16_t);
+            unsigned j;
+
+            for (j = 0; j < MIN2(tile_height, height - row); ++j)
+            {
+                unsigned columns = MIN2(tile_width, width - col);
+                memcpy(dst2, src2, columns * sizeof(uint16_t));
+                dst2 += tile_width;
+                src2 += src_pitch;
+            }
+        }
+    }
+}
+
+static void micro_tile_4_x_2_32bit(const void * const src, unsigned src_pitch,
+                                   void * const dst, unsigned dst_pitch,
+                                   unsigned width, unsigned height)
+{
+    unsigned row; /* current source row */
+    unsigned col; /* current source column */
+    unsigned k; /* number of processed tiles */
+    const unsigned tile_width = 4, tile_height = 2;
+    const unsigned tiles_in_row = (width + (tile_width - 1)) / tile_width;
+
+    k = 0;
+    for (row = 0; row < height; row += tile_height)
+    {
+        for (col = 0; col < width; col += tile_width, ++k)
+        {
+            uint32_t *src2 = (uint32_t *)src + src_pitch * row + col;
+            uint32_t *dst2 = (uint32_t *)dst + row * dst_pitch +
+                             (k % tiles_in_row) * MICRO_TILE_SIZE / sizeof(uint32_t);
+            unsigned j;
+
+            for (j = 0; j < MIN2(tile_height, height - row); ++j)
+            {
+                unsigned columns = MIN2(tile_width, width - col);
+                memcpy(dst2, src2, columns * sizeof(uint32_t));
+                dst2 += tile_width;
+                src2 += src_pitch;
+            }
+        }
+    }
+}
+
+static void micro_tile_2_x_2_64bit(const void * const src, unsigned src_pitch,
+                                   void * const dst, unsigned dst_pitch,
+                                   unsigned width, unsigned height)
+{
+    unsigned row; /* current source row */
+    unsigned col; /* current source column */
+    unsigned k; /* number of processed tiles */
+    const unsigned tile_width = 2, tile_height = 2;
+    const unsigned tiles_in_row = (width + (tile_width - 1)) / tile_width;
+
+    k = 0;
+    for (row = 0; row < height; row += tile_height)
+    {
+        for (col = 0; col < width; col += tile_width, ++k)
+        {
+            uint64_t *src2 = (uint64_t *)src + src_pitch * row + col;
+            uint64_t *dst2 = (uint64_t *)dst + row * dst_pitch +
+                             (k % tiles_in_row) * MICRO_TILE_SIZE / sizeof(uint64_t);
+            unsigned j;
+
+            for (j = 0; j < MIN2(tile_height, height - row); ++j)
+            {
+                unsigned columns = MIN2(tile_width, width - col);
+                memcpy(dst2, src2, columns * sizeof(uint64_t));
+                dst2 += tile_width;
+                src2 += src_pitch;
+            }
+        }
+    }
+}
+
+static void micro_tile_1_x_1_128bit(const void * src, unsigned src_pitch,
+                                    void * dst, unsigned dst_pitch,
+                                    unsigned width, unsigned height)
+{
+    unsigned i, j;
+    const unsigned elem_size = 16; /* sizeof(uint128_t) */
+
+    for (j = 0; j < height; ++j)
+    {
+        for (i = 0; i < width; ++i)
+        {
+            memcpy(dst, src, width * elem_size);
+            dst += dst_pitch * elem_size;
+            src += src_pitch * elem_size;
+        }
+    }
+}
+
+void tile_image(const void * src, unsigned src_pitch,
+                void *dst, unsigned dst_pitch,
+                gl_format format, unsigned width, unsigned height)
+{
+    assert(src_pitch >= width);
+    assert(dst_pitch >= width);
+    assert(dst_pitch * _mesa_get_format_bytes(format) % MICRO_TILE_SIZE == 0);
+
+    switch (_mesa_get_format_bytes(format))
+    {
+        case 16:
+            micro_tile_1_x_1_128bit(src, src_pitch, dst, dst_pitch, width, height);
+            break;
+        case 8:
+            micro_tile_2_x_2_64bit(src, src_pitch, dst, dst_pitch, width, height);
+            break;
+        case 4:
+            micro_tile_4_x_2_32bit(src, src_pitch, dst, dst_pitch, width, height);
+            break;
+        case 2:
+            if (_mesa_get_format_bits(format, GL_DEPTH_BITS))
+            {
+                micro_tile_4_x_4_16bit(src, src_pitch, dst, dst_pitch, width, height);
+            }
+            else
+            {
+                micro_tile_8_x_2_16bit(src, src_pitch, dst, dst_pitch, width, height);
+            }
+            break;
+        case 1:
+            micro_tile_8_x_4_8bit(src, src_pitch, dst, dst_pitch, width, height);
+            break;
+        default:
+            assert(0);
+            break;
+    }
+}
\ No newline at end of file
diff --git a/src/mesa/drivers/dri/radeon/radeon_tile.h b/src/mesa/drivers/dri/radeon/radeon_tile.h
new file mode 100644
index 0000000000..4985e55204
--- /dev/null
+++ b/src/mesa/drivers/dri/radeon/radeon_tile.h
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2010 Maciej Cencora <m.cencora@gmail.com>
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#include <main/formats.h>
+
+void tile_image(const void * src, unsigned src_pitch,
+                void *dst, unsigned dst_pitch,
+                gl_format format, unsigned width, unsigned height);
-- 
cgit v1.2.3


From 65faa27aa639e7352708a30105db3318f22f5f93 Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Sat, 16 Jan 2010 23:11:10 +0100
Subject: radeon: add tile size getter

---
 src/mesa/drivers/dri/radeon/radeon_tile.c | 40 ++++++++++++++++++++++++++++++-
 src/mesa/drivers/dri/radeon/radeon_tile.h |  2 ++
 2 files changed, 41 insertions(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/radeon/radeon_tile.c b/src/mesa/drivers/dri/radeon/radeon_tile.c
index 56f2fc46d9..b998baf0a2 100644
--- a/src/mesa/drivers/dri/radeon/radeon_tile.c
+++ b/src/mesa/drivers/dri/radeon/radeon_tile.c
@@ -243,4 +243,42 @@ void tile_image(const void * src, unsigned src_pitch,
             assert(0);
             break;
     }
-}
\ No newline at end of file
+}
+
+void get_tile_size(gl_format format, unsigned *block_width, unsigned *block_height)
+{
+    switch (_mesa_get_format_bytes(format))
+    {
+        case 16:
+            *block_width = 1;
+            *block_height = 1;
+            break;
+        case 8:
+            *block_width = 2;
+            *block_height = 2;
+            break;
+        case 4:
+            *block_width = 4;
+            *block_height = 2;
+            break;
+        case 2:
+            if (_mesa_get_format_bits(format, GL_DEPTH_BITS))
+            {
+                *block_width = 4;
+                *block_height = 4;
+            }
+            else
+            {
+                *block_width = 8;
+                *block_height = 2;
+            }
+            break;
+        case 1:
+            *block_width = 8;
+            *block_height = 4;
+            break;
+        default:
+            assert(0);
+            break;
+    }
+}
diff --git a/src/mesa/drivers/dri/radeon/radeon_tile.h b/src/mesa/drivers/dri/radeon/radeon_tile.h
index 4985e55204..06850b361d 100644
--- a/src/mesa/drivers/dri/radeon/radeon_tile.h
+++ b/src/mesa/drivers/dri/radeon/radeon_tile.h
@@ -30,3 +30,5 @@
 void tile_image(const void * src, unsigned src_pitch,
                 void *dst, unsigned dst_pitch,
                 gl_format format, unsigned width, unsigned height);
+
+void get_tile_size(gl_format format, unsigned *block_width, unsigned *block_height);
-- 
cgit v1.2.3


From 5fefca5dbae9a5b00a3d624da0b5e582c00ad280 Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Sat, 6 Feb 2010 13:46:17 +0100
Subject: radeon: add software untiling functions

---
 src/mesa/drivers/dri/radeon/radeon_tile.c | 221 ++++++++++++++++++++++++++++++
 src/mesa/drivers/dri/radeon/radeon_tile.h |   4 +
 2 files changed, 225 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/radeon/radeon_tile.c b/src/mesa/drivers/dri/radeon/radeon_tile.c
index b998baf0a2..1e4729a0b5 100644
--- a/src/mesa/drivers/dri/radeon/radeon_tile.c
+++ b/src/mesa/drivers/dri/radeon/radeon_tile.c
@@ -245,6 +245,227 @@ void tile_image(const void * src, unsigned src_pitch,
     }
 }
 
+static void micro_untile_8_x_4_8bit(const void * const src, unsigned src_pitch,
+                                    void * const dst, unsigned dst_pitch,
+                                    unsigned width, unsigned height)
+{
+    unsigned row; /* current destination row */
+    unsigned col; /* current destination column */
+    unsigned k; /* current tile number */
+    const unsigned tile_width = 8, tile_height = 4;
+    const unsigned tiles_in_row = (width + (tile_width - 1)) / tile_width;
+
+    assert(src_pitch % tile_width == 0);
+
+    k = 0;
+    for (row = 0; row < height; row += tile_height)
+    {
+        for (col = 0; col < width; col += tile_width, ++k)
+        {
+            uint8_t *src2 = (uint8_t *)src + row * src_pitch +
+                             (k % tiles_in_row) * MICRO_TILE_SIZE / sizeof(uint8_t);
+            uint8_t *dst2 = (uint8_t *)dst + dst_pitch * row + col;
+            unsigned j;
+
+            for (j = 0; j < MIN2(tile_height, height - row); ++j)
+            {
+                unsigned columns = MIN2(tile_width, width - col);
+                memcpy(dst2, src2, columns * sizeof(uint8_t));
+                dst2 += dst_pitch;
+                src2 += tile_width;
+            }
+        }
+    }
+}
+
+static void micro_untile_8_x_2_16bit(const void * const src, unsigned src_pitch,
+                                     void * const dst, unsigned dst_pitch,
+                                     unsigned width, unsigned height)
+{
+    unsigned row; /* current destination row */
+    unsigned col; /* current destination column */
+    unsigned k; /* current tile number */
+    const unsigned tile_width = 8, tile_height = 2;
+    const unsigned tiles_in_row = (width + (tile_width - 1)) / tile_width;
+
+    assert(src_pitch % tile_width == 0);
+
+    k = 0;
+    for (row = 0; row < height; row += tile_height)
+    {
+        for (col = 0; col < width; col += tile_width, ++k)
+        {
+            uint16_t *src2 = (uint16_t *)src + row * src_pitch +
+                             (k % tiles_in_row) * MICRO_TILE_SIZE / sizeof(uint16_t);
+            uint16_t *dst2 = (uint16_t *)dst + dst_pitch * row + col;
+            unsigned j;
+
+            for (j = 0; j < MIN2(tile_height, height - row); ++j)
+            {
+                unsigned columns = MIN2(tile_width, width - col);
+                memcpy(dst2, src2, columns * sizeof(uint16_t));
+                dst2 += dst_pitch;
+                src2 += tile_width;
+            }
+        }
+    }
+}
+
+static void micro_untile_4_x_4_16bit(const void * const src, unsigned src_pitch,
+                                     void * const dst, unsigned dst_pitch,
+                                     unsigned width, unsigned height)
+{
+    unsigned row; /* current destination row */
+    unsigned col; /* current destination column */
+    unsigned k; /* current tile number */
+    const unsigned tile_width = 4, tile_height = 4;
+    const unsigned tiles_in_row = (width + (tile_width - 1)) / tile_width;
+
+    assert(src_pitch % tile_width == 0);
+
+    k = 0;
+    for (row = 0; row < height; row += tile_height)
+    {
+        for (col = 0; col < width; col += tile_width, ++k)
+        {
+            uint16_t *src2 = (uint16_t *)src + row * src_pitch +
+                             (k % tiles_in_row) * MICRO_TILE_SIZE / sizeof(uint16_t);
+            uint16_t *dst2 = (uint16_t *)dst + dst_pitch * row + col;
+            unsigned j;
+
+            for (j = 0; j < MIN2(tile_height, height - row); ++j)
+            {
+                unsigned columns = MIN2(tile_width, width - col);
+                memcpy(dst2, src2, columns * sizeof(uint16_t));
+                dst2 += dst_pitch;
+                src2 += tile_width;
+            }
+        }
+    }
+}
+
+static void micro_untile_4_x_2_32bit(const void * const src, unsigned src_pitch,
+                                     void * const dst, unsigned dst_pitch,
+                                     unsigned width, unsigned height)
+{
+    unsigned row; /* current destination row */
+    unsigned col; /* current destination column */
+    unsigned k; /* current tile number */
+    const unsigned tile_width = 4, tile_height = 2;
+    const unsigned tiles_in_row = (width + (tile_width - 1)) / tile_width;
+
+    assert(src_pitch % tile_width == 0);
+
+    k = 0;
+    for (row = 0; row < height; row += tile_height)
+    {
+        for (col = 0; col < width; col += tile_width, ++k)
+        {
+            uint32_t *src2 = (uint32_t *)src + row * src_pitch +
+                             (k % tiles_in_row) * MICRO_TILE_SIZE / sizeof(uint32_t);
+            uint32_t *dst2 = (uint32_t *)dst + dst_pitch * row + col;
+            unsigned j;
+
+            for (j = 0; j < MIN2(tile_height, height - row); ++j)
+            {
+                unsigned columns = MIN2(tile_width, width - col);
+                memcpy(dst2, src2, columns * sizeof(uint32_t));
+                dst2 += dst_pitch;
+                src2 += tile_width;
+            }
+        }
+    }
+}
+
+static void micro_untile_2_x_2_64bit(const void * const src, unsigned src_pitch,
+                                     void * const dst, unsigned dst_pitch,
+                                     unsigned width, unsigned height)
+{
+    unsigned row; /* current destination row */
+    unsigned col; /* current destination column */
+    unsigned k; /* current tile number */
+    const unsigned tile_width = 2, tile_height = 2;
+    const unsigned tiles_in_row = (width + (tile_width - 1)) / tile_width;
+
+    assert(src_pitch % tile_width == 0);
+
+    k = 0;
+    for (row = 0; row < height; row += tile_height)
+    {
+        for (col = 0; col < width; col += tile_width, ++k)
+        {
+            uint64_t *src2 = (uint64_t *)src + row * src_pitch +
+                             (k % tiles_in_row) * MICRO_TILE_SIZE / sizeof(uint64_t);
+            uint64_t *dst2 = (uint64_t *)dst + dst_pitch * row + col;
+            unsigned j;
+
+            for (j = 0; j < MIN2(tile_height, height - row); ++j)
+            {
+                unsigned columns = MIN2(tile_width, width - col);
+                memcpy(dst2, src2, columns * sizeof(uint64_t));
+                dst2 += dst_pitch;
+                src2 += tile_width;
+            }
+        }
+    }
+}
+
+static void micro_untile_1_x_1_128bit(const void * src, unsigned src_pitch,
+                                      void * dst, unsigned dst_pitch,
+                                      unsigned width, unsigned height)
+{
+    unsigned i, j;
+    const unsigned elem_size = 16; /* sizeof(uint128_t) */
+
+    for (j = 0; j < height; ++j)
+    {
+        for (i = 0; i < width; ++i)
+        {
+            memcpy(dst, src, width * elem_size);
+            dst += dst_pitch * elem_size;
+            src += src_pitch * elem_size;
+        }
+    }
+}
+
+void untile_image(const void * src, unsigned src_pitch,
+                  void *dst, unsigned dst_pitch,
+                  gl_format format, unsigned width, unsigned height)
+{
+    assert(src_pitch >= width);
+    assert(dst_pitch >= width);
+    assert(src_pitch * _mesa_get_format_bytes(format) % MICRO_TILE_SIZE == 0);
+
+    switch (_mesa_get_format_bytes(format))
+    {
+        case 16:
+            micro_untile_1_x_1_128bit(src, src_pitch, dst, dst_pitch, width, height);
+            break;
+        case 8:
+            micro_untile_2_x_2_64bit(src, src_pitch, dst, dst_pitch, width, height);
+            break;
+        case 4:
+            micro_untile_4_x_2_32bit(src, src_pitch, dst, dst_pitch, width, height);
+            break;
+        case 2:
+            if (_mesa_get_format_bits(format, GL_DEPTH_BITS))
+            {
+                micro_untile_4_x_4_16bit(src, src_pitch, dst, dst_pitch, width, height);
+            }
+            else
+            {
+                micro_untile_8_x_2_16bit(src, src_pitch, dst, dst_pitch, width, height);
+            }
+            break;
+        case 1:
+            micro_untile_8_x_4_8bit(src, src_pitch, dst, dst_pitch, width, height);
+            break;
+        default:
+            assert(0);
+            break;
+    }
+}
+
 void get_tile_size(gl_format format, unsigned *block_width, unsigned *block_height)
 {
     switch (_mesa_get_format_bytes(format))
diff --git a/src/mesa/drivers/dri/radeon/radeon_tile.h b/src/mesa/drivers/dri/radeon/radeon_tile.h
index 06850b361d..31d9c5611c 100644
--- a/src/mesa/drivers/dri/radeon/radeon_tile.h
+++ b/src/mesa/drivers/dri/radeon/radeon_tile.h
@@ -31,4 +31,8 @@ void tile_image(const void * src, unsigned src_pitch,
                 void *dst, unsigned dst_pitch,
                 gl_format format, unsigned width, unsigned height);
 
+void untile_image(const void * src, unsigned src_pitch,
+                  void *dst, unsigned dst_pitch,
+                  gl_format format, unsigned width, unsigned height);
+
 void get_tile_size(gl_format format, unsigned *block_width, unsigned *block_height);
-- 
cgit v1.2.3


From 8014b5f06853a5926ee772af232abdc9cd4e90c4 Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Sat, 6 Feb 2010 18:38:01 +0100
Subject: radeon: add some debugging info to sw tiling/untiling functions

---
 src/mesa/drivers/dri/radeon/radeon_tile.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/radeon/radeon_tile.c b/src/mesa/drivers/dri/radeon/radeon_tile.c
index 1e4729a0b5..935fa45e04 100644
--- a/src/mesa/drivers/dri/radeon/radeon_tile.c
+++ b/src/mesa/drivers/dri/radeon/radeon_tile.c
@@ -30,7 +30,8 @@
 #include <stdint.h>
 #include <string.h>
 
-#include <main/macros.h>
+#include "main/macros.h"
+#include "radeon_debug.h"
 
 #define MICRO_TILE_SIZE 32
 
@@ -215,6 +216,10 @@ void tile_image(const void * src, unsigned src_pitch,
     assert(dst_pitch >= width);
     assert(dst_pitch * _mesa_get_format_bytes(format) % MICRO_TILE_SIZE == 0);
 
+    radeon_print(RADEON_TEXTURE, RADEON_TRACE,
+                 "Software tiling: src_pitch %d, dst_pitch %d, width %d, height %d, bpp %d\n",
+                 src_pitch, dst_pitch, width, height, _mesa_get_format_bytes(format));
+
     switch (_mesa_get_format_bytes(format))
     {
         case 16:
@@ -436,6 +441,10 @@ void untile_image(const void * src, unsigned src_pitch,
     assert(dst_pitch >= width);
     assert(src_pitch * _mesa_get_format_bytes(format) % MICRO_TILE_SIZE == 0);
 
+    radeon_print(RADEON_TEXTURE, RADEON_TRACE,
+                 "Software untiling: src_pitch %d, dst_pitch %d, width %d, height %d, bpp %d\n",
+                 src_pitch, dst_pitch, width, height, _mesa_get_format_bytes(format));
+
     switch (_mesa_get_format_bytes(format))
     {
         case 16:
-- 
cgit v1.2.3


From b078a613bedb76242af177bee12520203bd63d50 Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Sat, 9 Jan 2010 20:36:47 +0100
Subject: radeon: add texture helper function

---
 src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c | 26 ++++++++++++++++++++++++
 src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h |  3 +++
 2 files changed, 29 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
index cd843d965e..117d695ce7 100644
--- a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
+++ b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
@@ -81,6 +81,32 @@ static unsigned get_compressed_image_size(
 	return rowStride * ((height + blockHeight - 1) / blockHeight);
 }
 
+static unsigned is_pot(unsigned value)
+{
+	unsigned m;
+
+	for (m = 1; m < value; m *= 2) {}
+
+	return value == m;
+}
+
+unsigned get_texture_image_row_stride(radeonContextPtr rmesa, gl_format format, unsigned width)
+{
+	if (_mesa_is_format_compressed(format)) {
+		return get_aligned_compressed_row_stride(format, width, rmesa->texture_compressed_row_align);
+	} else {
+		unsigned row_align;
+
+		if (is_pot(width)) {
+			row_align = rmesa->texture_row_align - 1;
+		} else {
+			row_align = rmesa->texture_rect_row_align - 1;
+		}
+
+		return (_mesa_format_row_stride(format, width) + row_align) & ~row_align;
+	}
+}
+
 /**
  * Compute sizes and fill in offset and blit information for the given
  * image (determined by \p face and \p level).
diff --git a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h
index c911688c1a..424bf5181a 100644
--- a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h
+++ b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h
@@ -89,4 +89,7 @@ void radeon_try_alloc_miptree(radeonContextPtr rmesa, radeonTexObj *t);
 GLuint radeon_miptree_image_offset(radeon_mipmap_tree *mt,
 				   GLuint face, GLuint level);
 uint32_t get_base_teximage_offset(radeonTexObj *texObj);
+
+unsigned get_texture_image_row_stride(radeonContextPtr rmesa, gl_format format, unsigned width);
+
 #endif /* __RADEON_MIPMAP_TREE_H_ */
-- 
cgit v1.2.3


From 0d3835475fcb803a295dc738d90b83788bdc9472 Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Sat, 16 Jan 2010 23:11:36 +0100
Subject: radeon: minor refactoring of mipmap code

---
 src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c | 50 +++++++++++-------------
 src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h |  6 +++
 2 files changed, 29 insertions(+), 27 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
index 117d695ce7..8c1f96ede0 100644
--- a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
+++ b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
@@ -36,6 +36,7 @@
 #include "main/texobj.h"
 #include "main/enums.h"
 #include "radeon_texture.h"
+#include "radeon_tile.h"
 
 static unsigned get_aligned_compressed_row_stride(
 		gl_format format,
@@ -69,16 +70,30 @@ static unsigned get_aligned_compressed_row_stride(
 	return stride;
 }
 
-static unsigned get_compressed_image_size(
+unsigned get_texture_image_size(
 		gl_format format,
 		unsigned rowStride,
-		unsigned height)
+		unsigned height,
+		unsigned depth,
+		unsigned tiling)
 {
-	unsigned blockWidth, blockHeight;
+	if (_mesa_is_format_compressed(format)) {
+		unsigned blockWidth, blockHeight;
 
-	_mesa_get_format_block_size(format, &blockWidth, &blockHeight);
+		_mesa_get_format_block_size(format, &blockWidth, &blockHeight);
+
+		return rowStride * ((height + blockHeight - 1) / blockHeight) * depth;
+	} else if (tiling) {
+		/* Need to align height to tile height */
+		unsigned tileWidth, tileHeight;
+
+		get_tile_size(format, &tileWidth, &tileHeight);
+		tileHeight--;
 
-	return rowStride * ((height + blockHeight - 1) / blockHeight);
+		height = (height + tileHeight) & ~tileHeight;
+	}
+
+	return rowStride * height * depth;
 }
 
 static unsigned is_pot(unsigned value)
@@ -118,34 +133,15 @@ static void compute_tex_image_offset(radeonContextPtr rmesa, radeon_mipmap_tree
 	GLuint face, GLuint level, GLuint* curOffset)
 {
 	radeon_mipmap_level *lvl = &mt->levels[level];
-	uint32_t row_align;
 	GLuint height;
 
 	height = _mesa_next_pow_two_32(lvl->height);
 
-	/* Find image size in bytes */
-	if (_mesa_is_format_compressed(mt->mesaFormat)) {
-		lvl->rowstride = get_aligned_compressed_row_stride(mt->mesaFormat, lvl->width, rmesa->texture_compressed_row_align);
-		lvl->size = get_compressed_image_size(mt->mesaFormat, lvl->rowstride, height);
-	} else if (mt->target == GL_TEXTURE_RECTANGLE_NV) {
-		row_align = rmesa->texture_rect_row_align - 1;
-		lvl->rowstride = (_mesa_format_row_stride(mt->mesaFormat, lvl->width) + row_align) & ~row_align;
-		lvl->size = lvl->rowstride * height;
-	} else if (mt->tilebits & RADEON_TXO_MICRO_TILE) {
-		/* tile pattern is 16 bytes x2. mipmaps stay 32 byte aligned,
-		 * though the actual offset may be different (if texture is less than
-		 * 32 bytes width) to the untiled case */
-		lvl->rowstride = (_mesa_format_row_stride(mt->mesaFormat, lvl->width) * 2 + 31) & ~31;
-		lvl->size = lvl->rowstride * ((height + 1) / 2) * lvl->depth;
-	} else {
-		row_align = rmesa->texture_row_align - 1;
-		lvl->rowstride = (_mesa_format_row_stride(mt->mesaFormat, lvl->width) + row_align) & ~row_align;
-		lvl->size = lvl->rowstride * height * lvl->depth;
-	}
+	lvl->rowstride = get_texture_image_row_stride(rmesa, mt->mesaFormat, lvl->width);
+	lvl->size = get_texture_image_size(mt->mesaFormat, lvl->rowstride, lvl->height, lvl->depth, mt->tilebits);
+
 	assert(lvl->size > 0);
 
-	/* All images are aligned to a 32-byte offset */
-	*curOffset = (*curOffset + 0x1f) & ~0x1f;
 	lvl->faces[face].offset = *curOffset;
 	*curOffset += lvl->size;
 
diff --git a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h
index 424bf5181a..69103e68de 100644
--- a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h
+++ b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h
@@ -92,4 +92,10 @@ uint32_t get_base_teximage_offset(radeonTexObj *texObj);
 
 unsigned get_texture_image_row_stride(radeonContextPtr rmesa, gl_format format, unsigned width);
 
+unsigned get_texture_image_size(
+		gl_format format,
+		unsigned rowStride,
+		unsigned height,
+		unsigned depth,
+		unsigned tiling);
 #endif /* __RADEON_MIPMAP_TREE_H_ */
-- 
cgit v1.2.3


From d0ca5c3100dfe7ee634e3b455002e11e88822ea7 Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Sun, 7 Mar 2010 12:09:43 +0100
Subject: radeon: properly calculate rowstride for tiled images

---
 src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c | 14 +++++++++-----
 src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h |  2 +-
 src/mesa/drivers/dri/radeon/radeon_texture.c     |  4 ++--
 src/mesa/drivers/dri/radeon/radeon_tile.c        |  2 --
 4 files changed, 12 insertions(+), 10 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
index 8c1f96ede0..ee91f30be5 100644
--- a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
+++ b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
@@ -105,17 +105,21 @@ static unsigned is_pot(unsigned value)
 	return value == m;
 }
 
-unsigned get_texture_image_row_stride(radeonContextPtr rmesa, gl_format format, unsigned width)
+unsigned get_texture_image_row_stride(radeonContextPtr rmesa, gl_format format, unsigned width, unsigned tiling)
 {
 	if (_mesa_is_format_compressed(format)) {
 		return get_aligned_compressed_row_stride(format, width, rmesa->texture_compressed_row_align);
 	} else {
 		unsigned row_align;
 
-		if (is_pot(width)) {
-			row_align = rmesa->texture_row_align - 1;
-		} else {
+		if (!is_pot(width)) {
 			row_align = rmesa->texture_rect_row_align - 1;
+		} else if (tiling) {
+			unsigned tileWidth, tileHeight;
+			get_tile_size(format, &tileWidth, &tileHeight);
+			row_align = tileWidth * _mesa_get_format_bytes(format) - 1;
+		} else {
+			row_align = rmesa->texture_row_align - 1;
 		}
 
 		return (_mesa_format_row_stride(format, width) + row_align) & ~row_align;
@@ -137,7 +141,7 @@ static void compute_tex_image_offset(radeonContextPtr rmesa, radeon_mipmap_tree
 
 	height = _mesa_next_pow_two_32(lvl->height);
 
-	lvl->rowstride = get_texture_image_row_stride(rmesa, mt->mesaFormat, lvl->width);
+	lvl->rowstride = get_texture_image_row_stride(rmesa, mt->mesaFormat, lvl->width, mt->tilebits);
 	lvl->size = get_texture_image_size(mt->mesaFormat, lvl->rowstride, lvl->height, lvl->depth, mt->tilebits);
 
 	assert(lvl->size > 0);
diff --git a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h
index 69103e68de..088f970172 100644
--- a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h
+++ b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h
@@ -90,7 +90,7 @@ GLuint radeon_miptree_image_offset(radeon_mipmap_tree *mt,
 				   GLuint face, GLuint level);
 uint32_t get_base_teximage_offset(radeonTexObj *texObj);
 
-unsigned get_texture_image_row_stride(radeonContextPtr rmesa, gl_format format, unsigned width);
+unsigned get_texture_image_row_stride(radeonContextPtr rmesa, gl_format format, unsigned width, unsigned tiling);
 
 unsigned get_texture_image_size(
 		gl_format format,
diff --git a/src/mesa/drivers/dri/radeon/radeon_texture.c b/src/mesa/drivers/dri/radeon/radeon_texture.c
index ff37fd3e86..62dec2d4e0 100644
--- a/src/mesa/drivers/dri/radeon/radeon_texture.c
+++ b/src/mesa/drivers/dri/radeon/radeon_texture.c
@@ -664,6 +664,7 @@ static void radeon_store_teximage(GLcontext* ctx, int dims,
 		struct gl_texture_image *texImage,
 		int compressed)
 {
+	radeonContextPtr rmesa = RADEON_CONTEXT(ctx);
 	radeonTexObj *t = radeon_tex_obj(texObj);
 	radeon_texture_image* image = get_radeon_texture_image(texImage);
 
@@ -678,8 +679,7 @@ static void radeon_store_teximage(GLcontext* ctx, int dims,
 		dstRowStride = image->mt->levels[image->mtlevel].rowstride;
 	} else if (t->bo) {
 		/* TFP case */
-		/* TODO */
-		assert(0);
+		dstRowStride = get_texture_image_row_stride(rmesa, texImage->TexFormat, width, 0);
 	} else {
 		dstRowStride = _mesa_format_row_stride(texImage->TexFormat, texImage->Width);
 	}
diff --git a/src/mesa/drivers/dri/radeon/radeon_tile.c b/src/mesa/drivers/dri/radeon/radeon_tile.c
index 935fa45e04..403da11010 100644
--- a/src/mesa/drivers/dri/radeon/radeon_tile.c
+++ b/src/mesa/drivers/dri/radeon/radeon_tile.c
@@ -214,7 +214,6 @@ void tile_image(const void * src, unsigned src_pitch,
 {
     assert(src_pitch >= width);
     assert(dst_pitch >= width);
-    assert(dst_pitch * _mesa_get_format_bytes(format) % MICRO_TILE_SIZE == 0);
 
     radeon_print(RADEON_TEXTURE, RADEON_TRACE,
                  "Software tiling: src_pitch %d, dst_pitch %d, width %d, height %d, bpp %d\n",
@@ -439,7 +438,6 @@ void untile_image(const void * src, unsigned src_pitch,
 {
     assert(src_pitch >= width);
     assert(dst_pitch >= width);
-    assert(src_pitch * _mesa_get_format_bytes(format) % MICRO_TILE_SIZE == 0);
 
     radeon_print(RADEON_TEXTURE, RADEON_TRACE,
                  "Software untiling: src_pitch %d, dst_pitch %d, width %d, height %d, bpp %d\n",
-- 
cgit v1.2.3


From 2b801066a1fcd8a83a367f70736d6adf2043f979 Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Sun, 7 Mar 2010 12:15:25 +0100
Subject: radeon: Some possible improvements that I spoted in
 radeon_tiled_texture branch.

---
 src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c | 11 +----------
 1 file changed, 1 insertion(+), 10 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
index ee91f30be5..c6cc417dd6 100644
--- a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
+++ b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
@@ -96,15 +96,6 @@ unsigned get_texture_image_size(
 	return rowStride * height * depth;
 }
 
-static unsigned is_pot(unsigned value)
-{
-	unsigned m;
-
-	for (m = 1; m < value; m *= 2) {}
-
-	return value == m;
-}
-
 unsigned get_texture_image_row_stride(radeonContextPtr rmesa, gl_format format, unsigned width, unsigned tiling)
 {
 	if (_mesa_is_format_compressed(format)) {
@@ -112,7 +103,7 @@ unsigned get_texture_image_row_stride(radeonContextPtr rmesa, gl_format format,
 	} else {
 		unsigned row_align;
 
-		if (!is_pot(width)) {
+		if (!_mesa_is_pow_two(width)) {
 			row_align = rmesa->texture_rect_row_align - 1;
 		} else if (tiling) {
 			unsigned tileWidth, tileHeight;
-- 
cgit v1.2.3


From ccbe3f0314c8278c55e1046a619969ae539564de Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Sun, 17 Jan 2010 12:47:46 +0100
Subject: radeon: move glGetTexImage handlers to seperate file

---
 src/mesa/drivers/dri/r200/Makefile                |  1 +
 src/mesa/drivers/dri/r200/radeon_tex_getimage.c   |  1 +
 src/mesa/drivers/dri/r300/Makefile                |  1 +
 src/mesa/drivers/dri/r300/radeon_tex_getimage.c   |  1 +
 src/mesa/drivers/dri/r600/Makefile                |  1 +
 src/mesa/drivers/dri/r600/radeon_tex_getimage.c   |  1 +
 src/mesa/drivers/dri/radeon/Makefile              |  1 +
 src/mesa/drivers/dri/radeon/radeon_tex_getimage.c | 95 +++++++++++++++++++++++
 src/mesa/drivers/dri/radeon/radeon_texture.c      | 60 --------------
 9 files changed, 102 insertions(+), 60 deletions(-)
 create mode 120000 src/mesa/drivers/dri/r200/radeon_tex_getimage.c
 create mode 120000 src/mesa/drivers/dri/r300/radeon_tex_getimage.c
 create mode 120000 src/mesa/drivers/dri/r600/radeon_tex_getimage.c
 create mode 100644 src/mesa/drivers/dri/radeon/radeon_tex_getimage.c

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r200/Makefile b/src/mesa/drivers/dri/r200/Makefile
index d91e5482e9..3f87100570 100644
--- a/src/mesa/drivers/dri/r200/Makefile
+++ b/src/mesa/drivers/dri/r200/Makefile
@@ -25,6 +25,7 @@ RADEON_COMMON_SOURCES = \
 	radeon_span.c \
 	radeon_texture.c \
 	radeon_tex_copy.c \
+	radeon_tex_getimage.c \
 	radeon_tile.c
 
 DRIVER_SOURCES = r200_context.c \
diff --git a/src/mesa/drivers/dri/r200/radeon_tex_getimage.c b/src/mesa/drivers/dri/r200/radeon_tex_getimage.c
new file mode 120000
index 0000000000..d9836d7326
--- /dev/null
+++ b/src/mesa/drivers/dri/r200/radeon_tex_getimage.c
@@ -0,0 +1 @@
+../radeon/radeon_tex_getimage.c
\ No newline at end of file
diff --git a/src/mesa/drivers/dri/r300/Makefile b/src/mesa/drivers/dri/r300/Makefile
index 730d801bb0..4257a32b89 100644
--- a/src/mesa/drivers/dri/r300/Makefile
+++ b/src/mesa/drivers/dri/r300/Makefile
@@ -35,6 +35,7 @@ RADEON_COMMON_SOURCES = \
 	radeon_queryobj.c \
 	radeon_texture.c \
 	radeon_tex_copy.c \
+	radeon_tex_getimage.c \
 	radeon_tile.c
 
 DRIVER_SOURCES = \
diff --git a/src/mesa/drivers/dri/r300/radeon_tex_getimage.c b/src/mesa/drivers/dri/r300/radeon_tex_getimage.c
new file mode 120000
index 0000000000..d9836d7326
--- /dev/null
+++ b/src/mesa/drivers/dri/r300/radeon_tex_getimage.c
@@ -0,0 +1 @@
+../radeon/radeon_tex_getimage.c
\ No newline at end of file
diff --git a/src/mesa/drivers/dri/r600/Makefile b/src/mesa/drivers/dri/r600/Makefile
index b6d1c5f459..f76859d11e 100644
--- a/src/mesa/drivers/dri/r600/Makefile
+++ b/src/mesa/drivers/dri/r600/Makefile
@@ -35,6 +35,7 @@ RADEON_COMMON_SOURCES = \
 	radeon_texture.c \
 	radeon_queryobj.c \
 	radeon_tex_copy.c \
+	radeon_tex_getimage.c \
 	radeon_tile.c
 
 DRIVER_SOURCES = \
diff --git a/src/mesa/drivers/dri/r600/radeon_tex_getimage.c b/src/mesa/drivers/dri/r600/radeon_tex_getimage.c
new file mode 120000
index 0000000000..d9836d7326
--- /dev/null
+++ b/src/mesa/drivers/dri/r600/radeon_tex_getimage.c
@@ -0,0 +1 @@
+../radeon/radeon_tex_getimage.c
\ No newline at end of file
diff --git a/src/mesa/drivers/dri/radeon/Makefile b/src/mesa/drivers/dri/radeon/Makefile
index f7e8059c4f..6904ebbee3 100644
--- a/src/mesa/drivers/dri/radeon/Makefile
+++ b/src/mesa/drivers/dri/radeon/Makefile
@@ -26,6 +26,7 @@ RADEON_COMMON_SOURCES = \
 	radeon_span.c \
 	radeon_texture.c \
 	radeon_tex_copy.c \
+	radeon_tex_getimage.c \
 	radeon_tile.c
 
 DRIVER_SOURCES = \
diff --git a/src/mesa/drivers/dri/radeon/radeon_tex_getimage.c b/src/mesa/drivers/dri/radeon/radeon_tex_getimage.c
new file mode 100644
index 0000000000..7bf6dcc2e3
--- /dev/null
+++ b/src/mesa/drivers/dri/radeon/radeon_tex_getimage.c
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2009 Maciej Cencora.
+ * Copyright (C) 2008 Nicolai Haehnle.
+ * Copyright (C) The Weather Channel, Inc.  2002.  All Rights Reserved.
+ *
+ * The Weather Channel (TM) funded Tungsten Graphics to develop the
+ * initial release of the Radeon 8500 driver under the XFree86 license.
+ * This notice must be preserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#include "radeon_common_context.h"
+#include "radeon_texture.h"
+#include "radeon_mipmap_tree.h"
+
+#include "main/texgetimage.h"
+
+/**
+ * Need to map texture image into memory before copying image data,
+ * then unmap it.
+ */
+static void
+radeon_get_tex_image(GLcontext * ctx, GLenum target, GLint level,
+             GLenum format, GLenum type, GLvoid * pixels,
+             struct gl_texture_object *texObj,
+             struct gl_texture_image *texImage, int compressed)
+{
+    radeon_texture_image *image = get_radeon_texture_image(texImage);
+
+    radeon_print(RADEON_TEXTURE, RADEON_NORMAL,
+                 "%s(%p, tex %p, image %p) compressed %d.\n",
+                 __func__, ctx, texObj, image, compressed);
+
+    if (image->mt) {
+        /* Map the texture image read-only */
+        radeon_teximage_map(image, GL_FALSE);
+    } else {
+        /* Image hasn't been uploaded to a miptree yet */
+        assert(image->base.Data);
+    }
+
+    if (compressed) {
+        /* FIXME: this can't work for small textures (mips) which
+                 use different hw stride */
+        _mesa_get_compressed_teximage(ctx, target, level, pixels,
+                          texObj, texImage);
+    } else {
+        _mesa_get_teximage(ctx, target, level, format, type, pixels,
+                   texObj, texImage);
+    }
+
+    if (image->mt) {
+        radeon_teximage_unmap(image);
+    }
+}
+
+void
+radeonGetTexImage(GLcontext * ctx, GLenum target, GLint level,
+          GLenum format, GLenum type, GLvoid * pixels,
+          struct gl_texture_object *texObj,
+          struct gl_texture_image *texImage)
+{
+    radeon_get_tex_image(ctx, target, level, format, type, pixels,
+                 texObj, texImage, 0);
+}
+
+void
+radeonGetCompressedTexImage(GLcontext *ctx, GLenum target, GLint level,
+                GLvoid *pixels,
+                struct gl_texture_object *texObj,
+                struct gl_texture_image *texImage)
+{
+    radeon_get_tex_image(ctx, target, level, 0, 0, pixels,
+                 texObj, texImage, 1);
+}
diff --git a/src/mesa/drivers/dri/radeon/radeon_texture.c b/src/mesa/drivers/dri/radeon/radeon_texture.c
index 62dec2d4e0..6a8e70d47e 100644
--- a/src/mesa/drivers/dri/radeon/radeon_texture.c
+++ b/src/mesa/drivers/dri/radeon/radeon_texture.c
@@ -39,7 +39,6 @@
 #include "main/texstore.h"
 #include "main/teximage.h"
 #include "main/texobj.h"
-#include "main/texgetimage.h"
 
 #include "xmlpool.h"		/* for symbolic values of enum-type options */
 
@@ -998,62 +997,3 @@ void radeonTexSubImage3D(GLcontext * ctx, GLenum target, GLint level,
 	radeon_texsubimage(ctx, 3, target, level, xoffset, yoffset, zoffset, width, height, depth, 0,
 		format, type, pixels, packing, texObj, texImage, 0);
 }
-
-/**
- * Need to map texture image into memory before copying image data,
- * then unmap it.
- */
-static void
-radeon_get_tex_image(GLcontext * ctx, GLenum target, GLint level,
-		     GLenum format, GLenum type, GLvoid * pixels,
-		     struct gl_texture_object *texObj,
-		     struct gl_texture_image *texImage, int compressed)
-{
-	radeon_texture_image *image = get_radeon_texture_image(texImage);
-
-	radeon_print(RADEON_TEXTURE, RADEON_NORMAL,
-			"%s(%p, tex %p, image %p) compressed %d.\n",
-			__func__, ctx, texObj, image, compressed);
-
-	if (image->mt) {
-		/* Map the texture image read-only */
-		radeon_teximage_map(image, GL_FALSE);
-	} else {
-		/* Image hasn't been uploaded to a miptree yet */
-		assert(image->base.Data);
-	}
-
-	if (compressed) {
-		/* FIXME: this can't work for small textures (mips) which
-		         use different hw stride */
-		_mesa_get_compressed_teximage(ctx, target, level, pixels,
-					      texObj, texImage);
-	} else {
-		_mesa_get_teximage(ctx, target, level, format, type, pixels,
-				   texObj, texImage);
-	}
-     
-	if (image->mt) {
-		radeon_teximage_unmap(image);
-	}
-}
-
-void
-radeonGetTexImage(GLcontext * ctx, GLenum target, GLint level,
-		  GLenum format, GLenum type, GLvoid * pixels,
-		  struct gl_texture_object *texObj,
-		  struct gl_texture_image *texImage)
-{
-	radeon_get_tex_image(ctx, target, level, format, type, pixels,
-			     texObj, texImage, 0);
-}
-
-void
-radeonGetCompressedTexImage(GLcontext *ctx, GLenum target, GLint level,
-			    GLvoid *pixels,
-			    struct gl_texture_object *texObj,
-			    struct gl_texture_image *texImage)
-{
-	radeon_get_tex_image(ctx, target, level, 0, 0, pixels,
-			     texObj, texImage, 1);
-}
-- 
cgit v1.2.3


From ba196a8318af6217fece3777ea038539fea4b415 Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Sun, 7 Mar 2010 15:00:29 +0100
Subject: radeon: handle compressed sRGB texture formats

---
 src/mesa/drivers/dri/radeon/radeon_texture.c | 9 +++++++++
 1 file changed, 9 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/radeon/radeon_texture.c b/src/mesa/drivers/dri/radeon/radeon_texture.c
index 6a8e70d47e..3ccc711253 100644
--- a/src/mesa/drivers/dri/radeon/radeon_texture.c
+++ b/src/mesa/drivers/dri/radeon/radeon_texture.c
@@ -558,6 +558,15 @@ gl_format radeonChooseTextureFormat(GLcontext * ctx,
 	case GL_COMPRESSED_SLUMINANCE_ALPHA:
 		return MESA_FORMAT_SLA8;
 
+	case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
+		return MESA_FORMAT_SRGB_DXT1;
+	case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
+		return MESA_FORMAT_SRGBA_DXT1;
+	case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
+		return MESA_FORMAT_SRGBA_DXT3;
+	case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
+		return MESA_FORMAT_SRGBA_DXT5;
+
 	default:
 		_mesa_problem(ctx,
 			      "unexpected internalFormat 0x%x in %s",
-- 
cgit v1.2.3


From 5befb6f810fb88ed1e51ec26b79b647cd15b1433 Mon Sep 17 00:00:00 2001
From: Francisco Jerez <currojerez@riseup.net>
Date: Sun, 7 Mar 2010 14:20:31 +0100
Subject: dri/nouveau: Check _ColorDrawBuffers[0] before emitting fb state.

---
 src/mesa/drivers/dri/nouveau/nv04_state_fb.c | 2 +-
 src/mesa/drivers/dri/nouveau/nv10_state_fb.c | 2 +-
 src/mesa/drivers/dri/nouveau/nv20_state_fb.c | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/nouveau/nv04_state_fb.c b/src/mesa/drivers/dri/nouveau/nv04_state_fb.c
index aad1e491d2..5e5e0c5874 100644
--- a/src/mesa/drivers/dri/nouveau/nv04_state_fb.c
+++ b/src/mesa/drivers/dri/nouveau/nv04_state_fb.c
@@ -63,7 +63,7 @@ nv04_emit_framebuffer(GLcontext *ctx, int emit)
 		return;
 
 	/* Render target */
-	if (fb->_NumColorDrawBuffers) {
+	if (fb->_ColorDrawBuffers[0]) {
 		s = &to_nouveau_renderbuffer(
 			fb->_ColorDrawBuffers[0])->surface;
 
diff --git a/src/mesa/drivers/dri/nouveau/nv10_state_fb.c b/src/mesa/drivers/dri/nouveau/nv10_state_fb.c
index 05c36b4f8f..6bd383ebcd 100644
--- a/src/mesa/drivers/dri/nouveau/nv10_state_fb.c
+++ b/src/mesa/drivers/dri/nouveau/nv10_state_fb.c
@@ -111,7 +111,7 @@ nv10_emit_framebuffer(GLcontext *ctx, int emit)
 	}
 
 	/* Render target */
-	if (fb->_NumColorDrawBuffers) {
+	if (fb->_ColorDrawBuffers[0]) {
 		s = &to_nouveau_renderbuffer(
 			fb->_ColorDrawBuffers[0])->surface;
 
diff --git a/src/mesa/drivers/dri/nouveau/nv20_state_fb.c b/src/mesa/drivers/dri/nouveau/nv20_state_fb.c
index 869acd6e31..d638541df9 100644
--- a/src/mesa/drivers/dri/nouveau/nv20_state_fb.c
+++ b/src/mesa/drivers/dri/nouveau/nv20_state_fb.c
@@ -67,7 +67,7 @@ nv20_emit_framebuffer(GLcontext *ctx, int emit)
 		return;
 
 	/* Render target */
-	if (fb->_NumColorDrawBuffers) {
+	if (fb->_ColorDrawBuffers[0]) {
 		s = &to_nouveau_renderbuffer(
 			fb->_ColorDrawBuffers[0])->surface;
 
-- 
cgit v1.2.3


From e64680bc1e36699096af5ade876b6cb0f5791ad0 Mon Sep 17 00:00:00 2001
From: Andrew Randrianasulu <randrik@mail.ru>
Date: Tue, 2 Mar 2010 01:29:14 +0000
Subject: dri/nouveau: Trivially add GL_NV_blend_square

Signed-off-by: Francisco Jerez <currojerez@riseup.net>
---
 src/mesa/drivers/dri/nouveau/nouveau_context.c | 1 +
 1 file changed, 1 insertion(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_context.c b/src/mesa/drivers/dri/nouveau/nouveau_context.c
index 52185a2fb9..e26ed36529 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_context.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_context.c
@@ -56,6 +56,7 @@ static const struct dri_extension nouveau_extensions[] = {
 	{ "GL_ARB_texture_mirrored_repeat", NULL },
 	{ "GL_EXT_stencil_wrap",	NULL },
 	{ "GL_EXT_fog_coord",		GL_EXT_fog_coord_functions },
+	{ "GL_NV_blend_square",         NULL },
 	{ "GL_SGIS_generate_mipmap",	NULL },
 	{ NULL,				NULL }
 };
-- 
cgit v1.2.3


From 6a15edfed326a06f08ac63020dc9472e45d8a9e1 Mon Sep 17 00:00:00 2001
From: Andrew Randrianasulu <randrik@mail.ru>
Date: Sun, 7 Mar 2010 01:09:21 +0000
Subject: dri/nv04: GL_EXT_secondary_color

Signed-off-by: Francisco Jerez <currojerez@riseup.net>
---
 src/mesa/drivers/dri/nouveau/nouveau_context.c   | 10 ++++++----
 src/mesa/drivers/dri/nouveau/nv04_state_raster.c |  8 ++++++++
 2 files changed, 14 insertions(+), 4 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_context.c b/src/mesa/drivers/dri/nouveau/nouveau_context.c
index e26ed36529..502e01255c 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_context.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_context.c
@@ -43,19 +43,21 @@
 
 #define need_GL_EXT_framebuffer_object
 #define need_GL_EXT_fog_coord
+#define need_GL_EXT_secondary_color
 
 #include "main/remap_helper.h"
 
 static const struct dri_extension nouveau_extensions[] = {
 	{ "GL_ARB_multitexture",	NULL },
+	{ "GL_ARB_texture_env_add",	NULL },
 	{ "GL_ARB_texture_env_combine",	NULL },
 	{ "GL_ARB_texture_env_dot3",	NULL },
-	{ "GL_ARB_texture_env_add",	NULL },
-	{ "GL_EXT_texture_lod_bias",	NULL },
-	{ "GL_EXT_framebuffer_object",	GL_EXT_framebuffer_object_functions },
 	{ "GL_ARB_texture_mirrored_repeat", NULL },
-	{ "GL_EXT_stencil_wrap",	NULL },
 	{ "GL_EXT_fog_coord",		GL_EXT_fog_coord_functions },
+	{ "GL_EXT_framebuffer_object",	GL_EXT_framebuffer_object_functions },
+	{ "GL_EXT_secondary_color",	GL_EXT_secondary_color_functions },
+	{ "GL_EXT_stencil_wrap",	NULL },
+	{ "GL_EXT_texture_lod_bias",	NULL },
 	{ "GL_NV_blend_square",         NULL },
 	{ "GL_SGIS_generate_mipmap",	NULL },
 	{ NULL,				NULL }
diff --git a/src/mesa/drivers/dri/nouveau/nv04_state_raster.c b/src/mesa/drivers/dri/nouveau/nv04_state_raster.c
index 4314fc33cf..c191571a5f 100644
--- a/src/mesa/drivers/dri/nouveau/nv04_state_raster.c
+++ b/src/mesa/drivers/dri/nouveau/nv04_state_raster.c
@@ -275,6 +275,10 @@ nv04_emit_blend(GLcontext *ctx, int emit)
 		else
 			blend |= NV04_MULTITEX_TRIANGLE_BLEND_SHADE_MODE_FLAT;
 
+		/* Secondary color */
+		if (NEED_SECONDARY_COLOR(ctx))
+			blend |= NV04_MULTITEX_TRIANGLE_BLEND_SPECULAR_ENABLE;
+
 		/* Fog. */
 		if (ctx->Fog.Enabled)
 			blend |= NV04_MULTITEX_TRIANGLE_BLEND_FOG_ENABLE;
@@ -309,6 +313,10 @@ nv04_emit_blend(GLcontext *ctx, int emit)
 		else
 			blend |= get_texenv_mode(GL_MODULATE);
 
+		/* Secondary color */
+		if (NEED_SECONDARY_COLOR(ctx))
+			blend |= NV04_TEXTURED_TRIANGLE_BLEND_SPECULAR_ENABLE;
+
 		/* Fog. */
 		if (ctx->Fog.Enabled)
 			blend |= NV04_TEXTURED_TRIANGLE_BLEND_FOG_ENABLE;
-- 
cgit v1.2.3


From 75f52d1e5210944d7e92787c637285fd83533053 Mon Sep 17 00:00:00 2001
From: Francisco Jerez <currojerez@riseup.net>
Date: Sun, 7 Mar 2010 18:40:21 +0100
Subject: dri/nouveau: Fix nv[12]x color sum.

---
 src/mesa/drivers/dri/nouveau/nouveau_state.c  | 1 +
 src/mesa/drivers/dri/nouveau/nv10_state_tnl.c | 6 ++++--
 src/mesa/drivers/dri/nouveau/nv20_state_tnl.c | 2 +-
 3 files changed, 6 insertions(+), 3 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_state.c b/src/mesa/drivers/dri/nouveau/nouveau_state.c
index e1871db0eb..bc610451b4 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_state.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_state.c
@@ -150,6 +150,7 @@ nouveau_enable(GLcontext *ctx, GLenum cap, GLboolean state)
 		break;
 	case GL_COLOR_SUM_EXT:
 		context_dirty(ctx, FRAG);
+		context_dirty(ctx, LIGHT_MODEL);
 		break;
 	case GL_CULL_FACE:
 		context_dirty(ctx, CULL_FACE);
diff --git a/src/mesa/drivers/dri/nouveau/nv10_state_tnl.c b/src/mesa/drivers/dri/nouveau/nv10_state_tnl.c
index 6db14d83b8..406e24c455 100644
--- a/src/mesa/drivers/dri/nouveau/nv10_state_tnl.c
+++ b/src/mesa/drivers/dri/nouveau/nv10_state_tnl.c
@@ -201,8 +201,10 @@ nv10_emit_light_model(GLcontext *ctx, int emit)
 	BEGIN_RING(chan, celsius, NV10TCL_LIGHT_MODEL, 1);
 	OUT_RING(chan, ((m->LocalViewer ?
 			 NV10TCL_LIGHT_MODEL_LOCAL_VIEWER : 0) |
-			(m->ColorControl == GL_SEPARATE_SPECULAR_COLOR ?
-			 NV10TCL_LIGHT_MODEL_SEPARATE_SPECULAR : 0)));
+			(NEED_SECONDARY_COLOR(ctx) ?
+			 NV10TCL_LIGHT_MODEL_SEPARATE_SPECULAR : 0) |
+			(!ctx->Light.Enabled && ctx->Fog.ColorSumEnabled ?
+			 NV10TCL_LIGHT_MODEL_VERTEX_SPECULAR : 0)));
 }
 
 static float
diff --git a/src/mesa/drivers/dri/nouveau/nv20_state_tnl.c b/src/mesa/drivers/dri/nouveau/nv20_state_tnl.c
index 0d566064f6..43f8c72312 100644
--- a/src/mesa/drivers/dri/nouveau/nv20_state_tnl.c
+++ b/src/mesa/drivers/dri/nouveau/nv20_state_tnl.c
@@ -158,7 +158,7 @@ nv20_emit_light_model(GLcontext *ctx, int emit)
 	OUT_RING(chan, ((m->LocalViewer ?
 			 NV20TCL_LIGHT_MODEL_VIEWER_LOCAL :
 			 NV20TCL_LIGHT_MODEL_VIEWER_NONLOCAL) |
-			(m->ColorControl == GL_SEPARATE_SPECULAR_COLOR ?
+			(NEED_SECONDARY_COLOR(ctx) ?
 			 NV20TCL_LIGHT_MODEL_SEPARATE_SPECULAR :
 			 0)));
 
-- 
cgit v1.2.3


From ea027bda8e4a7cdd8f131e01ab4ff80d6c6a3ab7 Mon Sep 17 00:00:00 2001
From: Francisco Jerez <currojerez@riseup.net>
Date: Sun, 7 Mar 2010 19:12:27 +0100
Subject: dri/nouveau: Split big client buffers in the indexed case too.

---
 src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c b/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c
index 69a9b96f0c..a365b977f2 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c
@@ -281,14 +281,13 @@ vbo_maybe_split(GLcontext *ctx, const struct gl_client_array **arrays,
 	int stride;
 
 	/* Try to keep client buffers smaller than the scratch BOs. */
-	if (!ib && render->mode == VBO &&
+	if (render->mode == VBO &&
 	    (stride = get_max_client_stride(ctx)))
 		    vert_avail = MIN2(vert_avail,
 				      RENDER_SCRATCH_SIZE / stride);
 
-
-	if ((ib && ib->count > idx_avail) ||
-	    (!ib && max_index - min_index > vert_avail)) {
+	if (max_index - min_index > vert_avail ||
+	    (ib && ib->count > idx_avail)) {
 		struct split_limits limits = {
 			.max_verts = vert_avail,
 			.max_indices = idx_avail,
-- 
cgit v1.2.3


From 97d40edb07aa6c67d21eb831898ac5387c18fdbc Mon Sep 17 00:00:00 2001
From: Alex Deucher <alexdeucher@gmail.com>
Date: Mon, 8 Mar 2010 09:57:26 -0500
Subject: r600: no need to flush on context init

---
 src/mesa/drivers/dri/r600/r700_state.c | 2 --
 1 file changed, 2 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r600/r700_state.c b/src/mesa/drivers/dri/r600/r700_state.c
index 4ebdbbfad2..3e10e5b37a 100644
--- a/src/mesa/drivers/dri/r600/r700_state.c
+++ b/src/mesa/drivers/dri/r600/r700_state.c
@@ -1626,8 +1626,6 @@ void r700InitState(GLcontext * ctx) //-------------------
     R700_CHIP_CONTEXT *r700 = (R700_CHIP_CONTEXT*)(&context->hw);
     int id = 0;
 
-    radeon_firevertices(&context->radeon);
-
     r700->TA_CNTL_AUX.u32All = 0;
     SETfield(r700->TA_CNTL_AUX.u32All, 28, TD_FIFO_CREDIT_shift, TD_FIFO_CREDIT_mask);
     r700->VC_ENHANCE.u32All = 0;
-- 
cgit v1.2.3


From cbe28cb892e3b451d2d2cf6769ef7ef131f1853b Mon Sep 17 00:00:00 2001
From: Alex Deucher <alexdeucher@gmail.com>
Date: Mon, 8 Mar 2010 10:00:59 -0500
Subject: r600: recalculate point size, if point min/max size changes

---
 src/mesa/drivers/dri/r600/r700_state.c | 2 ++
 1 file changed, 2 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r600/r700_state.c b/src/mesa/drivers/dri/r600/r700_state.c
index 3e10e5b37a..6f156b5409 100644
--- a/src/mesa/drivers/dri/r600/r700_state.c
+++ b/src/mesa/drivers/dri/r600/r700_state.c
@@ -911,10 +911,12 @@ static void r700PointParameter(GLcontext * ctx, GLenum pname, const GLfloat * pa
 	case GL_POINT_SIZE_MIN:
 		SETfield(r700->PA_SU_POINT_MINMAX.u32All, (int)(ctx->Point.MinSize * 8.0),
 			 MIN_SIZE_shift, MIN_SIZE_mask);
+		r700PointSize(ctx, ctx->Point.Size);
 		break;
 	case GL_POINT_SIZE_MAX:
 		SETfield(r700->PA_SU_POINT_MINMAX.u32All, (int)(ctx->Point.MaxSize * 8.0),
 			 MAX_SIZE_shift, MAX_SIZE_mask);
+		r700PointSize(ctx, ctx->Point.Size);
 		break;
 	case GL_POINT_DISTANCE_ATTENUATION:
 		break;
-- 
cgit v1.2.3


From 7959274858fe66a90e6f97fed81141c39cb6702b Mon Sep 17 00:00:00 2001
From: Alex Deucher <alexdeucher@gmail.com>
Date: Mon, 8 Mar 2010 10:04:02 -0500
Subject: radeon/r200/r600: reset bos when validating buffers during blit

---
 src/mesa/drivers/dri/r200/r200_blit.c     | 3 +++
 src/mesa/drivers/dri/r600/r600_blit.c     | 2 ++
 src/mesa/drivers/dri/radeon/radeon_blit.c | 3 +++
 3 files changed, 8 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r200/r200_blit.c b/src/mesa/drivers/dri/r200/r200_blit.c
index b56327dad5..2c8b3aafe5 100644
--- a/src/mesa/drivers/dri/r200/r200_blit.c
+++ b/src/mesa/drivers/dri/r200/r200_blit.c
@@ -211,6 +211,9 @@ static GLboolean validate_buffers(struct r200_context *r200,
                                   struct radeon_bo *dst_bo)
 {
     int ret;
+
+    radeon_cs_space_reset_bos(r200->radeon.cmdbuf.cs);
+
     ret = radeon_cs_space_check_with_bo(r200->radeon.cmdbuf.cs,
                                         src_bo, RADEON_GEM_DOMAIN_VRAM, 0);
     if (ret)
diff --git a/src/mesa/drivers/dri/r600/r600_blit.c b/src/mesa/drivers/dri/r600/r600_blit.c
index 9d17463cae..fb84825761 100644
--- a/src/mesa/drivers/dri/r600/r600_blit.c
+++ b/src/mesa/drivers/dri/r600/r600_blit.c
@@ -1533,6 +1533,8 @@ static GLboolean validate_buffers(context_t *rmesa,
 {
     int ret;
 
+    radeon_cs_space_reset_bos(rmesa->radeon.cmdbuf.cs);
+
     ret = radeon_cs_space_check_with_bo(rmesa->radeon.cmdbuf.cs,
 					src_bo, RADEON_GEM_DOMAIN_VRAM, 0);
     if (ret)
diff --git a/src/mesa/drivers/dri/radeon/radeon_blit.c b/src/mesa/drivers/dri/radeon/radeon_blit.c
index e188a122d5..8c3c2e4766 100644
--- a/src/mesa/drivers/dri/radeon/radeon_blit.c
+++ b/src/mesa/drivers/dri/radeon/radeon_blit.c
@@ -204,6 +204,9 @@ static GLboolean validate_buffers(struct r100_context *r100,
                                   struct radeon_bo *dst_bo)
 {
     int ret;
+
+    radeon_cs_space_reset_bos(r100->radeon.cmdbuf.cs);
+
     ret = radeon_cs_space_check_with_bo(r100->radeon.cmdbuf.cs,
                                         src_bo, RADEON_GEM_DOMAIN_VRAM, 0);
     if (ret)
-- 
cgit v1.2.3


From 39ab5ae30c303dd561252cb592d4de35814b6a70 Mon Sep 17 00:00:00 2001
From: Alex Deucher <alexdeucher@gmail.com>
Date: Mon, 8 Mar 2010 10:13:49 -0500
Subject: radeon/r200/r600: allow src and dst BOs to be placed in GTT during
 blit

---
 src/mesa/drivers/dri/r200/r200_blit.c     | 10 ++--------
 src/mesa/drivers/dri/r600/r600_blit.c     | 10 ++--------
 src/mesa/drivers/dri/radeon/radeon_blit.c | 10 ++--------
 3 files changed, 6 insertions(+), 24 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r200/r200_blit.c b/src/mesa/drivers/dri/r200/r200_blit.c
index 2c8b3aafe5..3075760093 100644
--- a/src/mesa/drivers/dri/r200/r200_blit.c
+++ b/src/mesa/drivers/dri/r200/r200_blit.c
@@ -215,18 +215,12 @@ static GLboolean validate_buffers(struct r200_context *r200,
     radeon_cs_space_reset_bos(r200->radeon.cmdbuf.cs);
 
     ret = radeon_cs_space_check_with_bo(r200->radeon.cmdbuf.cs,
-                                        src_bo, RADEON_GEM_DOMAIN_VRAM, 0);
+                                        src_bo, RADEON_GEM_DOMAIN_VRAM | RADEON_GEM_DOMAIN_GTT, 0);
     if (ret)
         return GL_FALSE;
 
     ret = radeon_cs_space_check_with_bo(r200->radeon.cmdbuf.cs,
-                                        dst_bo, 0, RADEON_GEM_DOMAIN_VRAM);
-    if (ret)
-        return GL_FALSE;
-
-    ret = radeon_cs_space_check_with_bo(r200->radeon.cmdbuf.cs,
-                                        first_elem(&r200->radeon.dma.reserved)->bo,
-                                        RADEON_GEM_DOMAIN_GTT, 0);
+                                        dst_bo, 0, RADEON_GEM_DOMAIN_VRAM | RADEON_GEM_DOMAIN_GTT);
     if (ret)
         return GL_FALSE;
 
diff --git a/src/mesa/drivers/dri/r600/r600_blit.c b/src/mesa/drivers/dri/r600/r600_blit.c
index fb84825761..244fdc4ffb 100644
--- a/src/mesa/drivers/dri/r600/r600_blit.c
+++ b/src/mesa/drivers/dri/r600/r600_blit.c
@@ -1536,12 +1536,12 @@ static GLboolean validate_buffers(context_t *rmesa,
     radeon_cs_space_reset_bos(rmesa->radeon.cmdbuf.cs);
 
     ret = radeon_cs_space_check_with_bo(rmesa->radeon.cmdbuf.cs,
-					src_bo, RADEON_GEM_DOMAIN_VRAM, 0);
+					src_bo, RADEON_GEM_DOMAIN_VRAM | RADEON_GEM_DOMAIN_GTT, 0);
     if (ret)
         return GL_FALSE;
 
     ret = radeon_cs_space_check_with_bo(rmesa->radeon.cmdbuf.cs,
-                                        dst_bo, 0, RADEON_GEM_DOMAIN_VRAM);
+                                        dst_bo, 0, RADEON_GEM_DOMAIN_VRAM | RADEON_GEM_DOMAIN_GTT);
     if (ret)
         return GL_FALSE;
 
@@ -1551,12 +1551,6 @@ static GLboolean validate_buffers(context_t *rmesa,
     if (ret)
         return GL_FALSE;
 
-    ret = radeon_cs_space_check_with_bo(rmesa->radeon.cmdbuf.cs,
-                                        first_elem(&rmesa->radeon.dma.reserved)->bo,
-                                        RADEON_GEM_DOMAIN_GTT, 0);
-    if (ret)
-        return GL_FALSE;
-
     return GL_TRUE;
 }
 
diff --git a/src/mesa/drivers/dri/radeon/radeon_blit.c b/src/mesa/drivers/dri/radeon/radeon_blit.c
index 8c3c2e4766..e1e1f21550 100644
--- a/src/mesa/drivers/dri/radeon/radeon_blit.c
+++ b/src/mesa/drivers/dri/radeon/radeon_blit.c
@@ -208,18 +208,12 @@ static GLboolean validate_buffers(struct r100_context *r100,
     radeon_cs_space_reset_bos(r100->radeon.cmdbuf.cs);
 
     ret = radeon_cs_space_check_with_bo(r100->radeon.cmdbuf.cs,
-                                        src_bo, RADEON_GEM_DOMAIN_VRAM, 0);
+                                        src_bo, RADEON_GEM_DOMAIN_VRAM | RADEON_GEM_DOMAIN_GTT, 0);
     if (ret)
         return GL_FALSE;
 
     ret = radeon_cs_space_check_with_bo(r100->radeon.cmdbuf.cs,
-                                        dst_bo, 0, RADEON_GEM_DOMAIN_VRAM);
-    if (ret)
-        return GL_FALSE;
-
-    ret = radeon_cs_space_check_with_bo(r100->radeon.cmdbuf.cs,
-                                        first_elem(&r100->radeon.dma.reserved)->bo,
-                                        RADEON_GEM_DOMAIN_GTT, 0);
+                                        dst_bo, 0, RADEON_GEM_DOMAIN_VRAM | RADEON_GEM_DOMAIN_GTT);
     if (ret)
         return GL_FALSE;
 
-- 
cgit v1.2.3


From 614f490ca918f891cd70674ea7841d5b2a97e9ef Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Mon, 8 Mar 2010 09:34:46 -0700
Subject: mesa: s/GL_DEPTH_STENCIL/GL_DEPTH_COMPONENT/ for MESA_FORMAT_Z16
 renderbuffer

MESA_FORMAT_Z16 has no stencil bits.
---
 src/mesa/main/texrender.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/main/texrender.c b/src/mesa/main/texrender.c
index 5a528535c0..b7b23ade30 100644
--- a/src/mesa/main/texrender.c
+++ b/src/mesa/main/texrender.c
@@ -500,7 +500,7 @@ update_wrapper(GLcontext *ctx, const struct gl_renderbuffer_attachment *att)
    else if (trb->TexImage->TexFormat == MESA_FORMAT_Z16) {
       trb->Base.Format = MESA_FORMAT_Z16;
       trb->Base.DataType = GL_UNSIGNED_SHORT;
-      trb->Base._BaseFormat = GL_DEPTH_STENCIL;
+      trb->Base._BaseFormat = GL_DEPTH_COMPONENT;
    }
    else if (trb->TexImage->TexFormat == MESA_FORMAT_Z32) {
       trb->Base.Format = MESA_FORMAT_Z32;
-- 
cgit v1.2.3


From 26aa870a0d80f8b93239a98c558402c3c9ce6445 Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Mon, 8 Mar 2010 09:38:07 -0700
Subject: mesa: add render-to-texture case for MESA_FORMAT_S8_Z24

---
 src/mesa/main/texrender.c | 5 +++++
 1 file changed, 5 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/main/texrender.c b/src/mesa/main/texrender.c
index b7b23ade30..9996a996c1 100644
--- a/src/mesa/main/texrender.c
+++ b/src/mesa/main/texrender.c
@@ -497,6 +497,11 @@ update_wrapper(GLcontext *ctx, const struct gl_renderbuffer_attachment *att)
       trb->Base.DataType = GL_UNSIGNED_INT_24_8_EXT;
       trb->Base._BaseFormat = GL_DEPTH_STENCIL;
    }
+   else if (trb->TexImage->TexFormat == MESA_FORMAT_S8_Z24) {
+      trb->Base.Format = MESA_FORMAT_S8_Z24;
+      trb->Base.DataType = GL_UNSIGNED_INT_24_8_EXT; /* not 8_24 */
+      trb->Base._BaseFormat = GL_DEPTH_STENCIL;
+   }
    else if (trb->TexImage->TexFormat == MESA_FORMAT_Z16) {
       trb->Base.Format = MESA_FORMAT_Z16;
       trb->Base.DataType = GL_UNSIGNED_SHORT;
-- 
cgit v1.2.3


From b1ab15c633b9307cf6e17b794949f9c7f4dc4226 Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Sat, 6 Mar 2010 13:09:47 +0100
Subject: r300: remove unnecessary code

_tnl_UpdateFixedFunctionProgram is already called in r300_draw.c
---
 src/mesa/drivers/dri/r300/r300_state.c | 17 -----------------
 1 file changed, 17 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r300/r300_state.c b/src/mesa/drivers/dri/r300/r300_state.c
index 9d1ff6e2ba..ba4a963d40 100644
--- a/src/mesa/drivers/dri/r300/r300_state.c
+++ b/src/mesa/drivers/dri/r300/r300_state.c
@@ -1985,23 +1985,6 @@ void r300UpdateShaders(r300ContextPtr rmesa)
 	if (rmesa->options.hw_tcl_enabled) {
 		struct r300_vertex_program *vp;
 
-		if (rmesa->radeon.NewGLState) {
-			int i;
-			for (i = _TNL_FIRST_MAT; i <= _TNL_LAST_MAT; i++) {
-				rmesa->temp_attrib[i] =
-				    TNL_CONTEXT(ctx)->vb.AttribPtr[i];
-				TNL_CONTEXT(ctx)->vb.AttribPtr[i] =
-				    &rmesa->dummy_attrib[i];
-			}
-
-			_tnl_UpdateFixedFunctionProgram(ctx);
-
-			for (i = _TNL_FIRST_MAT; i <= _TNL_LAST_MAT; i++) {
-				TNL_CONTEXT(ctx)->vb.AttribPtr[i] =
-				    rmesa->temp_attrib[i];
-			}
-		}
-
 		vp = r300SelectAndTranslateVertexShader(ctx);
 
 		r300SwitchFallback(ctx, R300_FALLBACK_VERTEX_PROGRAM, vp->error);
-- 
cgit v1.2.3


From 44d92d4bbe7d4e90f9d7bb97af2fd74cbda3b2ee Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Sat, 6 Mar 2010 13:18:11 +0100
Subject: r300: no need to flush on context init

---
 src/mesa/drivers/dri/r300/r300_state.c | 2 --
 1 file changed, 2 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r300/r300_state.c b/src/mesa/drivers/dri/r300/r300_state.c
index ba4a963d40..6c2c367aab 100644
--- a/src/mesa/drivers/dri/r300/r300_state.c
+++ b/src/mesa/drivers/dri/r300/r300_state.c
@@ -1762,8 +1762,6 @@ static void r300ResetHwState(r300ContextPtr r300)
 	if (RADEON_DEBUG & RADEON_STATE)
 		fprintf(stderr, "%s\n", __FUNCTION__);
 
-	radeon_firevertices(&r300->radeon);
-
 	r300ColorMask(ctx,
 		      ctx->Color.ColorMask[0][RCOMP],
 		      ctx->Color.ColorMask[0][GCOMP],
-- 
cgit v1.2.3


From 77ed4d1f5d2f73ec02478eb931296813c25b520c Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Sat, 6 Mar 2010 13:39:13 +0100
Subject: r300: recalculate point size, if point min/max size changes

Fixes two wine d3d9 unit tests
---
 src/mesa/drivers/dri/r300/r300_state.c | 2 ++
 1 file changed, 2 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r300/r300_state.c b/src/mesa/drivers/dri/r300/r300_state.c
index 6c2c367aab..5a056f018d 100644
--- a/src/mesa/drivers/dri/r300/r300_state.c
+++ b/src/mesa/drivers/dri/r300/r300_state.c
@@ -794,12 +794,14 @@ static void r300PointParameter(GLcontext * ctx, GLenum pname, const GLfloat * pa
 		R300_STATECHANGE(r300, ga_point_minmax);
 		r300->hw.ga_point_minmax.cmd[1] &= ~R300_GA_POINT_MINMAX_MIN_MASK;
 		r300->hw.ga_point_minmax.cmd[1] |= (GLuint)(ctx->Point.MinSize * 6.0);
+		r300PointSize(ctx, ctx->Point.Size);
 		break;
 	case GL_POINT_SIZE_MAX:
 		R300_STATECHANGE(r300, ga_point_minmax);
 		r300->hw.ga_point_minmax.cmd[1] &= ~R300_GA_POINT_MINMAX_MAX_MASK;
 		r300->hw.ga_point_minmax.cmd[1] |= (GLuint)(ctx->Point.MaxSize * 6.0)
 			<< R300_GA_POINT_MINMAX_MAX_SHIFT;
+		r300PointSize(ctx, ctx->Point.Size);
 		break;
 	case GL_POINT_DISTANCE_ATTENUATION:
 		break;
-- 
cgit v1.2.3


From 2872c1cc328008dea166319f3023a3f568247bcf Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Sun, 7 Mar 2010 12:02:28 +0100
Subject: r300: VAP flush is needed only when vertex program or constants are
 changed

---
 src/mesa/drivers/dri/r300/r300_cmdbuf.c   | 21 +--------------------
 src/mesa/drivers/dri/r300/r300_context.h  |  1 -
 src/mesa/drivers/dri/r300/r300_state.c    |  1 -
 src/mesa/drivers/dri/r300/r300_vertprog.c |  4 +---
 4 files changed, 2 insertions(+), 25 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r300/r300_cmdbuf.c b/src/mesa/drivers/dri/r300/r300_cmdbuf.c
index 4787bafc66..6cfa5686f4 100644
--- a/src/mesa/drivers/dri/r300/r300_cmdbuf.c
+++ b/src/mesa/drivers/dri/r300/r300_cmdbuf.c
@@ -90,8 +90,7 @@ void r300_emit_vpu(struct r300_context *r300,
 {
     BATCH_LOCALS(&r300->radeon);
 
-    BEGIN_BATCH_NO_AUTOSTATE(5 + len);
-    OUT_BATCH_REGVAL(R300_VAP_PVS_STATE_FLUSH_REG, 0);
+    BEGIN_BATCH_NO_AUTOSTATE(3 + len);
     OUT_BATCH_REGVAL(R300_VAP_PVS_VECTOR_INDX_REG, addr);
     OUT_BATCH(CP_PACKET0(R300_VAP_PVS_UPLOAD_DATA, len-1) | RADEON_ONE_REG_WR);
     OUT_BATCH_TABLE(data, len);
@@ -778,24 +777,6 @@ void r300InitCmdBuf(r300ContextPtr r300)
 	/* VPU only on TCL */
 	if (has_tcl) {
 		int i;
-		if (r300->radeon.radeonScreen->kernel_mm) {
-			ALLOC_STATE(vap_flush, always, 10, 0);
-			/* flush processing vertices */
-			r300->hw.vap_flush.cmd[0] = cmdpacket0(r300->radeon.radeonScreen, R300_SC_SCREENDOOR, 1);
-			r300->hw.vap_flush.cmd[1] = 0;
-			r300->hw.vap_flush.cmd[2] = cmdpacket0(r300->radeon.radeonScreen, R300_RB3D_DSTCACHE_CTLSTAT, 1);
-			r300->hw.vap_flush.cmd[3] = R300_RB3D_DSTCACHE_CTLSTAT_DC_FLUSH_FLUSH_DIRTY_3D;
-			r300->hw.vap_flush.cmd[4] = cmdpacket0(r300->radeon.radeonScreen, RADEON_WAIT_UNTIL, 1);
-			r300->hw.vap_flush.cmd[5] = RADEON_WAIT_3D_IDLECLEAN;
-			r300->hw.vap_flush.cmd[6] = cmdpacket0(r300->radeon.radeonScreen, R300_SC_SCREENDOOR, 1);
-			r300->hw.vap_flush.cmd[7] = 0xffffff;
-			r300->hw.vap_flush.cmd[8] = cmdpacket0(r300->radeon.radeonScreen, R300_VAP_PVS_STATE_FLUSH_REG, 1);
-			r300->hw.vap_flush.cmd[9] = 0;
-		} else {
-			ALLOC_STATE(vap_flush, never, 10, 0);
-		}
-
-
 		ALLOC_STATE(vpi, vpu, R300_VPI_CMDSIZE, 0);
 		r300->hw.vpi.cmd[0] =
 			cmdvpu(r300->radeon.radeonScreen, R300_PVS_CODE_START, 0);
diff --git a/src/mesa/drivers/dri/r300/r300_context.h b/src/mesa/drivers/dri/r300/r300_context.h
index 78ab43a99f..df7115e7da 100644
--- a/src/mesa/drivers/dri/r300/r300_context.h
+++ b/src/mesa/drivers/dri/r300/r300_context.h
@@ -355,7 +355,6 @@ struct r300_hw_state {
 	struct radeon_state_atom zb_hiz_offset;	/* (4F44) */
 	struct radeon_state_atom zb_hiz_pitch;	/* (4F54) */
 
-	struct radeon_state_atom vap_flush;
 	struct radeon_state_atom vpi;	/* vp instructions */
 	struct radeon_state_atom vpp;	/* vp parameters */
 	struct radeon_state_atom vps;	/* vertex point size (?) */
diff --git a/src/mesa/drivers/dri/r300/r300_state.c b/src/mesa/drivers/dri/r300/r300_state.c
index 5a056f018d..5979dedac4 100644
--- a/src/mesa/drivers/dri/r300/r300_state.c
+++ b/src/mesa/drivers/dri/r300/r300_state.c
@@ -366,7 +366,6 @@ static void r300ClipPlane( GLcontext *ctx, GLenum plane, const GLfloat *eq )
 	p = (GLint) plane - (GLint) GL_CLIP_PLANE0;
 	ip = (GLint *)ctx->Transform._ClipUserPlane[p];
 
-	R300_STATECHANGE( rmesa, vap_flush );
 	R300_STATECHANGE( rmesa, vpucp[p] );
 	rmesa->hw.vpucp[p].cmd[R300_VPUCP_X] = ip[0];
 	rmesa->hw.vpucp[p].cmd[R300_VPUCP_Y] = ip[1];
diff --git a/src/mesa/drivers/dri/r300/r300_vertprog.c b/src/mesa/drivers/dri/r300/r300_vertprog.c
index cbe4cb8304..129004fee7 100644
--- a/src/mesa/drivers/dri/r300/r300_vertprog.c
+++ b/src/mesa/drivers/dri/r300/r300_vertprog.c
@@ -342,8 +342,6 @@ static void r300EmitVertexProgram(r300ContextPtr r300, int dest, struct r300_ver
 
 	assert((code->length > 0) && (code->length % 4 == 0));
 
-	R300_STATECHANGE( r300, vap_flush );
-
 	switch ((dest >> 8) & 0xf) {
 		case 0:
 			R300_STATECHANGE(r300, vpi);
@@ -381,7 +379,7 @@ void r300SetupVertexProgram(r300ContextPtr rmesa)
 	((drm_r300_cmd_header_t *) rmesa->hw.vpi.cmd)->vpu.count = 0;
 	((drm_r300_cmd_header_t *) rmesa->hw.vps.cmd)->vpu.count = 0;
 
-	R300_STATECHANGE(rmesa, vap_flush);
+	R300_STATECHANGE(rmesa, vap_cntl);
 	R300_STATECHANGE(rmesa, vpp);
 	param_count = r300VertexProgUpdateParams(ctx, prog, (float *)&rmesa->hw.vpp.cmd[R300_VPP_PARAM_0]);
 	bump_vpu_count(rmesa->hw.vpp.cmd, param_count);
-- 
cgit v1.2.3


From 8ccd83ab921380953a0e5cebd941444f85c23ed1 Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Sat, 6 Feb 2010 19:37:23 +0100
Subject: radeon: fallback to software in glCopyTexImage if blit isn't
 available

---
 src/mesa/drivers/dri/radeon/radeon_tex_copy.c | 4 ++++
 1 file changed, 4 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/radeon/radeon_tex_copy.c b/src/mesa/drivers/dri/radeon/radeon_tex_copy.c
index 89fe9915a7..a4bb03d5d3 100644
--- a/src/mesa/drivers/dri/radeon/radeon_tex_copy.c
+++ b/src/mesa/drivers/dri/radeon/radeon_tex_copy.c
@@ -53,6 +53,10 @@ do_copy_texsubimage(GLcontext *ctx,
     unsigned src_width;
     unsigned dst_width;
 
+    if (!radeon->vtbl.blit) {
+        return GL_FALSE;
+    }
+
     if (_mesa_get_format_bits(timg->base.TexFormat, GL_DEPTH_BITS) > 0) {
         rrb = radeon_get_depthbuffer(radeon);
     } else {
-- 
cgit v1.2.3


From 62b3321d7d9774ed235bc3d328b6a0f5da153dcf Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Sat, 6 Feb 2010 18:25:36 +0100
Subject: r300: reset bos when validating buffers during blit

---
 src/mesa/drivers/dri/r300/r300_blit.c | 3 +++
 1 file changed, 3 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r300/r300_blit.c b/src/mesa/drivers/dri/r300/r300_blit.c
index 2bc761bc20..f9c085e283 100644
--- a/src/mesa/drivers/dri/r300/r300_blit.c
+++ b/src/mesa/drivers/dri/r300/r300_blit.c
@@ -381,6 +381,9 @@ static GLboolean validate_buffers(struct r300_context *r300,
                                   struct radeon_bo *dst_bo)
 {
     int ret;
+
+    radeon_cs_space_reset_bos(r300->radeon.cmdbuf.cs);
+
     ret = radeon_cs_space_check_with_bo(r300->radeon.cmdbuf.cs,
                                         src_bo, RADEON_GEM_DOMAIN_VRAM, 0);
     if (ret)
-- 
cgit v1.2.3


From 4572ae1925e63227b2785fec446862d398ad0005 Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Thu, 4 Mar 2010 18:35:55 +0100
Subject: r300: allow src and dst BOs to be placed in GTT during blit

Fixes some relocation failures
---
 src/mesa/drivers/dri/r300/r300_blit.c | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r300/r300_blit.c b/src/mesa/drivers/dri/r300/r300_blit.c
index f9c085e283..d870c7f852 100644
--- a/src/mesa/drivers/dri/r300/r300_blit.c
+++ b/src/mesa/drivers/dri/r300/r300_blit.c
@@ -385,18 +385,12 @@ static GLboolean validate_buffers(struct r300_context *r300,
     radeon_cs_space_reset_bos(r300->radeon.cmdbuf.cs);
 
     ret = radeon_cs_space_check_with_bo(r300->radeon.cmdbuf.cs,
-                                        src_bo, RADEON_GEM_DOMAIN_VRAM, 0);
+                                        src_bo, RADEON_GEM_DOMAIN_VRAM | RADEON_GEM_DOMAIN_GTT, 0);
     if (ret)
         return GL_FALSE;
 
     ret = radeon_cs_space_check_with_bo(r300->radeon.cmdbuf.cs,
-                                        dst_bo, 0, RADEON_GEM_DOMAIN_VRAM);
-    if (ret)
-        return GL_FALSE;
-
-    ret = radeon_cs_space_check_with_bo(r300->radeon.cmdbuf.cs,
-                                        first_elem(&r300->radeon.dma.reserved)->bo,
-                                        RADEON_GEM_DOMAIN_GTT, 0);
+                                        dst_bo, 0, RADEON_GEM_DOMAIN_VRAM | RADEON_GEM_DOMAIN_GTT);
     if (ret)
         return GL_FALSE;
 
-- 
cgit v1.2.3


From 29e02c7e720a18b59317c4ad97d8ffc149228c69 Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Sat, 16 Jan 2010 15:11:37 +0100
Subject: radeon: no need to emit full state twice after flush

---
 src/mesa/drivers/dri/radeon/radeon_common.c | 5 -----
 1 file changed, 5 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/radeon/radeon_common.c b/src/mesa/drivers/dri/radeon/radeon_common.c
index 79f3ff7da6..13f1f0611b 100644
--- a/src/mesa/drivers/dri/radeon/radeon_common.c
+++ b/src/mesa/drivers/dri/radeon/radeon_common.c
@@ -1325,11 +1325,6 @@ void rcommonBeginBatch(radeonContextPtr rmesa, int n,
 		       const char *function,
 		       int line)
 {
-	if (!rmesa->cmdbuf.cs->cdw && dostate) {
-		radeon_print(RADEON_STATE, RADEON_NORMAL,
-				"Reemit state after flush (from %s)\n", function);
-		radeonEmitState(rmesa);
-	}
 	radeon_cs_begin(rmesa->cmdbuf.cs, n, file, function, line);
 
     radeon_print(RADEON_CS, RADEON_VERBOSE, "BEGIN_BATCH(%d) at %d, from %s:%i\n",
-- 
cgit v1.2.3


From b3b6bd5da1241086bda75431ddde6002e9353268 Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Sun, 14 Feb 2010 00:02:05 +0100
Subject: r300: don't enable EXT_packed_depth_stencil

R300 hw doesn't support sampling from Z24_S8 or S8_Z24 formats.
---
 src/mesa/drivers/dri/r300/r300_context.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r300/r300_context.c b/src/mesa/drivers/dri/r300/r300_context.c
index df4cc11da4..ff35cd5275 100644
--- a/src/mesa/drivers/dri/r300/r300_context.c
+++ b/src/mesa/drivers/dri/r300/r300_context.c
@@ -109,7 +109,6 @@ static const struct dri_extension card_extensions[] = {
   {"GL_EXT_blend_func_separate",	GL_EXT_blend_func_separate_functions},
   {"GL_EXT_blend_minmax",		GL_EXT_blend_minmax_functions},
   {"GL_EXT_blend_subtract",		NULL},
-  {"GL_EXT_packed_depth_stencil",	NULL},
   {"GL_EXT_fog_coord",			GL_EXT_fog_coord_functions },
   {"GL_EXT_gpu_program_parameters",     GL_EXT_gpu_program_parameters_functions},
   {"GL_EXT_provoking_vertex",           GL_EXT_provoking_vertex_functions },
@@ -456,6 +455,9 @@ static void r300InitGLExtensions(GLcontext *ctx)
 	}
 	if (r300->radeon.radeonScreen->chip_family >= CHIP_FAMILY_RV350)
   		_mesa_enable_extension(ctx, "GL_ARB_half_float_vertex");
+
+	if (r300->radeon.radeonScreen->chip_family >= CHIP_FAMILY_RV515)
+		_mesa_enable_extension(ctx, "GL_EXT_packed_depth_stencil");
 }
 
 static void r300InitIoctlFuncs(struct dd_function_table *functions)
-- 
cgit v1.2.3


From d18b3023653e709051a56f5806988f24724972e7 Mon Sep 17 00:00:00 2001
From: Alex Deucher <alexdeucher@gmail.com>
Date: Mon, 8 Mar 2010 09:57:26 -0500
Subject: r600: no need to flush on context init

---
 src/mesa/drivers/dri/r600/r700_state.c | 2 --
 1 file changed, 2 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r600/r700_state.c b/src/mesa/drivers/dri/r600/r700_state.c
index 4ebdbbfad2..3e10e5b37a 100644
--- a/src/mesa/drivers/dri/r600/r700_state.c
+++ b/src/mesa/drivers/dri/r600/r700_state.c
@@ -1626,8 +1626,6 @@ void r700InitState(GLcontext * ctx) //-------------------
     R700_CHIP_CONTEXT *r700 = (R700_CHIP_CONTEXT*)(&context->hw);
     int id = 0;
 
-    radeon_firevertices(&context->radeon);
-
     r700->TA_CNTL_AUX.u32All = 0;
     SETfield(r700->TA_CNTL_AUX.u32All, 28, TD_FIFO_CREDIT_shift, TD_FIFO_CREDIT_mask);
     r700->VC_ENHANCE.u32All = 0;
-- 
cgit v1.2.3


From c65235f97efe30eb9444f7c8f20cb8f0cc529d19 Mon Sep 17 00:00:00 2001
From: Alex Deucher <alexdeucher@gmail.com>
Date: Mon, 8 Mar 2010 10:00:59 -0500
Subject: r600: recalculate point size, if point min/max size changes

---
 src/mesa/drivers/dri/r600/r700_state.c | 2 ++
 1 file changed, 2 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r600/r700_state.c b/src/mesa/drivers/dri/r600/r700_state.c
index 3e10e5b37a..6f156b5409 100644
--- a/src/mesa/drivers/dri/r600/r700_state.c
+++ b/src/mesa/drivers/dri/r600/r700_state.c
@@ -911,10 +911,12 @@ static void r700PointParameter(GLcontext * ctx, GLenum pname, const GLfloat * pa
 	case GL_POINT_SIZE_MIN:
 		SETfield(r700->PA_SU_POINT_MINMAX.u32All, (int)(ctx->Point.MinSize * 8.0),
 			 MIN_SIZE_shift, MIN_SIZE_mask);
+		r700PointSize(ctx, ctx->Point.Size);
 		break;
 	case GL_POINT_SIZE_MAX:
 		SETfield(r700->PA_SU_POINT_MINMAX.u32All, (int)(ctx->Point.MaxSize * 8.0),
 			 MAX_SIZE_shift, MAX_SIZE_mask);
+		r700PointSize(ctx, ctx->Point.Size);
 		break;
 	case GL_POINT_DISTANCE_ATTENUATION:
 		break;
-- 
cgit v1.2.3


From d7ad1b8b0788536f6fcd261fbe0db7a10b84ac0a Mon Sep 17 00:00:00 2001
From: Alex Deucher <alexdeucher@gmail.com>
Date: Mon, 8 Mar 2010 10:04:02 -0500
Subject: radeon/r200/r600: reset bos when validating buffers during blit

---
 src/mesa/drivers/dri/r200/r200_blit.c     | 3 +++
 src/mesa/drivers/dri/r600/r600_blit.c     | 2 ++
 src/mesa/drivers/dri/radeon/radeon_blit.c | 3 +++
 3 files changed, 8 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r200/r200_blit.c b/src/mesa/drivers/dri/r200/r200_blit.c
index b56327dad5..2c8b3aafe5 100644
--- a/src/mesa/drivers/dri/r200/r200_blit.c
+++ b/src/mesa/drivers/dri/r200/r200_blit.c
@@ -211,6 +211,9 @@ static GLboolean validate_buffers(struct r200_context *r200,
                                   struct radeon_bo *dst_bo)
 {
     int ret;
+
+    radeon_cs_space_reset_bos(r200->radeon.cmdbuf.cs);
+
     ret = radeon_cs_space_check_with_bo(r200->radeon.cmdbuf.cs,
                                         src_bo, RADEON_GEM_DOMAIN_VRAM, 0);
     if (ret)
diff --git a/src/mesa/drivers/dri/r600/r600_blit.c b/src/mesa/drivers/dri/r600/r600_blit.c
index 9d17463cae..fb84825761 100644
--- a/src/mesa/drivers/dri/r600/r600_blit.c
+++ b/src/mesa/drivers/dri/r600/r600_blit.c
@@ -1533,6 +1533,8 @@ static GLboolean validate_buffers(context_t *rmesa,
 {
     int ret;
 
+    radeon_cs_space_reset_bos(rmesa->radeon.cmdbuf.cs);
+
     ret = radeon_cs_space_check_with_bo(rmesa->radeon.cmdbuf.cs,
 					src_bo, RADEON_GEM_DOMAIN_VRAM, 0);
     if (ret)
diff --git a/src/mesa/drivers/dri/radeon/radeon_blit.c b/src/mesa/drivers/dri/radeon/radeon_blit.c
index e188a122d5..8c3c2e4766 100644
--- a/src/mesa/drivers/dri/radeon/radeon_blit.c
+++ b/src/mesa/drivers/dri/radeon/radeon_blit.c
@@ -204,6 +204,9 @@ static GLboolean validate_buffers(struct r100_context *r100,
                                   struct radeon_bo *dst_bo)
 {
     int ret;
+
+    radeon_cs_space_reset_bos(r100->radeon.cmdbuf.cs);
+
     ret = radeon_cs_space_check_with_bo(r100->radeon.cmdbuf.cs,
                                         src_bo, RADEON_GEM_DOMAIN_VRAM, 0);
     if (ret)
-- 
cgit v1.2.3


From 9458c2061ba5d8857217d9a7504b42ea17022897 Mon Sep 17 00:00:00 2001
From: Alex Deucher <alexdeucher@gmail.com>
Date: Mon, 8 Mar 2010 10:13:49 -0500
Subject: radeon/r200/r600: allow src and dst BOs to be placed in GTT during
 blit

---
 src/mesa/drivers/dri/r200/r200_blit.c     | 10 ++--------
 src/mesa/drivers/dri/r600/r600_blit.c     | 10 ++--------
 src/mesa/drivers/dri/radeon/radeon_blit.c | 10 ++--------
 3 files changed, 6 insertions(+), 24 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r200/r200_blit.c b/src/mesa/drivers/dri/r200/r200_blit.c
index 2c8b3aafe5..3075760093 100644
--- a/src/mesa/drivers/dri/r200/r200_blit.c
+++ b/src/mesa/drivers/dri/r200/r200_blit.c
@@ -215,18 +215,12 @@ static GLboolean validate_buffers(struct r200_context *r200,
     radeon_cs_space_reset_bos(r200->radeon.cmdbuf.cs);
 
     ret = radeon_cs_space_check_with_bo(r200->radeon.cmdbuf.cs,
-                                        src_bo, RADEON_GEM_DOMAIN_VRAM, 0);
+                                        src_bo, RADEON_GEM_DOMAIN_VRAM | RADEON_GEM_DOMAIN_GTT, 0);
     if (ret)
         return GL_FALSE;
 
     ret = radeon_cs_space_check_with_bo(r200->radeon.cmdbuf.cs,
-                                        dst_bo, 0, RADEON_GEM_DOMAIN_VRAM);
-    if (ret)
-        return GL_FALSE;
-
-    ret = radeon_cs_space_check_with_bo(r200->radeon.cmdbuf.cs,
-                                        first_elem(&r200->radeon.dma.reserved)->bo,
-                                        RADEON_GEM_DOMAIN_GTT, 0);
+                                        dst_bo, 0, RADEON_GEM_DOMAIN_VRAM | RADEON_GEM_DOMAIN_GTT);
     if (ret)
         return GL_FALSE;
 
diff --git a/src/mesa/drivers/dri/r600/r600_blit.c b/src/mesa/drivers/dri/r600/r600_blit.c
index fb84825761..244fdc4ffb 100644
--- a/src/mesa/drivers/dri/r600/r600_blit.c
+++ b/src/mesa/drivers/dri/r600/r600_blit.c
@@ -1536,12 +1536,12 @@ static GLboolean validate_buffers(context_t *rmesa,
     radeon_cs_space_reset_bos(rmesa->radeon.cmdbuf.cs);
 
     ret = radeon_cs_space_check_with_bo(rmesa->radeon.cmdbuf.cs,
-					src_bo, RADEON_GEM_DOMAIN_VRAM, 0);
+					src_bo, RADEON_GEM_DOMAIN_VRAM | RADEON_GEM_DOMAIN_GTT, 0);
     if (ret)
         return GL_FALSE;
 
     ret = radeon_cs_space_check_with_bo(rmesa->radeon.cmdbuf.cs,
-                                        dst_bo, 0, RADEON_GEM_DOMAIN_VRAM);
+                                        dst_bo, 0, RADEON_GEM_DOMAIN_VRAM | RADEON_GEM_DOMAIN_GTT);
     if (ret)
         return GL_FALSE;
 
@@ -1551,12 +1551,6 @@ static GLboolean validate_buffers(context_t *rmesa,
     if (ret)
         return GL_FALSE;
 
-    ret = radeon_cs_space_check_with_bo(rmesa->radeon.cmdbuf.cs,
-                                        first_elem(&rmesa->radeon.dma.reserved)->bo,
-                                        RADEON_GEM_DOMAIN_GTT, 0);
-    if (ret)
-        return GL_FALSE;
-
     return GL_TRUE;
 }
 
diff --git a/src/mesa/drivers/dri/radeon/radeon_blit.c b/src/mesa/drivers/dri/radeon/radeon_blit.c
index 8c3c2e4766..e1e1f21550 100644
--- a/src/mesa/drivers/dri/radeon/radeon_blit.c
+++ b/src/mesa/drivers/dri/radeon/radeon_blit.c
@@ -208,18 +208,12 @@ static GLboolean validate_buffers(struct r100_context *r100,
     radeon_cs_space_reset_bos(r100->radeon.cmdbuf.cs);
 
     ret = radeon_cs_space_check_with_bo(r100->radeon.cmdbuf.cs,
-                                        src_bo, RADEON_GEM_DOMAIN_VRAM, 0);
+                                        src_bo, RADEON_GEM_DOMAIN_VRAM | RADEON_GEM_DOMAIN_GTT, 0);
     if (ret)
         return GL_FALSE;
 
     ret = radeon_cs_space_check_with_bo(r100->radeon.cmdbuf.cs,
-                                        dst_bo, 0, RADEON_GEM_DOMAIN_VRAM);
-    if (ret)
-        return GL_FALSE;
-
-    ret = radeon_cs_space_check_with_bo(r100->radeon.cmdbuf.cs,
-                                        first_elem(&r100->radeon.dma.reserved)->bo,
-                                        RADEON_GEM_DOMAIN_GTT, 0);
+                                        dst_bo, 0, RADEON_GEM_DOMAIN_VRAM | RADEON_GEM_DOMAIN_GTT);
     if (ret)
         return GL_FALSE;
 
-- 
cgit v1.2.3


From fe25bee14f4df3ef87cc7fee67e610da9afc5eda Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Mon, 8 Mar 2010 09:58:54 -0700
Subject: mesa: add additional missing z formats for render to texture

Allow render to texture for X8_Z24 and Z24_X8 formats.
Replace big if/else with switch, etc.
---
 src/mesa/main/texrender.c | 98 +++++++++++++++++++++++++++++++++++++++--------
 1 file changed, 83 insertions(+), 15 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/main/texrender.c b/src/mesa/main/texrender.c
index 9996a996c1..d29af5a5b2 100644
--- a/src/mesa/main/texrender.c
+++ b/src/mesa/main/texrender.c
@@ -84,6 +84,14 @@ texture_get_row(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count,
          zValues[i] = ((GLuint) (flt * 0xffffff)) << 8;
       }
    }
+   else if (rb->DataType == GL_UNSIGNED_INT_8_24_REV_MESA) {
+      GLuint *zValues = (GLuint *) values;
+      for (i = 0; i < count; i++) {
+         GLfloat flt;
+         trb->TexImage->FetchTexelf(trb->TexImage, x + i, y, z, &flt);
+         zValues[i] = (GLuint) (flt * 0xffffff);
+      }
+   }
    else {
       _mesa_problem(ctx, "invalid rb->DataType in texture_get_row");
    }
@@ -139,6 +147,15 @@ texture_get_values(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count,
          zValues[i] = ((GLuint) (flt * 0xffffff)) << 8;
       }
    }
+   else if (rb->DataType == GL_UNSIGNED_INT_8_24_REV_MESA) {
+      GLuint *zValues = (GLuint *) values;
+      for (i = 0; i < count; i++) {
+         GLfloat flt;
+         trb->TexImage->FetchTexelf(trb->TexImage, x[i], y[i] + trb->Yoffset,
+				    z, &flt);
+         zValues[i] = (GLuint) (flt * 0xffffff);
+      }
+   }
    else {
       _mesa_problem(ctx, "invalid rb->DataType in texture_get_values");
    }
@@ -193,6 +210,15 @@ texture_put_row(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count,
          }
       }
    }
+   else if (rb->DataType == GL_UNSIGNED_INT_8_24_REV_MESA) {
+      const GLuint *zValues = (const GLuint *) values;
+      for (i = 0; i < count; i++) {
+         if (!mask || mask[i]) {
+            GLfloat flt = (GLfloat) ((zValues[i] & 0xffffff) * (1.0 / 0xffffff));
+            trb->Store(trb->TexImage, x + i, y, z, &flt);
+         }
+      }
+   }
    else {
       _mesa_problem(ctx, "invalid rb->DataType in texture_put_row");
    }
@@ -246,6 +272,15 @@ texture_put_row_rgb(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count,
          }
       }
    }
+   else if (rb->DataType == GL_UNSIGNED_INT_8_24_REV_MESA) {
+      const GLuint *zValues = (const GLuint *) values;
+      for (i = 0; i < count; i++) {
+         if (!mask || mask[i]) {
+            GLfloat flt = (GLfloat) ((zValues[i] & 0xffffff) * (1.0 / 0xffffff));
+            trb->Store(trb->TexImage, x + i, y, z, &flt);
+         }
+      }
+   }
    else {
       _mesa_problem(ctx, "invalid rb->DataType in texture_put_row");
    }
@@ -296,6 +331,15 @@ texture_put_mono_row(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count,
          }
       }
    }
+   else if (rb->DataType == GL_UNSIGNED_INT_8_24_REV_MESA) {
+      const GLuint zValue = *((const GLuint *) value);
+      const GLfloat flt = (GLfloat) ((zValue & 0xffffff) * (1.0 / 0xffffff));
+      for (i = 0; i < count; i++) {
+         if (!mask || mask[i]) {
+            trb->Store(trb->TexImage, x + i, y, z, &flt);
+         }
+      }
+   }
    else {
       _mesa_problem(ctx, "invalid rb->DataType in texture_put_mono_row");
    }
@@ -346,6 +390,15 @@ texture_put_values(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count,
          }
       }
    }
+   else if (rb->DataType == GL_UNSIGNED_INT_8_24_REV_MESA) {
+      const GLuint *zValues = (const GLuint *) values;
+      for (i = 0; i < count; i++) {
+         if (!mask || mask[i]) {
+            GLfloat flt = (GLfloat) ((zValues[i] & 0xffffff) * (1.0 / 0xffffff));
+            trb->Store(trb->TexImage, x[i], y[i] + trb->Yoffset, z, &flt);
+         }
+      }
+   }
    else {
       _mesa_problem(ctx, "invalid rb->DataType in texture_put_values");
    }
@@ -395,6 +448,15 @@ texture_put_mono_values(GLcontext *ctx, struct gl_renderbuffer *rb,
          }
       }
    }
+   else if (rb->DataType == GL_UNSIGNED_INT_8_24_REV_MESA) {
+      const GLuint zValue = *((const GLuint *) value);
+      const GLfloat flt = (GLfloat) ((zValue & 0xffffff) * (1.0 / 0xffffff));
+      for (i = 0; i < count; i++) {
+         if (!mask || mask[i]) {
+            trb->Store(trb->TexImage, x[i], y[i] + trb->Yoffset, z, &flt);
+         }
+      }
+   }
    else {
       _mesa_problem(ctx, "invalid rb->DataType in texture_put_mono_values");
    }
@@ -491,29 +553,35 @@ update_wrapper(GLcontext *ctx, const struct gl_renderbuffer_attachment *att)
    trb->Base.Width = trb->TexImage->Width;
    trb->Base.Height = trb->TexImage->Height;
    trb->Base.InternalFormat = trb->TexImage->InternalFormat;
+   trb->Base.Format = trb->TexImage->TexFormat;
+
    /* XXX may need more special cases here */
-   if (trb->TexImage->TexFormat == MESA_FORMAT_Z24_S8) {
-      trb->Base.Format = MESA_FORMAT_Z24_S8;
+   switch (trb->TexImage->TexFormat) {
+   case MESA_FORMAT_Z24_S8:
       trb->Base.DataType = GL_UNSIGNED_INT_24_8_EXT;
       trb->Base._BaseFormat = GL_DEPTH_STENCIL;
-   }
-   else if (trb->TexImage->TexFormat == MESA_FORMAT_S8_Z24) {
-      trb->Base.Format = MESA_FORMAT_S8_Z24;
-      trb->Base.DataType = GL_UNSIGNED_INT_24_8_EXT; /* not 8_24 */
+      break;
+   case MESA_FORMAT_S8_Z24:
+      trb->Base.DataType = GL_UNSIGNED_INT_8_24_REV_MESA;
       trb->Base._BaseFormat = GL_DEPTH_STENCIL;
-   }
-   else if (trb->TexImage->TexFormat == MESA_FORMAT_Z16) {
-      trb->Base.Format = MESA_FORMAT_Z16;
+      break;
+   case MESA_FORMAT_Z24_X8:
+      trb->Base.DataType = GL_UNSIGNED_INT_24_8_EXT;
+      trb->Base._BaseFormat = GL_DEPTH_COMPONENT;
+      break;
+   case MESA_FORMAT_X8_Z24:
+      trb->Base.DataType = GL_UNSIGNED_INT_8_24_REV_MESA;
+      trb->Base._BaseFormat = GL_DEPTH_COMPONENT;
+      break;
+   case MESA_FORMAT_Z16:
       trb->Base.DataType = GL_UNSIGNED_SHORT;
       trb->Base._BaseFormat = GL_DEPTH_COMPONENT;
-   }
-   else if (trb->TexImage->TexFormat == MESA_FORMAT_Z32) {
-      trb->Base.Format = MESA_FORMAT_Z32;
+      break;
+   case MESA_FORMAT_Z32:
       trb->Base.DataType = GL_UNSIGNED_INT;
       trb->Base._BaseFormat = GL_DEPTH_COMPONENT;
-   }
-   else {
-      trb->Base.Format = trb->TexImage->TexFormat;
+      break;
+   default:
       trb->Base.DataType = CHAN_TYPE;
       trb->Base._BaseFormat = GL_RGBA;
    }
-- 
cgit v1.2.3


From df9bf78f888702542a506f551204a2e7dc8b7df1 Mon Sep 17 00:00:00 2001
From: Alex Deucher <alexdeucher@gmail.com>
Date: Mon, 8 Mar 2010 11:59:02 -0500
Subject: r600: enable GL_ARB_pixel_buffer_object

---
 src/mesa/drivers/dri/r600/r600_context.c | 1 +
 1 file changed, 1 insertion(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r600/r600_context.c b/src/mesa/drivers/dri/r600/r600_context.c
index 3d6802e735..134e97e7c3 100644
--- a/src/mesa/drivers/dri/r600/r600_context.c
+++ b/src/mesa/drivers/dri/r600/r600_context.c
@@ -140,6 +140,7 @@ static const struct dri_extension card_extensions[] = {
   {"GL_NV_blend_square",		NULL},
   {"GL_NV_vertex_program",		GL_NV_vertex_program_functions},
   {"GL_SGIS_generate_mipmap",		NULL},
+  {"GL_ARB_pixel_buffer_object",        NULL},
   {NULL,				NULL}
   /* *INDENT-ON* */
 };
-- 
cgit v1.2.3


From 80dc54e308dfb1fad344272978ff14646995e00a Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Mon, 8 Mar 2010 11:31:23 -0700
Subject: st/mesa: don't detach renderbuffer, surface in
 st_finish_render_texture()

There's no reason to release the renderbuffer from the framebuffer object
or release the gallium surface in this function (they're reference counted).
In fact, we don't want to do this because we may later use the texture as a
pixel source (ex: glBlitFramebuffer) and need the surface.

Fixes fd.o bug 26923 and is part of the fix for bug 26932.
---
 src/mesa/state_tracker/st_cb_fbo.c | 5 -----
 1 file changed, 5 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c
index 8fded0c69f..00e9d1dccb 100644
--- a/src/mesa/state_tracker/st_cb_fbo.c
+++ b/src/mesa/state_tracker/st_cb_fbo.c
@@ -410,17 +410,12 @@ st_finish_render_texture(GLcontext *ctx,
 
    st_flush( ctx->st, PIPE_FLUSH_RENDER_CACHE, NULL );
 
-   if (strb->surface)
-      pipe_surface_reference( &strb->surface, NULL );
-
    strb->rtt = NULL;
 
    /*
    printf("FINISH RENDER TO TEXTURE surf=%p\n", strb->surface);
    */
 
-   _mesa_reference_renderbuffer(&att->Renderbuffer, NULL);
-
    /* restore previous framebuffer state */
    st_invalidate_state(ctx, _NEW_BUFFERS);
 }
-- 
cgit v1.2.3


From bc632d04370566c1156cbd0345fe303834f0b910 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Mon, 8 Mar 2010 12:12:31 -0800
Subject: i965: Fix up the handling of point sprite coordinate replacement.

The code was walking over the regs of pairs of attributes and checking
whether the attribute with a given reg index had point sprite enabled.
So the point sprite setup code was rarely even getting executed.
Instead, we need to determine which channels of a reg need point
sprite coordinate replacement.  In addition, it was multiplying the
attribute by 1/w, when it's supposed to cover (0, 1) in each direction
regardless of w, and it wasn't filling in the Z and W components of
the texcoord as specified.

Fixes piglit point-sprite and the spriteblast demo.  Bug #24431, #22245.
---
 src/mesa/drivers/dri/i965/brw_sf.c      |  21 ++---
 src/mesa/drivers/dri/i965/brw_sf.h      |   6 +-
 src/mesa/drivers/dri/i965/brw_sf_emit.c | 135 ++++++++++++++++++++------------
 3 files changed, 96 insertions(+), 66 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_sf.c b/src/mesa/drivers/dri/i965/brw_sf.c
index 8e6839b812..57d1c29ade 100644
--- a/src/mesa/drivers/dri/i965/brw_sf.c
+++ b/src/mesa/drivers/dri/i965/brw_sf.c
@@ -46,7 +46,6 @@
 static void compile_sf_prog( struct brw_context *brw,
 			     struct brw_sf_prog_key *key )
 {
-   GLcontext *ctx = &brw->intel.ctx;
    struct brw_sf_compile c;
    const GLuint *program;
    GLuint program_size;
@@ -69,20 +68,14 @@ static void compile_sf_prog( struct brw_context *brw,
 
    /* Construct map from attribute number to position in the vertex.
     */
-   for (i = idx = 0; i < VERT_RESULT_MAX; i++) 
+   for (i = idx = 0; i < VERT_RESULT_MAX; i++) {
       if (c.key.attrs & BITFIELD64_BIT(i)) {
 	 c.attr_to_idx[i] = idx;
 	 c.idx_to_attr[idx] = i;
-	 if (i >= VERT_RESULT_TEX0 && i <= VERT_RESULT_TEX7) {
-            c.point_attrs[i].CoordReplace = 
-               ctx->Point.CoordReplace[i - VERT_RESULT_TEX0];
-	 }
-         else {
-            c.point_attrs[i].CoordReplace = GL_FALSE;
-         }
 	 idx++;
       }
-   
+   }
+
    /* Which primitive?  Or all three? 
     */
    switch (key->primitive) {
@@ -162,6 +155,14 @@ static void upload_sf_prog(struct brw_context *brw)
    }
 
    key.do_point_sprite = ctx->Point.PointSprite;
+   if (key.do_point_sprite) {
+      int i;
+
+      for (i = 0; i < 8; i++) {
+	 if (ctx->Point.CoordReplace[i])
+	    key.point_sprite_coord_replace |= (1 << i);
+      }
+   }
    key.sprite_origin_lower_left = (ctx->Point.SpriteOrigin == GL_LOWER_LEFT);
    /* _NEW_LIGHT */
    key.do_flat_shading = (ctx->Light.ShadeModel == GL_FLAT);
diff --git a/src/mesa/drivers/dri/i965/brw_sf.h b/src/mesa/drivers/dri/i965/brw_sf.h
index 0ba731fac9..a0680a56f2 100644
--- a/src/mesa/drivers/dri/i965/brw_sf.h
+++ b/src/mesa/drivers/dri/i965/brw_sf.h
@@ -46,6 +46,7 @@
 
 struct brw_sf_prog_key {
    GLbitfield64 attrs;
+   uint8_t point_sprite_coord_replace;
    GLuint primitive:2;
    GLuint do_twoside_color:1;
    GLuint do_flat_shading:1;
@@ -56,10 +57,6 @@ struct brw_sf_prog_key {
    GLuint pad:24;
 };
 
-struct brw_sf_point_tex {
-   GLboolean CoordReplace;	
-};
-
 struct brw_sf_compile {
    struct brw_compile func;
    struct brw_sf_prog_key key;
@@ -100,7 +97,6 @@ struct brw_sf_compile {
 
    GLubyte attr_to_idx[VERT_RESULT_MAX];   
    GLubyte idx_to_attr[VERT_RESULT_MAX];   
-   struct brw_sf_point_tex point_attrs[VERT_RESULT_MAX];
 };
 
  
diff --git a/src/mesa/drivers/dri/i965/brw_sf_emit.c b/src/mesa/drivers/dri/i965/brw_sf_emit.c
index bb08055e3b..56f7c986e7 100644
--- a/src/mesa/drivers/dri/i965/brw_sf_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_sf_emit.c
@@ -354,6 +354,33 @@ static GLboolean calculate_masks( struct brw_sf_compile *c,
    return is_last_attr;
 }
 
+/* Calculates the predicate control for which channels of a reg
+ * (containing 2 attrs) to do point sprite coordinate replacement on.
+ */
+static uint16_t
+calculate_point_sprite_mask(struct brw_sf_compile *c, GLuint reg)
+{
+   int attr1, attr2;
+   uint16_t pc = 0;
+
+   attr1 = c->idx_to_attr[reg * 2];
+   if (attr1 >= VERT_RESULT_TEX0 && attr1 <= VERT_RESULT_TEX7) {
+      if (c->key.point_sprite_coord_replace & (1 << (attr1 - VERT_RESULT_TEX0)))
+	 pc |= 0x0f;
+   }
+
+   if (reg * 2 + 1 < c->nr_setup_attrs) {
+       attr2 = c->idx_to_attr[reg * 2 + 1];
+       if (attr2 >= VERT_RESULT_TEX0 && attr2 <= VERT_RESULT_TEX7) {
+	  if (c->key.point_sprite_coord_replace & (1 << (attr2 -
+							 VERT_RESULT_TEX0)))
+	     pc |= 0xf0;
+       }
+   }
+
+   return pc;
+}
+
 
 
 void brw_emit_tri_setup( struct brw_sf_compile *c, GLboolean allocate)
@@ -529,22 +556,27 @@ void brw_emit_point_sprite_setup( struct brw_sf_compile *c, GLboolean allocate)
    copy_z_inv_w(c);
    for (i = 0; i < c->nr_setup_regs; i++)
    {
-      struct brw_sf_point_tex *tex = &c->point_attrs[c->idx_to_attr[2*i]];
       struct brw_reg a0 = offset(c->vert[0], i);
-      GLushort pc, pc_persp, pc_linear;
+      GLushort pc, pc_persp, pc_linear, pc_coord_replace;
       GLboolean last = calculate_masks(c, i, &pc, &pc_persp, &pc_linear);
-            
-      if (pc_persp)
-      {				
-	  if (!tex->CoordReplace) {
-	      brw_set_predicate_control_flag_value(p, pc_persp);
-	      brw_MUL(p, a0, a0, c->inv_w[0]);
-	  }
+
+      pc_coord_replace = calculate_point_sprite_mask(c, i);
+      pc_persp &= ~pc_coord_replace;
+
+      if (pc_persp) {
+	 brw_set_predicate_control_flag_value(p, pc_persp);
+	 brw_MUL(p, a0, a0, c->inv_w[0]);
       }
 
-      if (tex->CoordReplace) {
-	  /* Caculate 1.0/PointWidth */
-	  brw_math(&c->func,
+      /* Point sprite coordinate replacement: A texcoord with this
+       * enabled gets replaced with the value (x, y, 0, 1) where x and
+       * y vary from 0 to 1 across the horizontal and vertical of the
+       * point.
+       */
+      if (pc_coord_replace) {
+	 brw_set_predicate_control_flag_value(p, pc_coord_replace);
+	 /* Caculate 1.0/PointWidth */
+	 brw_math(&c->func,
 		  c->tmp,
 		  BRW_MATH_FUNCTION_INV,
 		  BRW_MATH_SATURATE_NONE,
@@ -553,50 +585,51 @@ void brw_emit_point_sprite_setup( struct brw_sf_compile *c, GLboolean allocate)
 		  BRW_MATH_DATA_SCALAR,
 		  BRW_MATH_PRECISION_FULL);
 
-	  if (c->key.sprite_origin_lower_left) {
-	   	brw_MUL(p, c->m1Cx, c->tmp, c->inv_w[0]);
-		brw_MOV(p, vec1(suboffset(c->m1Cx, 1)), brw_imm_f(0.0));
-	  	brw_MUL(p, c->m2Cy, c->tmp, negate(c->inv_w[0]));
-		brw_MOV(p, vec1(suboffset(c->m2Cy, 0)), brw_imm_f(0.0));
-	  } else {
-	   	brw_MUL(p, c->m1Cx, c->tmp, c->inv_w[0]);
-		brw_MOV(p, vec1(suboffset(c->m1Cx, 1)), brw_imm_f(0.0));
-	  	brw_MUL(p, c->m2Cy, c->tmp, c->inv_w[0]);
-		brw_MOV(p, vec1(suboffset(c->m2Cy, 0)), brw_imm_f(0.0));
-	  }
-      } else {
-	  brw_MOV(p, c->m1Cx, brw_imm_ud(0));
-	  brw_MOV(p, c->m2Cy, brw_imm_ud(0));
-      }
+	 brw_set_access_mode(p, BRW_ALIGN_16);
 
-      {
-	 brw_set_predicate_control_flag_value(p, pc); 
-	 if (tex->CoordReplace) {
-	     if (c->key.sprite_origin_lower_left) {
-		 brw_MUL(p, c->m3C0, c->inv_w[0], brw_imm_f(1.0));
-		 brw_MOV(p, vec1(suboffset(c->m3C0, 0)), brw_imm_f(0.0));
-	     }
-	     else
-		 brw_MOV(p, c->m3C0, brw_imm_f(0.0));
+	 /* dA/dx, dA/dy */
+	 brw_MOV(p, c->m1Cx, brw_imm_f(0.0));
+	 brw_MOV(p, c->m2Cy, brw_imm_f(0.0));
+	 brw_MOV(p, brw_writemask(c->m1Cx, WRITEMASK_X), c->tmp);
+	 if (c->key.sprite_origin_lower_left) {
+	    brw_MOV(p, brw_writemask(c->m2Cy, WRITEMASK_Y), negate(c->tmp));
 	 } else {
-	 	brw_MOV(p, c->m3C0, a0); /* constant value */
+	    brw_MOV(p, brw_writemask(c->m2Cy, WRITEMASK_Y), c->tmp);
 	 }
 
-	 /* Copy m0..m3 to URB. 
-	  */
-	 brw_urb_WRITE(p, 
-		       brw_null_reg(),
-		       0,
-		       brw_vec8_grf(0, 0),
-		       0, 	/* allocate */
-		       1,	/* used */
-		       4, 	/* msg len */
-		       0,	/* response len */
-		       last, 	/* eot */
-		       last, 	/* writes complete */
-		       i*4,	/* urb destination offset */
-		       BRW_URB_SWIZZLE_TRANSPOSE);
+	 /* attribute constant offset */
+	 brw_MOV(p, c->m3C0, brw_imm_f(0.0));
+	 if (c->key.sprite_origin_lower_left) {
+	    brw_MOV(p, brw_writemask(c->m3C0, WRITEMASK_YW), brw_imm_f(1.0));
+	 } else {
+	    brw_MOV(p, brw_writemask(c->m3C0, WRITEMASK_W), brw_imm_f(1.0));
+	 }
+
+	 brw_set_access_mode(p, BRW_ALIGN_1);
       }
+
+      if (pc & ~pc_coord_replace) {
+	 brw_set_predicate_control_flag_value(p, pc & ~pc_coord_replace);
+	 brw_MOV(p, c->m1Cx, brw_imm_ud(0));
+	 brw_MOV(p, c->m2Cy, brw_imm_ud(0));
+	 brw_MOV(p, c->m3C0, a0); /* constant value */
+      }
+
+
+      brw_set_predicate_control_flag_value(p, pc);
+      /* Copy m0..m3 to URB. */
+      brw_urb_WRITE(p,
+		    brw_null_reg(),
+		    0,
+		    brw_vec8_grf(0, 0),
+		    0, 	/* allocate */
+		    1,	/* used */
+		    4, 	/* msg len */
+		    0,	/* response len */
+		    last, 	/* eot */
+		    last, 	/* writes complete */
+		    i*4,	/* urb destination offset */
+		    BRW_URB_SWIZZLE_TRANSPOSE);
    }
 }
 
-- 
cgit v1.2.3


From ffd625d4aaf145eb28fc76617e95ffc3fdfd54cc Mon Sep 17 00:00:00 2001
From: Alex Deucher <alexdeucher@gmail.com>
Date: Mon, 8 Mar 2010 17:38:39 -0500
Subject: radeon: don't attempt to use alternate blit formats for depth buffers

noticed by fredrikh on IRC.
---
 src/mesa/drivers/dri/radeon/radeon_tex_copy.c | 4 ++++
 1 file changed, 4 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/radeon/radeon_tex_copy.c b/src/mesa/drivers/dri/radeon/radeon_tex_copy.c
index a4bb03d5d3..5cfad6fc3c 100644
--- a/src/mesa/drivers/dri/radeon/radeon_tex_copy.c
+++ b/src/mesa/drivers/dri/radeon/radeon_tex_copy.c
@@ -93,6 +93,10 @@ do_copy_texsubimage(GLcontext *ctx,
     src_bpp = _mesa_get_format_bytes(src_mesaformat);
     dst_bpp = _mesa_get_format_bytes(dst_mesaformat);
     if (!radeon->vtbl.check_blit(dst_mesaformat)) {
+	    /* depth formats tend to be special */
+	    if (_mesa_get_format_bits(dst_mesaformat, GL_DEPTH_BITS) > 0)
+		    return GL_FALSE;
+
 	    if (src_bpp != dst_bpp)
 		    return GL_FALSE;
 
-- 
cgit v1.2.3


From dd8f5c33f3a54212a0d7d072cd75b321f5abcda8 Mon Sep 17 00:00:00 2001
From: Corbin Simpson <mostawesomed...@gmail.com>
Date: Wed, 10 Feb 2010 10:39:18 -0800
Subject: mesa/st: Gallium quads, by spec, never change provoking vertex.

Fixes glean/clipFlat for r300g.
---
 src/mesa/state_tracker/st_extensions.c | 3 +++
 1 file changed, 3 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
index 79be833768..e03dd30f0f 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -137,6 +137,9 @@ void st_init_limits(struct st_context *st)
    /* XXX separate query for early function return? */
    st->ctx->Shader.EmitContReturn =
       screen->get_param(screen, PIPE_CAP_TGSI_CONT_SUPPORTED);
+
+   /* Quads always follow GL provoking rules. */
+   c->QuadsFollowProvokingVertexConvention = GL_FALSE;
 }
 
 
-- 
cgit v1.2.3


From ae7b7bf1edcf6c492b4dcc162bca28a0090f601e Mon Sep 17 00:00:00 2001
From: Roland Scheidegger <sroland@vmware.com>
Date: Tue, 9 Mar 2010 15:09:01 +0100
Subject: st/mesa: fix clear/drawpixels/bitmap for new cso vertex elements
 interface

somehow those got lost...
---
 src/mesa/state_tracker/st_cb_bitmap.c     | 4 ++++
 src/mesa/state_tracker/st_cb_clear.c      | 4 ++++
 src/mesa/state_tracker/st_cb_drawpixels.c | 4 ++++
 src/mesa/state_tracker/st_context.c       | 8 ++++++++
 src/mesa/state_tracker/st_context.h       | 3 +++
 5 files changed, 23 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/state_tracker/st_cb_bitmap.c b/src/mesa/state_tracker/st_cb_bitmap.c
index 25430bba77..95b148a7b4 100644
--- a/src/mesa/state_tracker/st_cb_bitmap.c
+++ b/src/mesa/state_tracker/st_cb_bitmap.c
@@ -440,6 +440,7 @@ draw_bitmap_quad(GLcontext *ctx, GLint x, GLint y, GLfloat z,
    cso_save_viewport(cso);
    cso_save_fragment_shader(cso);
    cso_save_vertex_shader(cso);
+   cso_save_vertex_elements(cso);
 
    /* rasterizer state: just scissor */
    st->bitmap.rasterizer.scissor = ctx->Scissor.Enabled;
@@ -490,6 +491,8 @@ draw_bitmap_quad(GLcontext *ctx, GLint x, GLint y, GLfloat z,
       cso_set_viewport(cso, &vp);
    }
 
+   cso_set_vertex_elements(cso, 3, st->velems_util_draw);
+
    /* draw textured quad */
    offset = setup_bitmap_vertex_data(st, x, y, width, height, z, color);
 
@@ -506,6 +509,7 @@ draw_bitmap_quad(GLcontext *ctx, GLint x, GLint y, GLfloat z,
    cso_restore_viewport(cso);
    cso_restore_fragment_shader(cso);
    cso_restore_vertex_shader(cso);
+   cso_restore_vertex_elements(cso);
 }
 
 
diff --git a/src/mesa/state_tracker/st_cb_clear.c b/src/mesa/state_tracker/st_cb_clear.c
index 898c32293d..efba9853b4 100644
--- a/src/mesa/state_tracker/st_cb_clear.c
+++ b/src/mesa/state_tracker/st_cb_clear.c
@@ -220,6 +220,7 @@ clear_with_quad(GLcontext *ctx,
    cso_save_rasterizer(st->cso_context);
    cso_save_fragment_shader(st->cso_context);
    cso_save_vertex_shader(st->cso_context);
+   cso_save_vertex_elements(st->cso_context);
 
    /* blend state: RGBA masking */
    {
@@ -271,6 +272,8 @@ clear_with_quad(GLcontext *ctx,
       cso_set_depth_stencil_alpha(st->cso_context, &depth_stencil);
    }
 
+   cso_set_vertex_elements(st->cso_context, 2, st->velems_util_draw);
+
    cso_set_rasterizer(st->cso_context, &st->clear.raster);
 
    cso_set_fragment_shader_handle(st->cso_context, st->clear.fs);
@@ -286,6 +289,7 @@ clear_with_quad(GLcontext *ctx,
    cso_restore_rasterizer(st->cso_context);
    cso_restore_fragment_shader(st->cso_context);
    cso_restore_vertex_shader(st->cso_context);
+   cso_restore_vertex_elements(st->cso_context);
 
 }
 
diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c b/src/mesa/state_tracker/st_cb_drawpixels.c
index 36c0a2b0e1..a21c0105e9 100644
--- a/src/mesa/state_tracker/st_cb_drawpixels.c
+++ b/src/mesa/state_tracker/st_cb_drawpixels.c
@@ -529,6 +529,7 @@ draw_textured_quad(GLcontext *ctx, GLint x, GLint y, GLfloat z,
    cso_save_sampler_textures(cso);
    cso_save_fragment_shader(cso);
    cso_save_vertex_shader(cso);
+   cso_save_vertex_elements(cso);
 
    /* rasterizer state: just scissor */
    {
@@ -581,6 +582,8 @@ draw_textured_quad(GLcontext *ctx, GLint x, GLint y, GLfloat z,
       cso_set_viewport(cso, &vp);
    }
 
+   cso_set_vertex_elements(cso, 3, st->velems_util_draw);
+
    /* texture state: */
    if (st->pixel_xfer.pixelmap_enabled) {
       struct pipe_texture *textures[2];
@@ -612,6 +615,7 @@ draw_textured_quad(GLcontext *ctx, GLint x, GLint y, GLfloat z,
    cso_restore_sampler_textures(cso);
    cso_restore_fragment_shader(cso);
    cso_restore_vertex_shader(cso);
+   cso_restore_vertex_elements(cso);
 }
 
 
diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c
index 8f6a0c2423..0329e0cef0 100644
--- a/src/mesa/state_tracker/st_context.c
+++ b/src/mesa/state_tracker/st_context.c
@@ -142,6 +142,14 @@ st_create_context_priv( GLcontext *ctx, struct pipe_context *pipe )
    for (i = 0; i < PIPE_MAX_SAMPLERS; i++)
       st->state.sampler_list[i] = &st->state.samplers[i];
 
+   for (i = 0; i < 3; i++) {
+      memset(&st->velems_util_draw[i], 0, sizeof(struct pipe_vertex_element));
+      st->velems_util_draw[i].src_offset = i * 4 * sizeof(float);
+      st->velems_util_draw[i].instance_divisor = 0;
+      st->velems_util_draw[i].vertex_buffer_index = 0;
+      st->velems_util_draw[i].src_format = PIPE_FORMAT_R32G32B32A32_FLOAT;
+   }
+
    /* we want all vertex data to be placed in buffer objects */
    vbo_use_buffer_objects(ctx);
 
diff --git a/src/mesa/state_tracker/st_context.h b/src/mesa/state_tracker/st_context.h
index 50e98d7146..f2fa7e8711 100644
--- a/src/mesa/state_tracker/st_context.h
+++ b/src/mesa/state_tracker/st_context.h
@@ -173,6 +173,9 @@ struct st_context
       unsigned vbuf_slot;
    } clear;
 
+   /** used for anything using util_draw_vertex_buffer */
+   struct pipe_vertex_element velems_util_draw[3];
+
    void *passthrough_fs;  /**< simple pass-through frag shader */
 
    struct gen_mipmap_state *gen_mipmap;
-- 
cgit v1.2.3


From a673dee4553b6f1649d4cc31f7f7849058411c49 Mon Sep 17 00:00:00 2001
From: Roland Scheidegger <sroland@vmware.com>
Date: Tue, 9 Mar 2010 20:31:40 +0100
Subject: mesa/st: initialize velements state properly

one variable is a bitfield where the rest is never written to, which caused
valgrind to complain. Might have caused cso to not recognize an already stored
state. Reported by Christoph Bumiller.
---
 src/mesa/state_tracker/st_draw.c | 1 +
 1 file changed, 1 insertion(+)

(limited to 'src/mesa')

diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c
index 4d2e39108d..8a6e1ed466 100644
--- a/src/mesa/state_tracker/st_draw.c
+++ b/src/mesa/state_tracker/st_draw.c
@@ -563,6 +563,7 @@ st_draw_vbo(GLcontext *ctx,
    (void) check_uniforms;
 #endif
 
+   memset(velements, 0, sizeof(struct pipe_vertex_element) * vpv->num_inputs);
    /*
     * Setup the vbuffer[] and velements[] arrays.
     */
-- 
cgit v1.2.3


From fe14868d96d4820dba73c3a507d191b8a73c6870 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Tue, 9 Mar 2010 22:03:24 +0200
Subject: drop stray XFree86Server, XGLServer

---
 src/gallium/include/pipe/p_compiler.h | 5 -----
 src/mesa/glapi/glapi_getproc.c        | 8 ++++----
 2 files changed, 4 insertions(+), 9 deletions(-)

(limited to 'src/mesa')

diff --git a/src/gallium/include/pipe/p_compiler.h b/src/gallium/include/pipe/p_compiler.h
index b93b38310a..e2766d15cd 100644
--- a/src/gallium/include/pipe/p_compiler.h
+++ b/src/gallium/include/pipe/p_compiler.h
@@ -31,13 +31,8 @@
 
 #include "p_config.h"
 
-#ifndef XFree86Server
 #include <stdlib.h>
 #include <string.h>
-#else
-#include "xf86_ansic.h"
-#include "xf86_libc.h"
-#endif
 #include <stddef.h>
 #include <stdarg.h>
 
diff --git a/src/mesa/glapi/glapi_getproc.c b/src/mesa/glapi/glapi_getproc.c
index a6dbf173e8..2b89a8f4f4 100644
--- a/src/mesa/glapi/glapi_getproc.c
+++ b/src/mesa/glapi/glapi_getproc.c
@@ -53,7 +53,7 @@
 # endif
 #endif
 
-#if !defined(DISPATCH_FUNCTION_SIZE) && !defined(XFree86Server) && !defined(XGLServer)
+#if !defined(DISPATCH_FUNCTION_SIZE) && !defined(XFree86Server)
 # define NEED_FUNCTION_POINTER
 #endif
 
@@ -112,7 +112,7 @@ extern const GLubyte gl_dispatch_functions_start[];
 #endif /* USE_X86_ASM */
 
 
-#if !defined(XFree86Server) && !defined(XGLServer)
+#if !defined(XFree86Server)
 
 /**
  * Return dispatch function address for the named static (built-in) function.
@@ -140,7 +140,7 @@ get_static_proc_address(const char *funcName)
    }
 }
 
-#endif /* !defined(XFree86Server) && !defined(XGLServer) */
+#endif /* !defined(XFree86Server) */
 
 
 
@@ -724,7 +724,7 @@ _glapi_get_proc_address(const char *funcName)
       }
    }
 
-#if !defined( XFree86Server ) && !defined( XGLServer )
+#if !defined( XFree86Server )
    /* search static functions */
    {
       const _glapi_proc func = get_static_proc_address(funcName);
-- 
cgit v1.2.3


From 2c8b5ffed9a787e896b540a95be48ef401d5f007 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Tue, 9 Mar 2010 22:03:24 +0200
Subject: glapi: mv table functions to glapi_getproc.c and add local header

---
 src/mesa/glapi/glapi.c         | 44 +--------------------------------
 src/mesa/glapi/glapi.h         | 21 ----------------
 src/mesa/glapi/glapi_getproc.c | 56 ++++++++++++++++++++++++++++++++++++++++--
 src/mesa/glapi/glapi_priv.h    | 43 ++++++++++++++++++++++++++++++++
 4 files changed, 98 insertions(+), 66 deletions(-)
 create mode 100644 src/mesa/glapi/glapi_priv.h

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glapi.c b/src/mesa/glapi/glapi.c
index 13de594aaf..ce85cf6a87 100644
--- a/src/mesa/glapi/glapi.c
+++ b/src/mesa/glapi/glapi.c
@@ -59,7 +59,7 @@
 #endif
 
 #include "glapi/glapi.h"
-#include "glapi/glapitable.h"
+#include "glapi/glapi_priv.h"
 
 extern _glapi_proc __glapi_noop_table[];
 
@@ -291,45 +291,3 @@ _glapi_get_dispatch(void)
    return _glapi_Dispatch;
 #endif
 }
-
-
-
-
-/*
- * The dispatch table size (number of entries) is the size of the
- * _glapi_table struct plus the number of dynamic entries we can add.
- * The extra slots can be filled in by DRI drivers that register new extension
- * functions.
- */
-#define DISPATCH_TABLE_SIZE (sizeof(struct _glapi_table) / sizeof(void *) + MAX_EXTENSION_FUNCS)
-
-
-/**
- * Return size of dispatch table struct as number of functions (or
- * slots).
- */
-PUBLIC GLuint
-_glapi_get_dispatch_table_size(void)
-{
-   return DISPATCH_TABLE_SIZE;
-}
-
-
-/**
- * Make sure there are no NULL pointers in the given dispatch table.
- * Intended for debugging purposes.
- */
-void
-_glapi_check_table_not_null(const struct _glapi_table *table)
-{
-#if 0 /* enable this for extra DEBUG */
-   const GLuint entries = _glapi_get_dispatch_table_size();
-   const void **tab = (const void **) table;
-   GLuint i;
-   for (i = 1; i < entries; i++) {
-      assert(tab[i]);
-   }
-#else
-   (void) table;
-#endif
-}
diff --git a/src/mesa/glapi/glapi.h b/src/mesa/glapi/glapi.h
index 1ca2e4beff..7dcf2e8910 100644
--- a/src/mesa/glapi/glapi.h
+++ b/src/mesa/glapi/glapi.h
@@ -165,29 +165,8 @@ extern _glapi_proc
 _glapi_get_proc_address(const char *funcName);
 
 
-/**
- * GL API local functions and defines
- */
-
-extern void
-init_glapi_relocs_once(void);
-
-extern void
-_glapi_check_table_not_null(const struct _glapi_table *table);
-
-
-extern void
-_glapi_check_table(const struct _glapi_table *table);
-
-
 extern const char *
 _glapi_get_proc_name(unsigned int offset);
 
 
-/*
- * Number of extension functions which we can dynamically add at runtime.
- */
-#define MAX_EXTENSION_FUNCS 300
-
-
 #endif
diff --git a/src/mesa/glapi/glapi_getproc.c b/src/mesa/glapi/glapi_getproc.c
index 2b89a8f4f4..fbf48f1388 100644
--- a/src/mesa/glapi/glapi_getproc.c
+++ b/src/mesa/glapi/glapi_getproc.c
@@ -39,8 +39,9 @@
 #endif
 
 #include "glapi/glapi.h"
-#include "glapi/glapioffsets.h"
+#include "glapi/glapi_priv.h"
 #include "glapi/glapitable.h"
+#include "glapi/glapioffsets.h"
 
 
 #if defined(USE_X64_64_ASM) && defined(GLX_USE_TLS)
@@ -378,6 +379,12 @@ struct _glapi_function {
 };
 
 
+/*
+ * Number of extension functions which we can dynamically add at runtime.
+ */
+#define MAX_EXTENSION_FUNCS 300
+
+
 static struct _glapi_function ExtEntryTable[MAX_EXTENSION_FUNCS];
 static GLuint NumExtEntryPoints = 0;
 
@@ -766,6 +773,51 @@ _glapi_get_proc_name(GLuint offset)
 
 
 
+/**********************************************************************
+ * GL API table functions.
+ */
+
+
+/*
+ * The dispatch table size (number of entries) is the size of the
+ * _glapi_table struct plus the number of dynamic entries we can add.
+ * The extra slots can be filled in by DRI drivers that register new extension
+ * functions.
+ */
+#define DISPATCH_TABLE_SIZE (sizeof(struct _glapi_table) / sizeof(void *) + MAX_EXTENSION_FUNCS)
+
+
+/**
+ * Return size of dispatch table struct as number of functions (or
+ * slots).
+ */
+PUBLIC GLuint
+_glapi_get_dispatch_table_size(void)
+{
+   return DISPATCH_TABLE_SIZE;
+}
+
+
+/**
+ * Make sure there are no NULL pointers in the given dispatch table.
+ * Intended for debugging purposes.
+ */
+void
+_glapi_check_table_not_null(const struct _glapi_table *table)
+{
+#ifdef EXTRA_DEBUG /* set to DEBUG for extra DEBUG */
+   const GLuint entries = _glapi_get_dispatch_table_size();
+   const void **tab = (const void **) table;
+   GLuint i;
+   for (i = 1; i < entries; i++) {
+      assert(tab[i]);
+   }
+#else
+   (void) table;
+#endif
+}
+
+
 /**
  * Do some spot checks to be sure that the dispatch table
  * slots are assigned correctly. For debugging only.
@@ -773,7 +825,7 @@ _glapi_get_proc_name(GLuint offset)
 void
 _glapi_check_table(const struct _glapi_table *table)
 {
-#if 0 /* enable this for extra DEBUG */
+#ifdef EXTRA_DEBUG /* set to DEBUG for extra DEBUG */
    {
       GLuint BeginOffset = _glapi_get_proc_offset("glBegin");
       char *BeginFunc = (char*) &table->Begin;
diff --git a/src/mesa/glapi/glapi_priv.h b/src/mesa/glapi/glapi_priv.h
new file mode 100644
index 0000000000..05eda99ccf
--- /dev/null
+++ b/src/mesa/glapi/glapi_priv.h
@@ -0,0 +1,43 @@
+/*
+ * Mesa 3-D graphics library
+ * Version:  7.1
+ *
+ * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+
+#ifndef _GLAPI_PRIV_H
+#define _GLAPI_PRIV_H
+
+#include "glthread.h"
+
+extern void
+_glapi_check_table_not_null(const struct _glapi_table *table);
+
+
+extern void
+_glapi_check_table(const struct _glapi_table *table);
+
+
+extern void
+init_glapi_relocs_once(void);
+
+
+#endif
-- 
cgit v1.2.3


From 54ba95a4de749de1da73b3917aac99eb1d57d7fa Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Tue, 9 Mar 2010 22:03:24 +0200
Subject: glapi: split out arch-specific code for entrypoints

---
 src/mesa/glapi/glapi_entrypoint.c | 331 ++++++++++++++++++++++++++++++++++++++
 src/mesa/glapi/glapi_getproc.c    | 297 +---------------------------------
 src/mesa/glapi/glapi_priv.h       |  23 +++
 src/mesa/sources.mak              |   1 +
 4 files changed, 357 insertions(+), 295 deletions(-)
 create mode 100644 src/mesa/glapi/glapi_entrypoint.c

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glapi_entrypoint.c b/src/mesa/glapi/glapi_entrypoint.c
new file mode 100644
index 0000000000..5e6e5995f2
--- /dev/null
+++ b/src/mesa/glapi/glapi_entrypoint.c
@@ -0,0 +1,331 @@
+/*
+ * Mesa 3-D graphics library
+ * Version:  7.1
+ *
+ * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file glapi_entrypoint.c
+ *
+ * Arch-specific code for manipulating GL API entrypoints (dispatch stubs).
+ */
+
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#include "glapi/mesa.h"
+#else
+#include "main/glheader.h"
+#include "main/compiler.h"
+#endif
+
+#include "glapi/glapi.h"
+#include "glapi/glapi_priv.h"
+
+
+#ifdef USE_X86_ASM
+
+#if defined( GLX_USE_TLS )
+extern       GLubyte gl_dispatch_functions_start[];
+extern       GLubyte gl_dispatch_functions_end[];
+#else
+extern const GLubyte gl_dispatch_functions_start[];
+#endif
+
+#endif /* USE_X86_ASM */
+
+
+#if defined(DISPATCH_FUNCTION_SIZE)
+
+_glapi_proc
+get_entrypoint_address(GLuint functionOffset)
+{
+   return (_glapi_proc) (gl_dispatch_functions_start
+                         + (DISPATCH_FUNCTION_SIZE * functionOffset));
+}
+
+#endif
+
+
+#if defined(PTHREADS) || defined(GLX_USE_TLS)
+
+/**
+ * Perform platform-specific GL API entry-point fixups.
+ */
+static void
+init_glapi_relocs( void )
+{
+#if defined(USE_X86_ASM) && defined(GLX_USE_TLS) && !defined(GLX_X86_READONLY_TEXT)
+    extern unsigned long _x86_get_dispatch(void);
+    char run_time_patch[] = {
+       0x65, 0xa1, 0, 0, 0, 0 /* movl %gs:0,%eax */
+    };
+    GLuint *offset = (GLuint *) &run_time_patch[2]; /* 32-bits for x86/32 */
+    const GLubyte * const get_disp = (const GLubyte *) run_time_patch;
+    GLubyte * curr_func = (GLubyte *) gl_dispatch_functions_start;
+
+    *offset = _x86_get_dispatch();
+    while ( curr_func != (GLubyte *) gl_dispatch_functions_end ) {
+	(void) memcpy( curr_func, get_disp, sizeof(run_time_patch));
+	curr_func += DISPATCH_FUNCTION_SIZE;
+    }
+#endif
+#ifdef USE_SPARC_ASM
+    extern void __glapi_sparc_icache_flush(unsigned int *);
+    static const unsigned int template[] = {
+#ifdef GLX_USE_TLS
+	0x05000000, /* sethi %hi(_glapi_tls_Dispatch), %g2 */
+	0x8730e00a, /* srl %g3, 10, %g3 */
+	0x8410a000, /* or %g2, %lo(_glapi_tls_Dispatch), %g2 */
+#ifdef __arch64__
+	0xc259c002, /* ldx [%g7 + %g2], %g1 */
+	0xc2584003, /* ldx [%g1 + %g3], %g1 */
+#else
+	0xc201c002, /* ld [%g7 + %g2], %g1 */
+	0xc2004003, /* ld [%g1 + %g3], %g1 */
+#endif
+	0x81c04000, /* jmp %g1 */
+	0x01000000, /* nop  */
+#else
+#ifdef __arch64__
+	0x03000000, /* 64-bit 0x00 --> sethi %hh(_glapi_Dispatch), %g1 */
+	0x05000000, /* 64-bit 0x04 --> sethi %lm(_glapi_Dispatch), %g2 */
+	0x82106000, /* 64-bit 0x08 --> or %g1, %hm(_glapi_Dispatch), %g1 */
+	0x8730e00a, /* 64-bit 0x0c --> srl %g3, 10, %g3 */
+	0x83287020, /* 64-bit 0x10 --> sllx %g1, 32, %g1 */
+	0x82004002, /* 64-bit 0x14 --> add %g1, %g2, %g1 */
+	0xc2586000, /* 64-bit 0x18 --> ldx [%g1 + %lo(_glapi_Dispatch)], %g1 */
+#else
+	0x03000000, /* 32-bit 0x00 --> sethi %hi(_glapi_Dispatch), %g1 */
+	0x8730e00a, /* 32-bit 0x04 --> srl %g3, 10, %g3 */
+	0xc2006000, /* 32-bit 0x08 --> ld [%g1 + %lo(_glapi_Dispatch)], %g1 */
+#endif
+	0x80a06000, /*             --> cmp %g1, 0 */
+	0x02800005, /*             --> be +4*5 */
+	0x01000000, /*             -->  nop  */
+#ifdef __arch64__
+	0xc2584003, /* 64-bit      --> ldx [%g1 + %g3], %g1 */
+#else
+	0xc2004003, /* 32-bit      --> ld [%g1 + %g3], %g1 */
+#endif
+	0x81c04000, /*             --> jmp %g1 */
+	0x01000000, /*             --> nop  */
+#ifdef __arch64__
+	0x9de3bf80, /* 64-bit      --> save  %sp, -128, %sp */
+#else
+	0x9de3bfc0, /* 32-bit      --> save  %sp, -64, %sp */
+#endif
+	0xa0100003, /*             --> mov  %g3, %l0 */
+	0x40000000, /*             --> call _glapi_get_dispatch */
+	0x01000000, /*             -->  nop */
+	0x82100008, /*             --> mov %o0, %g1 */
+	0x86100010, /*             --> mov %l0, %g3 */
+	0x10bffff7, /*             --> ba -4*9 */
+	0x81e80000, /*             -->  restore  */
+#endif
+    };
+#ifdef GLX_USE_TLS
+    extern unsigned int __glapi_sparc_tls_stub;
+    extern unsigned long __glapi_sparc_get_dispatch(void);
+    unsigned int *code = &__glapi_sparc_tls_stub;
+    unsigned long dispatch = __glapi_sparc_get_dispatch();
+#else
+    extern unsigned int __glapi_sparc_pthread_stub;
+    unsigned int *code = &__glapi_sparc_pthread_stub;
+    unsigned long dispatch = (unsigned long) &_glapi_Dispatch;
+    unsigned long call_dest = (unsigned long ) &_glapi_get_dispatch;
+    int idx;
+#endif
+
+#if defined(GLX_USE_TLS)
+    code[0] = template[0] | (dispatch >> 10);
+    code[1] = template[1];
+    __glapi_sparc_icache_flush(&code[0]);
+    code[2] = template[2] | (dispatch & 0x3ff);
+    code[3] = template[3];
+    __glapi_sparc_icache_flush(&code[2]);
+    code[4] = template[4];
+    code[5] = template[5];
+    __glapi_sparc_icache_flush(&code[4]);
+    code[6] = template[6];
+    __glapi_sparc_icache_flush(&code[6]);
+#else
+#if defined(__arch64__)
+    code[0] = template[0] | (dispatch >> (32 + 10));
+    code[1] = template[1] | ((dispatch & 0xffffffff) >> 10);
+    __glapi_sparc_icache_flush(&code[0]);
+    code[2] = template[2] | ((dispatch >> 32) & 0x3ff);
+    code[3] = template[3];
+    __glapi_sparc_icache_flush(&code[2]);
+    code[4] = template[4];
+    code[5] = template[5];
+    __glapi_sparc_icache_flush(&code[4]);
+    code[6] = template[6] | (dispatch & 0x3ff);
+    idx = 7;
+#else
+    code[0] = template[0] | (dispatch >> 10);
+    code[1] = template[1];
+    __glapi_sparc_icache_flush(&code[0]);
+    code[2] = template[2] | (dispatch & 0x3ff);
+    idx = 3;
+#endif
+    code[idx + 0] = template[idx + 0];
+    __glapi_sparc_icache_flush(&code[idx - 1]);
+    code[idx + 1] = template[idx + 1];
+    code[idx + 2] = template[idx + 2];
+    __glapi_sparc_icache_flush(&code[idx + 1]);
+    code[idx + 3] = template[idx + 3];
+    code[idx + 4] = template[idx + 4];
+    __glapi_sparc_icache_flush(&code[idx + 3]);
+    code[idx + 5] = template[idx + 5];
+    code[idx + 6] = template[idx + 6];
+    __glapi_sparc_icache_flush(&code[idx + 5]);
+    code[idx + 7] = template[idx + 7];
+    code[idx + 8] = template[idx + 8] |
+	    (((call_dest - ((unsigned long) &code[idx + 8]))
+	      >> 2) & 0x3fffffff);
+    __glapi_sparc_icache_flush(&code[idx + 7]);
+    code[idx + 9] = template[idx + 9];
+    code[idx + 10] = template[idx + 10];
+    __glapi_sparc_icache_flush(&code[idx + 9]);
+    code[idx + 11] = template[idx + 11];
+    code[idx + 12] = template[idx + 12];
+    __glapi_sparc_icache_flush(&code[idx + 11]);
+    code[idx + 13] = template[idx + 13];
+    __glapi_sparc_icache_flush(&code[idx + 13]);
+#endif
+#endif
+}
+
+void
+init_glapi_relocs_once( void )
+{
+   static pthread_once_t once_control = PTHREAD_ONCE_INIT;
+   pthread_once( & once_control, init_glapi_relocs );
+}
+
+#else
+
+void
+init_glapi_relocs_once( void ) { }
+
+#endif /* defined(PTHREADS) || defined(GLX_USE_TLS) */
+
+
+#ifdef USE_SPARC_ASM
+extern void __glapi_sparc_icache_flush(unsigned int *);
+#endif
+
+/**
+ * Generate a dispatch function (entrypoint) which jumps through
+ * the given slot number (offset) in the current dispatch table.
+ * We need assembly language in order to accomplish this.
+ */
+_glapi_proc
+generate_entrypoint(GLuint functionOffset)
+{
+#if defined(USE_X86_ASM)
+   /* 32 is chosen as something of a magic offset.  For x86, the dispatch
+    * at offset 32 is the first one where the offset in the
+    * "jmp OFFSET*4(%eax)" can't be encoded in a single byte.
+    */
+   const GLubyte * const template_func = gl_dispatch_functions_start 
+     + (DISPATCH_FUNCTION_SIZE * 32);
+   GLubyte * const code = (GLubyte *) malloc(DISPATCH_FUNCTION_SIZE);
+
+
+   if ( code != NULL ) {
+      (void) memcpy(code, template_func, DISPATCH_FUNCTION_SIZE);
+      fill_in_entrypoint_offset( (_glapi_proc) code, functionOffset );
+   }
+
+   return (_glapi_proc) code;
+#elif defined(USE_SPARC_ASM)
+
+#if defined(PTHREADS) || defined(GLX_USE_TLS)
+   static const unsigned int template[] = {
+      0x07000000, /* sethi %hi(0), %g3 */
+      0x8210000f, /* mov  %o7, %g1 */
+      0x40000000, /* call */
+      0x9e100001, /* mov  %g1, %o7 */
+   };
+#ifdef GLX_USE_TLS
+   extern unsigned int __glapi_sparc_tls_stub;
+   unsigned long call_dest = (unsigned long ) &__glapi_sparc_tls_stub;
+#else
+   extern unsigned int __glapi_sparc_pthread_stub;
+   unsigned long call_dest = (unsigned long ) &__glapi_sparc_pthread_stub;
+#endif
+   unsigned int *code = (unsigned int *) malloc(sizeof(template));
+   if (code) {
+      code[0] = template[0] | (functionOffset & 0x3fffff);
+      code[1] = template[1];
+      __glapi_sparc_icache_flush(&code[0]);
+      code[2] = template[2] |
+         (((call_dest - ((unsigned long) &code[2]))
+	   >> 2) & 0x3fffffff);
+      code[3] = template[3];
+      __glapi_sparc_icache_flush(&code[2]);
+   }
+   return (_glapi_proc) code;
+#endif
+
+#else
+   (void) functionOffset;
+   return NULL;
+#endif /* USE_*_ASM */
+}
+
+
+/**
+ * This function inserts a new dispatch offset into the assembly language
+ * stub that was generated with the preceeding function.
+ */
+void
+fill_in_entrypoint_offset(_glapi_proc entrypoint, GLuint offset)
+{
+#if defined(USE_X86_ASM)
+   GLubyte * const code = (GLubyte *) entrypoint;
+
+#if DISPATCH_FUNCTION_SIZE == 32
+   *((unsigned int *)(code + 11)) = 4 * offset;
+   *((unsigned int *)(code + 22)) = 4 * offset;
+#elif DISPATCH_FUNCTION_SIZE == 16 && defined( GLX_USE_TLS )
+   *((unsigned int *)(code +  8)) = 4 * offset;
+#elif DISPATCH_FUNCTION_SIZE == 16
+   *((unsigned int *)(code +  7)) = 4 * offset;
+#else
+# error Invalid DISPATCH_FUNCTION_SIZE!
+#endif
+
+#elif defined(USE_SPARC_ASM)
+   unsigned int *code = (unsigned int *) entrypoint;
+   code[0] &= ~0x3fffff;
+   code[0] |= (offset * sizeof(void *)) & 0x3fffff;
+   __glapi_sparc_icache_flush(&code[0]);
+#else
+
+   /* an unimplemented architecture */
+   (void) entrypoint;
+   (void) offset;
+
+#endif /* USE_*_ASM */
+}
diff --git a/src/mesa/glapi/glapi_getproc.c b/src/mesa/glapi/glapi_getproc.c
index fbf48f1388..bd930b875d 100644
--- a/src/mesa/glapi/glapi_getproc.c
+++ b/src/mesa/glapi/glapi_getproc.c
@@ -44,16 +44,6 @@
 #include "glapi/glapioffsets.h"
 
 
-#if defined(USE_X64_64_ASM) && defined(GLX_USE_TLS)
-# define DISPATCH_FUNCTION_SIZE  16
-#elif defined(USE_X86_ASM)
-# if defined(THREADS) && !defined(GLX_USE_TLS)
-#  define DISPATCH_FUNCTION_SIZE  32
-# else
-#  define DISPATCH_FUNCTION_SIZE  16
-# endif
-#endif
-
 #if !defined(DISPATCH_FUNCTION_SIZE) && !defined(XFree86Server)
 # define NEED_FUNCTION_POINTER
 #endif
@@ -101,18 +91,6 @@ get_static_proc_offset(const char *funcName)
 }
 
 
-#ifdef USE_X86_ASM
-
-#if defined( GLX_USE_TLS )
-extern       GLubyte gl_dispatch_functions_start[];
-extern       GLubyte gl_dispatch_functions_end[];
-#else
-extern const GLubyte gl_dispatch_functions_start[];
-#endif
-
-#endif /* USE_X86_ASM */
-
-
 #if !defined(XFree86Server)
 
 /**
@@ -126,12 +104,10 @@ get_static_proc_address(const char *funcName)
    if (f) {
 #if defined(DISPATCH_FUNCTION_SIZE) && defined(GLX_INDIRECT_RENDERING)
       return (f->Address == NULL)
-	 ? (_glapi_proc) (gl_dispatch_functions_start
-			  + (DISPATCH_FUNCTION_SIZE * f->Offset))
+	 ? get_entrypoint_address(f->Offset)
          : f->Address;
 #elif defined(DISPATCH_FUNCTION_SIZE)
-      return (_glapi_proc) (gl_dispatch_functions_start 
-                            + (DISPATCH_FUNCTION_SIZE * f->Offset));
+      return get_entrypoint_address(f->Offset);
 #else
       return f->Address;
 #endif
@@ -163,172 +139,6 @@ get_static_proc_name( GLuint offset )
 
 
 
-#if defined(PTHREADS) || defined(GLX_USE_TLS)
-
-/**
- * Perform platform-specific GL API entry-point fixups.
- */
-static void
-init_glapi_relocs( void )
-{
-#if defined(USE_X86_ASM) && defined(GLX_USE_TLS) && !defined(GLX_X86_READONLY_TEXT)
-    extern unsigned long _x86_get_dispatch(void);
-    char run_time_patch[] = {
-       0x65, 0xa1, 0, 0, 0, 0 /* movl %gs:0,%eax */
-    };
-    GLuint *offset = (GLuint *) &run_time_patch[2]; /* 32-bits for x86/32 */
-    const GLubyte * const get_disp = (const GLubyte *) run_time_patch;
-    GLubyte * curr_func = (GLubyte *) gl_dispatch_functions_start;
-
-    *offset = _x86_get_dispatch();
-    while ( curr_func != (GLubyte *) gl_dispatch_functions_end ) {
-	(void) memcpy( curr_func, get_disp, sizeof(run_time_patch));
-	curr_func += DISPATCH_FUNCTION_SIZE;
-    }
-#endif
-#ifdef USE_SPARC_ASM
-    extern void __glapi_sparc_icache_flush(unsigned int *);
-    static const unsigned int template[] = {
-#ifdef GLX_USE_TLS
-	0x05000000, /* sethi %hi(_glapi_tls_Dispatch), %g2 */
-	0x8730e00a, /* srl %g3, 10, %g3 */
-	0x8410a000, /* or %g2, %lo(_glapi_tls_Dispatch), %g2 */
-#ifdef __arch64__
-	0xc259c002, /* ldx [%g7 + %g2], %g1 */
-	0xc2584003, /* ldx [%g1 + %g3], %g1 */
-#else
-	0xc201c002, /* ld [%g7 + %g2], %g1 */
-	0xc2004003, /* ld [%g1 + %g3], %g1 */
-#endif
-	0x81c04000, /* jmp %g1 */
-	0x01000000, /* nop  */
-#else
-#ifdef __arch64__
-	0x03000000, /* 64-bit 0x00 --> sethi %hh(_glapi_Dispatch), %g1 */
-	0x05000000, /* 64-bit 0x04 --> sethi %lm(_glapi_Dispatch), %g2 */
-	0x82106000, /* 64-bit 0x08 --> or %g1, %hm(_glapi_Dispatch), %g1 */
-	0x8730e00a, /* 64-bit 0x0c --> srl %g3, 10, %g3 */
-	0x83287020, /* 64-bit 0x10 --> sllx %g1, 32, %g1 */
-	0x82004002, /* 64-bit 0x14 --> add %g1, %g2, %g1 */
-	0xc2586000, /* 64-bit 0x18 --> ldx [%g1 + %lo(_glapi_Dispatch)], %g1 */
-#else
-	0x03000000, /* 32-bit 0x00 --> sethi %hi(_glapi_Dispatch), %g1 */
-	0x8730e00a, /* 32-bit 0x04 --> srl %g3, 10, %g3 */
-	0xc2006000, /* 32-bit 0x08 --> ld [%g1 + %lo(_glapi_Dispatch)], %g1 */
-#endif
-	0x80a06000, /*             --> cmp %g1, 0 */
-	0x02800005, /*             --> be +4*5 */
-	0x01000000, /*             -->  nop  */
-#ifdef __arch64__
-	0xc2584003, /* 64-bit      --> ldx [%g1 + %g3], %g1 */
-#else
-	0xc2004003, /* 32-bit      --> ld [%g1 + %g3], %g1 */
-#endif
-	0x81c04000, /*             --> jmp %g1 */
-	0x01000000, /*             --> nop  */
-#ifdef __arch64__
-	0x9de3bf80, /* 64-bit      --> save  %sp, -128, %sp */
-#else
-	0x9de3bfc0, /* 32-bit      --> save  %sp, -64, %sp */
-#endif
-	0xa0100003, /*             --> mov  %g3, %l0 */
-	0x40000000, /*             --> call _glapi_get_dispatch */
-	0x01000000, /*             -->  nop */
-	0x82100008, /*             --> mov %o0, %g1 */
-	0x86100010, /*             --> mov %l0, %g3 */
-	0x10bffff7, /*             --> ba -4*9 */
-	0x81e80000, /*             -->  restore  */
-#endif
-    };
-#ifdef GLX_USE_TLS
-    extern unsigned int __glapi_sparc_tls_stub;
-    extern unsigned long __glapi_sparc_get_dispatch(void);
-    unsigned int *code = &__glapi_sparc_tls_stub;
-    unsigned long dispatch = __glapi_sparc_get_dispatch();
-#else
-    extern unsigned int __glapi_sparc_pthread_stub;
-    unsigned int *code = &__glapi_sparc_pthread_stub;
-    unsigned long dispatch = (unsigned long) &_glapi_Dispatch;
-    unsigned long call_dest = (unsigned long ) &_glapi_get_dispatch;
-    int idx;
-#endif
-
-#if defined(GLX_USE_TLS)
-    code[0] = template[0] | (dispatch >> 10);
-    code[1] = template[1];
-    __glapi_sparc_icache_flush(&code[0]);
-    code[2] = template[2] | (dispatch & 0x3ff);
-    code[3] = template[3];
-    __glapi_sparc_icache_flush(&code[2]);
-    code[4] = template[4];
-    code[5] = template[5];
-    __glapi_sparc_icache_flush(&code[4]);
-    code[6] = template[6];
-    __glapi_sparc_icache_flush(&code[6]);
-#else
-#if defined(__arch64__)
-    code[0] = template[0] | (dispatch >> (32 + 10));
-    code[1] = template[1] | ((dispatch & 0xffffffff) >> 10);
-    __glapi_sparc_icache_flush(&code[0]);
-    code[2] = template[2] | ((dispatch >> 32) & 0x3ff);
-    code[3] = template[3];
-    __glapi_sparc_icache_flush(&code[2]);
-    code[4] = template[4];
-    code[5] = template[5];
-    __glapi_sparc_icache_flush(&code[4]);
-    code[6] = template[6] | (dispatch & 0x3ff);
-    idx = 7;
-#else
-    code[0] = template[0] | (dispatch >> 10);
-    code[1] = template[1];
-    __glapi_sparc_icache_flush(&code[0]);
-    code[2] = template[2] | (dispatch & 0x3ff);
-    idx = 3;
-#endif
-    code[idx + 0] = template[idx + 0];
-    __glapi_sparc_icache_flush(&code[idx - 1]);
-    code[idx + 1] = template[idx + 1];
-    code[idx + 2] = template[idx + 2];
-    __glapi_sparc_icache_flush(&code[idx + 1]);
-    code[idx + 3] = template[idx + 3];
-    code[idx + 4] = template[idx + 4];
-    __glapi_sparc_icache_flush(&code[idx + 3]);
-    code[idx + 5] = template[idx + 5];
-    code[idx + 6] = template[idx + 6];
-    __glapi_sparc_icache_flush(&code[idx + 5]);
-    code[idx + 7] = template[idx + 7];
-    code[idx + 8] = template[idx + 8] |
-	    (((call_dest - ((unsigned long) &code[idx + 8]))
-	      >> 2) & 0x3fffffff);
-    __glapi_sparc_icache_flush(&code[idx + 7]);
-    code[idx + 9] = template[idx + 9];
-    code[idx + 10] = template[idx + 10];
-    __glapi_sparc_icache_flush(&code[idx + 9]);
-    code[idx + 11] = template[idx + 11];
-    code[idx + 12] = template[idx + 12];
-    __glapi_sparc_icache_flush(&code[idx + 11]);
-    code[idx + 13] = template[idx + 13];
-    __glapi_sparc_icache_flush(&code[idx + 13]);
-#endif
-#endif
-}
-
-void
-init_glapi_relocs_once( void )
-{
-   static pthread_once_t once_control = PTHREAD_ONCE_INIT;
-   pthread_once( & once_control, init_glapi_relocs );
-}
-
-#else
-
-void
-init_glapi_relocs_once( void ) { }
-
-#endif /* defined(PTHREADS) || defined(GLX_USE_TLS) */
-
-
-
 /**********************************************************************
  * Extension function management.
  */
@@ -388,109 +198,6 @@ struct _glapi_function {
 static struct _glapi_function ExtEntryTable[MAX_EXTENSION_FUNCS];
 static GLuint NumExtEntryPoints = 0;
 
-#ifdef USE_SPARC_ASM
-extern void __glapi_sparc_icache_flush(unsigned int *);
-#endif
-
-static void
-fill_in_entrypoint_offset(_glapi_proc entrypoint, GLuint offset);
-
-/**
- * Generate a dispatch function (entrypoint) which jumps through
- * the given slot number (offset) in the current dispatch table.
- * We need assembly language in order to accomplish this.
- */
-static _glapi_proc
-generate_entrypoint(GLuint functionOffset)
-{
-#if defined(USE_X86_ASM)
-   /* 32 is chosen as something of a magic offset.  For x86, the dispatch
-    * at offset 32 is the first one where the offset in the
-    * "jmp OFFSET*4(%eax)" can't be encoded in a single byte.
-    */
-   const GLubyte * const template_func = gl_dispatch_functions_start 
-     + (DISPATCH_FUNCTION_SIZE * 32);
-   GLubyte * const code = (GLubyte *) malloc(DISPATCH_FUNCTION_SIZE);
-
-
-   if ( code != NULL ) {
-      (void) memcpy(code, template_func, DISPATCH_FUNCTION_SIZE);
-      fill_in_entrypoint_offset( (_glapi_proc) code, functionOffset );
-   }
-
-   return (_glapi_proc) code;
-#elif defined(USE_SPARC_ASM)
-
-#if defined(PTHREADS) || defined(GLX_USE_TLS)
-   static const unsigned int template[] = {
-      0x07000000, /* sethi %hi(0), %g3 */
-      0x8210000f, /* mov  %o7, %g1 */
-      0x40000000, /* call */
-      0x9e100001, /* mov  %g1, %o7 */
-   };
-#ifdef GLX_USE_TLS
-   extern unsigned int __glapi_sparc_tls_stub;
-   unsigned long call_dest = (unsigned long ) &__glapi_sparc_tls_stub;
-#else
-   extern unsigned int __glapi_sparc_pthread_stub;
-   unsigned long call_dest = (unsigned long ) &__glapi_sparc_pthread_stub;
-#endif
-   unsigned int *code = (unsigned int *) malloc(sizeof(template));
-   if (code) {
-      code[0] = template[0] | (functionOffset & 0x3fffff);
-      code[1] = template[1];
-      __glapi_sparc_icache_flush(&code[0]);
-      code[2] = template[2] |
-         (((call_dest - ((unsigned long) &code[2]))
-	   >> 2) & 0x3fffffff);
-      code[3] = template[3];
-      __glapi_sparc_icache_flush(&code[2]);
-   }
-   return (_glapi_proc) code;
-#endif
-
-#else
-   (void) functionOffset;
-   return NULL;
-#endif /* USE_*_ASM */
-}
-
-
-/**
- * This function inserts a new dispatch offset into the assembly language
- * stub that was generated with the preceeding function.
- */
-static void
-fill_in_entrypoint_offset(_glapi_proc entrypoint, GLuint offset)
-{
-#if defined(USE_X86_ASM)
-   GLubyte * const code = (GLubyte *) entrypoint;
-
-#if DISPATCH_FUNCTION_SIZE == 32
-   *((unsigned int *)(code + 11)) = 4 * offset;
-   *((unsigned int *)(code + 22)) = 4 * offset;
-#elif DISPATCH_FUNCTION_SIZE == 16 && defined( GLX_USE_TLS )
-   *((unsigned int *)(code +  8)) = 4 * offset;
-#elif DISPATCH_FUNCTION_SIZE == 16
-   *((unsigned int *)(code +  7)) = 4 * offset;
-#else
-# error Invalid DISPATCH_FUNCTION_SIZE!
-#endif
-
-#elif defined(USE_SPARC_ASM)
-   unsigned int *code = (unsigned int *) entrypoint;
-   code[0] &= ~0x3fffff;
-   code[0] |= (offset * sizeof(void *)) & 0x3fffff;
-   __glapi_sparc_icache_flush(&code[0]);
-#else
-
-   /* an unimplemented architecture */
-   (void) entrypoint;
-   (void) offset;
-
-#endif /* USE_*_ASM */
-}
-
 
 /**
  * strdup() is actually not a standard ANSI C or POSIX routine.
diff --git a/src/mesa/glapi/glapi_priv.h b/src/mesa/glapi/glapi_priv.h
index 05eda99ccf..7cd81ee8dc 100644
--- a/src/mesa/glapi/glapi_priv.h
+++ b/src/mesa/glapi/glapi_priv.h
@@ -40,4 +40,27 @@ extern void
 init_glapi_relocs_once(void);
 
 
+extern _glapi_proc
+generate_entrypoint(GLuint functionOffset);
+
+
+extern void
+fill_in_entrypoint_offset(_glapi_proc entrypoint, GLuint offset);
+
+
+extern _glapi_proc
+get_entrypoint_address(GLuint functionOffset);
+
+
+#if defined(USE_X64_64_ASM) && defined(GLX_USE_TLS)
+# define DISPATCH_FUNCTION_SIZE  16
+#elif defined(USE_X86_ASM)
+# if defined(THREADS) && !defined(GLX_USE_TLS)
+#  define DISPATCH_FUNCTION_SIZE  32
+# else
+#  define DISPATCH_FUNCTION_SIZE  16
+# endif
+#endif
+
+
 #endif
diff --git a/src/mesa/sources.mak b/src/mesa/sources.mak
index 9f2e4e5157..74885548e5 100644
--- a/src/mesa/sources.mak
+++ b/src/mesa/sources.mak
@@ -88,6 +88,7 @@ MAIN_SOURCES = \
 GLAPI_SOURCES = \
 	glapi/glapi.c \
 	glapi/glapi_dispatch.c \
+	glapi/glapi_entrypoint.c \
 	glapi/glapi_getproc.c \
 	glapi/glapi_nop.c \
 	glapi/glthread.c
-- 
cgit v1.2.3


From 20ed2445b3b98f2b49a26ad4b45859a908583311 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Tue, 9 Mar 2010 22:03:24 +0200
Subject: glapi: allow for any mangle prefix

---
 src/mesa/glapi/glapi_getproc.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glapi_getproc.c b/src/mesa/glapi/glapi_getproc.c
index bd930b875d..46b466920b 100644
--- a/src/mesa/glapi/glapi_getproc.c
+++ b/src/mesa/glapi/glapi_getproc.c
@@ -63,7 +63,7 @@ find_entry( const char * n )
    for (i = 0; static_functions[i].Name_offset >= 0; i++) {
       const char *testName = gl_string_table + static_functions[i].Name_offset;
 #ifdef MANGLE
-      /* skip the "m" prefix on the name */
+      /* skip the prefix on the name */
       if (strcmp(testName, n + 1) == 0)
 #else
       if (strcmp(testName, n) == 0)
@@ -424,7 +424,8 @@ _glapi_get_proc_address(const char *funcName)
    GLuint i;
 
 #ifdef MANGLE
-   if (funcName[0] != 'm' || funcName[1] != 'g' || funcName[2] != 'l')
+   /* skip the prefix on the name */
+   if (funcName[1] != 'g' || funcName[2] != 'l')
       return NULL;
 #else
    if (funcName[0] != 'g' || funcName[1] != 'l')
-- 
cgit v1.2.3


From 3355ae1925dc3c868ec196d09c3a6121ed77849a Mon Sep 17 00:00:00 2001
From: José Fonseca <jfonseca@vmware.com>
Date: Tue, 9 Mar 2010 20:43:13 +0000
Subject: glapi: Fix scons build -- list new file.

---
 src/mesa/SConscript | 1 +
 1 file changed, 1 insertion(+)

(limited to 'src/mesa')

diff --git a/src/mesa/SConscript b/src/mesa/SConscript
index 0a25dccde5..e80ec5ee88 100644
--- a/src/mesa/SConscript
+++ b/src/mesa/SConscript
@@ -249,6 +249,7 @@ if env['platform'] != 'winddk':
 	glapi_sources = [
 		'glapi/glapi.c',
 		'glapi/glapi_dispatch.c',
+		'glapi/glapi_entrypoint.c',
 		'glapi/glapi_getproc.c',
 		'glapi/glapi_nop.c',
 		'glapi/glthread.c',
-- 
cgit v1.2.3


From ac2b7835d5e61629f0a1f8b6c35eb1efa2ffbfa2 Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Tue, 9 Mar 2010 21:41:00 +0100
Subject: radeon: add hw accelerated glReadPixel support (not enabled yet)

---
 src/mesa/drivers/dri/r200/Makefile              |   1 +
 src/mesa/drivers/dri/r200/radeon_pixel_read.c   |   1 +
 src/mesa/drivers/dri/r300/Makefile              |   3 +-
 src/mesa/drivers/dri/r300/radeon_pixel_read.c   |   1 +
 src/mesa/drivers/dri/r600/Makefile              |   3 +-
 src/mesa/drivers/dri/r600/radeon_pixel_read.c   |   1 +
 src/mesa/drivers/dri/radeon/Makefile            |   1 +
 src/mesa/drivers/dri/radeon/radeon_common.h     |   6 +
 src/mesa/drivers/dri/radeon/radeon_pixel_read.c | 188 ++++++++++++++++++++++++
 9 files changed, 203 insertions(+), 2 deletions(-)
 create mode 120000 src/mesa/drivers/dri/r200/radeon_pixel_read.c
 create mode 120000 src/mesa/drivers/dri/r300/radeon_pixel_read.c
 create mode 120000 src/mesa/drivers/dri/r600/radeon_pixel_read.c
 create mode 100644 src/mesa/drivers/dri/radeon/radeon_pixel_read.c

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r200/Makefile b/src/mesa/drivers/dri/r200/Makefile
index 3f87100570..9ea81fd505 100644
--- a/src/mesa/drivers/dri/r200/Makefile
+++ b/src/mesa/drivers/dri/r200/Makefile
@@ -21,6 +21,7 @@ RADEON_COMMON_SOURCES = \
 	radeon_fbo.c \
 	radeon_lock.c \
 	radeon_mipmap_tree.c \
+	radeon_pixel_read.c \
 	radeon_queryobj.c \
 	radeon_span.c \
 	radeon_texture.c \
diff --git a/src/mesa/drivers/dri/r200/radeon_pixel_read.c b/src/mesa/drivers/dri/r200/radeon_pixel_read.c
new file mode 120000
index 0000000000..3b03803126
--- /dev/null
+++ b/src/mesa/drivers/dri/r200/radeon_pixel_read.c
@@ -0,0 +1 @@
+../radeon/radeon_pixel_read.c
\ No newline at end of file
diff --git a/src/mesa/drivers/dri/r300/Makefile b/src/mesa/drivers/dri/r300/Makefile
index 4257a32b89..2245998c95 100644
--- a/src/mesa/drivers/dri/r300/Makefile
+++ b/src/mesa/drivers/dri/r300/Makefile
@@ -31,8 +31,9 @@ RADEON_COMMON_SOURCES = \
 	radeon_fbo.c \
 	radeon_lock.c \
 	radeon_mipmap_tree.c \
-	radeon_span.c \
+	radeon_pixel_read.c \
 	radeon_queryobj.c \
+	radeon_span.c \
 	radeon_texture.c \
 	radeon_tex_copy.c \
 	radeon_tex_getimage.c \
diff --git a/src/mesa/drivers/dri/r300/radeon_pixel_read.c b/src/mesa/drivers/dri/r300/radeon_pixel_read.c
new file mode 120000
index 0000000000..3b03803126
--- /dev/null
+++ b/src/mesa/drivers/dri/r300/radeon_pixel_read.c
@@ -0,0 +1 @@
+../radeon/radeon_pixel_read.c
\ No newline at end of file
diff --git a/src/mesa/drivers/dri/r600/Makefile b/src/mesa/drivers/dri/r600/Makefile
index f76859d11e..17915621ee 100644
--- a/src/mesa/drivers/dri/r600/Makefile
+++ b/src/mesa/drivers/dri/r600/Makefile
@@ -31,9 +31,10 @@ RADEON_COMMON_SOURCES = \
 	radeon_fbo.c \
 	radeon_lock.c \
 	radeon_mipmap_tree.c \
+	radeon_pixel_read.c \
+	radeon_queryobj.c \
 	radeon_span.c \
 	radeon_texture.c \
-	radeon_queryobj.c \
 	radeon_tex_copy.c \
 	radeon_tex_getimage.c \
 	radeon_tile.c
diff --git a/src/mesa/drivers/dri/r600/radeon_pixel_read.c b/src/mesa/drivers/dri/r600/radeon_pixel_read.c
new file mode 120000
index 0000000000..3b03803126
--- /dev/null
+++ b/src/mesa/drivers/dri/r600/radeon_pixel_read.c
@@ -0,0 +1 @@
+../radeon/radeon_pixel_read.c
\ No newline at end of file
diff --git a/src/mesa/drivers/dri/radeon/Makefile b/src/mesa/drivers/dri/radeon/Makefile
index 6904ebbee3..19df62742e 100644
--- a/src/mesa/drivers/dri/radeon/Makefile
+++ b/src/mesa/drivers/dri/radeon/Makefile
@@ -22,6 +22,7 @@ RADEON_COMMON_SOURCES = \
 	radeon_fbo.c \
 	radeon_lock.c \
 	radeon_mipmap_tree.c \
+	radeon_pixel_read.c \
 	radeon_queryobj.c \
 	radeon_span.c \
 	radeon_texture.c \
diff --git a/src/mesa/drivers/dri/radeon/radeon_common.h b/src/mesa/drivers/dri/radeon/radeon_common.h
index cd01c9984e..35b3f08fff 100644
--- a/src/mesa/drivers/dri/radeon/radeon_common.h
+++ b/src/mesa/drivers/dri/radeon/radeon_common.h
@@ -44,6 +44,12 @@ radeon_renderbuffer_set_bo(struct radeon_renderbuffer *rb,
 struct radeon_renderbuffer *
 radeon_create_renderbuffer(gl_format format, __DRIdrawable *driDrawPriv);
 
+void
+radeonReadPixels(GLcontext * ctx,
+				GLint x, GLint y, GLsizei width, GLsizei height,
+				GLenum format, GLenum type,
+				const struct gl_pixelstore_attrib *pack, GLvoid * pixels);
+
 void radeon_check_front_buffer_rendering(GLcontext *ctx);
 static inline struct radeon_renderbuffer *radeon_renderbuffer(struct gl_renderbuffer *rb)
 {
diff --git a/src/mesa/drivers/dri/radeon/radeon_pixel_read.c b/src/mesa/drivers/dri/radeon/radeon_pixel_read.c
new file mode 100644
index 0000000000..27841938e6
--- /dev/null
+++ b/src/mesa/drivers/dri/radeon/radeon_pixel_read.c
@@ -0,0 +1,188 @@
+/*
+ * Copyright (C) 2010 Maciej Cencora <m.cencora@gmail.com>
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#include "stdint.h"
+#include "main/bufferobj.h"
+#include "main/enums.h"
+#include "main/image.h"
+#include "main/state.h"
+#include "swrast/swrast.h"
+
+#include "radeon_common_context.h"
+#include "radeon_debug.h"
+#include "radeon_mipmap_tree.h"
+
+static gl_format gl_format_and_type_to_mesa_format(GLenum format, GLenum type)
+{
+    switch (format)
+    {
+        case GL_RGB:
+            switch (type) {
+                case GL_UNSIGNED_SHORT_5_6_5:
+                    return MESA_FORMAT_RGB565;
+                case GL_UNSIGNED_SHORT_5_6_5_REV:
+                    return MESA_FORMAT_RGB565_REV;
+            }
+            break;
+        case GL_RGBA:
+            switch (type) {
+                case GL_UNSIGNED_BYTE:
+                    return MESA_FORMAT_RGBA8888_REV;
+                case GL_FLOAT:
+                    return MESA_FORMAT_RGBA_FLOAT32;
+                case GL_UNSIGNED_SHORT_4_4_4_4:
+                    return MESA_FORMAT_ARGB4444;
+                case GL_UNSIGNED_SHORT_4_4_4_4_REV:
+                    return MESA_FORMAT_ARGB4444;
+                case GL_UNSIGNED_SHORT_5_5_5_1:
+                    return MESA_FORMAT_RGBA5551;
+                case GL_UNSIGNED_SHORT_1_5_5_5_REV:
+                    return MESA_FORMAT_ARGB1555_REV;
+                case GL_UNSIGNED_INT_8_8_8_8:
+                    return MESA_FORMAT_ARGB8888;
+                case GL_UNSIGNED_INT_8_8_8_8_REV:
+                    return MESA_FORMAT_ARGB8888_REV;
+            }
+            break;
+    }
+
+    return MESA_FORMAT_NONE;
+}
+
+static GLboolean
+do_blit_readpixels(GLcontext * ctx,
+                   GLint x, GLint y, GLsizei width, GLsizei height,
+                   GLenum format, GLenum type,
+                   const struct gl_pixelstore_attrib *pack, GLvoid * pixels)
+{
+    radeonContextPtr radeon = RADEON_CONTEXT(ctx);
+    const struct radeon_renderbuffer *rrb = radeon_renderbuffer(ctx->ReadBuffer->_ColorReadBuffer);
+    const gl_format dst_format = gl_format_and_type_to_mesa_format(format, type);
+    unsigned dst_rowstride, dst_imagesize, aligned_rowstride, flip_y;
+    struct radeon_bo *dst_buffer;
+    GLint dst_x = 0, dst_y = 0;
+
+    /* It's not worth if number of pixels to copy is really small */
+    if (width * height < 100) {
+        return GL_FALSE;
+    }
+
+    if (dst_format == MESA_FORMAT_NONE ||
+        !radeon->vtbl.check_blit(dst_format) || !radeon->vtbl.blit) {
+        return GL_FALSE;
+    }
+
+    if (ctx->_ImageTransferState) {
+        return GL_FALSE;
+    }
+
+    if (pack->SwapBytes || pack->LsbFirst) {
+        return GL_FALSE;
+    }
+
+    if (pack->RowLength > 0) {
+        dst_rowstride = pack->RowLength;
+    } else {
+        dst_rowstride = width;
+    }
+
+    if (!_mesa_clip_copytexsubimage(ctx, &dst_x, &dst_y, &x, &y, &width, &height)) {
+        return GL_TRUE;
+    }
+    assert(x >= 0 && y >= 0);
+
+    aligned_rowstride = get_texture_image_row_stride(radeon, dst_format, dst_rowstride, 0);
+    dst_imagesize = get_texture_image_size(dst_format,
+                                           aligned_rowstride,
+                                           height, 1, 0);
+    dst_buffer = radeon_bo_open(radeon->radeonScreen->bom, 0, dst_imagesize, 1024, RADEON_GEM_DOMAIN_GTT, 0);
+
+    /* Disable source Y flipping for FBOs */
+    flip_y = (ctx->ReadBuffer->Name == 0);
+    if (pack->Invert) {
+        y = rrb->base.Height - height - y;
+        flip_y = !flip_y;
+    }
+
+    if (radeon->vtbl.blit(ctx,
+                          rrb->bo,
+                          rrb->draw_offset,
+                          rrb->base.Format,
+                          rrb->pitch / rrb->cpp,
+                          rrb->base.Width,
+                          rrb->base.Height,
+                          x,
+                          y,
+                          dst_buffer,
+                          0, /* dst_offset */
+                          dst_format,
+                          aligned_rowstride / _mesa_get_format_bytes(dst_format),
+                          width,
+                          height,
+                          0, /* dst_x */
+                          0, /* dst_y */
+                          width,
+                          height,
+                          flip_y))
+    {
+        radeon_bo_map(dst_buffer, 0);
+        dst_rowstride *= _mesa_get_format_bytes(dst_format);
+        copy_rows(pixels, dst_rowstride, dst_buffer->ptr,
+                  aligned_rowstride, height, dst_rowstride);
+        radeon_bo_unmap(dst_buffer);
+        radeon_bo_unref(dst_buffer);
+        return GL_TRUE;
+    } else {
+        radeon_bo_unref(dst_buffer);
+        return GL_FALSE;
+    }
+}
+
+void
+radeonReadPixels(GLcontext * ctx,
+                 GLint x, GLint y, GLsizei width, GLsizei height,
+                 GLenum format, GLenum type,
+                 const struct gl_pixelstore_attrib *pack, GLvoid * pixels)
+{
+    if (do_blit_readpixels(ctx, x, y, width, height, format, type, pack, pixels))
+        return;
+
+    /* Update Mesa state before calling down into _swrast_ReadPixels, as
+     * the spans code requires the computed buffer states to be up to date,
+     * but _swrast_ReadPixels only updates Mesa state after setting up
+     * the spans code.
+     */
+
+    radeon_print(RADEON_FALLBACKS, RADEON_NORMAL,
+                 "Falling back to sw for ReadPixels (format %s, type %s)\n",
+                 _mesa_lookup_enum_by_nr(format), _mesa_lookup_enum_by_nr(type));
+
+    if (ctx->NewState)
+        _mesa_update_state(ctx);
+
+    _swrast_ReadPixels(ctx, x, y, width, height, format, type, pack, pixels);
+}
-- 
cgit v1.2.3


From 67108b5d12e0526ebedcdf2dbeeadfdbd0782161 Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Tue, 9 Mar 2010 21:42:00 +0100
Subject: r300: enable HW accelerated gl(Read/Copy/Draw)Pixels

---
 src/mesa/drivers/dri/r300/r300_state.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r300/r300_state.c b/src/mesa/drivers/dri/r300/r300_state.c
index 5979dedac4..8739dcbafb 100644
--- a/src/mesa/drivers/dri/r300/r300_state.c
+++ b/src/mesa/drivers/dri/r300/r300_state.c
@@ -46,6 +46,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "main/simple_list.h"
 #include "main/api_arrayelt.h"
 
+#include "drivers/common/meta.h"
 #include "swrast/swrast.h"
 #include "swrast_setup/swrast_setup.h"
 #include "shader/prog_parameter.h"
@@ -2326,8 +2327,12 @@ void r300InitStateFuncs(struct dd_function_table *functions)
 	functions->ClipPlane = r300ClipPlane;
 	functions->Scissor = radeonScissor;
 
-	functions->DrawBuffer		= radeonDrawBuffer;
-	functions->ReadBuffer		= radeonReadBuffer;
+	functions->DrawBuffer = radeonDrawBuffer;
+	functions->ReadBuffer = radeonReadBuffer;
+
+	functions->CopyPixels = _mesa_meta_CopyPixels;
+	functions->DrawPixels = _mesa_meta_DrawPixels;
+	functions->ReadPixels = radeonReadPixels;
 }
 
 void r300InitShaderFunctions(r300ContextPtr r300)
-- 
cgit v1.2.3


From a17563c7ddfa58fe7f09d22a62a10f3488ef3147 Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Sun, 7 Mar 2010 14:34:21 +0100
Subject: radeon/r200/r300/r600: add is_format_renderable function

---
 src/mesa/drivers/dri/r200/r200_context.c           |  1 +
 src/mesa/drivers/dri/r300/r300_context.c           |  6 ++++
 src/mesa/drivers/dri/r300/r300_tex.c               | 39 ++++++++++++++++++++++
 src/mesa/drivers/dri/r300/r300_tex.h               |  3 ++
 src/mesa/drivers/dri/r600/r600_context.c           |  1 +
 .../drivers/dri/radeon/radeon_common_context.h     |  1 +
 src/mesa/drivers/dri/radeon/radeon_context.c       |  1 +
 src/mesa/drivers/dri/radeon/radeon_texture.c       | 16 +++++++++
 src/mesa/drivers/dri/radeon/radeon_texture.h       |  2 ++
 9 files changed, 70 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r200/r200_context.c b/src/mesa/drivers/dri/r200/r200_context.c
index dad2580e08..4f1a56658c 100644
--- a/src/mesa/drivers/dri/r200/r200_context.c
+++ b/src/mesa/drivers/dri/r200/r200_context.c
@@ -266,6 +266,7 @@ static void r200_init_vtbl(radeonContextPtr radeon)
    radeon->vtbl.emit_query_finish = r200_emit_query_finish;
    radeon->vtbl.check_blit = r200_check_blit;
    radeon->vtbl.blit = r200_blit;
+   radeon->vtbl.is_format_renderable = radeonIsFormatRenderable;
 }
 
 
diff --git a/src/mesa/drivers/dri/r300/r300_context.c b/src/mesa/drivers/dri/r300/r300_context.c
index ff35cd5275..364e0ba6b6 100644
--- a/src/mesa/drivers/dri/r300/r300_context.c
+++ b/src/mesa/drivers/dri/r300/r300_context.c
@@ -321,6 +321,12 @@ static void r300_init_vtbl(radeonContextPtr radeon)
 
 	radeon->vtbl.check_blit = r300_check_blit;
 	radeon->vtbl.blit = r300_blit;
+
+	if (radeon->radeonScreen->chip_family >= CHIP_FAMILY_RV515) {
+		radeon->vtbl.is_format_renderable = r500IsFormatRenderable;
+	} else {
+		radeon->vtbl.is_format_renderable = r300IsFormatRenderable;
+	}
 }
 
 static void r300InitConstValues(GLcontext *ctx, radeonScreenPtr screen)
diff --git a/src/mesa/drivers/dri/r300/r300_tex.c b/src/mesa/drivers/dri/r300/r300_tex.c
index 8dd8507395..baef206bc2 100644
--- a/src/mesa/drivers/dri/r300/r300_tex.c
+++ b/src/mesa/drivers/dri/r300/r300_tex.c
@@ -308,6 +308,45 @@ static struct gl_texture_object *r300NewTextureObject(GLcontext * ctx,
 	return &t->base;
 }
 
+unsigned r300IsFormatRenderable(gl_format mesa_format)
+{
+	switch (mesa_format)
+	{
+		case MESA_FORMAT_RGB565:
+		case MESA_FORMAT_RGBA5551:
+		case MESA_FORMAT_RGBA8888:
+		case MESA_FORMAT_RGB565_REV:
+		case MESA_FORMAT_RGBA8888_REV:
+		case MESA_FORMAT_ARGB4444:
+		case MESA_FORMAT_ARGB1555:
+		case MESA_FORMAT_XRGB8888:
+		case MESA_FORMAT_ARGB8888:
+		case MESA_FORMAT_ARGB4444_REV:
+		case MESA_FORMAT_ARGB1555_REV:
+		case MESA_FORMAT_XRGB8888_REV:
+		case MESA_FORMAT_ARGB8888_REV:
+		case MESA_FORMAT_SRGBA8:
+		case MESA_FORMAT_SARGB8:
+		case MESA_FORMAT_SL8:
+		case MESA_FORMAT_A8:
+		case MESA_FORMAT_L8:
+		case MESA_FORMAT_I8:
+		case MESA_FORMAT_Z16:
+			return 1;
+		default:
+			return 0;
+	}
+}
+
+unsigned r500IsFormatRenderable(gl_format mesa_format)
+{
+	if (mesa_format == MESA_FORMAT_S8_Z24) {
+		return 1;
+	} else {
+		return r300IsFormatRenderable(mesa_format);
+	}
+}
+
 void r300InitTextureFuncs(radeonContextPtr radeon, struct dd_function_table *functions)
 {
 	/* Note: we only plug in the functions we implement in the driver
diff --git a/src/mesa/drivers/dri/r300/r300_tex.h b/src/mesa/drivers/dri/r300/r300_tex.h
index 9694e703b8..aca44cd766 100644
--- a/src/mesa/drivers/dri/r300/r300_tex.h
+++ b/src/mesa/drivers/dri/r300/r300_tex.h
@@ -53,4 +53,7 @@ extern void r300InitTextureFuncs(radeonContextPtr radeon, struct dd_function_tab
 
 int32_t r300TranslateTexFormat(gl_format mesaFormat);
 
+unsigned r300IsFormatRenderable(gl_format mesaFormat);
+unsigned r500IsFormatRenderable(gl_format mesaFormat);
+
 #endif				/* __r300_TEX_H__ */
diff --git a/src/mesa/drivers/dri/r600/r600_context.c b/src/mesa/drivers/dri/r600/r600_context.c
index 134e97e7c3..76d5027649 100644
--- a/src/mesa/drivers/dri/r600/r600_context.c
+++ b/src/mesa/drivers/dri/r600/r600_context.c
@@ -239,6 +239,7 @@ static void r600_init_vtbl(radeonContextPtr radeon)
 	radeon->vtbl.emit_query_finish = r600_emit_query_finish;
 	radeon->vtbl.check_blit = r600_check_blit;
 	radeon->vtbl.blit = r600_blit;
+	radeon->vtbl.is_format_renderable = radeonIsFormatRenderable;
 }
 
 static void r600InitConstValues(GLcontext *ctx, radeonScreenPtr screen)
diff --git a/src/mesa/drivers/dri/radeon/radeon_common_context.h b/src/mesa/drivers/dri/radeon/radeon_common_context.h
index d1a24e265f..5156c5d0d0 100644
--- a/src/mesa/drivers/dri/radeon/radeon_common_context.h
+++ b/src/mesa/drivers/dri/radeon/radeon_common_context.h
@@ -539,6 +539,7 @@ struct radeon_context {
                         unsigned reg_width,
                         unsigned reg_height,
                         unsigned flip_y);
+	   unsigned (*is_format_renderable)(gl_format mesa_format);
    } vtbl;
 };
 
diff --git a/src/mesa/drivers/dri/radeon/radeon_context.c b/src/mesa/drivers/dri/radeon/radeon_context.c
index 878a453bd5..56aba16e9e 100644
--- a/src/mesa/drivers/dri/radeon/radeon_context.c
+++ b/src/mesa/drivers/dri/radeon/radeon_context.c
@@ -200,6 +200,7 @@ static void r100_init_vtbl(radeonContextPtr radeon)
    radeon->vtbl.emit_query_finish = r100_emit_query_finish;
    radeon->vtbl.check_blit = r100_check_blit;
    radeon->vtbl.blit = r100_blit;
+   radeon->vtbl.is_format_renderable = radeonIsFormatRenderable;
 }
 
 /* Create the device specific context.
diff --git a/src/mesa/drivers/dri/radeon/radeon_texture.c b/src/mesa/drivers/dri/radeon/radeon_texture.c
index 3ccc711253..2b655fbd95 100644
--- a/src/mesa/drivers/dri/radeon/radeon_texture.c
+++ b/src/mesa/drivers/dri/radeon/radeon_texture.c
@@ -1006,3 +1006,19 @@ void radeonTexSubImage3D(GLcontext * ctx, GLenum target, GLint level,
 	radeon_texsubimage(ctx, 3, target, level, xoffset, yoffset, zoffset, width, height, depth, 0,
 		format, type, pixels, packing, texObj, texImage, 0);
 }
+
+unsigned radeonIsFormatRenderable(gl_format mesa_format)
+{
+	if (mesa_format == _dri_texformat_argb8888 || mesa_format == _dri_texformat_rgb565 ||
+		mesa_format == _dri_texformat_argb1555 || mesa_format == _dri_texformat_argb4444)
+		return 1;
+
+	switch (mesa_format)
+	{
+		case MESA_FORMAT_Z16:
+		case MESA_FORMAT_S8_Z24:
+			return 1;
+		default:
+			return 0;
+	}
+}
diff --git a/src/mesa/drivers/dri/radeon/radeon_texture.h b/src/mesa/drivers/dri/radeon/radeon_texture.h
index f09dd65214..4ce639ea34 100644
--- a/src/mesa/drivers/dri/radeon/radeon_texture.h
+++ b/src/mesa/drivers/dri/radeon/radeon_texture.h
@@ -135,4 +135,6 @@ void radeonCopyTexSubImage2D(GLcontext *ctx, GLenum target, GLint level,
 			GLint x, GLint y,
 			GLsizei width, GLsizei height);
 
+unsigned radeonIsFormatRenderable(gl_format mesa_format);
+
 #endif
-- 
cgit v1.2.3


From fd05067c9912e7ee83058a48d6e4c2cd7f262665 Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Sun, 7 Mar 2010 14:26:21 +0100
Subject: r300: add support for more rendering formats

---
 src/mesa/drivers/dri/r300/r300_cmdbuf.c | 35 ++++++++++---------
 src/mesa/drivers/dri/r300/r300_state.c  | 61 +++++++++++++++++++++++++++++++++
 2 files changed, 79 insertions(+), 17 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r300/r300_cmdbuf.c b/src/mesa/drivers/dri/r300/r300_cmdbuf.c
index 6cfa5686f4..e2dbb1dbf4 100644
--- a/src/mesa/drivers/dri/r300/r300_cmdbuf.c
+++ b/src/mesa/drivers/dri/r300/r300_cmdbuf.c
@@ -332,36 +332,37 @@ void r300_emit_cb_setup(struct r300_context *r300,
     assert(offset % 32 == 0);
 
     switch (format) {
-        case MESA_FORMAT_RGB565:
-            assert(_mesa_little_endian());
-            cbpitch |= R300_COLOR_FORMAT_RGB565;
+        case MESA_FORMAT_SL8:
+        case MESA_FORMAT_A8:
+        case MESA_FORMAT_L8:
+        case MESA_FORMAT_I8:
+            cbpitch |= R300_COLOR_FORMAT_I8;
             break;
+        case MESA_FORMAT_RGB565:
         case MESA_FORMAT_RGB565_REV:
-            assert(!_mesa_little_endian());
             cbpitch |= R300_COLOR_FORMAT_RGB565;
             break;
         case MESA_FORMAT_ARGB4444:
-            assert(_mesa_little_endian());
-            cbpitch |= R300_COLOR_FORMAT_ARGB4444;
-            break;
         case MESA_FORMAT_ARGB4444_REV:
-            assert(!_mesa_little_endian());
             cbpitch |= R300_COLOR_FORMAT_ARGB4444;
             break;
+        case MESA_FORMAT_RGBA5551:
         case MESA_FORMAT_ARGB1555:
-            assert(_mesa_little_endian());
-            cbpitch |= R300_COLOR_FORMAT_ARGB1555;
-            break;
         case MESA_FORMAT_ARGB1555_REV:
-            assert(!_mesa_little_endian());
             cbpitch |= R300_COLOR_FORMAT_ARGB1555;
             break;
+        case MESA_FORMAT_RGBA8888:
+        case MESA_FORMAT_RGBA8888_REV:
+        case MESA_FORMAT_XRGB8888:
+        case MESA_FORMAT_ARGB8888:
+        case MESA_FORMAT_XRGB8888_REV:
+        case MESA_FORMAT_ARGB8888_REV:
+        case MESA_FORMAT_SRGBA8:
+        case MESA_FORMAT_SARGB8:
+            cbpitch |= R300_COLOR_FORMAT_ARGB8888;
+            break;
         default:
-            if (cpp == 4) {
-                cbpitch |= R300_COLOR_FORMAT_ARGB8888;
-            } else {
-                _mesa_problem(r300->radeon.glCtx, "unexpected format in emit_cb_offset()");;
-            }
+            _mesa_problem(r300->radeon.glCtx, "unexpected format in emit_cb_offset()");
             break;
     }
 
diff --git a/src/mesa/drivers/dri/r300/r300_state.c b/src/mesa/drivers/dri/r300/r300_state.c
index 8739dcbafb..bdd12c6d22 100644
--- a/src/mesa/drivers/dri/r300/r300_state.c
+++ b/src/mesa/drivers/dri/r300/r300_state.c
@@ -2238,6 +2238,63 @@ void r300UpdateShaderStates(r300ContextPtr rmesa)
 	}
 }
 
+#define EASY_US_OUT_FMT(comps, c0, c1, c2, c3) \
+	(R500_OUT_FMT_##comps | R500_C0_SEL_##c0 | R500_C1_SEL_##c1 | \
+	 R500_C2_SEL_##c2 | R500_C3_SEL_##c3)
+static void r300SetupUsOutputFormat(GLcontext *ctx)
+{
+	r300ContextPtr rmesa = R300_CONTEXT(ctx);
+	uint32_t hw_format;
+
+	switch (radeon_get_colorbuffer(&rmesa->radeon)->base.Format)
+	{
+		case MESA_FORMAT_RGBA5551:
+		case MESA_FORMAT_RGBA8888:
+			hw_format = EASY_US_OUT_FMT(C4_8, A, B, G, R);
+			break;
+		case MESA_FORMAT_RGB565_REV:
+		case MESA_FORMAT_RGBA8888_REV:
+			hw_format = EASY_US_OUT_FMT(C4_8, R, G, B, A);
+			break;
+		case MESA_FORMAT_RGB565:
+		case MESA_FORMAT_ARGB4444:
+		case MESA_FORMAT_ARGB1555:
+		case MESA_FORMAT_XRGB8888:
+		case MESA_FORMAT_ARGB8888:
+			hw_format = EASY_US_OUT_FMT(C4_8, B, G, R, A);
+			break;
+		case MESA_FORMAT_ARGB4444_REV:
+		case MESA_FORMAT_ARGB1555_REV:
+		case MESA_FORMAT_XRGB8888_REV:
+		case MESA_FORMAT_ARGB8888_REV:
+			hw_format = EASY_US_OUT_FMT(C4_8, A, R, G, B);
+			break;
+		case MESA_FORMAT_SRGBA8:
+			hw_format = EASY_US_OUT_FMT(C4_10_GAMMA, A, B, G, R);
+			break;
+		case MESA_FORMAT_SARGB8:
+			hw_format = EASY_US_OUT_FMT(C4_10_GAMMA, B, G, R, A);
+			break;
+		case MESA_FORMAT_SL8:
+			hw_format = EASY_US_OUT_FMT(C4_10_GAMMA, A, A, R, A);
+			break;
+		case MESA_FORMAT_A8:
+			hw_format = EASY_US_OUT_FMT(C4_8, A, A, A, A);
+			break;
+		case MESA_FORMAT_L8:
+		case MESA_FORMAT_I8:
+			hw_format = EASY_US_OUT_FMT(C4_8, A, A, R, A);
+			break;
+		default:
+			assert(!"Unsupported format");
+			break;
+	}
+
+	R300_STATECHANGE(rmesa, us_out_fmt);
+	rmesa->hw.us_out_fmt.cmd[1] = hw_format;
+}
+#undef EASY_US_OUT_FMT
+
 /**
  * Called by Mesa after an internal state update.
  */
@@ -2267,6 +2324,10 @@ static void r300InvalidateState(GLcontext * ctx, GLuint new_state)
 			r300->hw.shade2.cmd[1] &= ~R300_GA_COLOR_CONTROL_PROVOKING_VERTEX_LAST;
 	}
 
+	if (new_state & _NEW_BUFFERS) {
+		r300SetupUsOutputFormat(ctx);
+	}
+
 	r300->radeon.NewGLState |= new_state;
 }
 
-- 
cgit v1.2.3


From b70dcabafce0c1a8a9fbbd84ff196e46b0782ca7 Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Sun, 7 Mar 2010 22:01:56 +0100
Subject: radeon: mark framebuffer as incomplete if renderbuffer format isn't
 supported by hw

---
 src/mesa/drivers/dri/radeon/radeon_fbo.c         | 126 +++++++++++------------
 src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c |   3 -
 2 files changed, 62 insertions(+), 67 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/radeon/radeon_fbo.c b/src/mesa/drivers/dri/radeon/radeon_fbo.c
index 46664a1755..6398605835 100644
--- a/src/mesa/drivers/dri/radeon/radeon_fbo.c
+++ b/src/mesa/drivers/dri/radeon/radeon_fbo.c
@@ -409,82 +409,51 @@ radeon_framebuffer_renderbuffer(GLcontext * ctx,
    radeon_draw_buffer(ctx, fb);
 }
 
-
-/* TODO: According to EXT_fbo spec internal format of texture image
- * once set during glTexImage call, should be preserved when
- * attaching image to renderbuffer. When HW doesn't support
- * rendering to format of attached image, set framebuffer
- * completeness accordingly in radeon_validate_framebuffer (issue #79).
- */
 static GLboolean
 radeon_update_wrapper(GLcontext *ctx, struct radeon_renderbuffer *rrb, 
 		     struct gl_texture_image *texImage)
 {
-	int retry = 0;
-	gl_format texFormat;
-
 	radeon_print(RADEON_TEXTURE, RADEON_TRACE,
-		"%s(%p, rrb %p, texImage %p) \n",
-		__func__, ctx, rrb, texImage);
-
-restart:
-	if (texImage->TexFormat == _dri_texformat_argb8888) {
-		rrb->base.DataType = GL_UNSIGNED_BYTE;
-		DBG("Render to RGBA8 texture OK\n");
+		"%s(%p, rrb %p, texImage %p, texFormat %s) \n",
+		__func__, ctx, rrb, texImage, _mesa_get_format_name(texImage->TexFormat));
+
+	switch (texImage->TexFormat) {
+		case MESA_FORMAT_RGBA8888:
+		case MESA_FORMAT_RGBA8888_REV:
+		case MESA_FORMAT_ARGB8888:
+		case MESA_FORMAT_ARGB8888_REV:
+		case MESA_FORMAT_XRGB8888:
+		case MESA_FORMAT_XRGB8888_REV:
+		case MESA_FORMAT_RGB565:
+		case MESA_FORMAT_RGB565_REV:
+		case MESA_FORMAT_RGBA5551:
+		case MESA_FORMAT_ARGB1555:
+		case MESA_FORMAT_ARGB1555_REV:
+		case MESA_FORMAT_ARGB4444:
+		case MESA_FORMAT_ARGB4444_REV:
+			rrb->base.DataType = GL_UNSIGNED_BYTE;
+			break;
+		case MESA_FORMAT_Z16:
+			rrb->base.DataType = GL_UNSIGNED_SHORT;
+			break;
+		case MESA_FORMAT_X8_Z24:
+			rrb->base.DataType = GL_UNSIGNED_INT;
+			break;
+		case MESA_FORMAT_S8_Z24:
+			rrb->base.DataType = GL_UNSIGNED_INT_24_8_EXT;
+			break;
 	}
-	else if (texImage->TexFormat == _dri_texformat_rgb565) {
-		rrb->base.DataType = GL_UNSIGNED_BYTE;
-		DBG("Render to RGB5 texture OK\n");
-	}
-	else if (texImage->TexFormat == _dri_texformat_argb1555) {
-		rrb->base.DataType = GL_UNSIGNED_BYTE;
-		DBG("Render to ARGB1555 texture OK\n");
-	}
-	else if (texImage->TexFormat == _dri_texformat_argb4444) {
-		rrb->base.DataType = GL_UNSIGNED_BYTE;
-		DBG("Render to ARGB4444 texture OK\n");
-	}
-	else if (texImage->TexFormat == MESA_FORMAT_Z16) {
-		rrb->base.DataType = GL_UNSIGNED_SHORT;
-		DBG("Render to DEPTH16 texture OK\n");
-	}
-	else if (texImage->TexFormat == MESA_FORMAT_S8_Z24) {
-		rrb->base.DataType = GL_UNSIGNED_INT_24_8_EXT;
-		DBG("Render to DEPTH_STENCIL texture OK\n");
-	}
-	else {
-		/* try redoing the FBO */
-		if (retry == 1) {
-			DBG("Render to texture BAD FORMAT %d\n",
-			    texImage->TexFormat);
-			return GL_FALSE;
-		}
-                /* XXX why is the tex format being set here?
-                 * I think this can be removed.
-                 */
-		texImage->TexFormat = radeonChooseTextureFormat(ctx, texImage->InternalFormat, 0,
-								_mesa_get_format_datatype(texImage->TexFormat),
-								1);
-
-		retry++;
-		goto restart;
-	}
-	
-	texFormat = texImage->TexFormat;
-
-	rrb->base.Format = texFormat;
-
-        rrb->cpp = _mesa_get_format_bytes(texFormat);
+		
+	rrb->cpp = _mesa_get_format_bytes(texImage->TexFormat);
 	rrb->pitch = texImage->Width * rrb->cpp;
+	rrb->base.Format = texImage->TexFormat;
 	rrb->base.InternalFormat = texImage->InternalFormat;
-        rrb->base._BaseFormat = _mesa_base_fbo_format(ctx, rrb->base.InternalFormat);
-
+	rrb->base._BaseFormat = _mesa_base_fbo_format(ctx, rrb->base.InternalFormat);
 	rrb->base.Width = texImage->Width;
 	rrb->base.Height = texImage->Height;
-	
 	rrb->base.Delete = radeon_delete_renderbuffer;
 	rrb->base.AllocStorage = radeon_nop_alloc_storage;
-	
+
 	return GL_TRUE;
 }
 
@@ -607,6 +576,35 @@ radeon_finish_render_texture(GLcontext * ctx,
 static void
 radeon_validate_framebuffer(GLcontext *ctx, struct gl_framebuffer *fb)
 {
+	radeonContextPtr radeon = RADEON_CONTEXT(ctx);
+	gl_format mesa_format;
+	int i;
+
+	for (i = -2; i < (GLint) ctx->Const.MaxColorAttachments; i++) {
+		struct gl_renderbuffer_attachment *att;
+		if (i == -2) {
+			att = &fb->Attachment[BUFFER_DEPTH];
+		} else if (i == -1) {
+			att = &fb->Attachment[BUFFER_STENCIL];
+		} else {
+			att = &fb->Attachment[BUFFER_COLOR0 + i];
+		}
+
+		if (att->Type == GL_TEXTURE) {
+			mesa_format = att->Texture->Image[att->CubeMapFace][att->TextureLevel]->TexFormat;
+		} else {
+			/* All renderbuffer formats are renderable, but not sampable */
+			continue;
+		}
+
+		if (!radeon->vtbl.is_format_renderable(mesa_format)){
+			fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED;
+			radeon_print(RADEON_TEXTURE, RADEON_TRACE,
+						"%s: HW doesn't support format %s as output format of attachment %d\n",
+						__FUNCTION__, _mesa_get_format_name(mesa_format), i);
+			return;
+		}
+	}
 }
 
 void radeon_fbo_init(struct radeon_context *radeon)
diff --git a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
index c6cc417dd6..78c5f5dd57 100644
--- a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
+++ b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
@@ -468,12 +468,9 @@ static void migrate_image_to_miptree(radeon_mipmap_tree *mt,
 
 		radeon_mipmap_level *srclvl = &image->mt->levels[image->mtlevel];
 
-		/* TODO: bring back these assertions once the FBOs are fixed */
-#if 0
 		assert(image->mtlevel == level);
 		assert(srclvl->size == dstlvl->size);
 		assert(srclvl->rowstride == dstlvl->rowstride);
-#endif
 
 		radeon_bo_map(image->mt->bo, GL_FALSE);
 
-- 
cgit v1.2.3


From eeaf1e0519912b2ca3a8bce56c35548f9e0b73ca Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Tue, 9 Mar 2010 23:13:19 +0100
Subject: r300: don't crash if there's no colorbuffer

---
 src/mesa/drivers/dri/r300/r300_state.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r300/r300_state.c b/src/mesa/drivers/dri/r300/r300_state.c
index bdd12c6d22..8748941241 100644
--- a/src/mesa/drivers/dri/r300/r300_state.c
+++ b/src/mesa/drivers/dri/r300/r300_state.c
@@ -2245,8 +2245,13 @@ static void r300SetupUsOutputFormat(GLcontext *ctx)
 {
 	r300ContextPtr rmesa = R300_CONTEXT(ctx);
 	uint32_t hw_format;
+	struct radeon_renderbuffer *rrb = radeon_get_colorbuffer(&rmesa->radeon);
 
-	switch (radeon_get_colorbuffer(&rmesa->radeon)->base.Format)
+	if (!rrb) {
+		return;
+	}
+	
+	switch (rrb->base.Format)
 	{
 		case MESA_FORMAT_RGBA5551:
 		case MESA_FORMAT_RGBA8888:
-- 
cgit v1.2.3


From 7f6d2754d586545ab6c970acffdd897294879039 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Mon, 8 Mar 2010 16:08:33 -0800
Subject: i965: Fix up VP constbuf leak on program delete.

---
 src/mesa/drivers/dri/i965/brw_program.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_program.c b/src/mesa/drivers/dri/i965/brw_program.c
index c78f7b38ae..1fd957b3ad 100644
--- a/src/mesa/drivers/dri/i965/brw_program.c
+++ b/src/mesa/drivers/dri/i965/brw_program.c
@@ -95,9 +95,17 @@ static void brwDeleteProgram( GLcontext *ctx,
 			      struct gl_program *prog )
 {
    if (prog->Target == GL_FRAGMENT_PROGRAM_ARB) {
-      struct gl_fragment_program *fprog = (struct gl_fragment_program *) prog;
-      struct brw_fragment_program *brw_fprog = brw_fragment_program(fprog);
-      dri_bo_unreference(brw_fprog->const_buffer);
+      struct gl_fragment_program *fp = (struct gl_fragment_program *) prog;
+      struct brw_fragment_program *brw_fp = brw_fragment_program(fp);
+
+      dri_bo_unreference(brw_fp->const_buffer);
+   }
+
+   if (prog->Target == GL_VERTEX_PROGRAM_ARB) {
+      struct gl_vertex_program *vp = (struct gl_vertex_program *) prog;
+      struct brw_vertex_program *brw_vp = brw_vertex_program(vp);
+
+      dri_bo_unreference(brw_vp->const_buffer);
    }
 
    _mesa_delete_program( ctx, prog );
-- 
cgit v1.2.3


From f6f547d87ea68f44c50a0b0231b7360ca94b2975 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Tue, 9 Mar 2010 09:56:42 -0800
Subject: i965: Fix nested loops in the VS.

We were patching up all the break and continues between the start of
our loop and the end of our loop, even if they were breaks/continues
for an inner loop.  Avoiding patching already patched breaks/continues
fixes piglit glsl-vs-loop-nested.
---
 src/mesa/drivers/dri/i965/brw_vs_emit.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_vs_emit.c b/src/mesa/drivers/dri/i965/brw_vs_emit.c
index a7c4b58972..a48804a660 100644
--- a/src/mesa/drivers/dri/i965/brw_vs_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_vs_emit.c
@@ -1717,11 +1717,13 @@ void brw_vs_emit(struct brw_vs_compile *c )
             /* patch all the BREAK/CONT instructions from last BEGINLOOP */
             while (inst0 > loop_inst[loop_depth]) {
                inst0--;
-               if (inst0->header.opcode == BRW_OPCODE_BREAK) {
+               if (inst0->header.opcode == BRW_OPCODE_BREAK &&
+		   inst0->bits3.if_else.jump_count == 0) {
                   inst0->bits3.if_else.jump_count = br * (inst1 - inst0 + 1);
                   inst0->bits3.if_else.pop_count = 0;
                }
-               else if (inst0->header.opcode == BRW_OPCODE_CONTINUE) {
+               else if (inst0->header.opcode == BRW_OPCODE_CONTINUE &&
+			inst0->bits3.if_else.jump_count == 0) {
                   inst0->bits3.if_else.jump_count = br * (inst1 - inst0);
                   inst0->bits3.if_else.pop_count = 0;
                }
-- 
cgit v1.2.3


From 280abdacf900d591ef909cf697f0c5679389c3f6 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Tue, 9 Mar 2010 11:31:28 -0800
Subject: i965: Print the offsets for WHILE and BREAK in disasm.

---
 src/mesa/drivers/dri/i965/brw_disasm.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_disasm.c b/src/mesa/drivers/dri/i965/brw_disasm.c
index a8f6b993ac..54699cf8d3 100644
--- a/src/mesa/drivers/dri/i965/brw_disasm.c
+++ b/src/mesa/drivers/dri/i965/brw_disasm.c
@@ -74,9 +74,9 @@ struct {
     [BRW_OPCODE_JMPI] = { .name = "jmpi", .nsrc = 1, .ndst = 0 },
     [BRW_OPCODE_IF] = { .name = "if", .nsrc = 2, .ndst = 0 },
     [BRW_OPCODE_IFF] = { .name = "iff", .nsrc = 1, .ndst = 01 },
-    [BRW_OPCODE_WHILE] = { .name = "while", .nsrc = 1, .ndst = 0 },
+    [BRW_OPCODE_WHILE] = { .name = "while", .nsrc = 2, .ndst = 0 },
     [BRW_OPCODE_ELSE] = { .name = "else", .nsrc = 2, .ndst = 0 },
-    [BRW_OPCODE_BREAK] = { .name = "break", .nsrc = 1, .ndst = 0 },
+    [BRW_OPCODE_BREAK] = { .name = "break", .nsrc = 2, .ndst = 0 },
     [BRW_OPCODE_CONTINUE] = { .name = "cont", .nsrc = 1, .ndst = 0 },
     [BRW_OPCODE_HALT] = { .name = "halt", .nsrc = 1, .ndst = 0 },
     [BRW_OPCODE_MSAVE] = { .name = "msave", .nsrc = 1, .ndst = 1 },
-- 
cgit v1.2.3


From 6b194dab6b4d9f12cdd54c699b23c0d3420a49c2 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Tue, 9 Mar 2010 11:56:14 -0800
Subject: i965: Unalias all GLSL source regs from the destination regs used.

We were doing it ad-hoc before, as instructions with potential
aliasing problems were identified.  But thanks to swizzling basically
anything can have aliasing, so just do it generally at source reg
setup time.  This is somewhat inefficient, because sometimes an
operation doesn't need unaliasing protection if the swizzling is safe,
but the unaliasing before didn't cover those cases either.

Fixes piglit glsl-fs-loop.
---
 src/mesa/drivers/dri/i965/brw_wm_glsl.c | 138 ++++++--------------------------
 1 file changed, 25 insertions(+), 113 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_wm_glsl.c b/src/mesa/drivers/dri/i965/brw_wm_glsl.c
index 562608e2ec..13306accda 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_glsl.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_glsl.c
@@ -614,112 +614,6 @@ static void invoke_subroutine( struct brw_wm_compile *c,
     }
 }
 
-/* Workaround for using brw_wm_emit.c's emit functions, which expect
- * destination regs to be uniquely written.  Moves arguments out to
- * temporaries as necessary for instructions which use their destination as
- * a temporary.
- */
-static void
-unalias3(struct brw_wm_compile *c,
-	 void (*func)(struct brw_compile *c,
-		      const struct brw_reg *dst,
-		      GLuint mask,
-		      const struct brw_reg *arg0,
-		      const struct brw_reg *arg1,
-		      const struct brw_reg *arg2),
-	 const struct brw_reg *dst,
-	 GLuint mask,
-	 const struct brw_reg *arg0,
-	 const struct brw_reg *arg1,
-	 const struct brw_reg *arg2)
-{
-    struct brw_compile *p = &c->func;
-    struct brw_reg tmp_arg0[4], tmp_arg1[4], tmp_arg2[4];
-    int i, j;
-    int mark = mark_tmps(c);
-
-    for (j = 0; j < 4; j++) {
-	tmp_arg0[j] = arg0[j];
-	tmp_arg1[j] = arg1[j];
-	tmp_arg2[j] = arg2[j];
-    }
-
-    for (i = 0; i < 4; i++) {
-	if (mask & (1<<i)) {
-	    for (j = 0; j < 4; j++) {
-		if (arg0[j].file == dst[i].file &&
-		    dst[i].nr == arg0[j].nr) {
-		    tmp_arg0[j] = alloc_tmp(c);
-		    brw_MOV(p, tmp_arg0[j], arg0[j]);
-		}
-		if (arg1[j].file == dst[i].file &&
-		    dst[i].nr == arg1[j].nr) {
-		    tmp_arg1[j] = alloc_tmp(c);
-		    brw_MOV(p, tmp_arg1[j], arg1[j]);
-		}
-		if (arg2[j].file == dst[i].file &&
-		    dst[i].nr == arg2[j].nr) {
-		    tmp_arg2[j] = alloc_tmp(c);
-		    brw_MOV(p, tmp_arg2[j], arg2[j]);
-		}
-	    }
-	}
-    }
-
-    func(p, dst, mask, tmp_arg0, tmp_arg1, tmp_arg2);
-
-    release_tmps(c, mark);
-}
-
-/* Workaround for using brw_wm_emit.c's emit functions, which expect
- * destination regs to be uniquely written.  Moves arguments out to
- * temporaries as necessary for instructions which use their destination as
- * a temporary.
- */
-static void
-unalias2(struct brw_wm_compile *c,
-	 void (*func)(struct brw_compile *c,
-		      const struct brw_reg *dst,
-		      GLuint mask,
-		      const struct brw_reg *arg0,
-		      const struct brw_reg *arg1),
-	 const struct brw_reg *dst,
-	 GLuint mask,
-	 const struct brw_reg *arg0,
-	 const struct brw_reg *arg1)
-{
-    struct brw_compile *p = &c->func;
-    struct brw_reg tmp_arg0[4], tmp_arg1[4];
-    int i, j;
-    int mark = mark_tmps(c);
-
-    for (j = 0; j < 4; j++) {
-	tmp_arg0[j] = arg0[j];
-	tmp_arg1[j] = arg1[j];
-    }
-
-    for (i = 0; i < 4; i++) {
-	if (mask & (1<<i)) {
-	    for (j = 0; j < 4; j++) {
-		if (arg0[j].file == dst[i].file &&
-		    dst[i].nr == arg0[j].nr) {
-		    tmp_arg0[j] = alloc_tmp(c);
-		    brw_MOV(p, tmp_arg0[j], arg0[j]);
-		}
-		if (arg1[j].file == dst[i].file &&
-		    dst[i].nr == arg1[j].nr) {
-		    tmp_arg1[j] = alloc_tmp(c);
-		    brw_MOV(p, tmp_arg1[j], arg1[j]);
-		}
-	    }
-	}
-    }
-
-    func(p, dst, mask, tmp_arg0, tmp_arg1);
-
-    release_tmps(c, mark);
-}
-
 static void emit_arl(struct brw_wm_compile *c,
                      const struct prog_instruction *inst)
 {
@@ -1813,14 +1707,29 @@ static void
 get_argument_regs(struct brw_wm_compile *c,
 		  const struct prog_instruction *inst,
 		  int index,
+		  struct brw_reg *dst,
 		  struct brw_reg *regs,
 		  int mask)
 {
-    int i;
+    struct brw_compile *p = &c->func;
+    int i, j;
 
     for (i = 0; i < 4; i++) {
-	if (mask & (1 << i))
+	if (mask & (1 << i)) {
 	    regs[i] = get_src_reg(c, inst, index, i);
+
+	    /* Unalias destination registers from our sources. */
+	    if (regs[i].file == BRW_GENERAL_REGISTER_FILE) {
+	       for (j = 0; j < 4; j++) {
+		   if (memcmp(&regs[i], &dst[j], sizeof(regs[0])) == 0) {
+		       struct brw_reg tmp = alloc_tmp(c);
+		       brw_MOV(p, tmp, regs[i]);
+		       regs[i] = tmp;
+		       break;
+		   }
+	       }
+	    }
+	}
     }
 }
 
@@ -1845,6 +1754,7 @@ static void brw_wm_emit_glsl(struct brw_context *brw, struct brw_wm_compile *c)
 	int dst_flags;
 	struct brw_reg args[3][4], dst[4];
 	int j;
+	int mark = mark_tmps( c );
 
         c->cur_inst = i;
 
@@ -1866,7 +1776,7 @@ static void brw_wm_emit_glsl(struct brw_context *brw, struct brw_wm_compile *c)
 	   }
 	}
 	for (j = 0; j < brw_wm_nr_args(inst->Opcode); j++)
-	    get_argument_regs(c, inst, j, args[j], WRITEMASK_XYZW);
+	    get_argument_regs(c, inst, j, dst, args[j], WRITEMASK_XYZW);
 
 	dst_flags = inst->DstReg.WriteMask;
 	if (inst->SaturateMode == SATURATE_ZERO_ONE)
@@ -1920,8 +1830,7 @@ static void brw_wm_emit_glsl(struct brw_context *brw, struct brw_wm_compile *c)
 		emit_alu1(p, brw_RNDD, dst, dst_flags, args[0]);
 		break;
 	    case OPCODE_LRP:
-		unalias3(c, emit_lrp,
-			 dst, dst_flags, args[0], args[1], args[2]);
+		emit_lrp(p, dst, dst_flags, args[0], args[1], args[2]);
 		break;
 	    case OPCODE_TRUNC:
 		emit_alu1(p, brw_RNDZ, dst, dst_flags, args[0]);
@@ -1961,10 +1870,10 @@ static void brw_wm_emit_glsl(struct brw_context *brw, struct brw_wm_compile *c)
 		emit_math1(c, BRW_MATH_FUNCTION_LOG, dst, dst_flags, args[0]);
 		break;
 	    case OPCODE_MIN:	
-		unalias2(c, emit_min, dst, dst_flags, args[0], args[1]);
+		emit_min(p, dst, dst_flags, args[0], args[1]);
 		break;
 	    case OPCODE_MAX:	
-		unalias2(c, emit_max, dst, dst_flags, args[0], args[1]);
+		emit_max(p, dst, dst_flags, args[0], args[1]);
 		break;
 	    case OPCODE_DDX:
 	    case OPCODE_DDY:
@@ -2119,6 +2028,9 @@ static void brw_wm_emit_glsl(struct brw_context *brw, struct brw_wm_compile *c)
 			inst->Opcode);
 	}
 
+	/* Release temporaries containing any unaliased source regs. */
+	release_tmps( c, mark );
+
 	if (inst->CondUpdate)
 	    brw_set_predicate_control(p, BRW_PREDICATE_NORMAL);
 	else
-- 
cgit v1.2.3


From a81836ee2fe5092d695b717addf8cec91f569777 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Tue, 9 Mar 2010 14:22:51 -0800
Subject: i965: Fix ENDLOOP to only patch up this loop's BREAK and CONT.

Corresponds to d225a25e21a24508aea3b877c78beb35502e942d and fixes
piglit glsl-fs-loop-nested.  Bug #25173.
---
 src/mesa/drivers/dri/i965/brw_wm_glsl.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_wm_glsl.c b/src/mesa/drivers/dri/i965/brw_wm_glsl.c
index 13306accda..ea3c2405af 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_glsl.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_glsl.c
@@ -2012,11 +2012,13 @@ static void brw_wm_emit_glsl(struct brw_context *brw, struct brw_wm_compile *c)
                   /* patch all the BREAK/CONT instructions from last BGNLOOP */
                   while (inst0 > loop_inst[loop_depth]) {
                      inst0--;
-                     if (inst0->header.opcode == BRW_OPCODE_BREAK) {
+                     if (inst0->header.opcode == BRW_OPCODE_BREAK &&
+			 inst0->bits3.if_else.jump_count == 0) {
 			inst0->bits3.if_else.jump_count = br * (inst1 - inst0 + 1);
 			inst0->bits3.if_else.pop_count = 0;
                      }
-                     else if (inst0->header.opcode == BRW_OPCODE_CONTINUE) {
+                     else if (inst0->header.opcode == BRW_OPCODE_CONTINUE &&
+			      inst0->bits3.if_else.jump_count == 0) {
                         inst0->bits3.if_else.jump_count = br * (inst1 - inst0);
                         inst0->bits3.if_else.pop_count = 0;
                      }
-- 
cgit v1.2.3


From 3e38dbe3d3371f0a37dd35582301ae2b1507e5d2 Mon Sep 17 00:00:00 2001
From: Keith Whitwell <keithw@vmware.com>
Date: Wed, 10 Mar 2010 09:22:02 +0000
Subject: gallium: plumb winsys-drawable-handle through to state tracker

The state trackers need this value so that they can supply it
as the "void *" argument to flush_frontbuffer.

Fixes single-buffer rendering.
---
 src/gallium/state_trackers/dri/dri_context.c          | 12 +++++++++---
 src/gallium/state_trackers/egl/common/egl_g3d.c       |  9 +++++++--
 src/gallium/state_trackers/egl/common/st_public_tmp.h |  2 +-
 src/gallium/state_trackers/glx/xlib/xm_api.c          |  5 +++--
 src/gallium/state_trackers/vega/vg_tracker.c          | 10 +++++++++-
 src/gallium/state_trackers/vega/vg_tracker.h          |  3 ++-
 src/gallium/state_trackers/wgl/stw_context.c          |  6 +++---
 src/mesa/state_tracker/st_context.c                   |  8 ++++++--
 src/mesa/state_tracker/st_public.h                    |  3 ++-
 9 files changed, 42 insertions(+), 16 deletions(-)

(limited to 'src/mesa')

diff --git a/src/gallium/state_trackers/dri/dri_context.c b/src/gallium/state_trackers/dri/dri_context.c
index 908cef454e..2f991c39e3 100644
--- a/src/gallium/state_trackers/dri/dri_context.c
+++ b/src/gallium/state_trackers/dri/dri_context.c
@@ -128,7 +128,7 @@ dri_unbind_context(__DRIcontext * cPriv)
       if (--ctx->bind_count == 0) {
 	 if (ctx->st && ctx->st == st_get_current()) {
 	    st_flush(ctx->st, PIPE_FLUSH_RENDER_CACHE, NULL);
-	    st_make_current(NULL, NULL, NULL);
+	    st_make_current(NULL, NULL, NULL, NULL);
 	 }
       }
    }
@@ -161,7 +161,13 @@ dri_make_current(__DRIcontext * cPriv,
 	 ctx->r_stamp = driReadPriv->lastStamp - 1;
       }
 
-      st_make_current(ctx->st, draw->stfb, read->stfb);
+      /* DRI co-state tracker currently overrides flush_frontbuffer.
+       * When this is fixed, will need to pass the drawable in the
+       * fourth parameter here so that when Mesa calls
+       * flush_frontbuffer directly (in front-buffer rendering), it
+       * will have access to the drawable argument:
+       */
+      st_make_current(ctx->st, draw->stfb, read->stfb, NULL);
 
       if (__dri1_api_hooks) {
 	 dri1_update_drawables(ctx, draw, read);
@@ -170,7 +176,7 @@ dri_make_current(__DRIcontext * cPriv,
 			   ctx->pipe->priv);
       }
    } else {
-      st_make_current(NULL, NULL, NULL);
+      st_make_current(NULL, NULL, NULL, NULL);
    }
 
    return GL_TRUE;
diff --git a/src/gallium/state_trackers/egl/common/egl_g3d.c b/src/gallium/state_trackers/egl/common/egl_g3d.c
index f54c51a668..e4972d493d 100644
--- a/src/gallium/state_trackers/egl/common/egl_g3d.c
+++ b/src/gallium/state_trackers/egl/common/egl_g3d.c
@@ -892,8 +892,13 @@ egl_g3d_make_current(_EGLDriver *drv, _EGLDisplay *dpy,
    if (gctx) {
       ok = egl_g3d_realloc_context(dpy, &gctx->base);
       if (ok) {
+         /* XXX: need to pass the winsys argument for
+          * flush_frontbuffer in the fourth parameter here:
+          */
          ok = gctx->stapi->st_make_current(gctx->st_ctx,
-               gctx->draw.st_fb, gctx->read.st_fb);
+                                           gctx->draw.st_fb,
+                                           gctx->read.st_fb,
+                                           NULL);
          if (ok) {
             egl_g3d_validate_context(dpy, &gctx->base);
             if (gdraw->base.Type == EGL_WINDOW_BIT) {
@@ -905,7 +910,7 @@ egl_g3d_make_current(_EGLDriver *drv, _EGLDisplay *dpy,
       }
    }
    else if (old_gctx) {
-      ok = old_gctx->stapi->st_make_current(NULL, NULL, NULL);
+      ok = old_gctx->stapi->st_make_current(NULL, NULL, NULL, NULL);
       old_gctx->base.WindowRenderBuffer = EGL_NONE;
    }
 
diff --git a/src/gallium/state_trackers/egl/common/st_public_tmp.h b/src/gallium/state_trackers/egl/common/st_public_tmp.h
index 507a0ec402..562dd68c15 100644
--- a/src/gallium/state_trackers/egl/common/st_public_tmp.h
+++ b/src/gallium/state_trackers/egl/common/st_public_tmp.h
@@ -9,7 +9,7 @@ ST_PUBLIC(st_get_framebuffer_surface,     int,                       struct st_f
 ST_PUBLIC(st_get_framebuffer_texture,     int,                       struct st_framebuffer *stfb, uint surfIndex, struct pipe_texture **texture)
 ST_PUBLIC(st_framebuffer_private,         void *,                    struct st_framebuffer *stfb)
 ST_PUBLIC(st_unreference_framebuffer,     void,                      struct st_framebuffer *stfb)
-ST_PUBLIC(st_make_current,                GLboolean,                 struct st_context *st, struct st_framebuffer *draw, struct st_framebuffer *read)
+ST_PUBLIC(st_make_current,                GLboolean,                 struct st_context *st, struct st_framebuffer *draw, struct st_framebuffer *read, void *winsys_drawable_handle)
 ST_PUBLIC(st_get_current,                 struct st_context *,       void)
 ST_PUBLIC(st_flush,                       void,                      struct st_context *st, uint pipeFlushFlags, struct pipe_fence_handle **fence)
 ST_PUBLIC(st_finish,                      void,                      struct st_context *st)
diff --git a/src/gallium/state_trackers/glx/xlib/xm_api.c b/src/gallium/state_trackers/glx/xlib/xm_api.c
index 568bc6e962..f4d7133d2f 100644
--- a/src/gallium/state_trackers/glx/xlib/xm_api.c
+++ b/src/gallium/state_trackers/glx/xlib/xm_api.c
@@ -1020,7 +1020,8 @@ GLboolean XMesaMakeCurrent2( XMesaContext c, XMesaBuffer drawBuffer,
       c->xm_buffer = drawBuffer;
       c->xm_read_buffer = readBuffer;
 
-      st_make_current(c->st, drawBuffer->stfb, readBuffer->stfb);
+      st_make_current(c->st, drawBuffer->stfb, readBuffer->stfb, 
+                      &drawBuffer->ws);
 
       xmesa_check_and_update_buffer_size(c, drawBuffer);
       if (readBuffer != drawBuffer)
@@ -1031,7 +1032,7 @@ GLboolean XMesaMakeCurrent2( XMesaContext c, XMesaBuffer drawBuffer,
    }
    else {
       /* Detach */
-      st_make_current( NULL, NULL, NULL );
+      st_make_current( NULL, NULL, NULL, NULL );
 
    }
    return GL_TRUE;
diff --git a/src/gallium/state_trackers/vega/vg_tracker.c b/src/gallium/state_trackers/vega/vg_tracker.c
index 57d3baad7f..a002e50faf 100644
--- a/src/gallium/state_trackers/vega/vg_tracker.c
+++ b/src/gallium/state_trackers/vega/vg_tracker.c
@@ -376,11 +376,19 @@ void st_unreference_framebuffer(struct st_framebuffer *stfb)
 
 boolean st_make_current(struct vg_context *st,
                         struct st_framebuffer *draw,
-                        struct st_framebuffer *read)
+                        struct st_framebuffer *read,
+                        void *winsys_drawable_handle)
 {
    vg_set_current_context(st);
    if (st) {
       st->draw_buffer = draw;
+
+      /* VG state tracker doesn't seem to do front-buffer rendering
+       * (no calls to flush_frontbuffer).  If it ever did start doing
+       * that, it would need to pass this value down in the
+       * flush_frontbuffer call:
+       */
+      st->pipe->priv = winsys_drawable_handle;
    }
    return VG_TRUE;
 }
diff --git a/src/gallium/state_trackers/vega/vg_tracker.h b/src/gallium/state_trackers/vega/vg_tracker.h
index c1196954a7..165a6b7a33 100644
--- a/src/gallium/state_trackers/vega/vg_tracker.h
+++ b/src/gallium/state_trackers/vega/vg_tracker.h
@@ -101,7 +101,8 @@ void st_unreference_framebuffer(struct st_framebuffer *stfb);
 PUBLIC
 boolean st_make_current(struct vg_context *st,
                         struct st_framebuffer *draw,
-                        struct st_framebuffer *read);
+                        struct st_framebuffer *read,
+                        void *winsys_drawable_handle);
 
 PUBLIC
 struct vg_context *st_get_current(void);
diff --git a/src/gallium/state_trackers/wgl/stw_context.c b/src/gallium/state_trackers/wgl/stw_context.c
index 05ccd5febc..866f485a40 100644
--- a/src/gallium/state_trackers/wgl/stw_context.c
+++ b/src/gallium/state_trackers/wgl/stw_context.c
@@ -226,7 +226,7 @@ DrvDeleteContext(
       
       /* Unbind current if deleting current context. */
       if (curctx == ctx)
-         st_make_current( NULL, NULL, NULL );
+         st_make_current( NULL, NULL, NULL, NULL );
 
       st_destroy_context(ctx->st);
       FREE(ctx);
@@ -317,7 +317,7 @@ stw_make_current(
    }
 
    if (hdc == NULL || dhglrc == 0) {
-      return st_make_current( NULL, NULL, NULL );
+      return st_make_current( NULL, NULL, NULL, NULL );
    }
 
    pipe_mutex_lock( stw_dev->ctx_mutex ); 
@@ -352,7 +352,7 @@ stw_make_current(
    /* pass to stw_flush_frontbuffer as context_private */
    ctx->st->pipe->priv = hdc;
    
-   if(!st_make_current( ctx->st, fb->stfb, fb->stfb ))
+   if(!st_make_current( ctx->st, fb->stfb, fb->stfb, hdc ))
       goto fail;
 
 success:
diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c
index 0358a70726..09f891d691 100644
--- a/src/mesa/state_tracker/st_context.c
+++ b/src/mesa/state_tracker/st_context.c
@@ -272,7 +272,8 @@ void st_destroy_context( struct st_context *st )
 GLboolean
 st_make_current(struct st_context *st,
                 struct st_framebuffer *draw,
-                struct st_framebuffer *read)
+                struct st_framebuffer *read,
+                void *winsys_drawable_handle )
 {
    /* Call this periodically to detect when the user has begun using
     * GL rendering from multiple threads.
@@ -280,10 +281,13 @@ st_make_current(struct st_context *st,
    _glapi_check_multithread();
 
    if (st) {
-      if (!_mesa_make_current(st->ctx, &draw->Base, &read->Base))
+      if (!_mesa_make_current(st->ctx, &draw->Base, &read->Base)) {
+         st->pipe->priv = NULL;
          return GL_FALSE;
+      }
 
       _mesa_check_init_viewport(st->ctx, draw->InitWidth, draw->InitHeight);
+      st->pipe->priv = winsys_drawable_handle;
 
       return GL_TRUE;
    }
diff --git a/src/mesa/state_tracker/st_public.h b/src/mesa/state_tracker/st_public.h
index 0824356cec..4b40d6d044 100644
--- a/src/mesa/state_tracker/st_public.h
+++ b/src/mesa/state_tracker/st_public.h
@@ -105,7 +105,8 @@ void st_unreference_framebuffer( struct st_framebuffer *stfb );
 PUBLIC
 GLboolean st_make_current(struct st_context *st,
                           struct st_framebuffer *draw,
-                          struct st_framebuffer *read);
+                          struct st_framebuffer *read,
+                          void *winsys_drawable_handle);
 
 PUBLIC
 struct st_context *st_get_current(void);
-- 
cgit v1.2.3


From e4848d21e8f384f4157076d5e7c7c9d38da6598e Mon Sep 17 00:00:00 2001
From: Chia-I Wu <olv@lunarg.com>
Date: Wed, 10 Mar 2010 22:20:15 +0800
Subject: gallium: Do not mix winsys-drawable-handle and context-private.

update_buffer should be called with context-private, not
winsys-drawable-handle.
---
 src/gallium/include/pipe/p_screen.h          |  5 ++++-
 src/gallium/state_trackers/vega/vg_tracker.c | 10 +---------
 src/mesa/state_tracker/st_cb_flush.c         |  2 +-
 src/mesa/state_tracker/st_context.c          |  2 +-
 src/mesa/state_tracker/st_context.h          |  1 +
 5 files changed, 8 insertions(+), 12 deletions(-)

(limited to 'src/mesa')

diff --git a/src/gallium/include/pipe/p_screen.h b/src/gallium/include/pipe/p_screen.h
index 690455f722..b771bfe85e 100644
--- a/src/gallium/include/pipe/p_screen.h
+++ b/src/gallium/include/pipe/p_screen.h
@@ -265,6 +265,7 @@ struct pipe_screen {
 
    /**
     * Do any special operations to ensure buffer size is correct
+    * \param context_private  the private data of the calling context
     */
    void (*update_buffer)( struct pipe_screen *ws,
                           void *context_private );
@@ -272,10 +273,12 @@ struct pipe_screen {
    /**
     * Do any special operations to ensure frontbuffer contents are
     * displayed, eg copy fake frontbuffer.
+    * \param winsys_drawable_handle  an opaque handle that the calling context
+    *                                gets out-of-band
     */
    void (*flush_frontbuffer)( struct pipe_screen *screen,
                               struct pipe_surface *surf,
-                              void *context_private );
+                              void *winsys_drawable_handle );
 
 
 
diff --git a/src/gallium/state_trackers/vega/vg_tracker.c b/src/gallium/state_trackers/vega/vg_tracker.c
index a002e50faf..ea5c2ce41f 100644
--- a/src/gallium/state_trackers/vega/vg_tracker.c
+++ b/src/gallium/state_trackers/vega/vg_tracker.c
@@ -380,16 +380,8 @@ boolean st_make_current(struct vg_context *st,
                         void *winsys_drawable_handle)
 {
    vg_set_current_context(st);
-   if (st) {
+   if (st)
       st->draw_buffer = draw;
-
-      /* VG state tracker doesn't seem to do front-buffer rendering
-       * (no calls to flush_frontbuffer).  If it ever did start doing
-       * that, it would need to pass this value down in the
-       * flush_frontbuffer call:
-       */
-      st->pipe->priv = winsys_drawable_handle;
-   }
    return VG_TRUE;
 }
 
diff --git a/src/mesa/state_tracker/st_cb_flush.c b/src/mesa/state_tracker/st_cb_flush.c
index 1329f807bc..28a384ba49 100644
--- a/src/mesa/state_tracker/st_cb_flush.c
+++ b/src/mesa/state_tracker/st_cb_flush.c
@@ -79,7 +79,7 @@ display_front_buffer(struct st_context *st)
       /* Hook for copying "fake" frontbuffer if necessary:
        */
       st->pipe->screen->flush_frontbuffer( st->pipe->screen, front_surf,
-                                           st->pipe->priv );
+                                           st->winsys_drawable_handle );
 
       /*
         st->frontbuffer_status = FRONT_STATUS_UNDEFINED;
diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c
index 09f891d691..ca6d4dfb06 100644
--- a/src/mesa/state_tracker/st_context.c
+++ b/src/mesa/state_tracker/st_context.c
@@ -287,7 +287,7 @@ st_make_current(struct st_context *st,
       }
 
       _mesa_check_init_viewport(st->ctx, draw->InitWidth, draw->InitHeight);
-      st->pipe->priv = winsys_drawable_handle;
+      st->winsys_drawable_handle = winsys_drawable_handle;
 
       return GL_TRUE;
    }
diff --git a/src/mesa/state_tracker/st_context.h b/src/mesa/state_tracker/st_context.h
index 6622361a7e..e2d34fb3d1 100644
--- a/src/mesa/state_tracker/st_context.h
+++ b/src/mesa/state_tracker/st_context.h
@@ -185,6 +185,7 @@ struct st_context
    struct cso_context *cso_context;
 
    int force_msaa;
+   void *winsys_drawable_handle;
 };
 
 
-- 
cgit v1.2.3


From 58985c36be85c668d059165d8282f8c8e4c7a380 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Sat, 6 Mar 2010 21:57:47 +0200
Subject: glapi: functions for extensions table similar to static table

---
 src/mesa/glapi/glapi_getproc.c | 69 ++++++++++++++++++++++++++++++------------
 1 file changed, 50 insertions(+), 19 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glapi_getproc.c b/src/mesa/glapi/glapi_getproc.c
index 46b466920b..0d9358ce41 100644
--- a/src/mesa/glapi/glapi_getproc.c
+++ b/src/mesa/glapi/glapi_getproc.c
@@ -199,6 +199,45 @@ static struct _glapi_function ExtEntryTable[MAX_EXTENSION_FUNCS];
 static GLuint NumExtEntryPoints = 0;
 
 
+static GLint
+get_extension_proc_offset(const char *funcName)
+{
+   GLuint i;
+   for (i = 0; i < NumExtEntryPoints; i++) {
+      if (strcmp(ExtEntryTable[i].name, funcName) == 0) {
+         return ExtEntryTable[i].dispatch_offset;
+      }
+   }
+   return -1;
+}
+
+
+static _glapi_proc
+get_extension_proc_address(const char *funcName)
+{
+   GLuint i;
+   for (i = 0; i < NumExtEntryPoints; i++) {
+      if (strcmp(ExtEntryTable[i].name, funcName) == 0) {
+         return ExtEntryTable[i].dispatch_stub;
+      }
+   }
+   return NULL;
+}
+
+
+static const char *
+get_extension_proc_name(GLuint offset)
+{
+   GLuint i;
+   for (i = 0; i < NumExtEntryPoints; i++) {
+      if (ExtEntryTable[i].dispatch_offset == offset) {
+         return ExtEntryTable[i].name;
+      }
+   }
+   return NULL;
+}
+
+
 /**
  * strdup() is actually not a standard ANSI C or POSIX routine.
  * Irix will not define it if ANSI mode is in effect.
@@ -399,13 +438,13 @@ _glapi_add_dispatch( const char * const * function_names,
 PUBLIC GLint
 _glapi_get_proc_offset(const char *funcName)
 {
+   GLint offset;
+
    /* search extension functions first */
-   GLuint i;
-   for (i = 0; i < NumExtEntryPoints; i++) {
-      if (strcmp(ExtEntryTable[i].name, funcName) == 0) {
-         return ExtEntryTable[i].dispatch_offset;
-      }
-   }
+   offset = get_extension_proc_offset(funcName);
+   if (offset >= 0)
+      return offset;
+
    /* search static functions */
    return get_static_proc_offset(funcName);
 }
@@ -420,8 +459,8 @@ _glapi_get_proc_offset(const char *funcName)
 PUBLIC _glapi_proc
 _glapi_get_proc_address(const char *funcName)
 {
+   _glapi_proc func;
    struct _glapi_function * entry;
-   GLuint i;
 
 #ifdef MANGLE
    /* skip the prefix on the name */
@@ -433,11 +472,9 @@ _glapi_get_proc_address(const char *funcName)
 #endif
 
    /* search extension functions first */
-   for (i = 0; i < NumExtEntryPoints; i++) {
-      if (strcmp(ExtEntryTable[i].name, funcName) == 0) {
-         return ExtEntryTable[i].dispatch_stub;
-      }
-   }
+   func = get_extension_proc_address(funcName);
+   if (func)
+      return func;
 
 #if !defined( XFree86Server )
    /* search static functions */
@@ -461,7 +498,6 @@ _glapi_get_proc_address(const char *funcName)
 const char *
 _glapi_get_proc_name(GLuint offset)
 {
-   GLuint i;
    const char * n;
 
    /* search built-in functions */
@@ -471,12 +507,7 @@ _glapi_get_proc_name(GLuint offset)
    }
 
    /* search added extension functions */
-   for (i = 0; i < NumExtEntryPoints; i++) {
-      if (ExtEntryTable[i].dispatch_offset == offset) {
-         return ExtEntryTable[i].name;
-      }
-   }
-   return NULL;
+   return get_extension_proc_name(offset);
 }
 
 
-- 
cgit v1.2.3


From 5b2340c493cdf8d776e717b00acf0a8002858976 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Sun, 7 Mar 2010 23:04:52 +0200
Subject: glapi: add function to find extension by name

---
 src/mesa/glapi/glapi_getproc.c | 31 +++++++++++++++++++++----------
 1 file changed, 21 insertions(+), 10 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glapi_getproc.c b/src/mesa/glapi/glapi_getproc.c
index 0d9358ce41..4205435da5 100644
--- a/src/mesa/glapi/glapi_getproc.c
+++ b/src/mesa/glapi/glapi_getproc.c
@@ -199,29 +199,40 @@ static struct _glapi_function ExtEntryTable[MAX_EXTENSION_FUNCS];
 static GLuint NumExtEntryPoints = 0;
 
 
-static GLint
-get_extension_proc_offset(const char *funcName)
+static struct _glapi_function *
+get_extension_proc(const char *funcName)
 {
    GLuint i;
    for (i = 0; i < NumExtEntryPoints; i++) {
       if (strcmp(ExtEntryTable[i].name, funcName) == 0) {
-         return ExtEntryTable[i].dispatch_offset;
+         return & ExtEntryTable[i];
       }
    }
-   return -1;
+   return NULL;
+}
+
+
+static GLint
+get_extension_proc_offset(const char *funcName)
+{
+   const struct _glapi_function * const f = get_extension_proc( funcName );
+   if (f == NULL) {
+      return -1;
+   }
+
+   return f->dispatch_offset;
 }
 
 
 static _glapi_proc
 get_extension_proc_address(const char *funcName)
 {
-   GLuint i;
-   for (i = 0; i < NumExtEntryPoints; i++) {
-      if (strcmp(ExtEntryTable[i].name, funcName) == 0) {
-         return ExtEntryTable[i].dispatch_stub;
-      }
+   const struct _glapi_function * const f = get_extension_proc( funcName );
+   if (f == NULL) {
+      return NULL;
    }
-   return NULL;
+
+   return f->dispatch_stub;
 }
 
 
-- 
cgit v1.2.3


From f0c18da2cf01bc11dc720caed4590ae7eca128f1 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Sat, 6 Mar 2010 21:19:45 +0200
Subject: glapi: cosmetic for functions for static table

make similar to functions for extensions table
---
 src/mesa/glapi/glapi_getproc.c | 59 +++++++++++++++++++++++-------------------
 1 file changed, 33 insertions(+), 26 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glapi_getproc.c b/src/mesa/glapi/glapi_getproc.c
index 4205435da5..1514b91ffe 100644
--- a/src/mesa/glapi/glapi_getproc.c
+++ b/src/mesa/glapi/glapi_getproc.c
@@ -44,11 +44,14 @@
 #include "glapi/glapioffsets.h"
 
 
+/**********************************************************************
+ * Static function management.
+ */
+
+
 #if !defined(DISPATCH_FUNCTION_SIZE) && !defined(XFree86Server)
 # define NEED_FUNCTION_POINTER
 #endif
-
-/* The code in this file is auto-generated with Python */
 #include "glapi/glprocs.h"
 
 
@@ -57,7 +60,7 @@
  * and return the corresponding glprocs_table_t entry.
  */
 static const glprocs_table_t *
-find_entry( const char * n )
+get_static_proc( const char * n )
 {
    GLuint i;
    for (i = 0; static_functions[i].Name_offset >= 0; i++) {
@@ -83,11 +86,12 @@ find_entry( const char * n )
 static GLint
 get_static_proc_offset(const char *funcName)
 {
-   const glprocs_table_t * const f = find_entry( funcName );
-   if (f) {
-      return f->Offset;
+   const glprocs_table_t * const f = get_static_proc( funcName );
+   if (f == NULL) {
+      return -1;
    }
-   return -1;
+
+   return f->Offset;
 }
 
 
@@ -100,25 +104,32 @@ get_static_proc_offset(const char *funcName)
 static _glapi_proc
 get_static_proc_address(const char *funcName)
 {
-   const glprocs_table_t * const f = find_entry( funcName );
-   if (f) {
+   const glprocs_table_t * const f = get_static_proc( funcName );
+   if (f == NULL) {
+      return NULL;
+   }
+
 #if defined(DISPATCH_FUNCTION_SIZE) && defined(GLX_INDIRECT_RENDERING)
-      return (f->Address == NULL)
-	 ? get_entrypoint_address(f->Offset)
-         : f->Address;
+   return (f->Address == NULL)
+      ? get_entrypoint_address(f->Offset)
+      : f->Address;
 #elif defined(DISPATCH_FUNCTION_SIZE)
-      return get_entrypoint_address(f->Offset);
+   return get_entrypoint_address(f->Offset);
 #else
-      return f->Address;
+   return f->Address;
 #endif
-   }
-   else {
-      return NULL;
-   }
 }
 
-#endif /* !defined(XFree86Server) */
+#else
+
+static _glapi_proc
+get_static_proc_address(const char *funcName)
+{
+   (void) funcName;
+   return NULL;
+}
 
+#endif /* !defined(XFree86Server) */
 
 
 /**
@@ -487,14 +498,10 @@ _glapi_get_proc_address(const char *funcName)
    if (func)
       return func;
 
-#if !defined( XFree86Server )
    /* search static functions */
-   {
-      const _glapi_proc func = get_static_proc_address(funcName);
-      if (func)
-         return func;
-   }
-#endif /* !defined( XFree86Server ) */
+   func = get_static_proc_address(funcName);
+   if (func)
+      return func;
 
    entry = add_function_name(funcName);
    return (entry == NULL) ? NULL : entry->dispatch_stub;
-- 
cgit v1.2.3


From f9cc6b3ee7c95130992d67c080ff9bc8e8a6d789 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Mon, 8 Mar 2010 01:18:31 +0200
Subject: glapi: use get_extension_proc in _glapi_add_dispatch

---
 src/mesa/glapi/glapi_getproc.c | 20 ++++++++------------
 1 file changed, 8 insertions(+), 12 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glapi_getproc.c b/src/mesa/glapi/glapi_getproc.c
index 1514b91ffe..1d0389e057 100644
--- a/src/mesa/glapi/glapi_getproc.c
+++ b/src/mesa/glapi/glapi_getproc.c
@@ -368,7 +368,6 @@ _glapi_add_dispatch( const char * const * function_names,
    struct _glapi_function * entry[8];
    GLboolean is_static[8];
    unsigned i;
-   unsigned j;
    int offset = ~0;
    int new_offset;
 
@@ -403,28 +402,25 @@ _glapi_add_dispatch( const char * const * function_names,
       }
    
    
-      for ( j = 0 ; j < NumExtEntryPoints ; j++ ) {
-	 if (strcmp(ExtEntryTable[j].name, function_names[i]) == 0) {
+      entry[i] = get_extension_proc(function_names[i]);
+
+      if (entry[i] != NULL) {
+
 	    /* The offset may be ~0 if the function name was added by
 	     * glXGetProcAddress but never filled in by the driver.
 	     */
 
-	    if (ExtEntryTable[j].dispatch_offset != ~0) {
-	       if (strcmp(real_sig, ExtEntryTable[j].parameter_signature) 
-		   != 0) {
+	    if (entry[i]->dispatch_offset != ~0) {
+	       if (strcmp(real_sig, entry[i]->parameter_signature) != 0) {
 		  return -1;
 	       }
 
-	       if ( (offset != ~0) && (ExtEntryTable[j].dispatch_offset != offset) ) {
+	       if ( (offset != ~0) && (entry[i]->dispatch_offset != offset) ) {
 		  return -1;
 	       }
 
-	       offset = ExtEntryTable[j].dispatch_offset;
+	       offset = entry[i]->dispatch_offset;
 	    }
-	    
-	    entry[i] = & ExtEntryTable[j];
-	    break;
-	 }
       }
    }
 
-- 
cgit v1.2.3


From ddabf0a151c2ef318e5de45238556c6568540681 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Mon, 8 Mar 2010 01:26:01 +0200
Subject: glapi: cosmetic for _glapi_add_dispatch

- static vs. extension
- indent
- s/new_offset/static_offset/
- ...
---
 src/mesa/glapi/glapi_getproc.c | 57 ++++++++++++++++++++++++------------------
 1 file changed, 32 insertions(+), 25 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glapi_getproc.c b/src/mesa/glapi/glapi_getproc.c
index 1d0389e057..a4d2cb907c 100644
--- a/src/mesa/glapi/glapi_getproc.c
+++ b/src/mesa/glapi/glapi_getproc.c
@@ -369,58 +369,65 @@ _glapi_add_dispatch( const char * const * function_names,
    GLboolean is_static[8];
    unsigned i;
    int offset = ~0;
-   int new_offset;
 
 
    (void) memset( is_static, 0, sizeof( is_static ) );
    (void) memset( entry, 0, sizeof( entry ) );
 
    for ( i = 0 ; function_names[i] != NULL ; i++ ) {
-      /* Do some trivial validation on the name of the function.
-       */
+      const char * funcName = function_names[i];
+      int static_offset;
+      int extension_offset;
 
-      if (!function_names[i] || function_names[i][0] != 'g' || function_names[i][1] != 'l')
+      if (funcName[0] != 'g' || funcName[1] != 'l')
          return -1;
-   
+
       /* Determine if the named function already exists.  If the function does
        * exist, it must have the same parameter signature as the function
        * being added.
        */
 
-      new_offset = get_static_proc_offset(function_names[i]);
-      if (new_offset >= 0) {
+      /* search built-in functions */
+      static_offset = get_static_proc_offset(funcName);
+
+      if (static_offset >= 0) {
+
+	 is_static[i] = GL_TRUE;
+
 	 /* FIXME: Make sure the parameter signatures match!  How do we get
 	  * FIXME: the parameter signature for static functions?
 	  */
 
-	 if ( (offset != ~0) && (new_offset != offset) ) {
+	 if ( (offset != ~0) && (static_offset != offset) ) {
 	    return -1;
 	 }
 
-	 is_static[i] = GL_TRUE;
-	 offset = new_offset;
+	 offset = static_offset;
       }
-   
-   
-      entry[i] = get_extension_proc(function_names[i]);
+
+      /* search added extension functions */
+      entry[i] = get_extension_proc(funcName);
 
       if (entry[i] != NULL) {
+	 extension_offset = entry[i]->dispatch_offset;
 
-	    /* The offset may be ~0 if the function name was added by
-	     * glXGetProcAddress but never filled in by the driver.
-	     */
+	 /* The offset may be ~0 if the function name was added by
+	  * glXGetProcAddress but never filled in by the driver.
+	  */
 
-	    if (entry[i]->dispatch_offset != ~0) {
-	       if (strcmp(real_sig, entry[i]->parameter_signature) != 0) {
-		  return -1;
-	       }
+	 if (extension_offset == ~0) {
+	    continue;
+	 }
 
-	       if ( (offset != ~0) && (entry[i]->dispatch_offset != offset) ) {
-		  return -1;
-	       }
+	 if (strcmp(real_sig, entry[i]->parameter_signature) != 0) {
+	    return -1;
+	 }
 
-	       offset = entry[i]->dispatch_offset;
-	    }
+	 if ( (offset != ~0) && (extension_offset != offset) ) {
+	    return -1;
+	 }
+
+	 offset = extension_offset;
       }
    }
 
-- 
cgit v1.2.3


From cae4fdda8d27cac21714571adb0bfada6d96152a Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Mon, 8 Mar 2010 01:40:14 +0200
Subject: glapi: parameter checking, failure paths, ... for add_function_name

---
 src/mesa/glapi/glapi_getproc.c | 38 ++++++++++++++++++++++++++------------
 1 file changed, 26 insertions(+), 12 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glapi_getproc.c b/src/mesa/glapi/glapi_getproc.c
index a4d2cb907c..ea905bb2cb 100644
--- a/src/mesa/glapi/glapi_getproc.c
+++ b/src/mesa/glapi/glapi_getproc.c
@@ -293,20 +293,34 @@ static struct _glapi_function *
 add_function_name( const char * funcName )
 {
    struct _glapi_function * entry = NULL;
-   
-   if (NumExtEntryPoints < MAX_EXTENSION_FUNCS) {
-      _glapi_proc entrypoint = generate_entrypoint(~0);
-      if (entrypoint != NULL) {
-	 entry = & ExtEntryTable[NumExtEntryPoints];
-
-	 ExtEntryTable[NumExtEntryPoints].name = str_dup(funcName);
-	 ExtEntryTable[NumExtEntryPoints].parameter_signature = NULL;
-	 ExtEntryTable[NumExtEntryPoints].dispatch_offset = ~0;
-	 ExtEntryTable[NumExtEntryPoints].dispatch_stub = entrypoint;
-	 NumExtEntryPoints++;
-      }
+   _glapi_proc entrypoint = NULL;
+   char * name_dup = NULL;
+
+   if (NumExtEntryPoints >= MAX_EXTENSION_FUNCS)
+      return NULL;
+
+   if (funcName == NULL)
+      return NULL;
+
+   name_dup = str_dup(funcName);
+   if (name_dup == NULL)
+      return NULL;
+
+   entrypoint = generate_entrypoint(~0);
+
+   if (entrypoint == NULL) {
+      free(name_dup);
+      return NULL;
    }
 
+   entry = & ExtEntryTable[NumExtEntryPoints];
+   NumExtEntryPoints++;
+
+   entry->name = name_dup;
+   entry->parameter_signature = NULL;
+   entry->dispatch_offset = ~0;
+   entry->dispatch_stub = entrypoint;
+
    return entry;
 }
 
-- 
cgit v1.2.3


From 3833a76eef6b45b82c102a49055602632f960a99 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Mon, 8 Mar 2010 01:55:10 +0200
Subject: glapi: add function set_entry_info

---
 src/mesa/glapi/glapi_getproc.c | 25 ++++++++++++++++++++++---
 1 file changed, 22 insertions(+), 3 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glapi_getproc.c b/src/mesa/glapi/glapi_getproc.c
index ea905bb2cb..95974fe3a0 100644
--- a/src/mesa/glapi/glapi_getproc.c
+++ b/src/mesa/glapi/glapi_getproc.c
@@ -325,6 +325,27 @@ add_function_name( const char * funcName )
 }
 
 
+static struct _glapi_function *
+set_entry_info( struct _glapi_function * entry, const char * signature, unsigned offset )
+{
+   char * sig_dup = NULL;
+
+   if (signature == NULL)
+      return NULL;
+
+   sig_dup = str_dup(signature);
+   if (sig_dup == NULL)
+      return NULL;
+
+   fill_in_entrypoint_offset(entry->dispatch_stub, offset);
+
+   entry->parameter_signature = sig_dup;
+   entry->dispatch_offset = offset;
+
+   return entry;
+}
+
+
 /**
  * Fill-in the dispatch stub for the named function.
  * 
@@ -461,9 +482,7 @@ _glapi_add_dispatch( const char * const * function_names,
 	    }
 	 }
 
-	 entry[i]->parameter_signature = str_dup(real_sig);
-	 fill_in_entrypoint_offset(entry[i]->dispatch_stub, offset);
-	 entry[i]->dispatch_offset = offset;
+	 set_entry_info( entry[i], real_sig, offset );
       }
    }
    
-- 
cgit v1.2.3


From c4b630efdb882f824e9099b9cb2e07d8db2e3549 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Mon, 8 Mar 2010 01:58:59 +0200
Subject: glapi: minor cosmetic for _glapi_add_dispatch

---
 src/mesa/glapi/glapi_getproc.c | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glapi_getproc.c b/src/mesa/glapi/glapi_getproc.c
index 95974fe3a0..1badff81ea 100644
--- a/src/mesa/glapi/glapi_getproc.c
+++ b/src/mesa/glapi/glapi_getproc.c
@@ -472,20 +472,21 @@ _glapi_add_dispatch( const char * const * function_names,
    }
 
    for ( i = 0 ; function_names[i] != NULL ; i++ ) {
-      if (! is_static[i] ) {
+      if (is_static[i]) {
+	 continue;
+      }
+
+      if (entry[i] == NULL) {
+	 entry[i] = add_function_name( function_names[i] );
 	 if (entry[i] == NULL) {
-	    entry[i] = add_function_name( function_names[i] );
-	    if (entry[i] == NULL) {
-	       /* FIXME: Possible memory leak here.
-		*/
-	       return -1;
-	    }
+	    /* FIXME: Possible memory leak here. */
+	    return -1;
 	 }
-
-	 set_entry_info( entry[i], real_sig, offset );
       }
+
+      set_entry_info( entry[i], real_sig, offset );
    }
-   
+
    return offset;
 }
 
-- 
cgit v1.2.3


From 0d1dde5b010feba1afe5b51cc6fe66c85371f70b Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Mon, 8 Mar 2010 02:53:57 +0200
Subject: glapi: comments for _glapi_add_dispatch

---
 src/mesa/glapi/glapi_getproc.c | 24 ++++++++++++++++++------
 1 file changed, 18 insertions(+), 6 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glapi_getproc.c b/src/mesa/glapi/glapi_getproc.c
index 1badff81ea..921df262af 100644
--- a/src/mesa/glapi/glapi_getproc.c
+++ b/src/mesa/glapi/glapi_getproc.c
@@ -409,6 +409,10 @@ _glapi_add_dispatch( const char * const * function_names,
    (void) memset( is_static, 0, sizeof( is_static ) );
    (void) memset( entry, 0, sizeof( entry ) );
 
+   /* Find the _single_ dispatch offset for all function names that already
+    * exist (and have a dispatch offset).
+    */
+
    for ( i = 0 ; function_names[i] != NULL ; i++ ) {
       const char * funcName = function_names[i];
       int static_offset;
@@ -417,11 +421,6 @@ _glapi_add_dispatch( const char * const * function_names,
       if (funcName[0] != 'g' || funcName[1] != 'l')
          return -1;
 
-      /* Determine if the named function already exists.  If the function does
-       * exist, it must have the same parameter signature as the function
-       * being added.
-       */
-
       /* search built-in functions */
       static_offset = get_static_proc_offset(funcName);
 
@@ -466,16 +465,25 @@ _glapi_add_dispatch( const char * const * function_names,
       }
    }
 
+   /* If all function names are either new (or with no dispatch offset),
+    * allocate a new dispatch offset.
+    */
+
    if (offset == ~0) {
       offset = next_dynamic_offset;
       next_dynamic_offset++;
    }
 
+   /* Fill in the dispatch offset for the new function names (and those with
+    * no dispatch offset).
+    */
+
    for ( i = 0 ; function_names[i] != NULL ; i++ ) {
       if (is_static[i]) {
 	 continue;
       }
 
+      /* generate entrypoints for new function names */
       if (entry[i] == NULL) {
 	 entry[i] = add_function_name( function_names[i] );
 	 if (entry[i] == NULL) {
@@ -540,8 +548,12 @@ _glapi_get_proc_address(const char *funcName)
    if (func)
       return func;
 
+   /* generate entrypoint, dispatch offset must be filled in by the driver */
    entry = add_function_name(funcName);
-   return (entry == NULL) ? NULL : entry->dispatch_stub;
+   if (entry == NULL)
+      return NULL;
+
+   return entry->dispatch_stub;
 }
 
 
-- 
cgit v1.2.3


From bae31355150f66f7130d76a2ab4d4b735f239c71 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Mon, 8 Mar 2010 03:10:30 +0200
Subject: glapi: these two should be ok for add_dispatch ...

- a function cannot be both static and extension, right ?

- we should be setting the offset only if not already set, right ?
---
 src/mesa/glapi/glapi_getproc.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glapi_getproc.c b/src/mesa/glapi/glapi_getproc.c
index 921df262af..5a8c6953ac 100644
--- a/src/mesa/glapi/glapi_getproc.c
+++ b/src/mesa/glapi/glapi_getproc.c
@@ -437,6 +437,8 @@ _glapi_add_dispatch( const char * const * function_names,
 	 }
 
 	 offset = static_offset;
+
+	 continue;
       }
 
       /* search added extension functions */
@@ -492,7 +494,9 @@ _glapi_add_dispatch( const char * const * function_names,
 	 }
       }
 
-      set_entry_info( entry[i], real_sig, offset );
+      if (entry[i]->dispatch_offset == ~0) {
+	 set_entry_info( entry[i], real_sig, offset );
+      }
    }
 
    return offset;
-- 
cgit v1.2.3


From 7cd8f0ef9d905080dc857c4739be9780b24a7fd2 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Wed, 10 Mar 2010 00:43:01 +0200
Subject: glapi: fix bug with tls and relocs

add_dispatch (driver) and maybe get_proc_address (client) may be called before
set_dispatch is called, which results in generate_entrypoint using an unreloced
function template.
---
 src/mesa/glapi/glapi_getproc.c | 3 +++
 1 file changed, 3 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glapi_getproc.c b/src/mesa/glapi/glapi_getproc.c
index 5a8c6953ac..295657875d 100644
--- a/src/mesa/glapi/glapi_getproc.c
+++ b/src/mesa/glapi/glapi_getproc.c
@@ -405,6 +405,7 @@ _glapi_add_dispatch( const char * const * function_names,
    unsigned i;
    int offset = ~0;
 
+   init_glapi_relocs_once();
 
    (void) memset( is_static, 0, sizeof( is_static ) );
    (void) memset( entry, 0, sizeof( entry ) );
@@ -533,6 +534,8 @@ _glapi_get_proc_address(const char *funcName)
    _glapi_proc func;
    struct _glapi_function * entry;
 
+   init_glapi_relocs_once();
+
 #ifdef MANGLE
    /* skip the prefix on the name */
    if (funcName[1] != 'g' || funcName[2] != 'l')
-- 
cgit v1.2.3


From e167403e5809c447870644bd9ea09fad369706cf Mon Sep 17 00:00:00 2001
From: Alex Deucher <alexdeucher@gmail.com>
Date: Tue, 9 Mar 2010 19:44:23 -0500
Subject: radeon/r200/r600: enable HW accelerated gl(Read/Copy/Draw)Pixels

---
 src/mesa/drivers/dri/r200/Makefile         |   1 -
 src/mesa/drivers/dri/r200/r200_context.c   |   2 -
 src/mesa/drivers/dri/r200/r200_pixel.c     | 494 -----------------------------
 src/mesa/drivers/dri/r200/r200_pixel.h     |  39 ---
 src/mesa/drivers/dri/r200/r200_state.c     |   4 +
 src/mesa/drivers/dri/r600/r700_state.c     |   9 +-
 src/mesa/drivers/dri/radeon/radeon_state.c |   4 +
 7 files changed, 15 insertions(+), 538 deletions(-)
 delete mode 100644 src/mesa/drivers/dri/r200/r200_pixel.c
 delete mode 100644 src/mesa/drivers/dri/r200/r200_pixel.h

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r200/Makefile b/src/mesa/drivers/dri/r200/Makefile
index 9ea81fd505..c9c1346c3a 100644
--- a/src/mesa/drivers/dri/r200/Makefile
+++ b/src/mesa/drivers/dri/r200/Makefile
@@ -34,7 +34,6 @@ DRIVER_SOURCES = r200_context.c \
 		 r200_state.c \
 		 r200_state_init.c \
 		 r200_cmdbuf.c \
-		 r200_pixel.c \
 		 r200_tex.c \
 		 r200_texstate.c \
 		 r200_tcl.c \
diff --git a/src/mesa/drivers/dri/r200/r200_context.c b/src/mesa/drivers/dri/r200/r200_context.c
index 4f1a56658c..5739443bdf 100644
--- a/src/mesa/drivers/dri/r200/r200_context.c
+++ b/src/mesa/drivers/dri/r200/r200_context.c
@@ -51,7 +51,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "r200_context.h"
 #include "r200_ioctl.h"
 #include "r200_state.h"
-#include "r200_pixel.h"
 #include "r200_tex.h"
 #include "r200_swtcl.h"
 #include "r200_tcl.h"
@@ -474,7 +473,6 @@ GLboolean r200CreateContext( const __GLcontextModes *glVisual,
    /* XXX these should really go right after _mesa_init_driver_functions() */
    radeon_fbo_init(&rmesa->radeon);
    radeonInitSpanFuncs( ctx );
-   r200InitPixelFuncs( ctx );
    r200InitTnlFuncs( ctx );
    r200InitState( rmesa );
    r200InitSwtcl( ctx );
diff --git a/src/mesa/drivers/dri/r200/r200_pixel.c b/src/mesa/drivers/dri/r200/r200_pixel.c
deleted file mode 100644
index bfb7e2a2ed..0000000000
--- a/src/mesa/drivers/dri/r200/r200_pixel.c
+++ /dev/null
@@ -1,494 +0,0 @@
-/*
-Copyright (C) The Weather Channel, Inc.  2002.  All Rights Reserved.
-
-The Weather Channel (TM) funded Tungsten Graphics to develop the
-initial release of the Radeon 8500 driver under the XFree86 license.
-This notice must be preserved.
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice (including the
-next paragraph) shall be included in all copies or substantial
-portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-/*
- * Authors:
- *   Keith Whitwell <keith@tungstengraphics.com>
- */
-
-#include "main/glheader.h"
-#include "main/enums.h"
-#include "main/mtypes.h"
-#include "main/macros.h"
-#include "swrast/swrast.h"
-
-#include "r200_context.h"
-#include "r200_ioctl.h"
-#include "r200_pixel.h"
-#include "r200_swtcl.h"
-
-#include "drirenderbuffer.h"
-
-
-static GLboolean
-check_color( const GLcontext *ctx, GLenum type, GLenum format,
-	     const struct gl_pixelstore_attrib *packing,
-	     const void *pixels, GLint sz, GLint pitch )
-{
-   r200ContextPtr rmesa = R200_CONTEXT(ctx);
-   GLuint cpp = rmesa->radeon.radeonScreen->cpp;
-
-   if (R200_DEBUG & RADEON_PIXEL)
-      fprintf(stderr, "%s\n", __FUNCTION__);
-
-   if (	(pitch & 63) ||
-	ctx->_ImageTransferState ||
-	packing->SwapBytes ||
-	packing->LsbFirst) {
-      if (R200_DEBUG & RADEON_PIXEL)
-	 fprintf(stderr, "%s: failed 1\n", __FUNCTION__);
-      return GL_FALSE;
-   }
-
-   if ( type == GL_UNSIGNED_INT_8_8_8_8_REV &&
-	cpp == 4 &&
-	format == GL_BGRA ) {
-      if (R200_DEBUG & RADEON_PIXEL)
-	 fprintf(stderr, "%s: passed 2\n", __FUNCTION__);
-      return GL_TRUE;
-   }
-
-   if (R200_DEBUG & RADEON_PIXEL)
-      fprintf(stderr, "%s: failed\n", __FUNCTION__);
-
-   return GL_FALSE;
-}
-
-static GLboolean
-check_color_per_fragment_ops( const GLcontext *ctx )
-{
-   int result;
-   result = (!(     ctx->Color.AlphaEnabled ||
-		    ctx->Depth.Test ||
-		    ctx->Fog.Enabled ||
-		    ctx->Scissor.Enabled ||
-		    ctx->Stencil._Enabled ||
-		    !ctx->Color.ColorMask[0][0] ||
-		    !ctx->Color.ColorMask[0][1] ||
-		    !ctx->Color.ColorMask[0][2] ||
-		    !ctx->Color.ColorMask[0][3] ||
-		    ctx->Color.ColorLogicOpEnabled ||
-		    ctx->Texture._EnabledUnits
-           ) &&
-	   ctx->Current.RasterPosValid);
-
-   return result;
-}
-
-
-#if 0
-static GLboolean
-clip_pixelrect( const GLcontext *ctx,
-		const GLframebuffer *buffer,
-		GLint *x, GLint *y,
-		GLsizei *width, GLsizei *height,
-		GLint *size )
-{
-   r200ContextPtr rmesa = R200_CONTEXT(ctx);
-
-   /* left clipping */
-   if (*x < buffer->_Xmin) {
-      *width -= (buffer->_Xmin - *x);
-      *x = buffer->_Xmin;
-   }
-
-   /* right clipping */
-   if (*x + *width > buffer->_Xmax)
-      *width -= (*x + *width - buffer->_Xmax - 1);
-
-   if (*width <= 0)
-      return GL_FALSE;
-
-   /* bottom clipping */
-   if (*y < buffer->_Ymin) {
-      *height -= (buffer->_Ymin - *y);
-      *y = buffer->_Ymin;
-   }
-
-   /* top clipping */
-   if (*y + *height > buffer->_Ymax)
-      *height -= (*y + *height - buffer->_Ymax - 1);
-
-   if (*height <= 0)
-      return GL_FALSE;
-
-   *size = ((*y + *height - 1) * rmesa->radeon.radeonScreen->frontPitch +
-	    (*x + *width - 1) * rmesa->radeon.radeonScreen->cpp);
-
-   return GL_TRUE;
-}
-#endif
-
-static GLboolean
-r200TryReadPixels( GLcontext *ctx,
-		  GLint x, GLint y, GLsizei width, GLsizei height,
-		  GLenum format, GLenum type,
-		  const struct gl_pixelstore_attrib *pack,
-		  GLvoid *pixels )
-{
-   return GL_FALSE;
-#if 0
-   r200ContextPtr rmesa = R200_CONTEXT(ctx);
-   GLint pitch = pack->RowLength ? pack->RowLength : width;
-   GLint blit_format;
-   GLuint cpp = rmesa->radeon.radeonScreen->cpp;
-   GLint size = width * height * cpp;
-
-   if (R200_DEBUG & RADEON_PIXEL)
-      fprintf(stderr, "%s\n", __FUNCTION__);
-
-   /* Only accelerate reading to GART buffers.
-    */
-   if ( !r200IsGartMemory(rmesa, pixels,
-			 pitch * height * rmesa->radeon.radeonScreen->cpp ) ) {
-      if (R200_DEBUG & RADEON_PIXEL)
-	 fprintf(stderr, "%s: dest not GART\n", __FUNCTION__);
-   }
-
-   /* Need GL_PACK_INVERT_MESA to cope with upsidedown results from
-    * blitter:
-    */
-   if (!pack->Invert) {
-      if (R200_DEBUG & RADEON_PIXEL)
-	 fprintf(stderr, "%s: MESA_PACK_INVERT not set\n", __FUNCTION__);
-      return GL_FALSE;
-   }
-
-   if (!check_color(ctx, type, format, pack, pixels, size, pitch))
-      return GL_FALSE;
-
-   switch ( rmesa->radeon.radeonScreen->cpp ) {
-   case 4:
-      blit_format = R200_CP_COLOR_FORMAT_ARGB8888;
-      break;
-   default:
-      return GL_FALSE;
-   }
-
-
-   /* Although the blits go on the command buffer, need to do this and
-    * fire with lock held to guarentee cliprects and drawOffset are
-    * correct.
-    *
-    * This is an unusual situation however, as the code which flushes
-    * a full command buffer expects to be called unlocked.  As a
-    * workaround, immediately flush the buffer on aquiring the lock.
-    */
-   LOCK_HARDWARE( &rmesa->radeon );
-
-   if (rmesa->store.cmd_used)
-      rcommonFlushCmdBufLocked( &rmesa->radeon, __FUNCTION__ );
-
-   if (!clip_pixelrect(ctx, ctx->ReadBuffer, &x, &y, &width, &height,
-		       &size)) {
-      UNLOCK_HARDWARE( &rmesa->radeon );
-      if (R200_DEBUG & RADEON_PIXEL)
-	 fprintf(stderr, "%s totally clipped -- nothing to do\n",
-		 __FUNCTION__);
-      return GL_TRUE;
-   }
-
-   {
-      __DRIdrawable *dPriv = rmesa->radeon.dri.drawable;
-      driRenderbuffer *drb = (driRenderbuffer *) ctx->ReadBuffer->_ColorReadBuffer;
-      int nbox = dPriv->numClipRects;
-      int src_offset = drb->offset
-		     + rmesa->radeon.radeonScreen->fbLocation;
-      int src_pitch = drb->pitch * drb->cpp;
-      int dst_offset = r200GartOffsetFromVirtual( rmesa, pixels );
-      int dst_pitch = pitch * rmesa->radeon.radeonScreen->cpp;
-      drm_clip_rect_t *box = dPriv->pClipRects;
-      int i;
-
-      r200EmitWait( rmesa, RADEON_WAIT_3D );
-
-      y = dPriv->h - y - height;
-      x += dPriv->x;
-      y += dPriv->y;
-
-
-      if (R200_DEBUG & RADEON_PIXEL)
-	 fprintf(stderr, "readpixel blit src_pitch %d dst_pitch %d\n",
-		 src_pitch, dst_pitch);
-
-      for (i = 0 ; i < nbox ; i++)
-      {
-	 GLint bx = box[i].x1;
-	 GLint by = box[i].y1;
-	 GLint bw = box[i].x2 - bx;
-	 GLint bh = box[i].y2 - by;
-
-	 if (bx < x) bw -= x - bx, bx = x;
-	 if (by < y) bh -= y - by, by = y;
-	 if (bx + bw > x + width) bw = x + width - bx;
-	 if (by + bh > y + height) bh = y + height - by;
-	 if (bw <= 0) continue;
-	 if (bh <= 0) continue;
-
-	 r200EmitBlit( rmesa,
-		       blit_format,
-		       src_pitch, src_offset,
-		       dst_pitch, dst_offset,
-		       bx, by,
-		       bx - x, by - y,
-		       bw, bh );
-      }
-
-      rcommonFlushCmdBufLocked( &rmesa->radeon, __FUNCTION__ );
-   }
-   UNLOCK_HARDWARE( &rmesa->radeon );
-
-   radeonFinish( ctx ); /* required by GL */
-#endif
-   return GL_TRUE;
-}
-
-static void
-r200ReadPixels( GLcontext *ctx,
-		 GLint x, GLint y, GLsizei width, GLsizei height,
-		 GLenum format, GLenum type,
-		 const struct gl_pixelstore_attrib *pack,
-		 GLvoid *pixels )
-{
-   if (R200_DEBUG & RADEON_PIXEL)
-      fprintf(stderr, "%s\n", __FUNCTION__);
-
-   if (!r200TryReadPixels( ctx, x, y, width, height, format, type, pack,
-			   pixels))
-      _swrast_ReadPixels( ctx, x, y, width, height, format, type, pack,
-			  pixels);
-}
-
-
-
-
-static void do_draw_pix( GLcontext *ctx,
-			 GLint x, GLint y, GLsizei width, GLsizei height,
-			 GLint pitch,
-			 const void *pixels,
-			 GLuint planemask)
-{
-   if (R200_DEBUG & RADEON_PIXEL)
-      fprintf(stderr, "%s\n", __FUNCTION__);
-
-#if 0
-   r200ContextPtr rmesa = R200_CONTEXT(ctx);
-   __DRIdrawable *dPriv = radeon_get_drawable(&rmesa->radeon);
-   drm_clip_rect_t *box = dPriv->pClipRects;
-   struct gl_renderbuffer *rb = ctx->ReadBuffer->_ColorDrawBuffers[0];
-   driRenderbuffer *drb = (driRenderbuffer *) rb;
-   int nbox = dPriv->numClipRects;
-   int i;
-   int blit_format;
-   int size;
-   int src_offset = r200GartOffsetFromVirtual( rmesa, pixels );
-   int src_pitch = pitch * rmesa->radeon.radeonScreen->cpp;
-
-   switch ( rmesa->radeon.radeonScreen->cpp ) {
-   case 2:
-      blit_format = R200_CP_COLOR_FORMAT_RGB565;
-      break;
-   case 4:
-      blit_format = R200_CP_COLOR_FORMAT_ARGB8888;
-      break;
-   default:
-      return;
-   }
-
-
-   LOCK_HARDWARE( &rmesa->radeon );
-
-   if (rmesa->store.cmd_used)
-      rcommonFlushCmdBufLocked( &rmesa->radeon, __FUNCTION__ );
-
-   y -= height;			/* cope with pixel zoom */
-
-   if (!clip_pixelrect(ctx, ctx->DrawBuffer,
-		       &x, &y, &width, &height,
-		       &size)) {
-      UNLOCK_HARDWARE( &rmesa->radeon );
-      return;
-   }
-
-   y = dPriv->h - y - height; 	/* convert from gl to hardware coords */
-   x += dPriv->x;
-   y += dPriv->y;
-
-
-   r200EmitWait( rmesa, RADEON_WAIT_3D );
-
-   for (i = 0 ; i < nbox ; i++ )
-   {
-      GLint bx = box[i].x1;
-      GLint by = box[i].y1;
-      GLint bw = box[i].x2 - bx;
-      GLint bh = box[i].y2 - by;
-
-      if (bx < x) bw -= x - bx, bx = x;
-      if (by < y) bh -= y - by, by = y;
-      if (bx + bw > x + width) bw = x + width - bx;
-      if (by + bh > y + height) bh = y + height - by;
-      if (bw <= 0) continue;
-      if (bh <= 0) continue;
-
-      r200EmitBlit( rmesa,
-		    blit_format,
-		    src_pitch, src_offset,
-		    drb->pitch * drb->cpp,
-		    drb->offset + rmesa->radeon.radeonScreen->fbLocation,
-		    bx - x, by - y,
-		    bx, by,
-		    bw, bh );
-   }
-
-   rcommonFlushCmdBufLocked( &rmesa->radeon, __FUNCTION__ );
-   radeonWaitForIdleLocked( &rmesa->radeon ); /* required by GL */
-   UNLOCK_HARDWARE( &rmesa->radeon );
-#endif
-}
-
-
-
-
-static GLboolean
-r200TryDrawPixels( GLcontext *ctx,
-		  GLint x, GLint y, GLsizei width, GLsizei height,
-		  GLenum format, GLenum type,
-		  const struct gl_pixelstore_attrib *unpack,
-		  const GLvoid *pixels )
-{
-   r200ContextPtr rmesa = R200_CONTEXT(ctx);
-   GLint pitch = unpack->RowLength ? unpack->RowLength : width;
-   GLuint planemask;
-   GLuint cpp = rmesa->radeon.radeonScreen->cpp;
-   GLint size = height * pitch * cpp;
-
-   if (R200_DEBUG & RADEON_PIXEL)
-      fprintf(stderr, "%s\n", __FUNCTION__);
-
-   /* check that we're drawing to exactly one color buffer */
-   if (ctx->DrawBuffer->_NumColorDrawBuffers != 1)
-     return GL_FALSE;
-
-   switch (format) {
-   case GL_RGB:
-   case GL_RGBA:
-   case GL_BGRA:
-      planemask = radeonPackColor(cpp,
-				ctx->Color.ColorMask[0][RCOMP],
-				ctx->Color.ColorMask[0][GCOMP],
-				ctx->Color.ColorMask[0][BCOMP],
-				ctx->Color.ColorMask[0][ACOMP]);
-
-      if (cpp == 2)
-	 planemask |= planemask << 16;
-
-      if (planemask != ~0)
-	 return GL_FALSE;	/* fix me -- should be possible */
-
-      /* Can't do conversions on GART reads/draws.
-       */
-      if ( !r200IsGartMemory( rmesa, pixels, size ) ) {
-	 if (R200_DEBUG & RADEON_PIXEL)
-	    fprintf(stderr, "%s: not GART memory\n", __FUNCTION__);
-	 return GL_FALSE;
-      }
-
-      if (!check_color(ctx, type, format, unpack, pixels, size, pitch)) {
-	 return GL_FALSE;
-      }
-      if (!check_color_per_fragment_ops(ctx)) {
-	 return GL_FALSE;
-      }
-
-      if (ctx->Pixel.ZoomX != 1.0F ||
-	  ctx->Pixel.ZoomY != -1.0F)
-	 return GL_FALSE;
-      break;
-
-   default:
-      return GL_FALSE;
-   }
-
-   if (0)// r200IsGartMemory(rmesa, pixels, size) )
-   {
-      do_draw_pix( ctx, x, y, width, height, pitch, pixels, planemask );
-      return GL_TRUE;
-   }
-   else if (0)
-   {
-      /* Pixels is in regular memory -- get dma buffers and perform
-       * upload through them.
-       */
-   }
-   else
-      return GL_FALSE;
-}
-
-static void
-r200DrawPixels( GLcontext *ctx,
-		 GLint x, GLint y, GLsizei width, GLsizei height,
-		 GLenum format, GLenum type,
-		 const struct gl_pixelstore_attrib *unpack,
-		 const GLvoid *pixels )
-{
-   if (R200_DEBUG & RADEON_PIXEL)
-      fprintf(stderr, "%s\n", __FUNCTION__);
-
-   if (!r200TryDrawPixels( ctx, x, y, width, height, format, type,
-			  unpack, pixels ))
-      _swrast_DrawPixels( ctx, x, y, width, height, format, type,
-			  unpack, pixels );
-}
-
-
-static void
-r200Bitmap( GLcontext *ctx, GLint px, GLint py,
-		  GLsizei width, GLsizei height,
-		  const struct gl_pixelstore_attrib *unpack,
-		  const GLubyte *bitmap )
-{
-   r200ContextPtr rmesa = R200_CONTEXT(ctx);
-
-   if (rmesa->radeon.Fallback)
-      _swrast_Bitmap( ctx, px, py, width, height, unpack, bitmap );
-   else
-      r200PointsBitmap( ctx, px, py, width, height, unpack, bitmap );
-}
-
-
-
-void r200InitPixelFuncs( GLcontext *ctx )
-{
-   if (!getenv("R200_NO_BLITS")) {
-      ctx->Driver.ReadPixels = r200ReadPixels;
-      ctx->Driver.DrawPixels = r200DrawPixels;
-      if (getenv("R200_HW_BITMAP"))
-	 ctx->Driver.Bitmap = r200Bitmap;
-   }
-}
diff --git a/src/mesa/drivers/dri/r200/r200_pixel.h b/src/mesa/drivers/dri/r200/r200_pixel.h
deleted file mode 100644
index e62aa05d74..0000000000
--- a/src/mesa/drivers/dri/r200/r200_pixel.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
-Copyright (C) The Weather Channel, Inc.  2002.  All Rights Reserved.
-
-The Weather Channel (TM) funded Tungsten Graphics to develop the
-initial release of the Radeon 8500 driver under the XFree86 license.
-This notice must be preserved.
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice (including the
-next paragraph) shall be included in all copies or substantial
-portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-/*
- * Authors:
- *   Keith Whitwell <keith@tungstengraphics.com>
- */
-
-#ifndef __R200_PIXEL_H__
-#define __R200_PIXEL_H__
-
-extern void r200InitPixelFuncs( GLcontext *ctx );
-
-#endif
diff --git a/src/mesa/drivers/dri/r200/r200_state.c b/src/mesa/drivers/dri/r200/r200_state.c
index 050e5aa877..71f764aaae 100644
--- a/src/mesa/drivers/dri/r200/r200_state.c
+++ b/src/mesa/drivers/dri/r200/r200_state.c
@@ -46,6 +46,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "tnl/tnl.h"
 #include "tnl/t_pipeline.h"
 #include "swrast_setup/swrast_setup.h"
+#include "drivers/common/meta.h"
 
 #include "radeon_common.h"
 #include "radeon_mipmap_tree.h"
@@ -2494,6 +2495,9 @@ void r200InitStateFuncs( struct dd_function_table *functions )
 
    functions->DrawBuffer		= radeonDrawBuffer;
    functions->ReadBuffer		= radeonReadBuffer;
+   functions->CopyPixels                = _mesa_meta_CopyPixels;
+   functions->DrawPixels                = _mesa_meta_DrawPixels;
+   functions->ReadPixels                = radeonReadPixels;
 
    functions->AlphaFunc			= r200AlphaFunc;
    functions->BlendColor		= r200BlendColor;
diff --git a/src/mesa/drivers/dri/r600/r700_state.c b/src/mesa/drivers/dri/r600/r700_state.c
index 6f156b5409..8797f8059a 100644
--- a/src/mesa/drivers/dri/r600/r700_state.c
+++ b/src/mesa/drivers/dri/r600/r700_state.c
@@ -39,6 +39,7 @@
 #include "swrast_setup/swrast_setup.h"
 #include "main/api_arrayelt.h"
 #include "main/framebuffer.h"
+#include "drivers/common/meta.h"
 
 #include "shader/prog_parameter.h"
 #include "shader/prog_statevars.h"
@@ -1857,8 +1858,12 @@ void r700InitStateFuncs(struct dd_function_table *functions) //-----------------
 
 	functions->Scissor = radeonScissor;
 
-	functions->DrawBuffer		= radeonDrawBuffer;
-	functions->ReadBuffer		= radeonReadBuffer;
+	functions->DrawBuffer = radeonDrawBuffer;
+	functions->ReadBuffer = radeonReadBuffer;
+
+	functions->CopyPixels = _mesa_meta_CopyPixels;
+	functions->DrawPixels = _mesa_meta_DrawPixels;
+	functions->ReadPixels = radeonReadPixels;
 
 }
 
diff --git a/src/mesa/drivers/dri/radeon/radeon_state.c b/src/mesa/drivers/dri/radeon/radeon_state.c
index 0ce97e8697..ec5612fdd7 100644
--- a/src/mesa/drivers/dri/radeon/radeon_state.c
+++ b/src/mesa/drivers/dri/radeon/radeon_state.c
@@ -45,6 +45,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "tnl/tnl.h"
 #include "tnl/t_pipeline.h"
 #include "swrast_setup/swrast_setup.h"
+#include "drivers/common/meta.h"
 
 #include "radeon_context.h"
 #include "radeon_mipmap_tree.h"
@@ -2248,6 +2249,9 @@ void radeonInitStateFuncs( GLcontext *ctx , GLboolean dri2 )
 
    ctx->Driver.DrawBuffer		= radeonDrawBuffer;
    ctx->Driver.ReadBuffer		= radeonReadBuffer;
+   ctx->Driver.CopyPixels               = _mesa_meta_CopyPixels;
+   ctx->Driver.DrawPixels               = _mesa_meta_DrawPixels;
+   ctx->Driver.ReadPixels               = radeonReadPixels;
 
    ctx->Driver.AlphaFunc		= radeonAlphaFunc;
    ctx->Driver.BlendEquationSeparate	= radeonBlendEquationSeparate;
-- 
cgit v1.2.3


From cc1464cce9613c7f48b630bddf5a6b9fa0d082da Mon Sep 17 00:00:00 2001
From: Alex Deucher <alexdeucher@gmail.com>
Date: Wed, 10 Mar 2010 04:19:42 -0500
Subject: r100: add additional blit formats

---
 src/mesa/drivers/dri/radeon/radeon_blit.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/radeon/radeon_blit.c b/src/mesa/drivers/dri/radeon/radeon_blit.c
index e1e1f21550..143822361e 100644
--- a/src/mesa/drivers/dri/radeon/radeon_blit.c
+++ b/src/mesa/drivers/dri/radeon/radeon_blit.c
@@ -48,6 +48,8 @@ unsigned r100_check_blit(gl_format mesa_format)
     case MESA_FORMAT_ARGB4444:
     case MESA_FORMAT_ARGB1555:
     case MESA_FORMAT_A8:
+    case MESA_FORMAT_L8:
+    case MESA_FORMAT_I8:
 	    break;
     default:
 	    return 0;
@@ -103,6 +105,9 @@ static void inline emit_tx_setup(struct r100_context *r100,
     case MESA_FORMAT_ARGB8888:
 	    txformat |= RADEON_TXFORMAT_ARGB8888 | RADEON_TXFORMAT_ALPHA_IN_MAP;
 	    break;
+    case MESA_FORMAT_RGBA8888:
+            txformat |= RADEON_TXFORMAT_RGBA8888 | RADEON_TXFORMAT_ALPHA_IN_MAP;
+            break;
     case MESA_FORMAT_XRGB8888:
 	    txformat |= RADEON_TXFORMAT_ARGB8888;
 	    break;
@@ -116,8 +121,15 @@ static void inline emit_tx_setup(struct r100_context *r100,
 	    txformat |= RADEON_TXFORMAT_ARGB1555 | RADEON_TXFORMAT_ALPHA_IN_MAP;
 	    break;
     case MESA_FORMAT_A8:
+    case MESA_FORMAT_I8:
 	    txformat |= RADEON_TXFORMAT_I8 | RADEON_TXFORMAT_ALPHA_IN_MAP;
 	    break;
+    case MESA_FORMAT_L8:
+            txformat |= RADEON_TXFORMAT_I8;
+            break;
+    case MESA_FORMAT_AL88:
+            txformat |= RADEON_TXFORMAT_AI88 | RADEON_TXFORMAT_ALPHA_IN_MAP;
+            break;
     default:
 	    break;
     }
@@ -177,6 +189,8 @@ static inline void emit_cb_setup(struct r100_context *r100,
 	    dst_format = RADEON_COLOR_FORMAT_ARGB1555;
 	    break;
     case MESA_FORMAT_A8:
+    case MESA_FORMAT_L8:
+    case MESA_FORMAT_I8:
 	    dst_format = RADEON_COLOR_FORMAT_RGB8;
 	    break;
     default:
-- 
cgit v1.2.3


From a840bf4146b7e06cc94eb59d8265fe6593b232c4 Mon Sep 17 00:00:00 2001
From: Alex Deucher <alexdeucher@gmail.com>
Date: Wed, 10 Mar 2010 04:31:56 -0500
Subject: r200: add additional blit formats

---
 src/mesa/drivers/dri/r200/r200_blit.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r200/r200_blit.c b/src/mesa/drivers/dri/r200/r200_blit.c
index 3075760093..55e8d32512 100644
--- a/src/mesa/drivers/dri/r200/r200_blit.c
+++ b/src/mesa/drivers/dri/r200/r200_blit.c
@@ -48,6 +48,8 @@ unsigned r200_check_blit(gl_format mesa_format)
     case MESA_FORMAT_ARGB4444:
     case MESA_FORMAT_ARGB1555:
     case MESA_FORMAT_A8:
+    case MESA_FORMAT_L8:
+    case MESA_FORMAT_I8:
 	    break;
     default:
 	    return 0;
@@ -105,6 +107,12 @@ static void inline emit_tx_setup(struct r200_context *r200,
     case MESA_FORMAT_ARGB8888:
 	    txformat |= R200_TXFORMAT_ARGB8888 | R200_TXFORMAT_ALPHA_IN_MAP;
 	    break;
+    case MESA_FORMAT_RGBA8888:
+	    txformat |= R200_TXFORMAT_RGBA8888 | R200_TXFORMAT_ALPHA_IN_MAP;
+	    break;
+    case MESA_FORMAT_RGBA8888_REV:
+	    txformat |= R200_TXFORMAT_ABGR8888 | R200_TXFORMAT_ALPHA_IN_MAP;
+	    break;
     case MESA_FORMAT_XRGB8888:
 	    txformat |= R200_TXFORMAT_ARGB8888;
 	    break;
@@ -118,8 +126,15 @@ static void inline emit_tx_setup(struct r200_context *r200,
 	    txformat |= R200_TXFORMAT_ARGB1555 | R200_TXFORMAT_ALPHA_IN_MAP;
 	    break;
     case MESA_FORMAT_A8:
+    case MESA_FORMAT_I8:
 	    txformat |= R200_TXFORMAT_I8 | R200_TXFORMAT_ALPHA_IN_MAP;
 	    break;
+    case MESA_FORMAT_L8:
+	    txformat |= R200_TXFORMAT_I8;
+	    break;
+    case MESA_FORMAT_AL88:
+	    txformat |= R200_TXFORMAT_AI88 | R200_TXFORMAT_ALPHA_IN_MAP;
+	    break;
     default:
 	    break;
     }
@@ -182,6 +197,8 @@ static inline void emit_cb_setup(struct r200_context *r200,
 	    dst_format = RADEON_COLOR_FORMAT_ARGB1555;
 	    break;
     case MESA_FORMAT_A8:
+    case MESA_FORMAT_L8:
+    case MESA_FORMAT_I8:
 	    dst_format = RADEON_COLOR_FORMAT_RGB8;
 	    break;
     default:
-- 
cgit v1.2.3


From c78ac7fcfa37a78b835fc596441a9fbe1e679e4a Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Wed, 10 Mar 2010 10:41:22 -0700
Subject: st/mesa: fix incorrect glDrawPixels into FBO

We weren't inverting the textured quad when drawing into an fbo.

(cherry picked from commit 8d3f629a13afb0d6acafc7a007972fdc5efe6847)
---
 src/mesa/state_tracker/st_cb_drawpixels.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c b/src/mesa/state_tracker/st_cb_drawpixels.c
index 98453321f8..5278309e32 100644
--- a/src/mesa/state_tracker/st_cb_drawpixels.c
+++ b/src/mesa/state_tracker/st_cb_drawpixels.c
@@ -405,7 +405,7 @@ make_texture(struct st_context *st,
 
 /**
  * Draw quad with texcoords and optional color.
- * Coords are window coords with y=0=bottom.
+ * Coords are gallium window coords with y=0=top.
  * \param color  may be null
  * \param invertTex  if true, flip texcoords vertically
  */
@@ -592,10 +592,15 @@ draw_textured_quad(GLcontext *ctx, GLint x, GLint y, GLfloat z,
       pipe->set_fragment_sampler_textures(pipe, 1, &pt);
    }
 
-   /* Compute window coords (y=0=bottom) with pixel zoom.
+   /* Compute Gallium window coords (y=0=top) with pixel zoom.
     * Recall that these coords are transformed by the current
     * vertex shader and viewport transformation.
     */
+   if (st_fb_orientation(ctx->DrawBuffer) == Y_0_BOTTOM) {
+      y = ctx->DrawBuffer->Height - (int) (y + height * ctx->Pixel.ZoomY);
+      invertTex = !invertTex;
+   }
+
    x0 = (GLfloat) x;
    x1 = x + width * ctx->Pixel.ZoomX;
    y0 = (GLfloat) y;
-- 
cgit v1.2.3


From b60aa251e4fb4dd32db3fe167e078bf0092cb726 Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Wed, 10 Mar 2010 10:42:22 -0700
Subject: st/mesa: fix incorrect glCopyPixels between window/FBO

There was a DrawBuffer/ReadBuffer typo and we were neglecting to invert
the texture coords when copying from a window to an FBO.

Plus, add some surface dump/debug code (disabled).

(cherry picked from commit 34f02071618624263eba839b5aeb930d0e794078)
---
 src/mesa/state_tracker/st_cb_drawpixels.c | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c b/src/mesa/state_tracker/st_cb_drawpixels.c
index 5278309e32..43dc8d1b83 100644
--- a/src/mesa/state_tracker/st_cb_drawpixels.c
+++ b/src/mesa/state_tracker/st_cb_drawpixels.c
@@ -937,6 +937,7 @@ st_CopyPixels(GLcontext *ctx, GLint srcx, GLint srcy,
    GLfloat *color;
    enum pipe_format srcFormat, texFormat;
    int ptw, pth;
+   GLboolean invertTex = GL_FALSE;
 
    pipe->flush(pipe, PIPE_FLUSH_RENDER_CACHE, NULL);
 
@@ -1012,8 +1013,8 @@ st_CopyPixels(GLcontext *ctx, GLint srcx, GLint srcy,
       }
    }
 
-   if (st_fb_orientation(ctx->DrawBuffer) == Y_0_TOP) {
-      srcy = ctx->DrawBuffer->Height - srcy - height;
+   if (st_fb_orientation(ctx->ReadBuffer) == Y_0_TOP) {
+      srcy = ctx->ReadBuffer->Height - srcy - height;
 
       if (srcy < 0) {
          height -= -srcy;
@@ -1022,6 +1023,8 @@ st_CopyPixels(GLcontext *ctx, GLint srcx, GLint srcy,
 
       if (height < 0)
          return;
+
+      invertTex = !invertTex;
    }
 
    /* Need to use POT texture? */
@@ -1051,7 +1054,9 @@ st_CopyPixels(GLcontext *ctx, GLint srcx, GLint srcy,
    if (!pt)
       return;
 
-
+   /* Make temporary texture which is a copy of the src region.
+    * We'll draw a quad with this texture to draw the dest image.
+    */
    if (srcFormat == texFormat) {
       /* copy source framebuffer surface into mipmap/texture */
       struct pipe_surface *psRead = screen->get_tex_surface(screen,
@@ -1072,6 +1077,13 @@ st_CopyPixels(GLcontext *ctx, GLint srcx, GLint srcy,
                            psRead,
                            srcx, srcy, width, height);
       }
+
+      if (0) {
+         /* debug */
+         debug_dump_surface("copypixsrcsurf", psRead);
+         debug_dump_surface("copypixtemptex", psTex);
+      }
+
       pipe_surface_reference(&psRead, NULL); 
       pipe_surface_reference(&psTex, NULL);
    }
@@ -1122,7 +1134,7 @@ st_CopyPixels(GLcontext *ctx, GLint srcx, GLint srcy,
                       pt, 
                       driver_vp, 
                       driver_fp,
-                      color, GL_TRUE);
+                      color, invertTex);
 
    pipe_texture_reference(&pt, NULL);
 }
-- 
cgit v1.2.3


From a2fe774e0985358a125c5c2e7b89a6b0bc0914d1 Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Wed, 10 Mar 2010 10:48:10 -0700
Subject: st/mesa: consolidate duplicated texture allocation code

---
 src/mesa/state_tracker/st_cb_drawpixels.c | 98 +++++++++++++++----------------
 1 file changed, 49 insertions(+), 49 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c b/src/mesa/state_tracker/st_cb_drawpixels.c
index 5f23e8afed..8eb76f4131 100644
--- a/src/mesa/state_tracker/st_cb_drawpixels.c
+++ b/src/mesa/state_tracker/st_cb_drawpixels.c
@@ -292,6 +292,51 @@ base_format(GLenum format)
 }
 
 
+/**
+ * Create a temporary texture to hold an image of the given size.
+ * If width, height are not POT and the driver only handles POT textures,
+ * allocate the next larger size of texture that is POT.
+ */
+static struct pipe_texture *
+alloc_texture(struct st_context *st, GLsizei width, GLsizei height,
+              enum pipe_format texFormat)
+{
+   struct pipe_context *pipe = st->pipe;
+   struct pipe_screen *screen = pipe->screen;
+   struct pipe_texture *pt;
+   int ptw, pth;
+
+   ptw = width;
+   pth = height;
+
+   /* Need to use POT texture? */
+   if (!screen->get_param(screen, PIPE_CAP_NPOT_TEXTURES)) {
+      int l2pt, maxSize;
+
+      l2pt = util_logbase2(width);
+      if (1 << l2pt != width) {
+         ptw = 1 << (l2pt + 1);
+      }
+
+      l2pt = util_logbase2(height);
+      if (1 << l2pt != height) {
+         pth = 1 << (l2pt + 1);
+      }
+
+      /* Check against maximum texture size */
+      maxSize = 1 << (pipe->screen->get_param(pipe->screen,
+                               PIPE_CAP_MAX_TEXTURE_2D_LEVELS) - 1);
+      assert(ptw <= maxSize);
+      assert(pth <= maxSize);
+   }
+
+   pt = st_texture_create(st, PIPE_TEXTURE_2D, texFormat, 0,
+                          ptw, pth, 1, PIPE_TEXTURE_USAGE_SAMPLER);
+
+   return pt;
+}
+
+
 /**
  * Make texture containing an image for glDrawPixels image.
  * If 'pixels' is NULL, leave the texture image data undefined.
@@ -310,7 +355,6 @@ make_texture(struct st_context *st,
    enum pipe_format pipeFormat;
    GLuint cpp;
    GLenum baseFormat;
-   int ptw, pth;
 
    baseFormat = base_format(format);
 
@@ -325,29 +369,8 @@ make_texture(struct st_context *st,
    if (!pixels)
       return NULL;
 
-   /* Need to use POT texture? */
-   ptw = width;
-   pth = height;
-   if (!screen->get_param(screen, PIPE_CAP_NPOT_TEXTURES)) {
-      int l2pt, maxSize;
-
-      l2pt = util_logbase2(width);
-      if (1<<l2pt != width) {
-         ptw = 1<<(l2pt+1);
-      }
-      l2pt = util_logbase2(height);
-      if (1<<l2pt != height) {
-         pth = 1<<(l2pt+1);
-      }
-
-      /* Check against maximum texture size */
-      maxSize = 1 << (pipe->screen->get_param(pipe->screen, PIPE_CAP_MAX_TEXTURE_2D_LEVELS) - 1);
-      assert(ptw <= maxSize);
-      assert(pth <= maxSize);
-   }
-
-   pt = st_texture_create(st, PIPE_TEXTURE_2D, pipeFormat, 0, ptw, pth, 1,
-                          PIPE_TEXTURE_USAGE_SAMPLER);
+   /* alloc temporary texture */
+   pt = alloc_texture(st, width, height, pipeFormat);
    if (!pt) {
       _mesa_unmap_pbo_source(ctx, unpack);
       return NULL;
@@ -940,7 +963,6 @@ st_CopyPixels(GLcontext *ctx, GLint srcx, GLint srcy,
    struct pipe_texture *pt;
    GLfloat *color;
    enum pipe_format srcFormat, texFormat;
-   int ptw, pth;
    GLboolean invertTex = GL_FALSE;
 
    pipe->flush(pipe, PIPE_FLUSH_RENDER_CACHE, NULL);
@@ -1031,30 +1053,8 @@ st_CopyPixels(GLcontext *ctx, GLint srcx, GLint srcy,
       invertTex = !invertTex;
    }
 
-   /* Need to use POT texture? */
-   ptw = width;
-   pth = height;
-   if (!screen->get_param(screen, PIPE_CAP_NPOT_TEXTURES)) {
-      int l2pt, maxSize;
-
-      l2pt = util_logbase2(width);
-      if (1<<l2pt != width) {
-         ptw = 1<<(l2pt+1);
-      }
-      l2pt = util_logbase2(height);
-      if (1<<l2pt != height) {
-         pth = 1<<(l2pt+1);
-      }
-
-      /* Check against maximum texture size */
-      maxSize = 1 << (pipe->screen->get_param(pipe->screen, PIPE_CAP_MAX_TEXTURE_2D_LEVELS) - 1);
-      assert(ptw <= maxSize);
-      assert(pth <= maxSize);
-   }
-
-   pt = st_texture_create(st, PIPE_TEXTURE_2D, texFormat, 0,
-                          ptw, pth, 1,
-                          PIPE_TEXTURE_USAGE_SAMPLER);
+   /* alloc temporary texture */
+   pt = alloc_texture(st, width, height, texFormat);
    if (!pt)
       return;
 
-- 
cgit v1.2.3


From 9543b0a1eaf936dd75f2167c4cfcbdf1a0cda568 Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Wed, 10 Mar 2010 10:49:18 -0700
Subject: st/mesa: add some comments in glReadPixels code

---
 src/mesa/state_tracker/st_cb_readpixels.c | 7 +++++++
 1 file changed, 7 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/state_tracker/st_cb_readpixels.c b/src/mesa/state_tracker/st_cb_readpixels.c
index 952d9ce915..8cc9cfac76 100644
--- a/src/mesa/state_tracker/st_cb_readpixels.c
+++ b/src/mesa/state_tracker/st_cb_readpixels.c
@@ -241,6 +241,7 @@ st_fast_readpixels(GLcontext *ctx, struct st_renderbuffer *strb,
       GLint row, col, dy, dstStride;
 
       if (st_fb_orientation(ctx->ReadBuffer) == Y_0_TOP) {
+         /* convert GL Y to Gallium Y */
          y = strb->texture->height0 - y - height;
       }
 
@@ -258,11 +259,16 @@ st_fast_readpixels(GLcontext *ctx, struct st_renderbuffer *strb,
          return GL_FALSE;
       }
 
+      /* We always write to the user/dest buffer from low addr to high addr
+       * but the read order depends on renderbuffer orientation
+       */
       if (st_fb_orientation(ctx->ReadBuffer) == Y_0_TOP) {
+         /* read source rows from bottom to top */
          y = height - 1;
          dy = -1;
       }
       else {
+         /* read source rows from top to bottom */
          y = 0;
          dy = 1;
       }
@@ -396,6 +402,7 @@ st_readpixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height,
    }
 
    if (st_fb_orientation(ctx->ReadBuffer) == Y_0_TOP) {
+      /* convert GL Y to Gallium Y */
       y = strb->Base.Height - y - height;
    }
 
-- 
cgit v1.2.3


From 06c44e852f4b38db03772adec769854b2f3096f6 Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Wed, 10 Mar 2010 10:50:17 -0700
Subject: st/mesa: set strb->format field in st_render_texture()

This fixes a problem in glReadPixels when reading from an FBO's texture
attachment.  We have a better chance at hitting a fast path for
glReadPixels now.
---
 src/mesa/state_tracker/st_cb_fbo.c | 2 ++
 1 file changed, 2 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c
index 00e9d1dccb..abf0c8d6cb 100644
--- a/src/mesa/state_tracker/st_cb_fbo.c
+++ b/src/mesa/state_tracker/st_cb_fbo.c
@@ -379,6 +379,8 @@ st_render_texture(GLcontext *ctx,
                                            PIPE_BUFFER_USAGE_GPU_READ |
                                            PIPE_BUFFER_USAGE_GPU_WRITE);
 
+   strb->format = pt->format;
+
    strb->Base.Format = st_pipe_format_to_mesa_format(pt->format);
    strb->Base.DataType = st_format_datatype(pt->format);
 
-- 
cgit v1.2.3


From b318039e9a790d9d90bd524c79af2d9a444d0093 Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Wed, 10 Mar 2010 10:53:21 -0700
Subject: mesa: added new function comments

---
 src/mesa/main/framebuffer.c | 8 ++++++++
 1 file changed, 8 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/main/framebuffer.c b/src/mesa/main/framebuffer.c
index 6a85162d5d..5a654e5c2a 100644
--- a/src/mesa/main/framebuffer.c
+++ b/src/mesa/main/framebuffer.c
@@ -986,6 +986,10 @@ _mesa_dest_buffer_exists(GLcontext *ctx, GLenum format)
    return GL_TRUE;
 }
 
+
+/**
+ * Used to answer the GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES query.
+ */
 GLenum
 _mesa_get_color_read_format(GLcontext *ctx)
 {
@@ -999,6 +1003,10 @@ _mesa_get_color_read_format(GLcontext *ctx)
    }
 }
 
+
+/**
+ * Used to answer the GL_IMPLEMENTATION_COLOR_READ_TYPE_OES query.
+ */
 GLenum
 _mesa_get_color_read_type(GLcontext *ctx)
 {
-- 
cgit v1.2.3


From 7a2e32d68494b82813ea6a07bb62d1c21202cad1 Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Wed, 10 Mar 2010 10:54:24 -0700
Subject: mesa: raise an error when trying to bind non-existant texture to FBO

If the user calls glRenderBufferTexture(texture=N) but texture N
doesn't name an existing texture, raise GL_INVALID_ENUM.

Plus, add a comment about some questionable error checking code in
framebuffer_texture().  Ian?
---
 src/mesa/main/fbobject.c | 8 ++++++++
 1 file changed, 8 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
index 14c533e0d4..7c442e390c 100644
--- a/src/mesa/main/fbobject.c
+++ b/src/mesa/main/fbobject.c
@@ -1549,6 +1549,7 @@ framebuffer_texture(GLcontext *ctx, const char *caller, GLenum target,
       texObj = _mesa_lookup_texture(ctx, texture);
       if (texObj != NULL) {
          if (textarget == 0) {
+            /* XXX what's the purpose of this? */
             err = (texObj->Target != GL_TEXTURE_3D) &&
                 (texObj->Target != GL_TEXTURE_1D_ARRAY_EXT) &&
                 (texObj->Target != GL_TEXTURE_2D_ARRAY_EXT);
@@ -1559,6 +1560,13 @@ framebuffer_texture(GLcontext *ctx, const char *caller, GLenum target,
                 : (texObj->Target != textarget);
          }
       }
+      else {
+         /* can't render to a non-existant texture */
+         _mesa_error(ctx, GL_INVALID_OPERATION,
+                     "glFramebufferTexture%sEXT(non existant texture)",
+                     caller);
+         return;
+      }
 
       if (err) {
          _mesa_error(ctx, GL_INVALID_OPERATION,
-- 
cgit v1.2.3


From c8ef7a09664d29dac682b953eb66efaebbdd6fd7 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Wed, 10 Mar 2010 09:31:49 -0800
Subject: i965: Print the offset for IFF in disasm

---
 src/mesa/drivers/dri/i965/brw_disasm.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_disasm.c b/src/mesa/drivers/dri/i965/brw_disasm.c
index 54699cf8d3..4d25152efc 100644
--- a/src/mesa/drivers/dri/i965/brw_disasm.c
+++ b/src/mesa/drivers/dri/i965/brw_disasm.c
@@ -73,7 +73,7 @@ struct {
     [BRW_OPCODE_NOP] = { .name = "nop", .nsrc = 0, .ndst = 0 },
     [BRW_OPCODE_JMPI] = { .name = "jmpi", .nsrc = 1, .ndst = 0 },
     [BRW_OPCODE_IF] = { .name = "if", .nsrc = 2, .ndst = 0 },
-    [BRW_OPCODE_IFF] = { .name = "iff", .nsrc = 1, .ndst = 01 },
+    [BRW_OPCODE_IFF] = { .name = "iff", .nsrc = 2, .ndst = 1 },
     [BRW_OPCODE_WHILE] = { .name = "while", .nsrc = 2, .ndst = 0 },
     [BRW_OPCODE_ELSE] = { .name = "else", .nsrc = 2, .ndst = 0 },
     [BRW_OPCODE_BREAK] = { .name = "break", .nsrc = 2, .ndst = 0 },
-- 
cgit v1.2.3


From f6d210c284751ac50a8d6358de7e75a1ff1e4ac7 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Wed, 10 Mar 2010 10:38:20 -0800
Subject: i965: Fix the response len of masked sampler messages for 8-wide
 dispatch.

The bad response length would hang the GPU with a masked sample in a
shader using control flow.  For 8-wide, the response length is always
4, and masked slots are just not written to.  brw_wm_glsl.c already
allocates registers in the right locations.

Fixes piglit glsl-fs-bug25902 (fd.o bug #25902).
---
 src/mesa/drivers/dri/i965/brw_eu_emit.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_eu_emit.c b/src/mesa/drivers/dri/i965/brw_eu_emit.c
index f69d529613..40c1b71998 100644
--- a/src/mesa/drivers/dri/i965/brw_eu_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_eu_emit.c
@@ -1290,7 +1290,11 @@ void brw_SAMPLE(struct brw_compile *p,
 		GLuint simd_mode)
 {
    GLboolean need_stall = 0;
-   
+   GLboolean dispatch_16 = GL_FALSE;
+
+   if (p->current->header.execution_size == BRW_EXECUTE_16)
+      dispatch_16 = GL_TRUE;
+
    if (writemask == 0) {
       /*printf("%s: zero writemask??\n", __FUNCTION__); */
       return;
@@ -1343,7 +1347,13 @@ void brw_SAMPLE(struct brw_compile *p,
 
   	 src0 = retype(brw_null_reg(), BRW_REGISTER_TYPE_UW); 
 	 dest = offset(dest, dst_offset);
-	 response_length = len * 2;
+
+	 /* For 16-wide dispatch, masked channels are skipped in the
+	  * response.  For 8-wide, masked channels still take up slots,
+	  * and are just not written to.
+	  */
+	 if (dispatch_16)
+	    response_length = len * 2;
       }
    }
 
-- 
cgit v1.2.3


From f77c1cd7df805f097958a5b83d235f8a8ad693b1 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Wed, 10 Mar 2010 10:51:13 -0800
Subject: i965: Print the opcode name for unrecognized opcodes in the GLSL
 path.

---
 src/mesa/drivers/dri/i965/brw_wm_glsl.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_wm_glsl.c b/src/mesa/drivers/dri/i965/brw_wm_glsl.c
index ea3c2405af..14caf24e4b 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_glsl.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_glsl.c
@@ -2026,8 +2026,9 @@ static void brw_wm_emit_glsl(struct brw_context *brw, struct brw_wm_compile *c)
                }
                break;
 	    default:
-		printf("unsupported IR in fragment shader %d\n",
-			inst->Opcode);
+		printf("unsupported opcode %d (%s) in fragment shader\n",
+		       inst->Opcode, inst->Opcode < MAX_OPCODE ?
+		       _mesa_opcode_string(inst->Opcode) : "unknown");
 	}
 
 	/* Release temporaries containing any unaliased source regs. */
-- 
cgit v1.2.3


From 48dca99feb394febc3af44e14f23fb12a9cc9204 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Wed, 10 Mar 2010 11:00:40 -0800
Subject: i965: Add support for the CMP opcode in the GLSL path.

This would be triggered by use of sqrt() along with control flow.
Fixes piglit-fs-sqrt-branch and a bug in Yo Frankie!.
---
 src/mesa/drivers/dri/i965/brw_wm.h      |  6 ++++++
 src/mesa/drivers/dri/i965/brw_wm_emit.c | 12 ++++++------
 src/mesa/drivers/dri/i965/brw_wm_glsl.c |  3 +++
 3 files changed, 15 insertions(+), 6 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_wm.h b/src/mesa/drivers/dri/i965/brw_wm.h
index 88d84ee82f..47b764d24d 100644
--- a/src/mesa/drivers/dri/i965/brw_wm.h
+++ b/src/mesa/drivers/dri/i965/brw_wm.h
@@ -328,6 +328,12 @@ void emit_cinterp(struct brw_compile *p,
 		  const struct brw_reg *dst,
 		  GLuint mask,
 		  const struct brw_reg *arg0);
+void emit_cmp(struct brw_compile *p,
+	      const struct brw_reg *dst,
+	      GLuint mask,
+	      const struct brw_reg *arg0,
+	      const struct brw_reg *arg1,
+	      const struct brw_reg *arg2);
 void emit_ddxy(struct brw_compile *p,
 	       const struct brw_reg *dst,
 	       GLuint mask,
diff --git a/src/mesa/drivers/dri/i965/brw_wm_emit.c b/src/mesa/drivers/dri/i965/brw_wm_emit.c
index 9315bca315..c7d87b9d94 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_emit.c
@@ -566,12 +566,12 @@ static void emit_sne( struct brw_compile *p,
    emit_sop(p, dst, mask, BRW_CONDITIONAL_NEQ, arg0, arg1);
 }
 
-static void emit_cmp( struct brw_compile *p, 
-		      const struct brw_reg *dst,
-		      GLuint mask,
-		      const struct brw_reg *arg0,
-		      const struct brw_reg *arg1,
-		      const struct brw_reg *arg2 )
+void emit_cmp(struct brw_compile *p,
+	      const struct brw_reg *dst,
+	      GLuint mask,
+	      const struct brw_reg *arg0,
+	      const struct brw_reg *arg1,
+	      const struct brw_reg *arg2)
 {
    GLuint i;
 
diff --git a/src/mesa/drivers/dri/i965/brw_wm_glsl.c b/src/mesa/drivers/dri/i965/brw_wm_glsl.c
index 14caf24e4b..af249452b9 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_glsl.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_glsl.c
@@ -1869,6 +1869,9 @@ static void brw_wm_emit_glsl(struct brw_context *brw, struct brw_wm_compile *c)
 	    case OPCODE_LG2:
 		emit_math1(c, BRW_MATH_FUNCTION_LOG, dst, dst_flags, args[0]);
 		break;
+	    case OPCODE_CMP:
+		emit_cmp(p, dst, dst_flags, args[0], args[1], args[2]);
+		break;
 	    case OPCODE_MIN:	
 		emit_min(p, dst, dst_flags, args[0], args[1]);
 		break;
-- 
cgit v1.2.3


From a68e8a4eaadfe2a1e4999d5e378c7d9fa99dc656 Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Wed, 10 Mar 2010 20:53:21 +0100
Subject: radeon: fix glCopyTex(Sub)Image if user FBO is bound

Fixes piglit/fbo-blit and wine d3d9 unit test.
---
 src/mesa/drivers/dri/radeon/radeon_tex_copy.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/radeon/radeon_tex_copy.c b/src/mesa/drivers/dri/radeon/radeon_tex_copy.c
index 5cfad6fc3c..e57d77e7ef 100644
--- a/src/mesa/drivers/dri/radeon/radeon_tex_copy.c
+++ b/src/mesa/drivers/dri/radeon/radeon_tex_copy.c
@@ -52,15 +52,18 @@ do_copy_texsubimage(GLcontext *ctx,
     gl_format dst_mesaformat;
     unsigned src_width;
     unsigned dst_width;
+    unsigned flip_y;
 
     if (!radeon->vtbl.blit) {
         return GL_FALSE;
     }
 
     if (_mesa_get_format_bits(timg->base.TexFormat, GL_DEPTH_BITS) > 0) {
-        rrb = radeon_get_depthbuffer(radeon);
+        rrb = radeon_renderbuffer(ctx->ReadBuffer->_DepthBuffer);
+        flip_y = ctx->ReadBuffer->Attachment[BUFFER_DEPTH].Type == GL_NONE;
     } else {
-        rrb = radeon_get_colorbuffer(radeon);
+        rrb = radeon_renderbuffer(ctx->ReadBuffer->_ColorReadBuffer);
+        flip_y = ctx->ReadBuffer->Attachment[BUFFER_COLOR0].Type == GL_NONE;
     }
 
     if (!timg->mt) {
@@ -124,7 +127,7 @@ do_copy_texsubimage(GLcontext *ctx,
                              timg->mt->bo, dst_offset, dst_mesaformat,
                              timg->mt->levels[level].rowstride / dst_bpp,
                              dst_width, timg->base.Height,
-                             dstx, dsty, width, height, 1);
+                             dstx, dsty, width, height, flip_y);
 }
 
 void
-- 
cgit v1.2.3


From addedd091e81907837b3aa0680b242b8fdbde7ef Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Wed, 10 Mar 2010 22:28:53 +0100
Subject: r300: enable depth test only if depth buffer is available

Fixes #23532 and piglit/fbo-nodepth-test piglit/fbo-nostencil-test
---
 src/mesa/drivers/dri/r300/r300_state.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r300/r300_state.c b/src/mesa/drivers/dri/r300/r300_state.c
index 8748941241..e75c88e101 100644
--- a/src/mesa/drivers/dri/r300/r300_state.c
+++ b/src/mesa/drivers/dri/r300/r300_state.c
@@ -590,7 +590,7 @@ static void r300SetDepthState(GLcontext * ctx)
 					    R500_STENCIL_REFMASK_FRONT_BACK);
 	r300->hw.zs.cmd[R300_ZS_CNTL_1] &= ~(R300_ZS_MASK << R300_Z_FUNC_SHIFT);
 
-	if (ctx->Depth.Test) {
+	if (ctx->Depth.Test && ctx->DrawBuffer->_DepthBuffer) {
 		r300->hw.zs.cmd[R300_ZS_CNTL_0] |= R300_Z_ENABLE;
 		if (ctx->Depth.Mask)
 			r300->hw.zs.cmd[R300_ZS_CNTL_0] |= R300_Z_WRITE_ENABLE;
-- 
cgit v1.2.3


From 3198cd4a65b135005515c6dd35d006330ce31c94 Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Wed, 10 Mar 2010 22:31:53 +0100
Subject: radeon: fallback to sw ReadPixels if color logicop is enabled

Fixes glean/logicOp (regressed after introducing hw accelerated support for ReadPixels)
---
 src/mesa/drivers/dri/radeon/radeon_pixel_read.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/radeon/radeon_pixel_read.c b/src/mesa/drivers/dri/radeon/radeon_pixel_read.c
index 27841938e6..b180c1d9a5 100644
--- a/src/mesa/drivers/dri/radeon/radeon_pixel_read.c
+++ b/src/mesa/drivers/dri/radeon/radeon_pixel_read.c
@@ -96,7 +96,7 @@ do_blit_readpixels(GLcontext * ctx,
         return GL_FALSE;
     }
 
-    if (ctx->_ImageTransferState) {
+    if (ctx->_ImageTransferState || ctx->Color._LogicOpEnabled) {
         return GL_FALSE;
     }
 
-- 
cgit v1.2.3


From 60121c41ce9ee50ff8d8476d4eb04867adf9b8c5 Mon Sep 17 00:00:00 2001
From: Karl Schultz <karl.w.schultz@gmail.com>
Date: Wed, 10 Mar 2010 15:58:10 -0700
Subject: windows: fix compilation errors and warnings

---
 src/mesa/drivers/windows/gdi/wmesa.c    | 27 ++++++++-------------------
 src/mesa/drivers/windows/gdi/wmesadef.h |  2 +-
 src/mesa/swrast/s_span.c                |  2 +-
 windows/VC8/mesa/.gitignore             | 30 ++++++++++++++++++++++++++++++
 windows/VC8/progs/.gitignore            | 17 +++++++++++++++++
 5 files changed, 57 insertions(+), 21 deletions(-)
 create mode 100644 windows/VC8/mesa/.gitignore
 create mode 100644 windows/VC8/progs/.gitignore

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/windows/gdi/wmesa.c b/src/mesa/drivers/windows/gdi/wmesa.c
index 91ddc3615a..22b0c46b4f 100644
--- a/src/mesa/drivers/windows/gdi/wmesa.c
+++ b/src/mesa/drivers/windows/gdi/wmesa.c
@@ -247,16 +247,6 @@ static void wmesa_flush(GLcontext *ctx)
  * span writing interface, which is very slow for a clear operation.
  */
 
-/*
- * Set the color index used to clear the color buffer.
- */
-static void clear_index(GLcontext *ctx, GLuint index)
-{
-    WMesaContext pwc = wmesa_context(ctx);
-    /* Note that indexed mode is not supported yet */
-    pwc->clearColorRef = RGB(0,0,0);
-}
-
 /*
  * Set the color used to clear the color buffer.
  */
@@ -482,7 +472,7 @@ static void write_rgba_span_front(const GLcontext *ctx,
       };
    } BGRA;
    BGRA *bgra, c;
-   int i;
+   GLuint i;
 
    if (n < 16) {   // the value 16 is just guessed
       y=FLIP(y);
@@ -827,9 +817,9 @@ static void read_rgba_span_32(const GLcontext *ctx,
     lpdw = ((LPDWORD)(pwfb->pbPixels + pwfb->ScanWidth * y)) + x;
     for (i=0; i<n; i++) {
 	pixel = lpdw[i];
-	rgba[i][RCOMP] = (pixel & 0x00ff0000) >> 16;
-	rgba[i][GCOMP] = (pixel & 0x0000ff00) >> 8;
-	rgba[i][BCOMP] = (pixel & 0x000000ff);
+	rgba[i][RCOMP] = (GLubyte)((pixel & 0x00ff0000) >> 16);
+	rgba[i][GCOMP] = (GLubyte)((pixel & 0x0000ff00) >> 8);
+	rgba[i][BCOMP] = (GLubyte)(pixel & 0x000000ff);
 	rgba[i][ACOMP] = 255;
     }
 }
@@ -851,9 +841,9 @@ static void read_rgba_pixels_32(const GLcontext *ctx,
 	GLint y2 = FLIP(y[i]);
 	lpdw = ((LPDWORD)(pwfb->pbPixels + pwfb->ScanWidth * y2)) + x[i];
 	pixel = *lpdw;
-	rgba[i][RCOMP] = (pixel & 0x00ff0000) >> 16;
-	rgba[i][GCOMP] = (pixel & 0x0000ff00) >> 8;
-	rgba[i][BCOMP] = (pixel & 0x000000ff);
+	rgba[i][RCOMP] = (GLubyte)((pixel & 0x00ff0000) >> 16);
+	rgba[i][GCOMP] = (GLubyte)((pixel & 0x0000ff00) >> 8);
+	rgba[i][BCOMP] = (GLubyte)(pixel & 0x000000ff);
 	rgba[i][ACOMP] = 255;
   }
 }
@@ -1271,7 +1261,7 @@ wmesa_renderbuffer_storage(GLcontext *ctx,
  * on if we're drawing to the front or back color buffer.
  */
 void wmesa_set_renderbuffer_funcs(struct gl_renderbuffer *rb, int pixelformat,
-                                  BYTE cColorBits, int double_buffer)
+                                  int cColorBits, int double_buffer)
 {
     if (double_buffer) {
         /* back buffer */
@@ -1483,7 +1473,6 @@ WMesaContext WMesaCreateContext(HDC hDC,
     functions.GetBufferSize = wmesa_get_buffer_size;
     functions.Flush = wmesa_flush;
     functions.Clear = clear;
-    functions.ClearIndex = clear_index;
     functions.ClearColor = clear_color;
     functions.ResizeBuffers = wmesa_resize_buffers;
     functions.Viewport = wmesa_viewport;
diff --git a/src/mesa/drivers/windows/gdi/wmesadef.h b/src/mesa/drivers/windows/gdi/wmesadef.h
index 83a42e6082..1c0e245111 100644
--- a/src/mesa/drivers/windows/gdi/wmesadef.h
+++ b/src/mesa/drivers/windows/gdi/wmesadef.h
@@ -27,7 +27,7 @@ struct wmesa_framebuffer
     HDC                 hDC;
     int			pixelformat;
     GLuint		ScanWidth;
-    BYTE		cColorBits;
+    int			cColorBits;
     /* back buffer DIB fields */
     HDC                 dib_hDC;
     BITMAPINFO          bmi;
diff --git a/src/mesa/swrast/s_span.c b/src/mesa/swrast/s_span.c
index 29f070686f..687c8eb0bf 100644
--- a/src/mesa/swrast/s_span.c
+++ b/src/mesa/swrast/s_span.c
@@ -60,6 +60,7 @@
 void
 _swrast_span_default_attribs(GLcontext *ctx, SWspan *span)
 {
+   GLchan r, g, b, a;
    /* Z*/
    {
       const GLfloat depthMax = ctx->DrawBuffer->_DepthMaxF;
@@ -80,7 +81,6 @@ _swrast_span_default_attribs(GLcontext *ctx, SWspan *span)
    span->attrStepY[FRAG_ATTRIB_WPOS][3] = 0.0;
 
    /* primary color, or color index */
-   GLchan r, g, b, a;
    UNCLAMPED_FLOAT_TO_CHAN(r, ctx->Current.RasterColor[0]);
    UNCLAMPED_FLOAT_TO_CHAN(g, ctx->Current.RasterColor[1]);
    UNCLAMPED_FLOAT_TO_CHAN(b, ctx->Current.RasterColor[2]);
diff --git a/windows/VC8/mesa/.gitignore b/windows/VC8/mesa/.gitignore
new file mode 100644
index 0000000000..d89aab109b
--- /dev/null
+++ b/windows/VC8/mesa/.gitignore
@@ -0,0 +1,30 @@
+debug/
+debug static crt/
+release/
+release static crt/
+gdi/Debug/
+gdi/Debug Static CRT/
+gdi/Release/
+gdi/Release Static CRT/
+gdi/*.user
+glsl_apps_compile/Debug
+glsl_apps_compile/Release
+glsl_apps_compile/*.user
+glu/Debug/
+glu/Debug Static CRT/
+glu/Release/
+glu/Release Static CRT/
+glu/*.user
+mesa.ncb
+mesa.suo
+mesa/Debug/
+mesa/Debug Static CRT/
+mesa/Release/
+mesa/Release Static CRT/
+mesa/*.user
+osmesa/Debug/
+osmesa/Debug Static CRT/
+osmesa/Release/
+osmesa/Release Static CRT/
+osmesa/*.user
+
diff --git a/windows/VC8/progs/.gitignore b/windows/VC8/progs/.gitignore
new file mode 100644
index 0000000000..b1d3677c1b
--- /dev/null
+++ b/windows/VC8/progs/.gitignore
@@ -0,0 +1,17 @@
+debug/
+debug static crt/
+release/
+release static crt/
+demos/Debug/
+demos/Debug Static CRT/
+demos/Release/
+demos/Release Static CRT/
+demos/*.user
+glut/Debug/
+glut/Debug Static CRT/
+glut/Release/
+glut/Release Static CRT/
+glut/*.user
+progs.ncb
+progs.suo
+
-- 
cgit v1.2.3


From dc8c0359448cdae7b367552ba58783c04b199778 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Wed, 10 Mar 2010 13:51:24 -0800
Subject: i965: Set up the execution size before relying on it.

Fixes hangs with texturing in the non-GLSL path since
f6d210c284751ac50a8d6358de7e75a1ff1e4ac7
---
 src/mesa/drivers/dri/i965/brw_eu_emit.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_eu_emit.c b/src/mesa/drivers/dri/i965/brw_eu_emit.c
index 40c1b71998..82f2fdab2f 100644
--- a/src/mesa/drivers/dri/i965/brw_eu_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_eu_emit.c
@@ -1290,10 +1290,6 @@ void brw_SAMPLE(struct brw_compile *p,
 		GLuint simd_mode)
 {
    GLboolean need_stall = 0;
-   GLboolean dispatch_16 = GL_FALSE;
-
-   if (p->current->header.execution_size == BRW_EXECUTE_16)
-      dispatch_16 = GL_TRUE;
 
    if (writemask == 0) {
       /*printf("%s: zero writemask??\n", __FUNCTION__); */
@@ -1331,8 +1327,14 @@ void brw_SAMPLE(struct brw_compile *p,
          /* printf("need stall %x %x\n", newmask , writemask); */
       }
       else {
+	 GLboolean dispatch_16 = GL_FALSE;
+
 	 struct brw_reg m1 = brw_message_reg(msg_reg_nr);
-	 
+
+	 guess_execution_size(p->current, dest);
+	 if (p->current->header.execution_size == BRW_EXECUTE_16)
+	    dispatch_16 = GL_TRUE;
+
 	 newmask = ~newmask & WRITEMASK_XYZW;
 
 	 brw_push_insn_state(p);
-- 
cgit v1.2.3


From 56ff30a9f97a1a7094432333906544d6138d6bf2 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Wed, 10 Mar 2010 14:46:27 -0800
Subject: i965: Use the PLN instruction when possible in interpolation.

Saves an instruction in PINTERP, LINTERP, and PIXEL_W from
brw_wm_glsl.c For non-GLSL it isn't used yet because the deltas have
to be laid out differently.
---
 src/mesa/drivers/dri/i965/brw_context.c |  1 +
 src/mesa/drivers/dri/i965/brw_context.h |  1 +
 src/mesa/drivers/dri/i965/brw_defines.h |  1 +
 src/mesa/drivers/dri/i965/brw_disasm.c  |  1 +
 src/mesa/drivers/dri/i965/brw_eu.h      |  1 +
 src/mesa/drivers/dri/i965/brw_eu_emit.c |  2 +-
 src/mesa/drivers/dri/i965/brw_wm_emit.c | 44 ++++++++++++++++++++++++++++-----
 src/mesa/drivers/dri/i965/brw_wm_glsl.c | 38 ++++++++++++++++++++++++++++
 8 files changed, 82 insertions(+), 7 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c
index a512896f31..241193c357 100644
--- a/src/mesa/drivers/dri/i965/brw_context.c
+++ b/src/mesa/drivers/dri/i965/brw_context.c
@@ -156,6 +156,7 @@ GLboolean brwCreateContext( const __GLcontextModes *mesaVis,
       brw->has_surface_tile_offset = GL_TRUE;
       brw->has_compr4 = GL_TRUE;
       brw->has_aa_line_parameters = GL_TRUE;
+      brw->has_pln = GL_TRUE;
   } else {
       brw->CMD_VF_STATISTICS = CMD_VF_STATISTICS_965;
       brw->CMD_PIPELINE_SELECT = CMD_PIPELINE_SELECT_965;
diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h
index d6fc37e4d8..2855c93ea6 100644
--- a/src/mesa/drivers/dri/i965/brw_context.h
+++ b/src/mesa/drivers/dri/i965/brw_context.h
@@ -446,6 +446,7 @@ struct brw_context
    GLboolean has_compr4;
    GLboolean has_negative_rhw_bug;
    GLboolean has_aa_line_parameters;
+   GLboolean has_pln;
 ;
    struct {
       struct brw_state_flags dirty;
diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h
index bb1b5f5ef0..984e56d00c 100644
--- a/src/mesa/drivers/dri/i965/brw_defines.h
+++ b/src/mesa/drivers/dri/i965/brw_defines.h
@@ -550,6 +550,7 @@
 #define BRW_OPCODE_DP2        87
 #define BRW_OPCODE_DPA2       88
 #define BRW_OPCODE_LINE       89
+#define BRW_OPCODE_PLN        90
 #define BRW_OPCODE_NOP        126
 
 #define BRW_PREDICATE_NONE             0
diff --git a/src/mesa/drivers/dri/i965/brw_disasm.c b/src/mesa/drivers/dri/i965/brw_disasm.c
index 4d25152efc..ad61770212 100644
--- a/src/mesa/drivers/dri/i965/brw_disasm.c
+++ b/src/mesa/drivers/dri/i965/brw_disasm.c
@@ -50,6 +50,7 @@ struct {
     [BRW_OPCODE_MAC] = { .name = "mac", .nsrc = 2, .ndst = 1 },
     [BRW_OPCODE_MACH] = { .name = "mach", .nsrc = 2, .ndst = 1 },
     [BRW_OPCODE_LINE] = { .name = "line", .nsrc = 2, .ndst = 1 },
+    [BRW_OPCODE_PLN] = { .name = "pln", .nsrc = 2, .ndst = 1 },
     [BRW_OPCODE_SAD2] = { .name = "sad2", .nsrc = 2, .ndst = 1 },
     [BRW_OPCODE_SADA2] = { .name = "sada2", .nsrc = 2, .ndst = 1 },
     [BRW_OPCODE_DP4] = { .name = "dp4", .nsrc = 2, .ndst = 1 },
diff --git a/src/mesa/drivers/dri/i965/brw_eu.h b/src/mesa/drivers/dri/i965/brw_eu.h
index 39eb88d7c2..8e9117b644 100644
--- a/src/mesa/drivers/dri/i965/brw_eu.h
+++ b/src/mesa/drivers/dri/i965/brw_eu.h
@@ -795,6 +795,7 @@ ALU2(DPH)
 ALU2(DP3)
 ALU2(DP2)
 ALU2(LINE)
+ALU2(PLN)
 
 #undef ALU1
 #undef ALU2
diff --git a/src/mesa/drivers/dri/i965/brw_eu_emit.c b/src/mesa/drivers/dri/i965/brw_eu_emit.c
index 82f2fdab2f..d2395dec28 100644
--- a/src/mesa/drivers/dri/i965/brw_eu_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_eu_emit.c
@@ -573,7 +573,7 @@ ALU2(DPH)
 ALU2(DP3)
 ALU2(DP2)
 ALU2(LINE)
-
+ALU2(PLN)
 
 
 
diff --git a/src/mesa/drivers/dri/i965/brw_wm_emit.c b/src/mesa/drivers/dri/i965/brw_wm_emit.c
index c7d87b9d94..412e09b76a 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_emit.c
@@ -34,6 +34,23 @@
 #include "brw_context.h"
 #include "brw_wm.h"
 
+static GLboolean can_do_pln(struct intel_context *intel,
+			    const struct brw_reg *deltas)
+{
+   struct brw_context *brw = brw_context(&intel->ctx);
+
+   if (!brw->has_pln)
+      return GL_FALSE;
+
+   if (deltas[1].nr != deltas[0].nr + 1)
+      return GL_FALSE;
+
+   if (intel->gen < 6 && ((deltas[0].nr & 1) != 0))
+      return GL_FALSE;
+
+   return GL_TRUE;
+}
+
 /* Not quite sure how correct this is - need to understand horiz
  * vs. vertical strides a little better.
  */
@@ -186,6 +203,7 @@ void emit_pixel_w(struct brw_wm_compile *c,
 		  const struct brw_reg *deltas)
 {
    struct brw_compile *p = &c->func;
+   struct intel_context *intel = &p->brw->intel;
 
    /* Don't need this if all you are doing is interpolating color, for
     * instance.
@@ -196,8 +214,12 @@ void emit_pixel_w(struct brw_wm_compile *c,
       /* Calc 1/w - just linterp wpos[3] optimized by putting the
        * result straight into a message reg.
        */
-      brw_LINE(p, brw_null_reg(), interp3, deltas[0]);
-      brw_MAC(p, brw_message_reg(2), suboffset(interp3, 1), deltas[1]);
+      if (can_do_pln(intel, deltas)) {
+	 brw_PLN(p, brw_message_reg(2), interp3, deltas[0]);
+      } else {
+	 brw_LINE(p, brw_null_reg(), interp3, deltas[0]);
+	 brw_MAC(p, brw_message_reg(2), suboffset(interp3, 1), deltas[1]);
+      }
 
       /* Calc w */
       if (c->dispatch_width == 16) {
@@ -224,6 +246,7 @@ void emit_linterp(struct brw_compile *p,
 		  const struct brw_reg *arg0,
 		  const struct brw_reg *deltas)
 {
+   struct intel_context *intel = &p->brw->intel;
    struct brw_reg interp[4];
    GLuint nr = arg0[0].nr;
    GLuint i;
@@ -235,8 +258,12 @@ void emit_linterp(struct brw_compile *p,
 
    for (i = 0; i < 4; i++) {
       if (mask & (1<<i)) {
-	 brw_LINE(p, brw_null_reg(), interp[i], deltas[0]);
-	 brw_MAC(p, dst[i], suboffset(interp[i],1), deltas[1]);
+	 if (can_do_pln(intel, deltas)) {
+	    brw_PLN(p, dst[i], interp[i], deltas[0]);
+	 } else {
+	    brw_LINE(p, brw_null_reg(), interp[i], deltas[0]);
+	    brw_MAC(p, dst[i], suboffset(interp[i],1), deltas[1]);
+	 }
       }
    }
 }
@@ -249,6 +276,7 @@ void emit_pinterp(struct brw_compile *p,
 		  const struct brw_reg *deltas,
 		  const struct brw_reg *w)
 {
+   struct intel_context *intel = &p->brw->intel;
    struct brw_reg interp[4];
    GLuint nr = arg0[0].nr;
    GLuint i;
@@ -260,8 +288,12 @@ void emit_pinterp(struct brw_compile *p,
 
    for (i = 0; i < 4; i++) {
       if (mask & (1<<i)) {
-	 brw_LINE(p, brw_null_reg(), interp[i], deltas[0]);
-	 brw_MAC(p, dst[i], suboffset(interp[i],1), deltas[1]);
+	 if (can_do_pln(intel, deltas)) {
+	    brw_PLN(p, dst[i], interp[i], deltas[0]);
+	 } else {
+	    brw_LINE(p, brw_null_reg(), interp[i], deltas[0]);
+	    brw_MAC(p, dst[i], suboffset(interp[i],1), deltas[1]);
+	 }
       }
    }
    for (i = 0; i < 4; i++) {
diff --git a/src/mesa/drivers/dri/i965/brw_wm_glsl.c b/src/mesa/drivers/dri/i965/brw_wm_glsl.c
index af249452b9..0b66cc6c9f 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_glsl.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_glsl.c
@@ -289,6 +289,7 @@ reclaim_temps(struct brw_wm_compile *c)
  */
 static void prealloc_reg(struct brw_wm_compile *c)
 {
+    struct intel_context *intel = &c->func.brw->intel;
     int i, j;
     struct brw_reg reg;
     int urb_read_length = 0;
@@ -413,6 +414,43 @@ static void prealloc_reg(struct brw_wm_compile *c)
 	}
     }
 
+    for (i = 0; i < c->nr_fp_insns; i++) {
+	const struct prog_instruction *inst = &c->prog_instructions[i];
+
+	switch (inst->Opcode) {
+	case WM_DELTAXY:
+	    /* Allocate WM_DELTAXY destination on G45/GM45 to an
+	     * even-numbered GRF if possible so that we can use the PLN
+	     * instruction.
+	     */
+	    if (inst->DstReg.WriteMask == WRITEMASK_XY &&
+		!c->wm_regs[inst->DstReg.File][inst->DstReg.Index][0].inited &&
+		!c->wm_regs[inst->DstReg.File][inst->DstReg.Index][1].inited &&
+		(IS_G4X(intel->intelScreen->deviceID) || intel->gen == 5)) {
+		int grf;
+
+		for (grf = c->first_free_grf & ~1;
+		     grf < BRW_WM_MAX_GRF;
+		     grf += 2)
+		{
+		    if (!c->used_grf[grf] && !c->used_grf[grf + 1]) {
+			c->used_grf[grf] = GL_TRUE;
+			c->used_grf[grf + 1] = GL_TRUE;
+			c->first_free_grf = grf + 2;  /* a guess */
+
+			set_reg(c, inst->DstReg.File, inst->DstReg.Index, 0,
+				brw_vec8_grf(grf, 0));
+			set_reg(c, inst->DstReg.File, inst->DstReg.Index, 1,
+				brw_vec8_grf(grf + 1, 0));
+			break;
+		    }
+		}
+	    }
+	default:
+	    break;
+	}
+    }
+
     /* An instruction may reference up to three constants.
      * They'll be found in these registers.
      * XXX alloc these on demand!
-- 
cgit v1.2.3


From 878eef8c40046f77cf1527fef06f1ea95bd1629a Mon Sep 17 00:00:00 2001
From: Francisco Jerez <currojerez@riseup.net>
Date: Wed, 10 Mar 2010 23:51:06 +0100
Subject: dri/nouveau: Just reemit the BO state on pushbuf flush.

Reemitting dirty states on flush causes problems if the GL context
isn't fully consistent when we get to it. It didn't serve any specific
purpose, so, use nouveau_bo_state_emit instead.
---
 src/mesa/drivers/dri/nouveau/nouveau_context.c |  4 ++--
 src/mesa/drivers/dri/nouveau/nouveau_context.h |  2 ++
 src/mesa/drivers/dri/nouveau/nv04_context.c    | 22 ++++++++++------------
 3 files changed, 14 insertions(+), 14 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_context.c b/src/mesa/drivers/dri/nouveau/nouveau_context.c
index 502e01255c..be57d48b8d 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_context.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_context.c
@@ -69,8 +69,8 @@ nouveau_channel_flush_notify(struct nouveau_channel *chan)
 	struct nouveau_context *nctx = chan->user_private;
 	GLcontext *ctx = &nctx->base;
 
-	if (nctx->fallback < SWRAST && ctx->DrawBuffer)
-		nouveau_state_emit(&nctx->base);
+	if (nctx->fallback < SWRAST)
+		nouveau_bo_state_emit(ctx);
 }
 
 GLboolean
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_context.h b/src/mesa/drivers/dri/nouveau/nouveau_context.h
index 682f8a414e..fe64fec930 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_context.h
+++ b/src/mesa/drivers/dri/nouveau/nouveau_context.h
@@ -85,6 +85,8 @@ struct nouveau_context {
 	BITSET_SET(to_nouveau_context(ctx)->dirty, NOUVEAU_STATE_##s)
 #define context_dirty_i(ctx, s, i) \
 	BITSET_SET(to_nouveau_context(ctx)->dirty, NOUVEAU_STATE_##s##0 + i)
+#define context_emit(ctx, s) \
+	context_drv(ctx)->emit[NOUVEAU_STATE_##s](ctx, NOUVEAU_STATE_##s)
 
 GLboolean
 nouveau_context_create(const __GLcontextModes *visual, __DRIcontext *dri_ctx,
diff --git a/src/mesa/drivers/dri/nouveau/nv04_context.c b/src/mesa/drivers/dri/nouveau/nv04_context.c
index a442425e44..3624b3af92 100644
--- a/src/mesa/drivers/dri/nouveau/nv04_context.c
+++ b/src/mesa/drivers/dri/nouveau/nv04_context.c
@@ -75,18 +75,16 @@ nv04_channel_flush_notify(struct nouveau_channel *chan)
 	struct nouveau_context *nctx = chan->user_private;
 	GLcontext *ctx = &nctx->base;
 
-	if (nctx->fallback < SWRAST && ctx->DrawBuffer) {
-		GLcontext *ctx = &nctx->base;
-
+	if (nctx->fallback < SWRAST) {
 		/* Flushing seems to clobber the engine context. */
-		context_dirty_i(ctx, TEX_OBJ, 0);
-		context_dirty_i(ctx, TEX_OBJ, 1);
-		context_dirty_i(ctx, TEX_ENV, 0);
-		context_dirty_i(ctx, TEX_ENV, 1);
-		context_dirty(ctx, CONTROL);
-		context_dirty(ctx, BLEND);
-
-		nouveau_state_emit(ctx);
+		context_emit(ctx, TEX_OBJ0);
+		context_emit(ctx, TEX_OBJ1);
+		context_emit(ctx, TEX_ENV0);
+		context_emit(ctx, TEX_ENV1);
+		context_emit(ctx, CONTROL);
+		context_emit(ctx, BLEND);
+
+		nouveau_bo_state_emit(ctx);
 	}
 }
 
@@ -200,9 +198,9 @@ nv04_context_create(struct nouveau_screen *screen, const GLvisual *visual,
 	if (ret)
 		goto fail;
 
+	init_dummy_texture(ctx);
 	nv04_hwctx_init(ctx);
 	nv04_render_init(ctx);
-	init_dummy_texture(ctx);
 
 	return ctx;
 
-- 
cgit v1.2.3


From 40adcd611fe6939895c83e6ae945348437b3e7ad Mon Sep 17 00:00:00 2001
From: Marek Olšák <maraeo@gmail.com>
Date: Sat, 6 Mar 2010 18:09:16 +0100
Subject: st/mesa: always advertise texture_rectangle

---
 src/mesa/state_tracker/st_extensions.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
index e03dd30f0f..bc240e0893 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -199,6 +199,7 @@ void st_init_extensions(struct st_context *st)
    ctx->Extensions.NV_blend_square = GL_TRUE;
    ctx->Extensions.NV_texgen_reflection = GL_TRUE;
    ctx->Extensions.NV_texture_env_combine4 = GL_TRUE;
+   ctx->Extensions.NV_texture_rectangle = GL_TRUE;
 
 #if FEATURE_OES_draw_texture
    ctx->Extensions.OES_draw_texture = GL_TRUE;
@@ -236,7 +237,6 @@ void st_init_extensions(struct st_context *st)
 
    if (screen->get_param(screen, PIPE_CAP_NPOT_TEXTURES)) {
       ctx->Extensions.ARB_texture_non_power_of_two = GL_TRUE;
-      ctx->Extensions.NV_texture_rectangle = GL_TRUE;
    }
 
    if (screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_IMAGE_UNITS) > 1) {
-- 
cgit v1.2.3


From a0ae2ca033ec2024da1e01d1c11c0437837c031b Mon Sep 17 00:00:00 2001
From: Marek Olšák <maraeo@gmail.com>
Date: Sat, 6 Mar 2010 17:36:44 +0100
Subject: st/dri: move extension initilization to st/mesa completely

Extensions were enabled in both st/mesa and st/dri, with st/dri completely
overriding the decisions of st/mesa and exposing even the extensions claimed
to be unsupported by a pipe driver.

This commit moves the differences between the two to st/mesa and removes
the responsibilty of advertising extensions from st/dri.
---
 src/gallium/state_trackers/dri/dri_extensions.c | 102 +-----------------------
 src/mesa/state_tracker/st_extensions.c          |   9 +++
 2 files changed, 12 insertions(+), 99 deletions(-)

(limited to 'src/mesa')

diff --git a/src/gallium/state_trackers/dri/dri_extensions.c b/src/gallium/state_trackers/dri/dri_extensions.c
index 1259813a41..d98fe3b47b 100644
--- a/src/gallium/state_trackers/dri/dri_extensions.c
+++ b/src/gallium/state_trackers/dri/dri_extensions.c
@@ -33,110 +33,14 @@
 #include "dri_context.h"
 #include "state_tracker/st_context.h"
 
-#define need_GL_ARB_map_buffer_range
-#define need_GL_ARB_multisample
-#define need_GL_ARB_occlusion_query
-#define need_GL_ARB_point_parameters
-#define need_GL_ARB_provoking_vertex
-#define need_GL_ARB_shader_objects
-#define need_GL_ARB_texture_compression
-#define need_GL_ARB_vertex_array_object
-#define need_GL_ARB_vertex_buffer_object
-#define need_GL_ARB_vertex_program
-#define need_GL_ARB_vertex_shader
-#define need_GL_ARB_window_pos
-#define need_GL_EXT_blend_color
-#define need_GL_EXT_blend_equation_separate
-#define need_GL_EXT_blend_func_separate
-#define need_GL_EXT_blend_minmax
-#define need_GL_EXT_cull_vertex
-#define need_GL_EXT_draw_buffers2
-#define need_GL_EXT_fog_coord
-#define need_GL_EXT_framebuffer_object
-#define need_GL_EXT_multi_draw_arrays
-#define need_GL_EXT_provoking_vertex
-#define need_GL_EXT_secondary_color
-#define need_GL_EXT_stencil_two_side
-#define need_GL_APPLE_vertex_array_object
-#define need_GL_NV_vertex_program
-#define need_GL_VERSION_2_0
-#define need_GL_VERSION_2_1
-#include "main/remap_helper.h"
 #include "utils.h"
 
-/**
- * Extension strings exported by the driver.
- */
-static const struct dri_extension card_extensions[] = {
-   {"GL_ARB_fragment_shader", NULL},
-   {"GL_ARB_map_buffer_range", GL_ARB_map_buffer_range_functions},
-   {"GL_ARB_multisample", GL_ARB_multisample_functions},
-   {"GL_ARB_multitexture", NULL},
-   {"GL_ARB_occlusion_query", GL_ARB_occlusion_query_functions},
-   {"GL_ARB_pixel_buffer_object", NULL},
-   {"GL_ARB_provoking_vertex", GL_ARB_provoking_vertex_functions},
-   {"GL_ARB_point_parameters", GL_ARB_point_parameters_functions},
-   {"GL_ARB_shading_language_100", GL_VERSION_2_0_functions },
-   {"GL_ARB_shading_language_120", GL_VERSION_2_1_functions },
-   {"GL_ARB_shader_objects", GL_ARB_shader_objects_functions},
-   {"GL_ARB_texture_border_clamp", NULL},
-   {"GL_ARB_texture_compression", GL_ARB_texture_compression_functions},
-   {"GL_ARB_texture_cube_map", NULL},
-   {"GL_ARB_texture_env_add", NULL},
-   {"GL_ARB_texture_env_combine", NULL},
-   {"GL_ARB_texture_env_dot3", NULL},
-   {"GL_ARB_texture_mirrored_repeat", NULL},
-   {"GL_ARB_texture_non_power_of_two", NULL},
-   {"GL_ARB_texture_rectangle", NULL},
-   {"GL_ARB_vertex_array_object", GL_ARB_vertex_array_object_functions},
-   {"GL_ARB_vertex_buffer_object", GL_ARB_vertex_buffer_object_functions},
-   {"GL_ARB_vertex_shader", GL_ARB_vertex_shader_functions},
-   {"GL_ARB_vertex_program", GL_ARB_vertex_program_functions},
-   {"GL_ARB_window_pos", GL_ARB_window_pos_functions},
-   {"GL_EXT_blend_color", GL_EXT_blend_color_functions},
-   {"GL_EXT_blend_equation_separate", GL_EXT_blend_equation_separate_functions},
-   {"GL_EXT_blend_func_separate", GL_EXT_blend_func_separate_functions},
-   {"GL_EXT_blend_minmax", GL_EXT_blend_minmax_functions},
-   {"GL_EXT_blend_subtract", NULL},
-   {"GL_EXT_cull_vertex", GL_EXT_cull_vertex_functions},
-   {"GL_EXT_draw_buffers2", GL_EXT_draw_buffers2_functions},
-   {"GL_EXT_fog_coord", GL_EXT_fog_coord_functions},
-   {"GL_EXT_framebuffer_object", GL_EXT_framebuffer_object_functions},
-   {"GL_EXT_multi_draw_arrays", GL_EXT_multi_draw_arrays_functions},
-   {"GL_EXT_packed_depth_stencil", NULL},
-   {"GL_EXT_pixel_buffer_object", NULL},
-   {"GL_EXT_provoking_vertex", GL_EXT_provoking_vertex_functions},
-   {"GL_EXT_secondary_color", GL_EXT_secondary_color_functions},
-   {"GL_EXT_stencil_two_side", GL_EXT_stencil_two_side_functions},
-   {"GL_EXT_stencil_wrap", NULL},
-   {"GL_EXT_texture_edge_clamp", NULL},
-   {"GL_EXT_texture_env_combine", NULL},
-   {"GL_EXT_texture_env_dot3", NULL},
-   {"GL_EXT_texture_filter_anisotropic", NULL},
-   {"GL_EXT_texture_lod_bias", NULL},
-   {"GL_3DFX_texture_compression_FXT1", NULL},
-   {"GL_APPLE_client_storage", NULL},
-   {"GL_APPLE_vertex_array_object", GL_APPLE_vertex_array_object_functions},
-   {"GL_MESA_pack_invert", NULL},
-   {"GL_MESA_ycbcr_texture", NULL},
-   {"GL_NV_blend_square", NULL},
-   {"GL_NV_vertex_program", GL_NV_vertex_program_functions},
-   {"GL_NV_vertex_program1_1", NULL},
-   {"GL_SGIS_generate_mipmap", NULL},
-   {NULL, NULL}
-};
-
 void
 dri_init_extensions(struct dri_context *ctx)
 {
-   /* The card_extensions list should be pruned according to the
-    * capabilities of the pipe_screen. This is actually something
-    * that can/should be done inside st_create_context().
-    * XXX Not pruning is very bogus. Always all these extensions above
-    * will be advertized, regardless what st_init_extensions
-    * (which depends on the pipe cap bits) does.
-    */
-   driInitExtensions(ctx->st->ctx, card_extensions, GL_TRUE);
+   /* New extensions should be added in mesa/state_tracker/st_extensions.c
+    * and not in this file. */
+   driInitExtensions(ctx->st->ctx, NULL, GL_TRUE);
 }
 
 /* vim: set sw=3 ts=8 sts=3 expandtab: */
diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
index bc240e0893..e837924dbd 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -172,12 +172,14 @@ void st_init_extensions(struct st_context *st)
    ctx->Extensions.ARB_vertex_array_object = GL_TRUE;
    ctx->Extensions.ARB_vertex_buffer_object = GL_TRUE;
    ctx->Extensions.ARB_vertex_program = GL_TRUE;
+   ctx->Extensions.ARB_window_pos = GL_TRUE;
 
    ctx->Extensions.EXT_blend_color = GL_TRUE;
    ctx->Extensions.EXT_blend_func_separate = GL_TRUE;
    ctx->Extensions.EXT_blend_logic_op = GL_TRUE;
    ctx->Extensions.EXT_blend_minmax = GL_TRUE;
    ctx->Extensions.EXT_blend_subtract = GL_TRUE;
+   ctx->Extensions.EXT_cull_vertex = GL_TRUE;
    ctx->Extensions.EXT_framebuffer_blit = GL_TRUE;
    ctx->Extensions.EXT_framebuffer_object = GL_TRUE;
    ctx->Extensions.EXT_framebuffer_multisample = GL_TRUE;
@@ -194,12 +196,19 @@ void st_init_extensions(struct st_context *st)
    ctx->Extensions.EXT_texture_lod_bias = GL_TRUE;
    ctx->Extensions.EXT_vertex_array_bgra = GL_TRUE;
 
+   ctx->Extensions.TDFX_texture_compression_FXT1 = GL_TRUE;
+
+   ctx->Extensions.APPLE_client_storage = GL_TRUE;
    ctx->Extensions.APPLE_vertex_array_object = GL_TRUE;
 
+   ctx->Extensions.MESA_pack_invert = GL_TRUE;
+
    ctx->Extensions.NV_blend_square = GL_TRUE;
    ctx->Extensions.NV_texgen_reflection = GL_TRUE;
    ctx->Extensions.NV_texture_env_combine4 = GL_TRUE;
    ctx->Extensions.NV_texture_rectangle = GL_TRUE;
+   ctx->Extensions.NV_vertex_program = GL_TRUE;
+   ctx->Extensions.NV_vertex_program1_1 = GL_TRUE;
 
 #if FEATURE_OES_draw_texture
    ctx->Extensions.OES_draw_texture = GL_TRUE;
-- 
cgit v1.2.3


From b43c182f19c6291c88420fa12714f952c2b461fb Mon Sep 17 00:00:00 2001
From: Keith Whitwell <keithw@vmware.com>
Date: Thu, 11 Mar 2010 15:23:16 +0000
Subject: Squashed commit of gallium-context-transfers:
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

commit 7a2ee04629681e59ea147b440856c4f9a33ae9f8
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Mar 11 14:19:17 2010 +0000

    nv: convert to context transfers

commit 188a3f5331c8e5966729fd59d02975afb7324adc
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Mar 11 14:11:10 2010 +0000

    nouveau: remove unused variable

commit 5c8e880ab4dc020358c08728b8adb1637d2dc5bc
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Mar 11 12:31:21 2010 +0000

    mesa/st: fix compilation after merge

commit c552595333f860c2a4807e195596acdf5d6a5ef8
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Mar 11 12:31:06 2010 +0000

    util: fix compilation after merge

commit e80836878a3617b0e350d2a8f92311832a1476cb
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Mar 11 12:30:47 2010 +0000

    r300g: fix compilation after merge

commit 0e4883e9511b9db4e75a4dbc78d7bb970badc15d
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Mar 11 12:18:45 2010 +0000

    i965g: fix incorrect merge

commit 17d74133d8168eebf93bf1390de79930fc8da231
Merge: cb81c79 aa311ae
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Mar 11 12:08:32 2010 +0000

    Merge commit 'origin/master' into gallium-context-transfers

    Conflicts:
    	src/gallium/drivers/i965/brw_screen_texture.c
    	src/gallium/drivers/r300/r300_screen.c
    	src/gallium/drivers/softpipe/sp_texture.c
    	src/gallium/drivers/svga/svga_screen_texture.c
    	src/gallium/state_trackers/egl/x11/native_ximage.c

commit cb81c79098bc3a92a4d2a3dcc0edc972dfb407be
Author: Keith Whitwell <keithw@vmware.com>
Date:   Tue Mar 2 16:04:01 2010 +0000

    egl/x11: hack for context transfers

    There is a better approach to this in the winsys-handle branch, but
    for now avoid using transfers at all by always allocating our own
    backing store directly.

commit f44a24e1d4ad7563f3eedd6b3a5688f53a36265c
Author: Keith Whitwell <keithw@vmware.com>
Date:   Tue Mar 2 16:03:16 2010 +0000

    llvmpipe: context transfers

commit 4d7475ef8104b3b478c7c6ce77cd3506c57e25d1
Author: Keith Whitwell <keithw@vmware.com>
Date:   Tue Mar 2 16:02:50 2010 +0000

    llvmpipe: disable testprogs build

    Not working.

commit a9bf98c4d36bd92a76f81e83747eb9b8f0a0515f
Merge: ee0f97e 0c616da
Author: Keith Whitwell <keithw@vmware.com>
Date:   Tue Mar 2 15:28:25 2010 +0000

    Merge commit 'origin/master' into gallium-context-transfers

    Conflicts:
    	src/mesa/state_tracker/st_cb_accum.c
    	src/mesa/state_tracker/st_cb_bitmap.c

commit ee0f97e8d9fd5ef57211a8e1268f505c9829e246
Merge: a7f078e 828f545
Author: Keith Whitwell <keithw@vmware.com>
Date:   Fri Feb 19 13:00:29 2010 +0000

    Merge commit 'origin/master' into gallium-context-transfers

    Conflicts:
    	src/gallium/auxiliary/util/u_debug.h
    	src/gallium/drivers/i915/i915_context.h
    	src/gallium/drivers/llvmpipe/lp_flush.c
    	src/gallium/drivers/nv30/nv30_screen.h
    	src/gallium/drivers/nv40/nv40_context.h
    	src/gallium/drivers/nv40/nv40_screen.h
    	src/gallium/drivers/nv50/nv50_context.h
    	src/gallium/drivers/r300/r300_screen.c
    	src/gallium/drivers/r300/r300_winsys.h
    	src/gallium/drivers/softpipe/sp_context.c
    	src/gallium/drivers/trace/tr_context.c
    	src/gallium/state_trackers/dri/dri_context.c
    	src/gallium/state_trackers/egl/common/egl_g3d.c
    	src/gallium/state_trackers/python/st_device.c
    	src/gallium/winsys/drm/radeon/core/radeon_drm.c

commit a7f078e16d851b53ef316066dcced46eb39ebe24
Author: Keith Whitwell <keithw@vmware.com>
Date:   Fri Feb 5 14:16:11 2010 +0000

    gallium: move texture transfers to pipe_context

commit 7b2ffc2019d72e833afea7eebf3e80121187375d
Merge: 51e190e c036d13
Author: Keith Whitwell <keithw@vmware.com>
Date:   Fri Feb 5 09:55:02 2010 +0000

    Merge commit 'origin/master' into gallium-screen-context

    Conflicts:
    	src/gallium/winsys/drm/nouveau/drm/nouveau_drm_api.c

    This branch has got a pretty tortured history now, I expect
    a squash merge will be appropriate when it is done.

commit 51e190e95acf120f72768fafb29e9721e358df1b
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Feb 4 17:58:02 2010 +0000

    gallium: fix some build issues

commit f524bdaa723fb181637ad30c6ad708aeedabe25b
Merge: f906212 3aba0a2
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Feb 4 17:51:32 2010 +0000

    Merge commit 'origin/master' into gallium-screen-context

commit f9062126883199eabf045714c717cd35f4b7b313
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Feb 4 17:17:12 2010 +0000

    gallium/docs: small description of screen::create_context

commit efcb37bd3d5ed37f06c6105bd2d750b374ec0927
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Feb 4 16:42:42 2010 +0000

    drm/radeon: more dead create_context wrapper removal

commit 6badc0dd9e06cf2ec936940bcf12b9ef5324b301
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Feb 4 16:42:30 2010 +0000

    drm/i965: more dead create_context wrapper removal

commit cf04ebd5a54b18b2d894cfdab2b0f2fd55626ffc
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Feb 4 16:42:05 2010 +0000

    st/python: more dead create_context wrapper removal

commit 444f114c3516abf71c430e6e9d0d2ae3b80679d3
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Feb 4 16:37:58 2010 +0000

    idenity: wrapped context creation

commit 5a6d09cb9e468d1ee6c8d54b887618819d8d94f2
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Feb 4 16:28:47 2010 +0000

    ws/gdi: remove dead context_create wrapper

commit 132b55f4bec39386ac625f09aaa11f609664024c
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Feb 4 16:27:52 2010 +0000

    ws/gdi: remove dead context_create wrapper

commit 56d2d21a0cdcb197a364049d354c2f15a4fc026a
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Feb 4 16:25:38 2010 +0000

    st/xorg: use screen::context_create

commit 838c5cfe56b2af6c644909bed3c5e7cdd64c336a
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Feb 4 16:23:20 2010 +0000

    glx/xlib: simplify creation of trace-wrapped contexts

    Trace screen knows how to properly wrap context creation in the
    wrapped screen, so nothing special to do here.

commit c99404c03ebaec4175f08a2f363e43c9085f2635
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Feb 4 16:18:24 2010 +0000

    st/python: no need to special case context creation for trace

commit 193a527a682b6877bb1faecd8092df4dfd055a18
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Feb 4 16:15:30 2010 +0000

    drm/radeon: remove dead create_context declaration

commit bb984eecc25cf23bc77e1c818b81165ba1a07c9a
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Feb 4 16:14:58 2010 +0000

    nv/drm: remove dead create_context ref

commit e809313a44287dc4e16c28e9e74ef3b2b5271aa1
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Feb 4 16:12:51 2010 +0000

    st/egl: remove a layer of wrappers around screen::create_context

commit 39caa6672a04122f185c22e17aab86d1c40938bf
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Feb 4 16:05:28 2010 +0000

    r300g: fill in screen::context_create

commit 407f12556d16ba0656774d8a1d9ebda22f82f473
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Feb 4 16:04:04 2010 +0000

    cell: adapt for screen::create_context, untested

commit d02b0c6ce321a04c76fdabb09e0e4380ce1c1376
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Feb 4 15:50:24 2010 +0000

    drm/nv: adapt for screen::create_context

    All contexts now created directly through the screen, so remove
    equivalent code here.

    Remove apparently un-needed array of contexts in the winsys.

commit 53eec5b1349aa1b6892a75a7bff7e7530957aeae
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Feb 4 15:50:08 2010 +0000

    stw: adapt for screen::create_context, untested

commit c6a64de3eb381bc9a88e9fbdecbf87d77925aaf5
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Feb 4 15:49:20 2010 +0000

    trace: expose the wrapped context's priv data

    If we are going to keep this priv idea, really want an accessor
    function for it so that trace and other drivers can wrap that.

commit 75d6104e11d86ec2b0749627ed58e35f856ee6eb
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Feb 4 15:47:55 2010 +0000

    nv30: adapt to screen::context_create

commit 12f5deb6ed9723e9b5d34577052b8365813ca14e
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Feb 4 15:44:47 2010 +0000

    nv40: adapt to screen::context_create

commit 14baccaa3b6bbb3b91056126f6521828e786dc62
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Feb 4 15:35:27 2010 +0000

    nv50: adapt to screen::create_context

    Not build tested.  Need to figure out how to build nouveau.

commit a0e94505ccd2d7f3e604465a2ac302f1286b73b6
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Feb 4 15:22:27 2010 +0000

    llvmpipe: update for screen::create_context, untested

commit 0eae17107c950346030e4f7e0ec232f868d3893d
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Feb 4 15:16:57 2010 +0000

    xlib/llvmpipe: remove dead winsys context creation path

commit 2f69f9ffaa7e2a01d2483277246ed13051ae4ca3
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Feb 4 14:58:27 2010 +0000

    gallium: convert most code to use screen::create_context

    I wish I could build all of gallium at once to find breakages.

commit d7b57f4061b82322cbcae176125913d9f0dea6c1
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Feb 4 12:46:21 2010 +0000

    glx: permit building with older protocol headers

    I'd like to be able to build mesa on current distro releases without
    having to upgrade from the standard dri2proto and glproto headers.  With
    this change I'm able to build on ancient releases such as Ubuntu 9-10...

    In general, it would be nice to be able to build-test mesa to check for
    unintended breakages without having to follow the external dependencies
    of every group working on the codebase.

commit 57adedd6fb06c98572ed8d4aef19203df4c4eea2
Merge: da71847 e1906ae
Author: Keith Whitwell <keithw@vmware.com>
Date:   Thu Feb 4 11:38:15 2010 +0000

    Merge commit 'origin/master' into gallium-screen-context

    Conflicts:
    	src/gallium/drivers/softpipe/sp_video_context.h
    	src/gallium/drivers/trace/tr_context.c
    	src/gallium/state_trackers/wgl/shared/stw_context.c
    	src/gallium/winsys/gdi/gdi_softpipe_winsys.c

commit da71847ea6414d7e352c6094f8963bb4eda344dc
Author: José Fonseca <jfonseca@vmware.com>
Date:   Sat May 2 08:57:39 2009 +0100

    wgl: Use pipe_screen::context_create.

commit 2595a188f93fd903600ef5d8517737ee0592035d
Author: José Fonseca <jfonseca@vmware.com>
Date:   Sat May 2 08:56:47 2009 +0100

    trace: Implement pipe_screen::context_create.

commit f3640e4ae37a5260cbfba999d079f827de0a313a
Author: José Fonseca <jfonseca@vmware.com>
Date:   Sat May 2 08:56:17 2009 +0100

    softpipe: Implement pipe_screen::context_create.

commit 347266bddc8bd39c711bacb2193793759d0f3696
Author: José Fonseca <jfonseca@vmware.com>
Date:   Sat May 2 08:55:31 2009 +0100

    gallium: New pipe_screen::context_create callback.
---
 src/gallium/auxiliary/draw/draw_pipe_aaline.c    |   8 +-
 src/gallium/auxiliary/draw/draw_pipe_pstipple.c  |  14 ++-
 src/gallium/auxiliary/util/u_debug.c             |  44 ++++----
 src/gallium/auxiliary/util/u_debug.h             |  14 ++-
 src/gallium/auxiliary/util/u_gen_mipmap.c        |  50 ++++-----
 src/gallium/auxiliary/util/u_inlines.h           |  12 +-
 src/gallium/auxiliary/util/u_rect.c              |  26 ++---
 src/gallium/auxiliary/util/u_tile.c              |  24 ++--
 src/gallium/auxiliary/vl/vl_mpeg12_mc_renderer.c |  10 +-
 src/gallium/drivers/i915/i915_context.c          |   1 +
 src/gallium/drivers/i915/i915_context.h          |   6 +
 src/gallium/drivers/i915/i915_texture.c          |  23 ++--
 src/gallium/drivers/i965/brw_screen.h            |   5 +-
 src/gallium/drivers/i965/brw_screen_texture.c    |  25 +++--
 src/gallium/drivers/identity/id_context.c        |  72 ++++++++++++
 src/gallium/drivers/identity/id_objects.c        |  10 +-
 src/gallium/drivers/identity/id_objects.h        |   4 +-
 src/gallium/drivers/identity/id_screen.c         |  69 ------------
 src/gallium/drivers/llvmpipe/Makefile            |   6 +-
 src/gallium/drivers/llvmpipe/lp_context.c        |   1 +
 src/gallium/drivers/llvmpipe/lp_flush.c          |   4 +-
 src/gallium/drivers/llvmpipe/lp_scene.c          |  20 ++--
 src/gallium/drivers/llvmpipe/lp_texture.c        |  25 +++--
 src/gallium/drivers/llvmpipe/lp_texture.h        |   2 +
 src/gallium/drivers/nouveau/nv04_surface_2d.c    |   1 -
 src/gallium/drivers/nv30/nv30_context.c          |   1 +
 src/gallium/drivers/nv30/nv30_context.h          |   1 +
 src/gallium/drivers/nv30/nv30_screen.c           |   1 -
 src/gallium/drivers/nv30/nv30_screen.h           |   3 -
 src/gallium/drivers/nv30/nv30_transfer.c         |  19 ++--
 src/gallium/drivers/nv40/nv40_context.c          |   1 +
 src/gallium/drivers/nv40/nv40_context.h          |   1 +
 src/gallium/drivers/nv40/nv40_screen.c           |   1 -
 src/gallium/drivers/nv40/nv40_screen.h           |   3 -
 src/gallium/drivers/nv40/nv40_transfer.c         |  19 ++--
 src/gallium/drivers/nv50/nv50_context.c          |   1 +
 src/gallium/drivers/nv50/nv50_context.h          |   1 +
 src/gallium/drivers/nv50/nv50_transfer.c         |  17 +--
 src/gallium/drivers/r300/r300_context.c          |   3 +
 src/gallium/drivers/r300/r300_context.h          |   1 +
 src/gallium/drivers/r300/r300_screen.c           |   4 +-
 src/gallium/drivers/r300/r300_transfer.c         |  39 ++++---
 src/gallium/drivers/r300/r300_transfer.h         |   4 +-
 src/gallium/drivers/softpipe/sp_context.c        |  10 +-
 src/gallium/drivers/softpipe/sp_flush.c          |   4 +-
 src/gallium/drivers/softpipe/sp_tex_tile_cache.c |  30 ++---
 src/gallium/drivers/softpipe/sp_tex_tile_cache.h |   4 +-
 src/gallium/drivers/softpipe/sp_texture.c        |  27 +++--
 src/gallium/drivers/softpipe/sp_texture.h        |   3 +
 src/gallium/drivers/softpipe/sp_tile_cache.c     |  26 ++---
 src/gallium/drivers/softpipe/sp_tile_cache.h     |   4 +-
 src/gallium/drivers/svga/svga_screen_texture.c   |  45 +++++---
 src/gallium/drivers/svga/svga_screen_texture.h   |   3 +
 src/gallium/drivers/trace/tr_context.c           | 136 +++++++++++++++++++++++
 src/gallium/drivers/trace/tr_rbug.c              |  16 +--
 src/gallium/drivers/trace/tr_screen.c            | 136 +----------------------
 src/gallium/drivers/trace/tr_screen.h            |   1 +
 src/gallium/drivers/trace/tr_texture.c           |  13 ++-
 src/gallium/drivers/trace/tr_texture.h           |   6 +-
 src/gallium/include/pipe/p_context.h             |  26 +++++
 src/gallium/include/pipe/p_screen.h              |  17 ---
 src/gallium/include/pipe/p_state.h               |   2 +
 src/gallium/state_trackers/vega/api_filters.c    |  14 +--
 src/gallium/state_trackers/vega/api_images.c     |   5 +-
 src/gallium/state_trackers/vega/image.c          |  13 +--
 src/gallium/state_trackers/vega/paint.c          |   6 +-
 src/gallium/state_trackers/vega/st_inlines.h     |   9 +-
 src/mesa/state_tracker/st_atom_pixeltransfer.c   |   7 +-
 src/mesa/state_tracker/st_cb_accum.c             |   9 +-
 src/mesa/state_tracker/st_cb_bitmap.c            |  23 ++--
 src/mesa/state_tracker/st_cb_drawpixels.c        |  30 +++--
 src/mesa/state_tracker/st_cb_readpixels.c        |  20 ++--
 src/mesa/state_tracker/st_cb_texture.c           |  19 ++--
 src/mesa/state_tracker/st_gen_mipmap.c           |  13 +--
 src/mesa/state_tracker/st_inlines.h              |  10 +-
 src/mesa/state_tracker/st_texture.c              |  17 ++-
 76 files changed, 690 insertions(+), 610 deletions(-)

(limited to 'src/mesa')

diff --git a/src/gallium/auxiliary/draw/draw_pipe_aaline.c b/src/gallium/auxiliary/draw/draw_pipe_aaline.c
index 8f6ca15dfa..2cb76b25ae 100644
--- a/src/gallium/auxiliary/draw/draw_pipe_aaline.c
+++ b/src/gallium/auxiliary/draw/draw_pipe_aaline.c
@@ -422,9 +422,9 @@ aaline_create_texture(struct aaline_stage *aaline)
 
       /* This texture is new, no need to flush. 
        */
-      transfer = screen->get_tex_transfer(screen, aaline->texture, 0, level, 0,
+      transfer = pipe->get_tex_transfer(pipe, aaline->texture, 0, level, 0,
                                          PIPE_TRANSFER_WRITE, 0, 0, size, size);
-      data = screen->transfer_map(screen, transfer);
+      data = pipe->transfer_map(pipe, transfer);
       if (data == NULL)
          return FALSE;
 
@@ -448,8 +448,8 @@ aaline_create_texture(struct aaline_stage *aaline)
       }
 
       /* unmap */
-      screen->transfer_unmap(screen, transfer);
-      screen->tex_transfer_destroy(transfer);
+      pipe->transfer_unmap(pipe, transfer);
+      pipe->tex_transfer_destroy(transfer);
    }
    return TRUE;
 }
diff --git a/src/gallium/auxiliary/draw/draw_pipe_pstipple.c b/src/gallium/auxiliary/draw/draw_pipe_pstipple.c
index d0d99aa331..479777e807 100644
--- a/src/gallium/auxiliary/draw/draw_pipe_pstipple.c
+++ b/src/gallium/auxiliary/draw/draw_pipe_pstipple.c
@@ -374,19 +374,21 @@ pstip_update_texture(struct pstip_stage *pstip)
 {
    static const uint bit31 = 1 << 31;
    struct pipe_context *pipe = pstip->pipe;
-   struct pipe_screen *screen = pipe->screen;
    struct pipe_transfer *transfer;
    const uint *stipple = pstip->state.stipple->stipple;
    uint i, j;
    ubyte *data;
 
    /* XXX: want to avoid flushing just because we use stipple: 
+    *
+    * Flush should no longer be necessary if driver is properly
+    * interleaving drawing and transfers on a given context:
     */
    pipe->flush( pipe, PIPE_FLUSH_TEXTURE_CACHE, NULL );
 
-   transfer = screen->get_tex_transfer(screen, pstip->texture, 0, 0, 0,
-                                       PIPE_TRANSFER_WRITE, 0, 0, 32, 32);
-   data = screen->transfer_map(screen, transfer);
+   transfer = pipe->get_tex_transfer(pipe, pstip->texture, 0, 0, 0,
+				     PIPE_TRANSFER_WRITE, 0, 0, 32, 32);
+   data = pipe->transfer_map(pipe, transfer);
 
    /*
     * Load alpha texture.
@@ -408,8 +410,8 @@ pstip_update_texture(struct pstip_stage *pstip)
    }
 
    /* unmap */
-   screen->transfer_unmap(screen, transfer);
-   screen->tex_transfer_destroy(transfer);
+   pipe->transfer_unmap(pipe, transfer);
+   pipe->tex_transfer_destroy(transfer);
 }
 
 
diff --git a/src/gallium/auxiliary/util/u_debug.c b/src/gallium/auxiliary/util/u_debug.c
index 94be682c4b..de775a2dbc 100644
--- a/src/gallium/auxiliary/util/u_debug.c
+++ b/src/gallium/auxiliary/util/u_debug.c
@@ -421,26 +421,31 @@ void debug_dump_image(const char *prefix,
 #endif
 }
 
-void debug_dump_surface(const char *prefix,
+void debug_dump_surface(struct pipe_context *pipe,
+			const char *prefix,
                         struct pipe_surface *surface)     
 {
    struct pipe_texture *texture;
-   struct pipe_screen *screen;
    struct pipe_transfer *transfer;
    void *data;
 
    if (!surface)
       return;
 
+   /* XXX: this doesn't necessarily work, as the driver may be using
+    * temporary storage for the surface which hasn't been propagated
+    * back into the texture.  Need to nail down the semantics of views
+    * and transfers a bit better before we can say if extra work needs
+    * to be done here:
+    */
    texture = surface->texture;
-   screen = texture->screen;
 
-   transfer = screen->get_tex_transfer(screen, texture, surface->face,
-                                       surface->level, surface->zslice,
-                                       PIPE_TRANSFER_READ, 0, 0, surface->width,
-                                       surface->height);
+   transfer = pipe->get_tex_transfer(pipe, texture, surface->face,
+				     surface->level, surface->zslice,
+				     PIPE_TRANSFER_READ, 0, 0, surface->width,
+				     surface->height);
    
-   data = screen->transfer_map(screen, transfer);
+   data = pipe->transfer_map(pipe, transfer);
    if(!data)
       goto error;
    
@@ -452,13 +457,14 @@ void debug_dump_surface(const char *prefix,
                     transfer->stride,
                     data);
    
-   screen->transfer_unmap(screen, transfer);
+   pipe->transfer_unmap(pipe, transfer);
 error:
-   screen->tex_transfer_destroy(transfer);
+   pipe->tex_transfer_destroy(transfer);
 }
 
 
-void debug_dump_texture(const char *prefix,
+void debug_dump_texture(struct pipe_context *pipe,
+                        const char *prefix,
                         struct pipe_texture *texture)
 {
    struct pipe_surface *surface;
@@ -473,7 +479,7 @@ void debug_dump_texture(const char *prefix,
    surface = screen->get_tex_surface(screen, texture, 0, 0, 0,
                                      PIPE_TEXTURE_USAGE_SAMPLER);
    if (surface) {
-      debug_dump_surface(prefix, surface);
+      debug_dump_surface(pipe, prefix, surface);
       screen->tex_surface_destroy(surface);
    }
 }
@@ -511,22 +517,22 @@ struct bmp_rgb_quad {
 };
 
 void
-debug_dump_surface_bmp(const char *filename,
+debug_dump_surface_bmp(struct pipe_context *pipe,
+		       const char *filename,
                        struct pipe_surface *surface)
 {
 #ifndef PIPE_SUBSYSTEM_WINDOWS_MINIPORT
    struct pipe_transfer *transfer;
    struct pipe_texture *texture = surface->texture;
-   struct pipe_screen *screen = texture->screen;
 
-   transfer = screen->get_tex_transfer(screen, texture, surface->face,
-                                       surface->level, surface->zslice,
-                                       PIPE_TRANSFER_READ, 0, 0, surface->width,
-                                       surface->height);
+   transfer = pipe->get_tex_transfer(pipe, texture, surface->face,
+				     surface->level, surface->zslice,
+				     PIPE_TRANSFER_READ, 0, 0, surface->width,
+				     surface->height);
 
    debug_dump_transfer_bmp(filename, transfer);
 
-   screen->tex_transfer_destroy(transfer);
+   pipe->tex_transfer_destroy(transfer);
 #endif
 }
 
diff --git a/src/gallium/auxiliary/util/u_debug.h b/src/gallium/auxiliary/util/u_debug.h
index 0f4768f344..a383837743 100644
--- a/src/gallium/auxiliary/util/u_debug.h
+++ b/src/gallium/auxiliary/util/u_debug.h
@@ -312,6 +312,7 @@ debug_memory_end(unsigned long beginning);
 
 
 #ifdef DEBUG
+struct pipe_context;
 struct pipe_surface;
 struct pipe_transfer;
 struct pipe_texture;
@@ -321,11 +322,14 @@ void debug_dump_image(const char *prefix,
                       unsigned width, unsigned height,
                       unsigned stride,
                       const void *data);
-void debug_dump_surface(const char *prefix,
+void debug_dump_surface(struct pipe_context *pipe,
+			const char *prefix,
                         struct pipe_surface *surface);   
-void debug_dump_texture(const char *prefix,
+void debug_dump_texture(struct pipe_context *pipe,
+			const char *prefix,
                         struct pipe_texture *texture);
-void debug_dump_surface_bmp(const char *filename,
+void debug_dump_surface_bmp(struct pipe_context *pipe,
+                            const char *filename,
                             struct pipe_surface *surface);
 void debug_dump_transfer_bmp(const char *filename,
                              struct pipe_transfer *transfer);
@@ -334,8 +338,8 @@ void debug_dump_float_rgba_bmp(const char *filename,
                                float *rgba, unsigned stride);
 #else
 #define debug_dump_image(prefix, format, cpp, width, height, stride, data) ((void)0)
-#define debug_dump_surface(prefix, surface) ((void)0)
-#define debug_dump_surface_bmp(filename, surface) ((void)0)
+#define debug_dump_surface(pipe, prefix, surface) ((void)0)
+#define debug_dump_surface_bmp(pipe, filename, surface) ((void)0)
 #define debug_dump_transfer_bmp(filename, transfer) ((void)0)
 #define debug_dump_float_rgba_bmp(filename, width, height, rgba, stride) ((void)0)
 #endif
diff --git a/src/gallium/auxiliary/util/u_gen_mipmap.c b/src/gallium/auxiliary/util/u_gen_mipmap.c
index d421bee8ef..46fbde3f4a 100644
--- a/src/gallium/auxiliary/util/u_gen_mipmap.c
+++ b/src/gallium/auxiliary/util/u_gen_mipmap.c
@@ -1119,7 +1119,6 @@ make_1d_mipmap(struct gen_mipmap_state *ctx,
                uint face, uint baseLevel, uint lastLevel)
 {
    struct pipe_context *pipe = ctx->pipe;
-   struct pipe_screen *screen = pipe->screen;
    const uint zslice = 0;
    uint dstLevel;
 
@@ -1128,27 +1127,27 @@ make_1d_mipmap(struct gen_mipmap_state *ctx,
       struct pipe_transfer *srcTrans, *dstTrans;
       void *srcMap, *dstMap;
       
-      srcTrans = screen->get_tex_transfer(screen, pt, face, srcLevel, zslice,
+      srcTrans = pipe->get_tex_transfer(pipe, pt, face, srcLevel, zslice,
                                           PIPE_TRANSFER_READ, 0, 0,
                                           u_minify(pt->width0, srcLevel),
                                           u_minify(pt->height0, srcLevel));
-      dstTrans = screen->get_tex_transfer(screen, pt, face, dstLevel, zslice,
+      dstTrans = pipe->get_tex_transfer(pipe, pt, face, dstLevel, zslice,
                                           PIPE_TRANSFER_WRITE, 0, 0,
                                           u_minify(pt->width0, dstLevel),
                                           u_minify(pt->height0, dstLevel));
 
-      srcMap = (ubyte *) screen->transfer_map(screen, srcTrans);
-      dstMap = (ubyte *) screen->transfer_map(screen, dstTrans);
+      srcMap = (ubyte *) pipe->transfer_map(pipe, srcTrans);
+      dstMap = (ubyte *) pipe->transfer_map(pipe, dstTrans);
 
       reduce_1d(pt->format,
                 srcTrans->width, srcMap,
                 dstTrans->width, dstMap);
 
-      screen->transfer_unmap(screen, srcTrans);
-      screen->transfer_unmap(screen, dstTrans);
+      pipe->transfer_unmap(pipe, srcTrans);
+      pipe->transfer_unmap(pipe, dstTrans);
 
-      screen->tex_transfer_destroy(srcTrans);
-      screen->tex_transfer_destroy(dstTrans);
+      pipe->tex_transfer_destroy(srcTrans);
+      pipe->tex_transfer_destroy(dstTrans);
    }
 }
 
@@ -1159,7 +1158,6 @@ make_2d_mipmap(struct gen_mipmap_state *ctx,
                uint face, uint baseLevel, uint lastLevel)
 {
    struct pipe_context *pipe = ctx->pipe;
-   struct pipe_screen *screen = pipe->screen;
    const uint zslice = 0;
    uint dstLevel;
    
@@ -1171,17 +1169,17 @@ make_2d_mipmap(struct gen_mipmap_state *ctx,
       struct pipe_transfer *srcTrans, *dstTrans;
       ubyte *srcMap, *dstMap;
       
-      srcTrans = screen->get_tex_transfer(screen, pt, face, srcLevel, zslice,
+      srcTrans = pipe->get_tex_transfer(pipe, pt, face, srcLevel, zslice,
                                           PIPE_TRANSFER_READ, 0, 0,
                                           u_minify(pt->width0, srcLevel),
                                           u_minify(pt->height0, srcLevel));
-      dstTrans = screen->get_tex_transfer(screen, pt, face, dstLevel, zslice,
+      dstTrans = pipe->get_tex_transfer(pipe, pt, face, dstLevel, zslice,
                                           PIPE_TRANSFER_WRITE, 0, 0,
                                           u_minify(pt->width0, dstLevel),
                                           u_minify(pt->height0, dstLevel));
 
-      srcMap = (ubyte *) screen->transfer_map(screen, srcTrans);
-      dstMap = (ubyte *) screen->transfer_map(screen, dstTrans);
+      srcMap = (ubyte *) pipe->transfer_map(pipe, srcTrans);
+      dstMap = (ubyte *) pipe->transfer_map(pipe, dstTrans);
 
       reduce_2d(pt->format,
                 srcTrans->width, srcTrans->height,
@@ -1189,11 +1187,11 @@ make_2d_mipmap(struct gen_mipmap_state *ctx,
                 dstTrans->width, dstTrans->height,
                 dstTrans->stride, dstMap);
 
-      screen->transfer_unmap(screen, srcTrans);
-      screen->transfer_unmap(screen, dstTrans);
+      pipe->transfer_unmap(pipe, srcTrans);
+      pipe->transfer_unmap(pipe, dstTrans);
 
-      screen->tex_transfer_destroy(srcTrans);
-      screen->tex_transfer_destroy(dstTrans);
+      pipe->tex_transfer_destroy(srcTrans);
+      pipe->tex_transfer_destroy(dstTrans);
    }
 }
 
@@ -1216,17 +1214,17 @@ make_3d_mipmap(struct gen_mipmap_state *ctx,
       struct pipe_transfer *srcTrans, *dstTrans;
       ubyte *srcMap, *dstMap;
       
-      srcTrans = screen->get_tex_transfer(screen, pt, face, srcLevel, zslice,
+      srcTrans = pipe->get_tex_transfer(pipe, pt, face, srcLevel, zslice,
                                           PIPE_TRANSFER_READ, 0, 0,
                                           u_minify(pt->width0, srcLevel),
                                           u_minify(pt->height0, srcLevel));
-      dstTrans = screen->get_tex_transfer(screen, pt, face, dstLevel, zslice,
+      dstTrans = pipe->get_tex_transfer(pipe, pt, face, dstLevel, zslice,
                                           PIPE_TRANSFER_WRITE, 0, 0,
                                           u_minify(pt->width0, dstLevel),
                                           u_minify(pt->height0, dstLevel));
 
-      srcMap = (ubyte *) screen->transfer_map(screen, srcTrans);
-      dstMap = (ubyte *) screen->transfer_map(screen, dstTrans);
+      srcMap = (ubyte *) pipe->transfer_map(pipe, srcTrans);
+      dstMap = (ubyte *) pipe->transfer_map(pipe, dstTrans);
 
       reduce_3d(pt->format,
                 srcTrans->width, srcTrans->height,
@@ -1234,11 +1232,11 @@ make_3d_mipmap(struct gen_mipmap_state *ctx,
                 dstTrans->width, dstTrans->height,
                 dstTrans->stride, dstMap);
 
-      screen->transfer_unmap(screen, srcTrans);
-      screen->transfer_unmap(screen, dstTrans);
+      pipe->transfer_unmap(pipe, srcTrans);
+      pipe->transfer_unmap(pipe, dstTrans);
 
-      screen->tex_transfer_destroy(srcTrans);
-      screen->tex_transfer_destroy(dstTrans);
+      pipe->tex_transfer_destroy(srcTrans);
+      pipe->tex_transfer_destroy(dstTrans);
    }
 #else
    (void) reduce_3d;
diff --git a/src/gallium/auxiliary/util/u_inlines.h b/src/gallium/auxiliary/util/u_inlines.h
index 0cb3432c6e..ada31b8182 100644
--- a/src/gallium/auxiliary/util/u_inlines.h
+++ b/src/gallium/auxiliary/util/u_inlines.h
@@ -266,22 +266,22 @@ pipe_buffer_read(struct pipe_screen *screen,
 static INLINE void *
 pipe_transfer_map( struct pipe_transfer *transf )
 {
-   struct pipe_screen *screen = transf->texture->screen;
-   return screen->transfer_map(screen, transf);
+   struct pipe_context *context = transf->pipe;
+   return context->transfer_map(context, transf);
 }
 
 static INLINE void
 pipe_transfer_unmap( struct pipe_transfer *transf )
 {
-   struct pipe_screen *screen = transf->texture->screen;
-   screen->transfer_unmap(screen, transf);
+   struct pipe_context *context = transf->pipe;
+   context->transfer_unmap(context, transf);
 }
 
 static INLINE void
 pipe_transfer_destroy( struct pipe_transfer *transf )
 {
-   struct pipe_screen *screen = transf->texture->screen;
-   screen->tex_transfer_destroy(transf);
+   struct pipe_context *context = transf->pipe;
+   context->tex_transfer_destroy(transf);
 }
 
 static INLINE unsigned
diff --git a/src/gallium/auxiliary/util/u_rect.c b/src/gallium/auxiliary/util/u_rect.c
index 8479161c74..0b8405d01f 100644
--- a/src/gallium/auxiliary/util/u_rect.c
+++ b/src/gallium/auxiliary/util/u_rect.c
@@ -169,7 +169,6 @@ util_surface_copy(struct pipe_context *pipe,
                   unsigned src_x, unsigned src_y, 
                   unsigned w, unsigned h)
 {
-   struct pipe_screen *screen = pipe->screen;
    struct pipe_transfer *src_trans, *dst_trans;
    void *dst_map;
    const void *src_map;
@@ -182,7 +181,7 @@ util_surface_copy(struct pipe_context *pipe,
    src_format = src->texture->format;
    dst_format = dst->texture->format;
 
-   src_trans = screen->get_tex_transfer(screen,
+   src_trans = pipe->get_tex_transfer(pipe,
                                         src->texture,
                                         src->face,
                                         src->level,
@@ -190,7 +189,7 @@ util_surface_copy(struct pipe_context *pipe,
                                         PIPE_TRANSFER_READ,
                                         src_x, src_y, w, h);
 
-   dst_trans = screen->get_tex_transfer(screen,
+   dst_trans = pipe->get_tex_transfer(pipe,
                                         dst->texture,
                                         dst->face,
                                         dst->level,
@@ -202,8 +201,8 @@ util_surface_copy(struct pipe_context *pipe,
    assert(util_format_get_blockwidth(dst_format) == util_format_get_blockwidth(src_format));
    assert(util_format_get_blockheight(dst_format) == util_format_get_blockheight(src_format));
 
-   src_map = pipe->screen->transfer_map(screen, src_trans);
-   dst_map = pipe->screen->transfer_map(screen, dst_trans);
+   src_map = pipe->transfer_map(pipe, src_trans);
+   dst_map = pipe->transfer_map(pipe, dst_trans);
 
    assert(src_map);
    assert(dst_map);
@@ -221,11 +220,11 @@ util_surface_copy(struct pipe_context *pipe,
                      do_flip ? h - 1 : 0);
    }
 
-   pipe->screen->transfer_unmap(pipe->screen, src_trans);
-   pipe->screen->transfer_unmap(pipe->screen, dst_trans);
+   pipe->transfer_unmap(pipe, src_trans);
+   pipe->transfer_unmap(pipe, dst_trans);
 
-   screen->tex_transfer_destroy(src_trans);
-   screen->tex_transfer_destroy(dst_trans);
+   pipe->tex_transfer_destroy(src_trans);
+   pipe->tex_transfer_destroy(dst_trans);
 }
 
 
@@ -243,14 +242,13 @@ util_surface_fill(struct pipe_context *pipe,
                   unsigned dstx, unsigned dsty,
                   unsigned width, unsigned height, unsigned value)
 {
-   struct pipe_screen *screen = pipe->screen;
    struct pipe_transfer *dst_trans;
    void *dst_map;
 
    assert(dst->texture);
    if (!dst->texture)
       return;
-   dst_trans = screen->get_tex_transfer(screen,
+   dst_trans = pipe->get_tex_transfer(pipe,
                                         dst->texture,
                                         dst->face,
                                         dst->level,
@@ -258,7 +256,7 @@ util_surface_fill(struct pipe_context *pipe,
                                         PIPE_TRANSFER_WRITE,
                                         dstx, dsty, width, height);
 
-   dst_map = pipe->screen->transfer_map(screen, dst_trans);
+   dst_map = pipe->transfer_map(pipe, dst_trans);
 
    assert(dst_map);
 
@@ -302,6 +300,6 @@ util_surface_fill(struct pipe_context *pipe,
       }
    }
 
-   pipe->screen->transfer_unmap(pipe->screen, dst_trans);
-   screen->tex_transfer_destroy(dst_trans);
+   pipe->transfer_unmap(pipe, dst_trans);
+   pipe->tex_transfer_destroy(dst_trans);
 }
diff --git a/src/gallium/auxiliary/util/u_tile.c b/src/gallium/auxiliary/util/u_tile.c
index 79481b710b..70a6d97385 100644
--- a/src/gallium/auxiliary/util/u_tile.c
+++ b/src/gallium/auxiliary/util/u_tile.c
@@ -49,7 +49,7 @@ pipe_get_tile_raw(struct pipe_transfer *pt,
                   uint x, uint y, uint w, uint h,
                   void *dst, int dst_stride)
 {
-   struct pipe_screen *screen = pt->texture->screen;
+   struct pipe_context *pipe = pt->pipe;
    const void *src;
 
    if (dst_stride == 0)
@@ -58,14 +58,14 @@ pipe_get_tile_raw(struct pipe_transfer *pt,
    if (pipe_clip_tile(x, y, &w, &h, pt))
       return;
 
-   src = screen->transfer_map(screen, pt);
+   src = pipe->transfer_map(pipe, pt);
    assert(src);
    if(!src)
       return;
 
    util_copy_rect(dst, pt->texture->format, dst_stride, 0, 0, w, h, src, pt->stride, x, y);
 
-   screen->transfer_unmap(screen, pt);
+   pipe->transfer_unmap(pipe, pt);
 }
 
 
@@ -77,7 +77,7 @@ pipe_put_tile_raw(struct pipe_transfer *pt,
                   uint x, uint y, uint w, uint h,
                   const void *src, int src_stride)
 {
-   struct pipe_screen *screen = pt->texture->screen;
+   struct pipe_context *pipe = pt->pipe;
    void *dst;
    enum pipe_format format = pt->texture->format;
 
@@ -87,14 +87,14 @@ pipe_put_tile_raw(struct pipe_transfer *pt,
    if (pipe_clip_tile(x, y, &w, &h, pt))
       return;
 
-   dst = screen->transfer_map(screen, pt);
+   dst = pipe->transfer_map(pipe, pt);
    assert(dst);
    if(!dst)
       return;
 
    util_copy_rect(dst, format, pt->stride, x, y, w, h, src, src_stride, 0, 0);
 
-   screen->transfer_unmap(screen, pt);
+   pipe->transfer_unmap(pipe, pt);
 }
 
 
@@ -1377,7 +1377,7 @@ pipe_get_tile_z(struct pipe_transfer *pt,
                 uint x, uint y, uint w, uint h,
                 uint *z)
 {
-   struct pipe_screen *screen = pt->texture->screen;
+   struct pipe_context *pipe = pt->pipe;
    const uint dstStride = w;
    ubyte *map;
    uint *pDest = z;
@@ -1387,7 +1387,7 @@ pipe_get_tile_z(struct pipe_transfer *pt,
    if (pipe_clip_tile(x, y, &w, &h, pt))
       return;
 
-   map = (ubyte *)screen->transfer_map(screen, pt);
+   map = (ubyte *)pipe->transfer_map(pipe, pt);
    if (!map) {
       assert(0);
       return;
@@ -1453,7 +1453,7 @@ pipe_get_tile_z(struct pipe_transfer *pt,
       assert(0);
    }
 
-   screen->transfer_unmap(screen, pt);
+   pipe->transfer_unmap(pipe, pt);
 }
 
 
@@ -1462,7 +1462,7 @@ pipe_put_tile_z(struct pipe_transfer *pt,
                 uint x, uint y, uint w, uint h,
                 const uint *zSrc)
 {
-   struct pipe_screen *screen = pt->texture->screen;
+   struct pipe_context *pipe = pt->pipe;
    const uint srcStride = w;
    const uint *ptrc = zSrc;
    ubyte *map;
@@ -1472,7 +1472,7 @@ pipe_put_tile_z(struct pipe_transfer *pt,
    if (pipe_clip_tile(x, y, &w, &h, pt))
       return;
 
-   map = (ubyte *)screen->transfer_map(screen, pt);
+   map = (ubyte *)pipe->transfer_map(pipe, pt);
    if (!map) {
       assert(0);
       return;
@@ -1560,7 +1560,7 @@ pipe_put_tile_z(struct pipe_transfer *pt,
       assert(0);
    }
 
-   screen->transfer_unmap(screen, pt);
+   pipe->transfer_unmap(pipe, pt);
 }
 
 
diff --git a/src/gallium/auxiliary/vl/vl_mpeg12_mc_renderer.c b/src/gallium/auxiliary/vl/vl_mpeg12_mc_renderer.c
index 0763b5bb0e..dcc0014479 100644
--- a/src/gallium/auxiliary/vl/vl_mpeg12_mc_renderer.c
+++ b/src/gallium/auxiliary/vl/vl_mpeg12_mc_renderer.c
@@ -680,14 +680,14 @@ xfer_buffers_map(struct vl_mpeg12_mc_renderer *r)
    assert(r);
 
    for (i = 0; i < 3; ++i) {
-      r->tex_transfer[i] = r->pipe->screen->get_tex_transfer
+      r->tex_transfer[i] = r->pipe->get_tex_transfer
       (
-         r->pipe->screen, r->textures.all[i],
+         r->pipe, r->textures.all[i],
          0, 0, 0, PIPE_TRANSFER_WRITE, 0, 0,
          r->textures.all[i]->width0, r->textures.all[i]->height0
       );
 
-      r->texels[i] = r->pipe->screen->transfer_map(r->pipe->screen, r->tex_transfer[i]);
+      r->texels[i] = r->pipe->transfer_map(r->pipe, r->tex_transfer[i]);
    }
 }
 
@@ -699,8 +699,8 @@ xfer_buffers_unmap(struct vl_mpeg12_mc_renderer *r)
    assert(r);
 
    for (i = 0; i < 3; ++i) {
-      r->pipe->screen->transfer_unmap(r->pipe->screen, r->tex_transfer[i]);
-      r->pipe->screen->tex_transfer_destroy(r->tex_transfer[i]);
+      r->pipe->transfer_unmap(r->pipe, r->tex_transfer[i]);
+      r->pipe->tex_transfer_destroy(r->tex_transfer[i]);
    }
 }
 
diff --git a/src/gallium/drivers/i915/i915_context.c b/src/gallium/drivers/i915/i915_context.c
index 3d45a22b7e..130519ffa5 100644
--- a/src/gallium/drivers/i915/i915_context.c
+++ b/src/gallium/drivers/i915/i915_context.c
@@ -221,6 +221,7 @@ i915_create_context(struct pipe_screen *screen, void *priv)
    i915_init_surface_functions(i915);
    i915_init_state_functions(i915);
    i915_init_flush_functions(i915);
+   i915_init_texture_functions(i915);
 
    draw_install_aaline_stage(i915->draw, &i915->base);
    draw_install_aapoint_stage(i915->draw, &i915->base);
diff --git a/src/gallium/drivers/i915/i915_context.h b/src/gallium/drivers/i915/i915_context.h
index 4994537683..039165b63f 100644
--- a/src/gallium/drivers/i915/i915_context.h
+++ b/src/gallium/drivers/i915/i915_context.h
@@ -349,6 +349,12 @@ struct pipe_context *i915_create_context(struct pipe_screen *screen,
 					 void *priv);
 
 
+/***********************************************************************
+ * i915_texture.c
+ */
+void i915_init_texture_functions(struct i915_context *i915 );
+
+
 /***********************************************************************
  * Inline conversion functions.  These are better-typed than the
  * macros used previously:
diff --git a/src/gallium/drivers/i915/i915_texture.c b/src/gallium/drivers/i915/i915_texture.c
index 3ce52cdcdb..3435f7797f 100644
--- a/src/gallium/drivers/i915/i915_texture.c
+++ b/src/gallium/drivers/i915/i915_texture.c
@@ -795,12 +795,12 @@ i915_tex_surface_destroy(struct pipe_surface *surf)
 
 
 /*
- * Screen transfer functions
+ * Texture transfer functions
  */
 
 
-static struct pipe_transfer*
-i915_get_tex_transfer(struct pipe_screen *screen,
+static struct pipe_transfer *
+i915_get_tex_transfer(struct pipe_context *pipe,
                       struct pipe_texture *texture,
                       unsigned face, unsigned level, unsigned zslice,
                       enum pipe_transfer_usage usage, unsigned x, unsigned y,
@@ -825,6 +825,7 @@ i915_get_tex_transfer(struct pipe_screen *screen,
    trans = CALLOC_STRUCT(i915_transfer);
    if (trans) {
       pipe_texture_reference(&trans->base.texture, texture);
+      trans->base.pipe = pipe;
       trans->base.x = x;
       trans->base.y = y;
       trans->base.width = w;
@@ -837,7 +838,7 @@ i915_get_tex_transfer(struct pipe_screen *screen,
 }
 
 static void *
-i915_transfer_map(struct pipe_screen *screen,
+i915_transfer_map(struct pipe_context *pipe,
                   struct pipe_transfer *transfer)
 {
    struct i915_texture *tex = (struct i915_texture *)transfer->texture;
@@ -859,7 +860,7 @@ i915_transfer_map(struct pipe_screen *screen,
 }
 
 static void
-i915_transfer_unmap(struct pipe_screen *screen,
+i915_transfer_unmap(struct pipe_context *pipe,
                     struct pipe_transfer *transfer)
 {
    struct i915_texture *tex = (struct i915_texture *)transfer->texture;
@@ -879,6 +880,14 @@ i915_tex_transfer_destroy(struct pipe_transfer *trans)
  * Other texture functions
  */
 
+void
+i915_init_texture_functions(struct i915_context *i915 )
+{
+   i915->base.get_tex_transfer = i915_get_tex_transfer;
+   i915->base.transfer_map = i915_transfer_map;
+   i915->base.transfer_unmap = i915_transfer_unmap;
+   i915->base.tex_transfer_destroy = i915_tex_transfer_destroy;
+}
 
 void
 i915_init_screen_texture_functions(struct i915_screen *is)
@@ -889,8 +898,4 @@ i915_init_screen_texture_functions(struct i915_screen *is)
    is->base.texture_destroy = i915_texture_destroy;
    is->base.get_tex_surface = i915_get_tex_surface;
    is->base.tex_surface_destroy = i915_tex_surface_destroy;
-   is->base.get_tex_transfer = i915_get_tex_transfer;
-   is->base.transfer_map = i915_transfer_map;
-   is->base.transfer_unmap = i915_transfer_unmap;
-   is->base.tex_transfer_destroy = i915_tex_transfer_destroy;
 }
diff --git a/src/gallium/drivers/i965/brw_screen.h b/src/gallium/drivers/i965/brw_screen.h
index e0f3cd2a9f..23e052d0b9 100644
--- a/src/gallium/drivers/i965/brw_screen.h
+++ b/src/gallium/drivers/i965/brw_screen.h
@@ -181,6 +181,10 @@ void brw_update_texture( struct brw_screen *brw_screen,
 			 struct brw_texture *tex );
 
 
+/* brw_screen_texture.h
+ */
+struct brw_context;
+void brw_tex_init( struct brw_context *brw );
 void brw_screen_tex_init( struct brw_screen *brw_screen );
 void brw_screen_tex_surface_init( struct brw_screen *brw_screen );
 
@@ -198,5 +202,4 @@ boolean brw_is_buffer_referenced_by_bo( struct brw_screen *brw_screen,
                                         struct brw_winsys_buffer *bo );
 
 
-
 #endif /* BRW_SCREEN_H */
diff --git a/src/gallium/drivers/i965/brw_screen_texture.c b/src/gallium/drivers/i965/brw_screen_texture.c
index cc79bfc771..52bf9b3c1c 100644
--- a/src/gallium/drivers/i965/brw_screen_texture.c
+++ b/src/gallium/drivers/i965/brw_screen_texture.c
@@ -37,6 +37,8 @@
 #include "brw_defines.h"
 #include "brw_structs.h"
 #include "brw_winsys.h"
+#include "brw_context.h"
+
 
 
 
@@ -479,7 +481,7 @@ boolean brw_is_texture_referenced_by_bo( struct brw_screen *brw_screen,
  */
 
 static struct pipe_transfer*
-brw_get_tex_transfer(struct pipe_screen *screen,
+brw_get_tex_transfer(struct pipe_context *pipe,
                      struct pipe_texture *texture,
                      unsigned face, unsigned level, unsigned zslice,
                      enum pipe_transfer_usage usage, unsigned x, unsigned y,
@@ -502,6 +504,7 @@ brw_get_tex_transfer(struct pipe_screen *screen,
    trans = CALLOC_STRUCT(brw_transfer);
    if (trans) {
       pipe_texture_reference(&trans->base.texture, texture);
+      trans->base.pipe = pipe;
       trans->base.x = x;
       trans->base.y = y;
       trans->base.width = w;
@@ -514,11 +517,11 @@ brw_get_tex_transfer(struct pipe_screen *screen,
 }
 
 static void *
-brw_transfer_map(struct pipe_screen *screen,
+brw_transfer_map(struct pipe_context *pipe,
                  struct pipe_transfer *transfer)
 {
    struct brw_texture *tex = brw_texture(transfer->texture);
-   struct brw_winsys_screen *sws = brw_screen(screen)->sws;
+   struct brw_winsys_screen *sws = brw_screen(pipe->screen)->sws;
    char *map;
    unsigned usage = transfer->usage;
 
@@ -541,11 +544,11 @@ brw_transfer_map(struct pipe_screen *screen,
 }
 
 static void
-brw_transfer_unmap(struct pipe_screen *screen,
+brw_transfer_unmap(struct pipe_context *pipe,
                    struct pipe_transfer *transfer)
 {
    struct brw_texture *tex = brw_texture(transfer->texture);
-   struct brw_winsys_screen *sws = brw_screen(screen)->sws;
+   struct brw_winsys_screen *sws = brw_screen(pipe->screen)->sws;
 
    sws->bo_unmap(tex->bo);
 }
@@ -558,6 +561,14 @@ brw_tex_transfer_destroy(struct pipe_transfer *trans)
 }
 
 
+void brw_tex_init( struct brw_context *brw )
+{
+   brw->base.get_tex_transfer = brw_get_tex_transfer;
+   brw->base.transfer_map = brw_transfer_map;
+   brw->base.transfer_unmap = brw_transfer_unmap;
+   brw->base.tex_transfer_destroy = brw_tex_transfer_destroy;
+}
+
 void brw_screen_tex_init( struct brw_screen *brw_screen )
 {
    brw_screen->base.is_format_supported = brw_is_format_supported;
@@ -565,8 +576,4 @@ void brw_screen_tex_init( struct brw_screen *brw_screen )
    brw_screen->base.texture_from_handle = brw_texture_from_handle;
    brw_screen->base.texture_get_handle = brw_texture_get_handle;
    brw_screen->base.texture_destroy = brw_texture_destroy;
-   brw_screen->base.get_tex_transfer = brw_get_tex_transfer;
-   brw_screen->base.transfer_map = brw_transfer_map;
-   brw_screen->base.transfer_unmap = brw_transfer_unmap;
-   brw_screen->base.tex_transfer_destroy = brw_tex_transfer_destroy;
 }
diff --git a/src/gallium/drivers/identity/id_context.c b/src/gallium/drivers/identity/id_context.c
index baf0ae4401..5e371c47c8 100644
--- a/src/gallium/drivers/identity/id_context.c
+++ b/src/gallium/drivers/identity/id_context.c
@@ -711,6 +711,74 @@ identity_is_buffer_referenced(struct pipe_context *_pipe,
                                      buffer);
 }
 
+
+
+static struct pipe_transfer *
+identity_context_get_tex_transfer(struct pipe_context *_context,
+				  struct pipe_texture *_texture,
+                                 unsigned face,
+                                 unsigned level,
+                                 unsigned zslice,
+                                 enum pipe_transfer_usage usage,
+                                 unsigned x,
+                                 unsigned y,
+                                 unsigned w,
+                                 unsigned h)
+{
+   struct identity_context *id_context = identity_context(_context);
+   struct identity_texture *id_texture = identity_texture(_texture);
+   struct pipe_context *context = id_context->pipe;
+   struct pipe_texture *texture = id_texture->texture;
+   struct pipe_transfer *result;
+
+   result = context->get_tex_transfer(context,
+                                     texture,
+                                     face,
+                                     level,
+                                     zslice,
+                                     usage,
+                                     x,
+                                     y,
+                                     w,
+                                     h);
+
+   if (result)
+      return identity_transfer_create(id_context, id_texture, result);
+   return NULL;
+}
+
+static void
+identity_context_tex_transfer_destroy(struct pipe_transfer *_transfer)
+{
+   identity_transfer_destroy(identity_transfer(_transfer));
+}
+
+static void *
+identity_context_transfer_map(struct pipe_context *_context,
+                             struct pipe_transfer *_transfer)
+{
+   struct identity_context *id_context = identity_context(_context);
+   struct identity_transfer *id_transfer = identity_transfer(_transfer);
+   struct pipe_context *context = id_context->pipe;
+   struct pipe_transfer *transfer = id_transfer->transfer;
+
+   return context->transfer_map(context,
+				transfer);
+}
+
+static void
+identity_context_transfer_unmap(struct pipe_context *_context,
+                               struct pipe_transfer *_transfer)
+{
+   struct identity_context *id_context = identity_context(_context);
+   struct identity_transfer *id_transfer = identity_transfer(_transfer);
+   struct pipe_context *context = id_context->pipe;
+   struct pipe_transfer *transfer = id_transfer->transfer;
+
+   context->transfer_unmap(context,
+                          transfer);
+}
+
 struct pipe_context *
 identity_context_create(struct pipe_screen *_screen, struct pipe_context *pipe)
 {
@@ -775,6 +843,10 @@ identity_context_create(struct pipe_screen *_screen, struct pipe_context *pipe)
    id_pipe->base.flush = identity_flush;
    id_pipe->base.is_texture_referenced = identity_is_texture_referenced;
    id_pipe->base.is_buffer_referenced = identity_is_buffer_referenced;
+   id_pipe->base.get_tex_transfer = identity_context_get_tex_transfer;
+   id_pipe->base.tex_transfer_destroy = identity_context_tex_transfer_destroy;
+   id_pipe->base.transfer_map = identity_context_transfer_map;
+   id_pipe->base.transfer_unmap = identity_context_transfer_unmap;
 
    id_pipe->pipe = pipe;
 
diff --git a/src/gallium/drivers/identity/id_objects.c b/src/gallium/drivers/identity/id_objects.c
index 2b1a60c1bf..91831404b8 100644
--- a/src/gallium/drivers/identity/id_objects.c
+++ b/src/gallium/drivers/identity/id_objects.c
@@ -142,7 +142,8 @@ identity_surface_destroy(struct identity_surface *id_surface)
 
 
 struct pipe_transfer *
-identity_transfer_create(struct identity_texture *id_texture,
+identity_transfer_create(struct identity_context *id_context,
+			 struct identity_texture *id_texture,
                          struct pipe_transfer *transfer)
 {
    struct identity_transfer *id_transfer;
@@ -166,18 +167,15 @@ identity_transfer_create(struct identity_texture *id_texture,
    return &id_transfer->base;
 
 error:
-   transfer->texture->screen->tex_transfer_destroy(transfer);
+   transfer->pipe->tex_transfer_destroy(transfer);
    return NULL;
 }
 
 void
 identity_transfer_destroy(struct identity_transfer *id_transfer)
 {
-   struct identity_screen *id_screen = identity_screen(id_transfer->base.texture->screen);
-   struct pipe_screen *screen = id_screen->screen;
-
    pipe_texture_reference(&id_transfer->base.texture, NULL);
-   screen->tex_transfer_destroy(id_transfer->transfer);
+   id_transfer->transfer->pipe->tex_transfer_destroy(id_transfer->transfer);
    FREE(id_transfer);
 }
 
diff --git a/src/gallium/drivers/identity/id_objects.h b/src/gallium/drivers/identity/id_objects.h
index 77cc719079..3c4e6d3f8c 100644
--- a/src/gallium/drivers/identity/id_objects.h
+++ b/src/gallium/drivers/identity/id_objects.h
@@ -35,6 +35,7 @@
 
 #include "id_screen.h"
 
+struct identity_context;
 
 struct identity_buffer
 {
@@ -177,7 +178,8 @@ void
 identity_surface_destroy(struct identity_surface *id_surface);
 
 struct pipe_transfer *
-identity_transfer_create(struct identity_texture *id_texture,
+identity_transfer_create(struct identity_context *id_context,
+			 struct identity_texture *id_texture,
                          struct pipe_transfer *transfer);
 
 void
diff --git a/src/gallium/drivers/identity/id_screen.c b/src/gallium/drivers/identity/id_screen.c
index b9d0f003d7..419b146578 100644
--- a/src/gallium/drivers/identity/id_screen.c
+++ b/src/gallium/drivers/identity/id_screen.c
@@ -207,71 +207,6 @@ identity_screen_tex_surface_destroy(struct pipe_surface *_surface)
    identity_surface_destroy(identity_surface(_surface));
 }
 
-static struct pipe_transfer *
-identity_screen_get_tex_transfer(struct pipe_screen *_screen,
-                                 struct pipe_texture *_texture,
-                                 unsigned face,
-                                 unsigned level,
-                                 unsigned zslice,
-                                 enum pipe_transfer_usage usage,
-                                 unsigned x,
-                                 unsigned y,
-                                 unsigned w,
-                                 unsigned h)
-{
-   struct identity_screen *id_screen = identity_screen(_screen);
-   struct identity_texture *id_texture = identity_texture(_texture);
-   struct pipe_screen *screen = id_screen->screen;
-   struct pipe_texture *texture = id_texture->texture;
-   struct pipe_transfer *result;
-
-   result = screen->get_tex_transfer(screen,
-                                     texture,
-                                     face,
-                                     level,
-                                     zslice,
-                                     usage,
-                                     x,
-                                     y,
-                                     w,
-                                     h);
-
-   if (result)
-      return identity_transfer_create(id_texture, result);
-   return NULL;
-}
-
-static void
-identity_screen_tex_transfer_destroy(struct pipe_transfer *_transfer)
-{
-   identity_transfer_destroy(identity_transfer(_transfer));
-}
-
-static void *
-identity_screen_transfer_map(struct pipe_screen *_screen,
-                             struct pipe_transfer *_transfer)
-{
-   struct identity_screen *id_screen = identity_screen(_screen);
-   struct identity_transfer *id_transfer = identity_transfer(_transfer);
-   struct pipe_screen *screen = id_screen->screen;
-   struct pipe_transfer *transfer = id_transfer->transfer;
-
-   return screen->transfer_map(screen,
-                               transfer);
-}
-
-static void
-identity_screen_transfer_unmap(struct pipe_screen *_screen,
-                               struct pipe_transfer *_transfer)
-{
-   struct identity_screen *id_screen = identity_screen(_screen);
-   struct identity_transfer *id_transfer = identity_transfer(_transfer);
-   struct pipe_screen *screen = id_screen->screen;
-   struct pipe_transfer *transfer = id_transfer->transfer;
-
-   screen->transfer_unmap(screen,
-                          transfer);
-}
 
 static struct pipe_buffer *
 identity_screen_buffer_create(struct pipe_screen *_screen,
@@ -488,10 +423,6 @@ identity_screen_create(struct pipe_screen *screen)
    id_screen->base.texture_destroy = identity_screen_texture_destroy;
    id_screen->base.get_tex_surface = identity_screen_get_tex_surface;
    id_screen->base.tex_surface_destroy = identity_screen_tex_surface_destroy;
-   id_screen->base.get_tex_transfer = identity_screen_get_tex_transfer;
-   id_screen->base.tex_transfer_destroy = identity_screen_tex_transfer_destroy;
-   id_screen->base.transfer_map = identity_screen_transfer_map;
-   id_screen->base.transfer_unmap = identity_screen_transfer_unmap;
    id_screen->base.buffer_create = identity_screen_buffer_create;
    id_screen->base.user_buffer_create = identity_screen_user_buffer_create;
    if (screen->buffer_map)
diff --git a/src/gallium/drivers/llvmpipe/Makefile b/src/gallium/drivers/llvmpipe/Makefile
index 41ac1cee72..89c06ea3ad 100644
--- a/src/gallium/drivers/llvmpipe/Makefile
+++ b/src/gallium/drivers/llvmpipe/Makefile
@@ -55,7 +55,7 @@ testprogs := lp_test_format	\
 
 LIBS += $(GL_LIB_DEPS) -L. -lllvmpipe -L../../auxiliary/ -lgallium
 
-$(testprogs): lp_test_% : lp_test_%.o lp_test_main.o libllvmpipe.a
-	$(LD) $(filter %.o,$^) -o $@ -Wl,--start-group  $(LIBS) -Wl,--end-group
+#$(testprogs): lp_test_% : lp_test_%.o lp_test_main.o libllvmpipe.a
+#	$(LD) $(filter %.o,$^) -o $@ -Wl,--start-group  $(LIBS) -Wl,--end-group
 
-default: $(testprogs)
+#default: $(testprogs)
diff --git a/src/gallium/drivers/llvmpipe/lp_context.c b/src/gallium/drivers/llvmpipe/lp_context.c
index d94efec16a..945e3e0558 100644
--- a/src/gallium/drivers/llvmpipe/lp_context.c
+++ b/src/gallium/drivers/llvmpipe/lp_context.c
@@ -173,6 +173,7 @@ llvmpipe_create_context( struct pipe_screen *screen, void *priv )
    llvmpipe->pipe.is_buffer_referenced = llvmpipe_is_buffer_referenced;
 
    llvmpipe_init_query_funcs( llvmpipe );
+   llvmpipe_init_context_texture_funcs( &llvmpipe->pipe );
 
    /*
     * Create drawing context and plug our rendering stage into it.
diff --git a/src/gallium/drivers/llvmpipe/lp_flush.c b/src/gallium/drivers/llvmpipe/lp_flush.c
index bf832433be..1b4e889935 100644
--- a/src/gallium/drivers/llvmpipe/lp_flush.c
+++ b/src/gallium/drivers/llvmpipe/lp_flush.c
@@ -79,12 +79,12 @@ llvmpipe_flush( struct pipe_context *pipe,
 
       for (i = 0; i < llvmpipe->framebuffer.nr_cbufs; i++) {
 	 util_snprintf(filename, sizeof(filename), "cbuf%u_%u", i, frame_no);
-         debug_dump_surface(filename, llvmpipe->framebuffer.cbufs[i]);
+         debug_dump_surface_bmp(&llvmpipe->pipe, filename, llvmpipe->framebuffer.cbufs[0]);
       }
 
       if (0) {
          util_snprintf(filename, sizeof(filename), "zsbuf_%u", frame_no);
-         debug_dump_surface(filename, llvmpipe->framebuffer.zsbuf);
+         debug_dump_surface_bmp(&llvmpipe->pipe, filename, llvmpipe->framebuffer.zsbuf);
       }
 
       ++frame_no;
diff --git a/src/gallium/drivers/llvmpipe/lp_scene.c b/src/gallium/drivers/llvmpipe/lp_scene.c
index 72492c0f0c..bfe53d4106 100644
--- a/src/gallium/drivers/llvmpipe/lp_scene.c
+++ b/src/gallium/drivers/llvmpipe/lp_scene.c
@@ -397,7 +397,7 @@ end:
 static boolean
 lp_scene_map_buffers( struct lp_scene *scene )
 {
-   struct pipe_screen *screen = scene->pipe->screen;
+   struct pipe_context *pipe = scene->pipe;
    struct pipe_surface *cbuf, *zsbuf;
    int i;
 
@@ -409,7 +409,7 @@ lp_scene_map_buffers( struct lp_scene *scene )
    for (i = 0; i < scene->fb.nr_cbufs; i++) {
       cbuf = scene->fb.cbufs[i];
       if (cbuf) {
-	 scene->cbuf_transfer[i] = screen->get_tex_transfer(screen,
+	 scene->cbuf_transfer[i] = pipe->get_tex_transfer(pipe,
                                                           cbuf->texture,
                                                           cbuf->face,
                                                           cbuf->level,
@@ -421,7 +421,7 @@ lp_scene_map_buffers( struct lp_scene *scene )
 	 if (!scene->cbuf_transfer[i])
 	    goto fail;
 
-	 scene->cbuf_map[i] = screen->transfer_map(screen, 
+	 scene->cbuf_map[i] = pipe->transfer_map(pipe, 
                                                  scene->cbuf_transfer[i]);
 	 if (!scene->cbuf_map[i])
 	    goto fail;
@@ -432,7 +432,7 @@ lp_scene_map_buffers( struct lp_scene *scene )
     */
    zsbuf = scene->fb.zsbuf;
    if (zsbuf) {
-      scene->zsbuf_transfer = screen->get_tex_transfer(screen,
+      scene->zsbuf_transfer = pipe->get_tex_transfer(pipe,
                                                        zsbuf->texture,
                                                        zsbuf->face,
                                                        zsbuf->level,
@@ -444,7 +444,7 @@ lp_scene_map_buffers( struct lp_scene *scene )
       if (!scene->zsbuf_transfer)
          goto fail;
 
-      scene->zsbuf_map = screen->transfer_map(screen, 
+      scene->zsbuf_map = pipe->transfer_map(pipe, 
                                               scene->zsbuf_transfer);
       if (!scene->zsbuf_map)
 	 goto fail;
@@ -469,25 +469,25 @@ fail:
 static void
 lp_scene_unmap_buffers( struct lp_scene *scene )
 {
-   struct pipe_screen *screen = scene->pipe->screen;
+   struct pipe_context *pipe = scene->pipe;
    unsigned i;
 
    for (i = 0; i < scene->fb.nr_cbufs; i++) {
       if (scene->cbuf_map[i]) 
-	 screen->transfer_unmap(screen, scene->cbuf_transfer[i]);
+	 pipe->transfer_unmap(pipe, scene->cbuf_transfer[i]);
 
       if (scene->cbuf_transfer[i])
-	 screen->tex_transfer_destroy(scene->cbuf_transfer[i]);
+	 pipe->tex_transfer_destroy(scene->cbuf_transfer[i]);
 
       scene->cbuf_transfer[i] = NULL;
       scene->cbuf_map[i] = NULL;
    }
 
    if (scene->zsbuf_map) 
-      screen->transfer_unmap(screen, scene->zsbuf_transfer);
+      pipe->transfer_unmap(pipe, scene->zsbuf_transfer);
 
    if (scene->zsbuf_transfer)
-      screen->tex_transfer_destroy(scene->zsbuf_transfer);
+      pipe->tex_transfer_destroy(scene->zsbuf_transfer);
 
    scene->zsbuf_transfer = NULL;
    scene->zsbuf_map = NULL;
diff --git a/src/gallium/drivers/llvmpipe/lp_texture.c b/src/gallium/drivers/llvmpipe/lp_texture.c
index 74b7b4ec5e..65f7994e0e 100644
--- a/src/gallium/drivers/llvmpipe/lp_texture.c
+++ b/src/gallium/drivers/llvmpipe/lp_texture.c
@@ -243,7 +243,7 @@ llvmpipe_tex_surface_destroy(struct pipe_surface *surf)
 
 
 static struct pipe_transfer *
-llvmpipe_get_tex_transfer(struct pipe_screen *screen,
+llvmpipe_get_tex_transfer(struct pipe_context *pipe,
                           struct pipe_texture *texture,
                           unsigned face, unsigned level, unsigned zslice,
                           enum pipe_transfer_usage usage,
@@ -307,10 +307,10 @@ llvmpipe_tex_transfer_destroy(struct pipe_transfer *transfer)
 
 
 static void *
-llvmpipe_transfer_map( struct pipe_screen *_screen,
+llvmpipe_transfer_map( struct pipe_context *pipe,
                        struct pipe_transfer *transfer )
 {
-   struct llvmpipe_screen *screen = llvmpipe_screen(_screen);
+   struct llvmpipe_screen *screen = llvmpipe_screen(pipe->screen);
    ubyte *map, *xfer_map;
    struct llvmpipe_texture *lpt;
    enum pipe_format format;
@@ -351,10 +351,10 @@ llvmpipe_transfer_map( struct pipe_screen *_screen,
 
 
 static void
-llvmpipe_transfer_unmap(struct pipe_screen *screen,
-                       struct pipe_transfer *transfer)
+llvmpipe_transfer_unmap(struct pipe_context *pipe,
+                        struct pipe_transfer *transfer)
 {
-   struct llvmpipe_screen *lp_screen = llvmpipe_screen(screen);
+   struct llvmpipe_screen *lp_screen = llvmpipe_screen(pipe->screen);
    struct llvmpipe_texture *lpt;
 
    assert(transfer->texture);
@@ -376,9 +376,14 @@ llvmpipe_init_screen_texture_funcs(struct pipe_screen *screen)
 
    screen->get_tex_surface = llvmpipe_get_tex_surface;
    screen->tex_surface_destroy = llvmpipe_tex_surface_destroy;
+}
+
 
-   screen->get_tex_transfer = llvmpipe_get_tex_transfer;
-   screen->tex_transfer_destroy = llvmpipe_tex_transfer_destroy;
-   screen->transfer_map = llvmpipe_transfer_map;
-   screen->transfer_unmap = llvmpipe_transfer_unmap;
+void
+llvmpipe_init_context_texture_funcs(struct pipe_context *pipe)
+{
+   pipe->get_tex_transfer = llvmpipe_get_tex_transfer;
+   pipe->tex_transfer_destroy = llvmpipe_tex_transfer_destroy;
+   pipe->transfer_map = llvmpipe_transfer_map;
+   pipe->transfer_unmap = llvmpipe_transfer_unmap;
 }
diff --git a/src/gallium/drivers/llvmpipe/lp_texture.h b/src/gallium/drivers/llvmpipe/lp_texture.h
index b23f929b16..94b667abf3 100644
--- a/src/gallium/drivers/llvmpipe/lp_texture.h
+++ b/src/gallium/drivers/llvmpipe/lp_texture.h
@@ -98,5 +98,7 @@ llvmpipe_transfer(struct pipe_transfer *pt)
 extern void
 llvmpipe_init_screen_texture_funcs(struct pipe_screen *screen);
 
+extern void
+llvmpipe_init_context_texture_funcs(struct pipe_context *pipe);
 
 #endif /* LP_TEXTURE_H */
diff --git a/src/gallium/drivers/nouveau/nv04_surface_2d.c b/src/gallium/drivers/nouveau/nv04_surface_2d.c
index b074547c4d..93114465d5 100644
--- a/src/gallium/drivers/nouveau/nv04_surface_2d.c
+++ b/src/gallium/drivers/nouveau/nv04_surface_2d.c
@@ -518,7 +518,6 @@ nv04_surface_wrap_for_render(struct pipe_screen *pscreen, struct nv04_surface_2d
 		ns->base.usage = PIPE_BUFFER_USAGE_GPU_WRITE | NOUVEAU_BUFFER_USAGE_NO_RENDER | PIPE_BUFFER_USAGE_GPU_READ;
 	}
 
-	struct nv40_screen* screen = (struct nv40_screen*)pscreen;
 	ns->base.usage = PIPE_BUFFER_USAGE_GPU_READ | PIPE_BUFFER_USAGE_GPU_WRITE;
 
 	struct pipe_texture templ;
diff --git a/src/gallium/drivers/nv30/nv30_context.c b/src/gallium/drivers/nv30/nv30_context.c
index 279b74445c..825c167b01 100644
--- a/src/gallium/drivers/nv30/nv30_context.c
+++ b/src/gallium/drivers/nv30/nv30_context.c
@@ -74,6 +74,7 @@ nv30_create(struct pipe_screen *pscreen, void *priv)
 	nv30_init_query_functions(nv30);
 	nv30_init_surface_functions(nv30);
 	nv30_init_state_functions(nv30);
+	nv30_init_transfer_functions(nv30);
 
 	/* Create, configure, and install fallback swtnl path */
 	nv30->draw = draw_create();
diff --git a/src/gallium/drivers/nv30/nv30_context.h b/src/gallium/drivers/nv30/nv30_context.h
index 1786460aec..4a164f3b1f 100644
--- a/src/gallium/drivers/nv30/nv30_context.h
+++ b/src/gallium/drivers/nv30/nv30_context.h
@@ -167,6 +167,7 @@ struct nv30_state_entry {
 extern void nv30_init_state_functions(struct nv30_context *nv30);
 extern void nv30_init_surface_functions(struct nv30_context *nv30);
 extern void nv30_init_query_functions(struct nv30_context *nv30);
+extern void nv30_init_transfer_functions(struct nv30_context *nv30);
 
 extern void nv30_screen_init_miptree_functions(struct pipe_screen *pscreen);
 
diff --git a/src/gallium/drivers/nv30/nv30_screen.c b/src/gallium/drivers/nv30/nv30_screen.c
index 85433d2095..db24335b7c 100644
--- a/src/gallium/drivers/nv30/nv30_screen.c
+++ b/src/gallium/drivers/nv30/nv30_screen.c
@@ -214,7 +214,6 @@ nv30_screen_create(struct pipe_winsys *ws, struct nouveau_device *dev)
 	pscreen->context_create = nv30_create;
 
 	nv30_screen_init_miptree_functions(pscreen);
-	nv30_screen_init_transfer_functions(pscreen);
 
 	/* 3D object */
 	switch (dev->chipset & 0xf0) {
diff --git a/src/gallium/drivers/nv30/nv30_screen.h b/src/gallium/drivers/nv30/nv30_screen.h
index 8591cd31ca..b7856cdf00 100644
--- a/src/gallium/drivers/nv30/nv30_screen.h
+++ b/src/gallium/drivers/nv30/nv30_screen.h
@@ -35,7 +35,4 @@ nv30_screen(struct pipe_screen *screen)
 	return (struct nv30_screen *)screen;
 }
 
-void
-nv30_screen_init_transfer_functions(struct pipe_screen *pscreen);
-
 #endif
diff --git a/src/gallium/drivers/nv30/nv30_transfer.c b/src/gallium/drivers/nv30/nv30_transfer.c
index 3aeda51ea1..1318c60ae4 100644
--- a/src/gallium/drivers/nv30/nv30_transfer.c
+++ b/src/gallium/drivers/nv30/nv30_transfer.c
@@ -33,11 +33,12 @@ nv30_compatible_transfer_tex(struct pipe_texture *pt, unsigned width, unsigned h
 }
 
 static struct pipe_transfer *
-nv30_transfer_new(struct pipe_screen *pscreen, struct pipe_texture *pt,
+nv30_transfer_new(struct pipe_context *pcontext, struct pipe_texture *pt,
 		  unsigned face, unsigned level, unsigned zslice,
 		  enum pipe_transfer_usage usage,
 		  unsigned x, unsigned y, unsigned w, unsigned h)
 {
+        struct pipe_screen *pscreen = pcontext->screen;
 	struct nv30_miptree *mt = (struct nv30_miptree *)pt;
 	struct nv30_transfer *tx;
 	struct pipe_texture tx_tex_template, *tx_tex;
@@ -145,8 +146,9 @@ nv30_transfer_del(struct pipe_transfer *ptx)
 }
 
 static void *
-nv30_transfer_map(struct pipe_screen *pscreen, struct pipe_transfer *ptx)
+nv30_transfer_map(struct pipe_context *pcontext, struct pipe_transfer *ptx)
 {
+        struct pipe_screen *pscreen = pcontext->screen;
 	struct nv30_transfer *tx = (struct nv30_transfer *)ptx;
 	struct nv04_surface *ns = (struct nv04_surface *)tx->surface;
 	struct nv30_miptree *mt = (struct nv30_miptree *)tx->surface->texture;
@@ -160,8 +162,9 @@ nv30_transfer_map(struct pipe_screen *pscreen, struct pipe_transfer *ptx)
 }
 
 static void
-nv30_transfer_unmap(struct pipe_screen *pscreen, struct pipe_transfer *ptx)
+nv30_transfer_unmap(struct pipe_context *pcontext, struct pipe_transfer *ptx)
 {
+        struct pipe_screen *pscreen = pcontext->screen;
 	struct nv30_transfer *tx = (struct nv30_transfer *)ptx;
 	struct nv30_miptree *mt = (struct nv30_miptree *)tx->surface->texture;
 
@@ -169,10 +172,10 @@ nv30_transfer_unmap(struct pipe_screen *pscreen, struct pipe_transfer *ptx)
 }
 
 void
-nv30_screen_init_transfer_functions(struct pipe_screen *pscreen)
+nv30_init_transfer_functions(struct nv30_context *nv30)
 {
-	pscreen->get_tex_transfer = nv30_transfer_new;
-	pscreen->tex_transfer_destroy = nv30_transfer_del;
-	pscreen->transfer_map = nv30_transfer_map;
-	pscreen->transfer_unmap = nv30_transfer_unmap;
+	nv30->pipe.get_tex_transfer = nv30_transfer_new;
+	nv30->pipe.tex_transfer_destroy = nv30_transfer_del;
+	nv30->pipe.transfer_map = nv30_transfer_map;
+	nv30->pipe.transfer_unmap = nv30_transfer_unmap;
 }
diff --git a/src/gallium/drivers/nv40/nv40_context.c b/src/gallium/drivers/nv40/nv40_context.c
index 65dc73e88b..e828f17643 100644
--- a/src/gallium/drivers/nv40/nv40_context.c
+++ b/src/gallium/drivers/nv40/nv40_context.c
@@ -74,6 +74,7 @@ nv40_create(struct pipe_screen *pscreen, void *priv)
 	nv40_init_query_functions(nv40);
 	nv40_init_surface_functions(nv40);
 	nv40_init_state_functions(nv40);
+	nv40_init_transfer_functions(nv40);
 
 	/* Create, configure, and install fallback swtnl path */
 	nv40->draw = draw_create();
diff --git a/src/gallium/drivers/nv40/nv40_context.h b/src/gallium/drivers/nv40/nv40_context.h
index 2550ec654b..cb5d9e2d9d 100644
--- a/src/gallium/drivers/nv40/nv40_context.h
+++ b/src/gallium/drivers/nv40/nv40_context.h
@@ -183,6 +183,7 @@ struct nv40_state_entry {
 extern void nv40_init_state_functions(struct nv40_context *nv40);
 extern void nv40_init_surface_functions(struct nv40_context *nv40);
 extern void nv40_init_query_functions(struct nv40_context *nv40);
+extern void nv40_init_transfer_functions(struct nv40_context *nv40);
 
 extern void nv40_screen_init_miptree_functions(struct pipe_screen *pscreen);
 
diff --git a/src/gallium/drivers/nv40/nv40_screen.c b/src/gallium/drivers/nv40/nv40_screen.c
index b216c5e38c..dbcc33d8d9 100644
--- a/src/gallium/drivers/nv40/nv40_screen.c
+++ b/src/gallium/drivers/nv40/nv40_screen.c
@@ -201,7 +201,6 @@ nv40_screen_create(struct pipe_winsys *ws, struct nouveau_device *dev)
 	pscreen->context_create = nv40_create;
 
 	nv40_screen_init_miptree_functions(pscreen);
-	nv40_screen_init_transfer_functions(pscreen);
 
 	/* 3D object */
 	switch (dev->chipset & 0xf0) {
diff --git a/src/gallium/drivers/nv40/nv40_screen.h b/src/gallium/drivers/nv40/nv40_screen.h
index 9437aa050d..2765ab764a 100644
--- a/src/gallium/drivers/nv40/nv40_screen.h
+++ b/src/gallium/drivers/nv40/nv40_screen.h
@@ -34,7 +34,4 @@ nv40_screen(struct pipe_screen *screen)
 	return (struct nv40_screen *)screen;
 }
 
-void
-nv40_screen_init_transfer_functions(struct pipe_screen *pscreen);
-
 #endif
diff --git a/src/gallium/drivers/nv40/nv40_transfer.c b/src/gallium/drivers/nv40/nv40_transfer.c
index 0462a042c3..2ca9b94388 100644
--- a/src/gallium/drivers/nv40/nv40_transfer.c
+++ b/src/gallium/drivers/nv40/nv40_transfer.c
@@ -33,11 +33,12 @@ nv40_compatible_transfer_tex(struct pipe_texture *pt, unsigned width, unsigned h
 }
 
 static struct pipe_transfer *
-nv40_transfer_new(struct pipe_screen *pscreen, struct pipe_texture *pt,
+nv40_transfer_new(struct pipe_context *pcontext, struct pipe_texture *pt,
 		  unsigned face, unsigned level, unsigned zslice,
 		  enum pipe_transfer_usage usage,
 		  unsigned x, unsigned y, unsigned w, unsigned h)
 {
+        struct pipe_screen *pscreen = pcontext->screen;
 	struct nv40_miptree *mt = (struct nv40_miptree *)pt;
 	struct nv40_transfer *tx;
 	struct pipe_texture tx_tex_template, *tx_tex;
@@ -145,8 +146,9 @@ nv40_transfer_del(struct pipe_transfer *ptx)
 }
 
 static void *
-nv40_transfer_map(struct pipe_screen *pscreen, struct pipe_transfer *ptx)
+nv40_transfer_map(struct pipe_context *pcontext, struct pipe_transfer *ptx)
 {
+        struct pipe_screen *pscreen = pcontext->screen;
 	struct nv40_transfer *tx = (struct nv40_transfer *)ptx;
 	struct nv04_surface *ns = (struct nv04_surface *)tx->surface;
 	struct nv40_miptree *mt = (struct nv40_miptree *)tx->surface->texture;
@@ -160,8 +162,9 @@ nv40_transfer_map(struct pipe_screen *pscreen, struct pipe_transfer *ptx)
 }
 
 static void
-nv40_transfer_unmap(struct pipe_screen *pscreen, struct pipe_transfer *ptx)
+nv40_transfer_unmap(struct pipe_context *pcontext, struct pipe_transfer *ptx)
 {
+        struct pipe_screen *pscreen = pcontext->screen;
 	struct nv40_transfer *tx = (struct nv40_transfer *)ptx;
 	struct nv40_miptree *mt = (struct nv40_miptree *)tx->surface->texture;
 
@@ -169,10 +172,10 @@ nv40_transfer_unmap(struct pipe_screen *pscreen, struct pipe_transfer *ptx)
 }
 
 void
-nv40_screen_init_transfer_functions(struct pipe_screen *pscreen)
+nv40_init_transfer_functions(struct nv40_context *nv40)
 {
-	pscreen->get_tex_transfer = nv40_transfer_new;
-	pscreen->tex_transfer_destroy = nv40_transfer_del;
-	pscreen->transfer_map = nv40_transfer_map;
-	pscreen->transfer_unmap = nv40_transfer_unmap;
+	nv40->pipe.get_tex_transfer = nv40_transfer_new;
+	nv40->pipe.tex_transfer_destroy = nv40_transfer_del;
+	nv40->pipe.transfer_map = nv40_transfer_map;
+	nv40->pipe.transfer_unmap = nv40_transfer_unmap;
 }
diff --git a/src/gallium/drivers/nv50/nv50_context.c b/src/gallium/drivers/nv50/nv50_context.c
index 0eb42f323f..aa14e17872 100644
--- a/src/gallium/drivers/nv50/nv50_context.c
+++ b/src/gallium/drivers/nv50/nv50_context.c
@@ -97,6 +97,7 @@ nv50_create(struct pipe_screen *pscreen, void *priv)
 	nv50_init_surface_functions(nv50);
 	nv50_init_state_functions(nv50);
 	nv50_init_query_functions(nv50);
+        nv50_init_transfer_functions(nv50);
 
 	nv50->draw = draw_create();
 	assert(nv50->draw);
diff --git a/src/gallium/drivers/nv50/nv50_context.h b/src/gallium/drivers/nv50/nv50_context.h
index 8793c2aac5..1743f6fb39 100644
--- a/src/gallium/drivers/nv50/nv50_context.h
+++ b/src/gallium/drivers/nv50/nv50_context.h
@@ -175,6 +175,7 @@ nv50_context(struct pipe_context *pipe)
 extern void nv50_init_surface_functions(struct nv50_context *nv50);
 extern void nv50_init_state_functions(struct nv50_context *nv50);
 extern void nv50_init_query_functions(struct nv50_context *nv50);
+extern void nv50_init_transfer_functions(struct nv50_context *nv50);
 
 extern void nv50_screen_init_miptree_functions(struct pipe_screen *pscreen);
 
diff --git a/src/gallium/drivers/nv50/nv50_transfer.c b/src/gallium/drivers/nv50/nv50_transfer.c
index 7c360e9e73..b7f2ac1b1c 100644
--- a/src/gallium/drivers/nv50/nv50_transfer.c
+++ b/src/gallium/drivers/nv50/nv50_transfer.c
@@ -121,11 +121,12 @@ nv50_transfer_rect_m2mf(struct pipe_screen *pscreen,
 }
 
 static struct pipe_transfer *
-nv50_transfer_new(struct pipe_screen *pscreen, struct pipe_texture *pt,
+nv50_transfer_new(struct pipe_context *pcontext, struct pipe_texture *pt,
 		  unsigned face, unsigned level, unsigned zslice,
 		  enum pipe_transfer_usage usage,
 		  unsigned x, unsigned y, unsigned w, unsigned h)
 {
+        struct pipe_screen *pscreen = pcontext->screen;
 	struct nouveau_device *dev = nouveau_screen(pscreen)->device;
 	struct nv50_miptree *mt = nv50_miptree(pt);
 	struct nv50_miptree_level *lvl = &mt->level[level];
@@ -218,7 +219,7 @@ nv50_transfer_del(struct pipe_transfer *ptx)
 }
 
 static void *
-nv50_transfer_map(struct pipe_screen *pscreen, struct pipe_transfer *ptx)
+nv50_transfer_map(struct pipe_context *pcontext, struct pipe_transfer *ptx)
 {
 	struct nv50_transfer *tx = (struct nv50_transfer *)ptx;
 	unsigned flags = 0;
@@ -236,7 +237,7 @@ nv50_transfer_map(struct pipe_screen *pscreen, struct pipe_transfer *ptx)
 }
 
 static void
-nv50_transfer_unmap(struct pipe_screen *pscreen, struct pipe_transfer *ptx)
+nv50_transfer_unmap(struct pipe_context *pcontext, struct pipe_transfer *ptx)
 {
 	struct nv50_transfer *tx = (struct nv50_transfer *)ptx;
 
@@ -244,12 +245,12 @@ nv50_transfer_unmap(struct pipe_screen *pscreen, struct pipe_transfer *ptx)
 }
 
 void
-nv50_transfer_init_screen_functions(struct pipe_screen *pscreen)
+nv50_init_transfer_functions(struct nv50_context *nv50)
 {
-	pscreen->get_tex_transfer = nv50_transfer_new;
-	pscreen->tex_transfer_destroy = nv50_transfer_del;
-	pscreen->transfer_map = nv50_transfer_map;
-	pscreen->transfer_unmap = nv50_transfer_unmap;
+	nv50->pipe.get_tex_transfer = nv50_transfer_new;
+	nv50->pipe.tex_transfer_destroy = nv50_transfer_del;
+	nv50->pipe.transfer_map = nv50_transfer_map;
+	nv50->pipe.transfer_unmap = nv50_transfer_unmap;
 }
 
 void
diff --git a/src/gallium/drivers/r300/r300_context.c b/src/gallium/drivers/r300/r300_context.c
index 923e1e541f..8606c0004e 100644
--- a/src/gallium/drivers/r300/r300_context.c
+++ b/src/gallium/drivers/r300/r300_context.c
@@ -34,6 +34,7 @@
 #include "r300_screen.h"
 #include "r300_state_invariant.h"
 #include "r300_texture.h"
+#include "r300_transfer.h"
 
 #include "radeon_winsys.h"
 
@@ -209,6 +210,8 @@ struct pipe_context* r300_create_context(struct pipe_screen* screen,
 
     r300_init_query_functions(r300);
 
+    r300_init_transfer_functions(r300);
+
     /* r300_init_surface_functions(r300); */
 
     r300_init_state_functions(r300);
diff --git a/src/gallium/drivers/r300/r300_context.h b/src/gallium/drivers/r300/r300_context.h
index 985e339112..03b09603c7 100644
--- a/src/gallium/drivers/r300/r300_context.h
+++ b/src/gallium/drivers/r300/r300_context.h
@@ -404,6 +404,7 @@ struct pipe_context* r300_create_context(struct pipe_screen* screen,
 struct draw_stage* r300_draw_stage(struct r300_context* r300);
 void r300_init_state_functions(struct r300_context* r300);
 void r300_init_surface_functions(struct r300_context* r300);
+void r300_init_tex_functions( struct pipe_context *pipe );
 
 static INLINE boolean CTX_DBG_ON(struct r300_context * ctx, unsigned flags)
 {
diff --git a/src/gallium/drivers/r300/r300_screen.c b/src/gallium/drivers/r300/r300_screen.c
index 5880eecd5f..69c0ab496c 100644
--- a/src/gallium/drivers/r300/r300_screen.c
+++ b/src/gallium/drivers/r300/r300_screen.c
@@ -27,7 +27,6 @@
 
 #include "r300_context.h"
 #include "r300_texture.h"
-#include "r300_transfer.h"
 
 #include "radeon_winsys.h"
 #include "r300_winsys.h"
@@ -252,6 +251,8 @@ static boolean r300_is_format_supported(struct pipe_screen* screen,
     return retval == usage;
 }
 
+
+
 static void r300_destroy_screen(struct pipe_screen* pscreen)
 {
     struct r300_screen* r300screen = r300_screen(pscreen);
@@ -290,7 +291,6 @@ struct pipe_screen* r300_create_screen(struct radeon_winsys* radeon_winsys)
     r300screen->screen.context_create = r300_create_context;
 
     r300_init_screen_texture_functions(&r300screen->screen);
-    r300_init_screen_transfer_functions(&r300screen->screen);
     u_simple_screen_init(&r300screen->screen);
 
     return &r300screen->screen;
diff --git a/src/gallium/drivers/r300/r300_transfer.c b/src/gallium/drivers/r300/r300_transfer.c
index ec89681a3c..7dd707ff8e 100644
--- a/src/gallium/drivers/r300/r300_transfer.c
+++ b/src/gallium/drivers/r300/r300_transfer.c
@@ -118,15 +118,15 @@ static void r300_copy_into_tiled_texture(struct pipe_context *ctx,
 }
 
 static struct pipe_transfer*
-r300_get_tex_transfer(struct pipe_screen *screen,
+r300_get_tex_transfer(struct pipe_context *ctx,
                       struct pipe_texture *texture,
                       unsigned face, unsigned level, unsigned zslice,
                       enum pipe_transfer_usage usage, unsigned x, unsigned y,
                       unsigned w, unsigned h)
 {
     struct r300_texture *tex = (struct r300_texture *)texture;
+    struct r300_screen *r300screen = r300_screen(ctx->screen);
     struct r300_transfer *trans;
-    struct r300_screen *r300screen = r300_screen(screen);
     struct pipe_texture template;
 
     trans = CALLOC_STRUCT(r300_transfer);
@@ -136,7 +136,7 @@ r300_get_tex_transfer(struct pipe_screen *screen,
         trans->transfer.usage = usage;
         trans->transfer.width = w;
         trans->transfer.height = h;
-        trans->ctx = r300screen->ctx;
+        trans->ctx = ctx;
         trans->x = x;
         trans->y = y;
         trans->level = level;
@@ -174,8 +174,10 @@ r300_get_tex_transfer(struct pipe_screen *screen,
             }
 
             /* Create the temporary texture. */
-            trans->detiled_texture =
-                (struct r300_texture*)screen->texture_create(screen, &template);
+            trans->detiled_texture = (struct r300_texture*)
+               ctx->screen->texture_create(ctx->screen,
+                                           &template);
+
             assert(!trans->detiled_texture->microtile &&
                    !trans->detiled_texture->macrotile);
 
@@ -187,7 +189,7 @@ r300_get_tex_transfer(struct pipe_screen *screen,
             if (usage & PIPE_TRANSFER_READ) {
                 /* We cannot map a tiled texture directly because the data is
                  * in a different order, therefore we do detiling using a blit. */
-                r300_copy_from_tiled_texture(r300screen->ctx, trans);
+                r300_copy_from_tiled_texture(ctx, trans);
             }
         } else {
             trans->transfer.x = x;
@@ -219,7 +221,7 @@ static void r300_tex_transfer_destroy(struct pipe_transfer *trans)
     FREE(trans);
 }
 
-static void* r300_transfer_map(struct pipe_screen *screen,
+static void* r300_transfer_map(struct pipe_context *ctx,
                                struct pipe_transfer *transfer)
 {
     struct r300_transfer *r300transfer = r300_transfer(transfer);
@@ -230,12 +232,12 @@ static void* r300_transfer_map(struct pipe_screen *screen,
     if (r300transfer->detiled_texture) {
         /* The detiled texture is of the same size as the region being mapped
          * (no offset needed). */
-        return pipe_buffer_map(screen,
+        return pipe_buffer_map(ctx->screen,
                                r300transfer->detiled_texture->buffer,
                                pipe_transfer_buffer_flags(transfer));
     } else {
         /* Tiling is disabled. */
-        map = pipe_buffer_map(screen, tex->buffer,
+        map = pipe_buffer_map(ctx->screen, tex->buffer,
                               pipe_transfer_buffer_flags(transfer));
 
         if (!map) {
@@ -248,23 +250,26 @@ static void* r300_transfer_map(struct pipe_screen *screen,
     }
 }
 
-static void r300_transfer_unmap(struct pipe_screen *screen,
+static void r300_transfer_unmap(struct pipe_context *ctx,
                                 struct pipe_transfer *transfer)
 {
     struct r300_transfer *r300transfer = r300_transfer(transfer);
     struct r300_texture *tex = (struct r300_texture*)transfer->texture;
 
     if (r300transfer->detiled_texture) {
-        pipe_buffer_unmap(screen, r300transfer->detiled_texture->buffer);
+        pipe_buffer_unmap(ctx->screen, r300transfer->detiled_texture->buffer);
     } else {
-        pipe_buffer_unmap(screen, tex->buffer);
+        pipe_buffer_unmap(ctx->screen, tex->buffer);
     }
 }
 
-void r300_init_screen_transfer_functions(struct pipe_screen *screen)
+
+void r300_init_transfer_functions( struct r300_context *r300ctx )
 {
-    screen->get_tex_transfer = r300_get_tex_transfer;
-    screen->tex_transfer_destroy = r300_tex_transfer_destroy;
-    screen->transfer_map = r300_transfer_map;
-    screen->transfer_unmap = r300_transfer_unmap;
+   struct pipe_context *ctx = &r300ctx->context;
+
+   ctx->get_tex_transfer = r300_get_tex_transfer;
+   ctx->tex_transfer_destroy = r300_tex_transfer_destroy;
+   ctx->transfer_map = r300_transfer_map;
+   ctx->transfer_unmap = r300_transfer_unmap;
 }
diff --git a/src/gallium/drivers/r300/r300_transfer.h b/src/gallium/drivers/r300/r300_transfer.h
index 60d1d3dc85..79baf6d048 100644
--- a/src/gallium/drivers/r300/r300_transfer.h
+++ b/src/gallium/drivers/r300/r300_transfer.h
@@ -26,6 +26,8 @@
 
 #include "pipe/p_screen.h"
 
-void r300_init_screen_transfer_functions(struct pipe_screen *screen);
+struct r300_context;
+
+void r300_init_transfer_functions(struct r300_context *r300ctx);
 
 #endif
diff --git a/src/gallium/drivers/softpipe/sp_context.c b/src/gallium/drivers/softpipe/sp_context.c
index 30494719f7..de92a0cd2c 100644
--- a/src/gallium/drivers/softpipe/sp_context.c
+++ b/src/gallium/drivers/softpipe/sp_context.c
@@ -44,6 +44,7 @@
 #include "sp_surface.h"
 #include "sp_tile_cache.h"
 #include "sp_tex_tile_cache.h"
+#include "sp_texture.h"
 #include "sp_query.h"
 
 
@@ -275,6 +276,7 @@ softpipe_create_context( struct pipe_screen *screen,
    softpipe->pipe.is_buffer_referenced = softpipe_is_buffer_referenced;
 
    softpipe_init_query_funcs( softpipe );
+   softpipe_init_texture_funcs( &softpipe->pipe );
 
    softpipe->pipe.render_condition = softpipe_render_condition;
 
@@ -283,13 +285,13 @@ softpipe_create_context( struct pipe_screen *screen,
     * Must be before quad stage setup!
     */
    for (i = 0; i < PIPE_MAX_COLOR_BUFS; i++)
-      softpipe->cbuf_cache[i] = sp_create_tile_cache( screen );
-   softpipe->zsbuf_cache = sp_create_tile_cache( screen );
+      softpipe->cbuf_cache[i] = sp_create_tile_cache( &softpipe->pipe );
+   softpipe->zsbuf_cache = sp_create_tile_cache( &softpipe->pipe );
 
    for (i = 0; i < PIPE_MAX_SAMPLERS; i++)
-      softpipe->tex_cache[i] = sp_create_tex_tile_cache( screen );
+      softpipe->tex_cache[i] = sp_create_tex_tile_cache( &softpipe->pipe );
    for (i = 0; i < PIPE_MAX_VERTEX_SAMPLERS; i++) {
-      softpipe->vertex_tex_cache[i] = sp_create_tex_tile_cache(screen);
+      softpipe->vertex_tex_cache[i] = sp_create_tex_tile_cache( &softpipe->pipe );
    }
 
    /* setup quad rendering stages */
diff --git a/src/gallium/drivers/softpipe/sp_flush.c b/src/gallium/drivers/softpipe/sp_flush.c
index e8952bf4fb..3d76af4d8c 100644
--- a/src/gallium/drivers/softpipe/sp_flush.c
+++ b/src/gallium/drivers/softpipe/sp_flush.c
@@ -93,9 +93,9 @@ softpipe_flush( struct pipe_context *pipe,
       static unsigned frame_no = 1;
       static char filename[256];
       util_snprintf(filename, sizeof(filename), "cbuf_%u.bmp", frame_no);
-      debug_dump_surface_bmp(filename, softpipe->framebuffer.cbufs[0]);
+      debug_dump_surface_bmp(softpipe, filename, softpipe->framebuffer.cbufs[0]);
       util_snprintf(filename, sizeof(filename), "zsbuf_%u.bmp", frame_no);
-      debug_dump_surface_bmp(filename, softpipe->framebuffer.zsbuf);
+      debug_dump_surface_bmp(softpipe, filename, softpipe->framebuffer.zsbuf);
       ++frame_no;
    }
 #endif
diff --git a/src/gallium/drivers/softpipe/sp_tex_tile_cache.c b/src/gallium/drivers/softpipe/sp_tex_tile_cache.c
index a0b95c8884..a9f5b51a41 100644
--- a/src/gallium/drivers/softpipe/sp_tex_tile_cache.c
+++ b/src/gallium/drivers/softpipe/sp_tex_tile_cache.c
@@ -43,14 +43,14 @@
    
 
 struct softpipe_tex_tile_cache *
-sp_create_tex_tile_cache( struct pipe_screen *screen )
+sp_create_tex_tile_cache( struct pipe_context *pipe )
 {
    struct softpipe_tex_tile_cache *tc;
    uint pos;
 
    tc = CALLOC_STRUCT( softpipe_tex_tile_cache );
    if (tc) {
-      tc->screen = screen;
+      tc->pipe = pipe;
       for (pos = 0; pos < NUM_ENTRIES; pos++) {
          tc->entries[pos].addr.bits.invalid = 1;
       }
@@ -63,19 +63,16 @@ sp_create_tex_tile_cache( struct pipe_screen *screen )
 void
 sp_destroy_tex_tile_cache(struct softpipe_tex_tile_cache *tc)
 {
-   struct pipe_screen *screen;
    uint pos;
 
    for (pos = 0; pos < NUM_ENTRIES; pos++) {
       /*assert(tc->entries[pos].x < 0);*/
    }
    if (tc->transfer) {
-      screen = tc->transfer->texture->screen;
-      screen->tex_transfer_destroy(tc->transfer);
+      tc->pipe->tex_transfer_destroy(tc->transfer);
    }
    if (tc->tex_trans) {
-      screen = tc->tex_trans->texture->screen;
-      screen->tex_transfer_destroy(tc->tex_trans);
+      tc->pipe->tex_transfer_destroy(tc->tex_trans);
    }
 
    FREE( tc );
@@ -88,7 +85,7 @@ void
 sp_tex_tile_cache_map_transfers(struct softpipe_tex_tile_cache *tc)
 {
    if (tc->tex_trans && !tc->tex_trans_map)
-      tc->tex_trans_map = tc->screen->transfer_map(tc->screen, tc->tex_trans);
+      tc->tex_trans_map = tc->pipe->transfer_map(tc->pipe, tc->tex_trans);
 }
 
 
@@ -96,7 +93,7 @@ void
 sp_tex_tile_cache_unmap_transfers(struct softpipe_tex_tile_cache *tc)
 {
    if (tc->tex_trans_map) {
-      tc->screen->transfer_unmap(tc->screen, tc->tex_trans);
+      tc->pipe->transfer_unmap(tc->pipe, tc->tex_trans);
       tc->tex_trans_map = NULL;
    }
 }
@@ -133,14 +130,12 @@ sp_tex_tile_cache_set_texture(struct softpipe_tex_tile_cache *tc,
       pipe_texture_reference(&tc->texture, texture);
 
       if (tc->tex_trans) {
-         struct pipe_screen *screen = tc->tex_trans->texture->screen;
-         
          if (tc->tex_trans_map) {
-            screen->transfer_unmap(screen, tc->tex_trans);
+            tc->pipe->transfer_unmap(tc->pipe, tc->tex_trans);
             tc->tex_trans_map = NULL;
          }
 
-         screen->tex_transfer_destroy(tc->tex_trans);
+         tc->pipe->tex_transfer_destroy(tc->tex_trans);
          tc->tex_trans = NULL;
       }
 
@@ -204,7 +199,6 @@ const struct softpipe_tex_cached_tile *
 sp_find_cached_tile_tex(struct softpipe_tex_tile_cache *tc, 
                         union tex_tile_address addr )
 {
-   struct pipe_screen *screen = tc->screen;
    struct softpipe_tex_cached_tile *tile;
    
    tile = tc->entries + tex_cache_pos( addr );
@@ -232,16 +226,16 @@ sp_find_cached_tile_tex(struct softpipe_tex_tile_cache *tc,
 
          if (tc->tex_trans) {
             if (tc->tex_trans_map) {
-               tc->screen->transfer_unmap(tc->screen, tc->tex_trans);
+               tc->pipe->transfer_unmap(tc->pipe, tc->tex_trans);
                tc->tex_trans_map = NULL;
             }
 
-            screen->tex_transfer_destroy(tc->tex_trans);
+            tc->pipe->tex_transfer_destroy(tc->tex_trans);
             tc->tex_trans = NULL;
          }
 
          tc->tex_trans = 
-            screen->get_tex_transfer(screen, tc->texture, 
+            tc->pipe->get_tex_transfer(tc->pipe, tc->texture, 
                                      addr.bits.face, 
                                      addr.bits.level, 
                                      addr.bits.z, 
@@ -249,7 +243,7 @@ sp_find_cached_tile_tex(struct softpipe_tex_tile_cache *tc,
                                      u_minify(tc->texture->width0, addr.bits.level),
                                      u_minify(tc->texture->height0, addr.bits.level));
          
-         tc->tex_trans_map = screen->transfer_map(screen, tc->tex_trans);
+         tc->tex_trans_map = tc->pipe->transfer_map(tc->pipe, tc->tex_trans);
 
          tc->tex_face = addr.bits.face;
          tc->tex_level = addr.bits.level;
diff --git a/src/gallium/drivers/softpipe/sp_tex_tile_cache.h b/src/gallium/drivers/softpipe/sp_tex_tile_cache.h
index ac6886a3df..b116397258 100644
--- a/src/gallium/drivers/softpipe/sp_tex_tile_cache.h
+++ b/src/gallium/drivers/softpipe/sp_tex_tile_cache.h
@@ -70,7 +70,7 @@ struct softpipe_tex_cached_tile
 
 struct softpipe_tex_tile_cache
 {
-   struct pipe_screen *screen;
+   struct pipe_context *pipe;
    struct pipe_transfer *transfer;
    void *transfer_map;
 
@@ -88,7 +88,7 @@ struct softpipe_tex_tile_cache
 
 
 extern struct softpipe_tex_tile_cache *
-sp_create_tex_tile_cache( struct pipe_screen *screen );
+sp_create_tex_tile_cache( struct pipe_context *pipe );
 
 extern void
 sp_destroy_tex_tile_cache(struct softpipe_tex_tile_cache *tc);
diff --git a/src/gallium/drivers/softpipe/sp_texture.c b/src/gallium/drivers/softpipe/sp_texture.c
index 11d184effb..adae48c474 100644
--- a/src/gallium/drivers/softpipe/sp_texture.c
+++ b/src/gallium/drivers/softpipe/sp_texture.c
@@ -256,7 +256,7 @@ softpipe_tex_surface_destroy(struct pipe_surface *surf)
  * \param height  height of region to read/write
  */
 static struct pipe_transfer *
-softpipe_get_tex_transfer(struct pipe_screen *screen,
+softpipe_get_tex_transfer(struct pipe_context *pipe,
                           struct pipe_texture *texture,
                           unsigned face, unsigned level, unsigned zslice,
                           enum pipe_transfer_usage usage,
@@ -277,6 +277,7 @@ softpipe_get_tex_transfer(struct pipe_screen *screen,
       struct pipe_transfer *pt = &spt->base;
       int nblocksy = util_format_get_nblocksy(texture->format, u_minify(texture->height0, level));
       pipe_texture_reference(&pt->texture, texture);
+      pt->pipe = pipe;
       pt->x = x;
       pt->y = y;
       pt->width = w;
@@ -326,7 +327,7 @@ softpipe_tex_transfer_destroy(struct pipe_transfer *transfer)
  * Create memory mapping for given pipe_transfer object.
  */
 static void *
-softpipe_transfer_map( struct pipe_screen *screen,
+softpipe_transfer_map( struct pipe_context *pipe,
                        struct pipe_transfer *transfer )
 {
    ubyte *map, *xfer_map;
@@ -339,7 +340,7 @@ softpipe_transfer_map( struct pipe_screen *screen,
 
    if (spt->dt) {
       /* display target */
-      struct sw_winsys *winsys = softpipe_screen(screen)->winsys;
+      struct sw_winsys *winsys = softpipe_screen(pipe->screen)->winsys;
 
       map = winsys->displaytarget_map(winsys, spt->dt,
                                       pipe_transfer_buffer_flags(transfer));
@@ -359,7 +360,7 @@ softpipe_transfer_map( struct pipe_screen *screen,
       /* Do something to notify sharing contexts of a texture change.
        * In softpipe, that would mean flushing the texture cache.
        */
-      softpipe_screen(screen)->timestamp++;
+      softpipe_screen(pipe->screen)->timestamp++;
    }
 
    xfer_map = map + softpipe_transfer(transfer)->offset +
@@ -374,7 +375,7 @@ softpipe_transfer_map( struct pipe_screen *screen,
  * Unmap memory mapping for given pipe_transfer object.
  */
 static void
-softpipe_transfer_unmap(struct pipe_screen *screen,
+softpipe_transfer_unmap(struct pipe_context *pipe,
                         struct pipe_transfer *transfer)
 {
    struct softpipe_texture *spt;
@@ -384,7 +385,7 @@ softpipe_transfer_unmap(struct pipe_screen *screen,
 
    if (spt->dt) {
       /* display target */
-      struct sw_winsys *winsys = softpipe_screen(screen)->winsys;
+      struct sw_winsys *winsys = softpipe_screen(pipe->screen)->winsys;
       winsys->displaytarget_unmap(winsys, spt->dt);
    }
 
@@ -447,6 +448,15 @@ softpipe_video_surface_destroy(struct pipe_video_surface *vsfc)
 }
 
 
+void
+softpipe_init_texture_funcs(struct pipe_context *pipe)
+{
+   pipe->get_tex_transfer = softpipe_get_tex_transfer;
+   pipe->tex_transfer_destroy = softpipe_tex_transfer_destroy;
+   pipe->transfer_map = softpipe_transfer_map;
+   pipe->transfer_unmap = softpipe_transfer_unmap;
+}
+
 void
 softpipe_init_screen_texture_funcs(struct pipe_screen *screen)
 {
@@ -456,11 +466,6 @@ softpipe_init_screen_texture_funcs(struct pipe_screen *screen)
    screen->get_tex_surface = softpipe_get_tex_surface;
    screen->tex_surface_destroy = softpipe_tex_surface_destroy;
 
-   screen->get_tex_transfer = softpipe_get_tex_transfer;
-   screen->tex_transfer_destroy = softpipe_tex_transfer_destroy;
-   screen->transfer_map = softpipe_transfer_map;
-   screen->transfer_unmap = softpipe_transfer_unmap;
-
    screen->video_surface_create = softpipe_video_surface_create;
    screen->video_surface_destroy = softpipe_video_surface_destroy;
 }
diff --git a/src/gallium/drivers/softpipe/sp_texture.h b/src/gallium/drivers/softpipe/sp_texture.h
index 1c8636d1d5..c0e6ba8a86 100644
--- a/src/gallium/drivers/softpipe/sp_texture.h
+++ b/src/gallium/drivers/softpipe/sp_texture.h
@@ -107,5 +107,8 @@ softpipe_video_surface(struct pipe_video_surface *pvs)
 extern void
 softpipe_init_screen_texture_funcs(struct pipe_screen *screen);
 
+void
+softpipe_init_texture_funcs(struct pipe_context *pipe);
+
 
 #endif /* SP_TEXTURE */
diff --git a/src/gallium/drivers/softpipe/sp_tile_cache.c b/src/gallium/drivers/softpipe/sp_tile_cache.c
index aedfdf1b46..d779816790 100644
--- a/src/gallium/drivers/softpipe/sp_tile_cache.c
+++ b/src/gallium/drivers/softpipe/sp_tile_cache.c
@@ -79,20 +79,20 @@ clear_clear_flag(uint *bitvec, union tile_address addr)
    
 
 struct softpipe_tile_cache *
-sp_create_tile_cache( struct pipe_screen *screen )
+sp_create_tile_cache( struct pipe_context *pipe )
 {
    struct softpipe_tile_cache *tc;
    uint pos;
    int maxLevels, maxTexSize;
 
    /* sanity checking: max sure MAX_WIDTH/HEIGHT >= largest texture image */
-   maxLevels = screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_2D_LEVELS);
+   maxLevels = pipe->screen->get_param(pipe->screen, PIPE_CAP_MAX_TEXTURE_2D_LEVELS);
    maxTexSize = 1 << (maxLevels - 1);
    assert(MAX_WIDTH >= maxTexSize);
 
    tc = CALLOC_STRUCT( softpipe_tile_cache );
    if (tc) {
-      tc->screen = screen;
+      tc->pipe = pipe;
       for (pos = 0; pos < NUM_ENTRIES; pos++) {
          tc->entries[pos].addr.bits.invalid = 1;
       }
@@ -115,15 +115,13 @@ sp_create_tile_cache( struct pipe_screen *screen )
 void
 sp_destroy_tile_cache(struct softpipe_tile_cache *tc)
 {
-   struct pipe_screen *screen;
    uint pos;
 
    for (pos = 0; pos < NUM_ENTRIES; pos++) {
       /*assert(tc->entries[pos].x < 0);*/
    }
    if (tc->transfer) {
-      screen = tc->transfer->texture->screen;
-      screen->tex_transfer_destroy(tc->transfer);
+      tc->pipe->tex_transfer_destroy(tc->transfer);
    }
 
    FREE( tc );
@@ -137,27 +135,25 @@ void
 sp_tile_cache_set_surface(struct softpipe_tile_cache *tc,
                           struct pipe_surface *ps)
 {
-   if (tc->transfer) {
-      struct pipe_screen *screen = tc->transfer->texture->screen;
+   struct pipe_context *pipe = tc->pipe;
 
+   if (tc->transfer) {
       if (ps == tc->surface)
          return;
 
       if (tc->transfer_map) {
-         screen->transfer_unmap(screen, tc->transfer);
+         pipe->transfer_unmap(pipe, tc->transfer);
          tc->transfer_map = NULL;
       }
 
-      screen->tex_transfer_destroy(tc->transfer);
+      pipe->tex_transfer_destroy(tc->transfer);
       tc->transfer = NULL;
    }
 
    tc->surface = ps;
 
    if (ps) {
-      struct pipe_screen *screen = ps->texture->screen;
-
-      tc->transfer = screen->get_tex_transfer(screen, ps->texture, ps->face,
+      tc->transfer = pipe->get_tex_transfer(pipe, ps->texture, ps->face,
                                               ps->level, ps->zslice,
                                               PIPE_TRANSFER_READ_WRITE,
                                               0, 0, ps->width, ps->height);
@@ -187,7 +183,7 @@ void
 sp_tile_cache_map_transfers(struct softpipe_tile_cache *tc)
 {
    if (tc->transfer && !tc->transfer_map)
-      tc->transfer_map = tc->screen->transfer_map(tc->screen, tc->transfer);
+      tc->transfer_map = tc->pipe->transfer_map(tc->pipe, tc->transfer);
 }
 
 
@@ -195,7 +191,7 @@ void
 sp_tile_cache_unmap_transfers(struct softpipe_tile_cache *tc)
 {
    if (tc->transfer_map) {
-      tc->screen->transfer_unmap(tc->screen, tc->transfer);
+      tc->pipe->transfer_unmap(tc->pipe, tc->transfer);
       tc->transfer_map = NULL;
    }
 }
diff --git a/src/gallium/drivers/softpipe/sp_tile_cache.h b/src/gallium/drivers/softpipe/sp_tile_cache.h
index a12092702a..753d8c0daa 100644
--- a/src/gallium/drivers/softpipe/sp_tile_cache.h
+++ b/src/gallium/drivers/softpipe/sp_tile_cache.h
@@ -80,7 +80,7 @@ struct softpipe_cached_tile
 
 struct softpipe_tile_cache
 {
-   struct pipe_screen *screen;
+   struct pipe_context *pipe;
    struct pipe_surface *surface;  /**< the surface we're caching */
    struct pipe_transfer *transfer;
    void *transfer_map;
@@ -98,7 +98,7 @@ struct softpipe_tile_cache
 
 
 extern struct softpipe_tile_cache *
-sp_create_tile_cache( struct pipe_screen *screen );
+sp_create_tile_cache( struct pipe_context *pipe );
 
 extern void
 sp_destroy_tile_cache(struct softpipe_tile_cache *tc);
diff --git a/src/gallium/drivers/svga/svga_screen_texture.c b/src/gallium/drivers/svga/svga_screen_texture.c
index 5b581debfc..065b8748a3 100644
--- a/src/gallium/drivers/svga/svga_screen_texture.c
+++ b/src/gallium/drivers/svga/svga_screen_texture.c
@@ -783,15 +783,17 @@ svga_surface_needs_propagation(struct pipe_surface *surf)
    return s->dirty && s->handle != tex->handle;
 }
 
-
+/* XXX: Still implementing this as if it was a screen function, but
+ * can now modify it to queue transfers on the context.
+ */
 static struct pipe_transfer *
-svga_get_tex_transfer(struct pipe_screen *screen,
-                     struct pipe_texture *texture,
-                     unsigned face, unsigned level, unsigned zslice,
-                     enum pipe_transfer_usage usage, unsigned x, unsigned y,
-                     unsigned w, unsigned h)
+svga_get_tex_transfer(struct pipe_context *pipe,
+		      struct pipe_texture *texture,
+		      unsigned face, unsigned level, unsigned zslice,
+		      enum pipe_transfer_usage usage, unsigned x, unsigned y,
+		      unsigned w, unsigned h)
 {
-   struct svga_screen *ss = svga_screen(screen);
+   struct svga_screen *ss = svga_screen(pipe->screen);
    struct svga_winsys_screen *sws = ss->sws;
    struct svga_transfer *st;
    unsigned nblocksx = util_format_get_nblocksx(texture->format, w);
@@ -859,11 +861,14 @@ no_hwbuf:
 }
 
 
+/* XXX: Still implementing this as if it was a screen function, but
+ * can now modify it to queue transfers on the context.
+ */
 static void *
-svga_transfer_map( struct pipe_screen *screen,
+svga_transfer_map( struct pipe_context *pipe,
                    struct pipe_transfer *transfer )
 {
-   struct svga_screen *ss = svga_screen(screen);
+   struct svga_screen *ss = svga_screen(pipe->screen);
    struct svga_winsys_screen *sws = ss->sws;
    struct svga_transfer *st = svga_transfer(transfer);
 
@@ -877,11 +882,14 @@ svga_transfer_map( struct pipe_screen *screen,
 }
 
 
+/* XXX: Still implementing this as if it was a screen function, but
+ * can now modify it to queue transfers on the context.
+ */
 static void
-svga_transfer_unmap(struct pipe_screen *screen,
+svga_transfer_unmap(struct pipe_context *pipe,
                     struct pipe_transfer *transfer)
 {
-   struct svga_screen *ss = svga_screen(screen);
+   struct svga_screen *ss = svga_screen(pipe->screen);
    struct svga_winsys_screen *sws = ss->sws;
    struct svga_transfer *st = svga_transfer(transfer);
    
@@ -911,6 +919,17 @@ svga_tex_transfer_destroy(struct pipe_transfer *transfer)
    FREE(st);
 }
 
+
+void
+svga_init_texture_functions(struct pipe_context *pipe)
+{
+   pipe->get_tex_transfer = svga_get_tex_transfer;
+   pipe->transfer_map = svga_transfer_map;
+   pipe->transfer_unmap = svga_transfer_unmap;
+   pipe->tex_transfer_destroy = svga_tex_transfer_destroy;
+}
+
+
 void
 svga_screen_init_texture_functions(struct pipe_screen *screen)
 {
@@ -920,10 +939,6 @@ svga_screen_init_texture_functions(struct pipe_screen *screen)
    screen->texture_destroy = svga_texture_destroy;
    screen->get_tex_surface = svga_get_tex_surface;
    screen->tex_surface_destroy = svga_tex_surface_destroy;
-   screen->get_tex_transfer = svga_get_tex_transfer;
-   screen->transfer_map = svga_transfer_map;
-   screen->transfer_unmap = svga_transfer_unmap;
-   screen->tex_transfer_destroy = svga_tex_transfer_destroy;
 }
 
 /*********************************************************************** 
diff --git a/src/gallium/drivers/svga/svga_screen_texture.h b/src/gallium/drivers/svga/svga_screen_texture.h
index ca6602b436..96d035b12d 100644
--- a/src/gallium/drivers/svga/svga_screen_texture.h
+++ b/src/gallium/drivers/svga/svga_screen_texture.h
@@ -186,6 +186,9 @@ svga_surface_needs_propagation(struct pipe_surface *surf);
 extern void
 svga_screen_init_texture_functions(struct pipe_screen *screen);
 
+void
+svga_init_texture_functions(struct pipe_context *pipe);
+
 enum SVGA3dSurfaceFormat
 svga_translate_format(enum pipe_format format);
 
diff --git a/src/gallium/drivers/trace/tr_context.c b/src/gallium/drivers/trace/tr_context.c
index 133521f45e..4a0e9ac17d 100644
--- a/src/gallium/drivers/trace/tr_context.c
+++ b/src/gallium/drivers/trace/tr_context.c
@@ -27,7 +27,9 @@
 
 #include "util/u_memory.h"
 #include "util/u_simple_list.h"
+#include "util/u_format.h"
 
+#include "pipe/p_format.h"
 #include "pipe/p_screen.h"
 
 #include "tr_dump.h"
@@ -1283,6 +1285,135 @@ trace_is_buffer_referenced( struct pipe_context *_pipe,
    return referenced;
 }
 
+
+/********************************************************************
+ * transfer
+ */
+
+
+static struct pipe_transfer *
+trace_context_get_tex_transfer(struct pipe_context *_context,
+                              struct pipe_texture *_texture,
+                              unsigned face, unsigned level,
+                              unsigned zslice,
+                              enum pipe_transfer_usage usage,
+                              unsigned x, unsigned y, unsigned w, unsigned h)
+{
+   struct trace_context *tr_context = trace_context(_context);
+   struct trace_texture *tr_tex = trace_texture(_texture);
+   struct pipe_context *context = tr_context->pipe;
+   struct pipe_texture *texture = tr_tex->texture;
+   struct pipe_transfer *result = NULL;
+
+   assert(texture->screen == context->screen);
+
+   trace_dump_call_begin("pipe_context", "get_tex_transfer");
+
+   trace_dump_arg(ptr, context);
+   trace_dump_arg(ptr, texture);
+   trace_dump_arg(uint, face);
+   trace_dump_arg(uint, level);
+   trace_dump_arg(uint, zslice);
+   trace_dump_arg(uint, usage);
+
+   trace_dump_arg(uint, x);
+   trace_dump_arg(uint, y);
+   trace_dump_arg(uint, w);
+   trace_dump_arg(uint, h);
+
+   result = context->get_tex_transfer(context, texture, face, level, zslice, usage,
+				      x, y, w, h);
+
+   trace_dump_ret(ptr, result);
+
+   trace_dump_call_end();
+
+   if (result)
+      result = trace_transfer_create(tr_context, tr_tex, result);
+
+   return result;
+}
+
+
+static void
+trace_context_tex_transfer_destroy(struct pipe_transfer *_transfer)
+{
+   struct trace_context *tr_ctx = trace_context(_transfer->pipe);
+   struct trace_transfer *tr_trans = trace_transfer(_transfer);
+   struct pipe_context *context = tr_ctx->pipe;
+   struct pipe_transfer *transfer = tr_trans->transfer;
+
+   trace_dump_call_begin("pipe_context", "tex_transfer_destroy");
+
+   trace_dump_arg(ptr, context);
+   trace_dump_arg(ptr, transfer);
+
+   trace_dump_call_end();
+
+   trace_transfer_destroy(tr_trans);
+}
+
+
+static void *
+trace_context_transfer_map(struct pipe_context *_context,
+                          struct pipe_transfer *_transfer)
+{
+   struct trace_context *tr_context = trace_context(_context);
+   struct trace_transfer *tr_trans = trace_transfer(_transfer);
+   struct pipe_context *context = tr_context->pipe;
+   struct pipe_transfer *transfer = tr_trans->transfer;
+   void *map;
+
+   map = context->transfer_map(context, transfer);
+   if(map) {
+      if(transfer->usage & PIPE_TRANSFER_WRITE) {
+         assert(!tr_trans->map);
+         tr_trans->map = map;
+      }
+   }
+
+   return map;
+}
+
+
+static void
+trace_context_transfer_unmap(struct pipe_context *_context,
+			     struct pipe_transfer *_transfer)
+{
+   struct trace_context *tr_ctx = trace_context(_context);
+   struct trace_transfer *tr_trans = trace_transfer(_transfer);
+   struct pipe_context *context = tr_ctx->pipe;
+   struct pipe_transfer *transfer = tr_trans->transfer;
+
+   if(tr_trans->map) {
+      size_t size = util_format_get_nblocksy(transfer->texture->format, transfer->height) * transfer->stride;
+
+      trace_dump_call_begin("pipe_context", "transfer_write");
+
+      trace_dump_arg(ptr, context);
+
+      trace_dump_arg(ptr, transfer);
+
+      trace_dump_arg_begin("stride");
+      trace_dump_uint(transfer->stride);
+      trace_dump_arg_end();
+
+      trace_dump_arg_begin("data");
+      trace_dump_bytes(tr_trans->map, size);
+      trace_dump_arg_end();
+
+      trace_dump_arg_begin("size");
+      trace_dump_uint(size);
+      trace_dump_arg_end();
+
+      trace_dump_call_end();
+
+      tr_trans->map = NULL;
+   }
+
+   context->transfer_unmap(context, transfer);
+}
+
 static const struct debug_named_value rbug_blocker_flags[] = {
    {"before", 1},
    {"after", 2},
@@ -1367,6 +1498,11 @@ trace_context_create(struct trace_screen *tr_scr,
    tr_ctx->base.is_texture_referenced = trace_is_texture_referenced;
    tr_ctx->base.is_buffer_referenced = trace_is_buffer_referenced;
 
+   tr_ctx->base.get_tex_transfer = trace_context_get_tex_transfer;
+   tr_ctx->base.tex_transfer_destroy = trace_context_tex_transfer_destroy;
+   tr_ctx->base.transfer_map = trace_context_transfer_map;
+   tr_ctx->base.transfer_unmap = trace_context_transfer_unmap;
+
    tr_ctx->pipe = pipe;
 
    trace_screen_add_to_list(tr_scr, contexts, tr_ctx);
diff --git a/src/gallium/drivers/trace/tr_rbug.c b/src/gallium/drivers/trace/tr_rbug.c
index a43adac694..b36865400d 100644
--- a/src/gallium/drivers/trace/tr_rbug.c
+++ b/src/gallium/drivers/trace/tr_rbug.c
@@ -219,7 +219,7 @@ trace_rbug_texture_read(struct trace_rbug *tr_rbug, struct rbug_header *header,
    struct trace_texture *tr_tex = NULL;
    struct tr_list *ptr;
 
-   struct pipe_screen *screen = tr_scr->screen;
+   struct pipe_context *context = tr_scr->private_context;
    struct pipe_texture *tex;
    struct pipe_transfer *t;
 
@@ -239,12 +239,12 @@ trace_rbug_texture_read(struct trace_rbug *tr_rbug, struct rbug_header *header,
    }
 
    tex = tr_tex->texture;
-   t = screen->get_tex_transfer(tr_scr->screen, tex,
-                                gptr->face, gptr->level, gptr->zslice,
-                                PIPE_TRANSFER_READ,
-                                gptr->x, gptr->y, gptr->w, gptr->h);
+   t = context->get_tex_transfer(context, tex,
+				 gptr->face, gptr->level, gptr->zslice,
+				 PIPE_TRANSFER_READ,
+				 gptr->x, gptr->y, gptr->w, gptr->h);
 
-   map = screen->transfer_map(screen, t);
+   map = context->transfer_map(context, t);
 
    rbug_send_texture_read_reply(tr_rbug->con, serial,
                                 t->texture->format,
@@ -256,8 +256,8 @@ trace_rbug_texture_read(struct trace_rbug *tr_rbug, struct rbug_header *header,
                                 t->stride,
                                 NULL);
 
-   screen->transfer_unmap(screen, t);
-   screen->tex_transfer_destroy(t);
+   context->transfer_unmap(context, t);
+   context->tex_transfer_destroy(t);
 
    pipe_mutex_unlock(tr_scr->list_mutex);
 
diff --git a/src/gallium/drivers/trace/tr_screen.c b/src/gallium/drivers/trace/tr_screen.c
index 86ddb99540..25990bdac7 100644
--- a/src/gallium/drivers/trace/tr_screen.c
+++ b/src/gallium/drivers/trace/tr_screen.c
@@ -353,133 +353,7 @@ trace_screen_tex_surface_destroy(struct pipe_surface *_surface)
 }
 
 
-/********************************************************************
- * transfer
- */
-
-
-static struct pipe_transfer *
-trace_screen_get_tex_transfer(struct pipe_screen *_screen,
-                              struct pipe_texture *_texture,
-                              unsigned face, unsigned level,
-                              unsigned zslice,
-                              enum pipe_transfer_usage usage,
-                              unsigned x, unsigned y, unsigned w, unsigned h)
-{
-   struct trace_screen *tr_scr = trace_screen(_screen);
-   struct trace_texture *tr_tex = trace_texture(_texture);
-   struct pipe_screen *screen = tr_scr->screen;
-   struct pipe_texture *texture = tr_tex->texture;
-   struct pipe_transfer *result = NULL;
-
-   assert(texture->screen == screen);
-
-   trace_dump_call_begin("pipe_screen", "get_tex_transfer");
-
-   trace_dump_arg(ptr, screen);
-   trace_dump_arg(ptr, texture);
-   trace_dump_arg(uint, face);
-   trace_dump_arg(uint, level);
-   trace_dump_arg(uint, zslice);
-   trace_dump_arg(uint, usage);
-
-   trace_dump_arg(uint, x);
-   trace_dump_arg(uint, y);
-   trace_dump_arg(uint, w);
-   trace_dump_arg(uint, h);
-
-   result = screen->get_tex_transfer(screen, texture, face, level, zslice, usage,
-                                     x, y, w, h);
-
-   trace_dump_ret(ptr, result);
-
-   trace_dump_call_end();
-
-   if (result)
-      result = trace_transfer_create(tr_tex, result);
-
-   return result;
-}
-
-
-static void
-trace_screen_tex_transfer_destroy(struct pipe_transfer *_transfer)
-{
-   struct trace_screen *tr_scr = trace_screen(_transfer->texture->screen);
-   struct trace_transfer *tr_trans = trace_transfer(_transfer);
-   struct pipe_screen *screen = tr_scr->screen;
-   struct pipe_transfer *transfer = tr_trans->transfer;
-
-   trace_dump_call_begin("pipe_screen", "tex_transfer_destroy");
-
-   trace_dump_arg(ptr, screen);
-   trace_dump_arg(ptr, transfer);
-
-   trace_dump_call_end();
-
-   trace_transfer_destroy(tr_trans);
-}
-
-
-static void *
-trace_screen_transfer_map(struct pipe_screen *_screen,
-                          struct pipe_transfer *_transfer)
-{
-   struct trace_screen *tr_scr = trace_screen(_screen);
-   struct trace_transfer *tr_trans = trace_transfer(_transfer);
-   struct pipe_screen *screen = tr_scr->screen;
-   struct pipe_transfer *transfer = tr_trans->transfer;
-   void *map;
-
-   map = screen->transfer_map(screen, transfer);
-   if(map) {
-      if(transfer->usage & PIPE_TRANSFER_WRITE) {
-         assert(!tr_trans->map);
-         tr_trans->map = map;
-      }
-   }
-
-   return map;
-}
-
-
-static void
-trace_screen_transfer_unmap(struct pipe_screen *_screen,
-                           struct pipe_transfer *_transfer)
-{
-   struct trace_screen *tr_scr = trace_screen(_screen);
-   struct trace_transfer *tr_trans = trace_transfer(_transfer);
-   struct pipe_screen *screen = tr_scr->screen;
-   struct pipe_transfer *transfer = tr_trans->transfer;
-
-   if(tr_trans->map) {
-      size_t size = util_format_get_nblocksy(transfer->texture->format, transfer->height) * transfer->stride;
-
-      trace_dump_call_begin("pipe_screen", "transfer_write");
-
-      trace_dump_arg(ptr, screen);
-
-      trace_dump_arg(ptr, transfer);
-
-      trace_dump_arg_begin("stride");
-      trace_dump_uint(transfer->stride);
-      trace_dump_arg_end();
-
-      trace_dump_arg_begin("data");
-      trace_dump_bytes(tr_trans->map, size);
-      trace_dump_arg_end();
 
-      trace_dump_arg_begin("size");
-      trace_dump_uint(size);
-      trace_dump_arg_end();
-
-      trace_dump_call_end();
-
-      tr_trans->map = NULL;
-   }
-
-   screen->transfer_unmap(screen, transfer);
-}
 
 
 /********************************************************************
@@ -901,10 +775,6 @@ trace_screen_create(struct pipe_screen *screen)
    tr_scr->base.texture_destroy = trace_screen_texture_destroy;
    tr_scr->base.get_tex_surface = trace_screen_get_tex_surface;
    tr_scr->base.tex_surface_destroy = trace_screen_tex_surface_destroy;
-   tr_scr->base.get_tex_transfer = trace_screen_get_tex_transfer;
-   tr_scr->base.tex_transfer_destroy = trace_screen_tex_transfer_destroy;
-   tr_scr->base.transfer_map = trace_screen_transfer_map;
-   tr_scr->base.transfer_unmap = trace_screen_transfer_unmap;
    tr_scr->base.buffer_create = trace_screen_buffer_create;
    tr_scr->base.user_buffer_create = trace_screen_user_buffer_create;
    if (screen->buffer_map)
@@ -920,7 +790,11 @@ trace_screen_create(struct pipe_screen *screen)
    tr_scr->base.fence_signalled = trace_screen_fence_signalled;
    tr_scr->base.fence_finish = trace_screen_fence_finish;
    tr_scr->base.flush_frontbuffer = trace_screen_flush_frontbuffer;
+
    tr_scr->screen = screen;
+   tr_scr->private_context = screen->context_create(screen, NULL);
+   if (tr_scr->private_context == NULL)
+      goto error3;
 
    trace_dump_ret(ptr, screen);
    trace_dump_call_end();
@@ -930,10 +804,8 @@ trace_screen_create(struct pipe_screen *screen)
 
    return &tr_scr->base;
 
-#if 0
 error3:
    FREE(tr_scr);
-#endif
 error2:
    trace_dump_ret(ptr, screen);
    trace_dump_call_end();
diff --git a/src/gallium/drivers/trace/tr_screen.h b/src/gallium/drivers/trace/tr_screen.h
index 597e2fc265..9bfbe72e2c 100644
--- a/src/gallium/drivers/trace/tr_screen.h
+++ b/src/gallium/drivers/trace/tr_screen.h
@@ -56,6 +56,7 @@ struct trace_screen
    struct pipe_screen base;
 
    struct pipe_screen *screen;
+   struct pipe_context *private_context;
 
    /* remote debugger */
    struct trace_rbug *rbug;
diff --git a/src/gallium/drivers/trace/tr_texture.c b/src/gallium/drivers/trace/tr_texture.c
index 5321d68ec0..b70ccb9ce8 100644
--- a/src/gallium/drivers/trace/tr_texture.c
+++ b/src/gallium/drivers/trace/tr_texture.c
@@ -31,6 +31,7 @@
 #include "util/u_simple_list.h"
 
 #include "tr_screen.h"
+#include "tr_context.h"
 #include "tr_texture.h"
 
 
@@ -124,8 +125,9 @@ trace_surface_destroy(struct trace_surface *tr_surf)
 
 
 struct pipe_transfer *
-trace_transfer_create(struct trace_texture *tr_tex,
-                     struct pipe_transfer *transfer)
+trace_transfer_create(struct trace_context *tr_ctx,
+		      struct trace_texture *tr_tex,
+		      struct pipe_transfer *transfer)
 {
    struct trace_screen *tr_scr = trace_screen(tr_tex->base.screen);
    struct trace_transfer *tr_trans;
@@ -141,6 +143,7 @@ trace_transfer_create(struct trace_texture *tr_tex,
 
    memcpy(&tr_trans->base, transfer, sizeof(struct pipe_transfer));
 
+   tr_trans->base.pipe = &tr_ctx->base;
    tr_trans->base.texture = NULL;
    pipe_texture_reference(&tr_trans->base.texture, &tr_tex->base);
    tr_trans->transfer = transfer;
@@ -151,7 +154,7 @@ trace_transfer_create(struct trace_texture *tr_tex,
    return &tr_trans->base;
 
 error:
-   transfer->texture->screen->tex_transfer_destroy(transfer);
+   tr_ctx->pipe->tex_transfer_destroy(transfer);
    return NULL;
 }
 
@@ -160,12 +163,12 @@ void
 trace_transfer_destroy(struct trace_transfer *tr_trans)
 {
    struct trace_screen *tr_scr = trace_screen(tr_trans->base.texture->screen);
-   struct pipe_screen *screen = tr_trans->transfer->texture->screen;
+   struct pipe_context *context = tr_trans->transfer->pipe;
 
    trace_screen_remove_from_list(tr_scr, transfers, tr_trans);
 
    pipe_texture_reference(&tr_trans->base.texture, NULL);
-   screen->tex_transfer_destroy(tr_trans->transfer);
+   context->tex_transfer_destroy(tr_trans->transfer);
    FREE(tr_trans);
 }
 
diff --git a/src/gallium/drivers/trace/tr_texture.h b/src/gallium/drivers/trace/tr_texture.h
index 395e523e73..ab284eeef3 100644
--- a/src/gallium/drivers/trace/tr_texture.h
+++ b/src/gallium/drivers/trace/tr_texture.h
@@ -34,6 +34,7 @@
 
 #include "tr_screen.h"
 
+struct trace_context;
 
 struct trace_texture
 {
@@ -112,8 +113,9 @@ void
 trace_surface_destroy(struct trace_surface *tr_surf);
 
 struct pipe_transfer *
-trace_transfer_create(struct trace_texture *tr_tex,
-                      struct pipe_transfer *transfer);
+trace_transfer_create(struct trace_context *tr_ctx,
+		      struct trace_texture *tr_tex,
+		      struct pipe_transfer *transfer);
 
 void
 trace_transfer_destroy(struct trace_transfer *tr_trans);
diff --git a/src/gallium/include/pipe/p_context.h b/src/gallium/include/pipe/p_context.h
index 376b01aa69..494b53e912 100644
--- a/src/gallium/include/pipe/p_context.h
+++ b/src/gallium/include/pipe/p_context.h
@@ -306,6 +306,32 @@ struct pipe_context {
     */
    unsigned int (*is_buffer_referenced)(struct pipe_context *pipe,
 					struct pipe_buffer *buf);
+
+
+
+   /**
+    * Get a transfer object for transferring data to/from a texture.
+    *
+    * Transfers are (by default) context-private and allow uploads to be
+    * interleaved with
+    */
+   struct pipe_transfer *(*get_tex_transfer)(struct pipe_context *,
+                                             struct pipe_texture *texture,
+                                             unsigned face, unsigned level,
+                                             unsigned zslice,
+                                             enum pipe_transfer_usage usage,
+                                             unsigned x, unsigned y,
+                                             unsigned w, unsigned h);
+
+   void (*tex_transfer_destroy)(struct pipe_transfer *);
+   
+   void *(*transfer_map)( struct pipe_context *,
+                          struct pipe_transfer *transfer );
+
+   void (*transfer_unmap)( struct pipe_context *,
+                           struct pipe_transfer *transfer );
+
+
 };
 
 
diff --git a/src/gallium/include/pipe/p_screen.h b/src/gallium/include/pipe/p_screen.h
index b771bfe85e..b7cb83abbe 100644
--- a/src/gallium/include/pipe/p_screen.h
+++ b/src/gallium/include/pipe/p_screen.h
@@ -142,23 +142,6 @@ struct pipe_screen {
    void (*tex_surface_destroy)(struct pipe_surface *);
    
 
-   /** Get a transfer object for transferring data to/from a texture */
-   struct pipe_transfer *(*get_tex_transfer)(struct pipe_screen *,
-                                             struct pipe_texture *texture,
-                                             unsigned face, unsigned level,
-                                             unsigned zslice,
-                                             enum pipe_transfer_usage usage,
-                                             unsigned x, unsigned y,
-                                             unsigned w, unsigned h);
-
-   void (*tex_transfer_destroy)(struct pipe_transfer *);
-   
-   void *(*transfer_map)( struct pipe_screen *,
-                          struct pipe_transfer *transfer );
-
-   void (*transfer_unmap)( struct pipe_screen *,
-                           struct pipe_transfer *transfer );
-
 
    /**
     * Create a new buffer.
diff --git a/src/gallium/include/pipe/p_state.h b/src/gallium/include/pipe/p_state.h
index 3a97d888ce..2af933207d 100644
--- a/src/gallium/include/pipe/p_state.h
+++ b/src/gallium/include/pipe/p_state.h
@@ -304,6 +304,8 @@ struct pipe_surface
  */
 struct pipe_transfer
 {
+   struct pipe_context *pipe;
+
    unsigned x;                   /**< x offset from start of texture image */
    unsigned y;                   /**< y offset from start of texture image */
    unsigned width;               /**< logical width in pixels */
diff --git a/src/gallium/state_trackers/vega/api_filters.c b/src/gallium/state_trackers/vega/api_filters.c
index 02248ad433..6e79dd370f 100644
--- a/src/gallium/state_trackers/vega/api_filters.c
+++ b/src/gallium/state_trackers/vega/api_filters.c
@@ -78,14 +78,14 @@ static INLINE struct pipe_texture *create_texture_1d(struct vg_context *ctx,
 
    { /* upload color_data */
       struct pipe_transfer *transfer =
-         screen->get_tex_transfer(screen, tex,
-                                  0, 0, 0,
-                                  PIPE_TRANSFER_READ_WRITE ,
-                                  0, 0, tex->width0, tex->height0);
-      void *map = screen->transfer_map(screen, transfer);
+         pipe->get_tex_transfer(pipe, tex,
+				0, 0, 0,
+				PIPE_TRANSFER_READ_WRITE ,
+				0, 0, tex->width0, tex->height0);
+      void *map = pipe->transfer_map(pipe, transfer);
       memcpy(map, color_data, sizeof(VGint)*color_data_len);
-      screen->transfer_unmap(screen, transfer);
-      screen->tex_transfer_destroy(transfer);
+      pipe->transfer_unmap(pipe, transfer);
+      pipe->tex_transfer_destroy(transfer);
    }
 
    return tex;
diff --git a/src/gallium/state_trackers/vega/api_images.c b/src/gallium/state_trackers/vega/api_images.c
index 015241498e..432ba68139 100644
--- a/src/gallium/state_trackers/vega/api_images.c
+++ b/src/gallium/state_trackers/vega/api_images.c
@@ -397,7 +397,6 @@ void vgReadPixels(void * data, VGint dataStride,
 {
    struct vg_context *ctx = vg_current_context();
    struct pipe_context *pipe = ctx->pipe;
-   struct pipe_screen *screen = pipe->screen;
 
    struct st_framebuffer *stfb = ctx->draw_buffer;
    struct st_renderbuffer *strb = stfb->strb;
@@ -442,7 +441,7 @@ void vgReadPixels(void * data, VGint dataStride,
    {
       struct pipe_transfer *transfer;
 
-      transfer = screen->get_tex_transfer(screen, strb->texture,  0, 0, 0,
+      transfer = pipe->get_tex_transfer(pipe, strb->texture,  0, 0, 0,
                                           PIPE_TRANSFER_READ,
                                           0, 0, width, height);
 
@@ -458,7 +457,7 @@ void vgReadPixels(void * data, VGint dataStride,
          dst += dataStride;
       }
 
-      screen->tex_transfer_destroy(transfer);
+      pipe->tex_transfer_destroy(transfer);
    }
 }
 
diff --git a/src/gallium/state_trackers/vega/image.c b/src/gallium/state_trackers/vega/image.c
index 41c979bfec..604a86aeb8 100644
--- a/src/gallium/state_trackers/vega/image.c
+++ b/src/gallium/state_trackers/vega/image.c
@@ -378,7 +378,7 @@ void image_sub_data(struct vg_image *image,
    VGfloat *df = (VGfloat*)temp;
    VGint i;
    struct vg_context *ctx = vg_current_context();
-   struct pipe_screen *screen = ctx->pipe->screen;
+   struct pipe_context *pipe = ctx->pipe;
    struct pipe_texture *texture = image_texture(image);
    VGint xoffset = 0, yoffset = 0;
 
@@ -412,8 +412,8 @@ void image_sub_data(struct vg_image *image,
    }
 
    { /* upload color_data */
-      struct pipe_transfer *transfer = screen->get_tex_transfer(
-         screen, texture, 0, 0, 0,
+      struct pipe_transfer *transfer = pipe->get_tex_transfer(
+         pipe, texture, 0, 0, 0,
          PIPE_TRANSFER_WRITE, 0, 0, texture->width0, texture->height0);
       src += (dataStride * yoffset);
       for (i = 0; i < height; i++) {
@@ -422,7 +422,7 @@ void image_sub_data(struct vg_image *image,
          y += yStep;
          src += dataStride;
       }
-      screen->tex_transfer_destroy(transfer);
+      pipe->tex_transfer_destroy(transfer);
    }
 }
 
@@ -435,7 +435,6 @@ void image_get_sub_data(struct vg_image * image,
 {
    struct vg_context *ctx = vg_current_context();
    struct pipe_context *pipe = ctx->pipe;
-   struct pipe_screen *screen = pipe->screen;
    VGfloat temp[VEGA_MAX_IMAGE_WIDTH][4];
    VGfloat *df = (VGfloat*)temp;
    VGint y = 0, yStep = 1;
@@ -444,7 +443,7 @@ void image_get_sub_data(struct vg_image * image,
 
    {
       struct pipe_transfer *transfer =
-         screen->get_tex_transfer(screen,
+         pipe->get_tex_transfer(pipe,
                                   image->texture,  0, 0, 0,
                                   PIPE_TRANSFER_READ,
                                   0, 0,
@@ -461,7 +460,7 @@ void image_get_sub_data(struct vg_image * image,
          dst += dataStride;
       }
 
-      screen->tex_transfer_destroy(transfer);
+      pipe->tex_transfer_destroy(transfer);
    }
 }
 
diff --git a/src/gallium/state_trackers/vega/paint.c b/src/gallium/state_trackers/vega/paint.c
index cdb87d3bf6..47a7710d3e 100644
--- a/src/gallium/state_trackers/vega/paint.c
+++ b/src/gallium/state_trackers/vega/paint.c
@@ -164,10 +164,10 @@ static INLINE struct pipe_texture *create_gradient_texture(struct vg_paint *p)
       struct pipe_transfer *transfer =
          st_no_flush_get_tex_transfer(p->base.ctx, tex, 0, 0, 0,
                                       PIPE_TRANSFER_WRITE, 0, 0, 1024, 1);
-      void *map = screen->transfer_map(screen, transfer);
+      void *map = pipe->transfer_map(pipe, transfer);
       memcpy(map, p->gradient.color_data, sizeof(VGint)*1024);
-      screen->transfer_unmap(screen, transfer);
-      screen->tex_transfer_destroy(transfer);
+      pipe->transfer_unmap(pipe, transfer);
+      pipe->tex_transfer_destroy(transfer);
    }
 
    return tex;
diff --git a/src/gallium/state_trackers/vega/st_inlines.h b/src/gallium/state_trackers/vega/st_inlines.h
index 419151c3ae..4d12a4efdd 100644
--- a/src/gallium/state_trackers/vega/st_inlines.h
+++ b/src/gallium/state_trackers/vega/st_inlines.h
@@ -51,7 +51,6 @@ st_cond_flush_get_tex_transfer(struct vg_context *st,
 			       unsigned int x, unsigned int y,
 			       unsigned int w, unsigned int h)
 {
-   struct pipe_screen *screen = st->pipe->screen;
    struct pipe_context *pipe = st->pipe;
    unsigned referenced =
       pipe->is_texture_referenced(pipe, pt, face, level);
@@ -60,7 +59,7 @@ st_cond_flush_get_tex_transfer(struct vg_context *st,
 		      (usage & PIPE_TRANSFER_WRITE)))
       vgFlush();
 
-   return screen->get_tex_transfer(screen, pt, face, level, zslice, usage,
+   return pipe->get_tex_transfer(pipe, pt, face, level, zslice, usage,
 				   x, y, w, h);
 }
 
@@ -74,10 +73,10 @@ st_no_flush_get_tex_transfer(struct vg_context *st,
 			     unsigned int x, unsigned int y,
 			     unsigned int w, unsigned int h)
 {
-   struct pipe_screen *screen = st->pipe->screen;
+   struct pipe_context *pipe = st->pipe;
 
-   return screen->get_tex_transfer(screen, pt, face, level,
-				   zslice, usage, x, y, w, h);
+   return pipe->get_tex_transfer(pipe, pt, face, level,
+				 zslice, usage, x, y, w, h);
 }
 
 static INLINE void *
diff --git a/src/mesa/state_tracker/st_atom_pixeltransfer.c b/src/mesa/state_tracker/st_atom_pixeltransfer.c
index 0b2e3f5381..b066f5c94b 100644
--- a/src/mesa/state_tracker/st_atom_pixeltransfer.c
+++ b/src/mesa/state_tracker/st_atom_pixeltransfer.c
@@ -138,7 +138,6 @@ static void
 load_color_map_texture(GLcontext *ctx, struct pipe_texture *pt)
 {
    struct pipe_context *pipe = ctx->st->pipe;
-   struct pipe_screen *screen = pipe->screen;
    struct pipe_transfer *transfer;
    const GLuint rSize = ctx->PixelMaps.RtoR.Size;
    const GLuint gSize = ctx->PixelMaps.GtoG.Size;
@@ -151,7 +150,7 @@ load_color_map_texture(GLcontext *ctx, struct pipe_texture *pt)
    transfer = st_cond_flush_get_tex_transfer(st_context(ctx),
 					     pt, 0, 0, 0, PIPE_TRANSFER_WRITE,
 					     0, 0, texSize, texSize);
-   dest = (uint *) screen->transfer_map(screen, transfer);
+   dest = (uint *) pipe->transfer_map(pipe, transfer);
 
    /* Pack four 1D maps into a 2D texture:
     * R map is placed horizontally, indexed by S, in channel 0
@@ -172,8 +171,8 @@ load_color_map_texture(GLcontext *ctx, struct pipe_texture *pt)
       }
    }
 
-   screen->transfer_unmap(screen, transfer);
-   screen->tex_transfer_destroy(transfer);
+   pipe->transfer_unmap(pipe, transfer);
+   pipe->tex_transfer_destroy(transfer);
 }
 
 
diff --git a/src/mesa/state_tracker/st_cb_accum.c b/src/mesa/state_tracker/st_cb_accum.c
index 33e43ddcc4..69a96e5d10 100644
--- a/src/mesa/state_tracker/st_cb_accum.c
+++ b/src/mesa/state_tracker/st_cb_accum.c
@@ -129,7 +129,6 @@ accum_accum(struct st_context *st, GLfloat value,
             struct st_renderbuffer *color_strb)
 {
    struct pipe_context *pipe = st->pipe;
-   struct pipe_screen *screen = pipe->screen;
    struct pipe_transfer *color_trans;
    size_t stride = acc_strb->stride;
    GLubyte *data = acc_strb->data;
@@ -166,7 +165,7 @@ accum_accum(struct st_context *st, GLfloat value,
    }
 
    free(buf);
-   screen->tex_transfer_destroy(color_trans);
+   pipe->tex_transfer_destroy(color_trans);
 }
 
 
@@ -177,7 +176,6 @@ accum_load(struct st_context *st, GLfloat value,
            struct st_renderbuffer *color_strb)
 {
    struct pipe_context *pipe = st->pipe;
-   struct pipe_screen *screen = pipe->screen;
    struct pipe_transfer *color_trans;
    size_t stride = acc_strb->stride;
    GLubyte *data = acc_strb->data;
@@ -215,7 +213,7 @@ accum_load(struct st_context *st, GLfloat value,
    }
 
    free(buf);
-   screen->tex_transfer_destroy(color_trans);
+   pipe->tex_transfer_destroy(color_trans);
 }
 
 
@@ -226,7 +224,6 @@ accum_return(GLcontext *ctx, GLfloat value,
              struct st_renderbuffer *color_strb)
 {
    struct pipe_context *pipe = ctx->st->pipe;
-   struct pipe_screen *screen = pipe->screen;
    const GLubyte *colormask = ctx->Color.ColorMask[0];
    enum pipe_transfer_usage usage;
    struct pipe_transfer *color_trans;
@@ -283,7 +280,7 @@ accum_return(GLcontext *ctx, GLfloat value,
    pipe_put_tile_rgba(color_trans, 0, 0, width, height, buf);
 
    free(buf);
-   screen->tex_transfer_destroy(color_trans);
+   pipe->tex_transfer_destroy(color_trans);
 }
 
 
diff --git a/src/mesa/state_tracker/st_cb_bitmap.c b/src/mesa/state_tracker/st_cb_bitmap.c
index f326601c3b..723c5f180b 100644
--- a/src/mesa/state_tracker/st_cb_bitmap.c
+++ b/src/mesa/state_tracker/st_cb_bitmap.c
@@ -259,7 +259,6 @@ make_bitmap_texture(GLcontext *ctx, GLsizei width, GLsizei height,
                     const GLubyte *bitmap)
 {
    struct pipe_context *pipe = ctx->st->pipe;
-   struct pipe_screen *screen = pipe->screen;
    struct pipe_transfer *transfer;
    ubyte *dest;
    struct pipe_texture *pt;
@@ -285,7 +284,7 @@ make_bitmap_texture(GLcontext *ctx, GLsizei width, GLsizei height,
 					   PIPE_TRANSFER_WRITE,
 					   0, 0, width, height);
 
-   dest = screen->transfer_map(screen, transfer);
+   dest = pipe->transfer_map(pipe, transfer);
 
    /* Put image into texture transfer */
    memset(dest, 0xff, height * transfer->stride);
@@ -295,8 +294,8 @@ make_bitmap_texture(GLcontext *ctx, GLsizei width, GLsizei height,
    _mesa_unmap_pbo_source(ctx, unpack);
 
    /* Release transfer */
-   screen->transfer_unmap(screen, transfer);
-   screen->tex_transfer_destroy(transfer);
+   pipe->transfer_unmap(pipe, transfer);
+   pipe->tex_transfer_destroy(transfer);
 
    return pt;
 }
@@ -520,7 +519,6 @@ static void
 reset_cache(struct st_context *st)
 {
    struct pipe_context *pipe = st->pipe;
-   struct pipe_screen *screen = pipe->screen;
    struct bitmap_cache *cache = st->bitmap.cache;
 
    /*memset(cache->buffer, 0xff, sizeof(cache->buffer));*/
@@ -532,7 +530,7 @@ reset_cache(struct st_context *st)
    cache->ymax = -1000000;
 
    if (cache->trans) {
-      screen->tex_transfer_destroy(cache->trans);
+      pipe->tex_transfer_destroy(cache->trans);
       cache->trans = NULL;
    }
 
@@ -570,7 +568,6 @@ static void
 create_cache_trans(struct st_context *st)
 {
    struct pipe_context *pipe = st->pipe;
-   struct pipe_screen *screen = pipe->screen;
    struct bitmap_cache *cache = st->bitmap.cache;
 
    if (cache->trans)
@@ -583,7 +580,7 @@ create_cache_trans(struct st_context *st)
 					       PIPE_TRANSFER_WRITE, 0, 0,
 					       BITMAP_CACHE_WIDTH,
 					       BITMAP_CACHE_HEIGHT);
-   cache->buffer = screen->transfer_map(screen, cache->trans);
+   cache->buffer = pipe->transfer_map(pipe, cache->trans);
 
    /* init image to all 0xff */
    memset(cache->buffer, 0xff, cache->trans->stride * BITMAP_CACHE_HEIGHT);
@@ -601,7 +598,6 @@ st_flush_bitmap_cache(struct st_context *st)
 
       if (st->ctx->DrawBuffer) {
          struct pipe_context *pipe = st->pipe;
-         struct pipe_screen *screen = pipe->screen;
 
          assert(cache->xmin <= cache->xmax);
  
@@ -617,10 +613,10 @@ st_flush_bitmap_cache(struct st_context *st)
          if (cache->trans) {
             if (0)
                print_cache(cache);
-            screen->transfer_unmap(screen, cache->trans);
+            pipe->transfer_unmap(pipe, cache->trans);
             cache->buffer = NULL;
 
-            screen->tex_transfer_destroy(cache->trans);
+            pipe->tex_transfer_destroy(cache->trans);
             cache->trans = NULL;
          }
 
@@ -823,7 +819,6 @@ void
 st_destroy_bitmap(struct st_context *st)
 {
    struct pipe_context *pipe = st->pipe;
-   struct pipe_screen *screen = pipe->screen;
    struct bitmap_cache *cache = st->bitmap.cache;
 
 
@@ -840,8 +835,8 @@ st_destroy_bitmap(struct st_context *st)
 
    if (cache) {
       if (cache->trans) {
-         screen->transfer_unmap(screen, cache->trans);
-         screen->tex_transfer_destroy(cache->trans);
+         pipe->transfer_unmap(pipe, cache->trans);
+         pipe->tex_transfer_destroy(cache->trans);
       }
       pipe_texture_reference(&st->bitmap.cache->texture, NULL);
       free(st->bitmap.cache);
diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c b/src/mesa/state_tracker/st_cb_drawpixels.c
index 8eb76f4131..3fa6d12f1c 100644
--- a/src/mesa/state_tracker/st_cb_drawpixels.c
+++ b/src/mesa/state_tracker/st_cb_drawpixels.c
@@ -349,7 +349,6 @@ make_texture(struct st_context *st,
 {
    GLcontext *ctx = st->ctx;
    struct pipe_context *pipe = st->pipe;
-   struct pipe_screen *screen = pipe->screen;
    gl_format mformat;
    struct pipe_texture *pt;
    enum pipe_format pipeFormat;
@@ -391,7 +390,7 @@ make_texture(struct st_context *st,
 					      width, height);
 
       /* map texture transfer */
-      dest = screen->transfer_map(screen, transfer);
+      dest = pipe->transfer_map(pipe, transfer);
 
 
       /* Put image into texture transfer.
@@ -411,8 +410,8 @@ make_texture(struct st_context *st,
                                unpack);
 
       /* unmap */
-      screen->transfer_unmap(screen, transfer);
-      screen->tex_transfer_destroy(transfer);
+      pipe->transfer_unmap(pipe, transfer);
+      pipe->tex_transfer_destroy(transfer);
 
       assert(success);
 
@@ -658,7 +657,6 @@ draw_stencil_pixels(GLcontext *ctx, GLint x, GLint y,
 {
    struct st_context *st = st_context(ctx);
    struct pipe_context *pipe = st->pipe;
-   struct pipe_screen *screen = pipe->screen;
    struct st_renderbuffer *strb;
    enum pipe_transfer_usage usage;
    struct pipe_transfer *pt;
@@ -692,7 +690,7 @@ draw_stencil_pixels(GLcontext *ctx, GLint x, GLint y,
 				       usage, x, y,
 				       width, height);
 
-   stmap = screen->transfer_map(screen, pt);
+   stmap = pipe->transfer_map(pipe, pt);
 
    pixels = _mesa_map_pbo_source(ctx, &clippedUnpack, pixels);
    assert(pixels);
@@ -792,8 +790,8 @@ draw_stencil_pixels(GLcontext *ctx, GLint x, GLint y,
    _mesa_unmap_pbo_source(ctx, &clippedUnpack);
 
    /* unmap the stencil buffer */
-   screen->transfer_unmap(screen, pt);
-   screen->tex_transfer_destroy(pt);
+   pipe->transfer_unmap(pipe, pt);
+   pipe->tex_transfer_destroy(pt);
 }
 
 
@@ -856,7 +854,7 @@ copy_stencil_pixels(GLcontext *ctx, GLint srcx, GLint srcy,
                     GLint dstx, GLint dsty)
 {
    struct st_renderbuffer *rbDraw = st_renderbuffer(ctx->DrawBuffer->_StencilBuffer);
-   struct pipe_screen *screen = ctx->st->pipe->screen;
+   struct pipe_context *pipe = ctx->st->pipe;
    enum pipe_transfer_usage usage;
    struct pipe_transfer *ptDraw;
    ubyte *drawMap;
@@ -892,7 +890,7 @@ copy_stencil_pixels(GLcontext *ctx, GLint srcx, GLint srcy,
    assert(util_format_get_blockheight(ptDraw->texture->format) == 1);
 
    /* map the stencil buffer */
-   drawMap = screen->transfer_map(screen, ptDraw);
+   drawMap = pipe->transfer_map(pipe, ptDraw);
 
    /* draw */
    /* XXX PixelZoom not handled yet */
@@ -945,8 +943,8 @@ copy_stencil_pixels(GLcontext *ctx, GLint srcx, GLint srcy,
    free(buffer);
 
    /* unmap the stencil buffer */
-   screen->transfer_unmap(screen, ptDraw);
-   screen->tex_transfer_destroy(ptDraw);
+   pipe->transfer_unmap(pipe, ptDraw);
+   pipe->tex_transfer_destroy(ptDraw);
 }
 
 
@@ -1084,8 +1082,8 @@ st_CopyPixels(GLcontext *ctx, GLint srcx, GLint srcy,
 
       if (0) {
          /* debug */
-         debug_dump_surface("copypixsrcsurf", psRead);
-         debug_dump_surface("copypixtemptex", psTex);
+         debug_dump_surface(pipe, "copypixsrcsurf", psRead);
+         debug_dump_surface(pipe, "copypixtemptex", psTex);
       }
 
       pipe_surface_reference(&psRead, NULL); 
@@ -1128,8 +1126,8 @@ st_CopyPixels(GLcontext *ctx, GLint srcx, GLint srcy,
          free(buf);
       }
 
-      screen->tex_transfer_destroy(ptRead);
-      screen->tex_transfer_destroy(ptTex);
+      pipe->tex_transfer_destroy(ptRead);
+      pipe->tex_transfer_destroy(ptTex);
    }
 
    /* draw textured quad */
diff --git a/src/mesa/state_tracker/st_cb_readpixels.c b/src/mesa/state_tracker/st_cb_readpixels.c
index 8cc9cfac76..98ccda821c 100644
--- a/src/mesa/state_tracker/st_cb_readpixels.c
+++ b/src/mesa/state_tracker/st_cb_readpixels.c
@@ -63,7 +63,7 @@ st_read_stencil_pixels(GLcontext *ctx, GLint x, GLint y,
                        GLvoid *pixels)
 {
    struct gl_framebuffer *fb = ctx->ReadBuffer;
-   struct pipe_screen *screen = ctx->st->pipe->screen;
+   struct pipe_context *pipe = ctx->st->pipe;
    struct st_renderbuffer *strb = st_renderbuffer(fb->_StencilBuffer);
    struct pipe_transfer *pt;
    ubyte *stmap;
@@ -81,7 +81,7 @@ st_read_stencil_pixels(GLcontext *ctx, GLint x, GLint y,
 				       width, height);
 
    /* map the stencil buffer */
-   stmap = screen->transfer_map(screen, pt);
+   stmap = pipe->transfer_map(pipe, pt);
 
    /* width should never be > MAX_WIDTH since we did clipping earlier */
    ASSERT(width <= MAX_WIDTH);
@@ -161,8 +161,8 @@ st_read_stencil_pixels(GLcontext *ctx, GLint x, GLint y,
    }
 
    /* unmap the stencil buffer */
-   screen->transfer_unmap(screen, pt);
-   screen->tex_transfer_destroy(pt);
+   pipe->transfer_unmap(pipe, pt);
+   pipe->tex_transfer_destroy(pt);
 }
 
 
@@ -234,7 +234,6 @@ st_fast_readpixels(GLcontext *ctx, struct st_renderbuffer *strb,
 
    {
       struct pipe_context *pipe = ctx->st->pipe;
-      struct pipe_screen *screen = pipe->screen;
       struct pipe_transfer *trans;
       const GLubyte *map;
       GLubyte *dst;
@@ -253,9 +252,9 @@ st_fast_readpixels(GLcontext *ctx, struct st_renderbuffer *strb,
          return GL_FALSE;
       }
 
-      map = screen->transfer_map(screen, trans);
+      map = pipe->transfer_map(pipe, trans);
       if (!map) {
-         screen->tex_transfer_destroy(trans);
+         pipe->tex_transfer_destroy(trans);
          return GL_FALSE;
       }
 
@@ -317,8 +316,8 @@ st_fast_readpixels(GLcontext *ctx, struct st_renderbuffer *strb,
          ; /* nothing */
       }
 
-      screen->transfer_unmap(screen, trans);
-      screen->tex_transfer_destroy(trans);
+      pipe->transfer_unmap(pipe, trans);
+      pipe->tex_transfer_destroy(trans);
    }
 
    return GL_TRUE;
@@ -337,7 +336,6 @@ st_readpixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height,
               GLvoid *dest)
 {
    struct pipe_context *pipe = ctx->st->pipe;
-   struct pipe_screen *screen = pipe->screen;
    GLfloat temp[MAX_WIDTH][4];
    const GLbitfield transferOps = ctx->_ImageTransferState;
    GLsizei i, j;
@@ -541,7 +539,7 @@ st_readpixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height,
       }
    }
 
-   screen->tex_transfer_destroy(trans);
+   pipe->tex_transfer_destroy(trans);
 
    _mesa_unmap_pbo_dest(ctx, &clippedPacking);
 }
diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c
index c849132e74..1b20b615d0 100644
--- a/src/mesa/state_tracker/st_cb_texture.c
+++ b/src/mesa/state_tracker/st_cb_texture.c
@@ -371,7 +371,8 @@ compress_with_blit(GLcontext * ctx,
 {
    const GLuint dstImageOffsets[1] = {0};
    struct st_texture_image *stImage = st_texture_image(texImage);
-   struct pipe_screen *screen = ctx->st->pipe->screen;
+   struct pipe_context *pipe = ctx->st->pipe;
+   struct pipe_screen *screen = pipe->screen;
    gl_format mesa_format;
    struct pipe_texture templ;
    struct pipe_texture *src_tex;
@@ -421,7 +422,7 @@ compress_with_blit(GLcontext * ctx,
 					     0, 0, 0, /* face, level are zero */
 					     PIPE_TRANSFER_WRITE,
 					     0, 0, width, height); /* x, y, w, h */
-   map = screen->transfer_map(screen, tex_xfer);
+   map = pipe->transfer_map(pipe, tex_xfer);
 
    _mesa_texstore(ctx, 2, GL_RGBA, mesa_format,
                   map,              /* dest ptr */
@@ -433,8 +434,8 @@ compress_with_blit(GLcontext * ctx,
                   pixels,           /* source data */
                   unpack);          /* source data packing */
 
-   screen->transfer_unmap(screen, tex_xfer);
-   screen->tex_transfer_destroy(tex_xfer);
+   pipe->transfer_unmap(pipe, tex_xfer);
+   pipe->tex_transfer_destroy(tex_xfer);
 
    /* copy / compress image */
    util_blit_pixels_tex(ctx->st->blit,
@@ -809,7 +810,8 @@ decompress_with_blit(GLcontext * ctx, GLenum target, GLint level,
                      struct gl_texture_object *texObj,
                      struct gl_texture_image *texImage)
 {
-   struct pipe_screen *screen = ctx->st->pipe->screen;
+   struct pipe_context *pipe = ctx->st->pipe;
+   struct pipe_screen *screen = pipe->screen;
    struct st_texture_image *stImage = st_texture_image(texImage);
    const GLuint width = texImage->Width;
    const GLuint height = texImage->Height;
@@ -848,7 +850,7 @@ decompress_with_blit(GLcontext * ctx, GLenum target, GLint level,
    if (st_equal_formats(stImage->pt->format, format, type)) {
       /* memcpy */
       const uint bytesPerRow = width * util_format_get_blocksize(stImage->pt->format);
-      ubyte *map = screen->transfer_map(screen, tex_xfer);
+      ubyte *map = pipe->transfer_map(pipe, tex_xfer);
       GLuint row;
       for (row = 0; row < height; row++) {
          GLvoid *dest = _mesa_image_address2d(&ctx->Pack, pixels, width,
@@ -856,7 +858,7 @@ decompress_with_blit(GLcontext * ctx, GLenum target, GLint level,
          memcpy(dest, map, bytesPerRow);
          map += tex_xfer->stride;
       }
-      screen->transfer_unmap(screen, tex_xfer);
+      pipe->transfer_unmap(pipe, tex_xfer);
    }
    else {
       /* format translation via floats */
@@ -1256,7 +1258,6 @@ fallback_copy_texsubimage(GLcontext *ctx, GLenum target, GLint level,
                           GLsizei width, GLsizei height)
 {
    struct pipe_context *pipe = ctx->st->pipe;
-   struct pipe_screen *screen = pipe->screen;
    struct pipe_transfer *src_trans;
    GLvoid *texDest;
    enum pipe_transfer_usage transfer_usage;
@@ -1363,7 +1364,7 @@ fallback_copy_texsubimage(GLcontext *ctx, GLenum target, GLint level,
    }
 
    st_texture_image_unmap(ctx->st, stImage);
-   screen->tex_transfer_destroy(src_trans);
+   pipe->tex_transfer_destroy(src_trans);
 }
 
 
diff --git a/src/mesa/state_tracker/st_gen_mipmap.c b/src/mesa/state_tracker/st_gen_mipmap.c
index f67d7b4cb5..a73b8ed8fe 100644
--- a/src/mesa/state_tracker/st_gen_mipmap.c
+++ b/src/mesa/state_tracker/st_gen_mipmap.c
@@ -106,7 +106,6 @@ fallback_generate_mipmap(GLcontext *ctx, GLenum target,
                          struct gl_texture_object *texObj)
 {
    struct pipe_context *pipe = ctx->st->pipe;
-   struct pipe_screen *screen = pipe->screen;
    struct pipe_texture *pt = st_get_texobj_texture(texObj);
    const uint baseLevel = texObj->BaseLevel;
    const uint lastLevel = pt->last_level;
@@ -142,8 +141,8 @@ fallback_generate_mipmap(GLcontext *ctx, GLenum target,
 						u_minify(pt->width0, dstLevel),
 						u_minify(pt->height0, dstLevel));
 
-      srcData = (ubyte *) screen->transfer_map(screen, srcTrans);
-      dstData = (ubyte *) screen->transfer_map(screen, dstTrans);
+      srcData = (ubyte *) pipe->transfer_map(pipe, srcTrans);
+      dstData = (ubyte *) pipe->transfer_map(pipe, dstTrans);
 
       srcStride = srcTrans->stride / util_format_get_blocksize(srcTrans->texture->format);
       dstStride = dstTrans->stride / util_format_get_blocksize(dstTrans->texture->format);
@@ -161,11 +160,11 @@ fallback_generate_mipmap(GLcontext *ctx, GLenum target,
                                   dstData,
                                   dstStride); /* stride in texels */
 
-      screen->transfer_unmap(screen, srcTrans);
-      screen->transfer_unmap(screen, dstTrans);
+      pipe->transfer_unmap(pipe, srcTrans);
+      pipe->transfer_unmap(pipe, dstTrans);
 
-      screen->tex_transfer_destroy(srcTrans);
-      screen->tex_transfer_destroy(dstTrans);
+      pipe->tex_transfer_destroy(srcTrans);
+      pipe->tex_transfer_destroy(dstTrans);
    }
 }
 
diff --git a/src/mesa/state_tracker/st_inlines.h b/src/mesa/state_tracker/st_inlines.h
index e105870bc7..7fcde7b1a9 100644
--- a/src/mesa/state_tracker/st_inlines.h
+++ b/src/mesa/state_tracker/st_inlines.h
@@ -53,11 +53,11 @@ st_cond_flush_get_tex_transfer(struct st_context *st,
 			       unsigned int x, unsigned int y,
 			       unsigned int w, unsigned int h)
 {
-   struct pipe_screen *screen = st->pipe->screen;
+   struct pipe_context *context = st->pipe;
 
    st_teximage_flush_before_map(st, pt, face, level, usage);
-   return screen->get_tex_transfer(screen, pt, face, level, zslice, usage,
-				   x, y, w, h);
+   return context->get_tex_transfer(context, pt, face, level, zslice, usage,
+				    x, y, w, h);
 }
 
 static INLINE struct pipe_transfer *
@@ -70,9 +70,9 @@ st_no_flush_get_tex_transfer(struct st_context *st,
 			     unsigned int x, unsigned int y,
 			     unsigned int w, unsigned int h)
 {
-   struct pipe_screen *screen = st->pipe->screen;
+   struct pipe_context *context = st->pipe;
 
-   return screen->get_tex_transfer(screen, pt, face, level,
+   return context->get_tex_transfer(context, pt, face, level,
 				   zslice, usage, x, y, w, h);
 }
 
diff --git a/src/mesa/state_tracker/st_texture.c b/src/mesa/state_tracker/st_texture.c
index 5a45c4358a..f1eef768eb 100644
--- a/src/mesa/state_tracker/st_texture.c
+++ b/src/mesa/state_tracker/st_texture.c
@@ -192,7 +192,6 @@ st_texture_image_map(struct st_context *st, struct st_texture_image *stImage,
                      GLuint x, GLuint y, GLuint w, GLuint h)
 {
    struct pipe_context *pipe = st->pipe;
-   struct pipe_screen *screen = pipe->screen;
    struct pipe_texture *pt = stImage->pt;
 
    DBG("%s \n", __FUNCTION__);
@@ -202,7 +201,7 @@ st_texture_image_map(struct st_context *st, struct st_texture_image *stImage,
 						    usage, x, y, w, h);
 
    if (stImage->transfer)
-      return screen->transfer_map(screen, stImage->transfer);
+      return pipe->transfer_map(pipe, stImage->transfer);
    else
       return NULL;
 }
@@ -212,13 +211,13 @@ void
 st_texture_image_unmap(struct st_context *st,
                        struct st_texture_image *stImage)
 {
-   struct pipe_screen *screen = st->pipe->screen;
+   struct pipe_context *pipe = st->pipe;
 
    DBG("%s\n", __FUNCTION__);
 
-   screen->transfer_unmap(screen, stImage->transfer);
+   pipe->transfer_unmap(pipe, stImage->transfer);
 
-   screen->tex_transfer_destroy(stImage->transfer);
+   pipe->tex_transfer_destroy(stImage->transfer);
 }
 
 
@@ -238,8 +237,7 @@ st_surface_data(struct pipe_context *pipe,
 		const void *src, unsigned src_stride,
 		unsigned srcx, unsigned srcy, unsigned width, unsigned height)
 {
-   struct pipe_screen *screen = pipe->screen;
-   void *map = screen->transfer_map(screen, dst);
+   void *map = pipe->transfer_map(pipe, dst);
 
    assert(dst->texture);
    util_copy_rect(map,
@@ -250,7 +248,7 @@ st_surface_data(struct pipe_context *pipe,
                   src, src_stride, 
                   srcx, srcy);
 
-   screen->transfer_unmap(screen, dst);
+   pipe->transfer_unmap(pipe, dst);
 }
 
 
@@ -265,7 +263,6 @@ st_texture_image_data(struct st_context *st,
                       GLuint src_row_stride, GLuint src_image_stride)
 {
    struct pipe_context *pipe = st->pipe;
-   struct pipe_screen *screen = pipe->screen;
    GLuint depth = u_minify(dst->depth0, level);
    GLuint i;
    const GLubyte *srcUB = src;
@@ -287,7 +284,7 @@ st_texture_image_data(struct st_context *st,
 		      u_minify(dst->width0, level),
                       u_minify(dst->height0, level));      /* width, height */
 
-      screen->tex_transfer_destroy(dst_transfer);
+      pipe->tex_transfer_destroy(dst_transfer);
 
       srcUB += src_image_stride;
    }
-- 
cgit v1.2.3


From 9f5de23d0a73454b00236743d24326ec7b0d96f9 Mon Sep 17 00:00:00 2001
From: Chia-I Wu <olv@lunarg.com>
Date: Thu, 11 Mar 2010 18:07:07 +0800
Subject: mesa/es: Fix GL_OES_draw_texture support.

st_DrawTex calls util_draw_vertex_buffer.  Since
ac4abaecd5f52e416c89bfe19b34ed7f4e014b21, the caller is expected to set
vertex elements before calling.
---
 src/mesa/es/state_tracker/st_cb_drawtex.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/es/state_tracker/st_cb_drawtex.c b/src/mesa/es/state_tracker/st_cb_drawtex.c
index 0a5cba9d92..e4b8954991 100644
--- a/src/mesa/es/state_tracker/st_cb_drawtex.c
+++ b/src/mesa/es/state_tracker/st_cb_drawtex.c
@@ -120,6 +120,7 @@ st_DrawTex(GLcontext *ctx, GLfloat x, GLfloat y, GLfloat z,
    GLboolean emitColor;
    uint semantic_names[2 + MAX_TEXTURE_UNITS];
    uint semantic_indexes[2 + MAX_TEXTURE_UNITS];
+   struct pipe_vertex_element velements[2 + MAX_TEXTURE_UNITS];
    GLbitfield inputs = VERT_BIT_POS;
 
    /* determine if we need vertex color */
@@ -232,6 +233,7 @@ st_DrawTex(GLcontext *ctx, GLfloat x, GLfloat y, GLfloat z,
 
    cso_save_viewport(cso);
    cso_save_vertex_shader(cso);
+   cso_save_vertex_elements(cso);
 
    {
       void *vs = lookup_shader(pipe, numAttribs,
@@ -239,6 +241,14 @@ st_DrawTex(GLcontext *ctx, GLfloat x, GLfloat y, GLfloat z,
       cso_set_vertex_shader_handle(cso, vs);
    }
 
+   for (i = 0; i < numAttribs; i++) {
+      velements[i].src_offset = i * 4 * sizeof(float);
+      velements[i].instance_divisor = 0;
+      velements[i].vertex_buffer_index = 0;
+      velements[i].src_format = PIPE_FORMAT_R32G32B32A32_FLOAT;
+   }
+   cso_set_vertex_elements(cso, numAttribs, velements);
+
    /* viewport state: viewport matching window dims */
    {
       const struct gl_framebuffer *fb = st->ctx->DrawBuffer;
@@ -270,6 +280,7 @@ st_DrawTex(GLcontext *ctx, GLfloat x, GLfloat y, GLfloat z,
    /* restore state */
    cso_restore_viewport(cso);
    cso_restore_vertex_shader(cso);
+   cso_restore_vertex_elements(cso);
 }
 
 
-- 
cgit v1.2.3


From 021cdd698bb57ae9b12b84582302a8d7f656db0c Mon Sep 17 00:00:00 2001
From: Chia-I Wu <olv@lunarg.com>
Date: Thu, 11 Mar 2010 18:13:18 +0800
Subject: mesa/es: Validate the state in st_DrawTex.

Without the validation, the function might draw with outdated textures.
---
 src/mesa/es/state_tracker/st_cb_drawtex.c | 2 ++
 1 file changed, 2 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/es/state_tracker/st_cb_drawtex.c b/src/mesa/es/state_tracker/st_cb_drawtex.c
index e4b8954991..f75f4861a2 100644
--- a/src/mesa/es/state_tracker/st_cb_drawtex.c
+++ b/src/mesa/es/state_tracker/st_cb_drawtex.c
@@ -123,6 +123,8 @@ st_DrawTex(GLcontext *ctx, GLfloat x, GLfloat y, GLfloat z,
    struct pipe_vertex_element velements[2 + MAX_TEXTURE_UNITS];
    GLbitfield inputs = VERT_BIT_POS;
 
+   st_validate_state(st);
+
    /* determine if we need vertex color */
    if (ctx->FragmentProgram._Current->Base.InputsRead & FRAG_BIT_COL0)
       emitColor = GL_TRUE;
-- 
cgit v1.2.3


From bff128ff9c6f12bb49228e5f90903e7a18ce5fac Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Thu, 11 Mar 2010 09:08:58 -0700
Subject: ARB prog parser: added (float) casts and regenerate files

---
 src/mesa/shader/lex.yy.c        | 38 ++++++++++++--------------------------
 src/mesa/shader/program_lexer.l |  8 ++++----
 2 files changed, 16 insertions(+), 30 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/shader/lex.yy.c b/src/mesa/shader/lex.yy.c
index d1af35fedb..a08617ff8d 100644
--- a/src/mesa/shader/lex.yy.c
+++ b/src/mesa/shader/lex.yy.c
@@ -53,6 +53,7 @@ typedef int flex_int32_t;
 typedef unsigned char flex_uint8_t; 
 typedef unsigned short int flex_uint16_t;
 typedef unsigned int flex_uint32_t;
+#endif /* ! C99 */
 
 /* Limits of integral types. */
 #ifndef INT8_MIN
@@ -83,8 +84,6 @@ typedef unsigned int flex_uint32_t;
 #define UINT32_MAX             (4294967295U)
 #endif
 
-#endif /* ! C99 */
-
 #endif /* ! FLEXINT_H */
 
 #ifdef __cplusplus
@@ -158,15 +157,7 @@ typedef void* yyscan_t;
 
 /* Size of default input buffer. */
 #ifndef YY_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k.
- * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
- * Ditto for the __ia64__ case accordingly.
- */
-#define YY_BUF_SIZE 32768
-#else
 #define YY_BUF_SIZE 16384
-#endif /* __ia64__ */
 #endif
 
 /* The state buf must be large enough to hold one state per character in the main buffer.
@@ -1161,7 +1152,7 @@ handle_ident(struct asm_parser_state *state, const char *text, YYSTYPE *lval)
    } while(0);
 
 #define YY_EXTRA_TYPE struct asm_parser_state *
-#line 1165 "lex.yy.c"
+#line 1156 "lex.yy.c"
 
 #define INITIAL 0
 
@@ -1298,12 +1289,7 @@ static int input (yyscan_t yyscanner );
 
 /* Amount of stuff to slurp up with each read. */
 #ifndef YY_READ_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k */
-#define YY_READ_BUF_SIZE 16384
-#else
 #define YY_READ_BUF_SIZE 8192
-#endif /* __ia64__ */
 #endif
 
 /* Copy whatever the last rule matched to the standard output. */
@@ -1311,7 +1297,7 @@ static int input (yyscan_t yyscanner );
 /* This used to be an fputs(), but since the string might contain NUL's,
  * we now use fwrite().
  */
-#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
+#define ECHO fwrite( yytext, yyleng, 1, yyout )
 #endif
 
 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
@@ -1322,7 +1308,7 @@ static int input (yyscan_t yyscanner );
 	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
 		{ \
 		int c = '*'; \
-		size_t n; \
+		unsigned n; \
 		for ( n = 0; n < max_size && \
 			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
 			buf[n] = (char) c; \
@@ -1410,7 +1396,7 @@ YY_DECL
 #line 157 "program_lexer.l"
 
 
-#line 1414 "lex.yy.c"
+#line 1400 "lex.yy.c"
 
     yylval = yylval_param;
 
@@ -2212,7 +2198,7 @@ case 142:
 YY_RULE_SETUP
 #line 326 "program_lexer.l"
 {
-   yylval->real = _mesa_strtod(yytext, NULL);
+   yylval->real = (float) _mesa_strtod(yytext, NULL);
    return REAL;
 }
 	YY_BREAK
@@ -2224,7 +2210,7 @@ YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
 #line 330 "program_lexer.l"
 {
-   yylval->real = _mesa_strtod(yytext, NULL);
+   yylval->real = (float) _mesa_strtod(yytext, NULL);
    return REAL;
 }
 	YY_BREAK
@@ -2232,7 +2218,7 @@ case 144:
 YY_RULE_SETUP
 #line 334 "program_lexer.l"
 {
-   yylval->real = _mesa_strtod(yytext, NULL);
+   yylval->real = (float) _mesa_strtod(yytext, NULL);
    return REAL;
 }
 	YY_BREAK
@@ -2240,7 +2226,7 @@ case 145:
 YY_RULE_SETUP
 #line 338 "program_lexer.l"
 {
-   yylval->real = _mesa_strtod(yytext, NULL);
+   yylval->real = (float) _mesa_strtod(yytext, NULL);
    return REAL;
 }
 	YY_BREAK
@@ -2474,7 +2460,7 @@ YY_RULE_SETUP
 #line 481 "program_lexer.l"
 ECHO;
 	YY_BREAK
-#line 2478 "lex.yy.c"
+#line 2464 "lex.yy.c"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -3242,8 +3228,8 @@ YY_BUFFER_STATE yy_scan_string (yyconst char * yystr , yyscan_t yyscanner)
 
 /** Setup the input buffer state to scan the given bytes. The next call to yylex() will
  * scan from a @e copy of @a bytes.
- * @param yybytes the byte buffer to scan
- * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
+ * @param bytes the byte buffer to scan
+ * @param len the number of bytes in the buffer pointed to by @a bytes.
  * @param yyscanner The scanner object.
  * @return the newly allocated buffer state object.
  */
diff --git a/src/mesa/shader/program_lexer.l b/src/mesa/shader/program_lexer.l
index 83bc5089d9..b00765793d 100644
--- a/src/mesa/shader/program_lexer.l
+++ b/src/mesa/shader/program_lexer.l
@@ -324,19 +324,19 @@ ARRAYSHADOW2D             { return_token_or_IDENTIFIER(require_ARB_fp && require
    return INTEGER;
 }
 {num}?{frac}{exp}?        {
-   yylval->real = _mesa_strtod(yytext, NULL);
+   yylval->real = (float) _mesa_strtod(yytext, NULL);
    return REAL;
 }
 {num}"."/[^.]             {
-   yylval->real = _mesa_strtod(yytext, NULL);
+   yylval->real = (float) _mesa_strtod(yytext, NULL);
    return REAL;
 }
 {num}{exp}                {
-   yylval->real = _mesa_strtod(yytext, NULL);
+   yylval->real = (float) _mesa_strtod(yytext, NULL);
    return REAL;
 }
 {num}"."{exp}             {
-   yylval->real = _mesa_strtod(yytext, NULL);
+   yylval->real = (float) _mesa_strtod(yytext, NULL);
    return REAL;
 }
 
-- 
cgit v1.2.3


From d35ecca5ee231c072687578642e0c22c6c0590b1 Mon Sep 17 00:00:00 2001
From: Keith Whitwell <keithw@vmware.com>
Date: Thu, 11 Mar 2010 16:10:25 +0000
Subject: gallium: remove pipe_context member from pipe_transfer

There was very little use for this beyond permitting the
pipe_context::tex_transfer_destroy() function to omit the pipe_context
argument.

This change adds the pipe_context argument into tex_transfer_destroy()
so that it looks like other pipe_context functions, and removes the
pipe_context pointer from pipe_transfer.
---
 src/gallium/auxiliary/draw/draw_pipe_aaline.c    |  2 +-
 src/gallium/auxiliary/draw/draw_pipe_pstipple.c  |  2 +-
 src/gallium/auxiliary/util/u_debug.c             | 11 +++++-----
 src/gallium/auxiliary/util/u_debug.h             |  3 ++-
 src/gallium/auxiliary/util/u_gen_mipmap.c        | 12 +++++------
 src/gallium/auxiliary/util/u_inlines.h           | 14 ++++++-------
 src/gallium/auxiliary/util/u_rect.c              |  6 +++---
 src/gallium/auxiliary/util/u_tile.c              | 26 +++++++++++++-----------
 src/gallium/auxiliary/util/u_tile.h              | 18 ++++++++++------
 src/gallium/auxiliary/vl/vl_mpeg12_mc_renderer.c |  2 +-
 src/gallium/drivers/i915/i915_texture.c          |  4 ++--
 src/gallium/drivers/i965/brw_screen.h            |  1 +
 src/gallium/drivers/i965/brw_screen_texture.c    |  4 ++--
 src/gallium/drivers/identity/id_context.c        |  6 ++++--
 src/gallium/drivers/identity/id_objects.c        | 12 +++++++----
 src/gallium/drivers/identity/id_objects.h        |  4 +++-
 src/gallium/drivers/llvmpipe/lp_scene.c          |  4 ++--
 src/gallium/drivers/llvmpipe/lp_texture.c        |  3 ++-
 src/gallium/drivers/nv30/nv30_transfer.c         |  5 +++--
 src/gallium/drivers/nv40/nv40_transfer.c         |  4 ++--
 src/gallium/drivers/nv50/nv50_transfer.c         |  4 ++--
 src/gallium/drivers/r300/r300_screen.c           |  2 --
 src/gallium/drivers/r300/r300_transfer.c         |  3 ++-
 src/gallium/drivers/softpipe/sp_tex_tile_cache.c | 11 +++++-----
 src/gallium/drivers/softpipe/sp_texture.c        |  4 ++--
 src/gallium/drivers/softpipe/sp_tile_cache.c     | 19 +++++++++--------
 src/gallium/drivers/svga/svga_screen_texture.c   |  5 +++--
 src/gallium/drivers/trace/tr_context.c           |  9 ++++----
 src/gallium/drivers/trace/tr_rbug.c              |  2 +-
 src/gallium/drivers/trace/tr_texture.c           | 16 ++++++++-------
 src/gallium/drivers/trace/tr_texture.h           |  4 +++-
 src/gallium/include/pipe/p_context.h             |  3 ++-
 src/gallium/include/pipe/p_state.h               |  2 --
 src/gallium/state_trackers/vega/api_filters.c    |  2 +-
 src/gallium/state_trackers/vega/api_images.c     |  4 ++--
 src/gallium/state_trackers/vega/image.c          |  8 ++++----
 src/gallium/state_trackers/vega/paint.c          |  2 +-
 src/mesa/state_tracker/st_atom_pixeltransfer.c   |  2 +-
 src/mesa/state_tracker/st_cb_accum.c             | 14 ++++++-------
 src/mesa/state_tracker/st_cb_bitmap.c            |  8 ++++----
 src/mesa/state_tracker/st_cb_drawpixels.c        | 18 ++++++++--------
 src/mesa/state_tracker/st_cb_readpixels.c        | 22 ++++++++++----------
 src/mesa/state_tracker/st_cb_texture.c           | 12 +++++------
 src/mesa/state_tracker/st_gen_mipmap.c           |  4 ++--
 src/mesa/state_tracker/st_texture.c              |  4 ++--
 45 files changed, 177 insertions(+), 150 deletions(-)

(limited to 'src/mesa')

diff --git a/src/gallium/auxiliary/draw/draw_pipe_aaline.c b/src/gallium/auxiliary/draw/draw_pipe_aaline.c
index 2cb76b25ae..1c07ab1365 100644
--- a/src/gallium/auxiliary/draw/draw_pipe_aaline.c
+++ b/src/gallium/auxiliary/draw/draw_pipe_aaline.c
@@ -449,7 +449,7 @@ aaline_create_texture(struct aaline_stage *aaline)
 
       /* unmap */
       pipe->transfer_unmap(pipe, transfer);
-      pipe->tex_transfer_destroy(transfer);
+      pipe->tex_transfer_destroy(pipe, transfer);
    }
    return TRUE;
 }
diff --git a/src/gallium/auxiliary/draw/draw_pipe_pstipple.c b/src/gallium/auxiliary/draw/draw_pipe_pstipple.c
index 479777e807..38c22bf4e9 100644
--- a/src/gallium/auxiliary/draw/draw_pipe_pstipple.c
+++ b/src/gallium/auxiliary/draw/draw_pipe_pstipple.c
@@ -411,7 +411,7 @@ pstip_update_texture(struct pstip_stage *pstip)
 
    /* unmap */
    pipe->transfer_unmap(pipe, transfer);
-   pipe->tex_transfer_destroy(transfer);
+   pipe->tex_transfer_destroy(pipe, transfer);
 }
 
 
diff --git a/src/gallium/auxiliary/util/u_debug.c b/src/gallium/auxiliary/util/u_debug.c
index de775a2dbc..e997cfa8a3 100644
--- a/src/gallium/auxiliary/util/u_debug.c
+++ b/src/gallium/auxiliary/util/u_debug.c
@@ -459,7 +459,7 @@ void debug_dump_surface(struct pipe_context *pipe,
    
    pipe->transfer_unmap(pipe, transfer);
 error:
-   pipe->tex_transfer_destroy(transfer);
+   pipe->tex_transfer_destroy(pipe, transfer);
 }
 
 
@@ -530,14 +530,15 @@ debug_dump_surface_bmp(struct pipe_context *pipe,
 				     PIPE_TRANSFER_READ, 0, 0, surface->width,
 				     surface->height);
 
-   debug_dump_transfer_bmp(filename, transfer);
+   debug_dump_transfer_bmp(pipe, filename, transfer);
 
-   pipe->tex_transfer_destroy(transfer);
+   pipe->tex_transfer_destroy(pipe, transfer);
 #endif
 }
 
 void
-debug_dump_transfer_bmp(const char *filename,
+debug_dump_transfer_bmp(struct pipe_context *pipe,
+                        const char *filename,
                         struct pipe_transfer *transfer)
 {
 #ifndef PIPE_SUBSYSTEM_WINDOWS_MINIPORT
@@ -550,7 +551,7 @@ debug_dump_transfer_bmp(const char *filename,
    if(!rgba)
       goto error1;
 
-   pipe_get_tile_rgba(transfer, 0, 0,
+   pipe_get_tile_rgba(pipe, transfer, 0, 0,
                       transfer->width, transfer->height,
                       rgba);
 
diff --git a/src/gallium/auxiliary/util/u_debug.h b/src/gallium/auxiliary/util/u_debug.h
index a383837743..98addeb372 100644
--- a/src/gallium/auxiliary/util/u_debug.h
+++ b/src/gallium/auxiliary/util/u_debug.h
@@ -331,7 +331,8 @@ void debug_dump_texture(struct pipe_context *pipe,
 void debug_dump_surface_bmp(struct pipe_context *pipe,
                             const char *filename,
                             struct pipe_surface *surface);
-void debug_dump_transfer_bmp(const char *filename,
+void debug_dump_transfer_bmp(struct pipe_context *pipe,
+                             const char *filename,
                              struct pipe_transfer *transfer);
 void debug_dump_float_rgba_bmp(const char *filename,
                                unsigned width, unsigned height,
diff --git a/src/gallium/auxiliary/util/u_gen_mipmap.c b/src/gallium/auxiliary/util/u_gen_mipmap.c
index 46fbde3f4a..5c51b53d7b 100644
--- a/src/gallium/auxiliary/util/u_gen_mipmap.c
+++ b/src/gallium/auxiliary/util/u_gen_mipmap.c
@@ -1146,8 +1146,8 @@ make_1d_mipmap(struct gen_mipmap_state *ctx,
       pipe->transfer_unmap(pipe, srcTrans);
       pipe->transfer_unmap(pipe, dstTrans);
 
-      pipe->tex_transfer_destroy(srcTrans);
-      pipe->tex_transfer_destroy(dstTrans);
+      pipe->tex_transfer_destroy(pipe, srcTrans);
+      pipe->tex_transfer_destroy(pipe, dstTrans);
    }
 }
 
@@ -1190,8 +1190,8 @@ make_2d_mipmap(struct gen_mipmap_state *ctx,
       pipe->transfer_unmap(pipe, srcTrans);
       pipe->transfer_unmap(pipe, dstTrans);
 
-      pipe->tex_transfer_destroy(srcTrans);
-      pipe->tex_transfer_destroy(dstTrans);
+      pipe->tex_transfer_destroy(pipe, srcTrans);
+      pipe->tex_transfer_destroy(pipe, dstTrans);
    }
 }
 
@@ -1235,8 +1235,8 @@ make_3d_mipmap(struct gen_mipmap_state *ctx,
       pipe->transfer_unmap(pipe, srcTrans);
       pipe->transfer_unmap(pipe, dstTrans);
 
-      pipe->tex_transfer_destroy(srcTrans);
-      pipe->tex_transfer_destroy(dstTrans);
+      pipe->tex_transfer_destroy(pipe, srcTrans);
+      pipe->tex_transfer_destroy(pipe, dstTrans);
    }
 #else
    (void) reduce_3d;
diff --git a/src/gallium/auxiliary/util/u_inlines.h b/src/gallium/auxiliary/util/u_inlines.h
index ada31b8182..e7255e3baa 100644
--- a/src/gallium/auxiliary/util/u_inlines.h
+++ b/src/gallium/auxiliary/util/u_inlines.h
@@ -264,24 +264,24 @@ pipe_buffer_read(struct pipe_screen *screen,
 }
 
 static INLINE void *
-pipe_transfer_map( struct pipe_transfer *transf )
+pipe_transfer_map( struct pipe_context *context,
+                   struct pipe_transfer *transf )
 {
-   struct pipe_context *context = transf->pipe;
    return context->transfer_map(context, transf);
 }
 
 static INLINE void
-pipe_transfer_unmap( struct pipe_transfer *transf )
+pipe_transfer_unmap( struct pipe_context *context,
+                     struct pipe_transfer *transf )
 {
-   struct pipe_context *context = transf->pipe;
    context->transfer_unmap(context, transf);
 }
 
 static INLINE void
-pipe_transfer_destroy( struct pipe_transfer *transf )
+pipe_transfer_destroy( struct pipe_context *context,
+                       struct pipe_transfer *transfer )
 {
-   struct pipe_context *context = transf->pipe;
-   context->tex_transfer_destroy(transf);
+   context->tex_transfer_destroy(context, transfer);
 }
 
 static INLINE unsigned
diff --git a/src/gallium/auxiliary/util/u_rect.c b/src/gallium/auxiliary/util/u_rect.c
index 0b8405d01f..e73797f1b7 100644
--- a/src/gallium/auxiliary/util/u_rect.c
+++ b/src/gallium/auxiliary/util/u_rect.c
@@ -223,8 +223,8 @@ util_surface_copy(struct pipe_context *pipe,
    pipe->transfer_unmap(pipe, src_trans);
    pipe->transfer_unmap(pipe, dst_trans);
 
-   pipe->tex_transfer_destroy(src_trans);
-   pipe->tex_transfer_destroy(dst_trans);
+   pipe->tex_transfer_destroy(pipe, src_trans);
+   pipe->tex_transfer_destroy(pipe, dst_trans);
 }
 
 
@@ -301,5 +301,5 @@ util_surface_fill(struct pipe_context *pipe,
    }
 
    pipe->transfer_unmap(pipe, dst_trans);
-   pipe->tex_transfer_destroy(dst_trans);
+   pipe->tex_transfer_destroy(pipe, dst_trans);
 }
diff --git a/src/gallium/auxiliary/util/u_tile.c b/src/gallium/auxiliary/util/u_tile.c
index 70a6d97385..e445895efc 100644
--- a/src/gallium/auxiliary/util/u_tile.c
+++ b/src/gallium/auxiliary/util/u_tile.c
@@ -45,11 +45,11 @@
  * Move raw block of pixels from transfer object to user memory.
  */
 void
-pipe_get_tile_raw(struct pipe_transfer *pt,
+pipe_get_tile_raw(struct pipe_context *pipe,
+                  struct pipe_transfer *pt,
                   uint x, uint y, uint w, uint h,
                   void *dst, int dst_stride)
 {
-   struct pipe_context *pipe = pt->pipe;
    const void *src;
 
    if (dst_stride == 0)
@@ -73,11 +73,11 @@ pipe_get_tile_raw(struct pipe_transfer *pt,
  * Move raw block of pixels from user memory to transfer object.
  */
 void
-pipe_put_tile_raw(struct pipe_transfer *pt,
+pipe_put_tile_raw(struct pipe_context *pipe,
+                  struct pipe_transfer *pt,
                   uint x, uint y, uint w, uint h,
                   const void *src, int src_stride)
 {
-   struct pipe_context *pipe = pt->pipe;
    void *dst;
    enum pipe_format format = pt->texture->format;
 
@@ -1246,7 +1246,8 @@ pipe_tile_raw_to_rgba(enum pipe_format format,
 
 
 void
-pipe_get_tile_rgba(struct pipe_transfer *pt,
+pipe_get_tile_rgba(struct pipe_context *pipe,
+                   struct pipe_transfer *pt,
                    uint x, uint y, uint w, uint h,
                    float *p)
 {
@@ -1265,7 +1266,7 @@ pipe_get_tile_rgba(struct pipe_transfer *pt,
    if(format == PIPE_FORMAT_UYVY || format == PIPE_FORMAT_YUYV)
       assert((x & 1) == 0);
 
-   pipe_get_tile_raw(pt, x, y, w, h, packed, 0);
+   pipe_get_tile_raw(pipe, pt, x, y, w, h, packed, 0);
 
    pipe_tile_raw_to_rgba(format, packed, w, h, p, dst_stride);
 
@@ -1274,7 +1275,8 @@ pipe_get_tile_rgba(struct pipe_transfer *pt,
 
 
 void
-pipe_put_tile_rgba(struct pipe_transfer *pt,
+pipe_put_tile_rgba(struct pipe_context *pipe,
+                   struct pipe_transfer *pt,
                    uint x, uint y, uint w, uint h,
                    const float *p)
 {
@@ -1363,7 +1365,7 @@ pipe_put_tile_rgba(struct pipe_transfer *pt,
                            0, 0, w, h);
    }
 
-   pipe_put_tile_raw(pt, x, y, w, h, packed, 0);
+   pipe_put_tile_raw(pipe, pt, x, y, w, h, packed, 0);
 
    FREE(packed);
 }
@@ -1373,11 +1375,11 @@ pipe_put_tile_rgba(struct pipe_transfer *pt,
  * Get a block of Z values, converted to 32-bit range.
  */
 void
-pipe_get_tile_z(struct pipe_transfer *pt,
+pipe_get_tile_z(struct pipe_context *pipe,
+                struct pipe_transfer *pt,
                 uint x, uint y, uint w, uint h,
                 uint *z)
 {
-   struct pipe_context *pipe = pt->pipe;
    const uint dstStride = w;
    ubyte *map;
    uint *pDest = z;
@@ -1458,11 +1460,11 @@ pipe_get_tile_z(struct pipe_transfer *pt,
 
 
 void
-pipe_put_tile_z(struct pipe_transfer *pt,
+pipe_put_tile_z(struct pipe_context *pipe,
+                struct pipe_transfer *pt,
                 uint x, uint y, uint w, uint h,
                 const uint *zSrc)
 {
-   struct pipe_context *pipe = pt->pipe;
    const uint srcStride = w;
    const uint *ptrc = zSrc;
    ubyte *map;
diff --git a/src/gallium/auxiliary/util/u_tile.h b/src/gallium/auxiliary/util/u_tile.h
index 1453af38b8..8329087cfa 100644
--- a/src/gallium/auxiliary/util/u_tile.h
+++ b/src/gallium/auxiliary/util/u_tile.h
@@ -56,34 +56,40 @@ extern "C" {
 #endif
 
 void
-pipe_get_tile_raw(struct pipe_transfer *pt,
+pipe_get_tile_raw(struct pipe_context *pipe,
+                  struct pipe_transfer *pt,
                   uint x, uint y, uint w, uint h,
                   void *p, int dst_stride);
 
 void
-pipe_put_tile_raw(struct pipe_transfer *pt,
+pipe_put_tile_raw(struct pipe_context *pipe,
+                  struct pipe_transfer *pt,
                   uint x, uint y, uint w, uint h,
                   const void *p, int src_stride);
 
 
 void
-pipe_get_tile_rgba(struct pipe_transfer *pt,
+pipe_get_tile_rgba(struct pipe_context *pipe,
+                   struct pipe_transfer *pt,
                    uint x, uint y, uint w, uint h,
                    float *p);
 
 void
-pipe_put_tile_rgba(struct pipe_transfer *pt,
+pipe_put_tile_rgba(struct pipe_context *pipe,
+                   struct pipe_transfer *pt,
                    uint x, uint y, uint w, uint h,
                    const float *p);
 
 
 void
-pipe_get_tile_z(struct pipe_transfer *pt,
+pipe_get_tile_z(struct pipe_context *pipe,
+                struct pipe_transfer *pt,
                 uint x, uint y, uint w, uint h,
                 uint *z);
 
 void
-pipe_put_tile_z(struct pipe_transfer *pt,
+pipe_put_tile_z(struct pipe_context *pipe,
+                struct pipe_transfer *pt,
                 uint x, uint y, uint w, uint h,
                 const uint *z);
 
diff --git a/src/gallium/auxiliary/vl/vl_mpeg12_mc_renderer.c b/src/gallium/auxiliary/vl/vl_mpeg12_mc_renderer.c
index dcc0014479..beb4722901 100644
--- a/src/gallium/auxiliary/vl/vl_mpeg12_mc_renderer.c
+++ b/src/gallium/auxiliary/vl/vl_mpeg12_mc_renderer.c
@@ -700,7 +700,7 @@ xfer_buffers_unmap(struct vl_mpeg12_mc_renderer *r)
 
    for (i = 0; i < 3; ++i) {
       r->pipe->transfer_unmap(r->pipe, r->tex_transfer[i]);
-      r->pipe->tex_transfer_destroy(r->tex_transfer[i]);
+      r->pipe->tex_transfer_destroy(r->pipe, r->tex_transfer[i]);
    }
 }
 
diff --git a/src/gallium/drivers/i915/i915_texture.c b/src/gallium/drivers/i915/i915_texture.c
index 3435f7797f..b252fb5330 100644
--- a/src/gallium/drivers/i915/i915_texture.c
+++ b/src/gallium/drivers/i915/i915_texture.c
@@ -825,7 +825,6 @@ i915_get_tex_transfer(struct pipe_context *pipe,
    trans = CALLOC_STRUCT(i915_transfer);
    if (trans) {
       pipe_texture_reference(&trans->base.texture, texture);
-      trans->base.pipe = pipe;
       trans->base.x = x;
       trans->base.y = y;
       trans->base.width = w;
@@ -869,7 +868,8 @@ i915_transfer_unmap(struct pipe_context *pipe,
 }
 
 static void
-i915_tex_transfer_destroy(struct pipe_transfer *trans)
+i915_tex_transfer_destroy(struct pipe_context *pipe,
+                          struct pipe_transfer *trans)
 {
    pipe_texture_reference(&trans->texture, NULL);
    FREE(trans);
diff --git a/src/gallium/drivers/i965/brw_screen.h b/src/gallium/drivers/i965/brw_screen.h
index 23e052d0b9..e3a7c64d48 100644
--- a/src/gallium/drivers/i965/brw_screen.h
+++ b/src/gallium/drivers/i965/brw_screen.h
@@ -202,4 +202,5 @@ boolean brw_is_buffer_referenced_by_bo( struct brw_screen *brw_screen,
                                         struct brw_winsys_buffer *bo );
 
 
+
 #endif /* BRW_SCREEN_H */
diff --git a/src/gallium/drivers/i965/brw_screen_texture.c b/src/gallium/drivers/i965/brw_screen_texture.c
index 52bf9b3c1c..cadcb7cee2 100644
--- a/src/gallium/drivers/i965/brw_screen_texture.c
+++ b/src/gallium/drivers/i965/brw_screen_texture.c
@@ -504,7 +504,6 @@ brw_get_tex_transfer(struct pipe_context *pipe,
    trans = CALLOC_STRUCT(brw_transfer);
    if (trans) {
       pipe_texture_reference(&trans->base.texture, texture);
-      trans->base.pipe = pipe;
       trans->base.x = x;
       trans->base.y = y;
       trans->base.width = w;
@@ -554,7 +553,8 @@ brw_transfer_unmap(struct pipe_context *pipe,
 }
 
 static void
-brw_tex_transfer_destroy(struct pipe_transfer *trans)
+brw_tex_transfer_destroy(struct pipe_context *pipe,
+                         struct pipe_transfer *trans)
 {
    pipe_texture_reference(&trans->texture, NULL);
    FREE(trans);
diff --git a/src/gallium/drivers/identity/id_context.c b/src/gallium/drivers/identity/id_context.c
index 5e371c47c8..26770d6b1e 100644
--- a/src/gallium/drivers/identity/id_context.c
+++ b/src/gallium/drivers/identity/id_context.c
@@ -748,9 +748,11 @@ identity_context_get_tex_transfer(struct pipe_context *_context,
 }
 
 static void
-identity_context_tex_transfer_destroy(struct pipe_transfer *_transfer)
+identity_context_tex_transfer_destroy(struct pipe_context *_pipe,
+                                      struct pipe_transfer *_transfer)
 {
-   identity_transfer_destroy(identity_transfer(_transfer));
+   identity_transfer_destroy(identity_context(_pipe),
+                             identity_transfer(_transfer));
 }
 
 static void *
diff --git a/src/gallium/drivers/identity/id_objects.c b/src/gallium/drivers/identity/id_objects.c
index 91831404b8..d37fb0042e 100644
--- a/src/gallium/drivers/identity/id_objects.c
+++ b/src/gallium/drivers/identity/id_objects.c
@@ -30,6 +30,7 @@
 
 #include "id_screen.h"
 #include "id_objects.h"
+#include "id_context.h"
 
 struct pipe_buffer *
 identity_buffer_create(struct identity_screen *id_screen,
@@ -160,22 +161,25 @@ identity_transfer_create(struct identity_context *id_context,
    memcpy(&id_transfer->base, transfer, sizeof(struct pipe_transfer));
 
    id_transfer->base.texture = NULL;
-   pipe_texture_reference(&id_transfer->base.texture, &id_texture->base);
    id_transfer->transfer = transfer;
+
+   pipe_texture_reference(&id_transfer->base.texture, &id_texture->base);
    assert(id_transfer->base.texture == &id_texture->base);
 
    return &id_transfer->base;
 
 error:
-   transfer->pipe->tex_transfer_destroy(transfer);
+   id_context->pipe->tex_transfer_destroy(id_context->pipe, transfer);
    return NULL;
 }
 
 void
-identity_transfer_destroy(struct identity_transfer *id_transfer)
+identity_transfer_destroy(struct identity_context *id_context,
+                          struct identity_transfer *id_transfer)
 {
    pipe_texture_reference(&id_transfer->base.texture, NULL);
-   id_transfer->transfer->pipe->tex_transfer_destroy(id_transfer->transfer);
+   id_context->pipe->tex_transfer_destroy(id_context->pipe,
+                                          id_transfer->transfer);
    FREE(id_transfer);
 }
 
diff --git a/src/gallium/drivers/identity/id_objects.h b/src/gallium/drivers/identity/id_objects.h
index 3c4e6d3f8c..7333ecfb7f 100644
--- a/src/gallium/drivers/identity/id_objects.h
+++ b/src/gallium/drivers/identity/id_objects.h
@@ -65,6 +65,7 @@ struct identity_transfer
 {
    struct pipe_transfer base;
 
+   struct pipe_context *pipe;
    struct pipe_transfer *transfer;
 };
 
@@ -183,7 +184,8 @@ identity_transfer_create(struct identity_context *id_context,
                          struct pipe_transfer *transfer);
 
 void
-identity_transfer_destroy(struct identity_transfer *id_transfer);
+identity_transfer_destroy(struct identity_context *id_context,
+                          struct identity_transfer *id_transfer);
 
 struct pipe_video_surface *
 identity_video_surface_create(struct identity_screen *id_screen,
diff --git a/src/gallium/drivers/llvmpipe/lp_scene.c b/src/gallium/drivers/llvmpipe/lp_scene.c
index bfe53d4106..505cb21503 100644
--- a/src/gallium/drivers/llvmpipe/lp_scene.c
+++ b/src/gallium/drivers/llvmpipe/lp_scene.c
@@ -477,7 +477,7 @@ lp_scene_unmap_buffers( struct lp_scene *scene )
 	 pipe->transfer_unmap(pipe, scene->cbuf_transfer[i]);
 
       if (scene->cbuf_transfer[i])
-	 pipe->tex_transfer_destroy(scene->cbuf_transfer[i]);
+	 pipe->tex_transfer_destroy(pipe, scene->cbuf_transfer[i]);
 
       scene->cbuf_transfer[i] = NULL;
       scene->cbuf_map[i] = NULL;
@@ -487,7 +487,7 @@ lp_scene_unmap_buffers( struct lp_scene *scene )
       pipe->transfer_unmap(pipe, scene->zsbuf_transfer);
 
    if (scene->zsbuf_transfer)
-      pipe->tex_transfer_destroy(scene->zsbuf_transfer);
+      pipe->tex_transfer_destroy(pipe, scene->zsbuf_transfer);
 
    scene->zsbuf_transfer = NULL;
    scene->zsbuf_map = NULL;
diff --git a/src/gallium/drivers/llvmpipe/lp_texture.c b/src/gallium/drivers/llvmpipe/lp_texture.c
index 65f7994e0e..f2c6dbd088 100644
--- a/src/gallium/drivers/llvmpipe/lp_texture.c
+++ b/src/gallium/drivers/llvmpipe/lp_texture.c
@@ -294,7 +294,8 @@ llvmpipe_get_tex_transfer(struct pipe_context *pipe,
 
 
 static void 
-llvmpipe_tex_transfer_destroy(struct pipe_transfer *transfer)
+llvmpipe_tex_transfer_destroy(struct pipe_context *pipe,
+                              struct pipe_transfer *transfer)
 {
    /* Effectively do the texture_update work here - if texture images
     * needed post-processing to put them into hardware layout, this is
diff --git a/src/gallium/drivers/nv30/nv30_transfer.c b/src/gallium/drivers/nv30/nv30_transfer.c
index 1318c60ae4..cfc109bb74 100644
--- a/src/gallium/drivers/nv30/nv30_transfer.c
+++ b/src/gallium/drivers/nv30/nv30_transfer.c
@@ -118,12 +118,13 @@ nv30_transfer_new(struct pipe_context *pcontext, struct pipe_texture *pt,
 }
 
 static void
-nv30_transfer_del(struct pipe_transfer *ptx)
+nv30_transfer_del(struct pipe_context *pcontext,
+                  struct pipe_transfer *ptx)
 {
 	struct nv30_transfer *tx = (struct nv30_transfer *)ptx;
 
 	if (!tx->direct && (ptx->usage & PIPE_TRANSFER_WRITE)) {
-		struct pipe_screen *pscreen = ptx->texture->screen;
+		struct pipe_screen *pscreen = pcontext->screen;
 		struct nv30_screen *nvscreen = nv30_screen(pscreen);
 		struct pipe_surface *dst;
 
diff --git a/src/gallium/drivers/nv40/nv40_transfer.c b/src/gallium/drivers/nv40/nv40_transfer.c
index 2ca9b94388..c552a68113 100644
--- a/src/gallium/drivers/nv40/nv40_transfer.c
+++ b/src/gallium/drivers/nv40/nv40_transfer.c
@@ -118,12 +118,12 @@ nv40_transfer_new(struct pipe_context *pcontext, struct pipe_texture *pt,
 }
 
 static void
-nv40_transfer_del(struct pipe_transfer *ptx)
+nv40_transfer_del(struct pipe_context *pcontext, struct pipe_transfer *ptx)
 {
 	struct nv40_transfer *tx = (struct nv40_transfer *)ptx;
 
 	if (!tx->direct && (ptx->usage & PIPE_TRANSFER_WRITE)) {
-		struct pipe_screen *pscreen = ptx->texture->screen;
+		struct pipe_screen *pscreen = pcontext->screen;
 		struct nv40_screen *nvscreen = nv40_screen(pscreen);
 		struct pipe_surface *dst;
 
diff --git a/src/gallium/drivers/nv50/nv50_transfer.c b/src/gallium/drivers/nv50/nv50_transfer.c
index b7f2ac1b1c..9eb223eca6 100644
--- a/src/gallium/drivers/nv50/nv50_transfer.c
+++ b/src/gallium/drivers/nv50/nv50_transfer.c
@@ -187,7 +187,7 @@ nv50_transfer_new(struct pipe_context *pcontext, struct pipe_texture *pt,
 }
 
 static void
-nv50_transfer_del(struct pipe_transfer *ptx)
+nv50_transfer_del(struct pipe_context *pcontext, struct pipe_transfer *ptx)
 {
 	struct nv50_transfer *tx = (struct nv50_transfer *)ptx;
 	struct nv50_miptree *mt = nv50_miptree(ptx->texture);
@@ -197,7 +197,7 @@ nv50_transfer_del(struct pipe_transfer *ptx)
 	unsigned ny = util_format_get_nblocksy(pt->format, tx->base.height);
 
 	if (ptx->usage & PIPE_TRANSFER_WRITE) {
-		struct pipe_screen *pscreen = pt->screen;
+		struct pipe_screen *pscreen = pcontext->screen;
 
 		nv50_transfer_rect_m2mf(pscreen, tx->bo, 0,
 					tx->base.stride, tx->bo->tile_mode,
diff --git a/src/gallium/drivers/r300/r300_screen.c b/src/gallium/drivers/r300/r300_screen.c
index 69c0ab496c..64d1909a38 100644
--- a/src/gallium/drivers/r300/r300_screen.c
+++ b/src/gallium/drivers/r300/r300_screen.c
@@ -251,8 +251,6 @@ static boolean r300_is_format_supported(struct pipe_screen* screen,
     return retval == usage;
 }
 
-
-
 static void r300_destroy_screen(struct pipe_screen* pscreen)
 {
     struct r300_screen* r300screen = r300_screen(pscreen);
diff --git a/src/gallium/drivers/r300/r300_transfer.c b/src/gallium/drivers/r300/r300_transfer.c
index 7dd707ff8e..495e3dee76 100644
--- a/src/gallium/drivers/r300/r300_transfer.c
+++ b/src/gallium/drivers/r300/r300_transfer.c
@@ -205,7 +205,8 @@ r300_get_tex_transfer(struct pipe_context *ctx,
     return &trans->transfer;
 }
 
-static void r300_tex_transfer_destroy(struct pipe_transfer *trans)
+static void r300_tex_transfer_destroy(struct pipe_context *ctx,
+                                      struct pipe_transfer *trans)
 {
     struct r300_transfer *r300transfer = r300_transfer(trans);
 
diff --git a/src/gallium/drivers/softpipe/sp_tex_tile_cache.c b/src/gallium/drivers/softpipe/sp_tex_tile_cache.c
index a9f5b51a41..e3a5e37ce4 100644
--- a/src/gallium/drivers/softpipe/sp_tex_tile_cache.c
+++ b/src/gallium/drivers/softpipe/sp_tex_tile_cache.c
@@ -69,10 +69,10 @@ sp_destroy_tex_tile_cache(struct softpipe_tex_tile_cache *tc)
       /*assert(tc->entries[pos].x < 0);*/
    }
    if (tc->transfer) {
-      tc->pipe->tex_transfer_destroy(tc->transfer);
+      tc->pipe->tex_transfer_destroy(tc->pipe, tc->transfer);
    }
    if (tc->tex_trans) {
-      tc->pipe->tex_transfer_destroy(tc->tex_trans);
+      tc->pipe->tex_transfer_destroy(tc->pipe, tc->tex_trans);
    }
 
    FREE( tc );
@@ -135,7 +135,7 @@ sp_tex_tile_cache_set_texture(struct softpipe_tex_tile_cache *tc,
             tc->tex_trans_map = NULL;
          }
 
-         tc->pipe->tex_transfer_destroy(tc->tex_trans);
+         tc->pipe->tex_transfer_destroy(tc->pipe, tc->tex_trans);
          tc->tex_trans = NULL;
       }
 
@@ -230,7 +230,7 @@ sp_find_cached_tile_tex(struct softpipe_tex_tile_cache *tc,
                tc->tex_trans_map = NULL;
             }
 
-            tc->pipe->tex_transfer_destroy(tc->tex_trans);
+            tc->pipe->tex_transfer_destroy(tc->pipe, tc->tex_trans);
             tc->tex_trans = NULL;
          }
 
@@ -251,7 +251,8 @@ sp_find_cached_tile_tex(struct softpipe_tex_tile_cache *tc,
       }
 
       /* get tile from the transfer (view into texture) */
-      pipe_get_tile_rgba(tc->tex_trans,
+      pipe_get_tile_rgba(tc->pipe,
+                         tc->tex_trans,
                          addr.bits.x * TILE_SIZE, 
                          addr.bits.y * TILE_SIZE,
                          TILE_SIZE, TILE_SIZE,
diff --git a/src/gallium/drivers/softpipe/sp_texture.c b/src/gallium/drivers/softpipe/sp_texture.c
index adae48c474..da8529c154 100644
--- a/src/gallium/drivers/softpipe/sp_texture.c
+++ b/src/gallium/drivers/softpipe/sp_texture.c
@@ -277,7 +277,6 @@ softpipe_get_tex_transfer(struct pipe_context *pipe,
       struct pipe_transfer *pt = &spt->base;
       int nblocksy = util_format_get_nblocksy(texture->format, u_minify(texture->height0, level));
       pipe_texture_reference(&pt->texture, texture);
-      pt->pipe = pipe;
       pt->x = x;
       pt->y = y;
       pt->width = w;
@@ -311,7 +310,8 @@ softpipe_get_tex_transfer(struct pipe_context *pipe,
  * softpipe_get_tex_transfer().
  */
 static void 
-softpipe_tex_transfer_destroy(struct pipe_transfer *transfer)
+softpipe_tex_transfer_destroy(struct pipe_context *pipe,
+                              struct pipe_transfer *transfer)
 {
    /* Effectively do the texture_update work here - if texture images
     * needed post-processing to put them into hardware layout, this is
diff --git a/src/gallium/drivers/softpipe/sp_tile_cache.c b/src/gallium/drivers/softpipe/sp_tile_cache.c
index d779816790..1c3c2667d7 100644
--- a/src/gallium/drivers/softpipe/sp_tile_cache.c
+++ b/src/gallium/drivers/softpipe/sp_tile_cache.c
@@ -121,7 +121,7 @@ sp_destroy_tile_cache(struct softpipe_tile_cache *tc)
       /*assert(tc->entries[pos].x < 0);*/
    }
    if (tc->transfer) {
-      tc->pipe->tex_transfer_destroy(tc->transfer);
+      tc->pipe->tex_transfer_destroy(tc->pipe, tc->transfer);
    }
 
    FREE( tc );
@@ -146,7 +146,7 @@ sp_tile_cache_set_surface(struct softpipe_tile_cache *tc,
          tc->transfer_map = NULL;
       }
 
-      pipe->tex_transfer_destroy(tc->transfer);
+      pipe->tex_transfer_destroy(pipe, tc->transfer);
       tc->transfer = NULL;
    }
 
@@ -291,7 +291,8 @@ sp_tile_cache_flush_clear(struct softpipe_tile_cache *tc)
          union tile_address addr = tile_address(x, y);
 
          if (is_clear_flag_set(tc->clear_flags, addr)) {
-            pipe_put_tile_raw(pt,
+            pipe_put_tile_raw(tc->pipe,
+                              pt,
                               x, y, TILE_SIZE, TILE_SIZE,
                               tc->tile.data.color32, 0/*STRIDE*/);
 
@@ -325,14 +326,14 @@ sp_flush_tile_cache(struct softpipe_tile_cache *tc)
          struct softpipe_cached_tile *tile = tc->entries + pos;
          if (!tile->addr.bits.invalid) {
             if (tc->depth_stencil) {
-               pipe_put_tile_raw(pt,
+               pipe_put_tile_raw(tc->pipe, pt,
                                  tile->addr.bits.x * TILE_SIZE, 
                                  tile->addr.bits.y * TILE_SIZE, 
                                  TILE_SIZE, TILE_SIZE,
                                  tile->data.depth32, 0/*STRIDE*/);
             }
             else {
-               pipe_put_tile_rgba(pt,
+               pipe_put_tile_rgba(tc->pipe, pt,
                                   tile->addr.bits.x * TILE_SIZE, 
                                   tile->addr.bits.y * TILE_SIZE, 
                                   TILE_SIZE, TILE_SIZE,
@@ -375,14 +376,14 @@ sp_find_cached_tile(struct softpipe_tile_cache *tc,
       if (tile->addr.bits.invalid == 0) {
          /* put dirty tile back in framebuffer */
          if (tc->depth_stencil) {
-            pipe_put_tile_raw(pt,
+            pipe_put_tile_raw(tc->pipe, pt,
                               tile->addr.bits.x * TILE_SIZE,
                               tile->addr.bits.y * TILE_SIZE,
                               TILE_SIZE, TILE_SIZE,
                               tile->data.depth32, 0/*STRIDE*/);
          }
          else {
-            pipe_put_tile_rgba(pt,
+            pipe_put_tile_rgba(tc->pipe, pt,
                                tile->addr.bits.x * TILE_SIZE,
                                tile->addr.bits.y * TILE_SIZE,
                                TILE_SIZE, TILE_SIZE,
@@ -405,14 +406,14 @@ sp_find_cached_tile(struct softpipe_tile_cache *tc,
       else {
          /* get new tile data from transfer */
          if (tc->depth_stencil) {
-            pipe_get_tile_raw(pt,
+            pipe_get_tile_raw(tc->pipe, pt,
                               tile->addr.bits.x * TILE_SIZE, 
                               tile->addr.bits.y * TILE_SIZE, 
                               TILE_SIZE, TILE_SIZE,
                               tile->data.depth32, 0/*STRIDE*/);
          }
          else {
-            pipe_get_tile_rgba(pt,
+            pipe_get_tile_rgba(tc->pipe, pt,
                                tile->addr.bits.x * TILE_SIZE, 
                                tile->addr.bits.y * TILE_SIZE,
                                TILE_SIZE, TILE_SIZE,
diff --git a/src/gallium/drivers/svga/svga_screen_texture.c b/src/gallium/drivers/svga/svga_screen_texture.c
index 065b8748a3..107e4a3962 100644
--- a/src/gallium/drivers/svga/svga_screen_texture.c
+++ b/src/gallium/drivers/svga/svga_screen_texture.c
@@ -899,10 +899,11 @@ svga_transfer_unmap(struct pipe_context *pipe,
 
 
 static void
-svga_tex_transfer_destroy(struct pipe_transfer *transfer)
+svga_tex_transfer_destroy(struct pipe_context *pipe,
+                          struct pipe_transfer *transfer)
 {
    struct svga_texture *tex = svga_texture(transfer->texture);
-   struct svga_screen *ss = svga_screen(transfer->texture->screen);
+   struct svga_screen *ss = svga_screen(pipe->screen);
    struct svga_winsys_screen *sws = ss->sws;
    struct svga_transfer *st = svga_transfer(transfer);
 
diff --git a/src/gallium/drivers/trace/tr_context.c b/src/gallium/drivers/trace/tr_context.c
index 4a0e9ac17d..b7e6bbac68 100644
--- a/src/gallium/drivers/trace/tr_context.c
+++ b/src/gallium/drivers/trace/tr_context.c
@@ -1336,11 +1336,12 @@ trace_context_get_tex_transfer(struct pipe_context *_context,
 
 
 static void
-trace_context_tex_transfer_destroy(struct pipe_transfer *_transfer)
+trace_context_tex_transfer_destroy(struct pipe_context *_context,
+                                   struct pipe_transfer *_transfer)
 {
-   struct trace_context *tr_ctx = trace_context(_transfer->pipe);
+   struct trace_context *tr_context = trace_context(_context);
    struct trace_transfer *tr_trans = trace_transfer(_transfer);
-   struct pipe_context *context = tr_ctx->pipe;
+   struct pipe_context *context = tr_context->pipe;
    struct pipe_transfer *transfer = tr_trans->transfer;
 
    trace_dump_call_begin("pipe_context", "tex_transfer_destroy");
@@ -1350,7 +1351,7 @@ trace_context_tex_transfer_destroy(struct pipe_transfer *_transfer)
 
    trace_dump_call_end();
 
-   trace_transfer_destroy(tr_trans);
+   trace_transfer_destroy(tr_context, tr_trans);
 }
 
 
diff --git a/src/gallium/drivers/trace/tr_rbug.c b/src/gallium/drivers/trace/tr_rbug.c
index b36865400d..f4f17566fd 100644
--- a/src/gallium/drivers/trace/tr_rbug.c
+++ b/src/gallium/drivers/trace/tr_rbug.c
@@ -257,7 +257,7 @@ trace_rbug_texture_read(struct trace_rbug *tr_rbug, struct rbug_header *header,
                                 NULL);
 
    context->transfer_unmap(context, t);
-   context->tex_transfer_destroy(t);
+   context->tex_transfer_destroy(context, t);
 
    pipe_mutex_unlock(tr_scr->list_mutex);
 
diff --git a/src/gallium/drivers/trace/tr_texture.c b/src/gallium/drivers/trace/tr_texture.c
index b70ccb9ce8..d818e21bb8 100644
--- a/src/gallium/drivers/trace/tr_texture.c
+++ b/src/gallium/drivers/trace/tr_texture.c
@@ -143,10 +143,10 @@ trace_transfer_create(struct trace_context *tr_ctx,
 
    memcpy(&tr_trans->base, transfer, sizeof(struct pipe_transfer));
 
-   tr_trans->base.pipe = &tr_ctx->base;
    tr_trans->base.texture = NULL;
-   pipe_texture_reference(&tr_trans->base.texture, &tr_tex->base);
    tr_trans->transfer = transfer;
+
+   pipe_texture_reference(&tr_trans->base.texture, &tr_tex->base);
    assert(tr_trans->base.texture == &tr_tex->base);
 
    trace_screen_add_to_list(tr_scr, transfers, tr_trans);
@@ -154,21 +154,23 @@ trace_transfer_create(struct trace_context *tr_ctx,
    return &tr_trans->base;
 
 error:
-   tr_ctx->pipe->tex_transfer_destroy(transfer);
+   tr_ctx->pipe->tex_transfer_destroy(tr_ctx->pipe, transfer);
    return NULL;
 }
 
 
 void
-trace_transfer_destroy(struct trace_transfer *tr_trans)
+trace_transfer_destroy(struct trace_context *tr_context,
+                       struct trace_transfer *tr_trans)
 {
-   struct trace_screen *tr_scr = trace_screen(tr_trans->base.texture->screen);
-   struct pipe_context *context = tr_trans->transfer->pipe;
+   struct trace_screen *tr_scr = trace_screen(tr_context->base.screen);
+   struct pipe_context *context = tr_context->pipe;
+   struct pipe_transfer *transfer = tr_trans->transfer;
 
    trace_screen_remove_from_list(tr_scr, transfers, tr_trans);
 
    pipe_texture_reference(&tr_trans->base.texture, NULL);
-   context->tex_transfer_destroy(tr_trans->transfer);
+   context->tex_transfer_destroy(context, transfer);
    FREE(tr_trans);
 }
 
diff --git a/src/gallium/drivers/trace/tr_texture.h b/src/gallium/drivers/trace/tr_texture.h
index ab284eeef3..4dc95308a7 100644
--- a/src/gallium/drivers/trace/tr_texture.h
+++ b/src/gallium/drivers/trace/tr_texture.h
@@ -61,6 +61,7 @@ struct trace_transfer
    struct pipe_transfer base;
 
    struct pipe_transfer *transfer;
+   struct pipe_context *pipe;
 
    struct tr_list list;
 
@@ -118,7 +119,8 @@ trace_transfer_create(struct trace_context *tr_ctx,
 		      struct pipe_transfer *transfer);
 
 void
-trace_transfer_destroy(struct trace_transfer *tr_trans);
+trace_transfer_destroy(struct trace_context *tr_ctx,
+                       struct trace_transfer *tr_trans);
 
 
 #endif /* TR_TEXTURE_H_ */
diff --git a/src/gallium/include/pipe/p_context.h b/src/gallium/include/pipe/p_context.h
index 494b53e912..a7f12fb81e 100644
--- a/src/gallium/include/pipe/p_context.h
+++ b/src/gallium/include/pipe/p_context.h
@@ -323,7 +323,8 @@ struct pipe_context {
                                              unsigned x, unsigned y,
                                              unsigned w, unsigned h);
 
-   void (*tex_transfer_destroy)(struct pipe_transfer *);
+   void (*tex_transfer_destroy)(struct pipe_context *,
+                                struct pipe_transfer *);
    
    void *(*transfer_map)( struct pipe_context *,
                           struct pipe_transfer *transfer );
diff --git a/src/gallium/include/pipe/p_state.h b/src/gallium/include/pipe/p_state.h
index 2af933207d..3a97d888ce 100644
--- a/src/gallium/include/pipe/p_state.h
+++ b/src/gallium/include/pipe/p_state.h
@@ -304,8 +304,6 @@ struct pipe_surface
  */
 struct pipe_transfer
 {
-   struct pipe_context *pipe;
-
    unsigned x;                   /**< x offset from start of texture image */
    unsigned y;                   /**< y offset from start of texture image */
    unsigned width;               /**< logical width in pixels */
diff --git a/src/gallium/state_trackers/vega/api_filters.c b/src/gallium/state_trackers/vega/api_filters.c
index 6e79dd370f..18e2cc1f25 100644
--- a/src/gallium/state_trackers/vega/api_filters.c
+++ b/src/gallium/state_trackers/vega/api_filters.c
@@ -85,7 +85,7 @@ static INLINE struct pipe_texture *create_texture_1d(struct vg_context *ctx,
       void *map = pipe->transfer_map(pipe, transfer);
       memcpy(map, color_data, sizeof(VGint)*color_data_len);
       pipe->transfer_unmap(pipe, transfer);
-      pipe->tex_transfer_destroy(transfer);
+      pipe->tex_transfer_destroy(pipe, transfer);
    }
 
    return tex;
diff --git a/src/gallium/state_trackers/vega/api_images.c b/src/gallium/state_trackers/vega/api_images.c
index 432ba68139..fec473d9d2 100644
--- a/src/gallium/state_trackers/vega/api_images.c
+++ b/src/gallium/state_trackers/vega/api_images.c
@@ -450,14 +450,14 @@ void vgReadPixels(void * data, VGint dataStride,
 #if 0
          debug_printf("%d-%d  == %d\n", sy, height, y);
 #endif
-         pipe_get_tile_rgba(transfer, sx, y, width, 1, df);
+         pipe_get_tile_rgba(pipe, transfer, sx, y, width, 1, df);
          y += yStep;
          _vega_pack_rgba_span_float(ctx, width, temp, dataFormat,
                                     dst + yoffset + xoffset);
          dst += dataStride;
       }
 
-      pipe->tex_transfer_destroy(transfer);
+      pipe->tex_transfer_destroy(pipe, transfer);
    }
 }
 
diff --git a/src/gallium/state_trackers/vega/image.c b/src/gallium/state_trackers/vega/image.c
index 604a86aeb8..a71579cd26 100644
--- a/src/gallium/state_trackers/vega/image.c
+++ b/src/gallium/state_trackers/vega/image.c
@@ -418,11 +418,11 @@ void image_sub_data(struct vg_image *image,
       src += (dataStride * yoffset);
       for (i = 0; i < height; i++) {
          _vega_unpack_float_span_rgba(ctx, width, xoffset, src, dataFormat, temp);
-         pipe_put_tile_rgba(transfer, x+image->x, y+image->y, width, 1, df);
+         pipe_put_tile_rgba(pipe, transfer, x+image->x, y+image->y, width, 1, df);
          y += yStep;
          src += dataStride;
       }
-      pipe->tex_transfer_destroy(transfer);
+      pipe->tex_transfer_destroy(pipe, transfer);
    }
 }
 
@@ -454,13 +454,13 @@ void image_get_sub_data(struct vg_image * image,
 #if 0
          debug_printf("%d-%d  == %d\n", sy, height, y);
 #endif
-         pipe_get_tile_rgba(transfer, sx+image->x, y, width, 1, df);
+         pipe_get_tile_rgba(pipe, transfer, sx+image->x, y, width, 1, df);
          y += yStep;
          _vega_pack_rgba_span_float(ctx, width, temp, dataFormat, dst);
          dst += dataStride;
       }
 
-      pipe->tex_transfer_destroy(transfer);
+      pipe->tex_transfer_destroy(pipe, transfer);
    }
 }
 
diff --git a/src/gallium/state_trackers/vega/paint.c b/src/gallium/state_trackers/vega/paint.c
index 47a7710d3e..dc56b8c5f3 100644
--- a/src/gallium/state_trackers/vega/paint.c
+++ b/src/gallium/state_trackers/vega/paint.c
@@ -167,7 +167,7 @@ static INLINE struct pipe_texture *create_gradient_texture(struct vg_paint *p)
       void *map = pipe->transfer_map(pipe, transfer);
       memcpy(map, p->gradient.color_data, sizeof(VGint)*1024);
       pipe->transfer_unmap(pipe, transfer);
-      pipe->tex_transfer_destroy(transfer);
+      pipe->tex_transfer_destroy(pipe, transfer);
    }
 
    return tex;
diff --git a/src/mesa/state_tracker/st_atom_pixeltransfer.c b/src/mesa/state_tracker/st_atom_pixeltransfer.c
index b066f5c94b..b446b2079c 100644
--- a/src/mesa/state_tracker/st_atom_pixeltransfer.c
+++ b/src/mesa/state_tracker/st_atom_pixeltransfer.c
@@ -172,7 +172,7 @@ load_color_map_texture(GLcontext *ctx, struct pipe_texture *pt)
    }
 
    pipe->transfer_unmap(pipe, transfer);
-   pipe->tex_transfer_destroy(transfer);
+   pipe->tex_transfer_destroy(pipe, transfer);
 }
 
 
diff --git a/src/mesa/state_tracker/st_cb_accum.c b/src/mesa/state_tracker/st_cb_accum.c
index 69a96e5d10..01aba3e3dd 100644
--- a/src/mesa/state_tracker/st_cb_accum.c
+++ b/src/mesa/state_tracker/st_cb_accum.c
@@ -144,7 +144,7 @@ accum_accum(struct st_context *st, GLfloat value,
 
    buf = (GLfloat *) malloc(width * height * 4 * sizeof(GLfloat));
 
-   pipe_get_tile_rgba(color_trans, 0, 0, width, height, buf);
+   pipe_get_tile_rgba(pipe, color_trans, 0, 0, width, height, buf);
 
    switch (acc_strb->format) {
    case PIPE_FORMAT_R16G16B16A16_SNORM:
@@ -165,7 +165,7 @@ accum_accum(struct st_context *st, GLfloat value,
    }
 
    free(buf);
-   pipe->tex_transfer_destroy(color_trans);
+   pipe->tex_transfer_destroy(pipe, color_trans);
 }
 
 
@@ -192,7 +192,7 @@ accum_load(struct st_context *st, GLfloat value,
 
    buf = (GLfloat *) malloc(width * height * 4 * sizeof(GLfloat));
 
-   pipe_get_tile_rgba(color_trans, 0, 0, width, height, buf);
+   pipe_get_tile_rgba(pipe, color_trans, 0, 0, width, height, buf);
 
    switch (acc_strb->format) {
    case PIPE_FORMAT_R16G16B16A16_SNORM:
@@ -213,7 +213,7 @@ accum_load(struct st_context *st, GLfloat value,
    }
 
    free(buf);
-   pipe->tex_transfer_destroy(color_trans);
+   pipe->tex_transfer_destroy(pipe, color_trans);
 }
 
 
@@ -248,7 +248,7 @@ accum_return(GLcontext *ctx, GLfloat value,
 						width, height);
 
    if (usage & PIPE_TRANSFER_READ)
-      pipe_get_tile_rgba(color_trans, 0, 0, width, height, buf);
+      pipe_get_tile_rgba(pipe, color_trans, 0, 0, width, height, buf);
 
    switch (acc_strb->format) {
    case PIPE_FORMAT_R16G16B16A16_SNORM:
@@ -277,10 +277,10 @@ accum_return(GLcontext *ctx, GLfloat value,
       _mesa_problem(NULL, "unexpected format in st_clear_accum_buffer()");
    }
 
-   pipe_put_tile_rgba(color_trans, 0, 0, width, height, buf);
+   pipe_put_tile_rgba(pipe, color_trans, 0, 0, width, height, buf);
 
    free(buf);
-   pipe->tex_transfer_destroy(color_trans);
+   pipe->tex_transfer_destroy(pipe, color_trans);
 }
 
 
diff --git a/src/mesa/state_tracker/st_cb_bitmap.c b/src/mesa/state_tracker/st_cb_bitmap.c
index 723c5f180b..dfd8925edf 100644
--- a/src/mesa/state_tracker/st_cb_bitmap.c
+++ b/src/mesa/state_tracker/st_cb_bitmap.c
@@ -295,7 +295,7 @@ make_bitmap_texture(GLcontext *ctx, GLsizei width, GLsizei height,
 
    /* Release transfer */
    pipe->transfer_unmap(pipe, transfer);
-   pipe->tex_transfer_destroy(transfer);
+   pipe->tex_transfer_destroy(pipe, transfer);
 
    return pt;
 }
@@ -530,7 +530,7 @@ reset_cache(struct st_context *st)
    cache->ymax = -1000000;
 
    if (cache->trans) {
-      pipe->tex_transfer_destroy(cache->trans);
+      pipe->tex_transfer_destroy(pipe, cache->trans);
       cache->trans = NULL;
    }
 
@@ -616,7 +616,7 @@ st_flush_bitmap_cache(struct st_context *st)
             pipe->transfer_unmap(pipe, cache->trans);
             cache->buffer = NULL;
 
-            pipe->tex_transfer_destroy(cache->trans);
+            pipe->tex_transfer_destroy(pipe, cache->trans);
             cache->trans = NULL;
          }
 
@@ -836,7 +836,7 @@ st_destroy_bitmap(struct st_context *st)
    if (cache) {
       if (cache->trans) {
          pipe->transfer_unmap(pipe, cache->trans);
-         pipe->tex_transfer_destroy(cache->trans);
+         pipe->tex_transfer_destroy(pipe, cache->trans);
       }
       pipe_texture_reference(&st->bitmap.cache->texture, NULL);
       free(st->bitmap.cache);
diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c b/src/mesa/state_tracker/st_cb_drawpixels.c
index 3fa6d12f1c..c44d0fc3e8 100644
--- a/src/mesa/state_tracker/st_cb_drawpixels.c
+++ b/src/mesa/state_tracker/st_cb_drawpixels.c
@@ -411,7 +411,7 @@ make_texture(struct st_context *st,
 
       /* unmap */
       pipe->transfer_unmap(pipe, transfer);
-      pipe->tex_transfer_destroy(transfer);
+      pipe->tex_transfer_destroy(pipe, transfer);
 
       assert(success);
 
@@ -791,7 +791,7 @@ draw_stencil_pixels(GLcontext *ctx, GLint x, GLint y,
 
    /* unmap the stencil buffer */
    pipe->transfer_unmap(pipe, pt);
-   pipe->tex_transfer_destroy(pt);
+   pipe->tex_transfer_destroy(pipe, pt);
 }
 
 
@@ -944,7 +944,7 @@ copy_stencil_pixels(GLcontext *ctx, GLint srcx, GLint srcy,
 
    /* unmap the stencil buffer */
    pipe->transfer_unmap(pipe, ptDraw);
-   pipe->tex_transfer_destroy(ptDraw);
+   pipe->tex_transfer_destroy(pipe, ptDraw);
 }
 
 
@@ -1113,21 +1113,21 @@ st_CopyPixels(GLcontext *ctx, GLint srcx, GLint srcy,
          /* alternate path using get/put_tile() */
          GLfloat *buf = (GLfloat *) malloc(width * height * 4 * sizeof(GLfloat));
 
-         pipe_get_tile_rgba(ptRead, 0, 0, width, height, buf);
-         pipe_put_tile_rgba(ptTex, 0, 0, width, height, buf);
+         pipe_get_tile_rgba(pipe, ptRead, 0, 0, width, height, buf);
+         pipe_put_tile_rgba(pipe, ptTex, 0, 0, width, height, buf);
 
          free(buf);
       }
       else {
          /* GL_DEPTH */
          GLuint *buf = (GLuint *) malloc(width * height * sizeof(GLuint));
-         pipe_get_tile_z(ptRead, 0, 0, width, height, buf);
-         pipe_put_tile_z(ptTex, 0, 0, width, height, buf);
+         pipe_get_tile_z(pipe, ptRead, 0, 0, width, height, buf);
+         pipe_put_tile_z(pipe, ptTex, 0, 0, width, height, buf);
          free(buf);
       }
 
-      pipe->tex_transfer_destroy(ptRead);
-      pipe->tex_transfer_destroy(ptTex);
+      pipe->tex_transfer_destroy(pipe, ptRead);
+      pipe->tex_transfer_destroy(pipe, ptTex);
    }
 
    /* draw textured quad */
diff --git a/src/mesa/state_tracker/st_cb_readpixels.c b/src/mesa/state_tracker/st_cb_readpixels.c
index 98ccda821c..080a5f9bfb 100644
--- a/src/mesa/state_tracker/st_cb_readpixels.c
+++ b/src/mesa/state_tracker/st_cb_readpixels.c
@@ -162,7 +162,7 @@ st_read_stencil_pixels(GLcontext *ctx, GLint x, GLint y,
 
    /* unmap the stencil buffer */
    pipe->transfer_unmap(pipe, pt);
-   pipe->tex_transfer_destroy(pt);
+   pipe->tex_transfer_destroy(pipe, pt);
 }
 
 
@@ -254,7 +254,7 @@ st_fast_readpixels(GLcontext *ctx, struct st_renderbuffer *strb,
 
       map = pipe->transfer_map(pipe, trans);
       if (!map) {
-         pipe->tex_transfer_destroy(trans);
+         pipe->tex_transfer_destroy(pipe, trans);
          return GL_FALSE;
       }
 
@@ -317,7 +317,7 @@ st_fast_readpixels(GLcontext *ctx, struct st_renderbuffer *strb,
       }
 
       pipe->transfer_unmap(pipe, trans);
-      pipe->tex_transfer_destroy(trans);
+      pipe->tex_transfer_destroy(pipe, trans);
    }
 
    return GL_TRUE;
@@ -441,7 +441,7 @@ st_readpixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height,
                GLuint ztemp[MAX_WIDTH];
                GLfloat zfloat[MAX_WIDTH];
                const double scale = 1.0 / ((1 << 24) - 1);
-               pipe_get_tile_raw(trans, 0, y, width, 1, ztemp, 0);
+               pipe_get_tile_raw(pipe, trans, 0, y, width, 1, ztemp, 0);
                y += yStep;
                for (j = 0; j < width; j++) {
                   zfloat[j] = (float) (scale * (ztemp[j] & 0xffffff));
@@ -456,7 +456,7 @@ st_readpixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height,
             assert(format == GL_DEPTH_STENCIL_EXT);
             for (i = 0; i < height; i++) {
                GLuint *zshort = (GLuint *)dst;
-               pipe_get_tile_raw(trans, 0, y, width, 1, dst, 0);
+               pipe_get_tile_raw(pipe, trans, 0, y, width, 1, dst, 0);
                y += yStep;
                /* Reverse into 24/8 */
                for (j = 0; j < width; j++) {
@@ -473,7 +473,7 @@ st_readpixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height,
                GLuint ztemp[MAX_WIDTH];
                GLfloat zfloat[MAX_WIDTH];
                const double scale = 1.0 / ((1 << 24) - 1);
-               pipe_get_tile_raw(trans, 0, y, width, 1, ztemp, 0);
+               pipe_get_tile_raw(pipe, trans, 0, y, width, 1, ztemp, 0);
                y += yStep;
                for (j = 0; j < width; j++) {
                   zfloat[j] = (float) (scale * ((ztemp[j] >> 8) & 0xffffff));
@@ -487,7 +487,7 @@ st_readpixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height,
             /* XXX: unreachable code -- should be before st_read_stencil_pixels */
             assert(format == GL_DEPTH_STENCIL_EXT);
             for (i = 0; i < height; i++) {
-               pipe_get_tile_raw(trans, 0, y, width, 1, dst, 0);
+               pipe_get_tile_raw(pipe, trans, 0, y, width, 1, dst, 0);
                y += yStep;
                dst += dstStride;
             }
@@ -498,7 +498,7 @@ st_readpixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height,
             GLushort ztemp[MAX_WIDTH];
             GLfloat zfloat[MAX_WIDTH];
             const double scale = 1.0 / 0xffff;
-            pipe_get_tile_raw(trans, 0, y, width, 1, ztemp, 0);
+            pipe_get_tile_raw(pipe, trans, 0, y, width, 1, ztemp, 0);
             y += yStep;
             for (j = 0; j < width; j++) {
                zfloat[j] = (float) (scale * ztemp[j]);
@@ -513,7 +513,7 @@ st_readpixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height,
             GLuint ztemp[MAX_WIDTH];
             GLfloat zfloat[MAX_WIDTH];
             const double scale = 1.0 / 0xffffffff;
-            pipe_get_tile_raw(trans, 0, y, width, 1, ztemp, 0);
+            pipe_get_tile_raw(pipe, trans, 0, y, width, 1, ztemp, 0);
             y += yStep;
             for (j = 0; j < width; j++) {
                zfloat[j] = (float) (scale * ztemp[j]);
@@ -527,7 +527,7 @@ st_readpixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height,
          /* RGBA format */
          /* Do a row at a time to flip image data vertically */
          for (i = 0; i < height; i++) {
-            pipe_get_tile_rgba(trans, 0, y, width, 1, df);
+            pipe_get_tile_rgba(pipe, trans, 0, y, width, 1, df);
             y += yStep;
             df += dfStride;
             if (!dfStride) {
@@ -539,7 +539,7 @@ st_readpixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height,
       }
    }
 
-   pipe->tex_transfer_destroy(trans);
+   pipe->tex_transfer_destroy(pipe, trans);
 
    _mesa_unmap_pbo_dest(ctx, &clippedPacking);
 }
diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c
index 1b20b615d0..626e6ad660 100644
--- a/src/mesa/state_tracker/st_cb_texture.c
+++ b/src/mesa/state_tracker/st_cb_texture.c
@@ -435,7 +435,7 @@ compress_with_blit(GLcontext * ctx,
                   unpack);          /* source data packing */
 
    pipe->transfer_unmap(pipe, tex_xfer);
-   pipe->tex_transfer_destroy(tex_xfer);
+   pipe->tex_transfer_destroy(pipe, tex_xfer);
 
    /* copy / compress image */
    util_blit_pixels_tex(ctx->st->blit,
@@ -873,7 +873,7 @@ decompress_with_blit(GLcontext * ctx, GLenum target, GLint level,
             debug_printf("%s: fallback format translation\n", __FUNCTION__);
 
          /* get float[4] rgba row from surface */
-         pipe_get_tile_rgba(tex_xfer, 0, row, width, 1, rgba);
+         pipe_get_tile_rgba(pipe, tex_xfer, 0, row, width, 1, rgba);
 
          _mesa_pack_rgba_span_float(ctx, width, (GLfloat (*)[4]) rgba, format,
                                     type, dest, &ctx->Pack, transferOps);
@@ -1310,11 +1310,11 @@ fallback_copy_texsubimage(GLcontext *ctx, GLenum target, GLint level,
       /* To avoid a large temp memory allocation, do copy row by row */
       for (row = 0; row < height; row++, srcY += yStep) {
          uint data[MAX_WIDTH];
-         pipe_get_tile_z(src_trans, 0, srcY, width, 1, data);
+         pipe_get_tile_z(pipe, src_trans, 0, srcY, width, 1, data);
          if (scaleOrBias) {
             _mesa_scale_and_bias_depth_uint(ctx, width, data);
          }
-         pipe_put_tile_z(stImage->transfer, 0, row, width, 1, data);
+         pipe_put_tile_z(pipe, stImage->transfer, 0, row, width, 1, data);
       }
    }
    else {
@@ -1336,7 +1336,7 @@ fallback_copy_texsubimage(GLcontext *ctx, GLenum target, GLint level,
          /* XXX this usually involves a lot of int/float conversion.
           * try to avoid that someday.
           */
-         pipe_get_tile_rgba(src_trans, 0, 0, width, height, tempSrc);
+         pipe_get_tile_rgba(pipe, src_trans, 0, 0, width, height, tempSrc);
 
          /* Store into texture memory.
           * Note that this does some special things such as pixel transfer
@@ -1364,7 +1364,7 @@ fallback_copy_texsubimage(GLcontext *ctx, GLenum target, GLint level,
    }
 
    st_texture_image_unmap(ctx->st, stImage);
-   pipe->tex_transfer_destroy(src_trans);
+   pipe->tex_transfer_destroy(pipe, src_trans);
 }
 
 
diff --git a/src/mesa/state_tracker/st_gen_mipmap.c b/src/mesa/state_tracker/st_gen_mipmap.c
index a73b8ed8fe..b2521433c8 100644
--- a/src/mesa/state_tracker/st_gen_mipmap.c
+++ b/src/mesa/state_tracker/st_gen_mipmap.c
@@ -163,8 +163,8 @@ fallback_generate_mipmap(GLcontext *ctx, GLenum target,
       pipe->transfer_unmap(pipe, srcTrans);
       pipe->transfer_unmap(pipe, dstTrans);
 
-      pipe->tex_transfer_destroy(srcTrans);
-      pipe->tex_transfer_destroy(dstTrans);
+      pipe->tex_transfer_destroy(pipe, srcTrans);
+      pipe->tex_transfer_destroy(pipe, dstTrans);
    }
 }
 
diff --git a/src/mesa/state_tracker/st_texture.c b/src/mesa/state_tracker/st_texture.c
index f1eef768eb..10a38befb4 100644
--- a/src/mesa/state_tracker/st_texture.c
+++ b/src/mesa/state_tracker/st_texture.c
@@ -217,7 +217,7 @@ st_texture_image_unmap(struct st_context *st,
 
    pipe->transfer_unmap(pipe, stImage->transfer);
 
-   pipe->tex_transfer_destroy(stImage->transfer);
+   pipe->tex_transfer_destroy(pipe, stImage->transfer);
 }
 
 
@@ -284,7 +284,7 @@ st_texture_image_data(struct st_context *st,
 		      u_minify(dst->width0, level),
                       u_minify(dst->height0, level));      /* width, height */
 
-      pipe->tex_transfer_destroy(dst_transfer);
+      pipe->tex_transfer_destroy(pipe, dst_transfer);
 
       srcUB += src_image_stride;
    }
-- 
cgit v1.2.3


From ed1c69710c5046a80a86a9e8b51a1cb15b1b92eb Mon Sep 17 00:00:00 2001
From: Roland Scheidegger <sroland@vmware.com>
Date: Thu, 11 Mar 2010 18:54:14 +0100
Subject: st/mesa: don't enable extensions which aren't actually supported

don't enable APPLE_client_storage, TDFX_texture_compression_FXT1,
EXT_cull_vertex, NV_vertex_program, NV_vertex_program1_1 -
the latter two might work somewhat with some luck.
Also don't enable ARB_imaging.
---
 src/gallium/state_trackers/dri/dri_extensions.c | 2 +-
 src/mesa/state_tracker/st_extensions.c          | 7 +++----
 2 files changed, 4 insertions(+), 5 deletions(-)

(limited to 'src/mesa')

diff --git a/src/gallium/state_trackers/dri/dri_extensions.c b/src/gallium/state_trackers/dri/dri_extensions.c
index d98fe3b47b..800677a2d1 100644
--- a/src/gallium/state_trackers/dri/dri_extensions.c
+++ b/src/gallium/state_trackers/dri/dri_extensions.c
@@ -40,7 +40,7 @@ dri_init_extensions(struct dri_context *ctx)
 {
    /* New extensions should be added in mesa/state_tracker/st_extensions.c
     * and not in this file. */
-   driInitExtensions(ctx->st->ctx, NULL, GL_TRUE);
+   driInitExtensions(ctx->st->ctx, NULL, GL_FALSE);
 }
 
 /* vim: set sw=3 ts=8 sts=3 expandtab: */
diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
index e837924dbd..290ee36b0f 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -179,7 +179,6 @@ void st_init_extensions(struct st_context *st)
    ctx->Extensions.EXT_blend_logic_op = GL_TRUE;
    ctx->Extensions.EXT_blend_minmax = GL_TRUE;
    ctx->Extensions.EXT_blend_subtract = GL_TRUE;
-   ctx->Extensions.EXT_cull_vertex = GL_TRUE;
    ctx->Extensions.EXT_framebuffer_blit = GL_TRUE;
    ctx->Extensions.EXT_framebuffer_object = GL_TRUE;
    ctx->Extensions.EXT_framebuffer_multisample = GL_TRUE;
@@ -196,9 +195,6 @@ void st_init_extensions(struct st_context *st)
    ctx->Extensions.EXT_texture_lod_bias = GL_TRUE;
    ctx->Extensions.EXT_vertex_array_bgra = GL_TRUE;
 
-   ctx->Extensions.TDFX_texture_compression_FXT1 = GL_TRUE;
-
-   ctx->Extensions.APPLE_client_storage = GL_TRUE;
    ctx->Extensions.APPLE_vertex_array_object = GL_TRUE;
 
    ctx->Extensions.MESA_pack_invert = GL_TRUE;
@@ -207,8 +203,11 @@ void st_init_extensions(struct st_context *st)
    ctx->Extensions.NV_texgen_reflection = GL_TRUE;
    ctx->Extensions.NV_texture_env_combine4 = GL_TRUE;
    ctx->Extensions.NV_texture_rectangle = GL_TRUE;
+#if 0
+   /* possibly could support the following two */
    ctx->Extensions.NV_vertex_program = GL_TRUE;
    ctx->Extensions.NV_vertex_program1_1 = GL_TRUE;
+#endif
 
 #if FEATURE_OES_draw_texture
    ctx->Extensions.OES_draw_texture = GL_TRUE;
-- 
cgit v1.2.3


From 644a05c6cb3ebabc600f6d529b54c71fd2c0c84c Mon Sep 17 00:00:00 2001
From: Alex Deucher <alexdeucher@gmail.com>
Date: Thu, 11 Mar 2010 13:48:28 -0500
Subject: r200: support additional blit formats

swizzle in the pixel shader
---
 src/mesa/drivers/dri/r200/r200_blit.c | 152 ++++++++++++++++++++++++++++++----
 src/mesa/drivers/dri/r200/r200_reg.h  |   4 +
 2 files changed, 138 insertions(+), 18 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r200/r200_blit.c b/src/mesa/drivers/dri/r200/r200_blit.c
index 55e8d32512..e187fc0f61 100644
--- a/src/mesa/drivers/dri/r200/r200_blit.c
+++ b/src/mesa/drivers/dri/r200/r200_blit.c
@@ -50,6 +50,9 @@ unsigned r200_check_blit(gl_format mesa_format)
     case MESA_FORMAT_A8:
     case MESA_FORMAT_L8:
     case MESA_FORMAT_I8:
+    /* swizzled */
+    case MESA_FORMAT_RGBA8888:
+    case MESA_FORMAT_RGBA8888_REV:
 	    break;
     default:
 	    return 0;
@@ -88,7 +91,8 @@ static inline void emit_vtx_state(struct r200_context *r200)
 }
 
 static void inline emit_tx_setup(struct r200_context *r200,
-				 gl_format mesa_format,
+				 gl_format src_mesa_format,
+				 gl_format dst_mesa_format,
 				 struct radeon_bo *bo,
 				 intptr_t offset,
 				 unsigned width,
@@ -103,7 +107,7 @@ static void inline emit_tx_setup(struct r200_context *r200,
     assert(offset % 32 == 0);
 
     /* XXX others?  BE/LE? */
-    switch (mesa_format) {
+    switch (src_mesa_format) {
     case MESA_FORMAT_ARGB8888:
 	    txformat |= R200_TXFORMAT_ARGB8888 | R200_TXFORMAT_ALPHA_IN_MAP;
 	    break;
@@ -139,20 +143,130 @@ static void inline emit_tx_setup(struct r200_context *r200,
 	    break;
     }
 
-    BEGIN_BATCH(28);
-    OUT_BATCH_REGVAL(RADEON_PP_CNTL, RADEON_TEX_0_ENABLE | RADEON_TEX_BLEND_0_ENABLE);
+    switch (dst_mesa_format) {
+    case MESA_FORMAT_ARGB8888:
+    case MESA_FORMAT_XRGB8888:
+    case MESA_FORMAT_RGB565:
+    case MESA_FORMAT_ARGB4444:
+    case MESA_FORMAT_ARGB1555:
+    case MESA_FORMAT_A8:
+    case MESA_FORMAT_L8:
+    case MESA_FORMAT_I8:
+    default:
+	    /* no swizzle required */
+	    BEGIN_BATCH(10);
+	    OUT_BATCH_REGVAL(RADEON_PP_CNTL, (RADEON_TEX_0_ENABLE |
+					      RADEON_TEX_BLEND_0_ENABLE));
+	    OUT_BATCH_REGVAL(R200_PP_TXCBLEND_0, (R200_TXC_ARG_A_ZERO |
+						  R200_TXC_ARG_B_ZERO |
+						  R200_TXC_ARG_C_R0_COLOR |
+						  R200_TXC_OP_MADD));
+	    OUT_BATCH_REGVAL(R200_PP_TXCBLEND2_0, (R200_TXC_CLAMP_0_1 |
+						   R200_TXC_OUTPUT_REG_R0));
+	    OUT_BATCH_REGVAL(R200_PP_TXABLEND_0, (R200_TXA_ARG_A_ZERO |
+						  R200_TXA_ARG_B_ZERO |
+						  R200_TXA_ARG_C_R0_ALPHA |
+						  R200_TXA_OP_MADD));
+	    OUT_BATCH_REGVAL(R200_PP_TXABLEND2_0, (R200_TXA_CLAMP_0_1 |
+						   R200_TXA_OUTPUT_REG_R0));
+	    END_BATCH();
+	    break;
+    case MESA_FORMAT_RGBA8888:
+	    BEGIN_BATCH(10);
+	    OUT_BATCH_REGVAL(RADEON_PP_CNTL, (RADEON_TEX_0_ENABLE |
+					      RADEON_TEX_BLEND_0_ENABLE));
+	    OUT_BATCH_REGVAL(R200_PP_TXCBLEND_0, (R200_TXC_ARG_A_ZERO |
+						  R200_TXC_ARG_B_ZERO |
+						  R200_TXC_ARG_C_R0_COLOR |
+						  R200_TXC_OP_MADD));
+	    OUT_BATCH_REGVAL(R200_PP_TXCBLEND2_0, (R200_TXC_CLAMP_0_1 |
+						   R200_TXC_OUTPUT_ROTATE_GBA |
+						   R200_TXC_OUTPUT_REG_R0));
+	    OUT_BATCH_REGVAL(R200_PP_TXABLEND_0, (R200_TXA_ARG_A_ZERO |
+						  R200_TXA_ARG_B_ZERO |
+						  R200_TXA_ARG_C_R0_ALPHA |
+						  R200_TXA_OP_MADD));
+	    OUT_BATCH_REGVAL(R200_PP_TXABLEND2_0, (R200_TXA_CLAMP_0_1 |
+						   (R200_TXA_REPL_RED << R200_TXA_REPL_ARG_C_SHIFT) |
+						   R200_TXA_OUTPUT_REG_R0));
+	    END_BATCH();
+	    break;
+    case MESA_FORMAT_RGBA8888_REV:
+	    BEGIN_BATCH(34);
+	    OUT_BATCH_REGVAL(RADEON_PP_CNTL, (RADEON_TEX_0_ENABLE |
+					      RADEON_TEX_BLEND_0_ENABLE |
+					      RADEON_TEX_BLEND_1_ENABLE |
+					      RADEON_TEX_BLEND_2_ENABLE |
+					      RADEON_TEX_BLEND_3_ENABLE));
+	    /* r1.r = r0.b */
+	    OUT_BATCH_REGVAL(R200_PP_TXCBLEND_0, (R200_TXC_ARG_A_ZERO |
+						  R200_TXC_ARG_B_ZERO |
+						  R200_TXC_ARG_C_R0_COLOR |
+						  R200_TXC_OP_MADD));
+	    OUT_BATCH_REGVAL(R200_PP_TXCBLEND2_0, (R200_TXC_CLAMP_0_1 |
+						   R200_TXC_OUTPUT_MASK_R |
+						   (R200_TXC_REPL_BLUE << R200_TXC_REPL_ARG_C_SHIFT) |
+						   R200_TXC_OUTPUT_REG_R1));
+	    /* r1.a = r0.a */
+	    OUT_BATCH_REGVAL(R200_PP_TXABLEND_0, (R200_TXA_ARG_A_ZERO |
+						  R200_TXA_ARG_B_ZERO |
+						  R200_TXA_ARG_C_R0_ALPHA |
+						  R200_TXA_OP_MADD));
+	    OUT_BATCH_REGVAL(R200_PP_TXABLEND2_0, (R200_TXA_CLAMP_0_1 |
+						   R200_TXA_OUTPUT_REG_R1));
+	    /* r1.g = r0.g */
+	    OUT_BATCH_REGVAL(R200_PP_TXCBLEND_1, (R200_TXC_ARG_A_ZERO |
+						  R200_TXC_ARG_B_ZERO |
+						  R200_TXC_ARG_C_R0_COLOR |
+						  R200_TXC_OP_MADD));
+	    OUT_BATCH_REGVAL(R200_PP_TXCBLEND2_1, (R200_TXC_CLAMP_0_1 |
+						   R200_TXC_OUTPUT_MASK_G |
+						   (R200_TXC_REPL_GREEN << R200_TXC_REPL_ARG_C_SHIFT) |
+						   R200_TXC_OUTPUT_REG_R1));
+	    /* r1.a = r0.a */
+	    OUT_BATCH_REGVAL(R200_PP_TXABLEND_1, (R200_TXA_ARG_A_ZERO |
+						  R200_TXA_ARG_B_ZERO |
+						  R200_TXA_ARG_C_R0_ALPHA |
+						  R200_TXA_OP_MADD));
+	    OUT_BATCH_REGVAL(R200_PP_TXABLEND2_1, (R200_TXA_CLAMP_0_1 |
+						   R200_TXA_OUTPUT_REG_R1));
+	    /* r1.b = r0.r */
+	    OUT_BATCH_REGVAL(R200_PP_TXCBLEND_2, (R200_TXC_ARG_A_ZERO |
+						  R200_TXC_ARG_B_ZERO |
+						  R200_TXC_ARG_C_R0_COLOR |
+						  R200_TXC_OP_MADD));
+	    OUT_BATCH_REGVAL(R200_PP_TXCBLEND2_2, (R200_TXC_CLAMP_0_1 |
+						   R200_TXC_OUTPUT_MASK_B |
+						   (R200_TXC_REPL_RED << R200_TXC_REPL_ARG_C_SHIFT) |
+						   R200_TXC_OUTPUT_REG_R1));
+	    /* r1.a = r0.a */
+	    OUT_BATCH_REGVAL(R200_PP_TXABLEND_2, (R200_TXA_ARG_A_ZERO |
+						  R200_TXA_ARG_B_ZERO |
+						  R200_TXA_ARG_C_R0_ALPHA |
+						  R200_TXA_OP_MADD));
+	    OUT_BATCH_REGVAL(R200_PP_TXABLEND2_2, (R200_TXA_CLAMP_0_1 |
+						   R200_TXA_OUTPUT_REG_R1));
+	    /* r0.rgb = r1.rgb */
+	    OUT_BATCH_REGVAL(R200_PP_TXCBLEND_3, (R200_TXC_ARG_A_ZERO |
+						  R200_TXC_ARG_B_ZERO |
+						  R200_TXC_ARG_C_R1_COLOR |
+						  R200_TXC_OP_MADD));
+	    OUT_BATCH_REGVAL(R200_PP_TXCBLEND2_3, (R200_TXC_CLAMP_0_1 |
+						   R200_TXC_OUTPUT_REG_R0));
+	    /* r0.a = r1.a */
+	    OUT_BATCH_REGVAL(R200_PP_TXABLEND_3, (R200_TXA_ARG_A_ZERO |
+						  R200_TXA_ARG_B_ZERO |
+						  R200_TXA_ARG_C_R1_ALPHA |
+						  R200_TXA_OP_MADD));
+	    OUT_BATCH_REGVAL(R200_PP_TXABLEND2_3, (R200_TXA_CLAMP_0_1 |
+						   R200_TXA_OUTPUT_REG_R0));
+	    END_BATCH();
+	    break;
+    }
+
+    BEGIN_BATCH(18);
     OUT_BATCH_REGVAL(R200_PP_CNTL_X, 0);
     OUT_BATCH_REGVAL(R200_PP_TXMULTI_CTL_0, 0);
-    OUT_BATCH_REGVAL(R200_PP_TXCBLEND_0, (R200_TXC_ARG_A_ZERO |
-					  R200_TXC_ARG_B_ZERO |
-					  R200_TXC_ARG_C_R0_COLOR |
-					  R200_TXC_OP_MADD));
-    OUT_BATCH_REGVAL(R200_PP_TXCBLEND2_0, R200_TXC_CLAMP_0_1 | R200_TXC_OUTPUT_REG_R0);
-    OUT_BATCH_REGVAL(R200_PP_TXABLEND_0, (R200_TXA_ARG_A_ZERO |
-					  R200_TXA_ARG_B_ZERO |
-					  R200_TXA_ARG_C_R0_ALPHA |
-					  R200_TXA_OP_MADD));
-    OUT_BATCH_REGVAL(R200_PP_TXABLEND2_0, R200_TXA_CLAMP_0_1 | R200_TXA_OUTPUT_REG_R0);
     OUT_BATCH_REGVAL(R200_PP_TXFILTER_0, (R200_CLAMP_S_CLAMP_LAST |
 					  R200_CLAMP_T_CLAMP_LAST |
 					  R200_MAG_FILTER_NEAREST |
@@ -161,7 +275,7 @@ static void inline emit_tx_setup(struct r200_context *r200,
     OUT_BATCH_REGVAL(R200_PP_TXFORMAT_X_0, 0);
     OUT_BATCH_REGVAL(R200_PP_TXSIZE_0, ((width - 1) |
 					((height - 1) << RADEON_TEX_VSIZE_SHIFT)));
-    OUT_BATCH_REGVAL(R200_PP_TXPITCH_0, pitch * _mesa_get_format_bytes(mesa_format) - 32);
+    OUT_BATCH_REGVAL(R200_PP_TXPITCH_0, pitch * _mesa_get_format_bytes(src_mesa_format) - 32);
 
     OUT_BATCH_REGSEQ(R200_PP_TXOFFSET_0, 1);
     OUT_BATCH_RELOC(0, bo, 0, RADEON_GEM_DOMAIN_GTT|RADEON_GEM_DOMAIN_VRAM, 0, 0);
@@ -185,6 +299,8 @@ static inline void emit_cb_setup(struct r200_context *r200,
     switch (mesa_format) {
     case MESA_FORMAT_ARGB8888:
     case MESA_FORMAT_XRGB8888:
+    case MESA_FORMAT_RGBA8888:
+    case MESA_FORMAT_RGBA8888_REV:
 	    dst_format = RADEON_COLOR_FORMAT_ARGB8888;
 	    break;
     case MESA_FORMAT_RGB565:
@@ -401,15 +517,15 @@ unsigned r200_blit(GLcontext *ctx,
     /* Flush is needed to make sure that source buffer has correct data */
     radeonFlush(r200->radeon.glCtx);
 
-    rcommonEnsureCmdBufSpace(&r200->radeon, 78, __FUNCTION__);
+    rcommonEnsureCmdBufSpace(&r200->radeon, 102, __FUNCTION__);
 
     if (!validate_buffers(r200, src_bo, dst_bo))
         return GL_FALSE;
 
     /* 14 */
     emit_vtx_state(r200);
-    /* 28 */
-    emit_tx_setup(r200, src_mesaformat, src_bo, src_offset, src_width, src_height, src_pitch);
+    /* 52 */
+    emit_tx_setup(r200, src_mesaformat, dst_mesaformat, src_bo, src_offset, src_width, src_height, src_pitch);
     /* 22 */
     emit_cb_setup(r200, dst_bo, dst_offset, dst_mesaformat, dst_pitch, dst_width, dst_height);
     /* 14 */
diff --git a/src/mesa/drivers/dri/r200/r200_reg.h b/src/mesa/drivers/dri/r200/r200_reg.h
index 59115212ce..2e52c7c13f 100644
--- a/src/mesa/drivers/dri/r200/r200_reg.h
+++ b/src/mesa/drivers/dri/r200/r200_reg.h
@@ -1265,6 +1265,10 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #define     R200_TXC_OUTPUT_MASK_G                 (5 << 20)
 #define     R200_TXC_OUTPUT_MASK_B                 (6 << 20)
 #define     R200_TXC_OUTPUT_MASK_NONE              (7 << 20)
+#define     R200_TXC_OUTPUT_ROTATE_RGB             (0 << 24)
+#define     R200_TXC_OUTPUT_ROTATE_ARG             (1 << 24)
+#define     R200_TXC_OUTPUT_ROTATE_GBA             (2 << 24)
+#define     R200_TXC_OUTPUT_ROTATE_RGA             (3 << 24)
 #define     R200_TXC_REPL_NORMAL                   0
 #define     R200_TXC_REPL_RED                      1
 #define     R200_TXC_REPL_GREEN                    2
-- 
cgit v1.2.3


From c472ce5302a590b45d8affe00c1fcce04f8b8585 Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Thu, 11 Mar 2010 13:44:39 -0700
Subject: st/mesa: fix st_set_framebuffer_surface() state validation

Set the _NEW_BUFFERS flag and remove the code which updated the
parent framebuffer size.  Normal Mesa state validation will do that.

Fixes issues with Warsow on r300g and possibly other bugs.
---
 src/mesa/state_tracker/st_framebuffer.c | 50 ++++++++-------------------------
 1 file changed, 12 insertions(+), 38 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/state_tracker/st_framebuffer.c b/src/mesa/state_tracker/st_framebuffer.c
index 1d35e8d657..cf8331f4ab 100644
--- a/src/mesa/state_tracker/st_framebuffer.c
+++ b/src/mesa/state_tracker/st_framebuffer.c
@@ -167,9 +167,7 @@ st_set_framebuffer_surface(struct st_framebuffer *stfb,
                            uint surfIndex, struct pipe_surface *surf)
 {
    GET_CURRENT_CONTEXT(ctx);
-   static const GLuint invalid_size = 9999999;
    struct st_renderbuffer *strb;
-   GLuint width, height, i;
 
    /* sanity checks */
    assert(ST_SURFACE_FRONT_LEFT == BUFFER_FRONT_LEFT);
@@ -183,18 +181,17 @@ st_set_framebuffer_surface(struct st_framebuffer *stfb,
    strb = st_renderbuffer(stfb->Base.Attachment[surfIndex].Renderbuffer);
 
    if (!strb) {
-      if (surfIndex == ST_SURFACE_FRONT_LEFT) {
-         /* Delayed creation when the window system supplies a fake front buffer */
-         struct st_renderbuffer *strb_back
-            = st_renderbuffer(stfb->Base.Attachment[ST_SURFACE_BACK_LEFT].Renderbuffer);
-         struct gl_renderbuffer *rb
-            = st_new_renderbuffer_fb(surf->format, strb_back->Base.NumSamples, FALSE);
-         _mesa_add_renderbuffer(&stfb->Base, BUFFER_FRONT_LEFT, rb);
-         strb = st_renderbuffer(rb);
-      } else {
-         /* fail */
+      /* create new renderbuffer for this surface now */
+      const GLuint numSamples = stfb->Base.Visual.samples;
+      struct gl_renderbuffer *rb =
+         st_new_renderbuffer_fb(surf->format, numSamples, FALSE);
+      if (!rb) {
+         /* out of memory */
+         _mesa_warning(ctx, "Out of memory allocating renderbuffer");
          return;
       }
+      _mesa_add_renderbuffer(&stfb->Base, BUFFER_FRONT_LEFT, rb);
+      strb = st_renderbuffer(rb);
    }
 
    /* replace the renderbuffer's surface/texture pointers */
@@ -206,39 +203,16 @@ st_set_framebuffer_surface(struct st_framebuffer *stfb,
        * But when we do, we need to start setting this dirty bit
        * to ensure the renderbuffer attachements are up-to-date
        * via update_framebuffer.
+       * Core Mesa's state validation will update the parent framebuffer's
+       * size info, etc.
        */
       ctx->st->dirty.st |= ST_NEW_FRAMEBUFFER;
+      ctx->NewState |= _NEW_BUFFERS;
    }
 
    /* update renderbuffer's width/height */
    strb->Base.Width = surf->width;
    strb->Base.Height = surf->height;
-
-   /* Try to update the framebuffer's width/height from the renderbuffer
-    * sizes.  Before we start drawing, all the rbs _should_ be the same size.
-    */
-   width = height = invalid_size;
-   for (i = 0; i < BUFFER_COUNT; i++) {
-      if (stfb->Base.Attachment[i].Renderbuffer) {
-         if (width == invalid_size) {
-            width = stfb->Base.Attachment[i].Renderbuffer->Width;
-            height = stfb->Base.Attachment[i].Renderbuffer->Height;
-         }
-         else if (width != stfb->Base.Attachment[i].Renderbuffer->Width ||
-                  height != stfb->Base.Attachment[i].Renderbuffer->Height) {
-            /* inconsistant renderbuffer sizes, bail out */
-            return;
-         }
-      }
-   }
-
-   if (width != invalid_size) {
-      /* OK, the renderbuffers are of a consistant size, so update the
-       * parent framebuffer's size.
-       */
-      stfb->Base.Width = width;
-      stfb->Base.Height = height;
-   }
 }
 
 
-- 
cgit v1.2.3


From 5d5c524cbe534a868fff8f6d6f64bcb89066e32c Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Thu, 11 Mar 2010 14:51:02 -0700
Subject: st/mesa: s/BUFFER_FRONT_LEFT/surfIndex/

---
 src/mesa/state_tracker/st_framebuffer.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/state_tracker/st_framebuffer.c b/src/mesa/state_tracker/st_framebuffer.c
index cf8331f4ab..0a91183f89 100644
--- a/src/mesa/state_tracker/st_framebuffer.c
+++ b/src/mesa/state_tracker/st_framebuffer.c
@@ -190,7 +190,7 @@ st_set_framebuffer_surface(struct st_framebuffer *stfb,
          _mesa_warning(ctx, "Out of memory allocating renderbuffer");
          return;
       }
-      _mesa_add_renderbuffer(&stfb->Base, BUFFER_FRONT_LEFT, rb);
+      _mesa_add_renderbuffer(&stfb->Base, surfIndex, rb);
       strb = st_renderbuffer(rb);
    }
 
-- 
cgit v1.2.3


From 39c2d3ecd9432262bb157da3bb6103f84a4375e5 Mon Sep 17 00:00:00 2001
From: Vinson Lee <vlee@vmware.com>
Date: Thu, 11 Mar 2010 21:55:44 -0800
Subject: radeon: Fix memory leaks from early return.

---
 src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c | 2 ++
 1 file changed, 2 insertions(+)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
index cd843d965e..e0e271b771 100644
--- a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
+++ b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
@@ -539,6 +539,8 @@ static radeon_mipmap_tree * get_biggest_matching_miptree(radeonTexObj *texObj,
 	}
 
 	if (mtCount == 0) {
+		free(mtSizes);
+		free(mts);
 		return NULL;
 	}
 
-- 
cgit v1.2.3


From a48e17ccb065194d11fbe87f77af660bb7fadae9 Mon Sep 17 00:00:00 2001
From: Corbin Simpson <MostAwesomeDude@gmail.com>
Date: Fri, 12 Mar 2010 02:51:10 -0800
Subject: st/mesa: Update debug infos.

Still commented out, of course.
---
 src/mesa/state_tracker/st_draw.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c
index 8a6e1ed466..8b01272cae 100644
--- a/src/mesa/state_tracker/st_draw.c
+++ b/src/mesa/state_tracker/st_draw.c
@@ -273,7 +273,8 @@ is_interleaved_arrays(const struct st_vertex_program *vp,
    }
 
    *userSpace = (num_client_arrays == vpv->num_inputs);
-   /* printf("user space: %d (%d %d)\n", (int) *userSpace,num_client_arrays,vp->num_inputs); */
+   /* debug_printf("user space: %s (%d arrays, %d inputs)\n",
+      (int)*userSpace ? "Yes" : "No", num_client_arrays, vp->num_inputs); */
 
    return GL_TRUE;
 }
@@ -293,6 +294,8 @@ get_arrays_bounds(const struct st_vertex_program *vp,
    const GLubyte *high_addr = NULL;
    GLuint attr;
 
+   /* debug_printf("get_arrays_bounds: Handling %u attrs\n", vpv->num_inputs); */
+
    for (attr = 0; attr < vpv->num_inputs; attr++) {
       const GLuint mesaAttr = vp->index_to_input[attr];
       const GLint stride = arrays[mesaAttr]->StrideB;
@@ -301,6 +304,9 @@ get_arrays_bounds(const struct st_vertex_program *vp,
                            _mesa_sizeof_type(arrays[mesaAttr]->Type));
       const GLubyte *end = start + (max_index * stride) + sz;
 
+      /* debug_printf("attr %u: stride %d size %u start %p end %p\n",
+         attr, stride, sz, start, end); */
+
       if (attr == 0) {
          low_addr = start;
          high_addr = end;
@@ -348,7 +354,8 @@ setup_interleaved_attribs(GLcontext *ctx,
          const GLubyte *low, *high;
 
          get_arrays_bounds(vp, vpv, arrays, max_index, &low, &high);
-         /*printf("buffer range: %p %p  %d\n", low, high, high-low);*/
+         /* debug_printf("buffer range: %p %p range %d max index %u\n",
+            low, high, high - low, max_index); */
 
          offset0 = low;
          if (userSpace) {
-- 
cgit v1.2.3


From 50876ddaaff72a324ac45e255985e0f84e108594 Mon Sep 17 00:00:00 2001
From: Corbin Simpson <MostAwesomeDude@gmail.com>
Date: Fri, 12 Mar 2010 02:51:40 -0800
Subject: st/mesa: Always recalculate invalid index bounds.

These should always be sanitized before heading towards the pipe driver,
and if the calling function explicitly marked them as invalid, we need
to regenerate them.

Allows r300g to properly pass a bit more of Wine's d3d9 testing without
dropping stuff on the floor.
---
 src/mesa/state_tracker/st_draw.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c
index 8b01272cae..d81b3611b7 100644
--- a/src/mesa/state_tracker/st_draw.c
+++ b/src/mesa/state_tracker/st_draw.c
@@ -542,9 +542,9 @@ st_draw_vbo(GLcontext *ctx,
    assert(ctx->NewState == 0x0);
 
    /* Gallium probably doesn't want this in some cases. */
-   if (!index_bounds_valid)
-      if (!vbo_all_varyings_in_vbos(arrays))
-	 vbo_get_minmax_index(ctx, prims, ib, &min_index, &max_index);
+   if (index_bounds_valid != GL_TRUE) {
+      vbo_get_minmax_index(ctx, prims, ib, &min_index, &max_index);
+   }
 
    /* sanity check for pointer arithmetic below */
    assert(sizeof(arrays[0]->Ptr[0]) == 1);
-- 
cgit v1.2.3


From c16d04bd2939154c0360f1ac51fe61a86e5dd9e5 Mon Sep 17 00:00:00 2001
From: Marek Olšák <maraeo@gmail.com>
Date: Tue, 9 Mar 2010 01:55:42 +0000
Subject: gallium: fix BGRA vertex color swizzles
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

The mapping for vertex_array_bgra:
(gl -> st -> translate)
GL_RGBA -> PIPE_FORMAT_R8G8B8A8 (RGBA) -> no swizzle (XYZW)
GL_BGRA -> PIPE_FORMAT_A8R8G8B8 (ARGB) -> ZYXW (BGRA again??)

Iẗ́'s pretty clear that PIPE_FORMAT_A8R8G8B8 here is wrong. This commit
fixes the pipe format and removes obvious workarounds in util/translate.

Tested with: softpipe, llvmpipe, r300g.

Signed-off-by: José Fonseca <jfonseca@vmware.com>
---
 src/gallium/auxiliary/translate/translate_generic.c | 8 ++++----
 src/gallium/auxiliary/translate/translate_sse.c     | 4 ++--
 src/mesa/state_tracker/st_draw.c                    | 2 +-
 3 files changed, 7 insertions(+), 7 deletions(-)

(limited to 'src/mesa')

diff --git a/src/gallium/auxiliary/translate/translate_generic.c b/src/gallium/auxiliary/translate/translate_generic.c
index c9ec2b32bf..c3ec9ae3f4 100644
--- a/src/gallium/auxiliary/translate/translate_generic.c
+++ b/src/gallium/auxiliary/translate/translate_generic.c
@@ -393,10 +393,10 @@ static fetch_func get_fetch_func( enum pipe_format format )
       return &fetch_R8G8B8A8_SSCALED;
 
    case PIPE_FORMAT_B8G8R8A8_UNORM:
-      return &fetch_A8R8G8B8_UNORM;
+      return &fetch_B8G8R8A8_UNORM;
 
    case PIPE_FORMAT_A8R8G8B8_UNORM:
-      return &fetch_B8G8R8A8_UNORM;
+      return &fetch_A8R8G8B8_UNORM;
 
    case PIPE_FORMAT_R32_FIXED:
       return &fetch_R32_FIXED;
@@ -552,10 +552,10 @@ static emit_func get_emit_func( enum pipe_format format )
       return &emit_R8G8B8A8_SSCALED;
 
    case PIPE_FORMAT_B8G8R8A8_UNORM:
-      return &emit_A8R8G8B8_UNORM;
+      return &emit_B8G8R8A8_UNORM;
 
    case PIPE_FORMAT_A8R8G8B8_UNORM:
-      return &emit_B8G8R8A8_UNORM;
+      return &emit_A8R8G8B8_UNORM;
 
    default:
       assert(0); 
diff --git a/src/gallium/auxiliary/translate/translate_sse.c b/src/gallium/auxiliary/translate/translate_sse.c
index 03e093c11e..c13e742738 100644
--- a/src/gallium/auxiliary/translate/translate_sse.c
+++ b/src/gallium/auxiliary/translate/translate_sse.c
@@ -336,7 +336,7 @@ static boolean translate_attr( struct translate_sse *p,
    case PIPE_FORMAT_R32G32B32A32_FLOAT:
       emit_load_R32G32B32A32(p, dataXMM, srcECX);
       break;
-   case PIPE_FORMAT_A8R8G8B8_UNORM:
+   case PIPE_FORMAT_B8G8R8A8_UNORM:
       emit_load_R8G8B8A8_UNORM(p, dataXMM, srcECX);
       emit_swizzle(p, dataXMM, dataXMM, SHUF(Z,Y,X,W));
       break;
@@ -360,7 +360,7 @@ static boolean translate_attr( struct translate_sse *p,
    case PIPE_FORMAT_R32G32B32A32_FLOAT:
       emit_store_R32G32B32A32(p, dstEAX, dataXMM);
       break;
-   case PIPE_FORMAT_A8R8G8B8_UNORM:
+   case PIPE_FORMAT_B8G8R8A8_UNORM:
       emit_swizzle(p, dataXMM, dataXMM, SHUF(Z,Y,X,W));
       emit_store_R8G8B8A8_UNORM(p, dstEAX, dataXMM);
       break;
diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c
index d81b3611b7..c473815c41 100644
--- a/src/mesa/state_tracker/st_draw.c
+++ b/src/mesa/state_tracker/st_draw.c
@@ -184,7 +184,7 @@ st_pipe_vertex_format(GLenum type, GLuint size, GLenum format,
       /* this is an odd-ball case */
       assert(type == GL_UNSIGNED_BYTE);
       assert(normalized);
-      return PIPE_FORMAT_A8R8G8B8_UNORM;
+      return PIPE_FORMAT_B8G8R8A8_UNORM;
    }
 
    if (normalized) {
-- 
cgit v1.2.3


From fab1f07d6ad01463897ae792f4b33738afb07369 Mon Sep 17 00:00:00 2001
From: Jeff Smith <whydoubt@yahoo.com>
Date: Fri, 13 Jun 2008 09:50:43 -0500
Subject: Grammar and spelling fixes

Signed-off-by: Jeff Smith <whydoubt@yahoo.com>
Signed-off-by: Brian Paul <brianp@vmware.com>
---
 docs/README.3DFX                                      | 2 +-
 docs/egl.html                                         | 2 +-
 progs/objviewer/glm.c                                 | 2 +-
 progs/objviewer/glm.h                                 | 2 +-
 progs/tests/vao-01.c                                  | 2 +-
 progs/tests/vao-02.c                                  | 2 +-
 src/gallium/auxiliary/os/os_time.h                    | 2 +-
 src/gallium/drivers/cell/ppu/cell_gen_fragment.c      | 2 +-
 src/gallium/drivers/cell/ppu/cell_spu.c               | 2 +-
 src/gallium/drivers/nv40/nv40_vertprog.c              | 2 +-
 src/gallium/drivers/r300/r300_reg.h                   | 4 ++--
 src/gallium/state_trackers/wgl/stw_framebuffer.h      | 2 +-
 src/glu/sgi/libnurbs/nurbtess/partitionY.h            | 2 +-
 src/glu/sgi/libtess/normal.c                          | 2 +-
 src/mesa/drivers/dri/common/dri_util.c                | 2 +-
 src/mesa/drivers/dri/r128/r128_tex.c                  | 2 +-
 src/mesa/drivers/dri/r200/r200_reg.h                  | 2 +-
 src/mesa/drivers/dri/r300/r300_reg.h                  | 4 ++--
 src/mesa/drivers/dri/radeon/radeon_state.c            | 2 +-
 src/mesa/drivers/x11/xmesa.h                          | 2 +-
 src/mesa/drivers/x11/xmesaP.h                         | 2 +-
 src/mesa/main/dd.h                                    | 2 +-
 src/mesa/main/texcompress_fxt1.c                      | 2 +-
 src/mesa/math/m_debug_util.h                          | 2 +-
 src/mesa/math/m_matrix.c                              | 2 +-
 src/mesa/shader/prog_instruction.h                    | 4 ++--
 src/mesa/shader/program_parser.h                      | 2 +-
 src/mesa/shader/slang/library/slang_common_builtin.gc | 2 +-
 src/mesa/swrast/s_depth.c                             | 2 +-
 src/mesa/vbo/vbo_save_loopback.c                      | 2 +-
 30 files changed, 33 insertions(+), 33 deletions(-)

(limited to 'src/mesa')

diff --git a/docs/README.3DFX b/docs/README.3DFX
index 037e8fa7cc..7feda6f33f 100644
--- a/docs/README.3DFX
+++ b/docs/README.3DFX
@@ -644,7 +644,7 @@ Hints and Special Features:
 
 	- The Voodoo driver supports the GL_EXT_paletted_texture. it works
 	  only with GL_COLOR_INDEX8_EXT, GL_RGBA palettes and the alpha value
-	  is ignored because this is a limitation of the the current Glide
+	  is ignored because this is a limitation of the current Glide
 	  version and of the Voodoo hardware. See Mesa-3.1/3Dfx/demos/paltex.c for
 	  a demo of this extension.
 
diff --git a/docs/egl.html b/docs/egl.html
index 82cc06600b..55907f6cfa 100644
--- a/docs/egl.html
+++ b/docs/egl.html
@@ -28,7 +28,7 @@ cards.</p>
 
 <ol>
 <li>
-<p>Run <code>configure</code> with the desired state trackers and and enable
+<p>Run <code>configure</code> with the desired state trackers and enable
 the Gallium driver for your hardware.  For example</p>
 
 <pre>
diff --git a/progs/objviewer/glm.c b/progs/objviewer/glm.c
index 7c964e489d..77e62bfab1 100644
--- a/progs/objviewer/glm.c
+++ b/progs/objviewer/glm.c
@@ -1041,7 +1041,7 @@ glmFacetNormals(GLMmodel* model)
 
 /* glmVertexNormals: Generates smooth vertex normals for a model.
  * First builds a list of all the triangles each vertex is in.  Then
- * loops through each vertex in the the list averaging all the facet
+ * loops through each vertex in the list averaging all the facet
  * normals of the triangles each vertex is in.  Finally, sets the
  * normal index in the triangle for the vertex to the generated smooth
  * normal.  If the dot product of a facet normal and the facet normal
diff --git a/progs/objviewer/glm.h b/progs/objviewer/glm.h
index 8740b3684d..1a5646fa4c 100644
--- a/progs/objviewer/glm.h
+++ b/progs/objviewer/glm.h
@@ -153,7 +153,7 @@ glmFacetNormals(GLMmodel* model);
 
 /* glmVertexNormals: Generates smooth vertex normals for a model.
  * First builds a list of all the triangles each vertex is in.  Then
- * loops through each vertex in the the list averaging all the facet
+ * loops through each vertex in the list averaging all the facet
  * normals of the triangles each vertex is in.  Finally, sets the
  * normal index in the triangle for the vertex to the generated smooth
  * normal.  If the dot product of a facet normal and the facet normal
diff --git a/progs/tests/vao-01.c b/progs/tests/vao-01.c
index e4a89cb19d..ee528d2243 100644
--- a/progs/tests/vao-01.c
+++ b/progs/tests/vao-01.c
@@ -30,7 +30,7 @@
  * it (via \c glPopClientAttrib).  After popping, the state of the VAO is
  * examined.
  * 
- * According the the APPLE_vertex_array_object spec, the contents of the VAO
+ * According to the APPLE_vertex_array_object spec, the contents of the VAO
  * should be restored to the values that they had when pushed.
  * 
  * \author Ian Romanick <idr@us.ibm.com>
diff --git a/progs/tests/vao-02.c b/progs/tests/vao-02.c
index 9f7f5c2779..c23b4ab05a 100644
--- a/progs/tests/vao-02.c
+++ b/progs/tests/vao-02.c
@@ -30,7 +30,7 @@
  * it (via \c glPopClientAttrib).  After popping, the state of the VAO is
  * examined.
  * 
- * According the the APPLE_vertex_array_object spec, the contents of the VAO
+ * According to the APPLE_vertex_array_object spec, the contents of the VAO
  * should be restored to the values that they had when pushed.
  * 
  * \author Ian Romanick <idr@us.ibm.com>
diff --git a/src/gallium/auxiliary/os/os_time.h b/src/gallium/auxiliary/os/os_time.h
index 5b55c1b374..7e0f67a76b 100644
--- a/src/gallium/auxiliary/os/os_time.h
+++ b/src/gallium/auxiliary/os/os_time.h
@@ -71,7 +71,7 @@ os_time_sleep(int64_t usecs);
 /*
  * Helper function for detecting time outs, taking in account overflow.
  *
- * Returns true the the current time has elapsed beyond the specified interval.
+ * Returns true if the current time has elapsed beyond the specified interval.
  */
 static INLINE boolean
 os_time_timeout(int64_t start,
diff --git a/src/gallium/drivers/cell/ppu/cell_gen_fragment.c b/src/gallium/drivers/cell/ppu/cell_gen_fragment.c
index 576d514741..c54576b3c3 100644
--- a/src/gallium/drivers/cell/ppu/cell_gen_fragment.c
+++ b/src/gallium/drivers/cell/ppu/cell_gen_fragment.c
@@ -1352,7 +1352,7 @@ gen_stencil_values(struct spe_function *f,
     */
    ASSERT(fbS_reg != newS_reg);
 
-   /* The code also assumes the the stencil_max_value is of the form 
+   /* The code also assumes that the stencil_max_value is of the form
     * 2^n-1 and can therefore be used as a mask for the valid bits in 
     * addition to a maximum.  Make sure this is the case as well.
     * The clever math below exploits the fact that incrementing a 
diff --git a/src/gallium/drivers/cell/ppu/cell_spu.c b/src/gallium/drivers/cell/ppu/cell_spu.c
index 28e5e6d706..39284f3a5d 100644
--- a/src/gallium/drivers/cell/ppu/cell_spu.c
+++ b/src/gallium/drivers/cell/ppu/cell_spu.c
@@ -135,7 +135,7 @@ cell_thread_function(void *arg)
 
 /**
  * Create the SPU threads.  This is done once during driver initialization.
- * This involves setting the the "init" message which is sent to each SPU.
+ * This involves setting the "init" message which is sent to each SPU.
  * The init message specifies an SPU id, total number of SPUs, location
  * and number of batch buffers, etc.
  */
diff --git a/src/gallium/drivers/nv40/nv40_vertprog.c b/src/gallium/drivers/nv40/nv40_vertprog.c
index b289eef0fc..c93c5d127c 100644
--- a/src/gallium/drivers/nv40/nv40_vertprog.c
+++ b/src/gallium/drivers/nv40/nv40_vertprog.c
@@ -742,7 +742,7 @@ nv40_vertprog_translate(struct nv40_context *nv40,
 	}
 
 	/* Redirect post-transform vertex position to a temp if user clip
-	 * planes are enabled.  We need to append code the the vtxprog
+	 * planes are enabled.  We need to append code to the vtxprog
 	 * to handle clip planes later.
 	 */
 	if (vp->ucp.nr)  {
diff --git a/src/gallium/drivers/r300/r300_reg.h b/src/gallium/drivers/r300/r300_reg.h
index a249e8b36b..c67cc86871 100644
--- a/src/gallium/drivers/r300/r300_reg.h
+++ b/src/gallium/drivers/r300/r300_reg.h
@@ -540,7 +540,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #       define R300_PVS_FIRST_INST(x)            ((x) << 0)
 #       define R300_PVS_XYZW_VALID_INST(x)       ((x) << 10)
 #       define R300_PVS_LAST_INST(x)             ((x) << 20)
-/* Addresses are relative the the vertex program parameters area. */
+/* Addresses are relative to the vertex program parameters area. */
 #define R300_VAP_PVS_CONST_CNTL             0x22D4
 #       define R300_PVS_CONST_BASE_OFFSET_SHIFT  0
 #       define R300_PVS_MAX_CONST_ADDR_SHIFT     16
@@ -1857,7 +1857,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
  * The destination register index is in FPI1 (color) and FPI3 (alpha)
  * together with enable bits.
  * There are separate enable bits for writing into temporary registers
- * (DSTC_REG_* /DSTA_REG) and and program output registers (DSTC_OUTPUT_*
+ * (DSTC_REG_* /DSTA_REG) and program output registers (DSTC_OUTPUT_*
  * /DSTA_OUTPUT). You can write to both at once, or not write at all (the
  * same index must be used for both).
  *
diff --git a/src/gallium/state_trackers/wgl/stw_framebuffer.h b/src/gallium/state_trackers/wgl/stw_framebuffer.h
index 08cc4973bc..e61e9bf9c2 100644
--- a/src/gallium/state_trackers/wgl/stw_framebuffer.h
+++ b/src/gallium/state_trackers/wgl/stw_framebuffer.h
@@ -45,7 +45,7 @@ struct stw_framebuffer
    /**
     * This mutex has two purposes:
     * - protect the access to the mutable data members below
-    * - prevent the the framebuffer from being deleted while being accessed.
+    * - prevent the framebuffer from being deleted while being accessed.
     * 
     * It is OK to lock this mutex while holding the stw_device::fb_mutex lock, 
     * but the opposite must never happen.
diff --git a/src/glu/sgi/libnurbs/nurbtess/partitionY.h b/src/glu/sgi/libnurbs/nurbtess/partitionY.h
index 8dda409de1..5570c183d7 100644
--- a/src/glu/sgi/libnurbs/nurbtess/partitionY.h
+++ b/src/glu/sgi/libnurbs/nurbtess/partitionY.h
@@ -39,7 +39,7 @@
  *or both at or below v. In addition, at least one of the ajacent verteces is
  *strictly below or above v. 
  * A vertex is a relex vertex if the internals angle is strictly greater than 
- *180. In other words, if the the signed area is negative:
+ *180. In other words, if the signed area is negative:
  *(x1, y1), (x2, y2), (x3, y3) are the three vertices along a polygon, the 
  *order is such that left hand side is inside the polygon. Then (x2,y2) is
  *reflex if: 
diff --git a/src/glu/sgi/libtess/normal.c b/src/glu/sgi/libtess/normal.c
index 0a2494be34..7ab83167bb 100644
--- a/src/glu/sgi/libtess/normal.c
+++ b/src/glu/sgi/libtess/normal.c
@@ -142,7 +142,7 @@ static void CheckOrientation( GLUtesselator *tess )
   GLUhalfEdge *e;
 
   /* When we compute the normal automatically, we choose the orientation
-   * so that the the sum of the signed areas of all contours is non-negative.
+   * so that the sum of the signed areas of all contours is non-negative.
    */
   area = 0;
   for( f = fHead->next; f != fHead; f = f->next ) {
diff --git a/src/mesa/drivers/dri/common/dri_util.c b/src/mesa/drivers/dri/common/dri_util.c
index 890ae51339..75c98825b7 100644
--- a/src/mesa/drivers/dri/common/dri_util.c
+++ b/src/mesa/drivers/dri/common/dri_util.c
@@ -698,7 +698,7 @@ setupLoaderExtensions(__DRIscreen *psp,
  * \param drm_version Version of the kernel DRM.
  * \param frame_buffer Data describing the location and layout of the
  *                     framebuffer.
- * \param pSAREA       Pointer the the SAREA.
+ * \param pSAREA       Pointer to the SAREA.
  * \param fd           Device handle for the DRM.
  * \param extensions   ??
  * \param driver_modes  Returns modes suppoted by the driver
diff --git a/src/mesa/drivers/dri/r128/r128_tex.c b/src/mesa/drivers/dri/r128/r128_tex.c
index 24fbf8f519..4ec4be9a47 100644
--- a/src/mesa/drivers/dri/r128/r128_tex.c
+++ b/src/mesa/drivers/dri/r128/r128_tex.c
@@ -468,7 +468,7 @@ static void r128TexEnv( GLcontext *ctx, GLenum target,
 	  * certain point.  It is better than completely ignoring the LOD
 	  * bias.  Unfortunately there isn't much range in the bias, the
 	  * spec mentions strides that vary between 0.5 and 2.0 but these
-	  * numbers don't seem to relate the the GL LOD bias value at all.
+	  * numbers don't seem to relate to the GL LOD bias value at all.
 	  */
 	 if ( param[0] >= 1.0 ) {
 	    bias = -128;
diff --git a/src/mesa/drivers/dri/r200/r200_reg.h b/src/mesa/drivers/dri/r200/r200_reg.h
index 59115212ce..b3a4940a7a 100644
--- a/src/mesa/drivers/dri/r200/r200_reg.h
+++ b/src/mesa/drivers/dri/r200/r200_reg.h
@@ -690,7 +690,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #       define R200_PVS_CNTL_1_PROGRAM_START_SHIFT   0
 #       define R200_PVS_CNTL_1_POS_END_SHIFT         10
 #       define R200_PVS_CNTL_1_PROGRAM_END_SHIFT     20
-/* Addresses are relative the the vertex program parameters area. */
+/* Addresses are relative to the vertex program parameters area. */
 #define R200_VAP_PVS_CNTL_2                 0x22d4
 #       define R200_PVS_CNTL_2_PARAM_OFFSET_SHIFT 0
 #       define R200_PVS_CNTL_2_PARAM_COUNT_SHIFT  16
diff --git a/src/mesa/drivers/dri/r300/r300_reg.h b/src/mesa/drivers/dri/r300/r300_reg.h
index d18ebab8ff..ac93563ed9 100644
--- a/src/mesa/drivers/dri/r300/r300_reg.h
+++ b/src/mesa/drivers/dri/r300/r300_reg.h
@@ -482,7 +482,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #       define R300_PVS_FIRST_INST_SHIFT         0
 #       define R300_PVS_XYZW_VALID_INST_SHIFT    10
 #       define R300_PVS_LAST_INST_SHIFT          20
-/* Addresses are relative the the vertex program parameters area. */
+/* Addresses are relative to the vertex program parameters area. */
 #define R300_VAP_PVS_CONST_CNTL             0x22D4
 #       define R300_PVS_CONST_BASE_OFFSET_SHIFT  0
 #       define R300_PVS_MAX_CONST_ADDR_SHIFT     16
@@ -1760,7 +1760,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
  * The destination register index is in FPI1 (color) and FPI3 (alpha)
  * together with enable bits.
  * There are separate enable bits for writing into temporary registers
- * (DSTC_REG_* /DSTA_REG) and and program output registers (DSTC_OUTPUT_*
+ * (DSTC_REG_* /DSTA_REG) and program output registers (DSTC_OUTPUT_*
  * /DSTA_OUTPUT). You can write to both at once, or not write at all (the
  * same index must be used for both).
  *
diff --git a/src/mesa/drivers/dri/radeon/radeon_state.c b/src/mesa/drivers/dri/radeon/radeon_state.c
index 0ce97e8697..583751d64d 100644
--- a/src/mesa/drivers/dri/radeon/radeon_state.c
+++ b/src/mesa/drivers/dri/radeon/radeon_state.c
@@ -1900,7 +1900,7 @@ void radeonUploadTexMatrix( r100ContextPtr rmesa,
    So: if we need the q coord in the end (solely determined by the texture
    target, i.e. 2d / 1d / texrect targets) we swap the third and 4th row.
    Additionally, if we don't have texgen but 4 tex coords submitted, we swap
-   column 3 and 4 (for the 2d / 1d / texrect targets) since the the q coord
+   column 3 and 4 (for the 2d / 1d / texrect targets) since the q coord
    will get submitted in the "wrong", i.e. 3rd, slot.
    If an app submits 3 coords for 2d targets, we assume it is saving on vertex
    size and using the texture matrix to swap the r and q coords around (ut2k3
diff --git a/src/mesa/drivers/x11/xmesa.h b/src/mesa/drivers/x11/xmesa.h
index 98139af833..f63626a970 100644
--- a/src/mesa/drivers/x11/xmesa.h
+++ b/src/mesa/drivers/x11/xmesa.h
@@ -287,7 +287,7 @@ extern void XMesaCopySubBuffer( XMesaBuffer b,
 
 
 /*
- * Return a pointer to the the Pixmap or XImage being used as the back
+ * Return a pointer to the Pixmap or XImage being used as the back
  * color buffer of an XMesaBuffer.  This function is a way to get "under
  * the hood" of X/Mesa so one can manipulate the back buffer directly.
  * Input:  b - the XMesaBuffer
diff --git a/src/mesa/drivers/x11/xmesaP.h b/src/mesa/drivers/x11/xmesaP.h
index 3ffd7661e3..e0a6908228 100644
--- a/src/mesa/drivers/x11/xmesaP.h
+++ b/src/mesa/drivers/x11/xmesaP.h
@@ -431,7 +431,7 @@ extern const int xmesa_kernel8[DITH_DY * DITH_DX];
  * If pixelformat==PF_HPCR:
  *
  *      HP Color Recovery dithering               (ad@lms.be 30/08/95)
- *      HP has on it's 8-bit 700-series computers, a feature called
+ *      HP has on its 8-bit 700-series computers, a feature called
  *      'Color Recovery'.  This allows near 24-bit output (so they say).
  *      It is enabled by selecting the 8-bit  TrueColor  visual AND
  *      corresponding  colormap (see tkInitWindow) AND doing some special
diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h
index 197de09b22..7c02faaa53 100644
--- a/src/mesa/main/dd.h
+++ b/src/mesa/main/dd.h
@@ -1072,7 +1072,7 @@ struct dd_function_table {
  * These are the initial values to be installed into dispatch by
  * mesa.  If the T&L driver wants to modify the dispatch table
  * while installed, it must do so itself.  It would be possible for
- * the vertexformat to install it's own initial values for these
+ * the vertexformat to install its own initial values for these
  * functions, but this way there is an obvious list of what is
  * expected of the driver.
  *
diff --git a/src/mesa/main/texcompress_fxt1.c b/src/mesa/main/texcompress_fxt1.c
index 149853f7ac..04acf05e52 100644
--- a/src/mesa/main/texcompress_fxt1.c
+++ b/src/mesa/main/texcompress_fxt1.c
@@ -476,7 +476,7 @@ fxt1_lloyd (GLfloat vec[][MAX_COMP], GLint nv,
     *     for each sample color
     *         sort to nearest vector.
     *
-    *     replace each vector with the centroid of it's matching colors.
+    *     replace each vector with the centroid of its matching colors.
     *
     *     repeat until RMS doesn't improve.
     *
diff --git a/src/mesa/math/m_debug_util.h b/src/mesa/math/m_debug_util.h
index 2e67db8e55..ed11c849ec 100644
--- a/src/mesa/math/m_debug_util.h
+++ b/src/mesa/math/m_debug_util.h
@@ -61,7 +61,7 @@ extern long counter_overhead;
  */
 extern char *mesa_profile;
 
-/* Modify the the number of tests if you like.
+/* Modify the number of tests if you like.
  * We take the minimum of all results, because every error should be
  * positive (time used by other processes, task switches etc).
  * It is assumed that all calculations are done in the cache.
diff --git a/src/mesa/math/m_matrix.c b/src/mesa/math/m_matrix.c
index ef8a40fbec..4b33d0bbb3 100644
--- a/src/mesa/math/m_matrix.c
+++ b/src/mesa/math/m_matrix.c
@@ -889,7 +889,7 @@ _math_matrix_rotate( GLmatrix *mat,
        *  Y-axis to bring the axis vector parallel with the X-axis.  The
        *  rotation about the X-axis is then performed.  Ry and Rz are
        *  simply the respective inverse transforms to bring the arbitrary
-       *  axis back to it's original orientation.  The first transforms
+       *  axis back to its original orientation.  The first transforms
        *  Rz' and Ry' are considered inverses, since the data from the
        *  arbitrary axis gives you info on how to get to it, not how
        *  to get away from it, and an inverse must be applied.
diff --git a/src/mesa/shader/prog_instruction.h b/src/mesa/shader/prog_instruction.h
index 224350caac..28c797a4ba 100644
--- a/src/mesa/shader/prog_instruction.h
+++ b/src/mesa/shader/prog_instruction.h
@@ -97,8 +97,8 @@
 #define COND_EQ  2  /**< equal to zero */
 #define COND_LT  3  /**< less than zero */
 #define COND_UN  4  /**< unordered (NaN) */
-#define COND_GE  5  /**< greater then or equal to zero */
-#define COND_LE  6  /**< less then or equal to zero */
+#define COND_GE  5  /**< greater than or equal to zero */
+#define COND_LE  6  /**< less than or equal to zero */
 #define COND_NE  7  /**< not equal to zero */
 #define COND_TR  8  /**< always true */
 #define COND_FL  9  /**< always false */
diff --git a/src/mesa/shader/program_parser.h b/src/mesa/shader/program_parser.h
index 730466c30f..be952d4b9c 100644
--- a/src/mesa/shader/program_parser.h
+++ b/src/mesa/shader/program_parser.h
@@ -62,7 +62,7 @@ struct asm_symbol {
     */
    unsigned param_binding_swizzle;
 
-   /* This is how many entries in the the program_parameter_list we take up
+   /* This is how many entries in the program_parameter_list we take up
     * with our state tokens or constants. Note that this is _not_ the same as
     * the number of param registers we eventually use.
     */
diff --git a/src/mesa/shader/slang/library/slang_common_builtin.gc b/src/mesa/shader/slang/library/slang_common_builtin.gc
index 8b7771c284..a25ca55bc4 100644
--- a/src/mesa/shader/slang/library/slang_common_builtin.gc
+++ b/src/mesa/shader/slang/library/slang_common_builtin.gc
@@ -695,7 +695,7 @@ vec3 normalize(const vec3 v)
 {
 //   const float s = inversesqrt(dot(v, v));
 //   __retVal = v * s;
-// XXX note, we _could_ use __retVal.w instead of tmp and and save a
+// XXX note, we _could_ use __retVal.w instead of tmp and save a
 // register, but that's actually a compilation error because v is a vec3
 // and the .w suffix is illegal.  Oh well.
    float tmp;
diff --git a/src/mesa/swrast/s_depth.c b/src/mesa/swrast/s_depth.c
index 3e36cf9a7e..ed637cac12 100644
--- a/src/mesa/swrast/s_depth.c
+++ b/src/mesa/swrast/s_depth.c
@@ -526,7 +526,7 @@ _swrast_depth_clamp_span( GLcontext *ctx, SWspan *span )
 
    /* Convert floating point values in [0,1] to device Z coordinates in
     * [0, DepthMax].
-    * ex: If the the Z buffer has 24 bits, DepthMax = 0xffffff.
+    * ex: If the Z buffer has 24 bits, DepthMax = 0xffffff.
     * 
     * XXX this all falls apart if we have 31 or more bits of Z because
     * the triangle rasterization code produces unsigned Z values.  Negative
diff --git a/src/mesa/vbo/vbo_save_loopback.c b/src/mesa/vbo/vbo_save_loopback.c
index f253c854d2..3f581ea02d 100644
--- a/src/mesa/vbo/vbo_save_loopback.c
+++ b/src/mesa/vbo/vbo_save_loopback.c
@@ -78,7 +78,7 @@ struct loopback_attr {
 };
 
 /* Don't emit ends and begins on wrapped primitives.  Don't replay
- * wrapped vertices.  If we get here, it's probably because the the
+ * wrapped vertices.  If we get here, it's probably because the
  * precalculated wrapping is wrong.
  */
 static void loopback_prim( GLcontext *ctx,
-- 
cgit v1.2.3


From 4b598ce226fcefbefb0243c418cc759c0fb91d79 Mon Sep 17 00:00:00 2001
From: Luc Verhaegen <libv@skynet.be>
Date: Fri, 12 Mar 2010 08:35:22 +0100
Subject: dri/r700: include shader/programopt.h instead of programopt.c.

Signed-off-by: Brian Paul <brianp@vmware.com>
---
 src/mesa/drivers/dri/r600/r700_vertprog.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r600/r700_vertprog.c b/src/mesa/drivers/dri/r600/r700_vertprog.c
index 07e0adc890..05c65164d6 100644
--- a/src/mesa/drivers/dri/r600/r700_vertprog.c
+++ b/src/mesa/drivers/dri/r600/r700_vertprog.c
@@ -42,7 +42,7 @@
 #include "radeon_debug.h"
 #include "r600_context.h"
 #include "r600_cmdbuf.h"
-#include "shader/programopt.c"
+#include "shader/programopt.h"
 
 #include "r700_debug.h"
 #include "r700_vertprog.h"
-- 
cgit v1.2.3


From d1ca1599f0319f5c99852ce24420aa592e806db0 Mon Sep 17 00:00:00 2001
From: Alex Deucher <alexdeucher@gmail.com>
Date: Fri, 12 Mar 2010 11:16:50 -0500
Subject: r100/r200/r300/r300: only enable accelerated pixel ops with kms

fixes fdo bug 27043
---
 src/mesa/drivers/dri/r200/r200_context.c   |  2 +-
 src/mesa/drivers/dri/r200/r200_state.c     | 11 +++++++----
 src/mesa/drivers/dri/r200/r200_state.h     |  2 +-
 src/mesa/drivers/dri/r300/r300_context.c   |  2 +-
 src/mesa/drivers/dri/r300/r300_state.c     | 10 ++++++----
 src/mesa/drivers/dri/r300/r300_state.h     |  2 +-
 src/mesa/drivers/dri/r600/r600_context.c   |  2 +-
 src/mesa/drivers/dri/r600/r700_state.c     | 11 ++++++-----
 src/mesa/drivers/dri/r600/r700_state.h     |  2 +-
 src/mesa/drivers/dri/radeon/radeon_state.c |  8 +++++---
 10 files changed, 30 insertions(+), 22 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r200/r200_context.c b/src/mesa/drivers/dri/r200/r200_context.c
index 5739443bdf..36a29350cc 100644
--- a/src/mesa/drivers/dri/r200/r200_context.c
+++ b/src/mesa/drivers/dri/r200/r200_context.c
@@ -324,7 +324,7 @@ GLboolean r200CreateContext( const __GLcontextModes *glVisual,
    _mesa_init_driver_functions(&functions);
    r200InitDriverFuncs(&functions);
    r200InitIoctlFuncs(&functions);
-   r200InitStateFuncs(&functions);
+   r200InitStateFuncs(&rmesa->radeon, &functions);
    r200InitTextureFuncs(&rmesa->radeon, &functions);
    r200InitShaderFuncs(&functions);
    radeonInitQueryObjFunctions(&functions);
diff --git a/src/mesa/drivers/dri/r200/r200_state.c b/src/mesa/drivers/dri/r200/r200_state.c
index 71f764aaae..9c2ac05ad6 100644
--- a/src/mesa/drivers/dri/r200/r200_state.c
+++ b/src/mesa/drivers/dri/r200/r200_state.c
@@ -2488,16 +2488,19 @@ static void r200PolygonStipple( GLcontext *ctx, const GLubyte *mask )
 }
 /* Initialize the driver's state functions.
  */
-void r200InitStateFuncs( struct dd_function_table *functions )
+void r200InitStateFuncs( radeonContextPtr radeon, struct dd_function_table *functions )
 {
    functions->UpdateState		= r200InvalidateState;
    functions->LightingSpaceChange	= r200LightingSpaceChange;
 
    functions->DrawBuffer		= radeonDrawBuffer;
    functions->ReadBuffer		= radeonReadBuffer;
-   functions->CopyPixels                = _mesa_meta_CopyPixels;
-   functions->DrawPixels                = _mesa_meta_DrawPixels;
-   functions->ReadPixels                = radeonReadPixels;
+
+   if (radeon->radeonScreen->kernel_mm) {
+	   functions->CopyPixels                = _mesa_meta_CopyPixels;
+	   functions->DrawPixels                = _mesa_meta_DrawPixels;
+	   functions->ReadPixels                = radeonReadPixels;
+   }
 
    functions->AlphaFunc			= r200AlphaFunc;
    functions->BlendColor		= r200BlendColor;
diff --git a/src/mesa/drivers/dri/r200/r200_state.h b/src/mesa/drivers/dri/r200/r200_state.h
index 7b9b0c106a..327ba837e2 100644
--- a/src/mesa/drivers/dri/r200/r200_state.h
+++ b/src/mesa/drivers/dri/r200/r200_state.h
@@ -38,7 +38,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "r200_context.h"
 
 extern void r200InitState( r200ContextPtr rmesa );
-extern void r200InitStateFuncs( struct dd_function_table *functions );
+extern void r200InitStateFuncs( radeonContextPtr radeon, struct dd_function_table *functions );
 extern void r200InitTnlFuncs( GLcontext *ctx );
 
 extern void r200UpdateMaterial( GLcontext *ctx );
diff --git a/src/mesa/drivers/dri/r300/r300_context.c b/src/mesa/drivers/dri/r300/r300_context.c
index 364e0ba6b6..cfeb5407e9 100644
--- a/src/mesa/drivers/dri/r300/r300_context.c
+++ b/src/mesa/drivers/dri/r300/r300_context.c
@@ -500,7 +500,7 @@ GLboolean r300CreateContext(const __GLcontextModes * glVisual,
 
 	_mesa_init_driver_functions(&functions);
 	r300InitIoctlFuncs(&functions);
-	r300InitStateFuncs(&functions);
+	r300InitStateFuncs(&r300->radeon, &functions);
 	r300InitTextureFuncs(&r300->radeon, &functions);
 	r300InitShaderFuncs(&functions);
 	radeonInitQueryObjFunctions(&functions);
diff --git a/src/mesa/drivers/dri/r300/r300_state.c b/src/mesa/drivers/dri/r300/r300_state.c
index e75c88e101..749a2464e7 100644
--- a/src/mesa/drivers/dri/r300/r300_state.c
+++ b/src/mesa/drivers/dri/r300/r300_state.c
@@ -2354,7 +2354,7 @@ static void r300RenderMode(GLcontext * ctx, GLenum mode)
 /**
  * Initialize driver's state callback functions
  */
-void r300InitStateFuncs(struct dd_function_table *functions)
+void r300InitStateFuncs(radeonContextPtr radeon, struct dd_function_table *functions)
 {
 
 	functions->UpdateState = r300InvalidateState;
@@ -2396,9 +2396,11 @@ void r300InitStateFuncs(struct dd_function_table *functions)
 	functions->DrawBuffer = radeonDrawBuffer;
 	functions->ReadBuffer = radeonReadBuffer;
 
-	functions->CopyPixels = _mesa_meta_CopyPixels;
-	functions->DrawPixels = _mesa_meta_DrawPixels;
-	functions->ReadPixels = radeonReadPixels;
+	if (radeon->radeonScreen->kernel_mm) {
+		functions->CopyPixels = _mesa_meta_CopyPixels;
+		functions->DrawPixels = _mesa_meta_DrawPixels;
+		functions->ReadPixels = radeonReadPixels;
+	}
 }
 
 void r300InitShaderFunctions(r300ContextPtr r300)
diff --git a/src/mesa/drivers/dri/r300/r300_state.h b/src/mesa/drivers/dri/r300/r300_state.h
index d46bf9f179..e70f84f4e4 100644
--- a/src/mesa/drivers/dri/r300/r300_state.h
+++ b/src/mesa/drivers/dri/r300/r300_state.h
@@ -55,7 +55,7 @@ void r300UpdateDrawBuffer (GLcontext * ctx);
 void r300UpdateShaders (r300ContextPtr rmesa);
 void r300UpdateShaderStates (r300ContextPtr rmesa);
 void r300InitState (r300ContextPtr r300);
-void r300InitStateFuncs (struct dd_function_table *functions);
+void r300InitStateFuncs (radeonContextPtr radeon, struct dd_function_table *functions);
 void r300VapCntl(r300ContextPtr rmesa, GLuint input_count, GLuint output_count, GLuint temp_count);
 void r300SetupVAP(GLcontext *ctx, GLuint InputsRead, GLuint OutputsWritten);
 
diff --git a/src/mesa/drivers/dri/r600/r600_context.c b/src/mesa/drivers/dri/r600/r600_context.c
index 76d5027649..fddac2f9bd 100644
--- a/src/mesa/drivers/dri/r600/r600_context.c
+++ b/src/mesa/drivers/dri/r600/r600_context.c
@@ -384,7 +384,7 @@ GLboolean r600CreateContext(const __GLcontextModes * glVisual,
 	 */
 	_mesa_init_driver_functions(&functions);
 
-	r700InitStateFuncs(&functions);
+	r700InitStateFuncs(&r600->radeon, &functions);
 	r600InitTextureFuncs(&r600->radeon, &functions);
 	r700InitShaderFuncs(&functions);
 	radeonInitQueryObjFunctions(&functions);
diff --git a/src/mesa/drivers/dri/r600/r700_state.c b/src/mesa/drivers/dri/r600/r700_state.c
index 8797f8059a..2953ffd028 100644
--- a/src/mesa/drivers/dri/r600/r700_state.c
+++ b/src/mesa/drivers/dri/r600/r700_state.c
@@ -1817,7 +1817,7 @@ void r700InitState(GLcontext * ctx) //-------------------
 
 }
 
-void r700InitStateFuncs(struct dd_function_table *functions) //-----------------
+void r700InitStateFuncs(radeonContextPtr radeon, struct dd_function_table *functions)
 {
 	functions->UpdateState = r700InvalidateState;
 	functions->AlphaFunc = r700AlphaFunc;
@@ -1861,9 +1861,10 @@ void r700InitStateFuncs(struct dd_function_table *functions) //-----------------
 	functions->DrawBuffer = radeonDrawBuffer;
 	functions->ReadBuffer = radeonReadBuffer;
 
-	functions->CopyPixels = _mesa_meta_CopyPixels;
-	functions->DrawPixels = _mesa_meta_DrawPixels;
-	functions->ReadPixels = radeonReadPixels;
-
+	if (radeon->radeonScreen->kernel_mm) {
+		functions->CopyPixels = _mesa_meta_CopyPixels;
+		functions->DrawPixels = _mesa_meta_DrawPixels;
+		functions->ReadPixels = radeonReadPixels;
+	}
 }
 
diff --git a/src/mesa/drivers/dri/r600/r700_state.h b/src/mesa/drivers/dri/r600/r700_state.h
index 60c6a7f23c..56885e0b15 100644
--- a/src/mesa/drivers/dri/r600/r700_state.h
+++ b/src/mesa/drivers/dri/r600/r700_state.h
@@ -40,7 +40,7 @@ extern void r700UpdateShaderStates(GLcontext * ctx);
 extern void r700UpdateViewportOffset(GLcontext * ctx);
 
 extern void r700InitState (GLcontext * ctx);
-extern void r700InitStateFuncs (struct dd_function_table *functions);
+extern void r700InitStateFuncs (radeonContextPtr radeon, struct dd_function_table *functions);
 
 extern void r700SetScissor(context_t *context);
 
diff --git a/src/mesa/drivers/dri/radeon/radeon_state.c b/src/mesa/drivers/dri/radeon/radeon_state.c
index ec5612fdd7..ebae0792aa 100644
--- a/src/mesa/drivers/dri/radeon/radeon_state.c
+++ b/src/mesa/drivers/dri/radeon/radeon_state.c
@@ -2249,9 +2249,11 @@ void radeonInitStateFuncs( GLcontext *ctx , GLboolean dri2 )
 
    ctx->Driver.DrawBuffer		= radeonDrawBuffer;
    ctx->Driver.ReadBuffer		= radeonReadBuffer;
-   ctx->Driver.CopyPixels               = _mesa_meta_CopyPixels;
-   ctx->Driver.DrawPixels               = _mesa_meta_DrawPixels;
-   ctx->Driver.ReadPixels               = radeonReadPixels;
+   if (dri2) {
+	   ctx->Driver.CopyPixels               = _mesa_meta_CopyPixels;
+	   ctx->Driver.DrawPixels               = _mesa_meta_DrawPixels;
+	   ctx->Driver.ReadPixels               = radeonReadPixels;
+   }
 
    ctx->Driver.AlphaFunc		= radeonAlphaFunc;
    ctx->Driver.BlendEquationSeparate	= radeonBlendEquationSeparate;
-- 
cgit v1.2.3


From ba541b0769768ffa09562938d3b49690669948b8 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Wed, 10 Mar 2010 15:32:05 -0800
Subject: i965: Use the SEL instruction to implement MIN and MAX.

Saves an instruction over doing conditional moves.
---
 src/mesa/drivers/dri/i965/brw_wm_emit.c | 14 +++-----------
 1 file changed, 3 insertions(+), 11 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_wm_emit.c b/src/mesa/drivers/dri/i965/brw_wm_emit.c
index 412e09b76a..b169576017 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_emit.c
@@ -633,14 +633,10 @@ void emit_max(struct brw_compile *p,
 
    for (i = 0; i < 4; i++) {
       if (mask & (1<<i)) {	
-	 brw_set_saturate(p, (mask & SATURATE) ? 1 : 0);
-	 brw_MOV(p, dst[i], arg0[i]);
-	 brw_set_saturate(p, 0);
-
-	 brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_L, arg0[i], arg1[i]);
+	 brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_GE, arg0[i], arg1[i]);
 
 	 brw_set_saturate(p, (mask & SATURATE) ? 1 : 0);
-	 brw_MOV(p, dst[i], arg1[i]);
+	 brw_SEL(p, dst[i], arg0[i], arg1[i]);
 	 brw_set_saturate(p, 0);
 	 brw_set_predicate_control_flag_value(p, 0xff);
       }
@@ -657,14 +653,10 @@ void emit_min(struct brw_compile *p,
 
    for (i = 0; i < 4; i++) {
       if (mask & (1<<i)) {	
-	 brw_set_saturate(p, (mask & SATURATE) ? 1 : 0);
-	 brw_MOV(p, dst[i], arg1[i]);
-	 brw_set_saturate(p, 0);
-
 	 brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_L, arg0[i], arg1[i]);
 
 	 brw_set_saturate(p, (mask & SATURATE) ? 1 : 0);
-	 brw_MOV(p, dst[i], arg0[i]);
+	 brw_SEL(p, dst[i], arg0[i], arg1[i]);
 	 brw_set_saturate(p, 0);
 	 brw_set_predicate_control_flag_value(p, 0xff);
       }
-- 
cgit v1.2.3


From 52cea5090ceb56105464d60b989c2c36ec9c4b16 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Wed, 10 Mar 2010 15:44:32 -0800
Subject: i965: When doing a swizzled kill pixel, don't do redundant channel
 compares.

This was obvious when looking at the compiled output of ETQW's
shaders.
---
 src/mesa/drivers/dri/i965/brw_wm_emit.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_wm_emit.c b/src/mesa/drivers/dri/i965/brw_wm_emit.c
index b169576017..3a4057bb6b 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_emit.c
@@ -1110,11 +1110,19 @@ static void emit_kil( struct brw_wm_compile *c,
 {
    struct brw_compile *p = &c->func;
    struct brw_reg r0uw = retype(brw_vec1_grf(0, 0), BRW_REGISTER_TYPE_UW);
-   GLuint i;
-   
-   /* XXX - usually won't need 4 compares!
-    */
+   GLuint i, j;
+
    for (i = 0; i < 4; i++) {
+      /* Check if we've already done the comparison for this reg
+       * -- common when someone does KIL TEMP.wwww.
+       */
+      for (j = 0; j < i; j++) {
+	 if (memcmp(&arg0[j], &arg0[i], sizeof(arg0[0])) == 0)
+	    break;
+      }
+      if (j != i)
+	 continue;
+
       brw_push_insn_state(p);
       brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_GE, arg0[i], brw_imm_f(0));   
       brw_set_predicate_control_flag_value(p, 0xff);
-- 
cgit v1.2.3


From 512d8ca2f34bcaa96e18daace4ae9f95e679471e Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Wed, 10 Mar 2010 17:16:39 -0800
Subject: i965: Fix up VS DP4 sequences to avoid dependency control.

This is recommended by the B-Spec.  I wasn't able to measure any
difference in ETQW.
---
 src/mesa/drivers/dri/i965/Makefile       |   1 +
 src/mesa/drivers/dri/i965/brw_eu.h       |   5 ++
 src/mesa/drivers/dri/i965/brw_optimize.c | 115 +++++++++++++++++++++++++++++++
 src/mesa/drivers/dri/i965/brw_vs_emit.c  |   2 +
 4 files changed, 123 insertions(+)
 create mode 100644 src/mesa/drivers/dri/i965/brw_optimize.c

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/Makefile b/src/mesa/drivers/dri/i965/Makefile
index a242580273..842d4b7aa1 100644
--- a/src/mesa/drivers/dri/i965/Makefile
+++ b/src/mesa/drivers/dri/i965/Makefile
@@ -54,6 +54,7 @@ DRIVER_SOURCES = \
 	brw_gs_emit.c \
 	brw_gs_state.c \
 	brw_misc_state.c \
+	brw_optimize.c \
 	brw_program.c \
 	brw_queryobj.c \
 	brw_sf.c \
diff --git a/src/mesa/drivers/dri/i965/brw_eu.h b/src/mesa/drivers/dri/i965/brw_eu.h
index 8e9117b644..4f55158e8f 100644
--- a/src/mesa/drivers/dri/i965/brw_eu.h
+++ b/src/mesa/drivers/dri/i965/brw_eu.h
@@ -966,4 +966,9 @@ void brw_math_invert( struct brw_compile *p,
 
 void brw_set_src1( struct brw_instruction *insn,
                           struct brw_reg reg );
+
+
+/* brw_optimize.c */
+void brw_optimize(struct brw_compile *p);
+
 #endif
diff --git a/src/mesa/drivers/dri/i965/brw_optimize.c b/src/mesa/drivers/dri/i965/brw_optimize.c
new file mode 100644
index 0000000000..57df9ea115
--- /dev/null
+++ b/src/mesa/drivers/dri/i965/brw_optimize.c
@@ -0,0 +1,115 @@
+/*
+ * Copyright © 2010 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ * Authors:
+ *    Eric Anholt <eric@anholt.net>
+ *
+ */
+
+#include "main/macros.h"
+#include "shader/program.h"
+#include "shader/prog_parameter.h"
+#include "shader/prog_print.h"
+#include "brw_context.h"
+#include "brw_defines.h"
+#include "brw_eu.h"
+
+static GLboolean
+is_single_channel_dp4(struct brw_instruction *insn)
+{
+   if (insn->header.opcode != BRW_OPCODE_DP4 ||
+       insn->header.execution_size != BRW_EXECUTE_8 ||
+       insn->header.access_mode != BRW_ALIGN_16 ||
+       insn->bits1.da1.dest_reg_file != BRW_GENERAL_REGISTER_FILE)
+      return GL_FALSE;
+
+   if (!is_power_of_two(insn->bits1.da16.dest_writemask))
+      return GL_FALSE;
+
+   return GL_TRUE;
+}
+
+/**
+ * Sets the dependency control fields on DP4 instructions.
+ *
+ * The hardware only tracks dependencies on a register basis, so when
+ * you do:
+ *
+ * DP4 dst.x src1 src2
+ * DP4 dst.y src1 src3
+ * DP4 dst.z src1 src4
+ * DP4 dst.w src1 src5
+ *
+ * It will wait to do the DP4 dst.y until the dst.x is resolved, etc.
+ * We can examine our instruction stream and set the dependency
+ * control fields to tell the hardware when to do it.
+ *
+ * We may want to extend this to other instructions that are used to
+ * fill in a channel at a time of the destination register.
+ */
+static void
+brw_set_dp4_dependency_control(struct brw_compile *p)
+{
+   int i;
+
+   for (i = 1; i < p->nr_insn; i++) {
+      struct brw_instruction *insn = &p->store[i];
+      struct brw_instruction *prev = &p->store[i - 1];
+
+      if (!is_single_channel_dp4(prev))
+	 continue;
+
+      if (!is_single_channel_dp4(insn)) {
+	 i++;
+	 continue;
+      }
+
+      /* Only avoid hw dep control if the write masks are different
+       * channels of one reg.
+       */
+      if (insn->bits1.da16.dest_writemask == prev->bits1.da16.dest_writemask)
+	 continue;
+      if (insn->bits1.da16.dest_reg_nr != prev->bits1.da16.dest_reg_nr)
+	 continue;
+
+      /* Check if the second instruction depends on the previous one
+       * for a src.
+       */
+      if (insn->bits1.da1.src0_reg_file == BRW_GENERAL_REGISTER_FILE &&
+	  (insn->bits2.da1.src0_address_mode != BRW_ADDRESS_DIRECT ||
+	   insn->bits2.da1.src0_reg_nr == insn->bits1.da16.dest_reg_nr))
+	  continue;
+      if (insn->bits1.da1.src1_reg_file == BRW_GENERAL_REGISTER_FILE &&
+	  (insn->bits3.da1.src1_address_mode != BRW_ADDRESS_DIRECT ||
+	   insn->bits3.da1.src1_reg_nr == insn->bits1.da16.dest_reg_nr))
+	  continue;
+
+      prev->header.dependency_control |= BRW_DEPENDENCY_NOTCLEARED;
+      insn->header.dependency_control |= BRW_DEPENDENCY_NOTCHECKED;
+   }
+}
+
+void
+brw_optimize(struct brw_compile *p)
+{
+   brw_set_dp4_dependency_control(p);
+}
diff --git a/src/mesa/drivers/dri/i965/brw_vs_emit.c b/src/mesa/drivers/dri/i965/brw_vs_emit.c
index a48804a660..14c3b936b7 100644
--- a/src/mesa/drivers/dri/i965/brw_vs_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_vs_emit.c
@@ -1825,6 +1825,8 @@ void brw_vs_emit(struct brw_vs_compile *c )
 
    post_vs_emit(c, end_inst, last_inst);
 
+   brw_optimize(p);
+
    if (INTEL_DEBUG & DEBUG_VS) {
       int i;
 
-- 
cgit v1.2.3


From 8ef3b1834a896927bdd4f2aea552cdb732849da9 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Wed, 10 Mar 2010 17:35:02 -0800
Subject: i965: Do VS SGT, SLT, and friends using CMP, SEL instead of CMP, MOV,
 MOV.

---
 src/mesa/drivers/dri/i965/brw_vs_emit.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_vs_emit.c b/src/mesa/drivers/dri/i965/brw_vs_emit.c
index 14c3b936b7..d16e916832 100644
--- a/src/mesa/drivers/dri/i965/brw_vs_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_vs_emit.c
@@ -384,9 +384,8 @@ static void emit_sop( struct brw_vs_compile *c,
 {
    struct brw_compile *p = &c->func;
 
-   brw_MOV(p, dst, brw_imm_f(0.0f));
-   brw_CMP(p, brw_null_reg(), cond, arg0, arg1);
-   brw_MOV(p, dst, brw_imm_f(1.0f));
+   brw_CMP(p, brw_null_reg(), cond, arg1, arg0);
+   brw_SEL(p, dst, brw_null_reg(), brw_imm_f(1.0f));
    brw_set_predicate_control_flag_value(p, 0xff);
 }
 
-- 
cgit v1.2.3


From 46450c1f3f93bf4dc96696fc7e0f0eb808d9c08a Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Wed, 10 Mar 2010 17:38:33 -0800
Subject: i965: Do FS SLT, SGT, and friends using CMP, SEL instead of CMP, MOV,
 MOV.

---
 src/mesa/drivers/dri/i965/brw_wm_emit.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_wm_emit.c b/src/mesa/drivers/dri/i965/brw_wm_emit.c
index 3a4057bb6b..438fcc7178 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_emit.c
@@ -534,11 +534,8 @@ void emit_sop(struct brw_compile *p,
    for (i = 0; i < 4; i++) {
       if (mask & (1<<i)) {	
 	 brw_push_insn_state(p);
-	 brw_CMP(p, brw_null_reg(), cond, arg0[i], arg1[i]);
-	 brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-	 brw_MOV(p, dst[i], brw_imm_f(0));
-	 brw_set_predicate_control(p, BRW_PREDICATE_NORMAL);
-	 brw_MOV(p, dst[i], brw_imm_f(1.0));
+	 brw_CMP(p, brw_null_reg(), cond, arg1[i], arg0[i]);
+	 brw_SEL(p, dst[i], brw_null_reg(), brw_imm_f(1.0));
 	 brw_pop_insn_state(p);
       }
    }
-- 
cgit v1.2.3


From f4f2737e8767d3808d876c3f7e65ca9f48faf624 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Wed, 10 Mar 2010 18:48:23 -0800
Subject: i965: Clarify that DELTAXY always occurs for both X and Y.

---
 src/mesa/drivers/dri/i965/brw_wm_emit.c | 27 +++++++++++++--------------
 1 file changed, 13 insertions(+), 14 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_wm_emit.c b/src/mesa/drivers/dri/i965/brw_wm_emit.c
index 438fcc7178..2d1d011e55 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_emit.c
@@ -125,23 +125,22 @@ void emit_delta_xy(struct brw_compile *p,
 {
    struct brw_reg r1 = brw_vec1_grf(1, 0);
 
+   if (mask == 0)
+      return;
+
+   assert(mask == WRITEMASK_XY);
+
    /* Calc delta X,Y by subtracting origin in r1 from the pixel
     * centers.
     */
-   if (mask & WRITEMASK_X) {
-      brw_ADD(p,
-	      dst[0],
-	      retype(arg0[0], BRW_REGISTER_TYPE_UW),
-	      negate(r1));
-   }
-
-   if (mask & WRITEMASK_Y) {
-      brw_ADD(p,
-	      dst[1],
-	      retype(arg0[1], BRW_REGISTER_TYPE_UW),
-	      negate(suboffset(r1,1)));
-
-   }
+   brw_ADD(p,
+	   dst[0],
+	   retype(arg0[0], BRW_REGISTER_TYPE_UW),
+	   negate(r1));
+   brw_ADD(p,
+	   dst[1],
+	   retype(arg0[1], BRW_REGISTER_TYPE_UW),
+	   negate(suboffset(r1,1)));
 }
 
 void emit_wpos_xy(struct brw_wm_compile *c,
-- 
cgit v1.2.3


From f1d6baee0b02aaac34f9476eee92469281336b26 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Fri, 12 Mar 2010 15:10:22 -0800
Subject: i965: Clarify the roles of emit_pixel_xy(), emit_delta_xy(),
 emit_wpos_xy().

---
 src/mesa/drivers/dri/i965/brw_wm_emit.c | 26 +++++++++++++++++++-------
 1 file changed, 19 insertions(+), 7 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/i965/brw_wm_emit.c b/src/mesa/drivers/dri/i965/brw_wm_emit.c
index 2d1d011e55..05e464d4b6 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_emit.c
@@ -62,7 +62,13 @@ static INLINE struct brw_reg sechalf( struct brw_reg reg )
 }
 
 
-/* Payload R0:
+/**
+ * Computes the screen-space x,y position of the pixels.
+ *
+ * This will be used by emit_delta_xy() or emit_wpos_xy() for
+ * interpolation of attributes..
+ *
+ * Payload R0:
  *
  * R0.0 -- pixel mask, one bit for each of 4 pixels in 4 tiles,
  *         corresponding to each of the 16 execution channels.
@@ -77,7 +83,6 @@ static INLINE struct brw_reg sechalf( struct brw_reg reg )
  * R1.7 -- ?
  * R1.8 -- ?
  */
-
 void emit_pixel_xy(struct brw_wm_compile *c,
 		   const struct brw_reg *dst,
 		   GLuint mask)
@@ -117,7 +122,14 @@ void emit_pixel_xy(struct brw_wm_compile *c,
    brw_pop_insn_state(p);
 }
 
-
+/**
+ * Computes the screen-space x,y distance of the pixels from the start
+ * vertex.
+ *
+ * This will be used in linterp or pinterp with the start vertex value
+ * and the Cx, Cy, and C0 coefficients passed in from the setup engine
+ * to produce interpolated attribute values.
+ */
 void emit_delta_xy(struct brw_compile *p,
 		   const struct brw_reg *dst,
 		   GLuint mask,
@@ -131,7 +143,7 @@ void emit_delta_xy(struct brw_compile *p,
    assert(mask == WRITEMASK_XY);
 
    /* Calc delta X,Y by subtracting origin in r1 from the pixel
-    * centers.
+    * centers produced by emit_pixel_xy().
     */
    brw_ADD(p,
 	   dst[0],
@@ -143,6 +155,9 @@ void emit_delta_xy(struct brw_compile *p,
 	   negate(suboffset(r1,1)));
 }
 
+/**
+ * Computes the pixel offset from the window origin for gl_FragCoord().
+ */
 void emit_wpos_xy(struct brw_wm_compile *c,
 		  const struct brw_reg *dst,
 		  GLuint mask,
@@ -150,9 +165,6 @@ void emit_wpos_xy(struct brw_wm_compile *c,
 {
    struct brw_compile *p = &c->func;
 
-   /* Calculate the pixel offset from window bottom left into destination
-    * X and Y channels.
-    */
    if (mask & WRITEMASK_X) {
       if (c->fp->program.PixelCenterInteger) {
 	 /* X' = X */
-- 
cgit v1.2.3


From ecfcb1466a36b6f4389a97abcc76908e68feb4fe Mon Sep 17 00:00:00 2001
From: Corbin Simpson <MostAwesomeDude@gmail.com>
Date: Fri, 12 Mar 2010 17:58:59 -0800
Subject: Revert "st/mesa: Always recalculate invalid index bounds."

This reverts commit 50876ddaaff72a324ac45e255985e0f84e108594.

Per ML discussion.
---
 src/mesa/state_tracker/st_draw.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c
index c473815c41..7f45e3f548 100644
--- a/src/mesa/state_tracker/st_draw.c
+++ b/src/mesa/state_tracker/st_draw.c
@@ -542,9 +542,9 @@ st_draw_vbo(GLcontext *ctx,
    assert(ctx->NewState == 0x0);
 
    /* Gallium probably doesn't want this in some cases. */
-   if (index_bounds_valid != GL_TRUE) {
-      vbo_get_minmax_index(ctx, prims, ib, &min_index, &max_index);
-   }
+   if (!index_bounds_valid)
+      if (!vbo_all_varyings_in_vbos(arrays))
+	 vbo_get_minmax_index(ctx, prims, ib, &min_index, &max_index);
 
    /* sanity check for pointer arithmetic below */
    assert(sizeof(arrays[0]->Ptr[0]) == 1);
-- 
cgit v1.2.3


From 1a8a230a61289392e8300901dfabd7911799cbc3 Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Sat, 13 Mar 2010 16:46:19 +0100
Subject: radeon: fix glCopyTex(Sub)Image

Fallback to swrast for software renderbuffers
---
 src/mesa/drivers/dri/radeon/radeon_tex_copy.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/radeon/radeon_tex_copy.c b/src/mesa/drivers/dri/radeon/radeon_tex_copy.c
index e57d77e7ef..fb6f2e56af 100644
--- a/src/mesa/drivers/dri/radeon/radeon_tex_copy.c
+++ b/src/mesa/drivers/dri/radeon/radeon_tex_copy.c
@@ -59,18 +59,27 @@ do_copy_texsubimage(GLcontext *ctx,
     }
 
     if (_mesa_get_format_bits(timg->base.TexFormat, GL_DEPTH_BITS) > 0) {
-        rrb = radeon_renderbuffer(ctx->ReadBuffer->_DepthBuffer);
+        if (ctx->ReadBuffer->_DepthBuffer && ctx->ReadBuffer->_DepthBuffer->Wrapped) {
+            rrb = radeon_renderbuffer(ctx->ReadBuffer->_DepthBuffer->Wrapped);
+        } else {
+            rrb = radeon_renderbuffer(ctx->ReadBuffer->_DepthBuffer);
+        }
         flip_y = ctx->ReadBuffer->Attachment[BUFFER_DEPTH].Type == GL_NONE;
     } else {
         rrb = radeon_renderbuffer(ctx->ReadBuffer->_ColorReadBuffer);
         flip_y = ctx->ReadBuffer->Attachment[BUFFER_COLOR0].Type == GL_NONE;
     }
 
+    // This is software renderbuffer, fallback to swrast
+    if (!rrb) {
+        return GL_FALSE;
+    }
+
     if (!timg->mt) {
         radeon_validate_texture_miptree(ctx, &tobj->base);
     }
 
-    assert(rrb && rrb->bo);
+    assert(rrb->bo);
     assert(timg->mt);
     assert(timg->mt->bo);
     assert(timg->base.Width >= dstx + width);
-- 
cgit v1.2.3


From aba40bd4345e36fb56817673369b275f0e9a9c43 Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Sat, 13 Mar 2010 17:27:51 +0100
Subject: radeon: fix gl format to mesa format mapping and add GL_BGRA formats

---
 src/mesa/drivers/dri/radeon/radeon_pixel_read.c | 25 ++++++++++++++++++-------
 1 file changed, 18 insertions(+), 7 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/radeon/radeon_pixel_read.c b/src/mesa/drivers/dri/radeon/radeon_pixel_read.c
index b180c1d9a5..dadb8002c7 100644
--- a/src/mesa/drivers/dri/radeon/radeon_pixel_read.c
+++ b/src/mesa/drivers/dri/radeon/radeon_pixel_read.c
@@ -50,22 +50,33 @@ static gl_format gl_format_and_type_to_mesa_format(GLenum format, GLenum type)
             break;
         case GL_RGBA:
             switch (type) {
-                case GL_UNSIGNED_BYTE:
-                    return MESA_FORMAT_RGBA8888_REV;
                 case GL_FLOAT:
                     return MESA_FORMAT_RGBA_FLOAT32;
+                case GL_UNSIGNED_SHORT_5_5_5_1:
+                    return MESA_FORMAT_RGBA5551;
+                case GL_UNSIGNED_INT_8_8_8_8:
+                    return MESA_FORMAT_RGBA8888;
+                case GL_UNSIGNED_BYTE:
+                case GL_UNSIGNED_INT_8_8_8_8_REV:
+                    return MESA_FORMAT_RGBA8888_REV;
+            }
+            break;
+        case GL_BGRA:
+            switch (type) {
                 case GL_UNSIGNED_SHORT_4_4_4_4:
-                    return MESA_FORMAT_ARGB4444;
+                    return MESA_FORMAT_ARGB4444_REV;
                 case GL_UNSIGNED_SHORT_4_4_4_4_REV:
                     return MESA_FORMAT_ARGB4444;
                 case GL_UNSIGNED_SHORT_5_5_5_1:
-                    return MESA_FORMAT_RGBA5551;
-                case GL_UNSIGNED_SHORT_1_5_5_5_REV:
                     return MESA_FORMAT_ARGB1555_REV;
+                case GL_UNSIGNED_SHORT_1_5_5_5_REV:
+                    return MESA_FORMAT_ARGB1555;
                 case GL_UNSIGNED_INT_8_8_8_8:
-                    return MESA_FORMAT_ARGB8888;
-                case GL_UNSIGNED_INT_8_8_8_8_REV:
                     return MESA_FORMAT_ARGB8888_REV;
+                case GL_UNSIGNED_BYTE:
+                case GL_UNSIGNED_INT_8_8_8_8_REV:
+                    return MESA_FORMAT_ARGB8888;
+
             }
             break;
     }
-- 
cgit v1.2.3


From 18ecf41835059d4506402641833e7911d7de3ec4 Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Sat, 13 Mar 2010 17:28:33 +0100
Subject: r300: blits for small dst pitch work just fine

---
 src/mesa/drivers/dri/r300/r300_blit.c | 6 ------
 1 file changed, 6 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/r300/r300_blit.c b/src/mesa/drivers/dri/r300/r300_blit.c
index d870c7f852..fa60628a5e 100644
--- a/src/mesa/drivers/dri/r300/r300_blit.c
+++ b/src/mesa/drivers/dri/r300/r300_blit.c
@@ -582,12 +582,6 @@ unsigned r300_blit(GLcontext *ctx,
     if (dst_pitch % 2 > 0)
         ++dst_pitch;
 
-    /* Rendering to small buffer doesn't work.
-     * Looks like a hw limitation.
-     */
-    if (dst_pitch < 32)
-        return 0;
-
     /* Need to clamp the region size to make sure
      * we don't read outside of the source buffer
      * or write outside of the destination buffer.
-- 
cgit v1.2.3


From abc847c20da92e52f29da40c6dd014f5caf46d8b Mon Sep 17 00:00:00 2001
From: Maciej Cencora <m.cencora@gmail.com>
Date: Sat, 13 Mar 2010 17:33:48 +0100
Subject: radeon: add some debuging info for glCopyTex(Sub)Image

---
 src/mesa/drivers/dri/radeon/radeon_tex_copy.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/radeon/radeon_tex_copy.c b/src/mesa/drivers/dri/radeon/radeon_tex_copy.c
index fb6f2e56af..29fd31ac23 100644
--- a/src/mesa/drivers/dri/radeon/radeon_tex_copy.c
+++ b/src/mesa/drivers/dri/radeon/radeon_tex_copy.c
@@ -28,6 +28,7 @@
 #include "radeon_common.h"
 #include "radeon_texture.h"
 
+#include "main/enums.h"
 #include "main/image.h"
 #include "main/teximage.h"
 #include "main/texstate.h"
@@ -183,6 +184,10 @@ radeonCopyTexImage2D(GLcontext *ctx, GLenum target, GLint level,
     return;
 
 fail:
+    radeon_print(RADEON_FALLBACKS, RADEON_NORMAL,
+                 "Falling back to sw for glCopyTexImage2D (internalFormat %s, border %d)\n",
+                 _mesa_lookup_enum_by_nr(internalFormat), border);
+
     _mesa_meta_CopyTexImage2D(ctx, target, level, internalFormat, x, y,
                               width, height, border);
 }
@@ -201,7 +206,8 @@ radeonCopyTexSubImage2D(GLcontext *ctx, GLenum target, GLint level,
                              radeon_tex_obj(texObj), (radeon_texture_image *)texImage,
                              xoffset, yoffset, x, y, width, height)) {
 
-       //DEBUG_FALLBACKS
+        radeon_print(RADEON_FALLBACKS, RADEON_NORMAL,
+                     "Falling back to sw for glCopyTexSubImage2D\n");
 
         _mesa_meta_CopyTexSubImage2D(ctx, target, level,
                                      xoffset, yoffset, x, y, width, height);
-- 
cgit v1.2.3


From 6c8e5151f14bc642e3995a42ad0f90f407c04d5c Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Thu, 11 Mar 2010 18:04:02 +0200
Subject: glapi: organize arch-specific code by arch

---
 src/mesa/glapi/glapi_entrypoint.c | 69 ++++++++++++++++++++++++++++-----------
 1 file changed, 50 insertions(+), 19 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glapi_entrypoint.c b/src/mesa/glapi/glapi_entrypoint.c
index 5e6e5995f2..7fffd2986f 100644
--- a/src/mesa/glapi/glapi_entrypoint.c
+++ b/src/mesa/glapi/glapi_entrypoint.c
@@ -65,7 +65,7 @@ get_entrypoint_address(GLuint functionOffset)
 #endif
 
 
-#if defined(PTHREADS) || defined(GLX_USE_TLS)
+#if defined(USE_X86_ASM)
 
 /**
  * Perform platform-specific GL API entry-point fixups.
@@ -73,7 +73,7 @@ get_entrypoint_address(GLuint functionOffset)
 static void
 init_glapi_relocs( void )
 {
-#if defined(USE_X86_ASM) && defined(GLX_USE_TLS) && !defined(GLX_X86_READONLY_TEXT)
+#if defined(GLX_USE_TLS) && !defined(GLX_X86_READONLY_TEXT)
     extern unsigned long _x86_get_dispatch(void);
     char run_time_patch[] = {
        0x65, 0xa1, 0, 0, 0, 0 /* movl %gs:0,%eax */
@@ -88,8 +88,16 @@ init_glapi_relocs( void )
 	curr_func += DISPATCH_FUNCTION_SIZE;
     }
 #endif
-#ifdef USE_SPARC_ASM
-    extern void __glapi_sparc_icache_flush(unsigned int *);
+}
+
+#elif defined(USE_SPARC_ASM)
+
+extern void __glapi_sparc_icache_flush(unsigned int *);
+
+static void
+init_glapi_relocs( void )
+{
+#if defined(PTHREADS) || defined(GLX_USE_TLS)
     static const unsigned int template[] = {
 #ifdef GLX_USE_TLS
 	0x05000000, /* sethi %hi(_glapi_tls_Dispatch), %g2 */
@@ -155,7 +163,7 @@ init_glapi_relocs( void )
     int idx;
 #endif
 
-#if defined(GLX_USE_TLS)
+#ifdef GLX_USE_TLS
     code[0] = template[0] | (dispatch >> 10);
     code[1] = template[1];
     __glapi_sparc_icache_flush(&code[0]);
@@ -215,24 +223,25 @@ init_glapi_relocs( void )
 #endif
 }
 
+#else
+
+static void
+init_glapi_relocs( void ) { }
+
+#endif /* USE_*_ASM */
+
+
 void
 init_glapi_relocs_once( void )
 {
+#if defined(PTHREADS) || defined(GLX_USE_TLS)
    static pthread_once_t once_control = PTHREAD_ONCE_INIT;
    pthread_once( & once_control, init_glapi_relocs );
+#endif
 }
 
-#else
 
-void
-init_glapi_relocs_once( void ) { }
-
-#endif /* defined(PTHREADS) || defined(GLX_USE_TLS) */
-
-
-#ifdef USE_SPARC_ASM
-extern void __glapi_sparc_icache_flush(unsigned int *);
-#endif
+#if defined(USE_X86_ASM)
 
 /**
  * Generate a dispatch function (entrypoint) which jumps through
@@ -242,7 +251,6 @@ extern void __glapi_sparc_icache_flush(unsigned int *);
 _glapi_proc
 generate_entrypoint(GLuint functionOffset)
 {
-#if defined(USE_X86_ASM)
    /* 32 is chosen as something of a magic offset.  For x86, the dispatch
     * at offset 32 is the first one where the offset in the
     * "jmp OFFSET*4(%eax)" can't be encoded in a single byte.
@@ -258,8 +266,13 @@ generate_entrypoint(GLuint functionOffset)
    }
 
    return (_glapi_proc) code;
+}
+
 #elif defined(USE_SPARC_ASM)
 
+_glapi_proc
+generate_entrypoint(GLuint functionOffset)
+{
 #if defined(PTHREADS) || defined(GLX_USE_TLS)
    static const unsigned int template[] = {
       0x07000000, /* sethi %hi(0), %g3 */
@@ -287,13 +300,21 @@ generate_entrypoint(GLuint functionOffset)
    }
    return (_glapi_proc) code;
 #endif
+}
 
 #else
+
+_glapi_proc
+generate_entrypoint(GLuint functionOffset)
+{
    (void) functionOffset;
    return NULL;
-#endif /* USE_*_ASM */
 }
 
+#endif /* USE_*_ASM */
+
+
+#if defined(USE_X86_ASM)
 
 /**
  * This function inserts a new dispatch offset into the assembly language
@@ -302,7 +323,6 @@ generate_entrypoint(GLuint functionOffset)
 void
 fill_in_entrypoint_offset(_glapi_proc entrypoint, GLuint offset)
 {
-#if defined(USE_X86_ASM)
    GLubyte * const code = (GLubyte *) entrypoint;
 
 #if DISPATCH_FUNCTION_SIZE == 32
@@ -315,17 +335,28 @@ fill_in_entrypoint_offset(_glapi_proc entrypoint, GLuint offset)
 #else
 # error Invalid DISPATCH_FUNCTION_SIZE!
 #endif
+}
 
 #elif defined(USE_SPARC_ASM)
+
+void
+fill_in_entrypoint_offset(_glapi_proc entrypoint, GLuint offset)
+{
    unsigned int *code = (unsigned int *) entrypoint;
+
    code[0] &= ~0x3fffff;
    code[0] |= (offset * sizeof(void *)) & 0x3fffff;
    __glapi_sparc_icache_flush(&code[0]);
+}
+
 #else
 
+void
+fill_in_entrypoint_offset(_glapi_proc entrypoint, GLuint offset)
+{
    /* an unimplemented architecture */
    (void) entrypoint;
    (void) offset;
+}
 
 #endif /* USE_*_ASM */
-}
-- 
cgit v1.2.3


From 0ed0114de9f057e928124bada7289a4496a6d35f Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Thu, 11 Mar 2010 18:04:02 +0200
Subject: glapi: organize arch-specific code by arch (2)

---
 src/mesa/glapi/glapi_entrypoint.c | 154 ++++++++++++++++++--------------------
 1 file changed, 73 insertions(+), 81 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glapi_entrypoint.c b/src/mesa/glapi/glapi_entrypoint.c
index 7fffd2986f..9bc3878354 100644
--- a/src/mesa/glapi/glapi_entrypoint.c
+++ b/src/mesa/glapi/glapi_entrypoint.c
@@ -90,6 +90,55 @@ init_glapi_relocs( void )
 #endif
 }
 
+
+/**
+ * Generate a dispatch function (entrypoint) which jumps through
+ * the given slot number (offset) in the current dispatch table.
+ * We need assembly language in order to accomplish this.
+ */
+_glapi_proc
+generate_entrypoint(GLuint functionOffset)
+{
+   /* 32 is chosen as something of a magic offset.  For x86, the dispatch
+    * at offset 32 is the first one where the offset in the
+    * "jmp OFFSET*4(%eax)" can't be encoded in a single byte.
+    */
+   const GLubyte * const template_func = gl_dispatch_functions_start 
+     + (DISPATCH_FUNCTION_SIZE * 32);
+   GLubyte * const code = (GLubyte *) malloc(DISPATCH_FUNCTION_SIZE);
+
+
+   if ( code != NULL ) {
+      (void) memcpy(code, template_func, DISPATCH_FUNCTION_SIZE);
+      fill_in_entrypoint_offset( (_glapi_proc) code, functionOffset );
+   }
+
+   return (_glapi_proc) code;
+}
+
+
+/**
+ * This function inserts a new dispatch offset into the assembly language
+ * stub that was generated with the preceeding function.
+ */
+void
+fill_in_entrypoint_offset(_glapi_proc entrypoint, GLuint offset)
+{
+   GLubyte * const code = (GLubyte *) entrypoint;
+
+#if DISPATCH_FUNCTION_SIZE == 32
+   *((unsigned int *)(code + 11)) = 4 * offset;
+   *((unsigned int *)(code + 22)) = 4 * offset;
+#elif DISPATCH_FUNCTION_SIZE == 16 && defined( GLX_USE_TLS )
+   *((unsigned int *)(code +  8)) = 4 * offset;
+#elif DISPATCH_FUNCTION_SIZE == 16
+   *((unsigned int *)(code +  7)) = 4 * offset;
+#else
+# error Invalid DISPATCH_FUNCTION_SIZE!
+#endif
+}
+
+
 #elif defined(USE_SPARC_ASM)
 
 extern void __glapi_sparc_icache_flush(unsigned int *);
@@ -223,52 +272,6 @@ init_glapi_relocs( void )
 #endif
 }
 
-#else
-
-static void
-init_glapi_relocs( void ) { }
-
-#endif /* USE_*_ASM */
-
-
-void
-init_glapi_relocs_once( void )
-{
-#if defined(PTHREADS) || defined(GLX_USE_TLS)
-   static pthread_once_t once_control = PTHREAD_ONCE_INIT;
-   pthread_once( & once_control, init_glapi_relocs );
-#endif
-}
-
-
-#if defined(USE_X86_ASM)
-
-/**
- * Generate a dispatch function (entrypoint) which jumps through
- * the given slot number (offset) in the current dispatch table.
- * We need assembly language in order to accomplish this.
- */
-_glapi_proc
-generate_entrypoint(GLuint functionOffset)
-{
-   /* 32 is chosen as something of a magic offset.  For x86, the dispatch
-    * at offset 32 is the first one where the offset in the
-    * "jmp OFFSET*4(%eax)" can't be encoded in a single byte.
-    */
-   const GLubyte * const template_func = gl_dispatch_functions_start 
-     + (DISPATCH_FUNCTION_SIZE * 32);
-   GLubyte * const code = (GLubyte *) malloc(DISPATCH_FUNCTION_SIZE);
-
-
-   if ( code != NULL ) {
-      (void) memcpy(code, template_func, DISPATCH_FUNCTION_SIZE);
-      fill_in_entrypoint_offset( (_glapi_proc) code, functionOffset );
-   }
-
-   return (_glapi_proc) code;
-}
-
-#elif defined(USE_SPARC_ASM)
 
 _glapi_proc
 generate_entrypoint(GLuint functionOffset)
@@ -302,54 +305,33 @@ generate_entrypoint(GLuint functionOffset)
 #endif
 }
 
-#else
 
-_glapi_proc
-generate_entrypoint(GLuint functionOffset)
+void
+fill_in_entrypoint_offset(_glapi_proc entrypoint, GLuint offset)
 {
-   (void) functionOffset;
-   return NULL;
-}
+   unsigned int *code = (unsigned int *) entrypoint;
 
-#endif /* USE_*_ASM */
+   code[0] &= ~0x3fffff;
+   code[0] |= (offset * sizeof(void *)) & 0x3fffff;
+   __glapi_sparc_icache_flush(&code[0]);
+}
 
 
-#if defined(USE_X86_ASM)
+#else /* USE_*_ASM */
 
-/**
- * This function inserts a new dispatch offset into the assembly language
- * stub that was generated with the preceeding function.
- */
-void
-fill_in_entrypoint_offset(_glapi_proc entrypoint, GLuint offset)
+static void
+init_glapi_relocs( void )
 {
-   GLubyte * const code = (GLubyte *) entrypoint;
-
-#if DISPATCH_FUNCTION_SIZE == 32
-   *((unsigned int *)(code + 11)) = 4 * offset;
-   *((unsigned int *)(code + 22)) = 4 * offset;
-#elif DISPATCH_FUNCTION_SIZE == 16 && defined( GLX_USE_TLS )
-   *((unsigned int *)(code +  8)) = 4 * offset;
-#elif DISPATCH_FUNCTION_SIZE == 16
-   *((unsigned int *)(code +  7)) = 4 * offset;
-#else
-# error Invalid DISPATCH_FUNCTION_SIZE!
-#endif
 }
 
-#elif defined(USE_SPARC_ASM)
 
-void
-fill_in_entrypoint_offset(_glapi_proc entrypoint, GLuint offset)
+_glapi_proc
+generate_entrypoint(GLuint functionOffset)
 {
-   unsigned int *code = (unsigned int *) entrypoint;
-
-   code[0] &= ~0x3fffff;
-   code[0] |= (offset * sizeof(void *)) & 0x3fffff;
-   __glapi_sparc_icache_flush(&code[0]);
+   (void) functionOffset;
+   return NULL;
 }
 
-#else
 
 void
 fill_in_entrypoint_offset(_glapi_proc entrypoint, GLuint offset)
@@ -360,3 +342,13 @@ fill_in_entrypoint_offset(_glapi_proc entrypoint, GLuint offset)
 }
 
 #endif /* USE_*_ASM */
+
+
+void
+init_glapi_relocs_once( void )
+{
+#if defined(PTHREADS) || defined(GLX_USE_TLS)
+   static pthread_once_t once_control = PTHREAD_ONCE_INIT;
+   pthread_once( & once_control, init_glapi_relocs );
+#endif
+}
-- 
cgit v1.2.3


From 9a649c8eaa38b5f8f5a89c2571ed66a6f51daeba Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Thu, 11 Mar 2010 18:04:03 +0200
Subject: glapi: more organize code by arch

It seems that x86-64 with tls will fail to compile or load due to a missining
gl_dispatch_functions_start symbol. Not changing though, since this is how it
used to be and cannot test.
---
 src/mesa/glapi/glapi_priv.h | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glapi_priv.h b/src/mesa/glapi/glapi_priv.h
index 7cd81ee8dc..a8516f71a3 100644
--- a/src/mesa/glapi/glapi_priv.h
+++ b/src/mesa/glapi/glapi_priv.h
@@ -52,15 +52,21 @@ extern _glapi_proc
 get_entrypoint_address(GLuint functionOffset);
 
 
-#if defined(USE_X64_64_ASM) && defined(GLX_USE_TLS)
-# define DISPATCH_FUNCTION_SIZE  16
-#elif defined(USE_X86_ASM)
-# if defined(THREADS) && !defined(GLX_USE_TLS)
+#if defined(USE_X86_ASM)
+# if defined(GLX_USE_TLS)
+#  define DISPATCH_FUNCTION_SIZE  16
+# elif defined(THREADS)
 #  define DISPATCH_FUNCTION_SIZE  32
 # else
 #  define DISPATCH_FUNCTION_SIZE  16
 # endif
 #endif
 
+#if defined(USE_X64_64_ASM)
+# if defined(GLX_USE_TLS)
+#  define DISPATCH_FUNCTION_SIZE  16
+# endif
+#endif
+
 
 #endif
-- 
cgit v1.2.3


From 8fd7ee1815dd5880f94f13d88225d7be6f549ae6 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Thu, 11 Mar 2010 18:04:03 +0200
Subject: glapi: this one should be by THREAD

---
 src/mesa/glapi/glapi_entrypoint.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/glapi/glapi_entrypoint.c b/src/mesa/glapi/glapi_entrypoint.c
index 9bc3878354..3256867b16 100644
--- a/src/mesa/glapi/glapi_entrypoint.c
+++ b/src/mesa/glapi/glapi_entrypoint.c
@@ -126,15 +126,13 @@ fill_in_entrypoint_offset(_glapi_proc entrypoint, GLuint offset)
 {
    GLubyte * const code = (GLubyte *) entrypoint;
 
-#if DISPATCH_FUNCTION_SIZE == 32
+#if defined(GLX_USE_TLS)
+   *((unsigned int *)(code +  8)) = 4 * offset;
+#elif defined(THREADS)
    *((unsigned int *)(code + 11)) = 4 * offset;
    *((unsigned int *)(code + 22)) = 4 * offset;
-#elif DISPATCH_FUNCTION_SIZE == 16 && defined( GLX_USE_TLS )
-   *((unsigned int *)(code +  8)) = 4 * offset;
-#elif DISPATCH_FUNCTION_SIZE == 16
-   *((unsigned int *)(code +  7)) = 4 * offset;
 #else
-# error Invalid DISPATCH_FUNCTION_SIZE!
+   *((unsigned int *)(code +  7)) = 4 * offset;
 #endif
 }
 
-- 
cgit v1.2.3


From 41eab95b3bc29a4fe6fd08b7f1f80cef5bdc097f Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Thu, 11 Mar 2010 18:04:03 +0200
Subject: glapi: exec_malloc for dispatch stubs

---
 src/mesa/SConscript               |   1 +
 src/mesa/glapi/glapi_entrypoint.c |   4 +-
 src/mesa/glapi/glapi_execmem.c    | 127 ++++++++++++++++++++++++++++++++++++++
 src/mesa/glapi/glapi_getproc.c    |   6 --
 src/mesa/glapi/glapi_priv.h       |  25 ++++++++
 src/mesa/sources.mak              |   1 +
 6 files changed, 156 insertions(+), 8 deletions(-)
 create mode 100644 src/mesa/glapi/glapi_execmem.c

(limited to 'src/mesa')

diff --git a/src/mesa/SConscript b/src/mesa/SConscript
index e80ec5ee88..86da6f58bd 100644
--- a/src/mesa/SConscript
+++ b/src/mesa/SConscript
@@ -250,6 +250,7 @@ if env['platform'] != 'winddk':
 		'glapi/glapi.c',
 		'glapi/glapi_dispatch.c',
 		'glapi/glapi_entrypoint.c',
+		'glapi/glapi_execmem.c',
 		'glapi/glapi_getproc.c',
 		'glapi/glapi_nop.c',
 		'glapi/glthread.c',
diff --git a/src/mesa/glapi/glapi_entrypoint.c b/src/mesa/glapi/glapi_entrypoint.c
index 3256867b16..c4f43f66a1 100644
--- a/src/mesa/glapi/glapi_entrypoint.c
+++ b/src/mesa/glapi/glapi_entrypoint.c
@@ -105,7 +105,7 @@ generate_entrypoint(GLuint functionOffset)
     */
    const GLubyte * const template_func = gl_dispatch_functions_start 
      + (DISPATCH_FUNCTION_SIZE * 32);
-   GLubyte * const code = (GLubyte *) malloc(DISPATCH_FUNCTION_SIZE);
+   GLubyte * const code = (GLubyte *) _glapi_exec_malloc(DISPATCH_FUNCTION_SIZE);
 
 
    if ( code != NULL ) {
@@ -288,7 +288,7 @@ generate_entrypoint(GLuint functionOffset)
    extern unsigned int __glapi_sparc_pthread_stub;
    unsigned long call_dest = (unsigned long ) &__glapi_sparc_pthread_stub;
 #endif
-   unsigned int *code = (unsigned int *) malloc(sizeof(template));
+   unsigned int *code = (unsigned int *) _glapi_exec_malloc(sizeof(template));
    if (code) {
       code[0] = template[0] | (functionOffset & 0x3fffff);
       code[1] = template[1];
diff --git a/src/mesa/glapi/glapi_execmem.c b/src/mesa/glapi/glapi_execmem.c
new file mode 100644
index 0000000000..6a1fac597f
--- /dev/null
+++ b/src/mesa/glapi/glapi_execmem.c
@@ -0,0 +1,127 @@
+/*
+ * Mesa 3-D graphics library
+ * Version:  6.5
+ *
+ * Copyright (C) 1999-2005  Brian Paul   All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+
+/**
+ * \file glapi_execmem.c
+ *
+ * Function for allocating executable memory for dispatch stubs.
+ *
+ * Copied from main/execmem.c and simplified for dispatch stubs.
+ */
+
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#include "glapi/mesa.h"
+#else
+#include "main/compiler.h"
+#endif
+
+#include "glapi/glthread.h"
+
+
+#if defined(__linux__) || defined(__OpenBSD__) || defined(_NetBSD__) || defined(__sun)
+
+#include <unistd.h>
+#include <sys/mman.h>
+
+#ifdef MESA_SELINUX
+#include <selinux/selinux.h>
+#endif
+
+
+#ifndef MAP_ANONYMOUS
+#define MAP_ANONYMOUS MAP_ANON
+#endif
+
+
+#define EXEC_MAP_SIZE (4*1024)
+
+_glthread_DECLARE_STATIC_MUTEX(exec_mutex);
+
+static unsigned int head = 0;
+
+static unsigned char *exec_mem = NULL;
+
+
+/*
+ * Dispatch stubs are of fixed size and never freed. Thus, we do not need to
+ * overlay a heap, we just mmap a page and manage through an index.
+ */
+
+static int
+init_map(void)
+{
+#ifdef MESA_SELINUX
+   if (is_selinux_enabled()) {
+      if (!security_get_boolean_active("allow_execmem") ||
+	  !security_get_boolean_pending("allow_execmem"))
+         return 0;
+   }
+#endif
+
+   if (!exec_mem)
+      exec_mem = mmap(NULL, EXEC_MAP_SIZE, PROT_EXEC | PROT_READ | PROT_WRITE,
+		      MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+
+   return (exec_mem != MAP_FAILED);
+}
+
+
+void *
+_glapi_exec_malloc(unsigned int size)
+{
+   void *addr = NULL;
+
+   _glthread_LOCK_MUTEX(exec_mutex);
+
+   if (!init_map())
+      goto bail;
+
+   /* free space check, assumes no integer overflow */
+   if (head + size > EXEC_MAP_SIZE)
+      goto bail;
+
+   /* allocation, assumes proper addr and size alignement */
+   addr = exec_mem + head;
+   head += size;
+
+bail:
+   _glthread_UNLOCK_MUTEX(exec_mutex);
+
+   return addr;
+}
+
+
+#else
+
+void *
+_glapi_exec_malloc(unsigned int size)
+{
+   return malloc(size);
+}
+
+
+#endif
diff --git a/src/mesa/glapi/glapi_getproc.c b/src/mesa/glapi/glapi_getproc.c
index 295657875d..c73e8dd3b0 100644
--- a/src/mesa/glapi/glapi_getproc.c
+++ b/src/mesa/glapi/glapi_getproc.c
@@ -200,12 +200,6 @@ struct _glapi_function {
 };
 
 
-/*
- * Number of extension functions which we can dynamically add at runtime.
- */
-#define MAX_EXTENSION_FUNCS 300
-
-
 static struct _glapi_function ExtEntryTable[MAX_EXTENSION_FUNCS];
 static GLuint NumExtEntryPoints = 0;
 
diff --git a/src/mesa/glapi/glapi_priv.h b/src/mesa/glapi/glapi_priv.h
index a8516f71a3..0e2de460f2 100644
--- a/src/mesa/glapi/glapi_priv.h
+++ b/src/mesa/glapi/glapi_priv.h
@@ -28,6 +28,9 @@
 
 #include "glthread.h"
 
+
+/* getproc */
+
 extern void
 _glapi_check_table_not_null(const struct _glapi_table *table);
 
@@ -36,6 +39,14 @@ extern void
 _glapi_check_table(const struct _glapi_table *table);
 
 
+/* execmem */
+
+extern void *
+_glapi_exec_malloc(GLuint size);
+
+
+/* entrypoint */
+
 extern void
 init_glapi_relocs_once(void);
 
@@ -52,6 +63,9 @@ extern _glapi_proc
 get_entrypoint_address(GLuint functionOffset);
 
 
+/**
+ * Size (in bytes) of dispatch function (entrypoint).
+ */
 #if defined(USE_X86_ASM)
 # if defined(GLX_USE_TLS)
 #  define DISPATCH_FUNCTION_SIZE  16
@@ -69,4 +83,15 @@ get_entrypoint_address(GLuint functionOffset);
 #endif
 
 
+/**
+ * Number of extension functions which we can dynamically add at runtime.
+ *
+ * Number of extension functions is also subject to the size of backing exec
+ * mem we allocate. For the common case of dispatch stubs with size 16 bytes,
+ * the two limits will be hit simultaneously. For larger dispatch function
+ * sizes, MAX_EXTENSION_FUNCS is effectively reduced.
+ */
+#define MAX_EXTENSION_FUNCS 256
+
+
 #endif
diff --git a/src/mesa/sources.mak b/src/mesa/sources.mak
index 74885548e5..d59e24de1f 100644
--- a/src/mesa/sources.mak
+++ b/src/mesa/sources.mak
@@ -89,6 +89,7 @@ GLAPI_SOURCES = \
 	glapi/glapi.c \
 	glapi/glapi_dispatch.c \
 	glapi/glapi_entrypoint.c \
+	glapi/glapi_execmem.c \
 	glapi/glapi_getproc.c \
 	glapi/glapi_nop.c \
 	glapi/glthread.c
-- 
cgit v1.2.3


From 06ebc46e65d7dea6f146db85150021814d2439bf Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Sun, 14 Mar 2010 11:36:45 +0200
Subject: dri: add dri_sw.c helper

This is dri_util.c stripped from the drm-specific bits and will be used for
both classic and gallium swrast_dri.so
---
 src/mesa/drivers/dri/common/dri_sw.c | 267 +++++++++++++++++++++++++++++++++++
 src/mesa/drivers/dri/common/dri_sw.h | 115 +++++++++++++++
 2 files changed, 382 insertions(+)
 create mode 100644 src/mesa/drivers/dri/common/dri_sw.c
 create mode 100644 src/mesa/drivers/dri/common/dri_sw.h

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/common/dri_sw.c b/src/mesa/drivers/dri/common/dri_sw.c
new file mode 100644
index 0000000000..4b87a7f32f
--- /dev/null
+++ b/src/mesa/drivers/dri/common/dri_sw.c
@@ -0,0 +1,267 @@
+/*
+ * Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
+ * All Rights Reserved.
+ * Copyright 2010 George Sapountzis <gsapountzis@gmail.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file dri_sw.c
+ *
+ * DRISW utility functions, i.e. dri_util.c stripped from drm-specific bits.
+ */
+
+#include "dri_sw.h"
+#include "utils.h"
+
+
+/**
+ * Screen functions
+ */
+
+static void
+setupLoaderExtensions(__DRIscreen *psp,
+		      const __DRIextension **extensions)
+{
+    int i;
+
+    for (i = 0; extensions[i]; i++) {
+	if (strcmp(extensions[i]->name, __DRI_SWRAST_LOADER) == 0)
+	    psp->swrast_loader = (__DRIswrastLoaderExtension *) extensions[i];
+    }
+}
+
+static __DRIscreen *
+driCreateNewScreen(int scrn, const __DRIextension **extensions,
+		   const __DRIconfig ***driver_configs, void *data)
+{
+    static const __DRIextension *emptyExtensionList[] = { NULL };
+    __DRIscreen *psp;
+
+    (void) data;
+
+    psp = CALLOC_STRUCT(__DRIscreenRec);
+    if (!psp)
+	return NULL;
+
+    setupLoaderExtensions(psp, extensions);
+
+    psp->extensions = emptyExtensionList;
+    psp->myNum = scrn;
+
+    *driver_configs = driDriverAPI.InitScreen(psp);
+
+    if (*driver_configs == NULL) {
+	FREE(psp);
+	return NULL;
+    }
+
+    return psp;
+}
+
+static void driDestroyScreen(__DRIscreen *psp)
+{
+    if (psp) {
+	driDriverAPI.DestroyScreen(psp);
+
+	FREE(psp);
+    }
+}
+
+static const __DRIextension **driGetExtensions(__DRIscreen *psp)
+{
+    return psp->extensions;
+}
+
+
+/**
+ * Context functions
+ */
+
+static __DRIcontext *
+driCreateNewContext(__DRIscreen *psp, const __DRIconfig *config,
+		    __DRIcontext *shared, void *data)
+{
+    __DRIcontext *pcp;
+    void * const shareCtx = (shared != NULL) ? &shared->Base : NULL;
+
+    pcp = CALLOC_STRUCT(__DRIcontextRec);
+    if (!pcp)
+	return NULL;
+
+    pcp->loaderPrivate = data;
+
+    pcp->driScreenPriv = psp;
+    pcp->driDrawablePriv = NULL;
+    pcp->driReadablePriv = NULL;
+
+    if (!driDriverAPI.CreateContext(&config->modes, pcp, shareCtx)) {
+	FREE(pcp);
+	return NULL;
+    }
+
+    return pcp;
+}
+
+static void
+driDestroyContext(__DRIcontext *pcp)
+{
+    if (pcp) {
+	driDriverAPI.DestroyContext(pcp);
+	FREE(pcp);
+    }
+}
+
+static int
+driCopyContext(__DRIcontext *dst, __DRIcontext *src, unsigned long mask)
+{
+    return GL_FALSE;
+}
+
+static void dri_get_drawable(__DRIdrawable *pdp);
+static void dri_put_drawable(__DRIdrawable *pdp);
+
+static int driBindContext(__DRIcontext *pcp,
+			  __DRIdrawable *pdp,
+			  __DRIdrawable *prp)
+{
+    /* Bind the drawable to the context */
+    if (pcp) {
+	pcp->driDrawablePriv = pdp;
+	pcp->driReadablePriv = prp;
+	if (pdp) {
+	    dri_get_drawable(pdp);
+	}
+	if ( prp && pdp != prp ) {
+	    dri_get_drawable(prp);
+	}
+    }
+
+    return driDriverAPI.MakeCurrent(pcp, pdp, prp);
+}
+
+static int driUnbindContext(__DRIcontext *pcp)
+{
+    __DRIdrawable *pdp;
+    __DRIdrawable *prp;
+
+    if (pcp == NULL)
+	return GL_FALSE;
+
+    pdp = pcp->driDrawablePriv;
+    prp = pcp->driReadablePriv;
+
+    /* already unbound */
+    if (!pdp && !prp)
+	return GL_TRUE;
+
+    driDriverAPI.UnbindContext(pcp);
+
+    dri_put_drawable(pdp);
+
+    if (prp != pdp) {
+	dri_put_drawable(prp);
+    }
+
+    pcp->driDrawablePriv = NULL;
+    pcp->driReadablePriv = NULL;
+
+    return GL_TRUE;
+}
+
+
+/**
+ * Drawable functions
+ */
+
+static void dri_get_drawable(__DRIdrawable *pdp)
+{
+    pdp->refcount++;
+}
+
+static void dri_put_drawable(__DRIdrawable *pdp)
+{
+    if (pdp) {
+	pdp->refcount--;
+	if (pdp->refcount)
+	    return;
+
+	driDriverAPI.DestroyBuffer(pdp);
+
+	FREE(pdp);
+    }
+}
+
+static __DRIdrawable *
+driCreateNewDrawable(__DRIscreen *psp,
+		     const __DRIconfig *config, void *data)
+{
+    __DRIdrawable *pdp;
+
+    pdp = CALLOC_STRUCT(__DRIdrawableRec);
+    if (!pdp)
+	return NULL;
+
+    pdp->loaderPrivate = data;
+
+    pdp->driScreenPriv = psp;
+
+    dri_get_drawable(pdp);
+
+    if (!driDriverAPI.CreateBuffer(psp, pdp, &config->modes, GL_FALSE)) {
+	FREE(pdp);
+	return NULL;
+    }
+
+    return pdp;
+}
+
+static void
+driDestroyDrawable(__DRIdrawable *pdp)
+{
+    dri_put_drawable(pdp);
+}
+
+static void driSwapBuffers(__DRIdrawable *pdp)
+{
+    driDriverAPI.SwapBuffers(pdp);
+}
+
+const __DRIcoreExtension driCoreExtension = {
+    { __DRI_CORE, __DRI_CORE_VERSION },
+    NULL, /* driCreateNewScreen */
+    driDestroyScreen,
+    driGetExtensions,
+    driGetConfigAttrib,
+    driIndexConfigAttrib,
+    NULL, /* driCreateNewDrawable */
+    driDestroyDrawable,
+    driSwapBuffers,
+    driCreateNewContext,
+    driCopyContext,
+    driDestroyContext,
+    driBindContext,
+    driUnbindContext
+};
+
+const __DRIswrastExtension driSWRastExtension = {
+    { __DRI_SWRAST, __DRI_SWRAST_VERSION },
+    driCreateNewScreen,
+    driCreateNewDrawable
+};
diff --git a/src/mesa/drivers/dri/common/dri_sw.h b/src/mesa/drivers/dri/common/dri_sw.h
new file mode 100644
index 0000000000..b7257b14a2
--- /dev/null
+++ b/src/mesa/drivers/dri/common/dri_sw.h
@@ -0,0 +1,115 @@
+/*
+ * Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
+ * All Rights Reserved.
+ * Copyright 2010 George Sapountzis <gsapountzis@gmail.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+
+#ifndef _DRI_SW_H
+#define _DRI_SW_H
+
+#include <GL/gl.h>
+#include <GL/internal/dri_interface.h>
+#include "main/mtypes.h"
+
+
+/**
+ * Extensions
+ */
+extern const __DRIcoreExtension driCoreExtension;
+extern const __DRIswrastExtension driSWRastExtension;
+
+
+/**
+ * Data types
+ */
+struct __DRIscreenRec {
+    int myNum;
+
+    int fd;
+
+    void *private;
+
+    const __DRIextension **extensions;
+
+    const __DRIswrastLoaderExtension *swrast_loader;
+};
+
+struct __DRIcontextRec {
+
+    GLcontext Base;
+
+    void *loaderPrivate;
+
+    __DRIdrawable *driDrawablePriv;
+
+    __DRIdrawable *driReadablePriv;
+
+    __DRIscreen *driScreenPriv;
+};
+
+struct __DRIdrawableRec {
+
+    GLframebuffer Base;
+
+    void *loaderPrivate;
+
+    __DRIscreen *driScreenPriv;
+
+    int refcount;
+
+    /* scratch row for optimized front-buffer rendering */
+    char *row;
+};
+
+
+/**
+ * Driver callback functions
+ */
+struct __DriverAPIRec {
+    const __DRIconfig **(*InitScreen) (__DRIscreen * priv);
+
+    void (*DestroyScreen)(__DRIscreen *driScrnPriv);
+
+    GLboolean (*CreateContext)(const __GLcontextModes *glVis,
+                               __DRIcontext *driContextPriv,
+                               void *sharedContextPrivate);
+
+    void (*DestroyContext)(__DRIcontext *driContextPriv);
+
+    GLboolean (*CreateBuffer)(__DRIscreen *driScrnPriv,
+                              __DRIdrawable *driDrawPriv,
+                              const __GLcontextModes *glVis,
+                              GLboolean pixmapBuffer);
+
+    void (*DestroyBuffer)(__DRIdrawable *driDrawPriv);
+
+    void (*SwapBuffers)(__DRIdrawable *driDrawPriv);
+
+    GLboolean (*MakeCurrent)(__DRIcontext *driContextPriv,
+                             __DRIdrawable *driDrawPriv,
+                             __DRIdrawable *driReadPriv);
+
+    GLboolean (*UnbindContext)(__DRIcontext *driContextPriv);
+};
+
+extern const struct __DriverAPIRec driDriverAPI;
+
+#endif /* _DRI_SW_H */
-- 
cgit v1.2.3


From 6e376485c10896229f7bfaf5b0cce9c8b67f61b1 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Sun, 14 Mar 2010 11:36:45 +0200
Subject: dri/swrast: port to dri_sw

---
 src/mesa/drivers/dri/swrast/Makefile      |   3 +-
 src/mesa/drivers/dri/swrast/swrast.c      | 249 ++++++++++++------------------
 src/mesa/drivers/dri/swrast/swrast_priv.h |  28 +---
 3 files changed, 100 insertions(+), 180 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/swrast/Makefile b/src/mesa/drivers/dri/swrast/Makefile
index 771169c1ff..cc59eefdb2 100644
--- a/src/mesa/drivers/dri/swrast/Makefile
+++ b/src/mesa/drivers/dri/swrast/Makefile
@@ -17,7 +17,8 @@ ASM_SOURCES =
 
 SWRAST_COMMON_SOURCES = \
 	../../common/driverfuncs.c \
-	../common/utils.c
+	../common/utils.c \
+	../common/dri_sw.c
 
 include ../Makefile.template
 
diff --git a/src/mesa/drivers/dri/swrast/swrast.c b/src/mesa/drivers/dri/swrast/swrast.c
index 03c672ecf1..8c858ab2da 100644
--- a/src/mesa/drivers/dri/swrast/swrast.c
+++ b/src/mesa/drivers/dri/swrast/swrast.c
@@ -54,17 +54,9 @@
  * Screen and config-related functions
  */
 
-static void
-setupLoaderExtensions(__DRIscreen *psp,
-		      const __DRIextension **extensions)
-{
-    int i;
-
-    for (i = 0; extensions[i]; i++) {
-	if (strcmp(extensions[i]->name, __DRI_SWRAST_LOADER) == 0)
-	    psp->swrast_loader = (__DRIswrastLoaderExtension *) extensions[i];
-    }
-}
+static const __DRIextension *dri_screen_extensions[] = {
+    NULL
+};
 
 static __DRIconfig **
 swrastFillInModes(__DRIscreen *psp,
@@ -143,26 +135,14 @@ swrastFillInModes(__DRIscreen *psp,
     return configs;
 }
 
-static __DRIscreen *
-driCreateNewScreen(int scrn, const __DRIextension **extensions,
-		   const __DRIconfig ***driver_configs, void *data)
+static const __DRIconfig **
+dri_init_screen(__DRIscreen * psp)
 {
-    static const __DRIextension *emptyExtensionList[] = { NULL };
-    __DRIscreen *psp;
     __DRIconfig **configs8, **configs16, **configs24, **configs32;
 
-    (void) data;
-
     TRACE;
 
-    psp = calloc(1, sizeof(*psp));
-    if (!psp)
-	return NULL;
-
-    setupLoaderExtensions(psp, extensions);
-
-    psp->num = scrn;
-    psp->extensions = emptyExtensionList;
+    psp->extensions = dri_screen_extensions;
 
     configs8  = swrastFillInModes(psp,  8,  8, 0, 1);
     configs16 = swrastFillInModes(psp, 16, 16, 0, 1);
@@ -171,28 +151,15 @@ driCreateNewScreen(int scrn, const __DRIextension **extensions,
 
     configs16 = driConcatConfigs(configs8, configs16);
     configs24 = driConcatConfigs(configs16, configs24);
-    *driver_configs = (const __DRIconfig **)
-       driConcatConfigs(configs24, configs32);
-
-    driInitExtensions( NULL, NULL, GL_FALSE );
-
-    return psp;
-}
-
-static void driDestroyScreen(__DRIscreen *psp)
-{
-    TRACE;
+    configs32 = driConcatConfigs(configs24, configs32);
 
-    if (psp) {
-	free(psp);
-    }
+    return (const __DRIconfig **)configs32;
 }
 
-static const __DRIextension **driGetExtensions(__DRIscreen *psp)
+static void
+dri_destroy_screen(__DRIscreen * sPriv)
 {
     TRACE;
-
-    return psp->extensions;
 }
 
 
@@ -336,94 +303,95 @@ swrast_new_renderbuffer(const GLvisual *visual, GLboolean front)
     return xrb;
 }
 
-static __DRIdrawable *
-driCreateNewDrawable(__DRIscreen *screen,
-		     const __DRIconfig *config, void *data)
+static GLboolean
+dri_create_buffer(__DRIscreen * sPriv,
+		  __DRIdrawable * dPriv,
+		  const __GLcontextModes * visual, GLboolean isPixmap)
 {
-    __DRIdrawable *buf;
+    GLframebuffer *fb;
     struct swrast_renderbuffer *frontrb, *backrb;
 
     TRACE;
 
-    buf = calloc(1, sizeof *buf);
-    if (!buf)
-	return NULL;
-
-    buf->loaderPrivate = data;
+    fb = &dPriv->Base;
 
-    buf->driScreenPriv = screen;
-
-    buf->row = malloc(MAX_WIDTH * 4);
+    dPriv->row = malloc(MAX_WIDTH * 4);
 
     /* basic framebuffer setup */
-    _mesa_initialize_window_framebuffer(&buf->Base, &config->modes);
+    _mesa_initialize_window_framebuffer(fb, visual);
 
     /* add front renderbuffer */
-    frontrb = swrast_new_renderbuffer(&config->modes, GL_TRUE);
-    _mesa_add_renderbuffer(&buf->Base, BUFFER_FRONT_LEFT, &frontrb->Base);
+    frontrb = swrast_new_renderbuffer(visual, GL_TRUE);
+    _mesa_add_renderbuffer(fb, BUFFER_FRONT_LEFT, &frontrb->Base);
 
     /* add back renderbuffer */
-    if (config->modes.doubleBufferMode) {
-	backrb = swrast_new_renderbuffer(&config->modes, GL_FALSE);
-	_mesa_add_renderbuffer(&buf->Base, BUFFER_BACK_LEFT, &backrb->Base);
+    if (visual->doubleBufferMode) {
+	backrb = swrast_new_renderbuffer(visual, GL_FALSE);
+	_mesa_add_renderbuffer(fb, BUFFER_BACK_LEFT, &backrb->Base);
     }
 
     /* add software renderbuffers */
-    _mesa_add_soft_renderbuffers(&buf->Base,
+    _mesa_add_soft_renderbuffers(fb,
 				 GL_FALSE, /* color */
-				 config->modes.haveDepthBuffer,
-				 config->modes.haveStencilBuffer,
-				 config->modes.haveAccumBuffer,
+				 visual->haveDepthBuffer,
+				 visual->haveStencilBuffer,
+				 visual->haveAccumBuffer,
 				 GL_FALSE, /* alpha */
 				 GL_FALSE /* aux bufs */);
 
-    return buf;
+    return GL_TRUE;
 }
 
 static void
-driDestroyDrawable(__DRIdrawable *buf)
+dri_destroy_buffer(__DRIdrawable * dPriv)
 {
     TRACE;
 
-    if (buf) {
-	struct gl_framebuffer *fb = &buf->Base;
+    if (dPriv) {
+	GLframebuffer *fb;
+
+	free(dPriv->row);
 
-	free(buf->row);
+	fb = &dPriv->Base;
 
 	fb->DeletePending = GL_TRUE;
 	_mesa_reference_framebuffer(&fb, NULL);
     }
 }
 
-static void driSwapBuffers(__DRIdrawable *buf)
+static void
+dri_swap_buffers(__DRIdrawable * dPriv)
 {
-    GET_CURRENT_CONTEXT(ctx);
+    __DRIscreen *sPriv = dPriv->driScreenPriv;
 
-    struct swrast_renderbuffer *frontrb =
-	swrast_renderbuffer(buf->Base.Attachment[BUFFER_FRONT_LEFT].Renderbuffer);
-    struct swrast_renderbuffer *backrb =
-	swrast_renderbuffer(buf->Base.Attachment[BUFFER_BACK_LEFT].Renderbuffer);
+    GET_CURRENT_CONTEXT(ctx);
 
-    __DRIscreen *screen = buf->driScreenPriv;
+    GLframebuffer *fb;
+    struct swrast_renderbuffer *frontrb, *backrb;
 
     TRACE;
 
+    fb = &dPriv->Base;
+
+    frontrb = swrast_renderbuffer(fb->Attachment[BUFFER_FRONT_LEFT].Renderbuffer);
+    backrb = swrast_renderbuffer(fb->Attachment[BUFFER_BACK_LEFT].Renderbuffer);
+
     /* check for signle-buffered */
     if (backrb == NULL)
 	return;
 
     /* check if swapping currently bound buffer */
-    if (ctx && ctx->DrawBuffer == &(buf->Base)) {
+    if (ctx && ctx->DrawBuffer == fb) {
 	/* flush pending rendering */
 	_mesa_notifySwapBuffers(ctx);
     }
 
-    screen->swrast_loader->putImage(buf, __DRI_SWRAST_IMAGE_OP_SWAP,
-				    0, 0,
-				    frontrb->Base.Width,
-				    frontrb->Base.Height,
-				    backrb->Base.Data,
-				    buf->loaderPrivate);
+    sPriv->swrast_loader->putImage(dPriv, __DRI_SWRAST_IMAGE_OP_SWAP,
+				   0, 0,
+				   frontrb->Base.Width,
+				   frontrb->Base.Height,
+				   backrb->Base.Data,
+				   dPriv->loaderPrivate);
 }
 
 
@@ -434,13 +402,13 @@ static void driSwapBuffers(__DRIdrawable *buf)
 static void
 get_window_size( GLframebuffer *fb, GLsizei *w, GLsizei *h )
 {
-    __DRIdrawable *buf = swrast_drawable(fb);
-    __DRIscreen *screen = buf->driScreenPriv;
+    __DRIdrawable *dPriv = swrast_drawable(fb);
+    __DRIscreen *sPriv = dPriv->driScreenPriv;
     int x, y;
 
-    screen->swrast_loader->getDrawableInfo(buf,
-					   &x, &y, w, h,
-					   buf->loaderPrivate);
+    sPriv->swrast_loader->getDrawableInfo(dPriv,
+					  &x, &y, w, h,
+					  dPriv->loaderPrivate);
 }
 
 static void
@@ -502,36 +470,28 @@ swrast_init_driver_functions(struct dd_function_table *driver)
  * Context-related functions.
  */
 
-static __DRIcontext *
-driCreateNewContext(__DRIscreen *screen, const __DRIconfig *config,
-		    __DRIcontext *shared, void *data)
+static GLboolean
+dri_create_context(const __GLcontextModes * visual,
+		   __DRIcontext * cPriv, void *sharedContextPrivate)
 {
-    __DRIcontext *ctx;
     GLcontext *mesaCtx;
+    GLcontext *sharedCtx;
     struct dd_function_table functions;
 
     TRACE;
 
-    ctx = calloc(1, sizeof *ctx);
-    if (!ctx)
-	return NULL;
-
-    ctx->loaderPrivate = data;
-
-    ctx->driScreenPriv = screen;
-
     /* build table of device driver functions */
     _mesa_init_driver_functions(&functions);
     swrast_init_driver_functions(&functions);
 
-    if (!_mesa_initialize_context(&ctx->Base, &config->modes,
-				  shared ? &shared->Base : NULL,
-				  &functions, (void *) ctx)) {
-      free(ctx);
-      return NULL;
+    sharedCtx = sharedContextPrivate;
+
+    /* basic context setup */
+    if (!_mesa_initialize_context(&cPriv->Base, visual, sharedCtx, &functions, (void *) cPriv)) {
+      return GL_FALSE;
     }
 
-    mesaCtx = &ctx->Base;
+    mesaCtx = &cPriv->Base;
 
     /* do bounds checking to prevent segfaults and server crashes! */
     mesaCtx->Const.CheckArrayBounds = GL_TRUE;
@@ -558,17 +518,20 @@ driCreateNewContext(__DRIscreen *screen, const __DRIconfig *config,
 
     _mesa_meta_init(mesaCtx);
 
-    return ctx;
+    driInitExtensions( mesaCtx, NULL, GL_FALSE );
+
+    return GL_TRUE;
 }
 
 static void
-driDestroyContext(__DRIcontext *ctx)
+dri_destroy_context(__DRIcontext * cPriv)
 {
     GLcontext *mesaCtx;
     TRACE;
 
-    if (ctx) {
-	mesaCtx = &ctx->Base;
+    if (cPriv) {
+	mesaCtx = &cPriv->Base;
+
         _mesa_meta_free(mesaCtx);
 	_swsetup_DestroyContext( mesaCtx );
 	_swrast_DestroyContext( mesaCtx );
@@ -578,31 +541,23 @@ driDestroyContext(__DRIcontext *ctx)
     }
 }
 
-static int
-driCopyContext(__DRIcontext *dst, __DRIcontext *src, unsigned long mask)
-{
-    TRACE;
-
-    _mesa_copy_context(&src->Base, &dst->Base, mask);
-    return GL_TRUE;
-}
-
-static int driBindContext(__DRIcontext *ctx,
-			  __DRIdrawable *draw,
-			  __DRIdrawable *read)
+static GLboolean
+dri_make_current(__DRIcontext * cPriv,
+		 __DRIdrawable * driDrawPriv,
+		 __DRIdrawable * driReadPriv)
 {
     GLcontext *mesaCtx;
     GLframebuffer *mesaDraw;
     GLframebuffer *mesaRead;
     TRACE;
 
-    if (ctx) {
-	if (!draw || !read)
+    if (cPriv) {
+	if (!driDrawPriv || !driReadPriv)
 	    return GL_FALSE;
 
-	mesaCtx = &ctx->Base;
-	mesaDraw = &draw->Base;
-	mesaRead = &read->Base;
+	mesaCtx = &cPriv->Base;
+	mesaDraw = &driDrawPriv->Base;
+	mesaRead = &driReadPriv->Base;
 
 	/* check for same context and buffer */
 	if (mesaCtx == _mesa_get_current_context()
@@ -614,7 +569,7 @@ static int driBindContext(__DRIcontext *ctx,
 	_glapi_check_multithread();
 
 	swrast_check_and_update_window_size(mesaCtx, mesaDraw);
-	if (read != draw)
+	if (mesaRead != mesaDraw)
 	    swrast_check_and_update_window_size(mesaCtx, mesaRead);
 
 	_mesa_make_current( mesaCtx,
@@ -629,35 +584,25 @@ static int driBindContext(__DRIcontext *ctx,
     return GL_TRUE;
 }
 
-static int driUnbindContext(__DRIcontext *ctx)
+static GLboolean
+dri_unbind_context(__DRIcontext * cPriv)
 {
     TRACE;
-    (void) ctx;
+    (void) cPriv;
     return GL_TRUE;
 }
 
 
-static const __DRIcoreExtension driCoreExtension = {
-    { __DRI_CORE, __DRI_CORE_VERSION },
-    NULL, /* driCreateNewScreen */
-    driDestroyScreen,
-    driGetExtensions,
-    driGetConfigAttrib,
-    driIndexConfigAttrib,
-    NULL, /* driCreateNewDrawable */
-    driDestroyDrawable,
-    driSwapBuffers,
-    driCreateNewContext,
-    driCopyContext,
-    driDestroyContext,
-    driBindContext,
-    driUnbindContext
-};
-
-static const __DRIswrastExtension driSWRastExtension = {
-    { __DRI_SWRAST, __DRI_SWRAST_VERSION },
-    driCreateNewScreen,
-    driCreateNewDrawable
+const struct __DriverAPIRec driDriverAPI = {
+    .InitScreen = dri_init_screen,
+    .DestroyScreen = dri_destroy_screen,
+    .CreateContext = dri_create_context,
+    .DestroyContext = dri_destroy_context,
+    .CreateBuffer = dri_create_buffer,
+    .DestroyBuffer = dri_destroy_buffer,
+    .SwapBuffers = dri_swap_buffers,
+    .MakeCurrent = dri_make_current,
+    .UnbindContext = dri_unbind_context,
 };
 
 /* This is the table of extensions that the loader will dlsym() for. */
diff --git a/src/mesa/drivers/dri/swrast/swrast_priv.h b/src/mesa/drivers/dri/swrast/swrast_priv.h
index 4722007f95..c83c64b487 100644
--- a/src/mesa/drivers/dri/swrast/swrast_priv.h
+++ b/src/mesa/drivers/dri/swrast/swrast_priv.h
@@ -34,6 +34,7 @@
 #include <GL/gl.h>
 #include <GL/internal/dri_interface.h>
 #include "main/mtypes.h"
+#include "dri_sw.h"
 
 
 /**
@@ -58,33 +59,6 @@
 /**
  * Data types
  */
-struct __DRIscreenRec {
-    int num;
-
-    const __DRIextension **extensions;
-
-    const __DRIswrastLoaderExtension *swrast_loader;
-};
-
-struct __DRIcontextRec {
-    GLcontext Base;
-
-    void *loaderPrivate;
-
-    __DRIscreen *driScreenPriv;
-};
-
-struct __DRIdrawableRec {
-    GLframebuffer Base;
-
-    void *loaderPrivate;
-
-    __DRIscreen *driScreenPriv;
-
-    /* scratch row for optimized front-buffer rendering */
-    char *row;
-};
-
 struct swrast_renderbuffer {
     struct gl_renderbuffer Base;
 
-- 
cgit v1.2.3


From cf8a1caa231b748d3ba7c776ab076ad3de99e963 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Sun, 14 Mar 2010 11:36:45 +0200
Subject: dri/swrast: port to dri_sw (context)

---
 src/mesa/drivers/dri/common/dri_sw.c          |  2 +-
 src/mesa/drivers/dri/common/dri_sw.h          |  2 +-
 src/mesa/drivers/dri/swrast/swrast.c          | 41 ++++++++++++++++++++-------
 src/mesa/drivers/dri/swrast/swrast_priv.h     | 27 ++++++++++++++----
 src/mesa/drivers/dri/swrast/swrast_spantemp.h |  8 +++---
 5 files changed, 58 insertions(+), 22 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/common/dri_sw.c b/src/mesa/drivers/dri/common/dri_sw.c
index 4b87a7f32f..b7f9036f47 100644
--- a/src/mesa/drivers/dri/common/dri_sw.c
+++ b/src/mesa/drivers/dri/common/dri_sw.c
@@ -99,7 +99,7 @@ driCreateNewContext(__DRIscreen *psp, const __DRIconfig *config,
 		    __DRIcontext *shared, void *data)
 {
     __DRIcontext *pcp;
-    void * const shareCtx = (shared != NULL) ? &shared->Base : NULL;
+    void * const shareCtx = (shared != NULL) ? shared->driverPrivate : NULL;
 
     pcp = CALLOC_STRUCT(__DRIcontextRec);
     if (!pcp)
diff --git a/src/mesa/drivers/dri/common/dri_sw.h b/src/mesa/drivers/dri/common/dri_sw.h
index b7257b14a2..93e9624654 100644
--- a/src/mesa/drivers/dri/common/dri_sw.h
+++ b/src/mesa/drivers/dri/common/dri_sw.h
@@ -54,7 +54,7 @@ struct __DRIscreenRec {
 
 struct __DRIcontextRec {
 
-    GLcontext Base;
+    void *driverPrivate;
 
     void *loaderPrivate;
 
diff --git a/src/mesa/drivers/dri/swrast/swrast.c b/src/mesa/drivers/dri/swrast/swrast.c
index 8c858ab2da..8273439fef 100644
--- a/src/mesa/drivers/dri/swrast/swrast.c
+++ b/src/mesa/drivers/dri/swrast/swrast.c
@@ -474,25 +474,36 @@ static GLboolean
 dri_create_context(const __GLcontextModes * visual,
 		   __DRIcontext * cPriv, void *sharedContextPrivate)
 {
-    GLcontext *mesaCtx;
-    GLcontext *sharedCtx;
+    struct dri_context *ctx = NULL;
+    struct dri_context *share = (struct dri_context *)sharedContextPrivate;
+    GLcontext *mesaCtx = NULL;
+    GLcontext *sharedCtx = NULL;
     struct dd_function_table functions;
 
     TRACE;
 
+    ctx = CALLOC_STRUCT(dri_context);
+    if (ctx == NULL)
+	goto context_fail;
+
+    cPriv->driverPrivate = ctx;
+    ctx->cPriv = cPriv;
+
     /* build table of device driver functions */
     _mesa_init_driver_functions(&functions);
     swrast_init_driver_functions(&functions);
 
-    sharedCtx = sharedContextPrivate;
+    if (share) {
+	sharedCtx = &share->Base;
+    }
+
+    mesaCtx = &ctx->Base;
 
     /* basic context setup */
-    if (!_mesa_initialize_context(&cPriv->Base, visual, sharedCtx, &functions, (void *) cPriv)) {
-      return GL_FALSE;
+    if (!_mesa_initialize_context(mesaCtx, visual, sharedCtx, &functions, (void *) cPriv)) {
+	goto context_fail;
     }
 
-    mesaCtx = &cPriv->Base;
-
     /* do bounds checking to prevent segfaults and server crashes! */
     mesaCtx->Const.CheckArrayBounds = GL_TRUE;
 
@@ -521,16 +532,24 @@ dri_create_context(const __GLcontextModes * visual,
     driInitExtensions( mesaCtx, NULL, GL_FALSE );
 
     return GL_TRUE;
+
+context_fail:
+
+    FREE(ctx);
+
+    return GL_FALSE;
 }
 
 static void
 dri_destroy_context(__DRIcontext * cPriv)
 {
-    GLcontext *mesaCtx;
     TRACE;
 
     if (cPriv) {
-	mesaCtx = &cPriv->Base;
+	struct dri_context *ctx = dri_context(cPriv);
+	GLcontext *mesaCtx;
+
+	mesaCtx = &ctx->Base;
 
         _mesa_meta_free(mesaCtx);
 	_swsetup_DestroyContext( mesaCtx );
@@ -552,10 +571,12 @@ dri_make_current(__DRIcontext * cPriv,
     TRACE;
 
     if (cPriv) {
+	struct dri_context *ctx = dri_context(cPriv);
+
 	if (!driDrawPriv || !driReadPriv)
 	    return GL_FALSE;
 
-	mesaCtx = &cPriv->Base;
+	mesaCtx = &ctx->Base;
 	mesaDraw = &driDrawPriv->Base;
 	mesaRead = &driReadPriv->Base;
 
diff --git a/src/mesa/drivers/dri/swrast/swrast_priv.h b/src/mesa/drivers/dri/swrast/swrast_priv.h
index c83c64b487..130598bbd8 100644
--- a/src/mesa/drivers/dri/swrast/swrast_priv.h
+++ b/src/mesa/drivers/dri/swrast/swrast_priv.h
@@ -59,6 +59,27 @@
 /**
  * Data types
  */
+struct dri_context
+{
+    /* mesa */
+    GLcontext Base;
+
+    /* dri */
+    __DRIcontext *cPriv;
+};
+
+static INLINE struct dri_context *
+dri_context(__DRIcontext * driContextPriv)
+{
+    return (struct dri_context *)driContextPriv->driverPrivate;
+}
+
+static INLINE struct dri_context *
+swrast_context(GLcontext *ctx)
+{
+    return (struct dri_context *) ctx;
+}
+
 struct swrast_renderbuffer {
     struct gl_renderbuffer Base;
 
@@ -68,12 +89,6 @@ struct swrast_renderbuffer {
     GLuint bpp;
 };
 
-static INLINE __DRIcontext *
-swrast_context(GLcontext *ctx)
-{
-    return (__DRIcontext *) ctx;
-}
-
 static INLINE __DRIdrawable *
 swrast_drawable(GLframebuffer *fb)
 {
diff --git a/src/mesa/drivers/dri/swrast/swrast_spantemp.h b/src/mesa/drivers/dri/swrast/swrast_spantemp.h
index 879a0c12e7..c73b785683 100644
--- a/src/mesa/drivers/dri/swrast/swrast_spantemp.h
+++ b/src/mesa/drivers/dri/swrast/swrast_spantemp.h
@@ -39,7 +39,7 @@
 static INLINE void
 PUT_PIXEL( GLcontext *glCtx, GLint x, GLint y, GLubyte *p )
 {
-    __DRIcontext *ctx = swrast_context(glCtx);
+    __DRIcontext *ctx = swrast_context(glCtx)->cPriv;
     __DRIdrawable *draw = swrast_drawable(glCtx->DrawBuffer);
 
     __DRIscreen *screen = ctx->driScreenPriv;
@@ -53,7 +53,7 @@ PUT_PIXEL( GLcontext *glCtx, GLint x, GLint y, GLubyte *p )
 static INLINE void
 GET_PIXEL( GLcontext *glCtx, GLint x, GLint y, GLubyte *p )
 {
-    __DRIcontext *ctx = swrast_context(glCtx);
+    __DRIcontext *ctx = swrast_context(glCtx)->cPriv;
     __DRIdrawable *read = swrast_drawable(glCtx->ReadBuffer);
 
     __DRIscreen *screen = ctx->driScreenPriv;
@@ -65,7 +65,7 @@ GET_PIXEL( GLcontext *glCtx, GLint x, GLint y, GLubyte *p )
 static INLINE void
 PUT_ROW( GLcontext *glCtx, GLint x, GLint y, GLuint n, char *row )
 {
-    __DRIcontext *ctx = swrast_context(glCtx);
+    __DRIcontext *ctx = swrast_context(glCtx)->cPriv;
     __DRIdrawable *draw = swrast_drawable(glCtx->DrawBuffer);
 
     __DRIscreen *screen = ctx->driScreenPriv;
@@ -78,7 +78,7 @@ PUT_ROW( GLcontext *glCtx, GLint x, GLint y, GLuint n, char *row )
 static INLINE void
 GET_ROW( GLcontext *glCtx, GLint x, GLint y, GLuint n, char *row )
 {
-    __DRIcontext *ctx = swrast_context(glCtx);
+    __DRIcontext *ctx = swrast_context(glCtx)->cPriv;
     __DRIdrawable *read = swrast_drawable(glCtx->ReadBuffer);
 
     __DRIscreen *screen = ctx->driScreenPriv;
-- 
cgit v1.2.3


From c1bde793598bcb5d5f8744c290a66ea6586eb29f Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Sun, 14 Mar 2010 11:36:46 +0200
Subject: dri/swrast: port to dri_sw (drawable)

---
 src/mesa/drivers/dri/common/dri_sw.h          |  5 +---
 src/mesa/drivers/dri/swrast/swrast.c          | 39 +++++++++++++++++++++------
 src/mesa/drivers/dri/swrast/swrast_priv.h     | 30 ++++++++++++++++-----
 src/mesa/drivers/dri/swrast/swrast_spantemp.h |  8 +++---
 4 files changed, 60 insertions(+), 22 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/common/dri_sw.h b/src/mesa/drivers/dri/common/dri_sw.h
index 93e9624654..89369a9d00 100644
--- a/src/mesa/drivers/dri/common/dri_sw.h
+++ b/src/mesa/drivers/dri/common/dri_sw.h
@@ -67,16 +67,13 @@ struct __DRIcontextRec {
 
 struct __DRIdrawableRec {
 
-    GLframebuffer Base;
+    void *driverPrivate;
 
     void *loaderPrivate;
 
     __DRIscreen *driScreenPriv;
 
     int refcount;
-
-    /* scratch row for optimized front-buffer rendering */
-    char *row;
 };
 
 
diff --git a/src/mesa/drivers/dri/swrast/swrast.c b/src/mesa/drivers/dri/swrast/swrast.c
index 8273439fef..4450e470c6 100644
--- a/src/mesa/drivers/dri/swrast/swrast.c
+++ b/src/mesa/drivers/dri/swrast/swrast.c
@@ -308,14 +308,24 @@ dri_create_buffer(__DRIscreen * sPriv,
 		  __DRIdrawable * dPriv,
 		  const __GLcontextModes * visual, GLboolean isPixmap)
 {
+    struct dri_drawable *drawable = NULL;
     GLframebuffer *fb;
     struct swrast_renderbuffer *frontrb, *backrb;
 
     TRACE;
 
-    fb = &dPriv->Base;
+    drawable = CALLOC_STRUCT(dri_drawable);
+    if (drawable == NULL)
+	goto drawable_fail;
 
-    dPriv->row = malloc(MAX_WIDTH * 4);
+    dPriv->driverPrivate = drawable;
+    drawable->dPriv = dPriv;
+
+    drawable->row = malloc(MAX_WIDTH * 4);
+    if (drawable->row == NULL)
+	goto drawable_fail;
+
+    fb = &drawable->Base;
 
     /* basic framebuffer setup */
     _mesa_initialize_window_framebuffer(fb, visual);
@@ -340,6 +350,15 @@ dri_create_buffer(__DRIscreen * sPriv,
 				 GL_FALSE /* aux bufs */);
 
     return GL_TRUE;
+
+drawable_fail:
+
+    if (drawable)
+	free(drawable->row);
+
+    FREE(drawable);
+
+    return GL_FALSE;
 }
 
 static void
@@ -348,11 +367,12 @@ dri_destroy_buffer(__DRIdrawable * dPriv)
     TRACE;
 
     if (dPriv) {
+	struct dri_drawable *drawable = dri_drawable(dPriv);
 	GLframebuffer *fb;
 
-	free(dPriv->row);
+	free(drawable->row);
 
-	fb = &dPriv->Base;
+	fb = &drawable->Base;
 
 	fb->DeletePending = GL_TRUE;
 	_mesa_reference_framebuffer(&fb, NULL);
@@ -366,12 +386,13 @@ dri_swap_buffers(__DRIdrawable * dPriv)
 
     GET_CURRENT_CONTEXT(ctx);
 
+    struct dri_drawable *drawable = dri_drawable(dPriv);
     GLframebuffer *fb;
     struct swrast_renderbuffer *frontrb, *backrb;
 
     TRACE;
 
-    fb = &dPriv->Base;
+    fb = &drawable->Base;
 
     frontrb = swrast_renderbuffer(fb->Attachment[BUFFER_FRONT_LEFT].Renderbuffer);
     backrb = swrast_renderbuffer(fb->Attachment[BUFFER_BACK_LEFT].Renderbuffer);
@@ -402,7 +423,7 @@ dri_swap_buffers(__DRIdrawable * dPriv)
 static void
 get_window_size( GLframebuffer *fb, GLsizei *w, GLsizei *h )
 {
-    __DRIdrawable *dPriv = swrast_drawable(fb);
+    __DRIdrawable *dPriv = swrast_drawable(fb)->dPriv;
     __DRIscreen *sPriv = dPriv->driScreenPriv;
     int x, y;
 
@@ -572,13 +593,15 @@ dri_make_current(__DRIcontext * cPriv,
 
     if (cPriv) {
 	struct dri_context *ctx = dri_context(cPriv);
+	struct dri_drawable *draw = dri_drawable(driDrawPriv);
+	struct dri_drawable *read = dri_drawable(driReadPriv);
 
 	if (!driDrawPriv || !driReadPriv)
 	    return GL_FALSE;
 
 	mesaCtx = &ctx->Base;
-	mesaDraw = &driDrawPriv->Base;
-	mesaRead = &driReadPriv->Base;
+	mesaDraw = &draw->Base;
+	mesaRead = &read->Base;
 
 	/* check for same context and buffer */
 	if (mesaCtx == _mesa_get_current_context()
diff --git a/src/mesa/drivers/dri/swrast/swrast_priv.h b/src/mesa/drivers/dri/swrast/swrast_priv.h
index 130598bbd8..8e87f644c3 100644
--- a/src/mesa/drivers/dri/swrast/swrast_priv.h
+++ b/src/mesa/drivers/dri/swrast/swrast_priv.h
@@ -80,6 +80,30 @@ swrast_context(GLcontext *ctx)
     return (struct dri_context *) ctx;
 }
 
+struct dri_drawable
+{
+    /* mesa */
+    GLframebuffer Base;
+
+    /* dri */
+    __DRIdrawable *dPriv;
+
+    /* scratch row for optimized front-buffer rendering */
+    char *row;
+};
+
+static INLINE struct dri_drawable *
+dri_drawable(__DRIdrawable * driDrawPriv)
+{
+    return (struct dri_drawable *)driDrawPriv->driverPrivate;
+}
+
+static INLINE struct dri_drawable *
+swrast_drawable(GLframebuffer *fb)
+{
+    return (struct dri_drawable *) fb;
+}
+
 struct swrast_renderbuffer {
     struct gl_renderbuffer Base;
 
@@ -89,12 +113,6 @@ struct swrast_renderbuffer {
     GLuint bpp;
 };
 
-static INLINE __DRIdrawable *
-swrast_drawable(GLframebuffer *fb)
-{
-    return (__DRIdrawable *) fb;
-}
-
 static INLINE struct swrast_renderbuffer *
 swrast_renderbuffer(struct gl_renderbuffer *rb)
 {
diff --git a/src/mesa/drivers/dri/swrast/swrast_spantemp.h b/src/mesa/drivers/dri/swrast/swrast_spantemp.h
index c73b785683..079726ae4a 100644
--- a/src/mesa/drivers/dri/swrast/swrast_spantemp.h
+++ b/src/mesa/drivers/dri/swrast/swrast_spantemp.h
@@ -40,7 +40,7 @@ static INLINE void
 PUT_PIXEL( GLcontext *glCtx, GLint x, GLint y, GLubyte *p )
 {
     __DRIcontext *ctx = swrast_context(glCtx)->cPriv;
-    __DRIdrawable *draw = swrast_drawable(glCtx->DrawBuffer);
+    __DRIdrawable *draw = swrast_drawable(glCtx->DrawBuffer)->dPriv;
 
     __DRIscreen *screen = ctx->driScreenPriv;
 
@@ -54,7 +54,7 @@ static INLINE void
 GET_PIXEL( GLcontext *glCtx, GLint x, GLint y, GLubyte *p )
 {
     __DRIcontext *ctx = swrast_context(glCtx)->cPriv;
-    __DRIdrawable *read = swrast_drawable(glCtx->ReadBuffer);
+    __DRIdrawable *read = swrast_drawable(glCtx->ReadBuffer)->dPriv;
 
     __DRIscreen *screen = ctx->driScreenPriv;
 
@@ -66,7 +66,7 @@ static INLINE void
 PUT_ROW( GLcontext *glCtx, GLint x, GLint y, GLuint n, char *row )
 {
     __DRIcontext *ctx = swrast_context(glCtx)->cPriv;
-    __DRIdrawable *draw = swrast_drawable(glCtx->DrawBuffer);
+    __DRIdrawable *draw = swrast_drawable(glCtx->DrawBuffer)->dPriv;
 
     __DRIscreen *screen = ctx->driScreenPriv;
 
@@ -79,7 +79,7 @@ static INLINE void
 GET_ROW( GLcontext *glCtx, GLint x, GLint y, GLuint n, char *row )
 {
     __DRIcontext *ctx = swrast_context(glCtx)->cPriv;
-    __DRIdrawable *read = swrast_drawable(glCtx->ReadBuffer);
+    __DRIdrawable *read = swrast_drawable(glCtx->ReadBuffer)->dPriv;
 
     __DRIscreen *screen = ctx->driScreenPriv;
 
-- 
cgit v1.2.3


From e60693efda7826bf26ffb9993c6dfba3b8c8a812 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Sun, 14 Mar 2010 11:36:46 +0200
Subject: dri/swrast: update copyright email

---
 src/mesa/drivers/dri/swrast/swrast.c      | 2 +-
 src/mesa/drivers/dri/swrast/swrast_priv.h | 6 +-----
 src/mesa/drivers/dri/swrast/swrast_span.c | 6 +-----
 3 files changed, 3 insertions(+), 11 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/swrast/swrast.c b/src/mesa/drivers/dri/swrast/swrast.c
index 4450e470c6..e9ca99a86f 100644
--- a/src/mesa/drivers/dri/swrast/swrast.c
+++ b/src/mesa/drivers/dri/swrast/swrast.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2008 George Sapountzis <gsap7@yahoo.gr>
+ * Copyright 2008, 2010 George Sapountzis <gsapountzis@gmail.com>
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
diff --git a/src/mesa/drivers/dri/swrast/swrast_priv.h b/src/mesa/drivers/dri/swrast/swrast_priv.h
index 8e87f644c3..57bd439425 100644
--- a/src/mesa/drivers/dri/swrast/swrast_priv.h
+++ b/src/mesa/drivers/dri/swrast/swrast_priv.h
@@ -3,6 +3,7 @@
  * Version:  7.1
  *
  * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
+ * Copyright 2008, 2010 George Sapountzis <gsapountzis@gmail.com>
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
@@ -22,11 +23,6 @@
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 
-/*
- * Authors:
- *    George Sapountzis <gsap7@yahoo.gr>
- */
-
 
 #ifndef _SWRAST_PRIV_H
 #define _SWRAST_PRIV_H
diff --git a/src/mesa/drivers/dri/swrast/swrast_span.c b/src/mesa/drivers/dri/swrast/swrast_span.c
index 5290dc82b9..c5681e34a9 100644
--- a/src/mesa/drivers/dri/swrast/swrast_span.c
+++ b/src/mesa/drivers/dri/swrast/swrast_span.c
@@ -3,6 +3,7 @@
  * Version:  7.1
  *
  * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
+ * Copyright 2008, 2010 George Sapountzis <gsapountzis@gmail.com>
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
@@ -22,11 +23,6 @@
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 
-/*
- * Authors:
- *    George Sapountzis <gsap7@yahoo.gr>
- */
-
 #include "swrast_priv.h"
 
 #define YFLIP(_xrb, Y) ((_xrb)->Base.Height - (Y) - 1)
-- 
cgit v1.2.3


From e557c2e14f1481abff75af912feb5dce79a65ab8 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Sun, 14 Mar 2010 11:36:46 +0200
Subject: dri/swrast: drop mtypes.h from dri_sw

---
 src/mesa/drivers/dri/common/dri_sw.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/common/dri_sw.h b/src/mesa/drivers/dri/common/dri_sw.h
index 89369a9d00..e353e26b34 100644
--- a/src/mesa/drivers/dri/common/dri_sw.h
+++ b/src/mesa/drivers/dri/common/dri_sw.h
@@ -26,8 +26,8 @@
 #define _DRI_SW_H
 
 #include <GL/gl.h>
+#include <GL/internal/glcore.h>
 #include <GL/internal/dri_interface.h>
-#include "main/mtypes.h"
 
 
 /**
-- 
cgit v1.2.3


From 7a62c60ca960b3a5b27b598a0c2036f38933c8fb Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Sun, 14 Mar 2010 11:36:46 +0200
Subject: dri/swrast: add comment in case it's not clear

---
 src/mesa/drivers/dri/swrast/swrast_priv.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/swrast/swrast_priv.h b/src/mesa/drivers/dri/swrast/swrast_priv.h
index 57bd439425..77670d89a5 100644
--- a/src/mesa/drivers/dri/swrast/swrast_priv.h
+++ b/src/mesa/drivers/dri/swrast/swrast_priv.h
@@ -57,7 +57,7 @@
  */
 struct dri_context
 {
-    /* mesa */
+    /* mesa, base class, must be first */
     GLcontext Base;
 
     /* dri */
@@ -78,7 +78,7 @@ swrast_context(GLcontext *ctx)
 
 struct dri_drawable
 {
-    /* mesa */
+    /* mesa, base class, must be first */
     GLframebuffer Base;
 
     /* dri */
-- 
cgit v1.2.3


From 631a1a9ac8b97dec172205e13e33ef51f28bb1c0 Mon Sep 17 00:00:00 2001
From: George Sapountzis <gsapountzis@gmail.com>
Date: Sun, 14 Mar 2010 11:36:47 +0200
Subject: dri/common: mv __driUtilMessage to utils.c

allows to link with xmlconfig without dri_util, and has nothing drm-specific.
---
 src/mesa/drivers/dri/common/dri_util.c       | 22 ----------------------
 src/mesa/drivers/dri/common/dri_util.h       |  4 ----
 src/mesa/drivers/dri/common/utils.c          | 28 ++++++++++++++++++++++++----
 src/mesa/drivers/dri/common/utils.h          |  3 +++
 src/mesa/drivers/dri/common/xmlconfig.c      |  2 +-
 src/mesa/drivers/dri/mach64/mach64_context.c |  1 +
 6 files changed, 29 insertions(+), 31 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/dri/common/dri_util.c b/src/mesa/drivers/dri/common/dri_util.c
index 75c98825b7..badbb5ff82 100644
--- a/src/mesa/drivers/dri/common/dri_util.c
+++ b/src/mesa/drivers/dri/common/dri_util.c
@@ -47,28 +47,6 @@ const __DRIextension driReadDrawableExtension = {
     __DRI_READ_DRAWABLE, __DRI_READ_DRAWABLE_VERSION
 };
 
-/**
- * Print message to \c stderr if the \c LIBGL_DEBUG environment variable
- * is set. 
- * 
- * Is called from the drivers.
- * 
- * \param f \c printf like format string.
- */
-void
-__driUtilMessage(const char *f, ...)
-{
-    va_list args;
-
-    if (getenv("LIBGL_DEBUG")) {
-        fprintf(stderr, "libGL: ");
-        va_start(args, f);
-        vfprintf(stderr, f, args);
-        va_end(args);
-        fprintf(stderr, "\n");
-    }
-}
-
 GLint
 driIntersectArea( drm_clip_rect_t rect1, drm_clip_rect_t rect2 )
 {
diff --git a/src/mesa/drivers/dri/common/dri_util.h b/src/mesa/drivers/dri/common/dri_util.h
index 99c0f1e442..f63583cebc 100644
--- a/src/mesa/drivers/dri/common/dri_util.h
+++ b/src/mesa/drivers/dri/common/dri_util.h
@@ -551,10 +551,6 @@ struct __DRIscreenRec {
     drmLock *lock;
 };
 
-extern void
-__driUtilMessage(const char *f, ...);
-
-
 extern void
 __driUtilUpdateDrawableInfo(__DRIdrawable *pdp);
 
diff --git a/src/mesa/drivers/dri/common/utils.c b/src/mesa/drivers/dri/common/utils.c
index b85b364c57..0dd879abc9 100644
--- a/src/mesa/drivers/dri/common/utils.c
+++ b/src/mesa/drivers/dri/common/utils.c
@@ -37,6 +37,29 @@
 #include "utils.h"
 
 
+/**
+ * Print message to \c stderr if the \c LIBGL_DEBUG environment variable
+ * is set. 
+ * 
+ * Is called from the drivers.
+ * 
+ * \param f \c printf like format string.
+ */
+void
+__driUtilMessage(const char *f, ...)
+{
+    va_list args;
+
+    if (getenv("LIBGL_DEBUG")) {
+        fprintf(stderr, "libGL: ");
+        va_start(args, f);
+        vfprintf(stderr, f, args);
+        va_end(args);
+        fprintf(stderr, "\n");
+    }
+}
+
+
 unsigned
 driParseDebugString( const char * debug, 
 		     const struct dri_debug_control * control  )
@@ -230,9 +253,6 @@ void driInitSingleExtension( GLcontext * ctx,
 /**
  * Utility function used by drivers to test the verions of other components.
  *
- * If one of the version requirements is not met, a message is logged using
- * \c __driUtilMessage.
- *
  * \param driver_name  Name of the driver.  Used in error messages.
  * \param driActual    Actual DRI version supplied __driCreateNewScreen.
  * \param driExpected  Minimum DRI version required by the driver.
@@ -244,7 +264,7 @@ void driInitSingleExtension( GLcontext * ctx,
  * \returns \c GL_TRUE if all version requirements are met.  Otherwise,
  *          \c GL_FALSE is returned.
  * 
- * \sa __driCreateNewScreen, driCheckDriDdxDrmVersions2, __driUtilMessage
+ * \sa __driCreateNewScreen, driCheckDriDdxDrmVersions2
  *
  * \todo
  * Now that the old \c driCheckDriDdxDrmVersions function is gone, this
diff --git a/src/mesa/drivers/dri/common/utils.h b/src/mesa/drivers/dri/common/utils.h
index 02ca3feb73..de6070c398 100644
--- a/src/mesa/drivers/dri/common/utils.h
+++ b/src/mesa/drivers/dri/common/utils.h
@@ -69,6 +69,9 @@ struct __DRIutilversionRec2 {
     int    patch;        /**< Patch-level. */
 };
 
+extern void
+__driUtilMessage(const char *f, ...);
+
 extern unsigned driParseDebugString( const char * debug,
     const struct dri_debug_control * control );
 
diff --git a/src/mesa/drivers/dri/common/xmlconfig.c b/src/mesa/drivers/dri/common/xmlconfig.c
index 477259ea7e..de4500a39b 100644
--- a/src/mesa/drivers/dri/common/xmlconfig.c
+++ b/src/mesa/drivers/dri/common/xmlconfig.c
@@ -36,7 +36,7 @@
 #include <unistd.h>
 #include <errno.h>
 #include "main/imports.h"
-#include "dri_util.h"
+#include "utils.h"
 #include "xmlconfig.h"
 
 #undef GET_PROGRAM_NAME
diff --git a/src/mesa/drivers/dri/mach64/mach64_context.c b/src/mesa/drivers/dri/mach64/mach64_context.c
index 77e7e53ce0..73b1e08d4b 100644
--- a/src/mesa/drivers/dri/mach64/mach64_context.c
+++ b/src/mesa/drivers/dri/mach64/mach64_context.c
@@ -31,6 +31,7 @@
 
 #include "main/glheader.h"
 #include "main/context.h"
+#include "main/extensions.h"
 #include "main/simple_list.h"
 #include "main/imports.h"
 
-- 
cgit v1.2.3